From f2b214b0dff95d6bb79cbb5b6ff5ba9d90f655c9 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 2 Jan 2008 21:52:27 +0000 Subject: Initial import from www.ecosforge.net --- .project | 11 + zpu/.project | 11 + zpu/COPYING | 12 + zpu/ChangeLog | 11 + zpu/STATUS | 11 + zpu/docs/presentations/zpu.odp | Bin 0 -> 60715 bytes zpu/docs/presentations/zpudemo.odp | Bin 0 -> 222644 bytes zpu/docs/zpupresentation.odp | Bin 0 -> 78518 bytes zpu/docs/zpupresentation.ppt | Bin 0 -> 150016 bytes zpu/docs/zpupresentation_old.odt | Bin 0 -> 126772 bytes zpu/docs/zpuprotoarch.odt | Bin 0 -> 23961 bytes zpu/hdl/example/helloworld.vhd | 12506 +++++++++++++++++++ zpu/hdl/example/io.vhd | 97 + zpu/hdl/example/log.txt | 15 + zpu/hdl/example/sim_fpga_top.vhd | 179 + zpu/hdl/example/simzpu.do | 29 + zpu/hdl/example/zpu_config.vhd | 20 + zpu/hdl/index.html | 47 + zpu/hdl/wishbone/wishbone_pkg.vhd | 52 + zpu/hdl/wishbone/zpu_system.vhd | 71 + zpu/hdl/wishbone/zpu_wb_bridge.vhd | 49 + zpu/hdl/zpu3/src/.cvsignore | 1 + zpu/hdl/zpu3/src/build.xml | 114 + zpu/hdl/zpu3/src/clocks.vhd | 246 + zpu/hdl/zpu3/src/ddr_bridge.vhd | 203 + zpu/hdl/zpu3/src/dmips_ram.vhd | 3824 ++++++ zpu/hdl/zpu3/src/dualport_ram.vhd | 4996 ++++++++ zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd | 5012 ++++++++ zpu/hdl/zpu3/src/helloworld_ram.vhd | 3345 +++++ zpu/hdl/zpu3/src/ic300.bitgen | 27 + zpu/hdl/zpu3/src/ic300.lso | 1 + zpu/hdl/zpu3/src/ic300.ucf | 146 + zpu/hdl/zpu3/src/ic300.vhd | 144 + zpu/hdl/zpu3/src/ic300_config.vhd | 20 + zpu/hdl/zpu3/src/ic300pkg.vhd | 88 + zpu/hdl/zpu3/src/io.vhd | 95 + zpu/hdl/zpu3/src/log.txt | 156 + zpu/hdl/zpu3/src/niltrace.vhd | 26 + zpu/hdl/zpu3/src/sim_fpga_top.vhd | 127 + zpu/hdl/zpu3/src/status.txt | 67 + zpu/hdl/zpu3/src/testlut.vhd | 106 + zpu/hdl/zpu3/src/timer.vhd | 157 + zpu/hdl/zpu3/src/trace.vhd | 80 + zpu/hdl/zpu3/src/txt_util.vhd | 586 + zpu/hdl/zpu3/src/xilinx_dualport.vhd | 1482 +++ zpu/hdl/zpu3/src/xmake.filelist | 5 + zpu/hdl/zpu3/src/xmake.xst | 53 + zpu/hdl/zpu3/src/zpu_config.vhd | 25 + zpu/hdl/zpu3/src/zpu_pipelined.vhd | 852 ++ zpu/hdl/zpu3/src/zpu_top.vhd | 421 + zpu/hdl/zpu3/src/zpu_top_medium.vhd | 768 ++ zpu/hdl/zpu3/src/zpuio.vhd | 180 + zpu/hdl/zpu3/src/zpupkg.vhd | 130 + zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd | 31 + zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd | 213 + .../dummyfpgalib/ddrsdram/simscripts/ddr_tb.do | 17 + .../dummyfpgalib/ddrsdram/simscripts/ddr_top.do | 111 + zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd | 90 + zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd | 301 + zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd | 660 + .../zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd | 1320 ++ zpu/hdl/zpu4/src/.cvsignore | 5 + zpu/hdl/zpu4/src/bram.vhd | 3807 ++++++ zpu/hdl/zpu4/src/bram_dmips.vhd | 3717 ++++++ zpu/hdl/zpu4/src/build.xml | 114 + zpu/hdl/zpu4/src/clocks.vhd | 246 + zpu/hdl/zpu4/src/dmipssmalltrace.do | 26 + zpu/hdl/zpu4/src/dmipstrace.do | 25 + zpu/hdl/zpu4/src/dmipstraceintstack.do | 25 + zpu/hdl/zpu4/src/dram_dmips.vhd | 3702 ++++++ zpu/hdl/zpu4/src/dram_hello.vhd | 3214 +++++ zpu/hdl/zpu4/src/fastdmips.do | 19 + zpu/hdl/zpu4/src/fastdmipsintstack.do | 19 + zpu/hdl/zpu4/src/fastdmipssmall.do | 21 + zpu/hdl/zpu4/src/fastsimzpu.do | 19 + zpu/hdl/zpu4/src/ic300.bitgen | 27 + zpu/hdl/zpu4/src/ic300.lso | 1 + zpu/hdl/zpu4/src/ic300.ucf | 146 + zpu/hdl/zpu4/src/ic300.vhd | 144 + zpu/hdl/zpu4/src/ic300_config.vhd | 26 + zpu/hdl/zpu4/src/ic300pkg.vhd | 88 + zpu/hdl/zpu4/src/io.vhd | 92 + zpu/hdl/zpu4/src/log.txt | 380 + zpu/hdl/zpu4/src/niltrace.vhd | 26 + zpu/hdl/zpu4/src/sim_fpga_top.vhd | 190 + zpu/hdl/zpu4/src/simzpu.do | 23 + zpu/hdl/zpu4/src/simzpu_intstack.do | 23 + zpu/hdl/zpu4/src/status.txt | 109 + zpu/hdl/zpu4/src/testlut.vhd | 114 + zpu/hdl/zpu4/src/timer.vhd | 61 + zpu/hdl/zpu4/src/trace.vhd | 84 + zpu/hdl/zpu4/src/txt_util.vhd | 587 + zpu/hdl/zpu4/src/xmake.filelist | 12 + zpu/hdl/zpu4/src/xmake.filelist.bramsmall | 5 + zpu/hdl/zpu4/src/xmake.xst | 53 + zpu/hdl/zpu4/src/zpu_config.vhd | 16 + zpu/hdl/zpu4/src/zpu_config_fastsim.vhd | 15 + zpu/hdl/zpu4/src/zpu_config_trace.vhd | 15 + zpu/hdl/zpu4/src/zpu_core.vhd | 900 ++ zpu/hdl/zpu4/src/zpu_core_small.vhd | 433 + zpu/hdl/zpu4/src/zpuio.vhd | 256 + zpu/hdl/zpu4/src/zpuio_bram.vhd | 229 + zpu/hdl/zpu4/src/zpupkg.vhd | 168 + zpu/hdl/zpu4/test/dmips/build.sh | 3 + zpu/hdl/zpu4/test/dmips/dmips.bin | Bin 0 -> 14612 bytes zpu/hdl/zpu4/test/dmips/dmips.elf | Bin 0 -> 89778 bytes zpu/hdl/zpu4/test/dmips/dmips.ram | 3507 ++++++ zpu/hdl/zpu4/test/hello/build.sh | 3 + zpu/hdl/zpu4/test/hello/hello.bin | Bin 0 -> 12664 bytes zpu/hdl/zpu4/test/hello/hello.c | 51 + zpu/hdl/zpu4/test/hello/hello.elf | Bin 0 -> 150455 bytes zpu/hdl/zpu4/test/hello/hello.ram | 3165 +++++ zpu/index.html | 20 + zpu/roadshow/roadshow/build/makefirmware.sh | 13 + zpu/roadshow/roadshow/codesize/.cvsignore | 1 + zpu/roadshow/roadshow/codesize/crt0_phi.S | 178 + zpu/roadshow/roadshow/codesize/hello.c | 9 + zpu/roadshow/roadshow/codesize/index.html | 58 + zpu/roadshow/roadshow/codesize/small.c | 9 + zpu/roadshow/roadshow/codesize/small.elf | Bin 0 -> 1577 bytes zpu/roadshow/roadshow/codesize/smallstd.c | 9 + zpu/roadshow/roadshow/dhrystone/.cvsignore | 2 + zpu/roadshow/roadshow/dhrystone/RATIONALE | 361 + zpu/roadshow/roadshow/dhrystone/README_C | 78 + zpu/roadshow/roadshow/dhrystone/VARIATIONS | 157 + zpu/roadshow/roadshow/dhrystone/build.sh | 7 + zpu/roadshow/roadshow/dhrystone/dhry-c | 1779 +++ zpu/roadshow/roadshow/dhrystone/dhry.h | 423 + zpu/roadshow/roadshow/dhrystone/dhry_1.c | 533 + zpu/roadshow/roadshow/dhrystone/dhry_2.c | 192 + zpu/roadshow/roadshow/dhrystone/dhry_c.dif | 141 + zpu/roadshow/roadshow/dhrystone/dhrystone.bin | Bin 0 -> 13028 bytes zpu/roadshow/roadshow/dhrystone/dhrystone.zpu | Bin 0 -> 13069 bytes zpu/roadshow/roadshow/dhrystone/submit.frm | 17 + .../roadshow/ecos/codesize/zpuarmcodesize.htm | 1049 ++ zpu/roadshow/roadshow/ecos/index.html | 145 + zpu/roadshow/roadshow/ecos/repository.tar.bz2 | Bin 0 -> 28572 bytes zpu/roadshow/roadshow/games/.cvsignore | 5 + zpu/roadshow/roadshow/games/build.sh | 7 + zpu/roadshow/roadshow/games/eliza.bin | Bin 0 -> 46920 bytes zpu/roadshow/roadshow/games/eliza.elf | Bin 0 -> 342451 bytes zpu/roadshow/roadshow/games/eliza.zpu | Bin 0 -> 46961 bytes zpu/roadshow/roadshow/games/eliza/eliza.c | 269 + zpu/roadshow/roadshow/games/eliza/parse.c | 719 ++ zpu/roadshow/roadshow/games/eliza/parse.h | 33 + zpu/roadshow/roadshow/games/eliza/response.c | 365 + zpu/roadshow/roadshow/games/eliza/response.h | 41 + zpu/roadshow/roadshow/games/sumeria.bin | Bin 0 -> 42324 bytes zpu/roadshow/roadshow/games/sumeria.c | 444 + zpu/roadshow/roadshow/games/sumeria.zpu | Bin 0 -> 42365 bytes zpu/roadshow/roadshow/helloworld/build.sh | 6 + zpu/roadshow/roadshow/helloworld/test.bin | Bin 0 -> 49836 bytes zpu/roadshow/roadshow/helloworld/test.c | 11 + zpu/roadshow/roadshow/helloworld/test.elf | Bin 0 -> 279826 bytes zpu/roadshow/roadshow/helloworld/test.zpu | Bin 0 -> 262353 bytes zpu/roadshow/roadshow/hwtest/build.sh | 6 + zpu/roadshow/roadshow/hwtest/test.S | 19 + zpu/roadshow/roadshow/hwtest/test.bin | Bin 0 -> 48 bytes zpu/roadshow/roadshow/hwtest/test.elf | Bin 0 -> 1343 bytes zpu/roadshow/roadshow/hwtest/test.zpu | Bin 0 -> 212562 bytes zpu/roadshow/roadshow/images/bootloader.phi | Bin 0 -> 167015 bytes zpu/roadshow/roadshow/images/dhrystone.zpu | Bin 0 -> 13069 bytes zpu/roadshow/roadshow/images/eliza.zpu | Bin 0 -> 46961 bytes zpu/roadshow/roadshow/images/ic300.bit | Bin 0 -> 212463 bytes zpu/roadshow/roadshow/images/net_test.zpu | Bin 0 -> 206210 bytes zpu/roadshow/roadshow/images/sumeria.zpu | Bin 0 -> 42365 bytes zpu/roadshow/roadshow/iss/index.html | 14 + zpu/roadshow/roadshow/iss/simulator.jar | Bin 0 -> 54378 bytes zpu/roadshow/roadshow/net_test/.cvsignore | 8 + zpu/roadshow/roadshow/net_test/http_pages.c | 206 + zpu/roadshow/roadshow/net_test/init.cpp | 52 + zpu/roadshow/roadshow/net_test/makefile | 41 + zpu/roadshow/roadshow/net_test/net_test.ecm | 237 + zpu/roadshow/roadshow/net_test/ping_test.c | 585 + zpu/roadshow/roadshow/pics/GCC_logo.png | Bin 0 -> 23450 bytes zpu/roadshow/roadshow/pics/codesize1.PNG | Bin 0 -> 9329 bytes zpu/roadshow/roadshow/pics/codesize2.PNG | Bin 0 -> 16967 bytes zpu/roadshow/roadshow/pics/ecos.gif | Bin 0 -> 1660 bytes zpu/roadshow/roadshow/pics/elizadebug1.PNG | Bin 0 -> 72126 bytes zpu/roadshow/roadshow/pics/elizadebug2.PNG | Bin 0 -> 67822 bytes zpu/snapshot.sh | 7 + .../current/cdl/opencores_ethermac_drivers.cdl | 149 + zpu/sw/ecos/repository/ecos.db | 128 + zpu/sw/helloworld/gccgdb.PNG | Bin 0 -> 34473 bytes zpu/sw/helloworld/gmon.out | Bin 0 -> 120053 bytes zpu/sw/helloworld/hello.bin | Bin 0 -> 49768 bytes zpu/sw/helloworld/hello.bram | 12441 ++++++++++++++++++ zpu/sw/helloworld/hello.c | 6 + zpu/sw/helloworld/hello.elf | Bin 0 -> 279938 bytes zpu/sw/helloworld/zpusim.PNG | Bin 0 -> 17817 bytes zpu/sw/index.html | 44 + zpu/sw/simulator/.classpath | 6 + zpu/sw/simulator/.project | 17 + .../simulator/.settings/org.eclipse.jdt.core.prefs | 66 + zpu/sw/simulator/ChangeLog | 2 + zpu/sw/simulator/build.xml | 7 + zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java | 109 + .../com/zylin/zpu/simulator/FileTracer.java | 285 + zpu/sw/simulator/com/zylin/zpu/simulator/Host.java | 46 + .../simulator/com/zylin/zpu/simulator/Machine.java | 17 + zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java | 126 + .../com/zylin/zpu/simulator/PhiFeeble.java | 34 + zpu/sw/simulator/com/zylin/zpu/simulator/Sim.java | 62 + .../simulator/com/zylin/zpu/simulator/SimApp.java | 112 + .../com/zylin/zpu/simulator/SimFactory.java | 8 + .../com/zylin/zpu/simulator/Simulator.java | 2063 +++ .../simulator/com/zylin/zpu/simulator/State.java | 9 + .../simulator/com/zylin/zpu/simulator/Tracer.java | 21 + zpu/sw/simulator/com/zylin/zpu/simulator/ZPU.java | 14 + .../com/zylin/zpu/simulator/applet/ZPUApplet.java | 281 + .../simulator/exceptions/BadPacketException.java | 22 + .../zpu/simulator/exceptions/CPUException.java | 23 + .../exceptions/DebuggerBreakpointException.java | 10 + .../simulator/exceptions/EndSessionException.java | 22 + .../simulator/exceptions/GDBServerException.java | 25 + .../exceptions/HardwareWatchPointException.java | 12 + .../exceptions/IllegalInstructionException.java | 23 + .../simulator/exceptions/InterruptException.java | 23 + .../exceptions/MemoryAccessException.java | 23 + .../zpu/simulator/exceptions/NoAckException.java | 22 + .../zpu/simulator/exceptions/TraceException.java | 22 + .../exceptions/UnknownPacketException.java | 10 + .../exceptions/UnsupportedSyscallException.java | 12 + .../com/zylin/zpu/simulator/gdb/GDBServer.java | 609 + .../com/zylin/zpu/simulator/gdb/Packet.java | 455 + .../com/zylin/zpu/simulator/tools/MakeDRAM.java | 39 + .../com/zylin/zpu/simulator/tools/MakeRam.java | 39 + .../com/zylin/zpu/stats/CountSequences.java | 94 + zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java | 17 + .../simulator/com/zylin/zpu/stats/Instruction.java | 62 + .../simulator/com/zylin/zpu/stats/StatKeeper.java | 52 + zpu/sw/simulator/gmon.out | Bin 0 -> 120053 bytes zpu/sw/simulator/zpusim.jar | Bin 0 -> 68039 bytes 233 files changed, 91183 insertions(+) create mode 100644 .project create mode 100644 zpu/.project create mode 100644 zpu/COPYING create mode 100644 zpu/ChangeLog create mode 100644 zpu/STATUS create mode 100644 zpu/docs/presentations/zpu.odp create mode 100644 zpu/docs/presentations/zpudemo.odp create mode 100644 zpu/docs/zpupresentation.odp create mode 100644 zpu/docs/zpupresentation.ppt create mode 100644 zpu/docs/zpupresentation_old.odt create mode 100644 zpu/docs/zpuprotoarch.odt create mode 100644 zpu/hdl/example/helloworld.vhd create mode 100644 zpu/hdl/example/io.vhd create mode 100644 zpu/hdl/example/log.txt create mode 100644 zpu/hdl/example/sim_fpga_top.vhd create mode 100644 zpu/hdl/example/simzpu.do create mode 100644 zpu/hdl/example/zpu_config.vhd create mode 100644 zpu/hdl/index.html create mode 100644 zpu/hdl/wishbone/wishbone_pkg.vhd create mode 100644 zpu/hdl/wishbone/zpu_system.vhd create mode 100644 zpu/hdl/wishbone/zpu_wb_bridge.vhd create mode 100644 zpu/hdl/zpu3/src/.cvsignore create mode 100644 zpu/hdl/zpu3/src/build.xml create mode 100644 zpu/hdl/zpu3/src/clocks.vhd create mode 100644 zpu/hdl/zpu3/src/ddr_bridge.vhd create mode 100644 zpu/hdl/zpu3/src/dmips_ram.vhd create mode 100644 zpu/hdl/zpu3/src/dualport_ram.vhd create mode 100644 zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd create mode 100644 zpu/hdl/zpu3/src/helloworld_ram.vhd create mode 100644 zpu/hdl/zpu3/src/ic300.bitgen create mode 100644 zpu/hdl/zpu3/src/ic300.lso create mode 100644 zpu/hdl/zpu3/src/ic300.ucf create mode 100644 zpu/hdl/zpu3/src/ic300.vhd create mode 100644 zpu/hdl/zpu3/src/ic300_config.vhd create mode 100644 zpu/hdl/zpu3/src/ic300pkg.vhd create mode 100644 zpu/hdl/zpu3/src/io.vhd create mode 100644 zpu/hdl/zpu3/src/log.txt create mode 100644 zpu/hdl/zpu3/src/niltrace.vhd create mode 100644 zpu/hdl/zpu3/src/sim_fpga_top.vhd create mode 100644 zpu/hdl/zpu3/src/status.txt create mode 100644 zpu/hdl/zpu3/src/testlut.vhd create mode 100644 zpu/hdl/zpu3/src/timer.vhd create mode 100644 zpu/hdl/zpu3/src/trace.vhd create mode 100644 zpu/hdl/zpu3/src/txt_util.vhd create mode 100644 zpu/hdl/zpu3/src/xilinx_dualport.vhd create mode 100644 zpu/hdl/zpu3/src/xmake.filelist create mode 100644 zpu/hdl/zpu3/src/xmake.xst create mode 100644 zpu/hdl/zpu3/src/zpu_config.vhd create mode 100644 zpu/hdl/zpu3/src/zpu_pipelined.vhd create mode 100644 zpu/hdl/zpu3/src/zpu_top.vhd create mode 100644 zpu/hdl/zpu3/src/zpu_top_medium.vhd create mode 100644 zpu/hdl/zpu3/src/zpuio.vhd create mode 100644 zpu/hdl/zpu3/src/zpupkg.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd create mode 100644 zpu/hdl/zpu4/src/.cvsignore create mode 100644 zpu/hdl/zpu4/src/bram.vhd create mode 100644 zpu/hdl/zpu4/src/bram_dmips.vhd create mode 100644 zpu/hdl/zpu4/src/build.xml create mode 100644 zpu/hdl/zpu4/src/clocks.vhd create mode 100644 zpu/hdl/zpu4/src/dmipssmalltrace.do create mode 100644 zpu/hdl/zpu4/src/dmipstrace.do create mode 100644 zpu/hdl/zpu4/src/dmipstraceintstack.do create mode 100644 zpu/hdl/zpu4/src/dram_dmips.vhd create mode 100644 zpu/hdl/zpu4/src/dram_hello.vhd create mode 100644 zpu/hdl/zpu4/src/fastdmips.do create mode 100644 zpu/hdl/zpu4/src/fastdmipsintstack.do create mode 100644 zpu/hdl/zpu4/src/fastdmipssmall.do create mode 100644 zpu/hdl/zpu4/src/fastsimzpu.do create mode 100644 zpu/hdl/zpu4/src/ic300.bitgen create mode 100644 zpu/hdl/zpu4/src/ic300.lso create mode 100644 zpu/hdl/zpu4/src/ic300.ucf create mode 100644 zpu/hdl/zpu4/src/ic300.vhd create mode 100644 zpu/hdl/zpu4/src/ic300_config.vhd create mode 100644 zpu/hdl/zpu4/src/ic300pkg.vhd create mode 100644 zpu/hdl/zpu4/src/io.vhd create mode 100644 zpu/hdl/zpu4/src/log.txt create mode 100644 zpu/hdl/zpu4/src/niltrace.vhd create mode 100644 zpu/hdl/zpu4/src/sim_fpga_top.vhd create mode 100644 zpu/hdl/zpu4/src/simzpu.do create mode 100644 zpu/hdl/zpu4/src/simzpu_intstack.do create mode 100644 zpu/hdl/zpu4/src/status.txt create mode 100644 zpu/hdl/zpu4/src/testlut.vhd create mode 100644 zpu/hdl/zpu4/src/timer.vhd create mode 100644 zpu/hdl/zpu4/src/trace.vhd create mode 100644 zpu/hdl/zpu4/src/txt_util.vhd create mode 100644 zpu/hdl/zpu4/src/xmake.filelist create mode 100644 zpu/hdl/zpu4/src/xmake.filelist.bramsmall create mode 100644 zpu/hdl/zpu4/src/xmake.xst create mode 100644 zpu/hdl/zpu4/src/zpu_config.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_config_fastsim.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_config_trace.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_core.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_core_small.vhd create mode 100644 zpu/hdl/zpu4/src/zpuio.vhd create mode 100644 zpu/hdl/zpu4/src/zpuio_bram.vhd create mode 100644 zpu/hdl/zpu4/src/zpupkg.vhd create mode 100644 zpu/hdl/zpu4/test/dmips/build.sh create mode 100644 zpu/hdl/zpu4/test/dmips/dmips.bin create mode 100644 zpu/hdl/zpu4/test/dmips/dmips.elf create mode 100644 zpu/hdl/zpu4/test/dmips/dmips.ram create mode 100644 zpu/hdl/zpu4/test/hello/build.sh create mode 100644 zpu/hdl/zpu4/test/hello/hello.bin create mode 100644 zpu/hdl/zpu4/test/hello/hello.c create mode 100644 zpu/hdl/zpu4/test/hello/hello.elf create mode 100644 zpu/hdl/zpu4/test/hello/hello.ram create mode 100644 zpu/index.html create mode 100644 zpu/roadshow/roadshow/build/makefirmware.sh create mode 100644 zpu/roadshow/roadshow/codesize/.cvsignore create mode 100644 zpu/roadshow/roadshow/codesize/crt0_phi.S create mode 100644 zpu/roadshow/roadshow/codesize/hello.c create mode 100644 zpu/roadshow/roadshow/codesize/index.html create mode 100644 zpu/roadshow/roadshow/codesize/small.c create mode 100644 zpu/roadshow/roadshow/codesize/small.elf create mode 100644 zpu/roadshow/roadshow/codesize/smallstd.c create mode 100644 zpu/roadshow/roadshow/dhrystone/.cvsignore create mode 100644 zpu/roadshow/roadshow/dhrystone/RATIONALE create mode 100644 zpu/roadshow/roadshow/dhrystone/README_C create mode 100644 zpu/roadshow/roadshow/dhrystone/VARIATIONS create mode 100644 zpu/roadshow/roadshow/dhrystone/build.sh create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry-c create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry.h create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry_1.c create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry_2.c create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry_c.dif create mode 100644 zpu/roadshow/roadshow/dhrystone/dhrystone.bin create mode 100644 zpu/roadshow/roadshow/dhrystone/dhrystone.zpu create mode 100644 zpu/roadshow/roadshow/dhrystone/submit.frm create mode 100644 zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm create mode 100644 zpu/roadshow/roadshow/ecos/index.html create mode 100644 zpu/roadshow/roadshow/ecos/repository.tar.bz2 create mode 100644 zpu/roadshow/roadshow/games/.cvsignore create mode 100644 zpu/roadshow/roadshow/games/build.sh create mode 100644 zpu/roadshow/roadshow/games/eliza.bin create mode 100644 zpu/roadshow/roadshow/games/eliza.elf create mode 100644 zpu/roadshow/roadshow/games/eliza.zpu create mode 100644 zpu/roadshow/roadshow/games/eliza/eliza.c create mode 100644 zpu/roadshow/roadshow/games/eliza/parse.c create mode 100644 zpu/roadshow/roadshow/games/eliza/parse.h create mode 100644 zpu/roadshow/roadshow/games/eliza/response.c create mode 100644 zpu/roadshow/roadshow/games/eliza/response.h create mode 100644 zpu/roadshow/roadshow/games/sumeria.bin create mode 100644 zpu/roadshow/roadshow/games/sumeria.c create mode 100644 zpu/roadshow/roadshow/games/sumeria.zpu create mode 100644 zpu/roadshow/roadshow/helloworld/build.sh create mode 100644 zpu/roadshow/roadshow/helloworld/test.bin create mode 100644 zpu/roadshow/roadshow/helloworld/test.c create mode 100644 zpu/roadshow/roadshow/helloworld/test.elf create mode 100644 zpu/roadshow/roadshow/helloworld/test.zpu create mode 100644 zpu/roadshow/roadshow/hwtest/build.sh create mode 100644 zpu/roadshow/roadshow/hwtest/test.S create mode 100644 zpu/roadshow/roadshow/hwtest/test.bin create mode 100644 zpu/roadshow/roadshow/hwtest/test.elf create mode 100644 zpu/roadshow/roadshow/hwtest/test.zpu create mode 100644 zpu/roadshow/roadshow/images/bootloader.phi create mode 100644 zpu/roadshow/roadshow/images/dhrystone.zpu create mode 100644 zpu/roadshow/roadshow/images/eliza.zpu create mode 100644 zpu/roadshow/roadshow/images/ic300.bit create mode 100644 zpu/roadshow/roadshow/images/net_test.zpu create mode 100644 zpu/roadshow/roadshow/images/sumeria.zpu create mode 100644 zpu/roadshow/roadshow/iss/index.html create mode 100644 zpu/roadshow/roadshow/iss/simulator.jar create mode 100644 zpu/roadshow/roadshow/net_test/.cvsignore create mode 100644 zpu/roadshow/roadshow/net_test/http_pages.c create mode 100644 zpu/roadshow/roadshow/net_test/init.cpp create mode 100644 zpu/roadshow/roadshow/net_test/makefile create mode 100644 zpu/roadshow/roadshow/net_test/net_test.ecm create mode 100644 zpu/roadshow/roadshow/net_test/ping_test.c create mode 100644 zpu/roadshow/roadshow/pics/GCC_logo.png create mode 100644 zpu/roadshow/roadshow/pics/codesize1.PNG create mode 100644 zpu/roadshow/roadshow/pics/codesize2.PNG create mode 100644 zpu/roadshow/roadshow/pics/ecos.gif create mode 100644 zpu/roadshow/roadshow/pics/elizadebug1.PNG create mode 100644 zpu/roadshow/roadshow/pics/elizadebug2.PNG create mode 100644 zpu/snapshot.sh create mode 100644 zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl create mode 100644 zpu/sw/ecos/repository/ecos.db create mode 100644 zpu/sw/helloworld/gccgdb.PNG create mode 100644 zpu/sw/helloworld/gmon.out create mode 100644 zpu/sw/helloworld/hello.bin create mode 100644 zpu/sw/helloworld/hello.bram create mode 100644 zpu/sw/helloworld/hello.c create mode 100644 zpu/sw/helloworld/hello.elf create mode 100644 zpu/sw/helloworld/zpusim.PNG create mode 100644 zpu/sw/index.html create mode 100644 zpu/sw/simulator/.classpath create mode 100644 zpu/sw/simulator/.project create mode 100644 zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs create mode 100644 zpu/sw/simulator/ChangeLog create mode 100644 zpu/sw/simulator/build.xml create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Host.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Machine.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/PhiFeeble.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Sim.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/SimApp.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/State.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Tracer.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/ZPU.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/applet/ZPUApplet.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/BadPacketException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/CPUException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/DebuggerBreakpointException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/EndSessionException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/GDBServerException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/HardwareWatchPointException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/IllegalInstructionException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/InterruptException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/MemoryAccessException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/NoAckException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/TraceException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/UnknownPacketException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/UnsupportedSyscallException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/gdb/GDBServer.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeDRAM.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java create mode 100644 zpu/sw/simulator/gmon.out create mode 100644 zpu/sw/simulator/zpusim.jar diff --git a/.project b/.project new file mode 100644 index 0000000..bdcda92 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + oczpu + + + + + + + + diff --git a/zpu/.project b/zpu/.project new file mode 100644 index 0000000..55b1cb8 --- /dev/null +++ b/zpu/.project @@ -0,0 +1,11 @@ + + + zpu + + + + + + + + diff --git a/zpu/COPYING b/zpu/COPYING new file mode 100644 index 0000000..96b27d3 --- /dev/null +++ b/zpu/COPYING @@ -0,0 +1,12 @@ +About ZPU licensing: + +Licensing is not entirely fleshed out yet(there are many parts to a +soft CPU), but the license for the HDL will be BSD/eCos-like to be +friendly towards commercially oriented projects, however the +architecture, documentation and tools will be GPL. This means that all +updates to the architecture must be shared, but actual +implementations(which are small and can be very project speific) can +be friendly towards commercial considerations. + + +Patches to update files w/correct licensing info will be most appreciated! diff --git a/zpu/ChangeLog b/zpu/ChangeLog new file mode 100644 index 0000000..827ede8 --- /dev/null +++ b/zpu/ChangeLog @@ -0,0 +1,11 @@ +2007-09-11 Øyvind Harboe + * Cleaning up zpu/hdl/example. simzpu.do file now uses zpu4/src files instead + of duplicating them. Hello world simzpu.do now works out of the box. +2007-09-10 Øyvind Harboe + * Cleaning up .html files a bit. + * retired zpututorial.odt. +2007-08-04 Øyvind Harboe + * small ZPU hello world example now simulates with valid log.txt/trace.txt file. + * Until files are properly organized, ChangeLog will not be kept up to date. +2007-08-03 Øyvind Harboe + * Starting to commit files diff --git a/zpu/STATUS b/zpu/STATUS new file mode 100644 index 0000000..e28f191 --- /dev/null +++ b/zpu/STATUS @@ -0,0 +1,11 @@ +The current state of the ZPU: + +- Patches welcome! +- Zylin is rummaging up the various files that might be of interest + to the open source ZPU project. +- The ZPU, GCC toolchain and HDL works. Zylin eCosBoard 1.1 ships w/a + ZPU(see http://www.zylin.com), if you need a development board before + implementing on your own system. +- The docs leave a lot to be desired at this point. +- Licensing needs to be ironed out. After which lots of files will have + to be updated, strictly speaking. Patches welcome! diff --git a/zpu/docs/presentations/zpu.odp b/zpu/docs/presentations/zpu.odp new file mode 100644 index 0000000..e2a6554 Binary files /dev/null and b/zpu/docs/presentations/zpu.odp differ diff --git a/zpu/docs/presentations/zpudemo.odp b/zpu/docs/presentations/zpudemo.odp new file mode 100644 index 0000000..d0085a8 Binary files /dev/null and b/zpu/docs/presentations/zpudemo.odp differ diff --git a/zpu/docs/zpupresentation.odp b/zpu/docs/zpupresentation.odp new file mode 100644 index 0000000..28d9a7b Binary files /dev/null and b/zpu/docs/zpupresentation.odp differ diff --git a/zpu/docs/zpupresentation.ppt b/zpu/docs/zpupresentation.ppt new file mode 100644 index 0000000..100c4a4 Binary files /dev/null and b/zpu/docs/zpupresentation.ppt differ diff --git a/zpu/docs/zpupresentation_old.odt b/zpu/docs/zpupresentation_old.odt new file mode 100644 index 0000000..53e1f98 Binary files /dev/null and b/zpu/docs/zpupresentation_old.odt differ diff --git a/zpu/docs/zpuprotoarch.odt b/zpu/docs/zpuprotoarch.odt new file mode 100644 index 0000000..67a4171 Binary files /dev/null and b/zpu/docs/zpuprotoarch.odt differ diff --git a/zpu/hdl/example/helloworld.vhd b/zpu/hdl/example/helloworld.vhd new file mode 100644 index 0000000..9c99259 --- /dev/null +++ b/zpu/hdl/example/helloworld.vhd @@ -0,0 +1,12506 @@ +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(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 dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"82f4e00c", +3 => x"3a0b0b81", +4 => x"e48c0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"81e4fd2d", +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"c9040000", +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"0b0b88ac", +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"0b0b82f4", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88af0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8e", +171 => x"c42d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b90", +179 => x"8d2d5050", +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"82f4dc0c", +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"0b0b0b83", +257 => x"e93f0b0b", +258 => x"82e4cc3f", +259 => x"04101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101010", +266 => x"10101010", +267 => x"53510473", +268 => x"81ff0673", +269 => x"83060981", +270 => x"05830510", +271 => x"10102b07", +272 => x"72fc060c", +273 => x"5151043c", +274 => x"04727280", +275 => x"728106ff", +276 => x"05097206", +277 => x"05711052", +278 => x"720a100a", +279 => x"5372ed38", +280 => x"51515351", +281 => x"04fe3d0d", +282 => x"0b0b8384", +283 => x"e8085384", +284 => x"13087088", +285 => x"2a708106", +286 => x"51525270", +287 => x"802e0b0b", +288 => x"0b0bec38", +289 => x"7181ff06", +290 => x"800c843d", +291 => x"0d04ff3d", +292 => x"0d0b0b83", +293 => x"84e80852", +294 => x"71087088", +295 => x"2a813270", +296 => x"81065151", +297 => x"51700b0b", +298 => x"0b0bed38", +299 => x"73720c83", +300 => x"3d0d040b", +301 => x"0b82f4dc", +302 => x"08802e0b", +303 => x"0b0b0bae", +304 => x"380b0b82", +305 => x"f4e00882", +306 => x"2e0b0b0b", +307 => x"80c53883", +308 => x"80800b0b", +309 => x"0b8384e8", +310 => x"0c82a080", +311 => x"0b0b0b83", +312 => x"84ec0c82", +313 => x"90800b0b", +314 => x"0b8384f0", +315 => x"0c04f880", +316 => x"8080a40b", +317 => x"0b0b8384", +318 => x"e80cf880", +319 => x"8082800b", +320 => x"0b0b8384", +321 => x"ec0cf880", +322 => x"8084800b", +323 => x"0b0b8384", +324 => x"f00c0480", +325 => x"c0a8808c", +326 => x"0b0b0b83", +327 => x"84e80c80", +328 => x"c0a88094", +329 => x"0b0b0b83", +330 => x"84ec0c0b", +331 => x"0b82ed90", +332 => x"0b0b0b83", +333 => x"84f00c04", +334 => x"f23d0d60", +335 => x"0b0b8384", +336 => x"ec08565d", +337 => x"82750c80", +338 => x"59805a80", +339 => x"0b8f3d5d", +340 => x"5b7a1010", +341 => x"15700871", +342 => x"08719f2c", +343 => x"7e852b58", +344 => x"55557d53", +345 => x"59570b0b", +346 => x"0b81d13f", +347 => x"7d7f7a72", +348 => x"077c7207", +349 => x"71716081", +350 => x"05415f5d", +351 => x"5b595755", +352 => x"817b270b", +353 => x"0b0b0b8f", +354 => x"38767d0c", +355 => x"77841e0c", +356 => x"7c800c90", +357 => x"3d0d040b", +358 => x"0b8384ec", +359 => x"08550b0b", +360 => x"0bffae39", +361 => x"70700b0b", +362 => x"8384f433", +363 => x"51700b0b", +364 => x"0b0bb738", +365 => x"0b0b82f4", +366 => x"e8087008", +367 => x"52527080", +368 => x"2e0b0b0b", +369 => x"0b9c3884", +370 => x"120b0b82", +371 => x"f4e80c70", +372 => x"2d0b0b82", +373 => x"f4e80870", +374 => x"08525270", +375 => x"0b0b0b0b", +376 => x"e638810b", +377 => x"0b0b8384", +378 => x"f4345050", +379 => x"0404700b", +380 => x"0b8384e4", +381 => x"08802e0b", +382 => x"0b0b0b92", +383 => x"380b0b0b", +384 => x"0b800b80", +385 => x"2e098106", +386 => x"0b0b0b0b", +387 => x"83385004", +388 => x"0b0b8384", +389 => x"e4510b0b", +390 => x"0bf3e53f", +391 => x"5004048c", +392 => x"08028c0c", +393 => x"ff3d0d0b", +394 => x"0b82ed94", +395 => x"510b0b0b", +396 => x"88ab3f71", +397 => x"800c833d", +398 => x"0d8c0c04", +399 => x"8c08028c", +400 => x"0cf53d0d", +401 => x"8c089405", +402 => x"080b0b0b", +403 => x"0ba0388c", +404 => x"088c0508", +405 => x"8c089005", +406 => x"088c0888", +407 => x"05085856", +408 => x"5473760c", +409 => x"7484170c", +410 => x"0b0b0b81", +411 => x"ca39800b", +412 => x"8c08f005", +413 => x"0c800b8c", +414 => x"08f4050c", +415 => x"8c088c05", +416 => x"088c0890", +417 => x"05085654", +418 => x"738c08f0", +419 => x"050c748c", +420 => x"08f4050c", +421 => x"8c08f805", +422 => x"8c08f005", +423 => x"56568870", +424 => x"54755376", +425 => x"52540b0b", +426 => x"0b85e03f", +427 => x"a00b8c08", +428 => x"94050831", +429 => x"8c08ec05", +430 => x"0c8c08ec", +431 => x"05088024", +432 => x"0b0b0b0b", +433 => x"a138800b", +434 => x"8c08f405", +435 => x"0c8c08ec", +436 => x"0508308c", +437 => x"08fc0508", +438 => x"712b8c08", +439 => x"f0050c54", +440 => x"0b0b0b0b", +441 => x"b9398c08", +442 => x"fc05088c", +443 => x"08ec0508", +444 => x"2a8c08e8", +445 => x"050c8c08", +446 => x"fc05088c", +447 => x"08940508", +448 => x"2b8c08f4", +449 => x"050c8c08", +450 => x"f805088c", +451 => x"08940508", +452 => x"2b708c08", +453 => x"e8050807", +454 => x"8c08f005", +455 => x"0c548c08", +456 => x"f005088c", +457 => x"08f40508", +458 => x"8c088805", +459 => x"08585654", +460 => x"73760c74", +461 => x"84170c8c", +462 => x"08880508", +463 => x"800c8d3d", +464 => x"0d8c0c04", +465 => x"8c08028c", +466 => x"0cf93d0d", +467 => x"800b8c08", +468 => x"fc050c8c", +469 => x"08880508", +470 => x"80250b0b", +471 => x"0b0baf38", +472 => x"8c088805", +473 => x"08308c08", +474 => x"88050c80", +475 => x"0b8c08f4", +476 => x"050c8c08", +477 => x"fc05080b", +478 => x"0b0b0b88", +479 => x"38810b8c", +480 => x"08f4050c", +481 => x"8c08f405", +482 => x"088c08fc", +483 => x"050c8c08", +484 => x"8c050880", +485 => x"250b0b0b", +486 => x"0baf388c", +487 => x"088c0508", +488 => x"308c088c", +489 => x"050c800b", +490 => x"8c08f005", +491 => x"0c8c08fc", +492 => x"05080b0b", +493 => x"0b0b8838", +494 => x"810b8c08", +495 => x"f0050c8c", +496 => x"08f00508", +497 => x"8c08fc05", +498 => x"0c80538c", +499 => x"088c0508", +500 => x"528c0888", +501 => x"0508510b", +502 => x"0b0b81bb", +503 => x"3f800870", +504 => x"8c08f805", +505 => x"0c548c08", +506 => x"fc050880", +507 => x"2e0b0b0b", +508 => x"0b8c388c", +509 => x"08f80508", +510 => x"308c08f8", +511 => x"050c8c08", +512 => x"f8050870", +513 => x"800c5489", +514 => x"3d0d8c0c", +515 => x"048c0802", +516 => x"8c0cfb3d", +517 => x"0d800b8c", +518 => x"08fc050c", +519 => x"8c088805", +520 => x"0880250b", +521 => x"0b0b0b93", +522 => x"388c0888", +523 => x"0508308c", +524 => x"0888050c", +525 => x"810b8c08", +526 => x"fc050c8c", +527 => x"088c0508", +528 => x"80250b0b", +529 => x"0b0b8c38", +530 => x"8c088c05", +531 => x"08308c08", +532 => x"8c050c81", +533 => x"538c088c", +534 => x"0508528c", +535 => x"08880508", +536 => x"510b0b0b", +537 => x"0bb13f80", +538 => x"08708c08", +539 => x"f8050c54", +540 => x"8c08fc05", +541 => x"08802e0b", +542 => x"0b0b0b8c", +543 => x"388c08f8", +544 => x"0508308c", +545 => x"08f8050c", +546 => x"8c08f805", +547 => x"0870800c", +548 => x"54873d0d", +549 => x"8c0c048c", +550 => x"08028c0c", +551 => x"70707070", +552 => x"810b8c08", +553 => x"fc050c80", +554 => x"0b8c08f8", +555 => x"050c8c08", +556 => x"8c05088c", +557 => x"08880508", +558 => x"270b0b0b", +559 => x"0bb8388c", +560 => x"08fc0508", +561 => x"802e0b0b", +562 => x"0b0bab38", +563 => x"800b8c08", +564 => x"8c050824", +565 => x"0b0b0b0b", +566 => x"9d388c08", +567 => x"8c050810", +568 => x"8c088c05", +569 => x"0c8c08fc", +570 => x"0508108c", +571 => x"08fc050c", +572 => x"0b0b0bff", +573 => x"b9398c08", +574 => x"fc050880", +575 => x"2e0b0b0b", +576 => x"80d0388c", +577 => x"088c0508", +578 => x"8c088805", +579 => x"08260b0b", +580 => x"0b0ba138", +581 => x"8c088805", +582 => x"088c088c", +583 => x"0508318c", +584 => x"0888050c", +585 => x"8c08f805", +586 => x"088c08fc", +587 => x"0508078c", +588 => x"08f8050c", +589 => x"8c08fc05", +590 => x"08812a8c", +591 => x"08fc050c", +592 => x"8c088c05", +593 => x"08812a8c", +594 => x"088c050c", +595 => x"0b0b0bff", +596 => x"a5398c08", +597 => x"90050880", +598 => x"2e0b0b0b", +599 => x"0b93388c", +600 => x"08880508", +601 => x"708c08f4", +602 => x"050c510b", +603 => x"0b0b0b8d", +604 => x"398c08f8", +605 => x"0508708c", +606 => x"08f4050c", +607 => x"518c08f4", +608 => x"0508800c", +609 => x"50505050", +610 => x"8c0c04fc", +611 => x"3d0d7670", +612 => x"797b5555", +613 => x"55558f72", +614 => x"270b0b0b", +615 => x"0b903872", +616 => x"75078306", +617 => x"5170802e", +618 => x"0b0b0b0b", +619 => x"af38ff12", +620 => x"5271ff2e", +621 => x"0b0b0b0b", +622 => x"9c387270", +623 => x"81055433", +624 => x"74708105", +625 => x"5634ff12", +626 => x"5271ff2e", +627 => x"0981060b", +628 => x"0b0b0be6", +629 => x"3874800c", +630 => x"863d0d04", +631 => x"74517270", +632 => x"84055408", +633 => x"71708405", +634 => x"530c7270", +635 => x"84055408", +636 => x"71708405", +637 => x"530c7270", +638 => x"84055408", +639 => x"71708405", +640 => x"530c7270", +641 => x"84055408", +642 => x"71708405", +643 => x"530cf012", +644 => x"52718f26", +645 => x"0b0b0b0b", +646 => x"c5388372", +647 => x"270b0b0b", +648 => x"0b993872", +649 => x"70840554", +650 => x"08717084", +651 => x"05530cfc", +652 => x"12527183", +653 => x"260b0b0b", +654 => x"0be93870", +655 => x"540b0b0b", +656 => x"feec39fb", +657 => x"3d0d7789", +658 => x"3d880555", +659 => x"79548811", +660 => x"0853510b", +661 => x"0b0b80e3", +662 => x"3f873d0d", +663 => x"04fc3d0d", +664 => x"873d7070", +665 => x"84055208", +666 => x"56537452", +667 => x"0b0b82f4", +668 => x"ec088811", +669 => x"0852540b", +670 => x"0b0bb4a2", +671 => x"3f863d0d", +672 => x"04707070", +673 => x"70768811", +674 => x"08545472", +675 => x"0b0b0b0b", +676 => x"8d387284", +677 => x"150c7280", +678 => x"0c505050", +679 => x"50047352", +680 => x"75510b0b", +681 => x"80fcfe3f", +682 => x"800b8815", +683 => x"0c800b84", +684 => x"150c8008", +685 => x"800c5050", +686 => x"505004fc", +687 => x"c43d0d83", +688 => x"bf3d0883", +689 => x"c13d0883", +690 => x"c33d0883", +691 => x"c53d0848", +692 => x"5e484b0b", +693 => x"0b8186f6", +694 => x"3f800808", +695 => x"4c800b83", +696 => x"bb3d0c80", +697 => x"0b83bc3d", +698 => x"0c807071", +699 => x"698c0522", +700 => x"70832a81", +701 => x"32708106", +702 => x"515d5d4c", +703 => x"4f4d786d", +704 => x"2e098106", +705 => x"0b0b0b0b", +706 => x"90386690", +707 => x"05086d2e", +708 => x"0981060b", +709 => x"0b0b0b98", +710 => x"3866510b", +711 => x"0b0bbfc8", +712 => x"3fff5980", +713 => x"080b0b0b", +714 => x"82893866", +715 => x"8c05225a", +716 => x"799a0659", +717 => x"788a2e0b", +718 => x"0b0b80ce", +719 => x"387b83a6", +720 => x"3d707183", +721 => x"b93d0c5e", +722 => x"475d800b", +723 => x"83b83d0c", +724 => x"800b83b7", +725 => x"3d0c8049", +726 => x"7c5e807d", +727 => x"337081ff", +728 => x"065b5b5b", +729 => x"787b2e0b", +730 => x"0b0b0b83", +731 => x"38815b78", +732 => x"a52e0b0b", +733 => x"0b81c438", +734 => x"7a802e0b", +735 => x"0b0b81bb", +736 => x"38811d5d", +737 => x"0b0b0b0b", +738 => x"d139668e", +739 => x"05227090", +740 => x"2b5a5b80", +741 => x"79240b0b", +742 => x"0bffa238", +743 => x"79fd0659", +744 => x"7882ba3d", +745 => x"237a0284", +746 => x"0589e205", +747 => x"23669c05", +748 => x"0882be3d", +749 => x"0c66a405", +750 => x"0882c03d", +751 => x"0cb63d70", +752 => x"82b83d0c", +753 => x"82bb3d0c", +754 => x"88800b82", +755 => x"b93d0c88", +756 => x"800b82bc", +757 => x"3d0c800b", +758 => x"82bd3d0c", +759 => x"64537b52", +760 => x"82b63d70", +761 => x"52590b0b", +762 => x"0bb1b33f", +763 => x"80085a80", +764 => x"0b800824", +765 => x"0b0b0b0b", +766 => x"95387851", +767 => x"0b0b80ec", +768 => x"bf3f8008", +769 => x"802e0b0b", +770 => x"0b0b8338", +771 => x"ff5a82b9", +772 => x"3d227086", +773 => x"2a708106", +774 => x"515a5b78", +775 => x"802e0b0b", +776 => x"0b0b8e38", +777 => x"668c0522", +778 => x"80c00759", +779 => x"78678c05", +780 => x"23795978", +781 => x"800c83be", +782 => x"3d0d047c", +783 => x"7e315b7a", +784 => x"802e0b0b", +785 => x"0b0bb138", +786 => x"7d7c0c7a", +787 => x"841d0c83", +788 => x"b73d081b", +789 => x"83b83d0c", +790 => x"881c83b7", +791 => x"3d088111", +792 => x"83b93d0c", +793 => x"8111515a", +794 => x"5c788724", +795 => x"0b0b0b80", +796 => x"cb38681b", +797 => x"7d335b49", +798 => x"7981ff06", +799 => x"5978802e", +800 => x"0b0b0bae", +801 => x"df38811d", +802 => x"5d807071", +803 => x"4a4543ff", +804 => x"416283be", +805 => x"3d347c33", +806 => x"5a7981ff", +807 => x"06811e5e", +808 => x"407fe005", +809 => x"597880d8", +810 => x"260b0b0b", +811 => x"88a83878", +812 => x"10100b0b", +813 => x"82edc405", +814 => x"59780804", +815 => x"83be3ddc", +816 => x"05526651", +817 => x"0b0b0bfb", +818 => x"b83f8008", +819 => x"0b0b0b8b", +820 => x"b3386569", +821 => x"1c7e335c", +822 => x"4a5c0b0b", +823 => x"0bff9939", +824 => x"62900743", +825 => x"62842a70", +826 => x"81065159", +827 => x"780b0b0b", +828 => x"9e873862", +829 => x"862a7081", +830 => x"06515978", +831 => x"802e0b0b", +832 => x"0b9df638", +833 => x"64658405", +834 => x"8212225d", +835 => x"4659815f", +836 => x"800b83be", +837 => x"3d346044", +838 => x"8061240b", +839 => x"0b0b0b86", +840 => x"3862feff", +841 => x"0643657b", +842 => x"30707d07", +843 => x"9f2a6630", +844 => x"7068079f", +845 => x"2a720752", +846 => x"5c515b5e", +847 => x"79802e0b", +848 => x"0b0b98fd", +849 => x"387e812e", +850 => x"0b0b0b8c", +851 => x"8438817f", +852 => x"250b0b0b", +853 => x"a0eb387e", +854 => x"822e0b0b", +855 => x"0b8cc038", +856 => x"0b0b82f0", +857 => x"a85e7d51", +858 => x"0b0b81c0", +859 => x"ae3f8008", +860 => x"5f7e427e", +861 => x"64250b0b", +862 => x"0b0b8338", +863 => x"634283bd", +864 => x"3d337081", +865 => x"ff065a5b", +866 => x"78802e0b", +867 => x"0b0b9488", +868 => x"38618105", +869 => x"42628184", +870 => x"0641600b", +871 => x"0b0b8186", +872 => x"38676231", +873 => x"5a807a25", +874 => x"0b0b0b80", +875 => x"f938907a", +876 => x"250b0b0b", +877 => x"0bbd380b", +878 => x"0b82eda4", +879 => x"7c0c900b", +880 => x"841d0c83", +881 => x"b73d0890", +882 => x"0583b83d", +883 => x"0c881c83", +884 => x"b73d0881", +885 => x"1183b93d", +886 => x"0c811151", +887 => x"5a5c7887", +888 => x"240b0b0b", +889 => x"868e38f0", +890 => x"1a5a7990", +891 => x"240b0b0b", +892 => x"0bc5380b", +893 => x"0b82eda4", +894 => x"7c0c7984", +895 => x"1d0c83b7", +896 => x"3d081a83", +897 => x"b83d0c88", +898 => x"1c83b73d", +899 => x"08811183", +900 => x"b93d0c81", +901 => x"11515a5c", +902 => x"7887240b", +903 => x"0b0b96fe", +904 => x"3883bd3d", +905 => x"335b7a81", +906 => x"ff065978", +907 => x"802e0b0b", +908 => x"0b938138", +909 => x"83be3dfc", +910 => x"057c0c81", +911 => x"0b841d0c", +912 => x"83b73d08", +913 => x"810583b8", +914 => x"3d0c881c", +915 => x"83b73d08", +916 => x"811183b9", +917 => x"3d0c8111", +918 => x"515a5c78", +919 => x"87240b0b", +920 => x"0b879f38", +921 => x"6081802e", +922 => x"0b0b0b85", +923 => x"c938637f", +924 => x"315a807a", +925 => x"250b0b0b", +926 => x"818c3890", +927 => x"7a250b0b", +928 => x"0b0bbd38", +929 => x"0b0b82ed", +930 => x"b47c0c90", +931 => x"0b841d0c", +932 => x"83b73d08", +933 => x"900583b8", +934 => x"3d0c881c", +935 => x"83b73d08", +936 => x"811183b9", +937 => x"3d0c8111", +938 => x"515a5c78", +939 => x"87240b0b", +940 => x"0b84e238", +941 => x"f01a5a79", +942 => x"90240b0b", +943 => x"0b0bc538", +944 => x"0b0b82ed", +945 => x"b47c0c79", +946 => x"841d0c83", +947 => x"b73d081a", +948 => x"83b83d0c", +949 => x"881c83b7", +950 => x"3d088111", +951 => x"83b93d0c", +952 => x"8111515a", +953 => x"5c877925", +954 => x"0b0b0b0b", +955 => x"993883be", +956 => x"3ddc0552", +957 => x"66510b0b", +958 => x"0bf7863f", +959 => x"80080b0b", +960 => x"0b878138", +961 => x"655c6288", +962 => x"2a813270", +963 => x"81065159", +964 => x"78802e0b", +965 => x"0b0b91f3", +966 => x"387d7c0c", +967 => x"7e841d0c", +968 => x"83b73d08", +969 => x"1f83b83d", +970 => x"0c881c83", +971 => x"b73d0881", +972 => x"1183b93d", +973 => x"0c811151", +974 => x"5a5c7887", +975 => x"240b0b0b", +976 => x"868c3862", +977 => x"822a7081", +978 => x"06515978", +979 => x"802e0b0b", +980 => x"0b819438", +981 => x"6762315a", +982 => x"807a250b", +983 => x"0b0b8187", +984 => x"38907a25", +985 => x"0b0b0b0b", +986 => x"bd380b0b", +987 => x"82eda47c", +988 => x"0c900b84", +989 => x"1d0c83b7", +990 => x"3d089005", +991 => x"83b83d0c", +992 => x"881c83b7", +993 => x"3d088111", +994 => x"83b93d0c", +995 => x"8111515a", +996 => x"5c788724", +997 => x"0b0b0b85", +998 => x"9438f01a", +999 => x"5a799024", +1000 => x"0b0b0b0b", +1001 => x"c5380b0b", +1002 => x"82eda47c", +1003 => x"0c79841d", +1004 => x"0c83b73d", +1005 => x"081a83b8", +1006 => x"3d0c83b6", +1007 => x"3d088111", +1008 => x"83b83d0c", +1009 => x"81115159", +1010 => x"8779250b", +1011 => x"0b0b0b97", +1012 => x"3883be3d", +1013 => x"dc055266", +1014 => x"510b0b0b", +1015 => x"f5a33f80", +1016 => x"080b0b0b", +1017 => x"859e3861", +1018 => x"59616825", +1019 => x"0b0b0b0b", +1020 => x"83386759", +1021 => x"68194983", +1022 => x"b73d080b", +1023 => x"0b0b84ec", +1024 => x"38800b83", +1025 => x"b73d0c65", +1026 => x"5c69802e", +1027 => x"0b0b0bf6", +1028 => x"c7386951", +1029 => x"0b0b80ff", +1030 => x"953f807d", +1031 => x"5f4a0b0b", +1032 => x"0bf6b739", +1033 => x"62900743", +1034 => x"62842a70", +1035 => x"81065159", +1036 => x"780b0b0b", +1037 => x"97d43862", +1038 => x"862a7081", +1039 => x"06515978", +1040 => x"802e0b0b", +1041 => x"0b97c338", +1042 => x"64658405", +1043 => x"8212225d", +1044 => x"4659805f", +1045 => x"800b83be", +1046 => x"3d340b0b", +1047 => x"0bf9b739", +1048 => x"62900743", +1049 => x"62842a70", +1050 => x"81065159", +1051 => x"780b0b0b", +1052 => x"97a93862", +1053 => x"862a7081", +1054 => x"06515978", +1055 => x"802e0b0b", +1056 => x"0b979838", +1057 => x"64658405", +1058 => x"7108902b", +1059 => x"70902c51", +1060 => x"5d465980", +1061 => x"7b240b0b", +1062 => x"0b8bdf38", +1063 => x"815f0b0b", +1064 => x"0bf8f339", +1065 => x"64658405", +1066 => x"71084a46", +1067 => x"59678025", +1068 => x"0b0b0bf7", +1069 => x"e1386730", +1070 => x"48628407", +1071 => x"7d335b43", +1072 => x"0b0b0bf7", +1073 => x"d439811d", +1074 => x"5d629007", +1075 => x"7d335b43", +1076 => x"0b0b0bf7", +1077 => x"c4397f80", +1078 => x"2e0b0b0b", +1079 => x"a6863882", +1080 => x"ce3d5e7f", +1081 => x"7e34815f", +1082 => x"800b83be", +1083 => x"3d340b0b", +1084 => x"0bf8fe39", +1085 => x"83be3ddc", +1086 => x"05526651", +1087 => x"0b0b0bf3", +1088 => x"803f8008", +1089 => x"0b0b0b82", +1090 => x"fb3865f0", +1091 => x"1b5b5c0b", +1092 => x"0b0bf9d6", +1093 => x"3983be3d", +1094 => x"dc055266", +1095 => x"510b0b0b", +1096 => x"f2df3f80", +1097 => x"080b0b0b", +1098 => x"82da3865", +1099 => x"f01b5b5c", +1100 => x"0b0b0bfb", +1101 => x"82396762", +1102 => x"315a807a", +1103 => x"250b0b0b", +1104 => x"faac3890", +1105 => x"7a250b0b", +1106 => x"0b0bbd38", +1107 => x"0b0b82ed", +1108 => x"b47c0c90", +1109 => x"0b841d0c", +1110 => x"83b73d08", +1111 => x"900583b8", +1112 => x"3d0c881c", +1113 => x"83b73d08", +1114 => x"811183b9", +1115 => x"3d0c8111", +1116 => x"515a5c78", +1117 => x"87240b0b", +1118 => x"0b80e638", +1119 => x"f01a5a79", +1120 => x"90240b0b", +1121 => x"0b0bc538", +1122 => x"0b0b82ed", +1123 => x"b47c0c79", +1124 => x"841d0c83", +1125 => x"b73d081a", +1126 => x"83b83d0c", +1127 => x"881c83b7", +1128 => x"3d088111", +1129 => x"83b93d0c", +1130 => x"8111515a", +1131 => x"5c877925", +1132 => x"0b0b0bf9", +1133 => x"b93883be", +1134 => x"3ddc0552", +1135 => x"66510b0b", +1136 => x"0bf1be3f", +1137 => x"80080b0b", +1138 => x"0b81b938", +1139 => x"65646031", +1140 => x"5b5c7980", +1141 => x"240b0b0b", +1142 => x"f9a1380b", +1143 => x"0b0bfaa6", +1144 => x"3983be3d", +1145 => x"dc055266", +1146 => x"510b0b0b", +1147 => x"f1933f80", +1148 => x"080b0b0b", +1149 => x"818e3865", +1150 => x"f01b5b5c", +1151 => x"0b0b0bfe", +1152 => x"fe3983be", +1153 => x"3ddc0552", +1154 => x"66510b0b", +1155 => x"0bf0f23f", +1156 => x"80080b0b", +1157 => x"0b80ed38", +1158 => x"655c6081", +1159 => x"802e0981", +1160 => x"060b0b0b", +1161 => x"f8c8380b", +1162 => x"0b0bfe8a", +1163 => x"3983be3d", +1164 => x"dc055266", +1165 => x"510b0b0b", +1166 => x"f0c73f80", +1167 => x"080b0b0b", +1168 => x"80c23865", +1169 => x"f01b5b5c", +1170 => x"0b0b0bfa", +1171 => x"d03983be", +1172 => x"3ddc0552", +1173 => x"66510b0b", +1174 => x"0bf0a63f", +1175 => x"80080b0b", +1176 => x"0b0ba138", +1177 => x"655c0b0b", +1178 => x"0bf9d839", +1179 => x"83be3ddc", +1180 => x"05526651", +1181 => x"0b0b0bf0", +1182 => x"883f8008", +1183 => x"802e0b0b", +1184 => x"0bfafe38", +1185 => x"69802e0b", +1186 => x"0b0b0b89", +1187 => x"3869510b", +1188 => x"0b80fa9a", +1189 => x"3f668c05", +1190 => x"2270862a", +1191 => x"7081066b", +1192 => x"5d515a47", +1193 => x"78802e0b", +1194 => x"0b0bf385", +1195 => x"38ff590b", +1196 => x"0b0bf2ff", +1197 => x"397c3370", +1198 => x"81ff065a", +1199 => x"5a7880ec", +1200 => x"2e0b0b0b", +1201 => x"fc803862", +1202 => x"90077a81", +1203 => x"ff06811f", +1204 => x"5f41430b", +1205 => x"0b0bf3c9", +1206 => x"397c7081", +1207 => x"055e3340", +1208 => x"7faa2e0b", +1209 => x"0b0ba2f9", +1210 => x"388060d0", +1211 => x"0571435a", +1212 => x"5a788926", +1213 => x"0b0b0bf3", +1214 => x"a8387910", +1215 => x"10107a10", +1216 => x"056005d0", +1217 => x"057d7081", +1218 => x"055f33d0", +1219 => x"115b415a", +1220 => x"8979270b", +1221 => x"0b0b0be2", +1222 => x"38794179", +1223 => x"ff250b0b", +1224 => x"0bf2fe38", +1225 => x"ff410b0b", +1226 => x"0bf2f639", +1227 => x"64658405", +1228 => x"71085d46", +1229 => x"59820b0b", +1230 => x"0b82f0c4", +1231 => x"64720745", +1232 => x"4f5f80f8", +1233 => x"40800b83", +1234 => x"be3d340b", +1235 => x"0b0bf3c6", +1236 => x"39897b27", +1237 => x"0b0b0b0b", +1238 => x"ac38ff1e", +1239 => x"5e8a527a", +1240 => x"510b0b82", +1241 => x"9e803f80", +1242 => x"08b00559", +1243 => x"787e348a", +1244 => x"527a510b", +1245 => x"0b829dc4", +1246 => x"3f80085b", +1247 => x"7a89260b", +1248 => x"0b0b0bd6", +1249 => x"38ff1eb0", +1250 => x"1c5a5e78", +1251 => x"7e3483be", +1252 => x"3d707f31", +1253 => x"ff9c0540", +1254 => x"5b0b0b0b", +1255 => x"f3d339ff", +1256 => x"1e7b8f06", +1257 => x"6f055a5e", +1258 => x"78337e34", +1259 => x"7a842a5b", +1260 => x"7a802e0b", +1261 => x"0b0b0bd6", +1262 => x"38ff1e7b", +1263 => x"8f066f05", +1264 => x"5a5e7833", +1265 => x"7e347a84", +1266 => x"2a5b7a0b", +1267 => x"0b0b0bcf", +1268 => x"380b0b0b", +1269 => x"ffb83962", +1270 => x"80c0077d", +1271 => x"335b430b", +1272 => x"0b0bf1b5", +1273 => x"3960ff2e", +1274 => x"0b0b0b9f", +1275 => x"a0387f80", +1276 => x"e7327030", +1277 => x"70720780", +1278 => x"256280c7", +1279 => x"32703070", +1280 => x"72078025", +1281 => x"73075354", +1282 => x"5e515b59", +1283 => x"79802e0b", +1284 => x"0b0b0b8a", +1285 => x"38600b0b", +1286 => x"0b0b8338", +1287 => x"81416465", +1288 => x"88058412", +1289 => x"08720870", +1290 => x"83bf3d0c", +1291 => x"7183c03d", +1292 => x"0c545446", +1293 => x"590b0b81", +1294 => x"adad3f80", +1295 => x"08802e0b", +1296 => x"0b0b95db", +1297 => x"38805980", +1298 => x"79545483", +1299 => x"ba3d0883", +1300 => x"bc3d085b", +1301 => x"5179520b", +1302 => x"0b8290c9", +1303 => x"3f800b80", +1304 => x"08240b0b", +1305 => x"0b85f138", +1306 => x"0b0b82f0", +1307 => x"d85e835f", +1308 => x"0b0b0bf1", +1309 => x"fc3982ce", +1310 => x"3d5e7f80", +1311 => x"c32e0b0b", +1312 => x"0b0b9238", +1313 => x"62842a70", +1314 => x"81065159", +1315 => x"78802e0b", +1316 => x"0b0b83d3", +1317 => x"38885380", +1318 => x"52b43d70", +1319 => x"52590b0b", +1320 => x"8188f23f", +1321 => x"78546465", +1322 => x"84057108", +1323 => x"557f546c", +1324 => x"5346590b", +1325 => x"0b0ba0b1", +1326 => x"3f80085f", +1327 => x"8008ff2e", +1328 => x"0b0b0bfb", +1329 => x"bf38800b", +1330 => x"83be3d34", +1331 => x"0b0b0bf1", +1332 => x"a0390b0b", +1333 => x"82f0dc63", +1334 => x"842a7081", +1335 => x"06515a4e", +1336 => x"780b0b0b", +1337 => x"82ca3862", +1338 => x"862a7081", +1339 => x"06515978", +1340 => x"802e0b0b", +1341 => x"0b82b938", +1342 => x"64658405", +1343 => x"8212225d", +1344 => x"46598263", +1345 => x"81065a5f", +1346 => x"7a802e0b", +1347 => x"0b0bf080", +1348 => x"3878802e", +1349 => x"0b0b0bef", +1350 => x"f738627f", +1351 => x"0743800b", +1352 => x"83be3d34", +1353 => x"0b0b0bef", +1354 => x"ed39800b", +1355 => x"83be3d34", +1356 => x"64658405", +1357 => x"71084046", +1358 => x"597d802e", +1359 => x"0b0b0b9c", +1360 => x"d4387f80", +1361 => x"d32e0b0b", +1362 => x"0b82c038", +1363 => x"62842a70", +1364 => x"81065159", +1365 => x"780b0b0b", +1366 => x"82b13880", +1367 => x"61240b0b", +1368 => x"0bf08338", +1369 => x"60537852", +1370 => x"7d510b0b", +1371 => x"8183e73f", +1372 => x"605f8008", +1373 => x"802e0b0b", +1374 => x"0beff638", +1375 => x"80087e31", +1376 => x"5f607f25", +1377 => x"0b0b0bef", +1378 => x"e838605f", +1379 => x"0b0b0bef", +1380 => x"e0396284", +1381 => x"2a708106", +1382 => x"5159780b", +1383 => x"0b0b908d", +1384 => x"3862862a", +1385 => x"70810651", +1386 => x"5978802e", +1387 => x"0b0b0b8f", +1388 => x"fc386465", +1389 => x"84057108", +1390 => x"52465968", +1391 => x"79237c5e", +1392 => x"0b0b0beb", +1393 => x"9539ab0b", +1394 => x"83be3d34", +1395 => x"7c335a0b", +1396 => x"0b0bedc5", +1397 => x"39805a79", +1398 => x"1010107a", +1399 => x"10056005", +1400 => x"d0057d70", +1401 => x"81055f33", +1402 => x"d0115b41", +1403 => x"5a897927", +1404 => x"0b0b0b0b", +1405 => x"e2387948", +1406 => x"0b0b0bed", +1407 => x"a4396281", +1408 => x"80077d33", +1409 => x"5b430b0b", +1410 => x"0bed8e39", +1411 => x"6288077d", +1412 => x"335b430b", +1413 => x"0b0bed81", +1414 => x"390b0b82", +1415 => x"f0c46384", +1416 => x"2a708106", +1417 => x"515a4e78", +1418 => x"802e0b0b", +1419 => x"0bfdb838", +1420 => x"64658405", +1421 => x"71085d46", +1422 => x"590b0b0b", +1423 => x"fdc43962", +1424 => x"81077d33", +1425 => x"5b430b0b", +1426 => x"0becce39", +1427 => x"83bd3d33", +1428 => x"59780b0b", +1429 => x"0becbf38", +1430 => x"a00b83be", +1431 => x"3d347c33", +1432 => x"5a0b0b0b", +1433 => x"ecb33964", +1434 => x"65840546", +1435 => x"59831933", +1436 => x"7e34815f", +1437 => x"0b0b0bf4", +1438 => x"ef397a30", +1439 => x"5bad0b83", +1440 => x"be3d3481", +1441 => x"5f0b0b0b", +1442 => x"ed8c397d", +1443 => x"a23d0c80", +1444 => x"705c5f88", +1445 => x"537e52a6", +1446 => x"3d70525a", +1447 => x"0b0b8184", +1448 => x"f43f7e61", +1449 => x"240b0b0b", +1450 => x"81c2387a", +1451 => x"1010a23d", +1452 => x"08055978", +1453 => x"08802e0b", +1454 => x"0b0b0bbd", +1455 => x"38795478", +1456 => x"085383be", +1457 => x"3dfcc005", +1458 => x"526a510b", +1459 => x"0b0b9c99", +1460 => x"3f8008ff", +1461 => x"2e0b0b0b", +1462 => x"f7aa3880", +1463 => x"081f5978", +1464 => x"61240b0b", +1465 => x"0b0b9238", +1466 => x"811b7940", +1467 => x"5b78612e", +1468 => x"0981060b", +1469 => x"0b0bffb3", +1470 => x"387e802e", +1471 => x"0b0b0bec", +1472 => x"f038811f", +1473 => x"526a510b", +1474 => x"0b80f1b6", +1475 => x"3f80084a", +1476 => x"8008802e", +1477 => x"0b0b0bf6", +1478 => x"fc388853", +1479 => x"80527951", +1480 => x"0b0b8183", +1481 => x"f03f7955", +1482 => x"7e5483be", +1483 => x"3df38c05", +1484 => x"5369526a", +1485 => x"510b0b0b", +1486 => x"9cb03f80", +1487 => x"087f2e09", +1488 => x"81060b0b", +1489 => x"0bf6bd38", +1490 => x"696a8008", +1491 => x"055a5e80", +1492 => x"79340b0b", +1493 => x"0bec9a39", +1494 => x"ad0b83be", +1495 => x"3d340b0b", +1496 => x"82f0d85e", +1497 => x"835f0b0b", +1498 => x"0bec8639", +1499 => x"79557e54", +1500 => x"83be3df3", +1501 => x"8c05537e", +1502 => x"526a510b", +1503 => x"0b0b9bea", +1504 => x"3f80085f", +1505 => x"8008ff2e", +1506 => x"0b0b0bf5", +1507 => x"f7387da2", +1508 => x"3d0c0b0b", +1509 => x"0bfee239", +1510 => x"620a100a", +1511 => x"70810651", +1512 => x"5978802e", +1513 => x"0b0b0beb", +1514 => x"ec386182", +1515 => x"05420b0b", +1516 => x"0bebe239", +1517 => x"620a100a", +1518 => x"70810651", +1519 => x"5978802e", +1520 => x"0b0b0bed", +1521 => x"9f38b00b", +1522 => x"82ce3d34", +1523 => x"7f028405", +1524 => x"8ab10534", +1525 => x"83be3dfc", +1526 => x"bc057c0c", +1527 => x"820b841d", +1528 => x"0c83b73d", +1529 => x"08820583", +1530 => x"b83d0c88", +1531 => x"1c83b73d", +1532 => x"08811183", +1533 => x"b93d0c81", +1534 => x"11515a5c", +1535 => x"8779250b", +1536 => x"0b0bece0", +1537 => x"380b0b0b", +1538 => x"f3f83980", +1539 => x"e560250b", +1540 => x"0b0b83da", +1541 => x"38805980", +1542 => x"79545483", +1543 => x"ba3d0883", +1544 => x"bc3d085b", +1545 => x"5179520b", +1546 => x"0b8282bd", +1547 => x"3f80080b", +1548 => x"0b0b87ff", +1549 => x"380b0b82", +1550 => x"f0f07c0c", +1551 => x"810b841d", +1552 => x"0c83b73d", +1553 => x"08810583", +1554 => x"b83d0c88", +1555 => x"1c83b73d", +1556 => x"08811183", +1557 => x"b93d0c81", +1558 => x"11515a5c", +1559 => x"7887240b", +1560 => x"0b0b81ce", +1561 => x"38a43d08", +1562 => x"5b7aa63d", +1563 => x"08240b0b", +1564 => x"0b0b8e38", +1565 => x"62810659", +1566 => x"78802e0b", +1567 => x"0b0bedc3", +1568 => x"386b7c0c", +1569 => x"810b841d", +1570 => x"0c83b73d", +1571 => x"08810583", +1572 => x"b83d0c88", +1573 => x"1c83b73d", +1574 => x"08811183", +1575 => x"b93d0c81", +1576 => x"11515a5c", +1577 => x"7887240b", +1578 => x"0b0b81c5", +1579 => x"38ff1b5a", +1580 => x"807a250b", +1581 => x"0b0bed8b", +1582 => x"38907a25", +1583 => x"0b0b0b0b", +1584 => x"bd380b0b", +1585 => x"82edb47c", +1586 => x"0c900b84", +1587 => x"1d0c83b7", +1588 => x"3d089005", +1589 => x"83b83d0c", +1590 => x"881c83b7", +1591 => x"3d088111", +1592 => x"83b93d0c", +1593 => x"8111515a", +1594 => x"5c788724", +1595 => x"0b0b0b80", +1596 => x"df38f01a", +1597 => x"5a799024", +1598 => x"0b0b0b0b", +1599 => x"c5380b0b", +1600 => x"82edb47c", +1601 => x"0c79841d", +1602 => x"0c83b73d", +1603 => x"081a83b8", +1604 => x"3d0c881c", +1605 => x"83b73d08", +1606 => x"811183b9", +1607 => x"3d0c8111", +1608 => x"515a5c87", +1609 => x"79250b0b", +1610 => x"0bec9838", +1611 => x"0b0b0bf2", +1612 => x"9d3983be", +1613 => x"3ddc0552", +1614 => x"66510b0b", +1615 => x"0be2c23f", +1616 => x"80080b0b", +1617 => x"0bf2bd38", +1618 => x"655c0b0b", +1619 => x"0bfe9639", +1620 => x"83be3ddc", +1621 => x"05526651", +1622 => x"0b0b0be2", +1623 => x"a43f8008", +1624 => x"0b0b0bf2", +1625 => x"9f3865f0", +1626 => x"1b5b5c0b", +1627 => x"0b0bff85", +1628 => x"3983be3d", +1629 => x"dc055266", +1630 => x"510b0b0b", +1631 => x"e2833f80", +1632 => x"080b0b0b", +1633 => x"f1fe3865", +1634 => x"a53d08ff", +1635 => x"055b5c79", +1636 => x"80240b0b", +1637 => x"0bfea238", +1638 => x"0b0b0beb", +1639 => x"a63983be", +1640 => x"3ddc0552", +1641 => x"66510b0b", +1642 => x"0be1d63f", +1643 => x"80080b0b", +1644 => x"0bf1d138", +1645 => x"6583be3d", +1646 => x"335c5c0b", +1647 => x"0b0be8e6", +1648 => x"397e0b0b", +1649 => x"0bf3c738", +1650 => x"62810659", +1651 => x"78802e0b", +1652 => x"0b0bf3ba", +1653 => x"38028d8f", +1654 => x"055eb07e", +1655 => x"3483be3d", +1656 => x"707f31ff", +1657 => x"9c05405b", +1658 => x"0b0b0be7", +1659 => x"8439a43d", +1660 => x"085b817b", +1661 => x"250b0b0b", +1662 => x"83bc387d", +1663 => x"7081055f", +1664 => x"3382ce3d", +1665 => x"34ae0284", +1666 => x"058ab105", +1667 => x"3483be3d", +1668 => x"fcbc057c", +1669 => x"0c820b84", +1670 => x"1d0c83b7", +1671 => x"3d088205", +1672 => x"83b83d0c", +1673 => x"881c83b7", +1674 => x"3d088111", +1675 => x"83b93d0c", +1676 => x"8111515a", +1677 => x"5c788724", +1678 => x"0b0b0b81", +1679 => x"8b388059", +1680 => x"80795454", +1681 => x"83ba3d08", +1682 => x"83bc3d08", +1683 => x"5b517952", +1684 => x"0b0b8280", +1685 => x"a83f8008", +1686 => x"802e0b0b", +1687 => x"0b81a538", +1688 => x"7d7c0cff", +1689 => x"1b841d0c", +1690 => x"83b73d08", +1691 => x"1bff0583", +1692 => x"b83d0c88", +1693 => x"1c83b73d", +1694 => x"08811183", +1695 => x"b93d0c81", +1696 => x"11515a5c", +1697 => x"7887240b", +1698 => x"0b0b81f7", +1699 => x"3883be3d", +1700 => x"e8057c0c", +1701 => x"6c841d0c", +1702 => x"83b73d08", +1703 => x"6d0583b8", +1704 => x"3d0c881c", +1705 => x"83b73d08", +1706 => x"811183b9", +1707 => x"3d0c8111", +1708 => x"515a5c87", +1709 => x"79250b0b", +1710 => x"0be98838", +1711 => x"83be3ddc", +1712 => x"05520b0b", +1713 => x"0bef8d39", +1714 => x"83be3ddc", +1715 => x"05526651", +1716 => x"0b0b0bdf", +1717 => x"ac3f8008", +1718 => x"0b0b0bef", +1719 => x"a73865a5", +1720 => x"3d085c5c", +1721 => x"80598079", +1722 => x"545483ba", +1723 => x"3d0883bc", +1724 => x"3d085b51", +1725 => x"79520b0b", +1726 => x"81ff823f", +1727 => x"80080b0b", +1728 => x"0bfedd38", +1729 => x"ff1b5a80", +1730 => x"7a250b0b", +1731 => x"0bfefe38", +1732 => x"907a250b", +1733 => x"0b0b0bbd", +1734 => x"380b0b82", +1735 => x"edb47c0c", +1736 => x"900b841d", +1737 => x"0c83b73d", +1738 => x"08900583", +1739 => x"b83d0c88", +1740 => x"1c83b73d", +1741 => x"08811183", +1742 => x"b93d0c81", +1743 => x"11515a5c", +1744 => x"7887240b", +1745 => x"0b0b84c4", +1746 => x"38f01a5a", +1747 => x"7990240b", +1748 => x"0b0b0bc5", +1749 => x"380b0b82", +1750 => x"edb47c0c", +1751 => x"79841d0c", +1752 => x"83b73d08", +1753 => x"1a83b83d", +1754 => x"0c881c83", +1755 => x"b73d0881", +1756 => x"1183b93d", +1757 => x"0c811151", +1758 => x"5a5c8779", +1759 => x"250b0b0b", +1760 => x"fe8b3883", +1761 => x"be3ddc05", +1762 => x"5266510b", +1763 => x"0b0bddf1", +1764 => x"3f80080b", +1765 => x"0b0bedec", +1766 => x"386583bf", +1767 => x"3de80571", +1768 => x"0c6d8412", +1769 => x"0c83b83d", +1770 => x"086e0583", +1771 => x"b93d0c5c", +1772 => x"0b0b0bfd", +1773 => x"ed396281", +1774 => x"0659780b", +1775 => x"0b0bfcbb", +1776 => x"387d7c0c", +1777 => x"810b841d", +1778 => x"0c83b73d", +1779 => x"08810583", +1780 => x"b83d0c88", +1781 => x"1c83b73d", +1782 => x"08811183", +1783 => x"b93d0c81", +1784 => x"11515a5c", +1785 => x"8779250b", +1786 => x"0b0bfda1", +1787 => x"3883be3d", +1788 => x"dc05520b", +1789 => x"0b0bff91", +1790 => x"39646584", +1791 => x"0571085d", +1792 => x"4659815f", +1793 => x"0b0b0be2", +1794 => x"87396465", +1795 => x"84057108", +1796 => x"5d465980", +1797 => x"5f0b0b0b", +1798 => x"e8ba3964", +1799 => x"65840571", +1800 => x"085d4659", +1801 => x"7a80250b", +1802 => x"0b0be8f0", +1803 => x"380b0b0b", +1804 => x"f4c839a5", +1805 => x"3d085a80", +1806 => x"7a250b0b", +1807 => x"0b8bbd38", +1808 => x"a43d085b", +1809 => x"7a7a240b", +1810 => x"0b0b83b5", +1811 => x"387d7c0c", +1812 => x"7a841d0c", +1813 => x"83b73d08", +1814 => x"1b83b83d", +1815 => x"0c881c83", +1816 => x"b73d0881", +1817 => x"1183b93d", +1818 => x"0c811151", +1819 => x"5a5c7887", +1820 => x"240b0b0b", +1821 => x"81e33879", +1822 => x"7b315a80", +1823 => x"7a250b0b", +1824 => x"0b818c38", +1825 => x"907a250b", +1826 => x"0b0b0bbd", +1827 => x"380b0b82", +1828 => x"edb47c0c", +1829 => x"900b841d", +1830 => x"0c83b73d", +1831 => x"08900583", +1832 => x"b83d0c88", +1833 => x"1c83b73d", +1834 => x"08811183", +1835 => x"b93d0c81", +1836 => x"11515a5c", +1837 => x"7887240b", +1838 => x"0b0b80fc", +1839 => x"38f01a5a", +1840 => x"7990240b", +1841 => x"0b0b0bc5", +1842 => x"380b0b82", +1843 => x"edb47c0c", +1844 => x"79841d0c", +1845 => x"83b73d08", +1846 => x"1a83b83d", +1847 => x"0c881c83", +1848 => x"b73d0881", +1849 => x"1183b93d", +1850 => x"0c811151", +1851 => x"5a5c8779", +1852 => x"250b0b0b", +1853 => x"0b993883", +1854 => x"be3ddc05", +1855 => x"5266510b", +1856 => x"0b0bdafd", +1857 => x"3f80080b", +1858 => x"0b0beaf8", +1859 => x"38655c62", +1860 => x"81065978", +1861 => x"802e0b0b", +1862 => x"0be4a838", +1863 => x"0b0b82f0", +1864 => x"f47c0c81", +1865 => x"0b841d0c", +1866 => x"83b73d08", +1867 => x"810583b8", +1868 => x"3d0c0b0b", +1869 => x"0bfaeb39", +1870 => x"83be3ddc", +1871 => x"05526651", +1872 => x"0b0b0bda", +1873 => x"bc3f8008", +1874 => x"0b0b0bea", +1875 => x"b73865f0", +1876 => x"1b5b5c0b", +1877 => x"0b0bfee8", +1878 => x"3983be3d", +1879 => x"dc055266", +1880 => x"510b0b0b", +1881 => x"da9b3f80", +1882 => x"080b0b0b", +1883 => x"ea963865", +1884 => x"a63d08a6", +1885 => x"3d087171", +1886 => x"31525d5b", +1887 => x"5c798024", +1888 => x"0b0b0bfd", +1889 => x"ff380b0b", +1890 => x"0bff8439", +1891 => x"83be3ddc", +1892 => x"05526651", +1893 => x"0b0b0bd9", +1894 => x"e83f8008", +1895 => x"0b0b0be9", +1896 => x"e33865f0", +1897 => x"1b5b5c0b", +1898 => x"0b0bfba0", +1899 => x"39646584", +1900 => x"0571086b", +1901 => x"710c527e", +1902 => x"4046590b", +1903 => x"0b0bdb9a", +1904 => x"397e0b0b", +1905 => x"0bdf9938", +1906 => x"ff1e7bb7", +1907 => x"06b0075b", +1908 => x"5e797e34", +1909 => x"7a832a5b", +1910 => x"7a0b0b0b", +1911 => x"0bea3862", +1912 => x"81065978", +1913 => x"802e0b0b", +1914 => x"0beba338", +1915 => x"79b02e0b", +1916 => x"0b0beb9a", +1917 => x"38ff1e5e", +1918 => x"b07e340b", +1919 => x"0b0bf7dd", +1920 => x"397d7c0c", +1921 => x"79841d0c", +1922 => x"83b73d08", +1923 => x"1a83b83d", +1924 => x"0c881c83", +1925 => x"b73d0881", +1926 => x"1183b93d", +1927 => x"0c811151", +1928 => x"5a5c7887", +1929 => x"240b0b0b", +1930 => x"81a03879", +1931 => x"1e0b0b82", +1932 => x"f0f47d0c", +1933 => x"5e810b84", +1934 => x"1d0c83b7", +1935 => x"3d088105", +1936 => x"83b83d0c", +1937 => x"881c83b7", +1938 => x"3d088111", +1939 => x"83b93d0c", +1940 => x"8111515a", +1941 => x"5c788724", +1942 => x"0b0b0b0b", +1943 => x"b6387d7c", +1944 => x"0ca43d08", +1945 => x"7a317084", +1946 => x"1e0c83b8", +1947 => x"3d080583", +1948 => x"b83d0c88", +1949 => x"1c83b73d", +1950 => x"08811183", +1951 => x"b93d0c81", +1952 => x"11515a5c", +1953 => x"8779250b", +1954 => x"0b0be1b7", +1955 => x"380b0b0b", +1956 => x"e7bc3983", +1957 => x"be3ddc05", +1958 => x"5266510b", +1959 => x"0b0bd7e1", +1960 => x"3f80080b", +1961 => x"0b0be7dc", +1962 => x"3865a63d", +1963 => x"087f720c", +1964 => x"a63d0871", +1965 => x"31708414", +1966 => x"0c83ba3d", +1967 => x"080583ba", +1968 => x"3d0c5b5c", +1969 => x"0b0b0bff", +1970 => x"aa3983be", +1971 => x"3ddc0552", +1972 => x"66510b0b", +1973 => x"0bd7aa3f", +1974 => x"80080b0b", +1975 => x"0be7a538", +1976 => x"65a63d08", +1977 => x"7f110b0b", +1978 => x"82f0f473", +1979 => x"0c405b5c", +1980 => x"810b841d", +1981 => x"0c83b73d", +1982 => x"08810583", +1983 => x"b83d0c88", +1984 => x"1c83b73d", +1985 => x"08811183", +1986 => x"b93d0c81", +1987 => x"11515a5c", +1988 => x"8779250b", +1989 => x"0b0bfec6", +1990 => x"380b0b0b", +1991 => x"fef53983", +1992 => x"ba3d0883", +1993 => x"bc3d085b", +1994 => x"5179520b", +1995 => x"0b8197ea", +1996 => x"3f0b0b82", +1997 => x"f0f85e83", +1998 => x"5f80080b", +1999 => x"0b0bdcb1", +2000 => x"38628280", +2001 => x"0783bb3d", +2002 => x"0883bd3d", +2003 => x"086383c0", +2004 => x"3daa3da5", +2005 => x"3d0c5f45", +2006 => x"415f4383", +2007 => x"0ba13d0c", +2008 => x"7f80e62e", +2009 => x"0b0b0b0b", +2010 => x"b1388008", +2011 => x"5a7f80e5", +2012 => x"2e0b0b0b", +2013 => x"83ea3880", +2014 => x"08597f80", +2015 => x"c52e0b0b", +2016 => x"0b83f038", +2017 => x"79790759", +2018 => x"78802e0b", +2019 => x"0b0b0b85", +2020 => x"38608105", +2021 => x"42820ba1", +2022 => x"3d0c7db3", +2023 => x"3d0c7eb4", +2024 => x"3d0c800b", +2025 => x"b33d0824", +2026 => x"0b0b0b88", +2027 => x"ef38807b", +2028 => x"3483be3d", +2029 => x"f3941159", +2030 => x"f3900557", +2031 => x"6e566155", +2032 => x"6f547d52", +2033 => x"7e536a51", +2034 => x"0b0b0b9b", +2035 => x"b03f8008", +2036 => x"6080e732", +2037 => x"70307072", +2038 => x"079f2a51", +2039 => x"5b5ba13d", +2040 => x"0c7f80c7", +2041 => x"2e0b0b0b", +2042 => x"0b883878", +2043 => x"0b0b0b81", +2044 => x"e4386281", +2045 => x"0659780b", +2046 => x"0b0b81d9", +2047 => x"38a33d08", +2048 => x"5978a13d", +2049 => x"0831a53d", +2050 => x"0c6f6080", +2051 => x"e7327030", +2052 => x"70720780", +2053 => x"256380c7", +2054 => x"32703070", +2055 => x"72078025", +2056 => x"73075354", +2057 => x"5f515c5a", +2058 => x"5e79802e", +2059 => x"0b0b0b86", +2060 => x"f238a53d", +2061 => x"085afc7a", +2062 => x"250b0b0b", +2063 => x"0b8a3860", +2064 => x"7a250b0b", +2065 => x"0b82cc38", +2066 => x"80e5597f", +2067 => x"80e72e0b", +2068 => x"0b0b0b84", +2069 => x"3880c559", +2070 => x"78407f80", +2071 => x"e5240b0b", +2072 => x"0b86ca38", +2073 => x"ff1a70a7", +2074 => x"3d0c83b9", +2075 => x"3d715d43", +2076 => x"5a7f6234", +2077 => x"028ddd05", +2078 => x"5f807a24", +2079 => x"0b0b0b87", +2080 => x"c138ab7f", +2081 => x"34028dde", +2082 => x"05b33d70", +2083 => x"5c425f89", +2084 => x"7b250b0b", +2085 => x"0b818738", +2086 => x"ff1a8a7c", +2087 => x"36b0055a", +2088 => x"5a787a34", +2089 => x"8a7b355b", +2090 => x"7a89240b", +2091 => x"0b0b0be8", +2092 => x"38ff1ab0", +2093 => x"1c5a5a78", +2094 => x"7a347961", +2095 => x"270b0b0b", +2096 => x"80ed3879", +2097 => x"7081055b", +2098 => x"337f7081", +2099 => x"0541340b", +2100 => x"0b0b0be6", +2101 => x"39800862", +2102 => x"055b7f80", +2103 => x"e62e0b0b", +2104 => x"0b819838", +2105 => x"80598079", +2106 => x"54547d51", +2107 => x"7e520b0b", +2108 => x"81f0f63f", +2109 => x"80080b0b", +2110 => x"0b0b8538", +2111 => x"7aa43d0c", +2112 => x"a33d0859", +2113 => x"787b270b", +2114 => x"0b0bfdf5", +2115 => x"38b07934", +2116 => x"a33d0881", +2117 => x"05a43d0c", +2118 => x"0b0b0b0b", +2119 => x"e339b07f", +2120 => x"70810541", +2121 => x"34b01b59", +2122 => x"787f7081", +2123 => x"0541347e", +2124 => x"6231a53d", +2125 => x"08701241", +2126 => x"5a4d8179", +2127 => x"250b0b0b", +2128 => x"81a43881", +2129 => x"1f5f83bc", +2130 => x"3d335978", +2131 => x"802e0b0b", +2132 => x"0bd89e38", +2133 => x"ad0b83be", +2134 => x"3d340b0b", +2135 => x"0bd89239", +2136 => x"810b8008", +2137 => x"5a5a7f80", +2138 => x"c52e0981", +2139 => x"060b0b0b", +2140 => x"fc923881", +2141 => x"590b0b0b", +2142 => x"fc8a3980", +2143 => x"08335978", +2144 => x"b02e0b0b", +2145 => x"0b0bb438", +2146 => x"6e087b05", +2147 => x"5b0b0b0b", +2148 => x"fed23980", +2149 => x"e740a43d", +2150 => x"0859787a", +2151 => x"240b0b0b", +2152 => x"85883879", +2153 => x"6381065a", +2154 => x"5f78802e", +2155 => x"0b0b0bff", +2156 => x"9538811a", +2157 => x"5f0b0b0b", +2158 => x"ff8c3980", +2159 => x"59807954", +2160 => x"547d517e", +2161 => x"520b0b81", +2162 => x"f1b33f80", +2163 => x"08802e0b", +2164 => x"0b0bffb4", +2165 => x"38816231", +2166 => x"70a13d08", +2167 => x"0c7b055b", +2168 => x"0b0b0bfd", +2169 => x"ff396281", +2170 => x"06597880", +2171 => x"2e0b0b0b", +2172 => x"fed43881", +2173 => x"1f5f0b0b", +2174 => x"0bfecb39", +2175 => x"0b0b82f0", +2176 => x"f07c0c81", +2177 => x"0b841d0c", +2178 => x"83b73d08", +2179 => x"810583b8", +2180 => x"3d0c881c", +2181 => x"83b73d08", +2182 => x"811183b9", +2183 => x"3d0c8111", +2184 => x"515a5c78", +2185 => x"87240b0b", +2186 => x"0b829238", +2187 => x"790b0b0b", +2188 => x"0b8c38a4", +2189 => x"3d08802e", +2190 => x"0b0b0bda", +2191 => x"86386b7c", +2192 => x"0c810b84", +2193 => x"1d0c83b7", +2194 => x"3d088105", +2195 => x"83b83d0c", +2196 => x"881c83b7", +2197 => x"3d088111", +2198 => x"83b93d0c", +2199 => x"8111515a", +2200 => x"5c788724", +2201 => x"0b0b0b81", +2202 => x"f6387930", +2203 => x"5a807a25", +2204 => x"0b0b0b81", +2205 => x"8c38907a", +2206 => x"250b0b0b", +2207 => x"0bbd380b", +2208 => x"0b82edb4", +2209 => x"7c0c900b", +2210 => x"841d0c83", +2211 => x"b73d0890", +2212 => x"0583b83d", +2213 => x"0c881c83", +2214 => x"b73d0881", +2215 => x"1183b93d", +2216 => x"0c811151", +2217 => x"5a5c7887", +2218 => x"240b0b0b", +2219 => x"80ee38f0", +2220 => x"1a5a7990", +2221 => x"240b0b0b", +2222 => x"0bc5380b", +2223 => x"0b82edb4", +2224 => x"7c0c7984", +2225 => x"1d0c83b7", +2226 => x"3d081a83", +2227 => x"b83d0c88", +2228 => x"1c83b73d", +2229 => x"08811183", +2230 => x"b93d0c81", +2231 => x"11515a5c", +2232 => x"8779250b", +2233 => x"0b0b0b99", +2234 => x"3883be3d", +2235 => x"dc055266", +2236 => x"510b0b0b", +2237 => x"cf8b3f80", +2238 => x"080b0b0b", +2239 => x"df863865", +2240 => x"5c7d7c0c", +2241 => x"a43d0884", +2242 => x"1d0c83b7", +2243 => x"3d08a53d", +2244 => x"080583b8", +2245 => x"3d0c0b0b", +2246 => x"0bef8739", +2247 => x"83be3ddc", +2248 => x"05526651", +2249 => x"0b0b0bce", +2250 => x"d83f8008", +2251 => x"0b0b0bde", +2252 => x"d33865f0", +2253 => x"1b5b5c0b", +2254 => x"0b0bfef6", +2255 => x"3983be3d", +2256 => x"dc055266", +2257 => x"510b0b0b", +2258 => x"ceb73f80", +2259 => x"080b0b0b", +2260 => x"deb23865", +2261 => x"a63d085b", +2262 => x"5c0b0b0b", +2263 => x"fdce3983", +2264 => x"be3ddc05", +2265 => x"5266510b", +2266 => x"0b0bce95", +2267 => x"3f80080b", +2268 => x"0b0bde90", +2269 => x"3865a63d", +2270 => x"08703051", +2271 => x"5b5c7980", +2272 => x"240b0b0b", +2273 => x"fdf0380b", +2274 => x"0b0bfef5", +2275 => x"3986410b", +2276 => x"0b0be18a", +2277 => x"390b0b82", +2278 => x"f0fc5e86", +2279 => x"5f0b0b0b", +2280 => x"d3cf39a5", +2281 => x"3d085a0b", +2282 => x"0b0bf9ae", +2283 => x"397f80e6", +2284 => x"2e098106", +2285 => x"0b0b0bfb", +2286 => x"dd38807a", +2287 => x"250b0b0b", +2288 => x"81bc3879", +2289 => x"5f600b0b", +2290 => x"0b0b8e38", +2291 => x"62810659", +2292 => x"78802e0b", +2293 => x"0b0bfaee", +2294 => x"38601a81", +2295 => x"055f0b0b", +2296 => x"0bfae339", +2297 => x"83b73d08", +2298 => x"0b0b0b0b", +2299 => x"8d38800b", +2300 => x"83b73d0c", +2301 => x"0b0b0bdd", +2302 => x"8b3983be", +2303 => x"3ddc0552", +2304 => x"66510b0b", +2305 => x"0bccfa3f", +2306 => x"80080b0b", +2307 => x"0bdcf538", +2308 => x"800b83b7", +2309 => x"3d0c0b0b", +2310 => x"0bdce939", +2311 => x"7d810a32", +2312 => x"5ead7b34", +2313 => x"0b0b0bf7", +2314 => x"8839787a", +2315 => x"3182055f", +2316 => x"807a250b", +2317 => x"0b0bfa8e", +2318 => x"3881195f", +2319 => x"0b0b0bfa", +2320 => x"85397930", +2321 => x"5bad7f34", +2322 => x"028dde05", +2323 => x"b33d705c", +2324 => x"425f897b", +2325 => x"250b0b0b", +2326 => x"f9c4380b", +2327 => x"0b0bf8b8", +2328 => x"39646584", +2329 => x"05710843", +2330 => x"46596080", +2331 => x"250b0b0b", +2332 => x"d0a438ff", +2333 => x"7d335b41", +2334 => x"0b0b0bd0", +2335 => x"9c39600b", +2336 => x"0b0b0b90", +2337 => x"38628106", +2338 => x"59815f78", +2339 => x"802e0b0b", +2340 => x"0bf9b338", +2341 => x"6082055f", +2342 => x"0b0b0bf9", +2343 => x"a939fc3d", +2344 => x"0d0b0b82", +2345 => x"f4ec0855", +2346 => x"b8150880", +2347 => x"2e0b0b0b", +2348 => x"0b983878", +2349 => x"54775376", +2350 => x"520b0b82", +2351 => x"f4ec0851", +2352 => x"0b0b0bcb", +2353 => x"f63f863d", +2354 => x"0d047451", +2355 => x"0b0b0bbe", +2356 => x"8e3f7854", +2357 => x"77537652", +2358 => x"0b0b82f4", +2359 => x"ec08510b", +2360 => x"0b0bcbd7", +2361 => x"3f863d0d", +2362 => x"04f63d0d", +2363 => x"7c7e6159", +2364 => x"56588056", +2365 => x"74762e0b", +2366 => x"0b0b0ba3", +2367 => x"3876547e", +2368 => x"53745277", +2369 => x"510b0b0b", +2370 => x"83823f80", +2371 => x"08558008", +2372 => x"ff2e0b0b", +2373 => x"0b0ba938", +2374 => x"74800c8c", +2375 => x"3d0d0476", +2376 => x"5475538c", +2377 => x"3df40552", +2378 => x"77510b0b", +2379 => x"0b82dd3f", +2380 => x"80085580", +2381 => x"08ff2e09", +2382 => x"81060b0b", +2383 => x"0b0bd938", +2384 => x"80770c81", +2385 => x"8a780c74", +2386 => x"800c8c3d", +2387 => x"0d047070", +2388 => x"70707754", +2389 => x"76537552", +2390 => x"0b0b82f4", +2391 => x"ec08510b", +2392 => x"0b0bff85", +2393 => x"3f505050", +2394 => x"5004ec3d", +2395 => x"0d66686a", +2396 => x"6c6e735c", +2397 => x"405d4242", +2398 => x"4260802e", +2399 => x"0b0b0b81", +2400 => x"b2388060", +2401 => x"085a5d7c", +2402 => x"7a270b0b", +2403 => x"0b819b38", +2404 => x"933d5b7b", +2405 => x"08841d08", +2406 => x"7d567a08", +2407 => x"557c5463", +2408 => x"53405e0b", +2409 => x"0b0bfec1", +2410 => x"3f800858", +2411 => x"8008ff2e", +2412 => x"0b0b0b81", +2413 => x"9538807a", +2414 => x"80083156", +2415 => x"567c7526", +2416 => x"0b0b0b0b", +2417 => x"83388156", +2418 => x"80087a27", +2419 => x"0b0b0b80", +2420 => x"ea387580", +2421 => x"2e0b0b0b", +2422 => x"80e13880", +2423 => x"081d5d60", +2424 => x"802e0b0b", +2425 => x"0b0baa38", +2426 => x"80567580", +2427 => x"08250b0b", +2428 => x"0b0b9838", +2429 => x"751b5574", +2430 => x"33777081", +2431 => x"05593481", +2432 => x"16567776", +2433 => x"240b0b0b", +2434 => x"0bea387f", +2435 => x"08840560", +2436 => x"0c787084", +2437 => x"055a0855", +2438 => x"74802e0b", +2439 => x"0b0b0bb9", +2440 => x"38797d26", +2441 => x"0b0b0bfe", +2442 => x"ea387c55", +2443 => x"74800c96", +2444 => x"3d0d04ff", +2445 => x"5a0b0b0b", +2446 => x"fec8397d", +2447 => x"7c0c7e84", +2448 => x"1d0c7c55", +2449 => x"0b0b0b0b", +2450 => x"e339818a", +2451 => x"620c807c", +2452 => x"0c800880", +2453 => x"0c963d0d", +2454 => x"0460802e", +2455 => x"0b0b0b0b", +2456 => x"84387460", +2457 => x"0c747c0c", +2458 => x"ff1d800c", +2459 => x"963d0d04", +2460 => x"fc3d0d79", +2461 => x"55785477", +2462 => x"5376520b", +2463 => x"0b82f4ec", +2464 => x"08510b0b", +2465 => x"0bfde33f", +2466 => x"863d0d04", +2467 => x"f83d0d7b", +2468 => x"7d7f0b0b", +2469 => x"82fbec54", +2470 => x"5957550b", +2471 => x"0b818dfb", +2472 => x"3f800881", +2473 => x"260b0b0b", +2474 => x"0b983874", +2475 => x"5474802e", +2476 => x"0b0b0b0b", +2477 => x"86387575", +2478 => x"34815473", +2479 => x"800c8a3d", +2480 => x"0d040b0b", +2481 => x"82f18452", +2482 => x"0b0b82fb", +2483 => x"ec510b0b", +2484 => x"818c953f", +2485 => x"80080b0b", +2486 => x"0b81d838", +2487 => x"80085474", +2488 => x"802e0b0b", +2489 => x"0b0bd438", +2490 => x"80ff7625", +2491 => x"0b0b0b0b", +2492 => x"c538ff80", +2493 => x"16538eff", +2494 => x"73270b0b", +2495 => x"0b85e338", +2496 => x"f0801653", +2497 => x"83efff73", +2498 => x"270b0b0b", +2499 => x"82d838fc", +2500 => x"80801653", +2501 => x"80fbffff", +2502 => x"73270b0b", +2503 => x"0b85e838", +2504 => x"8fff0a16", +2505 => x"53f7c00a", +2506 => x"73270b0b", +2507 => x"0b86a638", +2508 => x"ff54c00a", +2509 => x"76250b0b", +2510 => x"0bff8038", +2511 => x"75820a06", +2512 => x"709e2c70", +2513 => x"fc075151", +2514 => x"53727570", +2515 => x"81055734", +2516 => x"7581fc0a", +2517 => x"0670982a", +2518 => x"ff800751", +2519 => x"53727570", +2520 => x"81055734", +2521 => x"7587f080", +2522 => x"80067092", +2523 => x"2aff8007", +2524 => x"51537275", +2525 => x"70810557", +2526 => x"34758fe0", +2527 => x"8006708c", +2528 => x"2aff8007", +2529 => x"51537275", +2530 => x"70810557", +2531 => x"34759fc0", +2532 => x"0670862a", +2533 => x"ff800751", +2534 => x"53727570", +2535 => x"81055734", +2536 => x"75ffbf06", +2537 => x"ff800753", +2538 => x"72753486", +2539 => x"0b800c8a", +2540 => x"3d0d040b", +2541 => x"0b82f18c", +2542 => x"520b0b82", +2543 => x"fbec510b", +2544 => x"0b818aa4", +2545 => x"3f80080b", +2546 => x"0b0b81f7", +2547 => x"387581ff", +2548 => x"0676882c", +2549 => x"7081ff06", +2550 => x"80085759", +2551 => x"54587480", +2552 => x"2e0b0b0b", +2553 => x"fdd53876", +2554 => x"802e0b0b", +2555 => x"0bfdbc38", +2556 => x"800880ff", +2557 => x"187081ff", +2558 => x"06515456", +2559 => x"729e260b", +2560 => x"0b0b0b83", +2561 => x"38815680", +2562 => x"08a01870", +2563 => x"81ff0651", +2564 => x"5454728f", +2565 => x"260b0b0b", +2566 => x"0b833881", +2567 => x"54757407", +2568 => x"5372802e", +2569 => x"0b0b0b0b", +2570 => x"b5388008", +2571 => x"c0195456", +2572 => x"72be260b", +2573 => x"0b0b0b83", +2574 => x"38815680", +2575 => x"08ff8019", +2576 => x"7081ff06", +2577 => x"51545472", +2578 => x"80fc260b", +2579 => x"0b0b0b83", +2580 => x"38815475", +2581 => x"74075372", +2582 => x"0b0b0b80", +2583 => x"d338ff0b", +2584 => x"800c8a3d", +2585 => x"0d04fcd0", +2586 => x"801653ff", +2587 => x"548fff73", +2588 => x"270b0b0b", +2589 => x"fcc53875", +2590 => x"83e08006", +2591 => x"708c2ae0", +2592 => x"07515372", +2593 => x"75708105", +2594 => x"5734759f", +2595 => x"c0067086", +2596 => x"2aff8007", +2597 => x"51537275", +2598 => x"70810557", +2599 => x"3475ffbf", +2600 => x"06ff8007", +2601 => x"53727534", +2602 => x"830b800c", +2603 => x"8a3d0d04", +2604 => x"76757081", +2605 => x"05573477", +2606 => x"75348254", +2607 => x"73800c8a", +2608 => x"3d0d040b", +2609 => x"0b82f194", +2610 => x"520b0b82", +2611 => x"fbec510b", +2612 => x"0b818894", +2613 => x"3f80080b", +2614 => x"0b0b80f8", +2615 => x"387581ff", +2616 => x"0676882c", +2617 => x"7081ff06", +2618 => x"80085759", +2619 => x"54587480", +2620 => x"2e0b0b0b", +2621 => x"fbc53876", +2622 => x"802e0b0b", +2623 => x"0bfbac38", +2624 => x"80085381", +2625 => x"a077270b", +2626 => x"0b0b0b83", +2627 => x"38815376", +2628 => x"81ff2e0b", +2629 => x"0b0bfec6", +2630 => x"38817074", +2631 => x"06545472", +2632 => x"802e0b0b", +2633 => x"0bfeb738", +2634 => x"80085381", +2635 => x"a078270b", +2636 => x"0b0b0b83", +2637 => x"38735377", +2638 => x"81ff2e0b", +2639 => x"0b0bfe9e", +2640 => x"38727406", +2641 => x"5372802e", +2642 => x"0b0b0bfe", +2643 => x"91380b0b", +2644 => x"0bfedd39", +2645 => x"0b0b82f1", +2646 => x"9c520b0b", +2647 => x"82fbec51", +2648 => x"0b0b8187", +2649 => x"833f8008", +2650 => x"0b0b0bfa", +2651 => x"be388008", +2652 => x"7681ff06", +2653 => x"77882c70", +2654 => x"81ff0659", +2655 => x"55595981", +2656 => x"5474802e", +2657 => x"0b0b0bfa", +2658 => x"b2387580", +2659 => x"2e0b0b0b", +2660 => x"82a538df", +2661 => x"16537280", +2662 => x"dd260b0b", +2663 => x"0bfdbf38", +2664 => x"df185372", +2665 => x"80dd260b", +2666 => x"0b0bfdb2", +2667 => x"3876080b", +2668 => x"0b0b0b9c", +2669 => x"3873770c", +2670 => x"9b757081", +2671 => x"055734a4", +2672 => x"75708105", +2673 => x"573480c2", +2674 => x"75708105", +2675 => x"57348359", +2676 => x"75757081", +2677 => x"05573477", +2678 => x"75348219", +2679 => x"800c8a3d", +2680 => x"0d04758f", +2681 => x"c0067086", +2682 => x"2ac00751", +2683 => x"53727570", +2684 => x"81055734", +2685 => x"75ffbf06", +2686 => x"ff800753", +2687 => x"72753482", +2688 => x"540b0b0b", +2689 => x"fdb63975", +2690 => x"80f08080", +2691 => x"0670922a", +2692 => x"f0075153", +2693 => x"72757081", +2694 => x"05573475", +2695 => x"8fe08006", +2696 => x"708c2aff", +2697 => x"80075153", +2698 => x"72757081", +2699 => x"05573475", +2700 => x"9fc00670", +2701 => x"862aff80", +2702 => x"07515372", +2703 => x"75708105", +2704 => x"573475ff", +2705 => x"bf06ff80", +2706 => x"07537275", +2707 => x"34840b80", +2708 => x"0c8a3d0d", +2709 => x"047581c0", +2710 => x"0a067098", +2711 => x"2af80751", +2712 => x"53727570", +2713 => x"81055734", +2714 => x"7587f080", +2715 => x"80067092", +2716 => x"2aff8007", +2717 => x"51537275", +2718 => x"70810557", +2719 => x"34758fe0", +2720 => x"8006708c", +2721 => x"2aff8007", +2722 => x"51537275", +2723 => x"70810557", +2724 => x"34759fc0", +2725 => x"0670862a", +2726 => x"ff800751", +2727 => x"53727570", +2728 => x"81055734", +2729 => x"75ffbf06", +2730 => x"ff800753", +2731 => x"72753485", +2732 => x"0b800c8a", +2733 => x"3d0d0476", +2734 => x"08802e0b", +2735 => x"0b0b0b9d", +2736 => x"38800877", +2737 => x"0c9b7570", +2738 => x"81055734", +2739 => x"a8757081", +2740 => x"05573480", +2741 => x"c2757081", +2742 => x"05573483", +2743 => x"59777534", +2744 => x"8119800c", +2745 => x"8a3d0d04", +2746 => x"fa3d0d78", +2747 => x"0b0b82f4", +2748 => x"ec085455", +2749 => x"b8130880", +2750 => x"2e0b0b0b", +2751 => x"81dc388c", +2752 => x"15227083", +2753 => x"ffff0670", +2754 => x"832a8132", +2755 => x"70810651", +2756 => x"55555672", +2757 => x"802e0b0b", +2758 => x"0b80f038", +2759 => x"73842a81", +2760 => x"32810657", +2761 => x"ff53760b", +2762 => x"0b0b8193", +2763 => x"3873822a", +2764 => x"70810651", +2765 => x"5372802e", +2766 => x"0b0b0b80", +2767 => x"c638b015", +2768 => x"08547380", +2769 => x"2e0b0b0b", +2770 => x"0ba53880", +2771 => x"c0155373", +2772 => x"732e0b0b", +2773 => x"0b0b9438", +2774 => x"73520b0b", +2775 => x"82f4ec08", +2776 => x"510b0b0b", +2777 => x"b5d23f8c", +2778 => x"15225676", +2779 => x"b0160c75", +2780 => x"db065372", +2781 => x"8c162380", +2782 => x"0b84160c", +2783 => x"90150875", +2784 => x"0c725675", +2785 => x"88075372", +2786 => x"8c162390", +2787 => x"1508802e", +2788 => x"0b0b0b80", +2789 => x"d3388c15", +2790 => x"22708106", +2791 => x"5553730b", +2792 => x"0b0b0ba2", +2793 => x"38720a10", +2794 => x"0a708106", +2795 => x"5153720b", +2796 => x"0b0b0b85", +2797 => x"38941508", +2798 => x"54738816", +2799 => x"0c805372", +2800 => x"800c883d", +2801 => x"0d04800b", +2802 => x"88160c94", +2803 => x"15083098", +2804 => x"160c8053", +2805 => x"0b0b0b0b", +2806 => x"e6397251", +2807 => x"0b0b0baf", +2808 => x"fe3f0b0b", +2809 => x"0bfe9839", +2810 => x"74510b0b", +2811 => x"80c4ef3f", +2812 => x"8c152270", +2813 => x"81065553", +2814 => x"73802e0b", +2815 => x"0b0bffa5", +2816 => x"380b0b0b", +2817 => x"0bc039ef", +2818 => x"3d0d6365", +2819 => x"9011085e", +2820 => x"40408053", +2821 => x"7b609005", +2822 => x"08240b0b", +2823 => x"0b81d038", +2824 => x"941f70ff", +2825 => x"1e70822b", +2826 => x"73116494", +2827 => x"05705c43", +2828 => x"5f610570", +2829 => x"087f0881", +2830 => x"0557555c", +2831 => x"5e42570b", +2832 => x"0b81ebf8", +2833 => x"3f80085d", +2834 => x"80080b0b", +2835 => x"0b81a738", +2836 => x"7e527f51", +2837 => x"0b0b80e9", +2838 => x"803f800b", +2839 => x"8008240b", +2840 => x"0b0b8189", +2841 => x"38811d5d", +2842 => x"80707f63", +2843 => x"5a585b58", +2844 => x"76708405", +2845 => x"58087083", +2846 => x"ffff067b", +2847 => x"0571902a", +2848 => x"71902a05", +2849 => x"70902a5d", +2850 => x"5283ffff", +2851 => x"06821822", +2852 => x"7072311b", +2853 => x"585b5483", +2854 => x"ffff0676", +2855 => x"22707231", +2856 => x"77902c05", +2857 => x"70902c5b", +2858 => x"52435372", +2859 => x"76237482", +2860 => x"17238416", +2861 => x"567a7727", +2862 => x"0b0b0bff", +2863 => x"b3387b10", +2864 => x"101e5978", +2865 => x"080b0b0b", +2866 => x"0ba338fc", +2867 => x"19597d79", +2868 => x"270b0b0b", +2869 => x"0b923878", +2870 => x"080b0b0b", +2871 => x"0b8a38ff", +2872 => x"1c5c0b0b", +2873 => x"0b0be439", +2874 => x"7b609005", +2875 => x"0c7c5372", +2876 => x"800c933d", +2877 => x"0d048070", +2878 => x"5b587670", +2879 => x"84055808", +2880 => x"7083ffff", +2881 => x"06707f29", +2882 => x"1c72902a", +2883 => x"60297190", +2884 => x"2a057090", +2885 => x"2a5e5283", +2886 => x"ffff0682", +2887 => x"19227072", +2888 => x"311c5945", +2889 => x"5283ffff", +2890 => x"06772270", +2891 => x"72317890", +2892 => x"2c057090", +2893 => x"2c5c5256", +2894 => x"51537276", +2895 => x"23748217", +2896 => x"23841656", +2897 => x"7a77270b", +2898 => x"0b0bffae", +2899 => x"3878080b", +2900 => x"0b0bfdfc", +2901 => x"38fc1959", +2902 => x"7d79270b", +2903 => x"0b0b0b92", +2904 => x"3878080b", +2905 => x"0b0b0b8a", +2906 => x"38ff1c5c", +2907 => x"0b0b0b0b", +2908 => x"e4397b60", +2909 => x"90050c0b", +2910 => x"0b0bfdd4", +2911 => x"398c08c8", +2912 => x"3d0dbc3d", +2913 => x"0880c03d", +2914 => x"0880c23d", +2915 => x"0880c53d", +2916 => x"0880c73d", +2917 => x"088c0c5d", +2918 => x"4b434080", +2919 => x"0bbe3d08", +2920 => x"80c03d08", +2921 => x"5bba3d0c", +2922 => x"79bb3d0c", +2923 => x"6080c005", +2924 => x"08574875", +2925 => x"682e0981", +2926 => x"060b0b0b", +2927 => x"80ea38b8", +2928 => x"3d085780", +2929 => x"77240b0b", +2930 => x"0b818c38", +2931 => x"677a0c76", +2932 => x"9ffe0a06", +2933 => x"56759ffe", +2934 => x"0a2e0b0b", +2935 => x"0b819838", +2936 => x"b83d08ba", +2937 => x"3d085a58", +2938 => x"80568076", +2939 => x"54547751", +2940 => x"78520b0b", +2941 => x"81d6f23f", +2942 => x"80080b0b", +2943 => x"0b81c638", +2944 => x"80c13d08", +2945 => x"5881780c", +2946 => x"0b0b82f0", +2947 => x"f05f8c08", +2948 => x"802e0b0b", +2949 => x"0b0b8638", +2950 => x"811f8c08", +2951 => x"0c7e5675", +2952 => x"800cba3d", +2953 => x"0d8c0c04", +2954 => x"7f80c405", +2955 => x"0884170c", +2956 => x"816080c4", +2957 => x"05082b88", +2958 => x"170c7552", +2959 => x"7f510b0b", +2960 => x"80d8ad3f", +2961 => x"676080c0", +2962 => x"050cb83d", +2963 => x"08577680", +2964 => x"250b0b0b", +2965 => x"fef63881", +2966 => x"7a0c76fe", +2967 => x"0a0670ba", +2968 => x"3d0c709f", +2969 => x"fe0a0657", +2970 => x"57759ffe", +2971 => x"0a2e0981", +2972 => x"060b0b0b", +2973 => x"feea3880", +2974 => x"c13d0856", +2975 => x"80ce8f76", +2976 => x"0cb93d08", +2977 => x"0b0b0b84", +2978 => x"c93876bf", +2979 => x"ffff060b", +2980 => x"0b82f1a4", +2981 => x"4056750b", +2982 => x"0b0b84b6", +2983 => x"388c0880", +2984 => x"2e0b0b0b", +2985 => x"fef73883", +2986 => x"1f337f88", +2987 => x"05585675", +2988 => x"0b0b0b0b", +2989 => x"8438831f", +2990 => x"57768c08", +2991 => x"0c7e560b", +2992 => x"0b0bfedb", +2993 => x"39ba3dff", +2994 => x"b41156ff", +2995 => x"b0055477", +2996 => x"5278537f", +2997 => x"510b0b80", +2998 => x"eaa43f80", +2999 => x"08b93d08", +3000 => x"70942a8f", +3001 => x"ff065e59", +3002 => x"417b0b0b", +3003 => x"0b83ef38", +3004 => x"a73d08a7", +3005 => x"3d080588", +3006 => x"b2115d56", +3007 => x"a07c250b", +3008 => x"0b0b8ff4", +3009 => x"3880c07c", +3010 => x"31889217", +3011 => x"79722bbc", +3012 => x"3d08722a", +3013 => x"07b53d71", +3014 => x"5670555d", +3015 => x"5157570b", +3016 => x"0b81dfa9", +3017 => x"3fb23d08", +3018 => x"b43d08b2", +3019 => x"3d5d5a58", +3020 => x"8076240b", +3021 => x"0b0b93f5", +3022 => x"3877b73d", +3023 => x"0c78b83d", +3024 => x"0cb63d08", +3025 => x"90ff0a05", +3026 => x"b73d0cf7", +3027 => x"cd1c5c81", +3028 => x"4ebffc0a", +3029 => x"56807655", +3030 => x"55b63d08", +3031 => x"b83d0858", +3032 => x"5276537a", +3033 => x"510b0b81", +3034 => x"a2803f83", +3035 => x"feca8fa7", +3036 => x"56869bbd", +3037 => x"86e17655", +3038 => x"55b03d08", +3039 => x"b23d0858", +3040 => x"52765379", +3041 => x"510b0b81", +3042 => x"a3933f83", +3043 => x"fe9a94a8", +3044 => x"56f8db83", +3045 => x"91b37655", +3046 => x"55b23d08", +3047 => x"b43d0858", +3048 => x"527653ba", +3049 => x"3dd00551", +3050 => x"0b0b81a0", +3051 => x"963fae3d", +3052 => x"08b03d08", +3053 => x"7d54ae3d", +3054 => x"535a580b", +3055 => x"0b81de8d", +3056 => x"3faa3d4c", +3057 => x"83fecd88", +3058 => x"93568584", +3059 => x"fdf3fb76", +3060 => x"5555ac3d", +3061 => x"08ae3d08", +3062 => x"58527653", +3063 => x"6b510b0b", +3064 => x"81a2ba3f", +3065 => x"a83dab3d", +3066 => x"08ad3d08", +3067 => x"59557756", +3068 => x"78537954", +3069 => x"7052450b", +3070 => x"0b819fc7", +3071 => x"3fa83d08", +3072 => x"aa3d0871", +3073 => x"5370545f", +3074 => x"5d0b0b81", +3075 => x"dfdf3f80", +3076 => x"08438056", +3077 => x"80765454", +3078 => x"7c517d52", +3079 => x"0b0b81d9", +3080 => x"843f800b", +3081 => x"8008240b", +3082 => x"0b0b8eae", +3083 => x"38810ba2", +3084 => x"3d0c6296", +3085 => x"260b0b0b", +3086 => x"0bb23862", +3087 => x"1010100b", +3088 => x"0b82f2d8", +3089 => x"05841108", +3090 => x"71085555", +3091 => x"b93d08bb", +3092 => x"3d085952", +3093 => x"5676520b", +3094 => x"0b81d8c9", +3095 => x"3f800b80", +3096 => x"08246371", +3097 => x"31445680", +3098 => x"0ba23d0c", +3099 => x"a73d087c", +3100 => x"31ff055a", +3101 => x"807a454b", +3102 => x"6a7a240b", +3103 => x"0b0b8da9", +3104 => x"38806324", +3105 => x"0b0b0ba0", +3106 => x"8b38800b", +3107 => x"a63d0c62", +3108 => x"4f636305", +3109 => x"44896227", +3110 => x"0b0b0b0b", +3111 => x"83388042", +3112 => x"81588562", +3113 => x"250b0b0b", +3114 => x"0b873861", +3115 => x"fc054280", +3116 => x"58810ba1", +3117 => x"3d0cff70", +3118 => x"a53d0c46", +3119 => x"6185260b", +3120 => x"0b0b82bd", +3121 => x"38611010", +3122 => x"0b0b82f1", +3123 => x"b0055675", +3124 => x"08040b0b", +3125 => x"82f0f85f", +3126 => x"0b0b0bfb", +3127 => x"c039b83d", +3128 => x"08ba3d08", +3129 => x"58b73d0c", +3130 => x"76b83d0c", +3131 => x"b63d08fc", +3132 => x"0a069ffc", +3133 => x"0a07b73d", +3134 => x"0cf8811c", +3135 => x"5c804eb2", +3136 => x"3db13d5c", +3137 => x"5abffc0a", +3138 => x"56807655", +3139 => x"55b63d08", +3140 => x"b83d0858", +3141 => x"5276537a", +3142 => x"510b0b81", +3143 => x"9ecc3f83", +3144 => x"feca8fa7", +3145 => x"56869bbd", +3146 => x"86e17655", +3147 => x"55b03d08", +3148 => x"b23d0858", +3149 => x"52765379", +3150 => x"510b0b81", +3151 => x"9fdf3f83", +3152 => x"fe9a94a8", +3153 => x"56f8db83", +3154 => x"91b37655", +3155 => x"55b23d08", +3156 => x"b43d0858", +3157 => x"527653ba", +3158 => x"3dd00551", +3159 => x"0b0b819c", +3160 => x"e23fae3d", +3161 => x"08b03d08", +3162 => x"7d54ae3d", +3163 => x"535a580b", +3164 => x"0b81dad9", +3165 => x"3faa3d4c", +3166 => x"83fecd88", +3167 => x"93568584", +3168 => x"fdf3fb76", +3169 => x"5555ac3d", +3170 => x"08ae3d08", +3171 => x"58527653", +3172 => x"6b510b0b", +3173 => x"819f863f", +3174 => x"a83dab3d", +3175 => x"08ad3d08", +3176 => x"59557756", +3177 => x"78537954", +3178 => x"7052450b", +3179 => x"0b819c93", +3180 => x"3fa83d08", +3181 => x"aa3d0871", +3182 => x"5370545f", +3183 => x"5d0b0b81", +3184 => x"dcab3f80", +3185 => x"08438056", +3186 => x"80765454", +3187 => x"7c517d52", +3188 => x"0b0b81d5", +3189 => x"d03f8008", +3190 => x"80250b0b", +3191 => x"0bfcce38", +3192 => x"0b0b0b8a", +3193 => x"f539800b", +3194 => x"a13d0c68", +3195 => x"63058111", +3196 => x"70485da4", +3197 => x"3d0c7b80", +3198 => x"240b0b0b", +3199 => x"0b833881", +3200 => x"5c845a80", +3201 => x"6080c405", +3202 => x"0c987c26", +3203 => x"0b0b0b0b", +3204 => x"9b388057", +3205 => x"81177a10", +3206 => x"9411585b", +3207 => x"577b7627", +3208 => x"0b0b0b0b", +3209 => x"ef387660", +3210 => x"80c4050c", +3211 => x"7f80c405", +3212 => x"08527f51", +3213 => x"0b0b80cf", +3214 => x"903f8008", +3215 => x"6080c005", +3216 => x"0c800880", +3217 => x"088e6827", +3218 => x"58404d77", +3219 => x"802e0b0b", +3220 => x"0b86fd38", +3221 => x"75802e0b", +3222 => x"0b0b86f4", +3223 => x"38b83d08", +3224 => x"ba3d0871", +3225 => x"b93d0c70", +3226 => x"ba3d0c64", +3227 => x"a53d0c67", +3228 => x"a73d0c5a", +3229 => x"58825c80", +3230 => x"63250b0b", +3231 => x"0b8cae38", +3232 => x"62832b80", +3233 => x"f8060b0b", +3234 => x"82f2d811", +3235 => x"080b0b82", +3236 => x"f2dc1208", +3237 => x"65842c70", +3238 => x"842a7081", +3239 => x"0651545d", +3240 => x"405e5675", +3241 => x"0b0b0b8a", +3242 => x"8a387980", +3243 => x"2e0b0b0b", +3244 => x"0ba8380b", +3245 => x"0b82f2b0", +3246 => x"58798106", +3247 => x"56750b0b", +3248 => x"0b88f138", +3249 => x"79812c88", +3250 => x"19595a79", +3251 => x"0b0b0b0b", +3252 => x"e838b83d", +3253 => x"08ba3d08", +3254 => x"5a587c54", +3255 => x"7d557752", +3256 => x"78536451", +3257 => x"0b0b81bb", +3258 => x"b43fa83d", +3259 => x"08aa3d08", +3260 => x"71bb3d0c", +3261 => x"70bc3d0c", +3262 => x"5a58a13d", +3263 => x"08802e0b", +3264 => x"0b0b80eb", +3265 => x"38805a9f", +3266 => x"fc0a5680", +3267 => x"76545477", +3268 => x"5178520b", +3269 => x"0b81d38d", +3270 => x"3f798008", +3271 => x"240b0b0b", +3272 => x"8def3880", +3273 => x"66250b0b", +3274 => x"0b80c438", +3275 => x"79802e0b", +3276 => x"0b0b0bbb", +3277 => x"38800ba4", +3278 => x"3d08250b", +3279 => x"0b0b84f8", +3280 => x"38a33d08", +3281 => x"63ff0544", +3282 => x"4680c882", +3283 => x"0a568076", +3284 => x"55557752", +3285 => x"78536451", +3286 => x"0b0b819b", +3287 => x"c03fa83d", +3288 => x"08aa3d08", +3289 => x"5ab93d0c", +3290 => x"78ba3d0c", +3291 => x"811c5c7b", +3292 => x"5264510b", +3293 => x"0b81d6d5", +3294 => x"3fb83d08", +3295 => x"ba3d0858", +3296 => x"547655a8", +3297 => x"3d08aa3d", +3298 => x"08585276", +3299 => x"536b510b", +3300 => x"0b819b89", +3301 => x"3f80f082", +3302 => x"0a568076", +3303 => x"5555aa3d", +3304 => x"08ac3d08", +3305 => x"58527653", +3306 => x"ac3d510b", +3307 => x"0b819893", +3308 => x"3fac3d08", +3309 => x"ae3d0858", +3310 => x"b53d0c76", +3311 => x"b63d0cb4", +3312 => x"3d0886bf", +3313 => x"0a05b53d", +3314 => x"0c65802e", +3315 => x"0b0b0b9b", +3316 => x"c9386f80", +3317 => x"2e0b0b0b", +3318 => x"99e23865", +3319 => x"1010100b", +3320 => x"0b82f2d0", +3321 => x"05841108", +3322 => x"71085656", +3323 => x"568ffc0a", +3324 => x"56807653", +3325 => x"5364510b", +3326 => x"0b81b9a1", +3327 => x"3fb43d08", +3328 => x"b63d0858", +3329 => x"547655a8", +3330 => x"3d08aa3d", +3331 => x"08585276", +3332 => x"536b510b", +3333 => x"0b8198d2", +3334 => x"3faa3d08", +3335 => x"ac3d0858", +3336 => x"b53d0c76", +3337 => x"b63d0c80", +3338 => x"0bb93d08", +3339 => x"bb3d085b", +3340 => x"595c80c8", +3341 => x"820a5d80", +3342 => x"5e775178", +3343 => x"520b0b81", +3344 => x"d7ab3f80", +3345 => x"08800853", +3346 => x"65525a0b", +3347 => x"0b81d4fd", +3348 => x"3fa83d08", +3349 => x"aa3d0858", +3350 => x"547655b8", +3351 => x"3d08ba3d", +3352 => x"08585276", +3353 => x"536b510b", +3354 => x"0b8197fe", +3355 => x"3faa3d08", +3356 => x"ac3d085a", +3357 => x"b93d0c78", +3358 => x"ba3d0cb0", +3359 => x"1a56757f", +3360 => x"70810541", +3361 => x"34b83d08", +3362 => x"ba3d08b6", +3363 => x"3d08b83d", +3364 => x"085a5578", +3365 => x"56715370", +3366 => x"545a580b", +3367 => x"0b81d085", +3368 => x"3f800b80", +3369 => x"08240b0b", +3370 => x"0b87d438", +3371 => x"77547855", +3372 => x"9ffc0a56", +3373 => x"80765353", +3374 => x"64510b0b", +3375 => x"8197ab3f", +3376 => x"b43d08b6", +3377 => x"3d087155", +3378 => x"7056aa3d", +3379 => x"08ac3d08", +3380 => x"5a537854", +3381 => x"5a580b0b", +3382 => x"81cfca3f", +3383 => x"800b8008", +3384 => x"240b0b0b", +3385 => x"86e63881", +3386 => x"1c5c7b66", +3387 => x"250b0b0b", +3388 => x"81c6387c", +3389 => x"547d5577", +3390 => x"5278536b", +3391 => x"510b0b81", +3392 => x"989b3faa", +3393 => x"3d08ac3d", +3394 => x"0858b53d", +3395 => x"0c76b63d", +3396 => x"0c7c547d", +3397 => x"55b83d08", +3398 => x"ba3d0858", +3399 => x"52765364", +3400 => x"510b0b81", +3401 => x"97f73fa8", +3402 => x"3d08aa3d", +3403 => x"0871bb3d", +3404 => x"0c70bc3d", +3405 => x"0c5a580b", +3406 => x"0b0bfdfd", +3407 => x"398ffc0a", +3408 => x"58807855", +3409 => x"7056b53d", +3410 => x"08b73d08", +3411 => x"59537754", +3412 => x"6552590b", +3413 => x"0b8194eb", +3414 => x"3fa83d08", +3415 => x"aa3d0858", +3416 => x"537654b8", +3417 => x"3d08ba3d", +3418 => x"08585176", +3419 => x"520b0b81", +3420 => x"cc9f3f80", +3421 => x"0880240b", +3422 => x"0b0b85d0", +3423 => x"38b43d08", +3424 => x"b63d0858", +3425 => x"54765577", +3426 => x"5278536b", +3427 => x"510b0b81", +3428 => x"95d83faa", +3429 => x"3d08ac3d", +3430 => x"08585376", +3431 => x"54b83d08", +3432 => x"ba3d0858", +3433 => x"5176520b", +3434 => x"0b81cdf9", +3435 => x"3f800b80", +3436 => x"08240b0b", +3437 => x"0b97cb38", +3438 => x"6cb73d08", +3439 => x"b93d085b", +3440 => x"ba3d0c79", +3441 => x"bb3d0ca3", +3442 => x"3d08a63d", +3443 => x"0848445f", +3444 => x"800ba73d", +3445 => x"08575877", +3446 => x"76240b0b", +3447 => x"0b0b8338", +3448 => x"81588078", +3449 => x"0657628e", +3450 => x"240b0b0b", +3451 => x"89ad3881", +3452 => x"70790658", +3453 => x"5976802e", +3454 => x"0b0b0b89", +3455 => x"9e386210", +3456 => x"10100b0b", +3457 => x"82f2d805", +3458 => x"70088412", +3459 => x"08806c24", +3460 => x"53405e56", +3461 => x"8066250b", +3462 => x"0b0b86c9", +3463 => x"38810bb9", +3464 => x"3d08bb3d", +3465 => x"085b595c", +3466 => x"7c547d55", +3467 => x"77527853", +3468 => x"64510b0b", +3469 => x"81b4e63f", +3470 => x"a83d08aa", +3471 => x"3d085851", +3472 => x"76520b0b", +3473 => x"81d3a63f", +3474 => x"80088008", +3475 => x"5365525a", +3476 => x"0b0b81d0", +3477 => x"f83f7c54", +3478 => x"7d55a83d", +3479 => x"08aa3d08", +3480 => x"58527653", +3481 => x"6b510b0b", +3482 => x"8195b23f", +3483 => x"aa3d08ac", +3484 => x"3d085854", +3485 => x"7655b83d", +3486 => x"08ba3d08", +3487 => x"58527653", +3488 => x"ac3d510b", +3489 => x"0b8193e2", +3490 => x"3fac3d08", +3491 => x"ae3d085a", +3492 => x"b93d0c78", +3493 => x"ba3d0cb0", +3494 => x"1a56757f", +3495 => x"70810541", +3496 => x"347b662e", +3497 => x"0b0b0b82", +3498 => x"c23880c8", +3499 => x"820a5680", +3500 => x"765555b8", +3501 => x"3d08ba3d", +3502 => x"08585276", +3503 => x"5364510b", +3504 => x"0b8194d9", +3505 => x"3fa83d08", +3506 => x"aa3d0871", +3507 => x"bb3d0c70", +3508 => x"bc3d0c5a", +3509 => x"58805680", +3510 => x"76545477", +3511 => x"5178520b", +3512 => x"0b81c585", +3513 => x"3f800880", +3514 => x"2e0b0b0b", +3515 => x"83913881", +3516 => x"1c5c0b0b", +3517 => x"0bfeb139", +3518 => x"a07c31ba", +3519 => x"3d08712b", +3520 => x"b43d7155", +3521 => x"70545c51", +3522 => x"560b0b81", +3523 => x"cfbf3fb2", +3524 => x"3d08b43d", +3525 => x"08b23d5d", +3526 => x"5a587580", +3527 => x"250b0b0b", +3528 => x"f097380b", +3529 => x"0b0b8485", +3530 => x"3979304b", +3531 => x"80440b0b", +3532 => x"0bf2ce39", +3533 => x"811c7808", +3534 => x"841a0859", +3535 => x"5577567d", +3536 => x"537e5465", +3537 => x"525c0b0b", +3538 => x"8193d23f", +3539 => x"a83d08aa", +3540 => x"3d085f5d", +3541 => x"0b0b0bf6", +3542 => x"eb396252", +3543 => x"64510b0b", +3544 => x"81ceea3f", +3545 => x"7c537d54", +3546 => x"a83d08aa", +3547 => x"3d085851", +3548 => x"76520b0b", +3549 => x"81c6863f", +3550 => x"80083070", +3551 => x"8008079f", +3552 => x"2a647131", +3553 => x"4551560b", +3554 => x"0b0bf1a1", +3555 => x"39800ba1", +3556 => x"3d0c8069", +3557 => x"250b0b0b", +3558 => x"84e73868", +3559 => x"69a53d0c", +3560 => x"69475c0b", +3561 => x"0b0bf4d9", +3562 => x"39925c80", +3563 => x"490b0b0b", +3564 => x"f4cf3979", +3565 => x"8f060b0b", +3566 => x"82f2d008", +3567 => x"0b0b82f2", +3568 => x"d4085955", +3569 => x"77567853", +3570 => x"79546552", +3571 => x"5a0b0b81", +3572 => x"b1cb3fa8", +3573 => x"3d08aa3d", +3574 => x"0871bb3d", +3575 => x"0c70bc3d", +3576 => x"0c5a5883", +3577 => x"5c0b0b0b", +3578 => x"f5c039b8", +3579 => x"3d08ba3d", +3580 => x"08715670", +3581 => x"57585276", +3582 => x"5364510b", +3583 => x"0b818fc3", +3584 => x"3fa83d08", +3585 => x"aa3d0871", +3586 => x"bb3d0c70", +3587 => x"bc3d0c7e", +3588 => x"557f5671", +3589 => x"5370545a", +3590 => x"580b0b81", +3591 => x"c6f33f80", +3592 => x"0880240b", +3593 => x"0b0b0ba4", +3594 => x"387c537d", +3595 => x"54775178", +3596 => x"520b0b81", +3597 => x"c2b33f80", +3598 => x"080b0b0b", +3599 => x"80c13879", +3600 => x"81065675", +3601 => x"802e0b0b", +3602 => x"0b0bb438", +3603 => x"ff1f7033", +3604 => x"575f75b9", +3605 => x"2e098106", +3606 => x"0b0b0b0b", +3607 => x"94387e6d", +3608 => x"2e098106", +3609 => x"0b0b0b0b", +3610 => x"e3386281", +3611 => x"0543b06d", +3612 => x"347e7f81", +3613 => x"05713381", +3614 => x"05584057", +3615 => x"75773460", +3616 => x"527f510b", +3617 => x"0b80c3e8", +3618 => x"3f807f34", +3619 => x"80c13d08", +3620 => x"63810571", +3621 => x"0c568c08", +3622 => x"802e0b0b", +3623 => x"0b0b8538", +3624 => x"7e8c080c", +3625 => x"6c800cba", +3626 => x"3d0d8c0c", +3627 => x"0462305b", +3628 => x"7a802e0b", +3629 => x"0b0bf4c2", +3630 => x"387a832b", +3631 => x"80f8060b", +3632 => x"0b82f2dc", +3633 => x"11080b0b", +3634 => x"82f2d812", +3635 => x"08565678", +3636 => x"53795465", +3637 => x"52560b0b", +3638 => x"8190c23f", +3639 => x"a83d08aa", +3640 => x"3d0871bb", +3641 => x"3d0c70bc", +3642 => x"3d0c7c84", +3643 => x"2c5c5a58", +3644 => x"79802e0b", +3645 => x"0b0bf482", +3646 => x"380b0b82", +3647 => x"f2b07a81", +3648 => x"06575b75", +3649 => x"0b0b0b82", +3650 => x"90387981", +3651 => x"2c881c5c", +3652 => x"5a79802e", +3653 => x"0b0b0bf3", +3654 => x"e1387981", +3655 => x"06567580", +3656 => x"2e0b0b0b", +3657 => x"0be4380b", +3658 => x"0b0b81ed", +3659 => x"399f820a", +3660 => x"56807655", +3661 => x"55775278", +3662 => x"537a510b", +3663 => x"0b818d83", +3664 => x"3fb03d08", +3665 => x"b23d085a", +3666 => x"b73d0c78", +3667 => x"b83d0cb6", +3668 => x"3d0890ff", +3669 => x"0a05b73d", +3670 => x"0cf7cd1c", +3671 => x"5c814e0b", +3672 => x"0b0bebed", +3673 => x"39757906", +3674 => x"5675802e", +3675 => x"0b0b0bf9", +3676 => x"ac388070", +3677 => x"484a6966", +3678 => x"240b0b0b", +3679 => x"82943880", +3680 => x"d0820a56", +3681 => x"80765555", +3682 => x"7c527d53", +3683 => x"64510b0b", +3684 => x"818f8a3f", +3685 => x"a83d08aa", +3686 => x"3d085853", +3687 => x"7654b83d", +3688 => x"08ba3d08", +3689 => x"58517652", +3690 => x"0b0b81c8", +3691 => x"8c3f6980", +3692 => x"08250b0b", +3693 => x"0b81db38", +3694 => x"6c5fb17f", +3695 => x"70810541", +3696 => x"34628105", +3697 => x"4366527f", +3698 => x"510b0b80", +3699 => x"c1a23f69", +3700 => x"802e0b0b", +3701 => x"0bfda838", +3702 => x"67307069", +3703 => x"079f2a51", +3704 => x"56676a2e", +3705 => x"0b0b0b0b", +3706 => x"8838750b", +3707 => x"0b0b80e5", +3708 => x"3869527f", +3709 => x"510b0b80", +3710 => x"c0f63f0b", +3711 => x"0b0bfcff", +3712 => x"39817071", +3713 => x"a63d0c71", +3714 => x"485d490b", +3715 => x"0b0beff1", +3716 => x"39815a0b", +3717 => x"0b0bf28b", +3718 => x"39811c7b", +3719 => x"08841d08", +3720 => x"59557756", +3721 => x"78537954", +3722 => x"65525c0b", +3723 => x"0b818ded", +3724 => x"3fa83d08", +3725 => x"aa3d0871", +3726 => x"bb3d0c70", +3727 => x"bc3d0c7b", +3728 => x"812c881e", +3729 => x"5e5c5a58", +3730 => x"790b0b0b", +3731 => x"fdcc380b", +3732 => x"0b0bf1a6", +3733 => x"3967527f", +3734 => x"510b0b80", +3735 => x"c0923f69", +3736 => x"527f510b", +3737 => x"0b80c088", +3738 => x"3f0b0b0b", +3739 => x"fc913977", +3740 => x"810a3253", +3741 => x"78547951", +3742 => x"7a520b0b", +3743 => x"81c4a63f", +3744 => x"80088025", +3745 => x"0b0b0bf6", +3746 => x"af3879b9", +3747 => x"3d0c7aba", +3748 => x"3d0c6809", +3749 => x"430b0b0b", +3750 => x"feab396a", +3751 => x"a63d0878", +3752 => x"794b4c59", +3753 => x"596f802e", +3754 => x"0b0b0b80", +3755 => x"d0388162", +3756 => x"250b0b0b", +3757 => x"8ec73865", +3758 => x"ff05a63d", +3759 => x"08713159", +3760 => x"5aa53d08", +3761 => x"7a250b0b", +3762 => x"0b0b9438", +3763 => x"79a63d08", +3764 => x"316f11a1", +3765 => x"3d0ca63d", +3766 => x"0805a63d", +3767 => x"0c765865", +3768 => x"5c806624", +3769 => x"0b0b0b84", +3770 => x"cb386a1c", +3771 => x"641d454b", +3772 => x"81527f51", +3773 => x"0b0b80c4", +3774 => x"de3f8008", +3775 => x"4a788024", +3776 => x"56806425", +3777 => x"0b0b0b0b", +3778 => x"a3387580", +3779 => x"2e0b0b0b", +3780 => x"0b9a3863", +3781 => x"5c786425", +3782 => x"0b0b0b0b", +3783 => x"8338785c", +3784 => x"6a7c3179", +3785 => x"7d31657e", +3786 => x"31465a4b", +3787 => x"800ba63d", +3788 => x"08250b0b", +3789 => x"0b80cb38", +3790 => x"6f802e0b", +3791 => x"0b0b8ae5", +3792 => x"38807825", +3793 => x"0b0b0b0b", +3794 => x"ac387753", +3795 => x"69527f51", +3796 => x"0b0b80c7", +3797 => x"943f8008", +3798 => x"61548008", +3799 => x"5360524a", +3800 => x"0b0b80c4", +3801 => x"8e3f8008", +3802 => x"61536052", +3803 => x"560b0b0b", +3804 => x"bdfe3f75", +3805 => x"41a53d08", +3806 => x"78315a79", +3807 => x"0b0b0b83", +3808 => x"9e388152", +3809 => x"7f510b0b", +3810 => x"80c3cc3f", +3811 => x"80084780", +3812 => x"6f250b0b", +3813 => x"0b0b9138", +3814 => x"6e538008", +3815 => x"527f510b", +3816 => x"0b80c6c5", +3817 => x"3f800847", +3818 => x"80588162", +3819 => x"250b0b0b", +3820 => x"829b3863", +3821 => x"81059f06", +3822 => x"5c6e0b0b", +3823 => x"0b81ee38", +3824 => x"7b802e0b", +3825 => x"0b0b0b85", +3826 => x"38a07c31", +3827 => x"5c847c25", +3828 => x"0b0b0b88", +3829 => x"c238fc1c", +3830 => x"6b11711b", +3831 => x"5b4c6405", +3832 => x"44806b25", +3833 => x"0b0b0b0b", +3834 => x"90386a53", +3835 => x"60527f51", +3836 => x"0b0b80c7", +3837 => x"f23f8008", +3838 => x"41806425", +3839 => x"0b0b0b0b", +3840 => x"90386353", +3841 => x"66527f51", +3842 => x"0b0b80c7", +3843 => x"da3f8008", +3844 => x"47a13d08", +3845 => x"0b0b0b80", +3846 => x"da388066", +3847 => x"25568262", +3848 => x"250b0b0b", +3849 => x"82c73875", +3850 => x"802e0b0b", +3851 => x"0b82be38", +3852 => x"8066240b", +3853 => x"0b0bfcda", +3854 => x"38805485", +3855 => x"5366527f", +3856 => x"510b0b0b", +3857 => x"bcce3f80", +3858 => x"08800853", +3859 => x"6152470b", +3860 => x"0b80c985", +3861 => x"3f800b80", +3862 => x"08250b0b", +3863 => x"0bfcb338", +3864 => x"6c5fb17f", +3865 => x"70810541", +3866 => x"34628105", +3867 => x"430b0b0b", +3868 => x"fad33966", +3869 => x"5260510b", +3870 => x"0b80c8dd", +3871 => x"3f800880", +3872 => x"250b0b0b", +3873 => x"ff943862", +3874 => x"ff054380", +3875 => x"548a5360", +3876 => x"527f510b", +3877 => x"0b0bbbfc", +3878 => x"3f800841", +3879 => x"6f0b0b0b", +3880 => x"81b038a3", +3881 => x"3d08460b", +3882 => x"0b0bfeee", +3883 => x"39669005", +3884 => x"08101067", +3885 => x"05901108", +3886 => x"52560b0b", +3887 => x"0bbec93f", +3888 => x"63800831", +3889 => x"9f065c0b", +3890 => x"0b0bfdf4", +3891 => x"39b93d08", +3892 => x"782e0981", +3893 => x"060b0b0b", +3894 => x"fdd938b8", +3895 => x"3d0870bf", +3896 => x"ffff0657", +3897 => x"5775782e", +3898 => x"0981060b", +3899 => x"0b0bfdc3", +3900 => x"38769ffe", +3901 => x"0a065675", +3902 => x"782e0b0b", +3903 => x"0bfdb438", +3904 => x"6a810564", +3905 => x"8105454b", +3906 => x"81648105", +3907 => x"9f065d58", +3908 => x"6e802e0b", +3909 => x"0b0bfda8", +3910 => x"380b0b0b", +3911 => x"ff8f3979", +3912 => x"5360527f", +3913 => x"510b0b80", +3914 => x"c3bf3f80", +3915 => x"08410b0b", +3916 => x"0bfccf39", +3917 => x"6a663159", +3918 => x"806b114c", +3919 => x"64054481", +3920 => x"527f510b", +3921 => x"0b80c08f", +3922 => x"3f80084a", +3923 => x"0b0b0bfb", +3924 => x"ac398054", +3925 => x"8a536952", +3926 => x"7f510b0b", +3927 => x"0bbab53f", +3928 => x"8008a43d", +3929 => x"08474a0b", +3930 => x"0b0bfdae", +3931 => x"39815c6f", +3932 => x"802e0b0b", +3933 => x"0b82bb38", +3934 => x"8079250b", +3935 => x"0b0b0b90", +3936 => x"38785369", +3937 => x"527f510b", +3938 => x"0b80c4db", +3939 => x"3f80084a", +3940 => x"6948770b", +3941 => x"0b0b82e9", +3942 => x"38815c66", +3943 => x"5260510b", +3944 => x"0b0bdce3", +3945 => x"3f8008b0", +3946 => x"05685361", +3947 => x"52570b0b", +3948 => x"80c6a63f", +3949 => x"80086a54", +3950 => x"67536052", +3951 => x"5a0b0b80", +3952 => x"c6fe3f80", +3953 => x"0856815b", +3954 => x"80088c05", +3955 => x"08802e0b", +3956 => x"0b0b8299", +3957 => x"3875527f", +3958 => x"510b0b0b", +3959 => x"b9923f7a", +3960 => x"62075675", +3961 => x"0b0b0b0b", +3962 => x"9038b93d", +3963 => x"08810656", +3964 => x"75802e0b", +3965 => x"0b0b82c8", +3966 => x"38807a24", +3967 => x"0b0b0b82", +3968 => x"da387962", +3969 => x"0756750b", +3970 => x"0b0b0b90", +3971 => x"38b93d08", +3972 => x"81065675", +3973 => x"802e0b0b", +3974 => x"0b82c038", +3975 => x"7a80240b", +3976 => x"0b0b8883", +3977 => x"38767f70", +3978 => x"81054134", +3979 => x"7b662e0b", +3980 => x"0b0b83fd", +3981 => x"3880548a", +3982 => x"5360527f", +3983 => x"510b0b0b", +3984 => x"b8d23f80", +3985 => x"0841676a", +3986 => x"2e0b0b0b", +3987 => x"83ac3880", +3988 => x"548a5367", +3989 => x"527f510b", +3990 => x"0b0bb8b8", +3991 => x"3f800848", +3992 => x"80548a53", +3993 => x"69527f51", +3994 => x"0b0b0bb8", +3995 => x"a73f8008", +3996 => x"811d5d4a", +3997 => x"66526051", +3998 => x"0b0b0bdb", +3999 => x"8a3f8008", +4000 => x"b0056853", +4001 => x"6152570b", +4002 => x"0b80c4cd", +4003 => x"3f80086a", +4004 => x"54675360", +4005 => x"525a0b0b", +4006 => x"80c5a53f", +4007 => x"80085681", +4008 => x"5b80088c", +4009 => x"05080b0b", +4010 => x"0bfeaa38", +4011 => x"0b0b0b0b", +4012 => x"bc396652", +4013 => x"7e7f8105", +4014 => x"62534056", +4015 => x"0b0b0bda", +4016 => x"c63f8008", +4017 => x"b0055776", +4018 => x"76347b66", +4019 => x"250b0b0b", +4020 => x"82df3880", +4021 => x"548a5360", +4022 => x"527f510b", +4023 => x"0b0bb7b4", +4024 => x"3f800881", +4025 => x"1d5d410b", +4026 => x"0b0b0bc6", +4027 => x"39800852", +4028 => x"60510b0b", +4029 => x"80c3e23f", +4030 => x"80085b0b", +4031 => x"0b0bfdd5", +4032 => x"39698405", +4033 => x"08527f51", +4034 => x"0b0b0bb5", +4035 => x"bc3f8008", +4036 => x"68900508", +4037 => x"10108805", +4038 => x"54688c05", +4039 => x"5380088c", +4040 => x"05524a0b", +4041 => x"0bff94e3", +4042 => x"3f815369", +4043 => x"527f510b", +4044 => x"0b80c1b3", +4045 => x"3f80084a", +4046 => x"815c0b0b", +4047 => x"0bfcdc39", +4048 => x"76b92e0b", +4049 => x"0b0b80d0", +4050 => x"38798024", +4051 => x"1757767f", +4052 => x"70810541", +4053 => x"340b0b0b", +4054 => x"f4eb3980", +4055 => x"7b250b0b", +4056 => x"0b0beb38", +4057 => x"81536052", +4058 => x"7f510b0b", +4059 => x"80c0f83f", +4060 => x"80086753", +4061 => x"80085241", +4062 => x"0b0b80c2", +4063 => x"dc3f800b", +4064 => x"8008250b", +4065 => x"0b0b80c8", +4066 => x"38811757", +4067 => x"76ba2e09", +4068 => x"81060b0b", +4069 => x"0bffb738", +4070 => x"b97f7081", +4071 => x"054134ff", +4072 => x"1f703357", +4073 => x"5f75b92e", +4074 => x"0981060b", +4075 => x"0b0b81d0", +4076 => x"387e6d2e", +4077 => x"0981060b", +4078 => x"0b0b0be3", +4079 => x"38628105", +4080 => x"6d4043b1", +4081 => x"7f708105", +4082 => x"41340b0b", +4083 => x"0bf3f639", +4084 => x"80080b0b", +4085 => x"0bfef738", +4086 => x"76810656", +4087 => x"75802e0b", +4088 => x"0b0bfeea", +4089 => x"38811757", +4090 => x"76ba2e09", +4091 => x"81060b0b", +4092 => x"0bfedb38", +4093 => x"0b0b0bff", +4094 => x"9f398054", +4095 => x"8a536952", +4096 => x"7f510b0b", +4097 => x"0bb58d3f", +4098 => x"80088008", +4099 => x"811e5e49", +4100 => x"4a0b0b0b", +4101 => x"fcde397b", +4102 => x"83240b0b", +4103 => x"0bf7c238", +4104 => x"9c1c6b11", +4105 => x"711b5b4c", +4106 => x"6405440b", +4107 => x"0b0bf7b1", +4108 => x"39815360", +4109 => x"527f510b", +4110 => x"0b0bbfab", +4111 => x"3f800867", +4112 => x"53800852", +4113 => x"410b0b80", +4114 => x"c18f3f80", +4115 => x"0880240b", +4116 => x"0b0bfecb", +4117 => x"3880080b", +4118 => x"0b0b0b8c", +4119 => x"38768106", +4120 => x"56750b0b", +4121 => x"0bfeb838", +4122 => x"ff1f7033", +4123 => x"575f75b0", +4124 => x"2e0b0b0b", +4125 => x"0bf23881", +4126 => x"1f5f0b0b", +4127 => x"0bf2c639", +4128 => x"7e7f8105", +4129 => x"71338105", +4130 => x"58405775", +4131 => x"77340b0b", +4132 => x"0bf2b239", +4133 => x"6a633163", +4134 => x"30a73d0c", +4135 => x"4b804f0b", +4136 => x"0b0bdff1", +4137 => x"39a53d08", +4138 => x"5360527f", +4139 => x"510b0b0b", +4140 => x"bcb73f80", +4141 => x"08410b0b", +4142 => x"0bf5c739", +4143 => x"65101010", +4144 => x"0b0b82f2", +4145 => x"d0058411", +4146 => x"08710856", +4147 => x"56b53d08", +4148 => x"b73d0859", +4149 => x"53567653", +4150 => x"64510b0b", +4151 => x"8180be3f", +4152 => x"a83d08aa", +4153 => x"3d0858b5", +4154 => x"3d0c76b6", +4155 => x"3d0c810b", +4156 => x"b93d08bb", +4157 => x"3d085b59", +4158 => x"5c775178", +4159 => x"520b0b81", +4160 => x"bdeb3f80", +4161 => x"08800853", +4162 => x"65525a0b", +4163 => x"0b81bbbd", +4164 => x"3fa83d08", +4165 => x"aa3d0858", +4166 => x"547655b8", +4167 => x"3d08ba3d", +4168 => x"08585276", +4169 => x"536b510b", +4170 => x"0b80febe", +4171 => x"3faa3d08", +4172 => x"ac3d085a", +4173 => x"b93d0c78", +4174 => x"ba3d0cb0", +4175 => x"1a56757f", +4176 => x"70810541", +4177 => x"347b662e", +4178 => x"0b0b0be7", +4179 => x"f038811c", +4180 => x"5c80c882", +4181 => x"0a568076", +4182 => x"5555b83d", +4183 => x"08ba3d08", +4184 => x"58527653", +4185 => x"64510b0b", +4186 => x"80ffb23f", +4187 => x"a83d08aa", +4188 => x"3d0871bb", +4189 => x"3d0c70bc", +4190 => x"3d0c5a58", +4191 => x"0b0b0bfe", +4192 => x"f839ff1f", +4193 => x"7033575f", +4194 => x"75b02e0b", +4195 => x"0b0b0bf2", +4196 => x"38811f5f", +4197 => x"0b0b0bed", +4198 => x"e6396566", +4199 => x"484a80d0", +4200 => x"820a5680", +4201 => x"765555b8", +4202 => x"3d08ba3d", +4203 => x"08585276", +4204 => x"5364510b", +4205 => x"0b80fdb2", +4206 => x"3fa83d08", +4207 => x"aa3d08b6", +4208 => x"3d08b83d", +4209 => x"08715770", +4210 => x"58735572", +4211 => x"565c5a5c", +4212 => x"5a0b0b81", +4213 => x"b3bb3f80", +4214 => x"0b800825", +4215 => x"0b0b0bf1", +4216 => x"8e3879b9", +4217 => x"3d0c7aba", +4218 => x"3d0c6c5f", +4219 => x"b17f7081", +4220 => x"05413462", +4221 => x"8105430b", +4222 => x"0b0befc9", +4223 => x"3988b316", +4224 => x"5c6d0b0b", +4225 => x"0bf1e338", +4226 => x"b60ba83d", +4227 => x"08316b11", +4228 => x"4c640544", +4229 => x"81527f51", +4230 => x"0b0b0bb6", +4231 => x"ba3f8008", +4232 => x"4a0b0b0b", +4233 => x"f1d73976", +4234 => x"b92e0b0b", +4235 => x"0bfae938", +4236 => x"81175675", +4237 => x"7f708105", +4238 => x"41340b0b", +4239 => x"0bef8639", +4240 => x"f83d0d7a", +4241 => x"5877802e", +4242 => x"0b0b0b81", +4243 => x"bd380b0b", +4244 => x"82f4ec08", +4245 => x"54b81408", +4246 => x"802e0b0b", +4247 => x"0b818238", +4248 => x"8c182270", +4249 => x"902b7090", +4250 => x"2c70832a", +4251 => x"81328106", +4252 => x"5c515754", +4253 => x"780b0b0b", +4254 => x"80df3890", +4255 => x"18085776", +4256 => x"802e0b0b", +4257 => x"0b80d238", +4258 => x"77087731", +4259 => x"77790c76", +4260 => x"83067a58", +4261 => x"5555730b", +4262 => x"0b0b0b85", +4263 => x"38941808", +4264 => x"56758819", +4265 => x"0c807525", +4266 => x"0b0b0b0b", +4267 => x"ac387453", +4268 => x"76529c18", +4269 => x"0851a418", +4270 => x"0854732d", +4271 => x"800b8008", +4272 => x"250b0b0b", +4273 => x"80df3880", +4274 => x"08177580", +4275 => x"08315657", +4276 => x"7480240b", +4277 => x"0b0b0bd6", +4278 => x"38800b80", +4279 => x"0c8a3d0d", +4280 => x"0473510b", +4281 => x"0b0b81f7", +4282 => x"3f8c1822", +4283 => x"70902b70", +4284 => x"902c7083", +4285 => x"2a813281", +4286 => x"065c5157", +4287 => x"54780b0b", +4288 => x"0b0bd638", +4289 => x"0b0b0bfe", +4290 => x"f2390b0b", +4291 => x"8184c052", +4292 => x"0b0b82f4", +4293 => x"ec08510b", +4294 => x"0b0b93b4", +4295 => x"3f800880", +4296 => x"0c8a3d0d", +4297 => x"048c1822", +4298 => x"80c00754", +4299 => x"738c1923", +4300 => x"ff0b800c", +4301 => x"8a3d0d04", +4302 => x"70725180", +4303 => x"710c800b", +4304 => x"84120c80", +4305 => x"0b88120c", +4306 => x"028e0522", +4307 => x"8c122302", +4308 => x"9205228e", +4309 => x"1223800b", +4310 => x"90120c80", +4311 => x"0b94120c", +4312 => x"800b9812", +4313 => x"0c709c12", +4314 => x"0c0b0b81", +4315 => x"d7880ba0", +4316 => x"120c0b0b", +4317 => x"81d7dd0b", +4318 => x"a4120c0b", +4319 => x"0b81d8ec", +4320 => x"0ba8120c", +4321 => x"0b0b81d9", +4322 => x"c60bac12", +4323 => x"0c5004fa", +4324 => x"3d0d7970", +4325 => x"80dc298c", +4326 => x"11547a53", +4327 => x"56570b0b", +4328 => x"0b989f3f", +4329 => x"80088008", +4330 => x"55568008", +4331 => x"802e0b0b", +4332 => x"0b0ba538", +4333 => x"80088c05", +4334 => x"54800b80", +4335 => x"080c7680", +4336 => x"0884050c", +4337 => x"73800888", +4338 => x"050c7453", +4339 => x"80527351", +4340 => x"0b0b0baa", +4341 => x"c03f7554", +4342 => x"73800c88", +4343 => x"3d0d04fc", +4344 => x"3d0d760b", +4345 => x"0b818aa8", +4346 => x"0bbc120c", +4347 => x"55810bb8", +4348 => x"160c800b", +4349 => x"84dc160c", +4350 => x"830b84e0", +4351 => x"160c84e8", +4352 => x"1584e416", +4353 => x"0c745480", +4354 => x"53845284", +4355 => x"1508510b", +4356 => x"0b0bfea4", +4357 => x"3f745481", +4358 => x"53895288", +4359 => x"1508510b", +4360 => x"0b0bfe94", +4361 => x"3f745482", +4362 => x"538a528c", +4363 => x"1508510b", +4364 => x"0b0bfe84", +4365 => x"3f863d0d", +4366 => x"04f93d0d", +4367 => x"790b0b82", +4368 => x"f4ec0854", +4369 => x"57b81308", +4370 => x"802e0b0b", +4371 => x"0b80db38", +4372 => x"84dc1356", +4373 => x"88160884", +4374 => x"1708ff05", +4375 => x"55558074", +4376 => x"240b0b0b", +4377 => x"0ba6388c", +4378 => x"15227090", +4379 => x"2b70902c", +4380 => x"51545872", +4381 => x"802e0b0b", +4382 => x"0b80e838", +4383 => x"80dc15ff", +4384 => x"15555573", +4385 => x"80250b0b", +4386 => x"0b0bdc38", +4387 => x"75085372", +4388 => x"802e0b0b", +4389 => x"0b0bab38", +4390 => x"72568816", +4391 => x"08841708", +4392 => x"ff055555", +4393 => x"0b0b0bff", +4394 => x"b5397251", +4395 => x"0b0b0bfe", +4396 => x"ae3f0b0b", +4397 => x"82f4ec08", +4398 => x"84dc0556", +4399 => x"0b0b0bff", +4400 => x"93398452", +4401 => x"76510b0b", +4402 => x"0bfdc43f", +4403 => x"8008760c", +4404 => x"8008802e", +4405 => x"0b0b0b80", +4406 => x"c4388008", +4407 => x"560b0b0b", +4408 => x"ffb83981", +4409 => x"0b8c1623", +4410 => x"72750c72", +4411 => x"88160c72", +4412 => x"84160c72", +4413 => x"90160c72", +4414 => x"94160c72", +4415 => x"98160cff", +4416 => x"0b8e1623", +4417 => x"72b0160c", +4418 => x"72b4160c", +4419 => x"7280c416", +4420 => x"0c7280c8", +4421 => x"160c7480", +4422 => x"0c893d0d", +4423 => x"048c770c", +4424 => x"800b800c", +4425 => x"893d0d04", +4426 => x"70700b0b", +4427 => x"8184c052", +4428 => x"73510b0b", +4429 => x"0b8f993f", +4430 => x"50500470", +4431 => x"0b0b82f4", +4432 => x"ec08510b", +4433 => x"0b0b0be0", +4434 => x"3f5004fb", +4435 => x"3d0d7770", +4436 => x"52560b0b", +4437 => x"0ba8f03f", +4438 => x"0b0b82fc", +4439 => x"c80b8805", +4440 => x"08841108", +4441 => x"fc06707b", +4442 => x"319fef05", +4443 => x"e08006e0", +4444 => x"80055656", +4445 => x"53a08074", +4446 => x"240b0b0b", +4447 => x"0b9d3880", +4448 => x"5275510b", +4449 => x"0b80cbba", +4450 => x"3f0b0b82", +4451 => x"fcd00815", +4452 => x"53728008", +4453 => x"2e0b0b0b", +4454 => x"0b923875", +4455 => x"510b0b0b", +4456 => x"a8a63f80", +4457 => x"5372800c", +4458 => x"873d0d04", +4459 => x"73305275", +4460 => x"510b0b80", +4461 => x"cb8c3f80", +4462 => x"08ff2e0b", +4463 => x"0b0b0bb1", +4464 => x"380b0b82", +4465 => x"fcc80b88", +4466 => x"05087575", +4467 => x"31810784", +4468 => x"120c530b", +4469 => x"0b82fc8c", +4470 => x"0874310b", +4471 => x"0b82fc8c", +4472 => x"0c75510b", +4473 => x"0b0ba7e0", +4474 => x"3f810b80", +4475 => x"0c873d0d", +4476 => x"04805275", +4477 => x"510b0b80", +4478 => x"cac83f0b", +4479 => x"0b82fcc8", +4480 => x"0b880508", +4481 => x"80087131", +4482 => x"56538f75", +4483 => x"250b0b0b", +4484 => x"ff893880", +4485 => x"080b0b82", +4486 => x"fcbc0831", +4487 => x"0b0b82fc", +4488 => x"8c0c7481", +4489 => x"0784140c", +4490 => x"75510b0b", +4491 => x"0ba7993f", +4492 => x"80530b0b", +4493 => x"0bfeee39", +4494 => x"f63d0d7c", +4495 => x"7e545b72", +4496 => x"802e0b0b", +4497 => x"0b82c838", +4498 => x"7a510b0b", +4499 => x"0ba6f83f", +4500 => x"f8138411", +4501 => x"0870fe06", +4502 => x"70138411", +4503 => x"08fc065d", +4504 => x"58595458", +4505 => x"0b0b82fc", +4506 => x"d008752e", +4507 => x"0b0b0b83", +4508 => x"b5387884", +4509 => x"160c8073", +4510 => x"8106545a", +4511 => x"727a2e0b", +4512 => x"0b0b828f", +4513 => x"38781584", +4514 => x"11088106", +4515 => x"5153720b", +4516 => x"0b0b0ba8", +4517 => x"38781757", +4518 => x"790b0b0b", +4519 => x"82a13888", +4520 => x"15085372", +4521 => x"0b0b82fc", +4522 => x"d02e0b0b", +4523 => x"0b83d738", +4524 => x"8c150870", +4525 => x"8c150c73", +4526 => x"88120c56", +4527 => x"76810784", +4528 => x"190c7618", +4529 => x"77710c53", +4530 => x"790b0b0b", +4531 => x"81b93883", +4532 => x"ff77270b", +4533 => x"0b0b81fb", +4534 => x"3876892a", +4535 => x"77832a56", +4536 => x"5372802e", +4537 => x"0b0b0b80", +4538 => x"d3387686", +4539 => x"2ab80555", +4540 => x"8473270b", +4541 => x"0b0b80c4", +4542 => x"3880db13", +4543 => x"55947327", +4544 => x"0b0b0b0b", +4545 => x"b738768c", +4546 => x"2a80ee05", +4547 => x"5580d473", +4548 => x"270b0b0b", +4549 => x"0ba63876", +4550 => x"8f2a80f7", +4551 => x"055582d4", +4552 => x"73270b0b", +4553 => x"0b0b9538", +4554 => x"76922a80", +4555 => x"fc05558a", +4556 => x"d473270b", +4557 => x"0b0b0b84", +4558 => x"3880fe55", +4559 => x"74101010", +4560 => x"0b0b82fc", +4561 => x"c8058811", +4562 => x"08555673", +4563 => x"762e0b0b", +4564 => x"0b82fa38", +4565 => x"841408fc", +4566 => x"06537673", +4567 => x"270b0b0b", +4568 => x"0b913888", +4569 => x"14085473", +4570 => x"762e0981", +4571 => x"060b0b0b", +4572 => x"0be2388c", +4573 => x"1408708c", +4574 => x"1a0c7488", +4575 => x"1a0c7888", +4576 => x"120c5677", +4577 => x"8c150c7a", +4578 => x"510b0b0b", +4579 => x"a4ba3f8c", +4580 => x"3d0d0477", +4581 => x"08787131", +4582 => x"59770588", +4583 => x"19085457", +4584 => x"720b0b82", +4585 => x"fcd02e0b", +4586 => x"0b0b80f2", +4587 => x"388c1808", +4588 => x"708c150c", +4589 => x"7388120c", +4590 => x"560b0b0b", +4591 => x"fdc73988", +4592 => x"15088c16", +4593 => x"08708c13", +4594 => x"0c578817", +4595 => x"0c0b0b0b", +4596 => x"fdea3976", +4597 => x"832a7054", +4598 => x"55807524", +4599 => x"0b0b0b81", +4600 => x"bd387282", +4601 => x"2c81712b", +4602 => x"0b0b82fc", +4603 => x"cc08070b", +4604 => x"0b82fcc8", +4605 => x"0b84050c", +4606 => x"53741010", +4607 => x"100b0b82", +4608 => x"fcc80588", +4609 => x"11085556", +4610 => x"758c190c", +4611 => x"7388190c", +4612 => x"7788170c", +4613 => x"778c150c", +4614 => x"0b0b0bfe", +4615 => x"ea39815a", +4616 => x"0b0b0bfc", +4617 => x"e0397817", +4618 => x"73810654", +4619 => x"57720b0b", +4620 => x"0b0b9838", +4621 => x"77087871", +4622 => x"31597705", +4623 => x"8c190888", +4624 => x"1a08718c", +4625 => x"120c8812", +4626 => x"0c575776", +4627 => x"81078419", +4628 => x"0c770b0b", +4629 => x"82fcc80b", +4630 => x"88050c0b", +4631 => x"0b82fcc4", +4632 => x"0877260b", +4633 => x"0b0bfe9f", +4634 => x"380b0b82", +4635 => x"fcc00852", +4636 => x"7a510b0b", +4637 => x"0bf9d43f", +4638 => x"7a510b0b", +4639 => x"0ba2c93f", +4640 => x"0b0b0bfe", +4641 => x"8a398178", +4642 => x"8c150c78", +4643 => x"88150c73", +4644 => x"8c1a0c73", +4645 => x"881a0c5a", +4646 => x"0b0b0bfc", +4647 => x"9f398315", +4648 => x"70822c81", +4649 => x"712b0b0b", +4650 => x"82fccc08", +4651 => x"070b0b82", +4652 => x"fcc80b84", +4653 => x"050c5153", +4654 => x"74101010", +4655 => x"0b0b82fc", +4656 => x"c8058811", +4657 => x"0855560b", +4658 => x"0b0bfebc", +4659 => x"39745380", +4660 => x"75240b0b", +4661 => x"0b0bae38", +4662 => x"72822c81", +4663 => x"712b0b0b", +4664 => x"82fccc08", +4665 => x"070b0b82", +4666 => x"fcc80b84", +4667 => x"050c5375", +4668 => x"8c190c73", +4669 => x"88190c77", +4670 => x"88170c77", +4671 => x"8c150c0b", +4672 => x"0b0bfd83", +4673 => x"39831570", +4674 => x"822c8171", +4675 => x"2b0b0b82", +4676 => x"fccc0807", +4677 => x"0b0b82fc", +4678 => x"c80b8405", +4679 => x"0c51530b", +4680 => x"0b0b0bcb", +4681 => x"39f23d0d", +4682 => x"60628811", +4683 => x"08705757", +4684 => x"5f5a7480", +4685 => x"2e0b0b0b", +4686 => x"81b3388c", +4687 => x"1a227083", +4688 => x"2a813270", +4689 => x"81065155", +4690 => x"58730b0b", +4691 => x"0b0b8a38", +4692 => x"901a080b", +4693 => x"0b0b0b97", +4694 => x"3879510b", +4695 => x"0b0bc388", +4696 => x"3fff5480", +4697 => x"080b0b0b", +4698 => x"8183388c", +4699 => x"1a22587d", +4700 => x"08578078", +4701 => x"83ffff06", +4702 => x"700a100a", +4703 => x"70810651", +4704 => x"56575573", +4705 => x"752e0b0b", +4706 => x"0b80e938", +4707 => x"740b0b0b", +4708 => x"0b943876", +4709 => x"08841808", +4710 => x"88195956", +4711 => x"5974802e", +4712 => x"0b0b0b0b", +4713 => x"ee387454", +4714 => x"88807527", +4715 => x"0b0b0b0b", +4716 => x"84388880", +4717 => x"54735378", +4718 => x"529c1a08", +4719 => x"51a41a08", +4720 => x"54732d80", +4721 => x"0b800825", +4722 => x"0b0b0b83", +4723 => x"bf388008", +4724 => x"19758008", +4725 => x"317f8805", +4726 => x"08800831", +4727 => x"70618805", +4728 => x"0c565659", +4729 => x"730b0b0b", +4730 => x"ffa23880", +4731 => x"5473800c", +4732 => x"903d0d04", +4733 => x"75813270", +4734 => x"81067641", +4735 => x"51547380", +4736 => x"2e0b0b0b", +4737 => x"81f03874", +4738 => x"0b0b0b0b", +4739 => x"94387608", +4740 => x"84180888", +4741 => x"19595659", +4742 => x"74802e0b", +4743 => x"0b0b0bee", +4744 => x"38881a08", +4745 => x"7883ffff", +4746 => x"0670892a", +4747 => x"70810651", +4748 => x"56595673", +4749 => x"802e0b0b", +4750 => x"0b83e338", +4751 => x"7575270b", +4752 => x"0b0b0b90", +4753 => x"3877872a", +4754 => x"70810651", +4755 => x"54730b0b", +4756 => x"0b838c38", +4757 => x"7476270b", +4758 => x"0b0b0b83", +4759 => x"38745675", +4760 => x"53785279", +4761 => x"08510b0b", +4762 => x"0b9bb83f", +4763 => x"881a0876", +4764 => x"31881b0c", +4765 => x"7908167a", +4766 => x"0c745675", +4767 => x"19757731", +4768 => x"7f880508", +4769 => x"78317061", +4770 => x"88050c56", +4771 => x"56597380", +4772 => x"2e0b0b0b", +4773 => x"fed5388c", +4774 => x"1a22580b", +4775 => x"0b0bfee7", +4776 => x"39777854", +4777 => x"79537b52", +4778 => x"560b0b0b", +4779 => x"9af53f88", +4780 => x"1a087831", +4781 => x"881b0c79", +4782 => x"08187a0c", +4783 => x"7c76315d", +4784 => x"7c0b0b0b", +4785 => x"0b943879", +4786 => x"510b0b0b", +4787 => x"eef23f80", +4788 => x"080b0b0b", +4789 => x"81b63880", +4790 => x"085f7519", +4791 => x"7577317f", +4792 => x"88050878", +4793 => x"31706188", +4794 => x"050c5656", +4795 => x"5973802e", +4796 => x"0b0b0bfd", +4797 => x"f638740b", +4798 => x"0b0b81a4", +4799 => x"38760884", +4800 => x"18088819", +4801 => x"59565974", +4802 => x"802e0b0b", +4803 => x"0b0bee38", +4804 => x"74538a52", +4805 => x"78510b0b", +4806 => x"0b98bb3f", +4807 => x"80087931", +4808 => x"81055d80", +4809 => x"080b0b0b", +4810 => x"0b843881", +4811 => x"155d815f", +4812 => x"7c58747d", +4813 => x"270b0b0b", +4814 => x"0b833874", +4815 => x"58941a08", +4816 => x"881b0811", +4817 => x"575c807a", +4818 => x"085c5490", +4819 => x"1a087b27", +4820 => x"0b0b0b0b", +4821 => x"83388154", +4822 => x"7578250b", +4823 => x"0b0b0b88", +4824 => x"38730b0b", +4825 => x"0b80c638", +4826 => x"7b78240b", +4827 => x"0b0bfeb1", +4828 => x"387b5378", +4829 => x"529c1a08", +4830 => x"51a41a08", +4831 => x"54732d80", +4832 => x"08568008", +4833 => x"80240b0b", +4834 => x"0bfeb138", +4835 => x"8c1a2280", +4836 => x"c0075473", +4837 => x"8c1b23ff", +4838 => x"5473800c", +4839 => x"903d0d04", +4840 => x"7e0b0b0b", +4841 => x"ff8a380b", +4842 => x"0b0bfee4", +4843 => x"39755378", +4844 => x"527a510b", +4845 => x"0b0b98eb", +4846 => x"3f790816", +4847 => x"7a0c7951", +4848 => x"0b0b0bec", +4849 => x"fb3f8008", +4850 => x"0b0b0bff", +4851 => x"bf387c76", +4852 => x"315d7c0b", +4853 => x"0b0bfe82", +4854 => x"380b0b0b", +4855 => x"fde93990", +4856 => x"1a087a08", +4857 => x"71317611", +4858 => x"70565a57", +4859 => x"520b0b82", +4860 => x"f4ec0851", +4861 => x"0b0b0bb4", +4862 => x"ad3f8008", +4863 => x"802e0b0b", +4864 => x"0bff8938", +4865 => x"8008901b", +4866 => x"0c800816", +4867 => x"7a0c7794", +4868 => x"1b0c7488", +4869 => x"1b0c7456", +4870 => x"0b0b0bfc", +4871 => x"b7397908", +4872 => x"58901a08", +4873 => x"78270b0b", +4874 => x"0b0b8338", +4875 => x"81547575", +4876 => x"270b0b0b", +4877 => x"0b883873", +4878 => x"0b0b0b0b", +4879 => x"bc38941a", +4880 => x"08567575", +4881 => x"260b0b0b", +4882 => x"80e53875", +4883 => x"5378529c", +4884 => x"1a0851a4", +4885 => x"1a085473", +4886 => x"2d800856", +4887 => x"80088024", +4888 => x"0b0b0bfc", +4889 => x"96388c1a", +4890 => x"2280c007", +4891 => x"54738c1b", +4892 => x"23ff540b", +4893 => x"0b0bfea1", +4894 => x"39755378", +4895 => x"5277510b", +4896 => x"0b0b979f", +4897 => x"3f790816", +4898 => x"7a0c7951", +4899 => x"0b0b0beb", +4900 => x"af3f8008", +4901 => x"802e0b0b", +4902 => x"0bfbe038", +4903 => x"8c1a2280", +4904 => x"c0075473", +4905 => x"8c1b23ff", +4906 => x"540b0b0b", +4907 => x"fdeb3974", +4908 => x"75547953", +4909 => x"7852560b", +4910 => x"0b0b96e7", +4911 => x"3f881a08", +4912 => x"7531881b", +4913 => x"0c790815", +4914 => x"7a0c0b0b", +4915 => x"0bfbac39", +4916 => x"f93d0d79", +4917 => x"7b585380", +4918 => x"0b0b0b82", +4919 => x"f4ec0853", +4920 => x"5672722e", +4921 => x"0b0b0b80", +4922 => x"d53884dc", +4923 => x"13557476", +4924 => x"2e0b0b0b", +4925 => x"80c83888", +4926 => x"15088416", +4927 => x"08ff0554", +4928 => x"54807324", +4929 => x"0b0b0b0b", +4930 => x"a4388c14", +4931 => x"2270902b", +4932 => x"70902c51", +4933 => x"5358710b", +4934 => x"0b0b80f6", +4935 => x"3880dc14", +4936 => x"ff145454", +4937 => x"7280250b", +4938 => x"0b0b0bde", +4939 => x"38740855", +4940 => x"740b0b0b", +4941 => x"0bc1380b", +4942 => x"0b82f4ec", +4943 => x"085284dc", +4944 => x"12557480", +4945 => x"2e0b0b0b", +4946 => x"80c13888", +4947 => x"15088416", +4948 => x"08ff0554", +4949 => x"54807324", +4950 => x"0b0b0b0b", +4951 => x"a4388c14", +4952 => x"2270902b", +4953 => x"70902c51", +4954 => x"5358710b", +4955 => x"0b0b0bb8", +4956 => x"3880dc14", +4957 => x"ff145454", +4958 => x"7280250b", +4959 => x"0b0b0bde", +4960 => x"38740855", +4961 => x"740b0b0b", +4962 => x"0bc13875", +4963 => x"800c893d", +4964 => x"0d047351", +4965 => x"762d7580", +4966 => x"080780dc", +4967 => x"15ff1555", +4968 => x"55560b0b", +4969 => x"0bfefd39", +4970 => x"7351762d", +4971 => x"75800807", +4972 => x"80dc15ff", +4973 => x"15555556", +4974 => x"0b0b0bff", +4975 => x"bb39fc3d", +4976 => x"0d767955", +4977 => x"5573802e", +4978 => x"0b0b0b0b", +4979 => x"9f380b0b", +4980 => x"82f1c852", +4981 => x"73510b0b", +4982 => x"0bbe8d3f", +4983 => x"80080b0b", +4984 => x"0b0b9638", +4985 => x"77b0160c", +4986 => x"73b4160c", +4987 => x"0b0b82f1", +4988 => x"c8537280", +4989 => x"0c863d0d", +4990 => x"040b0b82", +4991 => x"f0ec5273", +4992 => x"510b0b0b", +4993 => x"bde23f80", +4994 => x"53800873", +4995 => x"2e098106", +4996 => x"0b0b0b0b", +4997 => x"dd3877b0", +4998 => x"160c73b4", +4999 => x"160c0b0b", +5000 => x"0b0bc939", +5001 => x"0b0b82fc", +5002 => x"8808800c", +5003 => x"040b0b82", +5004 => x"f1d80b80", +5005 => x"0c047070", +5006 => x"70755374", +5007 => x"520b0b82", +5008 => x"f4ec0851", +5009 => x"0b0b0bfe", +5010 => x"f53f5050", +5011 => x"5004700b", +5012 => x"0b82f4ec", +5013 => x"08510b0b", +5014 => x"0b0bd23f", +5015 => x"5004ea3d", +5016 => x"0d688c11", +5017 => x"22700a10", +5018 => x"0a810657", +5019 => x"5856740b", +5020 => x"0b0b8180", +5021 => x"388e1622", +5022 => x"70902b70", +5023 => x"902c5155", +5024 => x"58807424", +5025 => x"0b0b0b80", +5026 => x"c038983d", +5027 => x"c4055373", +5028 => x"520b0b82", +5029 => x"f4ec0851", +5030 => x"0b0b80c1", +5031 => x"ac3f800b", +5032 => x"8008240b", +5033 => x"0b0b0b9d", +5034 => x"387983e0", +5035 => x"80065473", +5036 => x"80c0802e", +5037 => x"0b0b0b81", +5038 => x"aa387382", +5039 => x"80802e0b", +5040 => x"0b0b81ac", +5041 => x"388c1622", +5042 => x"57769080", +5043 => x"0754738c", +5044 => x"17238880", +5045 => x"520b0b82", +5046 => x"f4ec0851", +5047 => x"0b0b0b81", +5048 => x"e13f8008", +5049 => x"0b0b0b0b", +5050 => x"9d388c16", +5051 => x"22820754", +5052 => x"738c1723", +5053 => x"80c31670", +5054 => x"770c9017", +5055 => x"0c810b94", +5056 => x"170c983d", +5057 => x"0d040b0b", +5058 => x"82f4ec08", +5059 => x"0b0b818a", +5060 => x"a80bbc12", +5061 => x"0c548c16", +5062 => x"22818007", +5063 => x"54738c17", +5064 => x"23800876", +5065 => x"0c800890", +5066 => x"170c8880", +5067 => x"0b94170c", +5068 => x"74802e0b", +5069 => x"0b0b0bca", +5070 => x"388e1622", +5071 => x"70902b70", +5072 => x"902c5355", +5073 => x"580b0b80", +5074 => x"ced33f80", +5075 => x"08802e0b", +5076 => x"0b0bffae", +5077 => x"388c1622", +5078 => x"81075473", +5079 => x"8c172398", +5080 => x"3d0d0481", +5081 => x"0b8c1722", +5082 => x"58550b0b", +5083 => x"0bfeda39", +5084 => x"a816080b", +5085 => x"0b81d8ec", +5086 => x"2e098106", +5087 => x"0b0b0bfe", +5088 => x"c4388c16", +5089 => x"22888007", +5090 => x"54738c17", +5091 => x"2388800b", +5092 => x"80cc170c", +5093 => x"0b0b0bfe", +5094 => x"b9397070", +5095 => x"73520b0b", +5096 => x"82f4ec08", +5097 => x"510b0b0b", +5098 => x"0b983f50", +5099 => x"50047070", +5100 => x"73520b0b", +5101 => x"82f4ec08", +5102 => x"510b0b0b", +5103 => x"ecfa3f50", +5104 => x"5004f33d", +5105 => x"0d7f618b", +5106 => x"1170f806", +5107 => x"5c55555e", +5108 => x"7296260b", +5109 => x"0b0b0b83", +5110 => x"38905980", +5111 => x"7924747a", +5112 => x"26075380", +5113 => x"5472742e", +5114 => x"0981060b", +5115 => x"0b0b80d9", +5116 => x"387d510b", +5117 => x"0b0b93cf", +5118 => x"3f7883f7", +5119 => x"260b0b0b", +5120 => x"80ce3878", +5121 => x"832a7010", +5122 => x"10100b0b", +5123 => x"82fcc805", +5124 => x"8c110859", +5125 => x"595a7678", +5126 => x"2e0b0b0b", +5127 => x"84aa3884", +5128 => x"1708fc06", +5129 => x"568c1708", +5130 => x"88180871", +5131 => x"8c120c88", +5132 => x"120c5875", +5133 => x"17841108", +5134 => x"81078412", +5135 => x"0c537d51", +5136 => x"0b0b0b93", +5137 => x"833f8817", +5138 => x"5473800c", +5139 => x"8f3d0d04", +5140 => x"78892a79", +5141 => x"832a5b53", +5142 => x"72802e0b", +5143 => x"0b0b80d3", +5144 => x"3878862a", +5145 => x"b8055a84", +5146 => x"73270b0b", +5147 => x"0b80c438", +5148 => x"80db135a", +5149 => x"9473270b", +5150 => x"0b0b0bb7", +5151 => x"38788c2a", +5152 => x"80ee055a", +5153 => x"80d47327", +5154 => x"0b0b0b0b", +5155 => x"a638788f", +5156 => x"2a80f705", +5157 => x"5a82d473", +5158 => x"270b0b0b", +5159 => x"0b953878", +5160 => x"922a80fc", +5161 => x"055a8ad4", +5162 => x"73270b0b", +5163 => x"0b0b8438", +5164 => x"80fe5a79", +5165 => x"1010100b", +5166 => x"0b82fcc8", +5167 => x"058c1108", +5168 => x"58557675", +5169 => x"2e0b0b0b", +5170 => x"0bad3884", +5171 => x"1708fc06", +5172 => x"707a3155", +5173 => x"56738f24", +5174 => x"0b0b0b8b", +5175 => x"94387380", +5176 => x"250b0b0b", +5177 => x"febf388c", +5178 => x"17085776", +5179 => x"752e0981", +5180 => x"060b0b0b", +5181 => x"0bd53881", +5182 => x"1a5a0b0b", +5183 => x"82fcd808", +5184 => x"57760b0b", +5185 => x"82fcd02e", +5186 => x"0b0b0b83", +5187 => x"9a388417", +5188 => x"08fc0670", +5189 => x"7a315556", +5190 => x"738f240b", +5191 => x"0b0b82c4", +5192 => x"380b0b82", +5193 => x"fcd00b0b", +5194 => x"0b82fcdc", +5195 => x"0c0b0b82", +5196 => x"fcd00b0b", +5197 => x"0b82fcd8", +5198 => x"0c738025", +5199 => x"0b0b0bfd", +5200 => x"f23883ff", +5201 => x"76270b0b", +5202 => x"0b84e238", +5203 => x"75892a76", +5204 => x"832a5553", +5205 => x"72802e0b", +5206 => x"0b0b80d3", +5207 => x"3875862a", +5208 => x"b8055484", +5209 => x"73270b0b", +5210 => x"0b80c438", +5211 => x"80db1354", +5212 => x"9473270b", +5213 => x"0b0b0bb7", +5214 => x"38758c2a", +5215 => x"80ee0554", +5216 => x"80d47327", +5217 => x"0b0b0b0b", +5218 => x"a638758f", +5219 => x"2a80f705", +5220 => x"5482d473", +5221 => x"270b0b0b", +5222 => x"0b953875", +5223 => x"922a80fc", +5224 => x"05548ad4", +5225 => x"73270b0b", +5226 => x"0b0b8438", +5227 => x"80fe5473", +5228 => x"1010100b", +5229 => x"0b82fcc8", +5230 => x"05881108", +5231 => x"56587478", +5232 => x"2e0b0b0b", +5233 => x"88b83884", +5234 => x"1508fc06", +5235 => x"53757327", +5236 => x"0b0b0b0b", +5237 => x"91388815", +5238 => x"08557478", +5239 => x"2e098106", +5240 => x"0b0b0b0b", +5241 => x"e2388c15", +5242 => x"080b0b82", +5243 => x"fcc80b84", +5244 => x"0508718c", +5245 => x"1a0c7688", +5246 => x"1a0c7888", +5247 => x"130c788c", +5248 => x"180c5d58", +5249 => x"7953807a", +5250 => x"240b0b0b", +5251 => x"84e93872", +5252 => x"822c8171", +5253 => x"2b5c537a", +5254 => x"7c260b0b", +5255 => x"0b81c538", +5256 => x"7b7b0653", +5257 => x"720b0b0b", +5258 => x"83d03879", +5259 => x"fc068405", +5260 => x"5a7a1070", +5261 => x"7d06545b", +5262 => x"720b0b0b", +5263 => x"83bc3884", +5264 => x"1a5a0b0b", +5265 => x"0b0bea39", +5266 => x"88178c11", +5267 => x"08585876", +5268 => x"782e0981", +5269 => x"060b0b0b", +5270 => x"fbc53882", +5271 => x"1a5a0b0b", +5272 => x"0bfd9739", +5273 => x"78177981", +5274 => x"0784190c", +5275 => x"700b0b82", +5276 => x"fcdc0c70", +5277 => x"0b0b82fc", +5278 => x"d80c0b0b", +5279 => x"82fcd00b", +5280 => x"8c120c8c", +5281 => x"11088812", +5282 => x"0c748107", +5283 => x"84120c74", +5284 => x"1175710c", +5285 => x"51537d51", +5286 => x"0b0b0b8e", +5287 => x"ab3f8817", +5288 => x"540b0b0b", +5289 => x"fba3390b", +5290 => x"0b82fcc8", +5291 => x"0b840508", +5292 => x"7a545c79", +5293 => x"80250b0b", +5294 => x"0bfed438", +5295 => x"0b0b0b83", +5296 => x"b6397a09", +5297 => x"7c06700b", +5298 => x"0b82fcc8", +5299 => x"0b84050c", +5300 => x"5c7a105b", +5301 => x"7a7c260b", +5302 => x"0b0b0b88", +5303 => x"387a0b0b", +5304 => x"0b86f738", +5305 => x"0b0b82fc", +5306 => x"c80b8805", +5307 => x"08708412", +5308 => x"08fc0670", +5309 => x"7c317c72", +5310 => x"268f7225", +5311 => x"0757575c", +5312 => x"5d557280", +5313 => x"2e0b0b0b", +5314 => x"80f73879", +5315 => x"7a160b0b", +5316 => x"82fcc008", +5317 => x"1b90115a", +5318 => x"55575b0b", +5319 => x"0b82fcbc", +5320 => x"08ff2e0b", +5321 => x"0b0b0b88", +5322 => x"38a08f13", +5323 => x"e0800657", +5324 => x"76527d51", +5325 => x"0b0b0bb0", +5326 => x"893f8008", +5327 => x"548008ff", +5328 => x"2e0b0b0b", +5329 => x"0b983880", +5330 => x"0876270b", +5331 => x"0b0b82e1", +5332 => x"38740b0b", +5333 => x"82fcc82e", +5334 => x"0b0b0b82", +5335 => x"d4380b0b", +5336 => x"82fcc80b", +5337 => x"88050855", +5338 => x"841508fc", +5339 => x"06707a31", +5340 => x"7a72268f", +5341 => x"72250752", +5342 => x"5553720b", +5343 => x"0b0b84ee", +5344 => x"38747981", +5345 => x"0784170c", +5346 => x"7916700b", +5347 => x"0b82fcc8", +5348 => x"0b88050c", +5349 => x"75810784", +5350 => x"120c547e", +5351 => x"52570b0b", +5352 => x"0b8ca53f", +5353 => x"8817540b", +5354 => x"0b0bf99d", +5355 => x"3975832a", +5356 => x"70545480", +5357 => x"74240b0b", +5358 => x"0b81c538", +5359 => x"72822c81", +5360 => x"712b0b0b", +5361 => x"82fccc08", +5362 => x"07700b0b", +5363 => x"82fcc80b", +5364 => x"84050c75", +5365 => x"1010100b", +5366 => x"0b82fcc8", +5367 => x"05881108", +5368 => x"585a5d53", +5369 => x"778c180c", +5370 => x"7488180c", +5371 => x"7688190c", +5372 => x"768c160c", +5373 => x"0b0b0bfc", +5374 => x"8b39797a", +5375 => x"1010100b", +5376 => x"0b82fcc8", +5377 => x"05705759", +5378 => x"5d8c1508", +5379 => x"5776752e", +5380 => x"0b0b0b0b", +5381 => x"ad388417", +5382 => x"08fc0670", +5383 => x"7a315556", +5384 => x"738f240b", +5385 => x"0b0b84d5", +5386 => x"38738025", +5387 => x"0b0b0b85", +5388 => x"92388c17", +5389 => x"08577675", +5390 => x"2e098106", +5391 => x"0b0b0b0b", +5392 => x"d5388815", +5393 => x"811b7083", +5394 => x"06555b55", +5395 => x"720b0b0b", +5396 => x"ffb7387c", +5397 => x"83065372", +5398 => x"802e0b0b", +5399 => x"0bfce338", +5400 => x"ff1df819", +5401 => x"595d8818", +5402 => x"08782e0b", +5403 => x"0b0b0be3", +5404 => x"380b0b0b", +5405 => x"fcdb3983", +5406 => x"1a530b0b", +5407 => x"0bfb9039", +5408 => x"83147082", +5409 => x"2c81712b", +5410 => x"0b0b82fc", +5411 => x"cc080770", +5412 => x"0b0b82fc", +5413 => x"c80b8405", +5414 => x"0c761010", +5415 => x"100b0b82", +5416 => x"fcc80588", +5417 => x"1108595b", +5418 => x"5e51530b", +5419 => x"0b0bfeb4", +5420 => x"390b0b82", +5421 => x"fc8c0817", +5422 => x"58800876", +5423 => x"2e0b0b0b", +5424 => x"81b2380b", +5425 => x"0b82fcbc", +5426 => x"08ff2e0b", +5427 => x"0b0b84e8", +5428 => x"38737631", +5429 => x"180b0b82", +5430 => x"fc8c0c73", +5431 => x"87067057", +5432 => x"5372802e", +5433 => x"0b0b0b0b", +5434 => x"88388873", +5435 => x"31701555", +5436 => x"5676149f", +5437 => x"ff06a080", +5438 => x"71311770", +5439 => x"547f5357", +5440 => x"530b0b0b", +5441 => x"acbc3f80", +5442 => x"08538008", +5443 => x"ff2e0b0b", +5444 => x"0b81d138", +5445 => x"0b0b82fc", +5446 => x"8c081670", +5447 => x"0b0b82fc", +5448 => x"8c0c7475", +5449 => x"0b0b82fc", +5450 => x"c80b8805", +5451 => x"0c747631", +5452 => x"18708107", +5453 => x"51555658", +5454 => x"7b0b0b82", +5455 => x"fcc82e0b", +5456 => x"0b0b8488", +5457 => x"38798f26", +5458 => x"0b0b0b83", +5459 => x"a038810b", +5460 => x"84150c84", +5461 => x"1508fc06", +5462 => x"707a317a", +5463 => x"72268f72", +5464 => x"25075255", +5465 => x"5372802e", +5466 => x"0b0b0bfc", +5467 => x"94380b0b", +5468 => x"0b80fb39", +5469 => x"80089fff", +5470 => x"0653720b", +5471 => x"0b0bfec3", +5472 => x"38770b0b", +5473 => x"82fc8c0c", +5474 => x"0b0b82fc", +5475 => x"c80b8805", +5476 => x"087b1881", +5477 => x"0784120c", +5478 => x"550b0b82", +5479 => x"fcb80878", +5480 => x"270b0b0b", +5481 => x"0b883877", +5482 => x"0b0b82fc", +5483 => x"b80c0b0b", +5484 => x"82fcb408", +5485 => x"78270b0b", +5486 => x"0bfbad38", +5487 => x"770b0b82", +5488 => x"fcb40c84", +5489 => x"1508fc06", +5490 => x"707a317a", +5491 => x"72268f72", +5492 => x"25075255", +5493 => x"5372802e", +5494 => x"0b0b0bfb", +5495 => x"a4380b0b", +5496 => x"0b0b8b39", +5497 => x"80745456", +5498 => x"0b0b0bfe", +5499 => x"a7397d51", +5500 => x"0b0b0b87", +5501 => x"d33f800b", +5502 => x"800c8f3d", +5503 => x"0d047353", +5504 => x"8074240b", +5505 => x"0b0b0bb0", +5506 => x"3872822c", +5507 => x"81712b0b", +5508 => x"0b82fccc", +5509 => x"0807700b", +5510 => x"0b82fcc8", +5511 => x"0b84050c", +5512 => x"5d53778c", +5513 => x"180c7488", +5514 => x"180c7688", +5515 => x"190c768c", +5516 => x"160c0b0b", +5517 => x"0bf7cd39", +5518 => x"83147082", +5519 => x"2c81712b", +5520 => x"0b0b82fc", +5521 => x"cc080770", +5522 => x"0b0b82fc", +5523 => x"c80b8405", +5524 => x"0c5e5153", +5525 => x"0b0b0b0b", +5526 => x"c9397b7b", +5527 => x"0653720b", +5528 => x"0b0bfb96", +5529 => x"38841a7b", +5530 => x"105c5a0b", +5531 => x"0b0b0bea", +5532 => x"39ff1a81", +5533 => x"11515a0b", +5534 => x"0b0bf4fe", +5535 => x"39781779", +5536 => x"81078419", +5537 => x"0c8c1808", +5538 => x"88190871", +5539 => x"8c120c88", +5540 => x"120c5970", +5541 => x"0b0b82fc", +5542 => x"dc0c700b", +5543 => x"0b82fcd8", +5544 => x"0c0b0b82", +5545 => x"fcd00b8c", +5546 => x"120c8c11", +5547 => x"0888120c", +5548 => x"74810784", +5549 => x"120c7411", +5550 => x"75710c51", +5551 => x"530b0b0b", +5552 => x"f7d43975", +5553 => x"17841108", +5554 => x"81078412", +5555 => x"0c538c17", +5556 => x"08881808", +5557 => x"718c120c", +5558 => x"88120c58", +5559 => x"7d510b0b", +5560 => x"0b85e53f", +5561 => x"8817540b", +5562 => x"0b0bf2dd", +5563 => x"39728415", +5564 => x"0cf41af8", +5565 => x"0670841e", +5566 => x"08810607", +5567 => x"841e0c70", +5568 => x"1d545b85", +5569 => x"0b84140c", +5570 => x"850b8814", +5571 => x"0c8f7b27", +5572 => x"0b0b0bfd", +5573 => x"8438881c", +5574 => x"527d510b", +5575 => x"0b0bde98", +5576 => x"3f0b0b82", +5577 => x"fcc80b88", +5578 => x"05080b0b", +5579 => x"82fc8c08", +5580 => x"59550b0b", +5581 => x"0bfce239", +5582 => x"770b0b82", +5583 => x"fc8c0c73", +5584 => x"0b0b82fc", +5585 => x"bc0c0b0b", +5586 => x"0bfb9039", +5587 => x"7284150c", +5588 => x"0b0b0bfc", +5589 => x"c439fa3d", +5590 => x"0d7a7902", +5591 => x"8805a705", +5592 => x"33565253", +5593 => x"8373270b", +5594 => x"0b0b0b8e", +5595 => x"38708306", +5596 => x"5271802e", +5597 => x"0b0b0b0b", +5598 => x"b438ff13", +5599 => x"5372ff2e", +5600 => x"0b0b0b0b", +5601 => x"9f387033", +5602 => x"5273722e", +5603 => x"0b0b0b0b", +5604 => x"95388111", +5605 => x"ff145451", +5606 => x"72ff2e09", +5607 => x"81060b0b", +5608 => x"0b0be338", +5609 => x"80517080", +5610 => x"0c883d0d", +5611 => x"04707257", +5612 => x"55835175", +5613 => x"82802914", +5614 => x"ff125256", +5615 => x"7080250b", +5616 => x"0b0b0bef", +5617 => x"38837327", +5618 => x"0b0b0b80", +5619 => x"ce387408", +5620 => x"76327009", +5621 => x"f7fbfdff", +5622 => x"120670f8", +5623 => x"84828180", +5624 => x"06515151", +5625 => x"70802e0b", +5626 => x"0b0b0ba0", +5627 => x"38745180", +5628 => x"52703357", +5629 => x"73772e0b", +5630 => x"0b0bffaa", +5631 => x"38811181", +5632 => x"13535183", +5633 => x"72270b0b", +5634 => x"0b0be638", +5635 => x"fc138416", +5636 => x"56537283", +5637 => x"260b0b0b", +5638 => x"ffb43874", +5639 => x"510b0b0b", +5640 => x"fed839fa", +5641 => x"3d0d787a", +5642 => x"7c727272", +5643 => x"57575759", +5644 => x"56567476", +5645 => x"270b0b0b", +5646 => x"0bbe3876", +5647 => x"15517571", +5648 => x"270b0b0b", +5649 => x"0bb23870", +5650 => x"7717ff14", +5651 => x"54555371", +5652 => x"ff2e0b0b", +5653 => x"0b0b9a38", +5654 => x"ff14ff14", +5655 => x"54547233", +5656 => x"7434ff12", +5657 => x"5271ff2e", +5658 => x"0981060b", +5659 => x"0b0b0be8", +5660 => x"3875800c", +5661 => x"883d0d04", +5662 => x"768f260b", +5663 => x"0b0b0b9f", +5664 => x"38ff1252", +5665 => x"71ff2e0b", +5666 => x"0b0b0be5", +5667 => x"38727081", +5668 => x"05543374", +5669 => x"70810556", +5670 => x"340b0b0b", +5671 => x"0be33974", +5672 => x"76078306", +5673 => x"51700b0b", +5674 => x"0b0bd638", +5675 => x"75755451", +5676 => x"72708405", +5677 => x"54087170", +5678 => x"8405530c", +5679 => x"72708405", +5680 => x"54087170", +5681 => x"8405530c", +5682 => x"72708405", +5683 => x"54087170", +5684 => x"8405530c", +5685 => x"72708405", +5686 => x"54087170", +5687 => x"8405530c", +5688 => x"f0125271", +5689 => x"8f260b0b", +5690 => x"0b0bc538", +5691 => x"8372270b", +5692 => x"0b0b0b99", +5693 => x"38727084", +5694 => x"05540871", +5695 => x"70840553", +5696 => x"0cfc1252", +5697 => x"7183260b", +5698 => x"0b0b0be9", +5699 => x"3870540b", +5700 => x"0b0bfeed", +5701 => x"39fc3d0d", +5702 => x"76797102", +5703 => x"8c059f05", +5704 => x"33575553", +5705 => x"55837227", +5706 => x"0b0b0b0b", +5707 => x"8e387483", +5708 => x"06517080", +5709 => x"2e0b0b0b", +5710 => x"0baa38ff", +5711 => x"125271ff", +5712 => x"2e0b0b0b", +5713 => x"0b973873", +5714 => x"73708105", +5715 => x"5534ff12", +5716 => x"5271ff2e", +5717 => x"0981060b", +5718 => x"0b0b0beb", +5719 => x"3874800c", +5720 => x"863d0d04", +5721 => x"7474882b", +5722 => x"75077071", +5723 => x"902b0751", +5724 => x"54518f72", +5725 => x"270b0b0b", +5726 => x"0ba93872", +5727 => x"71708405", +5728 => x"530c7271", +5729 => x"70840553", +5730 => x"0c727170", +5731 => x"8405530c", +5732 => x"72717084", +5733 => x"05530cf0", +5734 => x"1252718f", +5735 => x"260b0b0b", +5736 => x"0bd93883", +5737 => x"72270b0b", +5738 => x"0b0b9438", +5739 => x"72717084", +5740 => x"05530cfc", +5741 => x"12527183", +5742 => x"260b0b0b", +5743 => x"0bee3870", +5744 => x"530b0b0b", +5745 => x"fef53904", +5746 => x"04f93d0d", +5747 => x"797b80cc", +5748 => x"12085658", +5749 => x"5673802e", +5750 => x"0b0b0b0b", +5751 => x"a9387610", +5752 => x"10147008", +5753 => x"55557380", +5754 => x"2e0b0b0b", +5755 => x"80c03873", +5756 => x"08750c80", +5757 => x"0b90150c", +5758 => x"800b8c15", +5759 => x"0c735574", +5760 => x"800c893d", +5761 => x"0d049053", +5762 => x"84527551", +5763 => x"0b0b0ba8", +5764 => x"c63f8008", +5765 => x"80cc170c", +5766 => x"80085580", +5767 => x"08802e0b", +5768 => x"0b0b0bdb", +5769 => x"38800854", +5770 => x"0b0b0bff", +5771 => x"b1398177", +5772 => x"2b701010", +5773 => x"94055458", +5774 => x"81527551", +5775 => x"0b0b0ba8", +5776 => x"963f8008", +5777 => x"80085654", +5778 => x"8008802e", +5779 => x"0b0b0bff", +5780 => x"ae387680", +5781 => x"0884050c", +5782 => x"77800888", +5783 => x"050c800b", +5784 => x"90150c80", +5785 => x"0b8c150c", +5786 => x"73550b0b", +5787 => x"0bff9039", +5788 => x"70707452", +5789 => x"71802e0b", +5790 => x"0b0b0b95", +5791 => x"38738413", +5792 => x"08101080", +5793 => x"cc120805", +5794 => x"7008740c", +5795 => x"73710c51", +5796 => x"51505004", +5797 => x"f53d0d7d", +5798 => x"7f616390", +5799 => x"13089414", +5800 => x"5b5d5b5c", +5801 => x"5c5c8057", +5802 => x"8216227a", +5803 => x"71291977", +5804 => x"227c7129", +5805 => x"72902a05", +5806 => x"70902a73", +5807 => x"83ffff06", +5808 => x"72848080", +5809 => x"29057b70", +5810 => x"84055d0c", +5811 => x"811c5c52", +5812 => x"535a5555", +5813 => x"7877240b", +5814 => x"0b0b0bcc", +5815 => x"3877802e", +5816 => x"0b0b0b0b", +5817 => x"9a387888", +5818 => x"1c08250b", +5819 => x"0b0b0b96", +5820 => x"38781010", +5821 => x"1b789412", +5822 => x"0c548119", +5823 => x"901c0c7a", +5824 => x"800c8d3d", +5825 => x"0d04841b", +5826 => x"08810552", +5827 => x"7b510b0b", +5828 => x"0bfdb63f", +5829 => x"8008901c", +5830 => x"08101088", +5831 => x"05548c1c", +5832 => x"5380088c", +5833 => x"0552540b", +5834 => x"0bfedcdf", +5835 => x"3f7a527b", +5836 => x"510b0b0b", +5837 => x"feba3f73", +5838 => x"79101011", +5839 => x"7994120c", +5840 => x"55811a90", +5841 => x"120c5b0b", +5842 => x"0b0bffb3", +5843 => x"39f63d0d", +5844 => x"7c7e6062", +5845 => x"890b8812", +5846 => x"355b5e5c", +5847 => x"59598056", +5848 => x"81557477", +5849 => x"250b0b0b", +5850 => x"0b903874", +5851 => x"10811757", +5852 => x"55767524", +5853 => x"0b0b0b0b", +5854 => x"f2387552", +5855 => x"78510b0b", +5856 => x"0bfcc63f", +5857 => x"80086180", +5858 => x"0894050c", +5859 => x"56810b80", +5860 => x"0890050c", +5861 => x"8957767a", +5862 => x"250b0b0b", +5863 => x"80e13876", +5864 => x"18587770", +5865 => x"81055933", +5866 => x"d005548a", +5867 => x"53755278", +5868 => x"510b0b0b", +5869 => x"fdde3f80", +5870 => x"08811858", +5871 => x"56797724", +5872 => x"0b0b0b0b", +5873 => x"dd388118", +5874 => x"58767b25", +5875 => x"0b0b0b0b", +5876 => x"a7387a77", +5877 => x"31577770", +5878 => x"81055933", +5879 => x"d005548a", +5880 => x"53755278", +5881 => x"510b0b0b", +5882 => x"fdaa3f80", +5883 => x"08ff1858", +5884 => x"56760b0b", +5885 => x"0b0bdf38", +5886 => x"75800c8c", +5887 => x"3d0d048a", +5888 => x"18580b0b", +5889 => x"0b0bc239", +5890 => x"70707074", +5891 => x"528072fc", +5892 => x"80800652", +5893 => x"5370732e", +5894 => x"0981060b", +5895 => x"0b0b0b87", +5896 => x"38907271", +5897 => x"2b535371", +5898 => x"81ff0a06", +5899 => x"51700b0b", +5900 => x"0b0b8838", +5901 => x"88137288", +5902 => x"2b535371", +5903 => x"8f0a0651", +5904 => x"700b0b0b", +5905 => x"0b883884", +5906 => x"1372842b", +5907 => x"53537183", +5908 => x"0a065170", +5909 => x"0b0b0b0b", +5910 => x"88388213", +5911 => x"72822b53", +5912 => x"53807224", +5913 => x"0b0b0b0b", +5914 => x"97388113", +5915 => x"729e2a70", +5916 => x"81065152", +5917 => x"53a05270", +5918 => x"802e0b0b", +5919 => x"0b0b8338", +5920 => x"72527180", +5921 => x"0c505050", +5922 => x"04fc3d0d", +5923 => x"76700870", +5924 => x"87065353", +5925 => x"5570802e", +5926 => x"0b0b0b0b", +5927 => x"b1387181", +5928 => x"06518053", +5929 => x"70732e09", +5930 => x"81060b0b", +5931 => x"0b0b9838", +5932 => x"710a100a", +5933 => x"70810652", +5934 => x"5370802e", +5935 => x"0b0b0b81", +5936 => x"89387275", +5937 => x"0c815372", +5938 => x"800c863d", +5939 => x"0d047072", +5940 => x"83ffff06", +5941 => x"52547080", +5942 => x"2e0b0b0b", +5943 => x"80e03871", +5944 => x"81ff0651", +5945 => x"700b0b0b", +5946 => x"0b883888", +5947 => x"1472882a", +5948 => x"5354718f", +5949 => x"0651700b", +5950 => x"0b0b0b88", +5951 => x"38841472", +5952 => x"842a5354", +5953 => x"71830651", +5954 => x"700b0b0b", +5955 => x"0b883882", +5956 => x"1472822a", +5957 => x"53547181", +5958 => x"0651700b", +5959 => x"0b0b0b94", +5960 => x"38811472", +5961 => x"0a100a53", +5962 => x"54a05371", +5963 => x"802e0b0b", +5964 => x"0bff9438", +5965 => x"71750c73", +5966 => x"800c863d", +5967 => x"0d049072", +5968 => x"712a5354", +5969 => x"0b0b0bff", +5970 => x"96397182", +5971 => x"2a750c82", +5972 => x"0b800c86", +5973 => x"3d0d0470", +5974 => x"70815273", +5975 => x"510b0b0b", +5976 => x"f8e73f74", +5977 => x"80089405", +5978 => x"0c810b80", +5979 => x"0890050c", +5980 => x"505004ee", +5981 => x"3d0d6567", +5982 => x"90120890", +5983 => x"12085856", +5984 => x"57537375", +5985 => x"250b0b0b", +5986 => x"0b8d3872", +5987 => x"76717790", +5988 => x"14085957", +5989 => x"58544274", +5990 => x"14708815", +5991 => x"08248415", +5992 => x"08055365", +5993 => x"525e0b0b", +5994 => x"0bf89e3f", +5995 => x"80088008", +5996 => x"94057060", +5997 => x"822b7211", +5998 => x"43465941", +5999 => x"427f7f27", +6000 => x"0b0b0b0b", +6001 => x"91388077", +6002 => x"70840559", +6003 => x"0c7e7726", +6004 => x"0b0b0b0b", +6005 => x"f1389413", +6006 => x"74101011", +6007 => x"94187710", +6008 => x"10116341", +6009 => x"445d5d5f", +6010 => x"7a61270b", +6011 => x"0b0b81c9", +6012 => x"387a0870", +6013 => x"83ffff06", +6014 => x"59537780", +6015 => x"2e0b0b0b", +6016 => x"80cb387e", +6017 => x"7d575780", +6018 => x"5a767084", +6019 => x"05580870", +6020 => x"83ffff06", +6021 => x"82182271", +6022 => x"7b29057c", +6023 => x"1173902a", +6024 => x"7c297a22", +6025 => x"5e7d0571", +6026 => x"902a0570", +6027 => x"902a5f59", +6028 => x"51515454", +6029 => x"74762372", +6030 => x"82172384", +6031 => x"16567b77", +6032 => x"260b0b0b", +6033 => x"0bc33879", +6034 => x"760c7a08", +6035 => x"5372902a", +6036 => x"5877802e", +6037 => x"0b0b0b80", +6038 => x"d1387e7d", +6039 => x"5757807d", +6040 => x"08705b56", +6041 => x"5a767084", +6042 => x"05580870", +6043 => x"83ffff06", +6044 => x"707a297b", +6045 => x"902a057c", +6046 => x"11515154", +6047 => x"54727623", +6048 => x"74821723", +6049 => x"84167490", +6050 => x"2a792971", +6051 => x"08821322", +6052 => x"5d5b7b05", +6053 => x"74902a05", +6054 => x"70902a5c", +6055 => x"56567b77", +6056 => x"260b0b0b", +6057 => x"ffbf3874", +6058 => x"760c841b", +6059 => x"841e5e5b", +6060 => x"607b260b", +6061 => x"0b0bfeb9", +6062 => x"38626005", +6063 => x"56807e25", +6064 => x"0b0b0b0b", +6065 => x"9838fc16", +6066 => x"5675080b", +6067 => x"0b0b0b8d", +6068 => x"38ff1e5e", +6069 => x"7d80240b", +6070 => x"0b0b0bea", +6071 => x"387d6290", +6072 => x"050c6180", +6073 => x"0c943d0d", +6074 => x"04f73d0d", +6075 => x"7b7d7f70", +6076 => x"83065858", +6077 => x"5a5a740b", +6078 => x"0b0b8181", +6079 => x"3875822c", +6080 => x"5675802e", +6081 => x"0b0b0b80", +6082 => x"cc3880c8", +6083 => x"1a087056", +6084 => x"5776802e", +6085 => x"0b0b0b81", +6086 => x"a3387581", +6087 => x"0655740b", +6088 => x"0b0b0bb8", +6089 => x"3875812c", +6090 => x"5675802e", +6091 => x"0b0b0b0b", +6092 => x"a4387608", +6093 => x"70595574", +6094 => x"802e0b0b", +6095 => x"0b80e038", +6096 => x"74577581", +6097 => x"06557480", +6098 => x"2e0b0b0b", +6099 => x"0bd7380b", +6100 => x"0b0b0b88", +6101 => x"3978800c", +6102 => x"8b3d0d04", +6103 => x"76537852", +6104 => x"79510b0b", +6105 => x"0bfc8c3f", +6106 => x"80087953", +6107 => x"7a52550b", +6108 => x"0b0bf5fc", +6109 => x"3f74590b", +6110 => x"0b0bffa9", +6111 => x"39805474", +6112 => x"10100b0b", +6113 => x"82f49c05", +6114 => x"70085455", +6115 => x"78527951", +6116 => x"0b0b0bf5", +6117 => x"ff3f8008", +6118 => x"590b0b0b", +6119 => x"fedf3976", +6120 => x"53765279", +6121 => x"510b0b0b", +6122 => x"fbc93f80", +6123 => x"08770c80", +6124 => x"08788008", +6125 => x"0c570b0b", +6126 => x"0bff8739", +6127 => x"84f15279", +6128 => x"510b0b0b", +6129 => x"fb913f80", +6130 => x"0880c81b", +6131 => x"0c800875", +6132 => x"80080c76", +6133 => x"81065657", +6134 => x"74802e0b", +6135 => x"0b0bfec5", +6136 => x"380b0b0b", +6137 => x"fef639f5", +6138 => x"3d0d7d7f", +6139 => x"6170852c", +6140 => x"84130890", +6141 => x"14081281", +6142 => x"05881508", +6143 => x"595e5959", +6144 => x"5a5c5c72", +6145 => x"79250b0b", +6146 => x"0b0b9038", +6147 => x"81157310", +6148 => x"54557873", +6149 => x"240b0b0b", +6150 => x"0bf23874", +6151 => x"527b510b", +6152 => x"0b0bf3a5", +6153 => x"3f800880", +6154 => x"08940555", +6155 => x"5a807625", +6156 => x"0b0b0b0b", +6157 => x"94387553", +6158 => x"80747084", +6159 => x"05560cff", +6160 => x"1353720b", +6161 => x"0b0b0bf0", +6162 => x"38941b90", +6163 => x"1c081010", +6164 => x"11799f06", +6165 => x"5a585377", +6166 => x"802e0b0b", +6167 => x"0b80ca38", +6168 => x"a0783155", +6169 => x"80567208", +6170 => x"782b7607", +6171 => x"74708405", +6172 => x"560c7270", +6173 => x"84055408", +6174 => x"752a5676", +6175 => x"73260b0b", +6176 => x"0b0be338", +6177 => x"75740c75", +6178 => x"802e0b0b", +6179 => x"0b0b8438", +6180 => x"811959ff", +6181 => x"19901b0c", +6182 => x"7a527b51", +6183 => x"0b0b0bf3", +6184 => x"cf3f7980", +6185 => x"0c8d3d0d", +6186 => x"04727084", +6187 => x"05540874", +6188 => x"70840556", +6189 => x"0c727727", +6190 => x"0b0b0b0b", +6191 => x"d6387270", +6192 => x"84055408", +6193 => x"74708405", +6194 => x"560c7673", +6195 => x"260b0b0b", +6196 => x"0bd7380b", +6197 => x"0b0bffbb", +6198 => x"39fb3d0d", +6199 => x"77799011", +6200 => x"08901308", +6201 => x"71317056", +6202 => x"54555754", +6203 => x"700b0b0b", +6204 => x"0bb33894", +6205 => x"1473822b", +6206 => x"71117119", +6207 => x"94055254", +6208 => x"5255fc12", +6209 => x"fc127108", +6210 => x"71085656", +6211 => x"52527373", +6212 => x"2e098106", +6213 => x"0b0b0b0b", +6214 => x"93387175", +6215 => x"260b0b0b", +6216 => x"0be03880", +6217 => x"5271800c", +6218 => x"873d0d04", +6219 => x"ff517274", +6220 => x"260b0b0b", +6221 => x"0b833881", +6222 => x"5170800c", +6223 => x"873d0d04", +6224 => x"f33d0d7f", +6225 => x"61637055", +6226 => x"71545754", +6227 => x"560b0b0b", +6228 => x"ff873f80", +6229 => x"08548008", +6230 => x"802e0b0b", +6231 => x"0b81e038", +6232 => x"80547380", +6233 => x"08240b0b", +6234 => x"0b81f638", +6235 => x"84130852", +6236 => x"75510b0b", +6237 => x"0bf0d23f", +6238 => x"80087480", +6239 => x"088c050c", +6240 => x"90140894", +6241 => x"15711010", +6242 => x"11941990", +6243 => x"1a081010", +6244 => x"11800894", +6245 => x"055d415d", +6246 => x"415a5c5d", +6247 => x"805a7770", +6248 => x"84055908", +6249 => x"7083ffff", +6250 => x"067a7084", +6251 => x"055c0870", +6252 => x"83ffff06", +6253 => x"7271311e", +6254 => x"74902a73", +6255 => x"902a3171", +6256 => x"902c1170", +6257 => x"902c4151", +6258 => x"55515657", +6259 => x"57547377", +6260 => x"23728218", +6261 => x"23841757", +6262 => x"7b79260b", +6263 => x"0b0bffbe", +6264 => x"38777e27", +6265 => x"0b0b0b0b", +6266 => x"b0387770", +6267 => x"84055908", +6268 => x"7083ffff", +6269 => x"067b1170", +6270 => x"902c7390", +6271 => x"2a057090", +6272 => x"2c5e5351", +6273 => x"54547377", +6274 => x"23728218", +6275 => x"23841757", +6276 => x"7d78260b", +6277 => x"0b0b0bd2", +6278 => x"38fc1757", +6279 => x"76080b0b", +6280 => x"0b0b9138", +6281 => x"ff1bfc18", +6282 => x"585b7608", +6283 => x"802e0b0b", +6284 => x"0b0bf138", +6285 => x"7a901e0c", +6286 => x"7c800c8f", +6287 => x"3d0d0480", +6288 => x"08527551", +6289 => x"0b0b0bef", +6290 => x"803f8008", +6291 => x"5d810b80", +6292 => x"0890050c", +6293 => x"73800894", +6294 => x"050c7c80", +6295 => x"0c8f3d0d", +6296 => x"04727554", +6297 => x"55810b84", +6298 => x"14085376", +6299 => x"52540b0b", +6300 => x"0beed63f", +6301 => x"80087480", +6302 => x"088c050c", +6303 => x"90140894", +6304 => x"15711010", +6305 => x"11941990", +6306 => x"1a081010", +6307 => x"11800894", +6308 => x"055d415d", +6309 => x"415a5c5d", +6310 => x"805a0b0b", +6311 => x"0bfdff39", +6312 => x"fa3d0d78", +6313 => x"7a7c5457", +6314 => x"7258769f", +6315 => x"fe0a0686", +6316 => x"bf0a0553", +6317 => x"53807225", +6318 => x"0b0b0b0b", +6319 => x"95387154", +6320 => x"80557375", +6321 => x"53730c71", +6322 => x"84140c72", +6323 => x"800c883d", +6324 => x"0d047130", +6325 => x"70942c53", +6326 => x"51937225", +6327 => x"0b0b0b0b", +6328 => x"ab388054", +6329 => x"ec129f71", +6330 => x"3181712b", +6331 => x"5152529e", +6332 => x"72250b0b", +6333 => x"0b0b8338", +6334 => x"81517055", +6335 => x"73755373", +6336 => x"0c718414", +6337 => x"0c72800c", +6338 => x"883d0d04", +6339 => x"a0808072", +6340 => x"2c548055", +6341 => x"0b0b0bff", +6342 => x"a939f63d", +6343 => x"0d7c7e94", +6344 => x"11901208", +6345 => x"101011fc", +6346 => x"11700870", +6347 => x"575a5157", +6348 => x"5853590b", +6349 => x"0b0bf1d0", +6350 => x"3f80087f", +6351 => x"a00b8008", +6352 => x"31710c53", +6353 => x"538a0b80", +6354 => x"08250b0b", +6355 => x"0b80f738", +6356 => x"80577376", +6357 => x"260b0b0b", +6358 => x"80c438f5", +6359 => x"13537280", +6360 => x"2e0b0b0b", +6361 => x"80c838a0", +6362 => x"73317574", +6363 => x"2b78722a", +6364 => x"079ffc0a", +6365 => x"075b5880", +6366 => x"55757427", +6367 => x"0b0b0b0b", +6368 => x"8538fc14", +6369 => x"08557673", +6370 => x"2b75792a", +6371 => x"075b797b", +6372 => x"54790c72", +6373 => x"841a0c78", +6374 => x"800c8c3d", +6375 => x"0d04fc14", +6376 => x"7008f515", +6377 => x"55585472", +6378 => x"0b0b0bff", +6379 => x"ba38749f", +6380 => x"fc0a075a", +6381 => x"765b797b", +6382 => x"54790c72", +6383 => x"841a0c78", +6384 => x"800c8c3d", +6385 => x"0d048b0b", +6386 => x"80083175", +6387 => x"712a9ffc", +6388 => x"0a075b57", +6389 => x"80587574", +6390 => x"270b0b0b", +6391 => x"0b8538fc", +6392 => x"14085895", +6393 => x"1375712b", +6394 => x"79792a07", +6395 => x"5c52797b", +6396 => x"54790c72", +6397 => x"841a0c78", +6398 => x"800c8c3d", +6399 => x"0d04f33d", +6400 => x"0d626462", +6401 => x"64575f75", +6402 => x"405b5981", +6403 => x"527f510b", +6404 => x"0b0bebb5", +6405 => x"3f800880", +6406 => x"0894057e", +6407 => x"70bfffff", +6408 => x"06705f71", +6409 => x"fe0a0670", +6410 => x"4270942a", +6411 => x"5b525755", +6412 => x"59577580", +6413 => x"2e0b0b0b", +6414 => x"0b873873", +6415 => x"90800a07", +6416 => x"5b7d5372", +6417 => x"802e0b0b", +6418 => x"0b80e038", +6419 => x"725c8f3d", +6420 => x"f405510b", +6421 => x"0b0bf0b1", +6422 => x"3f800855", +6423 => x"8008802e", +6424 => x"0b0b0b81", +6425 => x"8d38a00b", +6426 => x"8008317b", +6427 => x"712b7d07", +6428 => x"790c537a", +6429 => x"80082a5b", +6430 => x"7a70841a", +6431 => x"0c703070", +6432 => x"72078025", +6433 => x"82713170", +6434 => x"901c0c51", +6435 => x"51545475", +6436 => x"802e0b0b", +6437 => x"0b0bb638", +6438 => x"7416f7cd", +6439 => x"05790cb5", +6440 => x"75317a0c", +6441 => x"76800c8f", +6442 => x"3d0d048f", +6443 => x"3df00551", +6444 => x"0b0b0bef", +6445 => x"d43f7a78", +6446 => x"0c810b90", +6447 => x"180c810b", +6448 => x"8008a005", +6449 => x"5653750b", +6450 => x"0b0b0bcc", +6451 => x"38f7ce15", +6452 => x"790c7285", +6453 => x"2b731010", +6454 => x"19fc1108", +6455 => x"5354540b", +6456 => x"0b0beea4", +6457 => x"3f738008", +6458 => x"317a0c76", +6459 => x"800c8f3d", +6460 => x"0d047b78", +6461 => x"0c7a7084", +6462 => x"1a0c7030", +6463 => x"70720780", +6464 => x"25827131", +6465 => x"70901c0c", +6466 => x"51515454", +6467 => x"0b0b0bfe", +6468 => x"fe39f03d", +6469 => x"0d626466", +6470 => x"953de411", +6471 => x"577256f8", +6472 => x"05545858", +6473 => x"580b0b0b", +6474 => x"fbf03f92", +6475 => x"3de01154", +6476 => x"7653f005", +6477 => x"510b0b0b", +6478 => x"fbe03f90", +6479 => x"17089017", +6480 => x"0831852b", +6481 => x"7b7b3111", +6482 => x"51568076", +6483 => x"250b0b0b", +6484 => x"0bb03875", +6485 => x"90800a29", +6486 => x"6005407d", +6487 => x"7f585476", +6488 => x"557f6158", +6489 => x"52765392", +6490 => x"3de80551", +6491 => x"0b0b80d6", +6492 => x"ac3f7b7d", +6493 => x"58780c76", +6494 => x"84190c77", +6495 => x"800c923d", +6496 => x"0d047530", +6497 => x"7090800a", +6498 => x"291f5f56", +6499 => x"7d7f5854", +6500 => x"76557f61", +6501 => x"58527653", +6502 => x"923de805", +6503 => x"510b0b80", +6504 => x"d5fb3f7b", +6505 => x"7d58780c", +6506 => x"7684190c", +6507 => x"77800c92", +6508 => x"3d0d04f3", +6509 => x"3d0d7f61", +6510 => x"575c9ffc", +6511 => x"0a578058", +6512 => x"7597240b", +6513 => x"0b0b0b9d", +6514 => x"38751010", +6515 => x"100b0b82", +6516 => x"f2d80584", +6517 => x"11087108", +6518 => x"7e0c841e", +6519 => x"0c7c800c", +6520 => x"568f3d0d", +6521 => x"04807625", +6522 => x"0b0b0b0b", +6523 => x"ab388d3d", +6524 => x"5b80c882", +6525 => x"0a59805a", +6526 => x"78547955", +6527 => x"76527753", +6528 => x"7a510b0b", +6529 => x"0bb6963f", +6530 => x"7c7eff18", +6531 => x"58595775", +6532 => x"80240b0b", +6533 => x"0b0be138", +6534 => x"767c0c77", +6535 => x"841d0c7b", +6536 => x"800c8f3d", +6537 => x"0d04ef3d", +6538 => x"0d636567", +6539 => x"405d427b", +6540 => x"802e0b0b", +6541 => x"0b85ea38", +6542 => x"61510b0b", +6543 => x"0be7883f", +6544 => x"f81c7084", +6545 => x"120870fc", +6546 => x"0670628b", +6547 => x"0570f806", +6548 => x"4159455b", +6549 => x"5c415796", +6550 => x"74270b0b", +6551 => x"0b82fe38", +6552 => x"807b247e", +6553 => x"7c260759", +6554 => x"80547874", +6555 => x"2e098106", +6556 => x"0b0b0b82", +6557 => x"e138777b", +6558 => x"250b0b0b", +6559 => x"82ab3877", +6560 => x"170b0b82", +6561 => x"fcc80b88", +6562 => x"05085e56", +6563 => x"7c762e0b", +6564 => x"0b0b859f", +6565 => x"38841608", +6566 => x"70fe0617", +6567 => x"84110881", +6568 => x"06515555", +6569 => x"730b0b0b", +6570 => x"82bb3874", +6571 => x"fc06597c", +6572 => x"762e0b0b", +6573 => x"0b85c938", +6574 => x"77195f7e", +6575 => x"7b250b0b", +6576 => x"0b82aa38", +6577 => x"79810654", +6578 => x"730b0b0b", +6579 => x"82f53876", +6580 => x"77083184", +6581 => x"1108fc06", +6582 => x"565a7580", +6583 => x"2e0b0b0b", +6584 => x"0b97387c", +6585 => x"762e0b0b", +6586 => x"0b85d438", +6587 => x"74191859", +6588 => x"787b250b", +6589 => x"0b0b84e2", +6590 => x"3879802e", +6591 => x"0b0b0b82", +6592 => x"c2387715", +6593 => x"567a7624", +6594 => x"0b0b0b82", +6595 => x"b6388c1a", +6596 => x"08881b08", +6597 => x"718c120c", +6598 => x"88120c55", +6599 => x"79765957", +6600 => x"881761fc", +6601 => x"05575975", +6602 => x"a4260b0b", +6603 => x"0b86e638", +6604 => x"7b795555", +6605 => x"9376270b", +6606 => x"0b0b80d1", +6607 => x"387b7084", +6608 => x"055d087c", +6609 => x"56790c74", +6610 => x"70840556", +6611 => x"088c180c", +6612 => x"9017549b", +6613 => x"76270b0b", +6614 => x"0b0bb238", +6615 => x"74708405", +6616 => x"5608740c", +6617 => x"74708405", +6618 => x"56089418", +6619 => x"0c981754", +6620 => x"a376270b", +6621 => x"0b0b0b95", +6622 => x"38747084", +6623 => x"05560874", +6624 => x"0c747084", +6625 => x"0556089c", +6626 => x"180ca017", +6627 => x"54747084", +6628 => x"05560874", +6629 => x"70840556", +6630 => x"0c747084", +6631 => x"05560874", +6632 => x"70840556", +6633 => x"0c740874", +6634 => x"0c777b31", +6635 => x"56758f26", +6636 => x"0b0b0b80", +6637 => x"d5388417", +6638 => x"08810678", +6639 => x"0784180c", +6640 => x"77178411", +6641 => x"08810784", +6642 => x"120c5461", +6643 => x"510b0b0b", +6644 => x"e3f63f88", +6645 => x"17547380", +6646 => x"0c933d0d", +6647 => x"04905b0b", +6648 => x"0b0bfcfc", +6649 => x"3978560b", +6650 => x"0b0bfdd8", +6651 => x"398c1608", +6652 => x"88170871", +6653 => x"8c120c88", +6654 => x"120c557e", +6655 => x"707c3157", +6656 => x"588f7627", +6657 => x"0b0b0bff", +6658 => x"ad387a17", +6659 => x"84180881", +6660 => x"067c0784", +6661 => x"190c7681", +6662 => x"0784120c", +6663 => x"76118411", +6664 => x"08810784", +6665 => x"120c5588", +6666 => x"05526151", +6667 => x"0b0bffbc", +6668 => x"873f6151", +6669 => x"0b0b0be3", +6670 => x"8f3f8817", +6671 => x"540b0b0b", +6672 => x"ff94397d", +6673 => x"5261510b", +6674 => x"0b0bcef6", +6675 => x"3f800859", +6676 => x"8008802e", +6677 => x"0b0b0b81", +6678 => x"b7388008", +6679 => x"f8056084", +6680 => x"0508fe06", +6681 => x"61055557", +6682 => x"76742e0b", +6683 => x"0b0b84b7", +6684 => x"38fc1856", +6685 => x"75a4260b", +6686 => x"0b0b81c1", +6687 => x"387b8008", +6688 => x"55559376", +6689 => x"270b0b0b", +6690 => x"80e03874", +6691 => x"70840556", +6692 => x"08800870", +6693 => x"8405800c", +6694 => x"0c800875", +6695 => x"70840557", +6696 => x"08717084", +6697 => x"05530c54", +6698 => x"9b76270b", +6699 => x"0b0b0bba", +6700 => x"38747084", +6701 => x"05560874", +6702 => x"70840556", +6703 => x"0c747084", +6704 => x"05560874", +6705 => x"70840556", +6706 => x"0ca37627", +6707 => x"0b0b0b0b", +6708 => x"99387470", +6709 => x"84055608", +6710 => x"74708405", +6711 => x"560c7470", +6712 => x"84055608", +6713 => x"74708405", +6714 => x"560c7470", +6715 => x"84055608", +6716 => x"74708405", +6717 => x"560c7470", +6718 => x"84055608", +6719 => x"74708405", +6720 => x"560c7408", +6721 => x"740c7b52", +6722 => x"61510b0b", +6723 => x"ffbaa93f", +6724 => x"61510b0b", +6725 => x"0be1b13f", +6726 => x"78547380", +6727 => x"0c933d0d", +6728 => x"047d5261", +6729 => x"510b0b0b", +6730 => x"cd983f80", +6731 => x"08800c93", +6732 => x"3d0d0484", +6733 => x"1608550b", +6734 => x"0b0bfaef", +6735 => x"3975537b", +6736 => x"52800851", +6737 => x"0b0bfec0", +6738 => x"c23f7b52", +6739 => x"61510b0b", +6740 => x"ffb9e53f", +6741 => x"0b0b0bff", +6742 => x"b7398c16", +6743 => x"08881708", +6744 => x"718c120c", +6745 => x"88120c55", +6746 => x"8c1a0888", +6747 => x"1b08718c", +6748 => x"120c8812", +6749 => x"0c557979", +6750 => x"59570b0b", +6751 => x"0bfba139", +6752 => x"7719901c", +6753 => x"55557375", +6754 => x"240b0b0b", +6755 => x"fab6387a", +6756 => x"17700b0b", +6757 => x"82fcc80b", +6758 => x"88050c75", +6759 => x"7c318107", +6760 => x"84120c5d", +6761 => x"84170881", +6762 => x"067b0784", +6763 => x"180c6151", +6764 => x"0b0b0be0", +6765 => x"933f8817", +6766 => x"540b0b0b", +6767 => x"fc983974", +6768 => x"1918901c", +6769 => x"555d737d", +6770 => x"240b0b0b", +6771 => x"faab388c", +6772 => x"1a08881b", +6773 => x"08718c12", +6774 => x"0c88120c", +6775 => x"55881a61", +6776 => x"fc055759", +6777 => x"75a4260b", +6778 => x"0b0b81ca", +6779 => x"387b7955", +6780 => x"55937627", +6781 => x"0b0b0b80", +6782 => x"d1387b70", +6783 => x"84055d08", +6784 => x"7c56790c", +6785 => x"74708405", +6786 => x"56088c1b", +6787 => x"0c901a54", +6788 => x"9b76270b", +6789 => x"0b0b0bb2", +6790 => x"38747084", +6791 => x"05560874", +6792 => x"0c747084", +6793 => x"05560894", +6794 => x"1b0c981a", +6795 => x"54a37627", +6796 => x"0b0b0b0b", +6797 => x"95387470", +6798 => x"84055608", +6799 => x"740c7470", +6800 => x"84055608", +6801 => x"9c1b0ca0", +6802 => x"1a547470", +6803 => x"84055608", +6804 => x"74708405", +6805 => x"560c7470", +6806 => x"84055608", +6807 => x"74708405", +6808 => x"560c7408", +6809 => x"740c7a1a", +6810 => x"700b0b82", +6811 => x"fcc80b88", +6812 => x"050c7d7c", +6813 => x"31810784", +6814 => x"120c5484", +6815 => x"1a088106", +6816 => x"7b07841b", +6817 => x"0c61510b", +6818 => x"0b0bdebc", +6819 => x"3f78540b", +6820 => x"0b0bfd86", +6821 => x"3975537b", +6822 => x"5278510b", +6823 => x"0bfebdeb", +6824 => x"3f0b0b0b", +6825 => x"fa833984", +6826 => x"1708fc06", +6827 => x"18605858", +6828 => x"0b0b0bf9", +6829 => x"f4397553", +6830 => x"7b527851", +6831 => x"0b0bfebd", +6832 => x"ca3f7a1a", +6833 => x"700b0b82", +6834 => x"fcc80b88", +6835 => x"050c7d7c", +6836 => x"31810784", +6837 => x"120c5484", +6838 => x"1a088106", +6839 => x"7b07841b", +6840 => x"0c0b0b0b", +6841 => x"ff9f3970", +6842 => x"70707075", +6843 => x"77535371", +6844 => x"54733070", +6845 => x"75079f2a", +6846 => x"7075fe0a", +6847 => x"06079081", +6848 => x"0a119ffe", +6849 => x"0a723107", +6850 => x"709f2a81", +6851 => x"7131800c", +6852 => x"51515151", +6853 => x"51505050", +6854 => x"50047070", +6855 => x"70707577", +6856 => x"53537154", +6857 => x"73307075", +6858 => x"079f2a70", +6859 => x"75fe0a06", +6860 => x"079ffe0a", +6861 => x"71319f2a", +6862 => x"800c5151", +6863 => x"51505050", +6864 => x"50047070", +6865 => x"7070800b", +6866 => x"0b0b8385", +6867 => x"840c7651", +6868 => x"0b0b0b8c", +6869 => x"f33f8008", +6870 => x"538008ff", +6871 => x"2e0b0b0b", +6872 => x"0b893872", +6873 => x"800c5050", +6874 => x"5050040b", +6875 => x"0b838584", +6876 => x"08547380", +6877 => x"2e0b0b0b", +6878 => x"0be93875", +6879 => x"74710c52", +6880 => x"72800c50", +6881 => x"50505004", +6882 => x"f93d0d79", +6883 => x"7c557b54", +6884 => x"8e112270", +6885 => x"902b7090", +6886 => x"2c55570b", +6887 => x"0b82f4ec", +6888 => x"08535856", +6889 => x"0b0b0b88", +6890 => x"ac3f8008", +6891 => x"57800b80", +6892 => x"08240b0b", +6893 => x"0b0b9338", +6894 => x"80d01608", +6895 => x"80080580", +6896 => x"d0170c76", +6897 => x"800c893d", +6898 => x"0d048c16", +6899 => x"2283dfff", +6900 => x"0655748c", +6901 => x"17237680", +6902 => x"0c893d0d", +6903 => x"04fa3d0d", +6904 => x"788c1122", +6905 => x"70882a70", +6906 => x"81065157", +6907 => x"5856740b", +6908 => x"0b0b0bae", +6909 => x"388c1622", +6910 => x"83dfff06", +6911 => x"55748c17", +6912 => x"237a5479", +6913 => x"538e1622", +6914 => x"70902b70", +6915 => x"902c5456", +6916 => x"0b0b82f4", +6917 => x"ec085256", +6918 => x"0b0b0b83", +6919 => x"f33f883d", +6920 => x"0d048254", +6921 => x"80538e16", +6922 => x"2270902b", +6923 => x"70902c54", +6924 => x"560b0b82", +6925 => x"f4ec0852", +6926 => x"570b0b0b", +6927 => x"86d03f8c", +6928 => x"162283df", +6929 => x"ff065574", +6930 => x"8c17237a", +6931 => x"5479538e", +6932 => x"16227090", +6933 => x"2b70902c", +6934 => x"54560b0b", +6935 => x"82f4ec08", +6936 => x"52560b0b", +6937 => x"0b83a93f", +6938 => x"883d0d04", +6939 => x"f93d0d79", +6940 => x"7c557b54", +6941 => x"8e112270", +6942 => x"902b7090", +6943 => x"2c55570b", +6944 => x"0b82f4ec", +6945 => x"08535856", +6946 => x"0b0b0b86", +6947 => x"813f8008", +6948 => x"578008ff", +6949 => x"2e0b0b0b", +6950 => x"0b99388c", +6951 => x"1622a080", +6952 => x"0755748c", +6953 => x"17238008", +6954 => x"80d0170c", +6955 => x"76800c89", +6956 => x"3d0d048c", +6957 => x"162283df", +6958 => x"ff065574", +6959 => x"8c172376", +6960 => x"800c893d", +6961 => x"0d047070", +6962 => x"70748e11", +6963 => x"2270902b", +6964 => x"70902c55", +6965 => x"5151530b", +6966 => x"0b82f4ec", +6967 => x"08510b0b", +6968 => x"0b84a03f", +6969 => x"50505004", +6970 => x"fb3d0d77", +6971 => x"79707207", +6972 => x"83065354", +6973 => x"52700b0b", +6974 => x"0b0b9638", +6975 => x"71737308", +6976 => x"54565471", +6977 => x"73082e0b", +6978 => x"0b0b80d0", +6979 => x"38737554", +6980 => x"52713370", +6981 => x"81ff0652", +6982 => x"5470802e", +6983 => x"0b0b0b0b", +6984 => x"a5387233", +6985 => x"5570752e", +6986 => x"0981060b", +6987 => x"0b0b0b99", +6988 => x"38811281", +6989 => x"14713370", +6990 => x"81ff0654", +6991 => x"56545270", +6992 => x"0b0b0b0b", +6993 => x"dd387233", +6994 => x"557381ff", +6995 => x"067581ff", +6996 => x"06717131", +6997 => x"800c5252", +6998 => x"873d0d04", +6999 => x"710970f7", +7000 => x"fbfdff14", +7001 => x"0670f884", +7002 => x"82818006", +7003 => x"51515170", +7004 => x"0b0b0b0b", +7005 => x"9e388414", +7006 => x"84167108", +7007 => x"54565471", +7008 => x"75082e0b", +7009 => x"0b0b0bd4", +7010 => x"38737554", +7011 => x"520b0b0b", +7012 => x"feff3980", +7013 => x"0b800c87", +7014 => x"3d0d0470", +7015 => x"70707075", +7016 => x"70718306", +7017 => x"53555270", +7018 => x"0b0b0b80", +7019 => x"c0387170", +7020 => x"087009f7", +7021 => x"fbfdff12", +7022 => x"0670f884", +7023 => x"82818006", +7024 => x"51515253", +7025 => x"700b0b0b", +7026 => x"0ba13884", +7027 => x"13700870", +7028 => x"09f7fbfd", +7029 => x"ff120670", +7030 => x"f8848281", +7031 => x"80065151", +7032 => x"52537080", +7033 => x"2e0b0b0b", +7034 => x"0be13872", +7035 => x"52713351", +7036 => x"70802e0b", +7037 => x"0b0b0b8e", +7038 => x"38811270", +7039 => x"33525270", +7040 => x"0b0b0b0b", +7041 => x"f4387174", +7042 => x"31800c50", +7043 => x"50505004", +7044 => x"fb3d0d80", +7045 => x"0b0b0b83", +7046 => x"85840c7a", +7047 => x"53795278", +7048 => x"510b0b0b", +7049 => x"88de3f80", +7050 => x"08558008", +7051 => x"ff2e0b0b", +7052 => x"0b0b8838", +7053 => x"74800c87", +7054 => x"3d0d040b", +7055 => x"0b838584", +7056 => x"08567580", +7057 => x"2e0b0b0b", +7058 => x"0bea3877", +7059 => x"76710c54", +7060 => x"74800c87", +7061 => x"3d0d04fb", +7062 => x"3d0d787a", +7063 => x"29527751", +7064 => x"0b0b0bc2", +7065 => x"dd3f8008", +7066 => x"80085556", +7067 => x"8008802e", +7068 => x"0b0b0b80", +7069 => x"f2388008", +7070 => x"fc0508fc", +7071 => x"06fc0555", +7072 => x"74a4260b", +7073 => x"0b0b80e6", +7074 => x"38937527", +7075 => x"0b0b0b80", +7076 => x"c338800b", +7077 => x"80087084", +7078 => x"05800c0c", +7079 => x"80085480", +7080 => x"74708405", +7081 => x"560c9b75", +7082 => x"270b0b0b", +7083 => x"0ba63880", +7084 => x"74708405", +7085 => x"560c8074", +7086 => x"70840556", +7087 => x"0ca37527", +7088 => x"0b0b0b0b", +7089 => x"8f388074", +7090 => x"70840556", +7091 => x"0c807470", +7092 => x"8405560c", +7093 => x"80747084", +7094 => x"05560c80", +7095 => x"74708405", +7096 => x"560c8074", +7097 => x"0c755473", +7098 => x"800c873d", +7099 => x"0d047453", +7100 => x"80528008", +7101 => x"510b0b0b", +7102 => x"d49b3f75", +7103 => x"540b0b0b", +7104 => x"0be53970", +7105 => x"70707080", +7106 => x"0b0b0b83", +7107 => x"85840c76", +7108 => x"510b0b0b", +7109 => x"8a943f80", +7110 => x"08538008", +7111 => x"ff2e0b0b", +7112 => x"0b0b8938", +7113 => x"72800c50", +7114 => x"50505004", +7115 => x"0b0b8385", +7116 => x"84085473", +7117 => x"802e0b0b", +7118 => x"0b0be938", +7119 => x"7574710c", +7120 => x"5272800c", +7121 => x"50505050", +7122 => x"04fc3d0d", +7123 => x"800b0b0b", +7124 => x"8385840c", +7125 => x"78527751", +7126 => x"0b0b0b8d", +7127 => x"823f8008", +7128 => x"548008ff", +7129 => x"2e0b0b0b", +7130 => x"0b883873", +7131 => x"800c863d", +7132 => x"0d040b0b", +7133 => x"83858408", +7134 => x"5574802e", +7135 => x"0b0b0b0b", +7136 => x"ea387675", +7137 => x"710c5373", +7138 => x"800c863d", +7139 => x"0d04fb3d", +7140 => x"0d800b0b", +7141 => x"0b838584", +7142 => x"0c7a5379", +7143 => x"5278510b", +7144 => x"0b0b8a9e", +7145 => x"3f800855", +7146 => x"8008ff2e", +7147 => x"0b0b0b0b", +7148 => x"88387480", +7149 => x"0c873d0d", +7150 => x"040b0b83", +7151 => x"85840856", +7152 => x"75802e0b", +7153 => x"0b0b0bea", +7154 => x"38777671", +7155 => x"0c547480", +7156 => x"0c873d0d", +7157 => x"04fb3d0d", +7158 => x"800b0b0b", +7159 => x"8385840c", +7160 => x"7a537952", +7161 => x"78510b0b", +7162 => x"0b86b13f", +7163 => x"80085580", +7164 => x"08ff2e0b", +7165 => x"0b0b0b88", +7166 => x"3874800c", +7167 => x"873d0d04", +7168 => x"0b0b8385", +7169 => x"84085675", +7170 => x"802e0b0b", +7171 => x"0b0bea38", +7172 => x"7776710c", +7173 => x"5474800c", +7174 => x"873d0d04", +7175 => x"fc3d0d76", +7176 => x"78700855", +7177 => x"5555720b", +7178 => x"0b0b0b8f", +7179 => x"38735274", +7180 => x"510b0bff", +7181 => x"ac823f86", +7182 => x"3d0d0472", +7183 => x"5274510b", +7184 => x"0b0b0bd8", +7185 => x"3f735274", +7186 => x"510b0bff", +7187 => x"abea3f86", +7188 => x"3d0d04fb", +7189 => x"3d0d7755", +7190 => x"740b0b82", +7191 => x"f4ec082e", +7192 => x"0b0b0b80", +7193 => x"fe3880cc", +7194 => x"15085380", +7195 => x"5672762e", +7196 => x"0981060b", +7197 => x"0b0b8180", +7198 => x"3882c815", +7199 => x"08537280", +7200 => x"2e0b0b0b", +7201 => x"0bb23882", +7202 => x"cc155672", +7203 => x"762e0b0b", +7204 => x"0b0ba538", +7205 => x"72547574", +7206 => x"2e0b0b0b", +7207 => x"0b9a3873", +7208 => x"74085552", +7209 => x"74510b0b", +7210 => x"ffab8d3f", +7211 => x"75742e09", +7212 => x"81060b0b", +7213 => x"0b0be838", +7214 => x"80d41508", +7215 => x"53720b0b", +7216 => x"0b80d938", +7217 => x"b8150880", +7218 => x"2e0b0b0b", +7219 => x"0b953874", +7220 => x"51bc1508", +7221 => x"53722d84", +7222 => x"dc150853", +7223 => x"720b0b0b", +7224 => x"80ca3887", +7225 => x"3d0d0481", +7226 => x"1656758e", +7227 => x"240b0b0b", +7228 => x"80c83880", +7229 => x"cc150853", +7230 => x"75101013", +7231 => x"70085553", +7232 => x"73802e0b", +7233 => x"0b0b0bdf", +7234 => x"38737408", +7235 => x"55527451", +7236 => x"0b0bffaa", +7237 => x"a33f0b0b", +7238 => x"0b0be539", +7239 => x"72527451", +7240 => x"0b0bffaa", +7241 => x"933f0b0b", +7242 => x"0bff9939", +7243 => x"72527451", +7244 => x"0b0b0bfd", +7245 => x"e73f873d", +7246 => x"0d0480cc", +7247 => x"15085274", +7248 => x"510b0bff", +7249 => x"a9f23f0b", +7250 => x"0b0bfead", +7251 => x"39fb3d0d", +7252 => x"77567580", +7253 => x"2e0b0b0b", +7254 => x"80dc3882", +7255 => x"c8160855", +7256 => x"74802e0b", +7257 => x"0b0b0bb5", +7258 => x"38841508", +7259 => x"ff055480", +7260 => x"74240b0b", +7261 => x"0b0b9c38", +7262 => x"73101015", +7263 => x"88055372", +7264 => x"08fc1454", +7265 => x"52712dff", +7266 => x"14547380", +7267 => x"250b0b0b", +7268 => x"0bed3874", +7269 => x"0855740b", +7270 => x"0b0b0bcd", +7271 => x"38bc1608", +7272 => x"0b0b0b0b", +7273 => x"8538873d", +7274 => x"0d047551", +7275 => x"bc160852", +7276 => x"712d873d", +7277 => x"0d040b0b", +7278 => x"82f4ec08", +7279 => x"82c81108", +7280 => x"56560b0b", +7281 => x"0bff9939", +7282 => x"7070700b", +7283 => x"0b8384fc", +7284 => x"080b0b0b", +7285 => x"0b8d380b", +7286 => x"0b838588", +7287 => x"0b0b0b83", +7288 => x"84fc0c0b", +7289 => x"0b8384fc", +7290 => x"08751152", +7291 => x"52ff5370", +7292 => x"0b87fb80", +7293 => x"80260b0b", +7294 => x"0b0b8a38", +7295 => x"700b0b83", +7296 => x"84fc0c71", +7297 => x"5372800c", +7298 => x"50505004", +7299 => x"fd3d0d80", +7300 => x"0b0b0b82", +7301 => x"f4e00854", +7302 => x"5472812e", +7303 => x"0b0b0b0b", +7304 => x"ab38730b", +7305 => x"0b838580", +7306 => x"0c0b0bfe", +7307 => x"a5853f0b", +7308 => x"0bfea3cc", +7309 => x"3f0b0b83", +7310 => x"84d05281", +7311 => x"510b0bfe", +7312 => x"a7dd3f80", +7313 => x"08510b0b", +7314 => x"0b89973f", +7315 => x"720b0b83", +7316 => x"85800c0b", +7317 => x"0bfea4db", +7318 => x"3f0b0bfe", +7319 => x"a3a23f0b", +7320 => x"0b8384d0", +7321 => x"5281510b", +7322 => x"0bfea7b3", +7323 => x"3f800851", +7324 => x"0b0b0b88", +7325 => x"ed3f000b", +7326 => x"0b0b0bfb", +7327 => x"39000b0b", +7328 => x"0b0bfb39", +7329 => x"f53d0d7e", +7330 => x"600b0b83", +7331 => x"85800870", +7332 => x"5b585b5b", +7333 => x"750b0b0b", +7334 => x"80db3877", +7335 => x"7a250b0b", +7336 => x"0b0bac38", +7337 => x"771b7033", +7338 => x"7081ff06", +7339 => x"58585975", +7340 => x"8a2e0b0b", +7341 => x"0b0b9f38", +7342 => x"7681ff06", +7343 => x"510b0bfe", +7344 => x"a3cc3f81", +7345 => x"18587978", +7346 => x"240b0b0b", +7347 => x"0bd63879", +7348 => x"800c8d3d", +7349 => x"0d048d51", +7350 => x"0b0bfea3", +7351 => x"b13f7833", +7352 => x"7081ff06", +7353 => x"52570b0b", +7354 => x"fea3a33f", +7355 => x"8118580b", +7356 => x"0b0b0bd2", +7357 => x"3979557a", +7358 => x"547d5385", +7359 => x"528d3dfc", +7360 => x"05510b0b", +7361 => x"fea2c03f", +7362 => x"8008560b", +7363 => x"0b0b87c9", +7364 => x"3f7b8008", +7365 => x"0c75800c", +7366 => x"8d3d0d04", +7367 => x"f63d0d7d", +7368 => x"7f0b0b83", +7369 => x"85800870", +7370 => x"5b585a5a", +7371 => x"750b0b0b", +7372 => x"80d63877", +7373 => x"79250b0b", +7374 => x"0b80c438", +7375 => x"0b0bfea2", +7376 => x"a43f8008", +7377 => x"81ff0670", +7378 => x"8d327030", +7379 => x"709f2a51", +7380 => x"51575776", +7381 => x"8a2e0b0b", +7382 => x"0b80d438", +7383 => x"75802e0b", +7384 => x"0b0b80cb", +7385 => x"38771a56", +7386 => x"76763476", +7387 => x"510b0bfe", +7388 => x"a29c3f81", +7389 => x"18587878", +7390 => x"240b0b0b", +7391 => x"ffbe3877", +7392 => x"5675800c", +7393 => x"8c3d0d04", +7394 => x"78557954", +7395 => x"7c538452", +7396 => x"8c3dfc05", +7397 => x"510b0bfe", +7398 => x"a1ad3f80", +7399 => x"08560b0b", +7400 => x"0b86b63f", +7401 => x"7a80080c", +7402 => x"75800c8c", +7403 => x"3d0d0477", +7404 => x"1a568a76", +7405 => x"34811858", +7406 => x"8d510b0b", +7407 => x"fea1cf3f", +7408 => x"8a510b0b", +7409 => x"fea1c73f", +7410 => x"77560b0b", +7411 => x"0bffb239", +7412 => x"f93d0d79", +7413 => x"570b0b83", +7414 => x"85800880", +7415 => x"2e0b0b0b", +7416 => x"0bb53876", +7417 => x"510b0b0b", +7418 => x"f3b13f7b", +7419 => x"567a5580", +7420 => x"08810554", +7421 => x"76538252", +7422 => x"893dfc05", +7423 => x"510b0bfe", +7424 => x"a0c53f80", +7425 => x"08570b0b", +7426 => x"0b85ce3f", +7427 => x"7780080c", +7428 => x"76800c89", +7429 => x"3d0d040b", +7430 => x"0b0b85bd", +7431 => x"3f850b80", +7432 => x"080cff0b", +7433 => x"800c893d", +7434 => x"0d04fb3d", +7435 => x"0d0b0b83", +7436 => x"85800870", +7437 => x"5654730b", +7438 => x"0b0b0b88", +7439 => x"3874800c", +7440 => x"873d0d04", +7441 => x"77538352", +7442 => x"873dfc05", +7443 => x"510b0bfe", +7444 => x"9ff53f80", +7445 => x"08540b0b", +7446 => x"0b84fe3f", +7447 => x"7580080c", +7448 => x"73800c87", +7449 => x"3d0d04ff", +7450 => x"0b800c04", +7451 => x"fb3d0d77", +7452 => x"550b0b83", +7453 => x"85800880", +7454 => x"2e0b0b0b", +7455 => x"0bb13874", +7456 => x"510b0b0b", +7457 => x"f2953f80", +7458 => x"08810554", +7459 => x"74538752", +7460 => x"873dfc05", +7461 => x"510b0bfe", +7462 => x"9fad3f80", +7463 => x"08550b0b", +7464 => x"0b84b63f", +7465 => x"7580080c", +7466 => x"74800c87", +7467 => x"3d0d040b", +7468 => x"0b0b84a5", +7469 => x"3f850b80", +7470 => x"080cff0b", +7471 => x"800c873d", +7472 => x"0d04fa3d", +7473 => x"0d0b0b83", +7474 => x"85800880", +7475 => x"2e0b0b0b", +7476 => x"0ba8387a", +7477 => x"55795478", +7478 => x"53865288", +7479 => x"3dfc0551", +7480 => x"0b0bfe9e", +7481 => x"e23f8008", +7482 => x"560b0b0b", +7483 => x"83eb3f76", +7484 => x"80080c75", +7485 => x"800c883d", +7486 => x"0d040b0b", +7487 => x"0b83da3f", +7488 => x"9d0b8008", +7489 => x"0cff0b80", +7490 => x"0c883d0d", +7491 => x"04fb3d0d", +7492 => x"77795656", +7493 => x"80705454", +7494 => x"7375250b", +7495 => x"0b0b0ba3", +7496 => x"38741010", +7497 => x"10f80552", +7498 => x"72167033", +7499 => x"70742b76", +7500 => x"078116f8", +7501 => x"16565656", +7502 => x"51517473", +7503 => x"240b0b0b", +7504 => x"0be63873", +7505 => x"800c873d", +7506 => x"0d04fc3d", +7507 => x"0d767855", +7508 => x"55bc5380", +7509 => x"5273510b", +7510 => x"0b0bc7b9", +7511 => x"3f845274", +7512 => x"510b0b0b", +7513 => x"ffa73f80", +7514 => x"08742384", +7515 => x"52841551", +7516 => x"0b0b0bff", +7517 => x"983f8008", +7518 => x"82152384", +7519 => x"52881551", +7520 => x"0b0b0bff", +7521 => x"883f8008", +7522 => x"84150c84", +7523 => x"528c1551", +7524 => x"0b0b0bfe", +7525 => x"f83f8008", +7526 => x"88152384", +7527 => x"52901551", +7528 => x"0b0b0bfe", +7529 => x"e83f8008", +7530 => x"8a152384", +7531 => x"52941551", +7532 => x"0b0b0bfe", +7533 => x"d83f8008", +7534 => x"8c152384", +7535 => x"52981551", +7536 => x"0b0b0bfe", +7537 => x"c83f8008", +7538 => x"8e152388", +7539 => x"529c1551", +7540 => x"0b0b0bfe", +7541 => x"b83f8008", +7542 => x"90150c86", +7543 => x"3d0d04e9", +7544 => x"3d0d6a0b", +7545 => x"0b838580", +7546 => x"08575775", +7547 => x"0b0b0b0b", +7548 => x"933880c0", +7549 => x"800b8418", +7550 => x"0c75ac18", +7551 => x"0c75800c", +7552 => x"993d0d04", +7553 => x"893d7055", +7554 => x"6a54558a", +7555 => x"52993dff", +7556 => x"bc05510b", +7557 => x"0bfe9caf", +7558 => x"3f800877", +7559 => x"53755256", +7560 => x"0b0b0bfe", +7561 => x"a53f0b0b", +7562 => x"0b81ae3f", +7563 => x"7780080c", +7564 => x"75800c99", +7565 => x"3d0d04e9", +7566 => x"3d0d6957", +7567 => x"0b0b8385", +7568 => x"8008802e", +7569 => x"0b0b0b80", +7570 => x"c1387651", +7571 => x"0b0b0bee", +7572 => x"ca3f893d", +7573 => x"70568008", +7574 => x"81055577", +7575 => x"54568f52", +7576 => x"993dffbc", +7577 => x"05510b0b", +7578 => x"fe9bdc3f", +7579 => x"80086b53", +7580 => x"7652570b", +7581 => x"0b0bfdd2", +7582 => x"3f0b0b0b", +7583 => x"80db3f77", +7584 => x"80080c76", +7585 => x"800c993d", +7586 => x"0d040b0b", +7587 => x"0b80ca3f", +7588 => x"850b8008", +7589 => x"0cff0b80", +7590 => x"0c993d0d", +7591 => x"04fc3d0d", +7592 => x"81540b0b", +7593 => x"83858008", +7594 => x"0b0b0b0b", +7595 => x"88387380", +7596 => x"0c863d0d", +7597 => x"04765397", +7598 => x"b952863d", +7599 => x"fc05510b", +7600 => x"0bfe9b83", +7601 => x"3f800854", +7602 => x"0b0b0b0b", +7603 => x"8c3f7480", +7604 => x"080c7380", +7605 => x"0c863d0d", +7606 => x"040b0b82", +7607 => x"f4ec0880", +7608 => x"0c04f73d", +7609 => x"0d7b0b0b", +7610 => x"82f4ec08", +7611 => x"82c81108", +7612 => x"5a545a77", +7613 => x"802e0b0b", +7614 => x"0b80ee38", +7615 => x"81881884", +7616 => x"1908ff05", +7617 => x"81712b59", +7618 => x"55598074", +7619 => x"240b0b0b", +7620 => x"81893880", +7621 => x"74240b0b", +7622 => x"0b0bbd38", +7623 => x"73822b78", +7624 => x"11880556", +7625 => x"56818019", +7626 => x"08770653", +7627 => x"72802e0b", +7628 => x"0b0b80c6", +7629 => x"38781670", +7630 => x"08535379", +7631 => x"51740853", +7632 => x"722dff14", +7633 => x"fc17fc17", +7634 => x"79812c5a", +7635 => x"57575473", +7636 => x"80250b0b", +7637 => x"0b0bce38", +7638 => x"77085877", +7639 => x"0b0b0bff", +7640 => x"9b380b0b", +7641 => x"82f4ec08", +7642 => x"53bc1308", +7643 => x"0b0b0b0b", +7644 => x"b2387951", +7645 => x"0b0b0bf5", +7646 => x"fd3f7408", +7647 => x"53722dff", +7648 => x"14fc17fc", +7649 => x"1779812c", +7650 => x"5a575754", +7651 => x"7380250b", +7652 => x"0b0bff91", +7653 => x"380b0b0b", +7654 => x"ffbe3980", +7655 => x"570b0b0b", +7656 => x"fef13972", +7657 => x"51bc1308", +7658 => x"53722d79", +7659 => x"510b0b0b", +7660 => x"f5c43f8c", +7661 => x"08028c0c", +7662 => x"d43d0d8c", +7663 => x"08880508", +7664 => x"510b0b0b", +7665 => x"8fb43f80", +7666 => x"08547380", +7667 => x"2e0b0b0b", +7668 => x"0b93388c", +7669 => x"08880508", +7670 => x"708c08d0", +7671 => x"050c540b", +7672 => x"0b0b8e8a", +7673 => x"398c088c", +7674 => x"0508510b", +7675 => x"0b0b8f8a", +7676 => x"3f800854", +7677 => x"73802e0b", +7678 => x"0b0b0b93", +7679 => x"388c088c", +7680 => x"0508708c", +7681 => x"08d0050c", +7682 => x"540b0b0b", +7683 => x"8de0398c", +7684 => x"08880508", +7685 => x"510b0b0b", +7686 => x"8eaa3f80", +7687 => x"08547380", +7688 => x"2e0b0b0b", +7689 => x"80d9388c", +7690 => x"088c0508", +7691 => x"510b0b0b", +7692 => x"8e923f80", +7693 => x"08547380", +7694 => x"2e0b0b0b", +7695 => x"0baf388c", +7696 => x"08880508", +7697 => x"8c088c05", +7698 => x"08555584", +7699 => x"15088415", +7700 => x"082e0b0b", +7701 => x"0b0b9638", +7702 => x"0b0b0b8d", +7703 => x"d43f8008", +7704 => x"708c08d0", +7705 => x"050c540b", +7706 => x"0b0b8d82", +7707 => x"398c0888", +7708 => x"0508708c", +7709 => x"08d0050c", +7710 => x"540b0b0b", +7711 => x"8cf0398c", +7712 => x"088c0508", +7713 => x"510b0b0b", +7714 => x"8dba3f80", +7715 => x"08547380", +7716 => x"2e0b0b0b", +7717 => x"0b93388c", +7718 => x"088c0508", +7719 => x"708c08d0", +7720 => x"050c540b", +7721 => x"0b0b8cc6", +7722 => x"398c088c", +7723 => x"0508510b", +7724 => x"0b0b8cc7", +7725 => x"3f800854", +7726 => x"73802e0b", +7727 => x"0b0b80f5", +7728 => x"388c0888", +7729 => x"0508510b", +7730 => x"0b0b8caf", +7731 => x"3f800854", +7732 => x"73802e0b", +7733 => x"0b0b80cb", +7734 => x"388c0890", +7735 => x"05088c08", +7736 => x"88050871", +7737 => x"58565494", +7738 => x"70547553", +7739 => x"7652540b", +7740 => x"0bfea197", +7741 => x"3f8c0890", +7742 => x"05088c08", +7743 => x"8805088c", +7744 => x"088c0508", +7745 => x"84120884", +7746 => x"12080684", +7747 => x"140c8c08", +7748 => x"90050870", +7749 => x"8c08d005", +7750 => x"0c515656", +7751 => x"560b0b0b", +7752 => x"8bcc398c", +7753 => x"08880508", +7754 => x"708c08d0", +7755 => x"050c540b", +7756 => x"0b0b8bba", +7757 => x"398c0888", +7758 => x"0508510b", +7759 => x"0b0b8bbb", +7760 => x"3f800854", +7761 => x"73802e0b", +7762 => x"0b0b0b93", +7763 => x"388c088c", +7764 => x"0508708c", +7765 => x"08d0050c", +7766 => x"540b0b0b", +7767 => x"8b90398c", +7768 => x"08880508", +7769 => x"8811088c", +7770 => x"08f4050c", +7771 => x"8c088c05", +7772 => x"08881108", +7773 => x"8c08f005", +7774 => x"0c8c0888", +7775 => x"05085151", +7776 => x"54901408", +7777 => x"8c150855", +7778 => x"55738c08", +7779 => x"e8050c74", +7780 => x"8c08ec05", +7781 => x"0c8c088c", +7782 => x"05085490", +7783 => x"14088c15", +7784 => x"08555573", +7785 => x"8c08e005", +7786 => x"0c748c08", +7787 => x"e4050c8c", +7788 => x"08f40508", +7789 => x"8c08f005", +7790 => x"08318c08", +7791 => x"dc050c8c", +7792 => x"08dc0508", +7793 => x"80250b0b", +7794 => x"0b0b8c38", +7795 => x"8c08dc05", +7796 => x"08308c08", +7797 => x"dc050c8c", +7798 => x"08dc0508", +7799 => x"bf240b0b", +7800 => x"0b81bf38", +7801 => x"8c08f005", +7802 => x"088c08f4", +7803 => x"0508250b", +7804 => x"0b0b80cf", +7805 => x"388c08f0", +7806 => x"05088105", +7807 => x"8c08f005", +7808 => x"0c8c08e0", +7809 => x"05088006", +7810 => x"8c08e405", +7811 => x"0881068c", +7812 => x"08e00508", +7813 => x"9f2b8c08", +7814 => x"e4050881", +7815 => x"2a707207", +7816 => x"8c08e005", +7817 => x"08812a70", +7818 => x"76078c08", +7819 => x"e0050c74", +7820 => x"72078c08", +7821 => x"e4050c59", +7822 => x"595b5b58", +7823 => x"560b0b0b", +7824 => x"ffa2398c", +7825 => x"08f40508", +7826 => x"8c08f005", +7827 => x"08250b0b", +7828 => x"0b819a38", +7829 => x"8c08f405", +7830 => x"0881058c", +7831 => x"08f4050c", +7832 => x"8c08e805", +7833 => x"0880068c", +7834 => x"08ec0508", +7835 => x"81068c08", +7836 => x"e805089f", +7837 => x"2b8c08ec", +7838 => x"0508812a", +7839 => x"7072078c", +7840 => x"08e80508", +7841 => x"812a7076", +7842 => x"078c08e8", +7843 => x"050c7472", +7844 => x"078c08ec", +7845 => x"050c5959", +7846 => x"5b5b5856", +7847 => x"0b0b0bff", +7848 => x"a2398c08", +7849 => x"f005088c", +7850 => x"08f40508", +7851 => x"250b0b0b", +7852 => x"0ba1388c", +7853 => x"08f40508", +7854 => x"8c08f005", +7855 => x"0c805480", +7856 => x"55738c08", +7857 => x"e0050c74", +7858 => x"8c08e405", +7859 => x"0c0b0b0b", +7860 => x"0b9b398c", +7861 => x"08f00508", +7862 => x"8c08f405", +7863 => x"0c805480", +7864 => x"55738c08", +7865 => x"e8050c74", +7866 => x"8c08ec05", +7867 => x"0c8c0888", +7868 => x"05088c08", +7869 => x"8c050855", +7870 => x"55841508", +7871 => x"8415082e", +7872 => x"0b0b0b85", +7873 => x"85388c08", +7874 => x"88050854", +7875 => x"84140880", +7876 => x"2e0b0b0b", +7877 => x"81bc388c", +7878 => x"08e00508", +7879 => x"8c08e405", +7880 => x"08565473", +7881 => x"8c08c805", +7882 => x"0c748c08", +7883 => x"cc050c8c", +7884 => x"08e80508", +7885 => x"8c08ec05", +7886 => x"08575574", +7887 => x"8c08c005", +7888 => x"0c758c08", +7889 => x"c4050c8c", +7890 => x"08cc0508", +7891 => x"8c08c405", +7892 => x"08717131", +7893 => x"708c08ff", +7894 => x"bc050c52", +7895 => x"5556810b", +7896 => x"8c08ffb4", +7897 => x"050c8c08", +7898 => x"ffbc0508", +7899 => x"8c08cc05", +7900 => x"08575574", +7901 => x"76260b0b", +7902 => x"0b0b8938", +7903 => x"800b8c08", +7904 => x"ffb4050c", +7905 => x"8c08c805", +7906 => x"088c08c0", +7907 => x"05087171", +7908 => x"31708c08", +7909 => x"ffb8050c", +7910 => x"8c08ffb8", +7911 => x"0508708c", +7912 => x"08ffb405", +7913 => x"0831708c", +7914 => x"08ffb805", +7915 => x"0c525952", +7916 => x"56548c08", +7917 => x"ffb80508", +7918 => x"8c08ffbc", +7919 => x"05085654", +7920 => x"738c08f8", +7921 => x"050c748c", +7922 => x"08fc050c", +7923 => x"0b0b0b81", +7924 => x"bf398c08", +7925 => x"e805088c", +7926 => x"08ec0508", +7927 => x"5755748c", +7928 => x"08ffac05", +7929 => x"0c758c08", +7930 => x"ffb0050c", +7931 => x"8c08e005", +7932 => x"088c08e4", +7933 => x"05085654", +7934 => x"738c08ff", +7935 => x"a4050c74", +7936 => x"8c08ffa8", +7937 => x"050c8c08", +7938 => x"ffb00508", +7939 => x"8c08ffa8", +7940 => x"05087171", +7941 => x"31708c08", +7942 => x"ffa0050c", +7943 => x"52575581", +7944 => x"0b8c08ff", +7945 => x"98050c8c", +7946 => x"08ffa005", +7947 => x"088c08ff", +7948 => x"b0050856", +7949 => x"54737526", +7950 => x"0b0b0b0b", +7951 => x"8938800b", +7952 => x"8c08ff98", +7953 => x"050c8c08", +7954 => x"ffac0508", +7955 => x"8c08ffa4", +7956 => x"05087171", +7957 => x"31708c08", +7958 => x"ff9c050c", +7959 => x"8c08ff9c", +7960 => x"0508708c", +7961 => x"08ff9805", +7962 => x"0831708c", +7963 => x"08ff9c05", +7964 => x"0c535852", +7965 => x"55568c08", +7966 => x"ff9c0508", +7967 => x"8c08ffa0", +7968 => x"05085654", +7969 => x"738c08f8", +7970 => x"050c748c", +7971 => x"08fc050c", +7972 => x"800b8c08", +7973 => x"f8050824", +7974 => x"0b0b0b0b", +7975 => x"ba388c08", +7976 => x"90050854", +7977 => x"800b8415", +7978 => x"0c8c0890", +7979 => x"05088c08", +7980 => x"f4050888", +7981 => x"120c8c08", +7982 => x"90050857", +7983 => x"548c08f8", +7984 => x"05088c08", +7985 => x"fc050856", +7986 => x"54738c17", +7987 => x"0c749017", +7988 => x"0c0b0b0b", +7989 => x"80d1398c", +7990 => x"08900508", +7991 => x"54810b84", +7992 => x"150c8c08", +7993 => x"9005088c", +7994 => x"08f40508", +7995 => x"88120c8c", +7996 => x"08900508", +7997 => x"8c08d405", +7998 => x"5858548c", +7999 => x"08f80508", +8000 => x"8c08fc05", +8001 => x"08565473", +8002 => x"52745375", +8003 => x"510b0b80", +8004 => x"cfcb3f8c", +8005 => x"08d40508", +8006 => x"8c08d805", +8007 => x"08565473", +8008 => x"8c180c74", +8009 => x"90180c8c", +8010 => x"08900508", +8011 => x"548c1408", +8012 => x"f00a260b", +8013 => x"0b0b82bb", +8014 => x"388c0890", +8015 => x"05088c11", +8016 => x"08709013", +8017 => x"08075155", +8018 => x"5573802e", +8019 => x"0b0b0b82", +8020 => x"a2388c08", +8021 => x"9005088c", +8022 => x"08900508", +8023 => x"9011089f", +8024 => x"2a8c1208", +8025 => x"10707207", +8026 => x"8c150c90", +8027 => x"13081090", +8028 => x"150c8c08", +8029 => x"90050888", +8030 => x"1108ff05", +8031 => x"88120c53", +8032 => x"58585557", +8033 => x"0b0b0bff", +8034 => x"9e398c08", +8035 => x"9005088c", +8036 => x"08880508", +8037 => x"84110884", +8038 => x"130c8c08", +8039 => x"9005088c", +8040 => x"08f40508", +8041 => x"88120c8c", +8042 => x"08900508", +8043 => x"8c08ff94", +8044 => x"050c5256", +8045 => x"548c08e8", +8046 => x"05088c08", +8047 => x"ec050857", +8048 => x"55748c08", +8049 => x"ff8c050c", +8050 => x"758c08ff", +8051 => x"90050c8c", +8052 => x"08e00508", +8053 => x"8c08e405", +8054 => x"08565473", +8055 => x"8c08ff84", +8056 => x"050c748c", +8057 => x"08ff8805", +8058 => x"0c8c08ff", +8059 => x"9005088c", +8060 => x"08ff8805", +8061 => x"08701270", +8062 => x"8c08ff80", +8063 => x"050c5257", +8064 => x"55810b8c", +8065 => x"08fef805", +8066 => x"0c8c08ff", +8067 => x"8005088c", +8068 => x"08ff9005", +8069 => x"08565474", +8070 => x"74260b0b", +8071 => x"0b0b8938", +8072 => x"800b8c08", +8073 => x"fef8050c", +8074 => x"8c08ff8c", +8075 => x"05088c08", +8076 => x"ff840508", +8077 => x"7012708c", +8078 => x"08fefc05", +8079 => x"0c8c08fe", +8080 => x"fc05088c", +8081 => x"08fef805", +8082 => x"0811708c", +8083 => x"08fefc05", +8084 => x"0c535852", +8085 => x"55568c08", +8086 => x"fefc0508", +8087 => x"8c08ff80", +8088 => x"05088c08", +8089 => x"ff940508", +8090 => x"58565473", +8091 => x"8c170c74", +8092 => x"90170c8c", +8093 => x"08900508", +8094 => x"5483740c", +8095 => x"8c089005", +8096 => x"08548c14", +8097 => x"08f80a26", +8098 => x"0b0b0b0b", +8099 => x"87380b0b", +8100 => x"0b80cf39", +8101 => x"8c089005", +8102 => x"088c0890", +8103 => x"05088c11", +8104 => x"08800690", +8105 => x"12088106", +8106 => x"8c089005", +8107 => x"088c1108", +8108 => x"9f2b9012", +8109 => x"08812a70", +8110 => x"72078c14", +8111 => x"08812a70", +8112 => x"77078c1a", +8113 => x"0c757207", +8114 => x"901a0c8c", +8115 => x"08900508", +8116 => x"88110881", +8117 => x"0588120c", +8118 => x"51575c5f", +8119 => x"5f5c5a58", +8120 => x"555b8c08", +8121 => x"90050870", +8122 => x"8c08d005", +8123 => x"0c548c08", +8124 => x"d0050880", +8125 => x"0cae3d0d", +8126 => x"8c0c048c", +8127 => x"08028c0c", +8128 => x"7070800b", +8129 => x"8c08fc05", +8130 => x"0c8c0888", +8131 => x"05085170", +8132 => x"08822e09", +8133 => x"81060b0b", +8134 => x"0b0b8838", +8135 => x"810b8c08", +8136 => x"fc050c8c", +8137 => x"08fc0508", +8138 => x"70800c51", +8139 => x"50508c0c", +8140 => x"048c0802", +8141 => x"8c0c700b", +8142 => x"0b82f4b8", +8143 => x"70800c51", +8144 => x"508c0c04", +8145 => x"8c08028c", +8146 => x"0c707080", +8147 => x"0b8c08fc", +8148 => x"050c8c08", +8149 => x"88050851", +8150 => x"7008842e", +8151 => x"0981060b", +8152 => x"0b0b0b88", +8153 => x"38810b8c", +8154 => x"08fc050c", +8155 => x"8c08fc05", +8156 => x"0870800c", +8157 => x"5150508c", +8158 => x"0c048c08", +8159 => x"028c0c70", +8160 => x"70800b8c", +8161 => x"08fc050c", +8162 => x"8c088805", +8163 => x"08517008", +8164 => x"802e0b0b", +8165 => x"0b0b9738", +8166 => x"8c088805", +8167 => x"08517008", +8168 => x"812e0b0b", +8169 => x"0b0b8738", +8170 => x"0b0b0b0b", +8171 => x"8839810b", +8172 => x"8c08fc05", +8173 => x"0c8c08fc", +8174 => x"05087080", +8175 => x"0c515050", +8176 => x"8c0c048c", +8177 => x"08028c0c", +8178 => x"e73d0d8c", +8179 => x"08880508", +8180 => x"568c088c", +8181 => x"05088c08", +8182 => x"90050856", +8183 => x"54738c08", +8184 => x"ffb8050c", +8185 => x"748c08ff", +8186 => x"bc050c8c", +8187 => x"08940508", +8188 => x"8c089805", +8189 => x"08565473", +8190 => x"8c08ffb0", +8191 => x"050c748c", +8192 => x"08ffb405", +8193 => x"0c8c08ec", +8194 => x"0570538c", +8195 => x"08ffb805", +8196 => x"70535154", +8197 => x"0b0b80de", +8198 => x"c13f8c08", +8199 => x"d8057053", +8200 => x"8c08ffb0", +8201 => x"05705351", +8202 => x"540b0b80", +8203 => x"deac3f8c", +8204 => x"08c40570", +8205 => x"548c08d8", +8206 => x"0570548c", +8207 => x"08ec0570", +8208 => x"54515154", +8209 => x"0b0b0bee", +8210 => x"ea3f8008", +8211 => x"708c08c0", +8212 => x"050c8c08", +8213 => x"c0050853", +8214 => x"7652540b", +8215 => x"0b80ccb8", +8216 => x"3f75800c", +8217 => x"9b3d0d8c", +8218 => x"0c048c08", +8219 => x"028c0ce7", +8220 => x"3d0d8c08", +8221 => x"88050856", +8222 => x"8c088c05", +8223 => x"088c0890", +8224 => x"05085654", +8225 => x"738c08ff", +8226 => x"b8050c74", +8227 => x"8c08ffbc", +8228 => x"050c8c08", +8229 => x"9405088c", +8230 => x"08980508", +8231 => x"5654738c", +8232 => x"08ffb005", +8233 => x"0c748c08", +8234 => x"ffb4050c", +8235 => x"8c08ec05", +8236 => x"70538c08", +8237 => x"ffb80570", +8238 => x"5351540b", +8239 => x"0b80dd9a", +8240 => x"3f8c08d8", +8241 => x"0570538c", +8242 => x"08ffb005", +8243 => x"70535154", +8244 => x"0b0b80dd", +8245 => x"853f8c08", +8246 => x"dc050881", +8247 => x"328c08dc", +8248 => x"050c8c08", +8249 => x"c4057054", +8250 => x"8c08d805", +8251 => x"70548c08", +8252 => x"ec057054", +8253 => x"5151540b", +8254 => x"0b0bedb7", +8255 => x"3f800870", +8256 => x"8c08c005", +8257 => x"0c8c08c0", +8258 => x"05085376", +8259 => x"52540b0b", +8260 => x"80cb853f", +8261 => x"75800c9b", +8262 => x"3d0d8c0c", +8263 => x"048c0802", +8264 => x"8c0cff83", +8265 => x"3d0d8c08", +8266 => x"8c05088c", +8267 => x"08900508", +8268 => x"5856758c", +8269 => x"08ffb805", +8270 => x"0c768c08", +8271 => x"ffbc050c", +8272 => x"8c089405", +8273 => x"088c0898", +8274 => x"05085856", +8275 => x"758c08ff", +8276 => x"b0050c76", +8277 => x"8c08ffb4", +8278 => x"050c8c08", +8279 => x"ec057053", +8280 => x"8c08ffb8", +8281 => x"05705351", +8282 => x"560b0b80", +8283 => x"dbec3f8c", +8284 => x"08d80570", +8285 => x"538c08ff", +8286 => x"b0057053", +8287 => x"51560b0b", +8288 => x"80dbd73f", +8289 => x"8c08ec05", +8290 => x"8c08ffac", +8291 => x"050c8c08", +8292 => x"d8058c08", +8293 => x"ffa8050c", +8294 => x"8c08c405", +8295 => x"8c08ffa4", +8296 => x"050c8056", +8297 => x"8057758c", +8298 => x"08ff9805", +8299 => x"0c768c08", +8300 => x"ff9c050c", +8301 => x"80568057", +8302 => x"758c08ff", +8303 => x"90050c76", +8304 => x"8c08ff94", +8305 => x"050c8c08", +8306 => x"ffac0508", +8307 => x"510b0b0b", +8308 => x"9d823f80", +8309 => x"08567580", +8310 => x"2e0b0b0b", +8311 => x"80da388c", +8312 => x"08ffac05", +8313 => x"088c08fe", +8314 => x"c4050c80", +8315 => x"0b8c08fe", +8316 => x"c0050c8c", +8317 => x"08ffac05", +8318 => x"088c08ff", +8319 => x"a8050857", +8320 => x"57841708", +8321 => x"8417082e", +8322 => x"0b0b0b0b", +8323 => x"8938810b", +8324 => x"8c08fec0", +8325 => x"050c8c08", +8326 => x"fec40508", +8327 => x"8c08fec0", +8328 => x"05088412", +8329 => x"0c8c08ff", +8330 => x"ac05088c", +8331 => x"08ffa005", +8332 => x"0c560b0b", +8333 => x"0b9af139", +8334 => x"8c08ffa8", +8335 => x"0508510b", +8336 => x"0b0b9c90", +8337 => x"3f800856", +8338 => x"75802e0b", +8339 => x"0b0b80da", +8340 => x"388c08ff", +8341 => x"a805088c", +8342 => x"08febc05", +8343 => x"0c800b8c", +8344 => x"08feb805", +8345 => x"0c8c08ff", +8346 => x"ac05088c", +8347 => x"08ffa805", +8348 => x"08575784", +8349 => x"17088417", +8350 => x"082e0b0b", +8351 => x"0b0b8938", +8352 => x"810b8c08", +8353 => x"feb8050c", +8354 => x"8c08febc", +8355 => x"05088c08", +8356 => x"feb80508", +8357 => x"84120c8c", +8358 => x"08ffa805", +8359 => x"088c08ff", +8360 => x"a0050c57", +8361 => x"0b0b0b99", +8362 => x"ff398c08", +8363 => x"ffac0508", +8364 => x"510b0b0b", +8365 => x"9ae83f80", +8366 => x"08567580", +8367 => x"2e0b0b0b", +8368 => x"8189388c", +8369 => x"08ffa805", +8370 => x"08510b0b", +8371 => x"0b9a993f", +8372 => x"80085675", +8373 => x"802e0b0b", +8374 => x"0b0b9738", +8375 => x"0b0b0b99", +8376 => x"f43f8008", +8377 => x"708c08ff", +8378 => x"a0050c56", +8379 => x"0b0b0b99", +8380 => x"b7398c08", +8381 => x"ffac0508", +8382 => x"8c08feb4", +8383 => x"050c800b", +8384 => x"8c08feb0", +8385 => x"050c8c08", +8386 => x"ffac0508", +8387 => x"8c08ffa8", +8388 => x"05085757", +8389 => x"84170884", +8390 => x"17082e0b", +8391 => x"0b0b0b89", +8392 => x"38810b8c", +8393 => x"08feb005", +8394 => x"0c8c08fe", +8395 => x"b405088c", +8396 => x"08feb005", +8397 => x"0884120c", +8398 => x"8c08ffac", +8399 => x"05088c08", +8400 => x"ffa0050c", +8401 => x"560b0b0b", +8402 => x"98de398c", +8403 => x"08ffa805", +8404 => x"08510b0b", +8405 => x"0b99c73f", +8406 => x"80085675", +8407 => x"802e0b0b", +8408 => x"0b818938", +8409 => x"8c08ffac", +8410 => x"0508510b", +8411 => x"0b0b98f8", +8412 => x"3f800856", +8413 => x"75802e0b", +8414 => x"0b0b0b97", +8415 => x"380b0b0b", +8416 => x"98d33f80", +8417 => x"08708c08", +8418 => x"ffa0050c", +8419 => x"560b0b0b", +8420 => x"9896398c", +8421 => x"08ffa805", +8422 => x"088c08fe", +8423 => x"ac050c80", +8424 => x"0b8c08fe", +8425 => x"a8050c8c", +8426 => x"08ffac05", +8427 => x"088c08ff", +8428 => x"a8050857", +8429 => x"57841708", +8430 => x"8417082e", +8431 => x"0b0b0b0b", +8432 => x"8938810b", +8433 => x"8c08fea8", +8434 => x"050c8c08", +8435 => x"feac0508", +8436 => x"8c08fea8", +8437 => x"05088412", +8438 => x"0c8c08ff", +8439 => x"a805088c", +8440 => x"08ffa005", +8441 => x"0c570b0b", +8442 => x"0b97bd39", +8443 => x"8c08ffac", +8444 => x"0508510b", +8445 => x"0b0b97f0", +8446 => x"3f800856", +8447 => x"75802e0b", +8448 => x"0b0b80da", +8449 => x"388c08ff", +8450 => x"ac05088c", +8451 => x"08fea405", +8452 => x"0c800b8c", +8453 => x"08fea005", +8454 => x"0c8c08ff", +8455 => x"ac05088c", +8456 => x"08ffa805", +8457 => x"08575784", +8458 => x"17088417", +8459 => x"082e0b0b", +8460 => x"0b0b8938", +8461 => x"810b8c08", +8462 => x"fea0050c", +8463 => x"8c08fea4", +8464 => x"05088c08", +8465 => x"fea00508", +8466 => x"84120c8c", +8467 => x"08ffac05", +8468 => x"088c08ff", +8469 => x"a0050c56", +8470 => x"0b0b0b96", +8471 => x"cb398c08", +8472 => x"ffa80508", +8473 => x"510b0b0b", +8474 => x"96fe3f80", +8475 => x"08567580", +8476 => x"2e0b0b0b", +8477 => x"80da388c", +8478 => x"08ffa805", +8479 => x"088c08fe", +8480 => x"9c050c80", +8481 => x"0b8c08fe", +8482 => x"98050c8c", +8483 => x"08ffac05", +8484 => x"088c08ff", +8485 => x"a8050857", +8486 => x"57841708", +8487 => x"8417082e", +8488 => x"0b0b0b0b", +8489 => x"8938810b", +8490 => x"8c08fe98", +8491 => x"050c8c08", +8492 => x"fe9c0508", +8493 => x"8c08fe98", +8494 => x"05088412", +8495 => x"0c8c08ff", +8496 => x"a805088c", +8497 => x"08ffa005", +8498 => x"0c570b0b", +8499 => x"0b95d939", +8500 => x"8c08ffac", +8501 => x"05089011", +8502 => x"088c08ff", +8503 => x"8c050c8c", +8504 => x"08ffac05", +8505 => x"088c1108", +8506 => x"802a5959", +8507 => x"5680778c", +8508 => x"08ff8805", +8509 => x"0c8c08ff", +8510 => x"a8050890", +8511 => x"11088c08", +8512 => x"ff84050c", +8513 => x"8c08ffa8", +8514 => x"05088c11", +8515 => x"08802a5a", +8516 => x"5a515680", +8517 => x"778c08ff", +8518 => x"80050c8c", +8519 => x"08ff8405", +8520 => x"085a5680", +8521 => x"0b8c08ff", +8522 => x"8c050858", +8523 => x"58800b8c", +8524 => x"08fef005", +8525 => x"5b567554", +8526 => x"76557752", +8527 => x"78537951", +8528 => x"0b0b0bbb", +8529 => x"b23f8c08", +8530 => x"fef00508", +8531 => x"8c08fef4", +8532 => x"05085856", +8533 => x"758c08fe", +8534 => x"f8050c76", +8535 => x"8c08fefc", +8536 => x"050c8c08", +8537 => x"ff800508", +8538 => x"59800b8c", +8539 => x"08ff8c05", +8540 => x"08585880", +8541 => x"0b8c08fe", +8542 => x"e8055b56", +8543 => x"75547655", +8544 => x"77527853", +8545 => x"79510b0b", +8546 => x"0bbaec3f", +8547 => x"8c08fee8", +8548 => x"05088c08", +8549 => x"feec0508", +8550 => x"5856758c", +8551 => x"08fef005", +8552 => x"0c768c08", +8553 => x"fef4050c", +8554 => x"8c08ff84", +8555 => x"05085980", +8556 => x"0b8c08ff", +8557 => x"88050858", +8558 => x"58800b8c", +8559 => x"08fee005", +8560 => x"5b567554", +8561 => x"76557752", +8562 => x"78537951", +8563 => x"0b0b0bba", +8564 => x"a63f8c08", +8565 => x"fee00508", +8566 => x"8c08fee4", +8567 => x"05085856", +8568 => x"758c08fe", +8569 => x"e8050c76", +8570 => x"8c08feec", +8571 => x"050c8c08", +8572 => x"ff800508", +8573 => x"59800b8c", +8574 => x"08ff8805", +8575 => x"08585880", +8576 => x"0b8c08fe", +8577 => x"d8055b56", +8578 => x"75547655", +8579 => x"77527853", +8580 => x"79510b0b", +8581 => x"0bb9e03f", +8582 => x"8c08fed8", +8583 => x"05088c08", +8584 => x"fedc0508", +8585 => x"5856758c", +8586 => x"08fee005", +8587 => x"0c768c08", +8588 => x"fee4050c", +8589 => x"80568057", +8590 => x"758c08fe", +8591 => x"d8050c76", +8592 => x"8c08fedc", +8593 => x"050c8056", +8594 => x"8057758c", +8595 => x"08fed005", +8596 => x"0c768c08", +8597 => x"fed4050c", +8598 => x"8c08fef0", +8599 => x"05088c08", +8600 => x"fef40508", +8601 => x"5856758c", +8602 => x"08fe9005", +8603 => x"0c768c08", +8604 => x"fe94050c", +8605 => x"8c08fee8", +8606 => x"05088c08", +8607 => x"feec0508", +8608 => x"5856758c", +8609 => x"08fe8805", +8610 => x"0c768c08", +8611 => x"fe8c050c", +8612 => x"8c08fe94", +8613 => x"05088c08", +8614 => x"fe8c0508", +8615 => x"7012708c", +8616 => x"08fe8405", +8617 => x"0c525757", +8618 => x"810b8c08", +8619 => x"fdfc050c", +8620 => x"8c08fe84", +8621 => x"05088c08", +8622 => x"fe940508", +8623 => x"57577577", +8624 => x"260b0b0b", +8625 => x"0b893880", +8626 => x"0b8c08fd", +8627 => x"fc050c8c", +8628 => x"08fe9005", +8629 => x"088c08fe", +8630 => x"88050870", +8631 => x"12708c08", +8632 => x"fe80050c", +8633 => x"8c08fe80", +8634 => x"05088c08", +8635 => x"fdfc0508", +8636 => x"11708c08", +8637 => x"fe80050c", +8638 => x"53515257", +8639 => x"578c08fe", +8640 => x"8005088c", +8641 => x"08fe8405", +8642 => x"08585675", +8643 => x"8c08fec8", +8644 => x"050c768c", +8645 => x"08fecc05", +8646 => x"0c8c08fe", +8647 => x"f005088c", +8648 => x"08fec805", +8649 => x"08260b0b", +8650 => x"0b0bb038", +8651 => x"8c08fef0", +8652 => x"05088c08", +8653 => x"fec80508", +8654 => x"2e098106", +8655 => x"0b0b0b81", +8656 => x"d1388c08", +8657 => x"fef40508", +8658 => x"8c08fecc", +8659 => x"0508260b", +8660 => x"0b0b0b87", +8661 => x"380b0b0b", +8662 => x"81b8398c", +8663 => x"08fed805", +8664 => x"088c08fe", +8665 => x"dc050858", +8666 => x"56758c08", +8667 => x"fdf4050c", +8668 => x"768c08fd", +8669 => x"f8050c81", +8670 => x"56805775", +8671 => x"8c08fdec", +8672 => x"050c768c", +8673 => x"08fdf005", +8674 => x"0c8c08fd", +8675 => x"f805088c", +8676 => x"08fdf005", +8677 => x"08701270", +8678 => x"8c08fde8", +8679 => x"050c5257", +8680 => x"57810b8c", +8681 => x"08fde005", +8682 => x"0c8c08fd", +8683 => x"e805088c", +8684 => x"08fdf805", +8685 => x"08575775", +8686 => x"77260b0b", +8687 => x"0b0b8938", +8688 => x"800b8c08", +8689 => x"fde0050c", +8690 => x"8c08fdf4", +8691 => x"05088c08", +8692 => x"fdec0508", +8693 => x"7012708c", +8694 => x"08fde405", +8695 => x"0c8c08fd", +8696 => x"e405088c", +8697 => x"08fde005", +8698 => x"0811708c", +8699 => x"08fde405", +8700 => x"0c535152", +8701 => x"57578c08", +8702 => x"fde40508", +8703 => x"8c08fde8", +8704 => x"05085856", +8705 => x"758c08fe", +8706 => x"d8050c76", +8707 => x"8c08fedc", +8708 => x"050c8c08", +8709 => x"fecc0508", +8710 => x"57807780", +8711 => x"2b8c08fe", +8712 => x"f0050c56", +8713 => x"800b8c08", +8714 => x"fef4050c", +8715 => x"8c08fef8", +8716 => x"05088c08", +8717 => x"fefc0508", +8718 => x"5856758c", +8719 => x"08fdd805", +8720 => x"0c768c08", +8721 => x"fddc050c", +8722 => x"8c08fef0", +8723 => x"05088c08", +8724 => x"fef40508", +8725 => x"5856758c", +8726 => x"08fdd005", +8727 => x"0c768c08", +8728 => x"fdd4050c", +8729 => x"8c08fddc", +8730 => x"05088c08", +8731 => x"fdd40508", +8732 => x"7012708c", +8733 => x"08fdcc05", +8734 => x"0c525757", +8735 => x"810b8c08", +8736 => x"fdc4050c", +8737 => x"8c08fdcc", +8738 => x"05088c08", +8739 => x"fddc0508", +8740 => x"57577577", +8741 => x"260b0b0b", +8742 => x"0b893880", +8743 => x"0b8c08fd", +8744 => x"c4050c8c", +8745 => x"08fdd805", +8746 => x"088c08fd", +8747 => x"d0050870", +8748 => x"12708c08", +8749 => x"fdc8050c", +8750 => x"8c08fdc8", +8751 => x"05088c08", +8752 => x"fdc40508", +8753 => x"11708c08", +8754 => x"fdc8050c", +8755 => x"53515257", +8756 => x"578c08fd", +8757 => x"c805088c", +8758 => x"08fdcc05", +8759 => x"08585675", +8760 => x"8c08fed0", +8761 => x"050c768c", +8762 => x"08fed405", +8763 => x"0c8c08fe", +8764 => x"f805088c", +8765 => x"08fed005", +8766 => x"08260b0b", +8767 => x"0b0bb038", +8768 => x"8c08fef8", +8769 => x"05088c08", +8770 => x"fed00508", +8771 => x"2e098106", +8772 => x"0b0b0b81", +8773 => x"d1388c08", +8774 => x"fefc0508", +8775 => x"8c08fed4", +8776 => x"0508260b", +8777 => x"0b0b0b87", +8778 => x"380b0b0b", +8779 => x"81b8398c", +8780 => x"08fed805", +8781 => x"088c08fe", +8782 => x"dc050858", +8783 => x"56758c08", +8784 => x"fdbc050c", +8785 => x"768c08fd", +8786 => x"c0050c80", +8787 => x"56815775", +8788 => x"8c08fdb4", +8789 => x"050c768c", +8790 => x"08fdb805", +8791 => x"0c8c08fd", +8792 => x"c005088c", +8793 => x"08fdb805", +8794 => x"08701270", +8795 => x"8c08fdb0", +8796 => x"050c5257", +8797 => x"57810b8c", +8798 => x"08fda805", +8799 => x"0c8c08fd", +8800 => x"b005088c", +8801 => x"08fdc005", +8802 => x"08575775", +8803 => x"77260b0b", +8804 => x"0b0b8938", +8805 => x"800b8c08", +8806 => x"fda8050c", +8807 => x"8c08fdbc", +8808 => x"05088c08", +8809 => x"fdb40508", +8810 => x"7012708c", +8811 => x"08fdac05", +8812 => x"0c8c08fd", +8813 => x"ac05088c", +8814 => x"08fda805", +8815 => x"0811708c", +8816 => x"08fdac05", +8817 => x"0c535152", +8818 => x"57578c08", +8819 => x"fdac0508", +8820 => x"8c08fdb0", +8821 => x"05085856", +8822 => x"758c08fe", +8823 => x"d8050c76", +8824 => x"8c08fedc", +8825 => x"050c8c08", +8826 => x"fec80508", +8827 => x"802a708c", +8828 => x"08fda405", +8829 => x"0c578070", +8830 => x"8c08fda0", +8831 => x"050c568c", +8832 => x"08fda005", +8833 => x"088c08fd", +8834 => x"a4050858", +8835 => x"56758c08", +8836 => x"fda0050c", +8837 => x"768c08fd", +8838 => x"a4050c8c", +8839 => x"08fee005", +8840 => x"088c08fe", +8841 => x"e4050858", +8842 => x"56758c08", +8843 => x"fd98050c", +8844 => x"768c08fd", +8845 => x"9c050c8c", +8846 => x"08fda405", +8847 => x"088c08fd", +8848 => x"9c050870", +8849 => x"12708c08", +8850 => x"fd94050c", +8851 => x"52575781", +8852 => x"0b8c08fd", +8853 => x"8c050c8c", +8854 => x"08fd9405", +8855 => x"088c08fd", +8856 => x"a4050857", +8857 => x"57757726", +8858 => x"0b0b0b0b", +8859 => x"8938800b", +8860 => x"8c08fd8c", +8861 => x"050c8c08", +8862 => x"fda00508", +8863 => x"8c08fd98", +8864 => x"05087012", +8865 => x"708c08fd", +8866 => x"90050c8c", +8867 => x"08fd9005", +8868 => x"088c08fd", +8869 => x"8c050811", +8870 => x"708c08fd", +8871 => x"90050c53", +8872 => x"51525757", +8873 => x"8c08fed8", +8874 => x"05088c08", +8875 => x"fedc0508", +8876 => x"5856758c", +8877 => x"08fd8405", +8878 => x"0c768c08", +8879 => x"fd88050c", +8880 => x"8c08fd88", +8881 => x"05088c08", +8882 => x"fd940508", +8883 => x"7012708c", +8884 => x"08fd8005", +8885 => x"0c525757", +8886 => x"810b8c08", +8887 => x"fcf8050c", +8888 => x"8c08fd80", +8889 => x"05088c08", +8890 => x"fd880508", +8891 => x"57577577", +8892 => x"260b0b0b", +8893 => x"0b893880", +8894 => x"0b8c08fc", +8895 => x"f8050c8c", +8896 => x"08fd8405", +8897 => x"088c08fd", +8898 => x"90050870", +8899 => x"12708c08", +8900 => x"fcfc050c", +8901 => x"8c08fcfc", +8902 => x"05088c08", +8903 => x"fcf80508", +8904 => x"11708c08", +8905 => x"fcfc050c", +8906 => x"53515257", +8907 => x"578c08fc", +8908 => x"fc05088c", +8909 => x"08fd8005", +8910 => x"08585675", +8911 => x"8c08fed8", +8912 => x"050c768c", +8913 => x"08fedc05", +8914 => x"0c8c08fe", +8915 => x"d805088c", +8916 => x"08fedc05", +8917 => x"08585675", +8918 => x"8c08ff90", +8919 => x"050c768c", +8920 => x"08ff9405", +8921 => x"0c8c08fe", +8922 => x"d005088c", +8923 => x"08fed405", +8924 => x"08585675", +8925 => x"8c08ff98", +8926 => x"050c768c", +8927 => x"08ff9c05", +8928 => x"0c8c08ff", +8929 => x"a405088c", +8930 => x"08ffac05", +8931 => x"088c08ff", +8932 => x"a8050888", +8933 => x"12088812", +8934 => x"08058411", +8935 => x"88150c8c", +8936 => x"08ffa405", +8937 => x"088c08fc", +8938 => x"f4050c51", +8939 => x"58585880", +8940 => x"0b8c08fc", +8941 => x"f0050c8c", +8942 => x"08ffac05", +8943 => x"088c08ff", +8944 => x"a8050857", +8945 => x"57841708", +8946 => x"8417082e", +8947 => x"0b0b0b0b", +8948 => x"8938810b", +8949 => x"8c08fcf0", +8950 => x"050c8c08", +8951 => x"fcf40508", +8952 => x"8c08fcf0", +8953 => x"05088412", +8954 => x"0c578c08", +8955 => x"ff900508", +8956 => x"f80a260b", +8957 => x"0b0b0b87", +8958 => x"380b0b0b", +8959 => x"81ae398c", +8960 => x"08ffa405", +8961 => x"08881108", +8962 => x"81058812", +8963 => x"0c8c08ff", +8964 => x"90050880", +8965 => x"068c08ff", +8966 => x"94050881", +8967 => x"06705259", +8968 => x"51567580", +8969 => x"2e0b0b0b", +8970 => x"80cf388c", +8971 => x"08ff9805", +8972 => x"089f2b8c", +8973 => x"08ff9c05", +8974 => x"08812a70", +8975 => x"72078c08", +8976 => x"ff980508", +8977 => x"812a5959", +8978 => x"5959758c", +8979 => x"08ff9805", +8980 => x"0c768c08", +8981 => x"ff9c050c", +8982 => x"8c08ff98", +8983 => x"0508810a", +8984 => x"078c08ff", +8985 => x"9c050880", +8986 => x"07585675", +8987 => x"8c08ff98", +8988 => x"050c768c", +8989 => x"08ff9c05", +8990 => x"0c8c08ff", +8991 => x"9005089f", +8992 => x"2b8c08ff", +8993 => x"94050881", +8994 => x"2a707207", +8995 => x"8c08ff90", +8996 => x"0508812a", +8997 => x"59595959", +8998 => x"758c08ff", +8999 => x"90050c76", +9000 => x"8c08ff94", +9001 => x"050c0b0b", +9002 => x"0bfebf39", +9003 => x"8c08ff90", +9004 => x"0508f00a", +9005 => x"260b0b0b", +9006 => x"81a1388c", +9007 => x"08ffa405", +9008 => x"08881108", +9009 => x"ff058812", +9010 => x"0c8c08ff", +9011 => x"9405089f", +9012 => x"2a8c08ff", +9013 => x"90050810", +9014 => x"7072078c", +9015 => x"08ff9405", +9016 => x"08105b53", +9017 => x"5a5a5675", +9018 => x"8c08ff90", +9019 => x"050c768c", +9020 => x"08ff9405", +9021 => x"0c800b8c", +9022 => x"08ff9805", +9023 => x"08240b0b", +9024 => x"0b0b8738", +9025 => x"0b0b0b0b", +9026 => x"a1398c08", +9027 => x"ff900508", +9028 => x"80078c08", +9029 => x"ff940508", +9030 => x"81075856", +9031 => x"758c08ff", +9032 => x"90050c76", +9033 => x"8c08ff94", +9034 => x"050c8c08", +9035 => x"ff9c0508", +9036 => x"9f2a8c08", +9037 => x"ff980508", +9038 => x"10707207", +9039 => x"8c08ff9c", +9040 => x"0508105a", +9041 => x"58595975", +9042 => x"8c08ff98", +9043 => x"050c768c", +9044 => x"08ff9c05", +9045 => x"0c0b0b0b", +9046 => x"fed2398c", +9047 => x"08ff9005", +9048 => x"08800670", +9049 => x"8c08fce8", +9050 => x"050c8c08", +9051 => x"ff940508", +9052 => x"81ff0670", +9053 => x"8c08fcec", +9054 => x"050c5856", +9055 => x"8c08fce8", +9056 => x"05088c08", +9057 => x"fcec0508", +9058 => x"5856758c", +9059 => x"08fce805", +9060 => x"0c768c08", +9061 => x"fcec050c", +9062 => x"8c08fce8", +9063 => x"05085776", +9064 => x"0b0b0b83", +9065 => x"d0388c08", +9066 => x"fcec0508", +9067 => x"56758180", +9068 => x"2e098106", +9069 => x"0b0b0b83", +9070 => x"bc388c08", +9071 => x"ff900508", +9072 => x"982b8c08", +9073 => x"ff940508", +9074 => x"882a7072", +9075 => x"078c08ff", +9076 => x"90050888", +9077 => x"2a718106", +9078 => x"51595959", +9079 => x"5975802e", +9080 => x"0b0b0b81", +9081 => x"bf388c08", +9082 => x"ff900508", +9083 => x"8c08ff94", +9084 => x"05085856", +9085 => x"758c08fc", +9086 => x"e0050c76", +9087 => x"8c08fce4", +9088 => x"050c8056", +9089 => x"81805775", +9090 => x"8c08fcd8", +9091 => x"050c768c", +9092 => x"08fcdc05", +9093 => x"0c8c08fc", +9094 => x"e405088c", +9095 => x"08fcdc05", +9096 => x"08701270", +9097 => x"8c08fcd4", +9098 => x"050c5257", +9099 => x"57810b8c", +9100 => x"08fccc05", +9101 => x"0c8c08fc", +9102 => x"d405088c", +9103 => x"08fce405", +9104 => x"08575775", +9105 => x"77260b0b", +9106 => x"0b0b8938", +9107 => x"800b8c08", +9108 => x"fccc050c", +9109 => x"8c08fce0", +9110 => x"05088c08", +9111 => x"fcd80508", +9112 => x"7012708c", +9113 => x"08fcd005", +9114 => x"0c8c08fc", +9115 => x"d005088c", +9116 => x"08fccc05", +9117 => x"0811708c", +9118 => x"08fcd005", +9119 => x"0c535152", +9120 => x"57578c08", +9121 => x"fcd00508", +9122 => x"8c08fcd4", +9123 => x"05085856", +9124 => x"758c08ff", +9125 => x"90050c76", +9126 => x"8c08ff94", +9127 => x"050c0b0b", +9128 => x"0b81d239", +9129 => x"8c08ff98", +9130 => x"0508708c", +9131 => x"08ff9c05", +9132 => x"08075156", +9133 => x"75802e0b", +9134 => x"0b0b81b9", +9135 => x"388c08ff", +9136 => x"9005088c", +9137 => x"08ff9405", +9138 => x"08585675", +9139 => x"8c08fcc4", +9140 => x"050c768c", +9141 => x"08fcc805", +9142 => x"0c805681", +9143 => x"8057758c", +9144 => x"08fcbc05", +9145 => x"0c768c08", +9146 => x"fcc0050c", +9147 => x"8c08fcc8", +9148 => x"05088c08", +9149 => x"fcc00508", +9150 => x"7012708c", +9151 => x"08fcb805", +9152 => x"0c525757", +9153 => x"810b8c08", +9154 => x"fcb0050c", +9155 => x"8c08fcb8", +9156 => x"05088c08", +9157 => x"fcc80508", +9158 => x"57577577", +9159 => x"260b0b0b", +9160 => x"0b893880", +9161 => x"0b8c08fc", +9162 => x"b0050c8c", +9163 => x"08fcc405", +9164 => x"088c08fc", +9165 => x"bc050870", +9166 => x"12708c08", +9167 => x"fcb4050c", +9168 => x"8c08fcb4", +9169 => x"05088c08", +9170 => x"fcb00508", +9171 => x"11708c08", +9172 => x"fcb4050c", +9173 => x"53515257", +9174 => x"578c08fc", +9175 => x"b405088c", +9176 => x"08fcb805", +9177 => x"08585675", +9178 => x"8c08ff90", +9179 => x"050c768c", +9180 => x"08ff9405", +9181 => x"0c8c08ff", +9182 => x"a4050856", +9183 => x"8c08ff90", +9184 => x"05088c08", +9185 => x"ff940508", +9186 => x"5957768c", +9187 => x"170c7790", +9188 => x"170c8c08", +9189 => x"ffa40508", +9190 => x"5683760c", +9191 => x"8c08ffa4", +9192 => x"05088c08", +9193 => x"ffa0050c", +9194 => x"8c08ffa0", +9195 => x"0508708c", +9196 => x"08c0050c", +9197 => x"8c08c005", +9198 => x"08538c08", +9199 => x"88050852", +9200 => x"560b0b0b", +9201 => x"add23f8c", +9202 => x"08880508", +9203 => x"800c80ff", +9204 => x"3d0d8c0c", +9205 => x"048c0802", +9206 => x"8c0c700b", +9207 => x"0b82f4b8", +9208 => x"70800c51", +9209 => x"508c0c04", +9210 => x"8c08028c", +9211 => x"0c707080", +9212 => x"0b8c08fc", +9213 => x"050c8c08", +9214 => x"88050851", +9215 => x"7008822e", +9216 => x"0981060b", +9217 => x"0b0b0b88", +9218 => x"38810b8c", +9219 => x"08fc050c", +9220 => x"8c08fc05", +9221 => x"0870800c", +9222 => x"5150508c", +9223 => x"0c048c08", +9224 => x"028c0c70", +9225 => x"70800b8c", +9226 => x"08fc050c", +9227 => x"8c088805", +9228 => x"08517008", +9229 => x"842e0981", +9230 => x"060b0b0b", +9231 => x"0b883881", +9232 => x"0b8c08fc", +9233 => x"050c8c08", +9234 => x"fc050870", +9235 => x"800c5150", +9236 => x"508c0c04", +9237 => x"8c08028c", +9238 => x"0c707080", +9239 => x"0b8c08fc", +9240 => x"050c8c08", +9241 => x"88050851", +9242 => x"7008802e", +9243 => x"0b0b0b0b", +9244 => x"97388c08", +9245 => x"88050851", +9246 => x"7008812e", +9247 => x"0b0b0b0b", +9248 => x"87380b0b", +9249 => x"0b0b8839", +9250 => x"810b8c08", +9251 => x"fc050c8c", +9252 => x"08fc0508", +9253 => x"70800c51", +9254 => x"50508c0c", +9255 => x"048c0802", +9256 => x"8c0cffbc", +9257 => x"3d0d8c08", +9258 => x"8c05088c", +9259 => x"08900508", +9260 => x"5553728c", +9261 => x"08cc050c", +9262 => x"738c08d0", +9263 => x"050c8c08", +9264 => x"9405088c", +9265 => x"08980508", +9266 => x"5553728c", +9267 => x"08c4050c", +9268 => x"738c08c8", +9269 => x"050c8c08", +9270 => x"ec057053", +9271 => x"8c08cc05", +9272 => x"70535153", +9273 => x"0b0b0bbc", +9274 => x"f13f8c08", +9275 => x"d8057053", +9276 => x"8c08c405", +9277 => x"70535153", +9278 => x"0b0b0bbc", +9279 => x"dd3f8c08", +9280 => x"ec058c08", +9281 => x"c0050c8c", +9282 => x"08d8058c", +9283 => x"08ffbc05", +9284 => x"0c8c08c0", +9285 => x"0508510b", +9286 => x"0b0b9084", +9287 => x"3f800853", +9288 => x"72802e0b", +9289 => x"0b0b0b92", +9290 => x"388c08c0", +9291 => x"05088c08", +9292 => x"ffb8050c", +9293 => x"0b0b0b8e", +9294 => x"bb398c08", +9295 => x"ffbc0508", +9296 => x"510b0b0b", +9297 => x"8fda3f80", +9298 => x"08537280", +9299 => x"2e0b0b0b", +9300 => x"0b93388c", +9301 => x"08ffbc05", +9302 => x"088c08ff", +9303 => x"b8050c0b", +9304 => x"0b0b8e90", +9305 => x"398c08c0", +9306 => x"05088c08", +9307 => x"c005088c", +9308 => x"08ffbc05", +9309 => x"08841208", +9310 => x"84120832", +9311 => x"84140c8c", +9312 => x"08c00508", +9313 => x"54555555", +9314 => x"0b0b0b8e", +9315 => x"dd3f8008", +9316 => x"53720b0b", +9317 => x"0b0b9d38", +9318 => x"8c08c005", +9319 => x"08510b0b", +9320 => x"0b8e913f", +9321 => x"80085372", +9322 => x"0b0b0b0b", +9323 => x"87380b0b", +9324 => x"0b80c339", +9325 => x"8c08c005", +9326 => x"088c08ff", +9327 => x"bc050854", +9328 => x"54730873", +9329 => x"082e0981", +9330 => x"060b0b0b", +9331 => x"0b97380b", +9332 => x"0b0b8dcd", +9333 => x"3f800870", +9334 => x"8c08ffb8", +9335 => x"050c530b", +9336 => x"0b0b8d90", +9337 => x"398c08c0", +9338 => x"05088c08", +9339 => x"ffb8050c", +9340 => x"0b0b0b8c", +9341 => x"ff398c08", +9342 => x"ffbc0508", +9343 => x"510b0b0b", +9344 => x"8de83f80", +9345 => x"08537280", +9346 => x"2e0b0b0b", +9347 => x"0baf388c", +9348 => x"08c00508", +9349 => x"53805480", +9350 => x"55738c14", +9351 => x"0c749014", +9352 => x"0c8c08c0", +9353 => x"05085380", +9354 => x"0b88140c", +9355 => x"8c08c005", +9356 => x"088c08ff", +9357 => x"b8050c0b", +9358 => x"0b0b8cb8", +9359 => x"398c08ff", +9360 => x"bc050851", +9361 => x"0b0b0b8c", +9362 => x"eb3f8008", +9363 => x"5372802e", +9364 => x"0b0b0b0b", +9365 => x"9b388c08", +9366 => x"c0050853", +9367 => x"84730c8c", +9368 => x"08c00508", +9369 => x"8c08ffb8", +9370 => x"050c0b0b", +9371 => x"0b8c8539", +9372 => x"8c08c005", +9373 => x"088c08c0", +9374 => x"05088c08", +9375 => x"ffbc0508", +9376 => x"88120888", +9377 => x"12083188", +9378 => x"140c8c08", +9379 => x"c0050851", +9380 => x"55555590", +9381 => x"13088c14", +9382 => x"08545472", +9383 => x"8c08ffa8", +9384 => x"050c738c", +9385 => x"08ffac05", +9386 => x"0c8c08ff", +9387 => x"bc050853", +9388 => x"9013088c", +9389 => x"14085454", +9390 => x"728c08ff", +9391 => x"a0050c73", +9392 => x"8c08ffa4", +9393 => x"050c8c08", +9394 => x"ffa00508", +9395 => x"8c08ffa8", +9396 => x"0508260b", +9397 => x"0b0b0bb0", +9398 => x"388c08ff", +9399 => x"a005088c", +9400 => x"08ffa805", +9401 => x"082e0981", +9402 => x"060b0b0b", +9403 => x"81e9388c", +9404 => x"08ffa405", +9405 => x"088c08ff", +9406 => x"ac050826", +9407 => x"0b0b0b0b", +9408 => x"87380b0b", +9409 => x"0b81d039", +9410 => x"8c08ffa8", +9411 => x"05088c08", +9412 => x"ffac0508", +9413 => x"5553728c", +9414 => x"08ff9005", +9415 => x"0c738c08", +9416 => x"ff94050c", +9417 => x"8c08ff90", +9418 => x"05088c08", +9419 => x"ff940508", +9420 => x"5553728c", +9421 => x"08ff8805", +9422 => x"0c738c08", +9423 => x"ff8c050c", +9424 => x"8c08ff8c", +9425 => x"05088c08", +9426 => x"ff940508", +9427 => x"7012708c", +9428 => x"08ff8405", +9429 => x"0c525454", +9430 => x"810b8c08", +9431 => x"fefc050c", +9432 => x"8c08ff84", +9433 => x"05088c08", +9434 => x"ff8c0508", +9435 => x"54547274", +9436 => x"260b0b0b", +9437 => x"0b893880", +9438 => x"0b8c08fe", +9439 => x"fc050c8c", +9440 => x"08ff8805", +9441 => x"088c08ff", +9442 => x"90050870", +9443 => x"12708c08", +9444 => x"ff80050c", +9445 => x"8c08ff80", +9446 => x"05088c08", +9447 => x"fefc0508", +9448 => x"11708c08", +9449 => x"ff80050c", +9450 => x"53515254", +9451 => x"548c08ff", +9452 => x"8005088c", +9453 => x"08ff8405", +9454 => x"08555372", +9455 => x"8c08ffa8", +9456 => x"050c738c", +9457 => x"08ffac05", +9458 => x"0c8c08c0", +9459 => x"05088811", +9460 => x"08ff0588", +9461 => x"120c5388", +9462 => x"0a538054", +9463 => x"728c08ff", +9464 => x"b0050c73", +9465 => x"8c08ffb4", +9466 => x"050c8053", +9467 => x"8054728c", +9468 => x"08ff9805", +9469 => x"0c738c08", +9470 => x"ff9c050c", +9471 => x"8c08ffb0", +9472 => x"0508708c", +9473 => x"08ffb405", +9474 => x"08075153", +9475 => x"72802e0b", +9476 => x"0b0b849f", +9477 => x"388c08ff", +9478 => x"a005088c", +9479 => x"08ffa805", +9480 => x"08260b0b", +9481 => x"0b829838", +9482 => x"8c08ffa0", +9483 => x"05088c08", +9484 => x"ffa80508", +9485 => x"2e098106", +9486 => x"0b0b0b0b", +9487 => x"94388c08", +9488 => x"ffa40508", +9489 => x"8c08ffac", +9490 => x"0508260b", +9491 => x"0b0b81ef", +9492 => x"388c08ff", +9493 => x"9805088c", +9494 => x"08ffb005", +9495 => x"08078c08", +9496 => x"ff9c0508", +9497 => x"8c08ffb4", +9498 => x"05080755", +9499 => x"53728c08", +9500 => x"ff98050c", +9501 => x"738c08ff", +9502 => x"9c050c8c", +9503 => x"08ffa805", +9504 => x"088c08ff", +9505 => x"ac050855", +9506 => x"53728c08", +9507 => x"fef4050c", +9508 => x"738c08fe", +9509 => x"f8050c8c", +9510 => x"08ffa005", +9511 => x"088c08ff", +9512 => x"a4050855", +9513 => x"53728c08", +9514 => x"feec050c", +9515 => x"738c08fe", +9516 => x"f0050c8c", +9517 => x"08fef805", +9518 => x"088c08fe", +9519 => x"f0050871", +9520 => x"7131708c", +9521 => x"08fee805", +9522 => x"0c525454", +9523 => x"810b8c08", +9524 => x"fee0050c", +9525 => x"8c08fee8", +9526 => x"05088c08", +9527 => x"fef80508", +9528 => x"54547373", +9529 => x"260b0b0b", +9530 => x"0b893880", +9531 => x"0b8c08fe", +9532 => x"e0050c8c", +9533 => x"08fef405", +9534 => x"088c08fe", +9535 => x"ec050871", +9536 => x"7131708c", +9537 => x"08fee405", +9538 => x"0c8c08fe", +9539 => x"e4050870", +9540 => x"8c08fee0", +9541 => x"05083170", +9542 => x"8c08fee4", +9543 => x"050c5351", +9544 => x"5254548c", +9545 => x"08fee405", +9546 => x"088c08fe", +9547 => x"e8050855", +9548 => x"53728c08", +9549 => x"ffa8050c", +9550 => x"738c08ff", +9551 => x"ac050c8c", +9552 => x"08ffb005", +9553 => x"089f2b8c", +9554 => x"08ffb405", +9555 => x"08812a70", +9556 => x"72078c08", +9557 => x"ffb00508", +9558 => x"812a5656", +9559 => x"5656728c", +9560 => x"08ffb005", +9561 => x"0c738c08", +9562 => x"ffb4050c", +9563 => x"8c08ffa8", +9564 => x"05088c08", +9565 => x"ffac0508", +9566 => x"5553728c", +9567 => x"08fed805", +9568 => x"0c738c08", +9569 => x"fedc050c", +9570 => x"8c08fed8", +9571 => x"05088c08", +9572 => x"fedc0508", +9573 => x"5553728c", +9574 => x"08fed005", +9575 => x"0c738c08", +9576 => x"fed4050c", +9577 => x"8c08fed4", +9578 => x"05088c08", +9579 => x"fedc0508", +9580 => x"7012708c", +9581 => x"08fecc05", +9582 => x"0c525454", +9583 => x"810b8c08", +9584 => x"fec4050c", +9585 => x"8c08fecc", +9586 => x"05088c08", +9587 => x"fed40508", +9588 => x"54547274", +9589 => x"260b0b0b", +9590 => x"0b893880", +9591 => x"0b8c08fe", +9592 => x"c4050c8c", +9593 => x"08fed005", +9594 => x"088c08fe", +9595 => x"d8050870", +9596 => x"12708c08", +9597 => x"fec8050c", +9598 => x"8c08fec8", +9599 => x"05088c08", +9600 => x"fec40508", +9601 => x"11708c08", +9602 => x"fec8050c", +9603 => x"53515254", +9604 => x"548c08fe", +9605 => x"c805088c", +9606 => x"08fecc05", +9607 => x"08555372", +9608 => x"8c08ffa8", +9609 => x"050c738c", +9610 => x"08ffac05", +9611 => x"0c0b0b0b", +9612 => x"fbca398c", +9613 => x"08ff9805", +9614 => x"08800670", +9615 => x"8c08febc", +9616 => x"050c8c08", +9617 => x"ff9c0508", +9618 => x"81ff0670", +9619 => x"8c08fec0", +9620 => x"050c5454", +9621 => x"8c08febc", +9622 => x"05088c08", +9623 => x"fec00508", +9624 => x"5553728c", +9625 => x"08febc05", +9626 => x"0c738c08", +9627 => x"fec0050c", +9628 => x"8c08febc", +9629 => x"05085473", +9630 => x"0b0b0b83", +9631 => x"d0388c08", +9632 => x"fec00508", +9633 => x"53728180", +9634 => x"2e098106", +9635 => x"0b0b0b83", +9636 => x"bc388c08", +9637 => x"ff980508", +9638 => x"982b8c08", +9639 => x"ff9c0508", +9640 => x"882a7072", +9641 => x"078c08ff", +9642 => x"98050888", +9643 => x"2a718106", +9644 => x"51565656", +9645 => x"5672802e", +9646 => x"0b0b0b81", +9647 => x"bf388c08", +9648 => x"ff980508", +9649 => x"8c08ff9c", +9650 => x"05085553", +9651 => x"728c08fe", +9652 => x"b4050c73", +9653 => x"8c08feb8", +9654 => x"050c8053", +9655 => x"81805472", +9656 => x"8c08feac", +9657 => x"050c738c", +9658 => x"08feb005", +9659 => x"0c8c08fe", +9660 => x"b805088c", +9661 => x"08feb005", +9662 => x"08701270", +9663 => x"8c08fea8", +9664 => x"050c5254", +9665 => x"54810b8c", +9666 => x"08fea005", +9667 => x"0c8c08fe", +9668 => x"a805088c", +9669 => x"08feb805", +9670 => x"08545472", +9671 => x"74260b0b", +9672 => x"0b0b8938", +9673 => x"800b8c08", +9674 => x"fea0050c", +9675 => x"8c08feb4", +9676 => x"05088c08", +9677 => x"feac0508", +9678 => x"7012708c", +9679 => x"08fea405", +9680 => x"0c8c08fe", +9681 => x"a405088c", +9682 => x"08fea005", +9683 => x"0811708c", +9684 => x"08fea405", +9685 => x"0c535152", +9686 => x"54548c08", +9687 => x"fea40508", +9688 => x"8c08fea8", +9689 => x"05085553", +9690 => x"728c08ff", +9691 => x"98050c73", +9692 => x"8c08ff9c", +9693 => x"050c0b0b", +9694 => x"0b81d239", +9695 => x"8c08ffa8", +9696 => x"0508708c", +9697 => x"08ffac05", +9698 => x"08075153", +9699 => x"72802e0b", +9700 => x"0b0b81b9", +9701 => x"388c08ff", +9702 => x"9805088c", +9703 => x"08ff9c05", +9704 => x"08555372", +9705 => x"8c08fe98", +9706 => x"050c738c", +9707 => x"08fe9c05", +9708 => x"0c805381", +9709 => x"8054728c", +9710 => x"08fe9005", +9711 => x"0c738c08", +9712 => x"fe94050c", +9713 => x"8c08fe9c", +9714 => x"05088c08", +9715 => x"fe940508", +9716 => x"7012708c", +9717 => x"08fe8c05", +9718 => x"0c525454", +9719 => x"810b8c08", +9720 => x"fe84050c", +9721 => x"8c08fe8c", +9722 => x"05088c08", +9723 => x"fe9c0508", +9724 => x"54547274", +9725 => x"260b0b0b", +9726 => x"0b893880", +9727 => x"0b8c08fe", +9728 => x"84050c8c", +9729 => x"08fe9805", +9730 => x"088c08fe", +9731 => x"90050870", +9732 => x"12708c08", +9733 => x"fe88050c", +9734 => x"8c08fe88", +9735 => x"05088c08", +9736 => x"fe840508", +9737 => x"11708c08", +9738 => x"fe88050c", +9739 => x"53515254", +9740 => x"548c08fe", +9741 => x"8805088c", +9742 => x"08fe8c05", +9743 => x"08555372", +9744 => x"8c08ff98", +9745 => x"050c738c", +9746 => x"08ff9c05", +9747 => x"0c8c08c0", +9748 => x"0508558c", +9749 => x"08ff9805", +9750 => x"088c08ff", +9751 => x"9c050855", +9752 => x"53728c16", +9753 => x"0c739016", +9754 => x"0c8c08c0", +9755 => x"05088c08", +9756 => x"ffb8050c", +9757 => x"8c08ffb8", +9758 => x"0508708c", +9759 => x"08d4050c", +9760 => x"8c08d405", +9761 => x"08538c08", +9762 => x"88050852", +9763 => x"530b0b0b", +9764 => x"9c863f8c", +9765 => x"08880508", +9766 => x"800c80c6", +9767 => x"3d0d8c0c", +9768 => x"048c0802", +9769 => x"8c0c700b", +9770 => x"0b82f4b8", +9771 => x"70800c51", +9772 => x"508c0c04", +9773 => x"8c08028c", +9774 => x"0c707080", +9775 => x"0b8c08fc", +9776 => x"050c8c08", +9777 => x"88050851", +9778 => x"7008822e", +9779 => x"0981060b", +9780 => x"0b0b0b88", +9781 => x"38810b8c", +9782 => x"08fc050c", +9783 => x"8c08fc05", +9784 => x"0870800c", +9785 => x"5150508c", +9786 => x"0c048c08", +9787 => x"028c0c70", +9788 => x"70800b8c", +9789 => x"08fc050c", +9790 => x"8c088805", +9791 => x"08517008", +9792 => x"842e0981", +9793 => x"060b0b0b", +9794 => x"0b883881", +9795 => x"0b8c08fc", +9796 => x"050c8c08", +9797 => x"fc050870", +9798 => x"800c5150", +9799 => x"508c0c04", +9800 => x"8c08028c", +9801 => x"0c707080", +9802 => x"0b8c08fc", +9803 => x"050c8c08", +9804 => x"88050851", +9805 => x"7008802e", +9806 => x"0b0b0b0b", +9807 => x"97388c08", +9808 => x"88050851", +9809 => x"7008812e", +9810 => x"0b0b0b0b", +9811 => x"87380b0b", +9812 => x"0b0b8839", +9813 => x"810b8c08", +9814 => x"fc050c8c", +9815 => x"08fc0508", +9816 => x"70800c51", +9817 => x"50508c0c", +9818 => x"048c0802", +9819 => x"8c0cee3d", +9820 => x"0d8c0888", +9821 => x"05088c08", +9822 => x"8c050855", +9823 => x"53728c08", +9824 => x"d0050c73", +9825 => x"8c08d405", +9826 => x"0c8c0890", +9827 => x"05088c08", +9828 => x"94050855", +9829 => x"53728c08", +9830 => x"c8050c73", +9831 => x"8c08cc05", +9832 => x"0c8c08ec", +9833 => x"0570538c", +9834 => x"08d00570", +9835 => x"5351530b", +9836 => x"0b0baba6", +9837 => x"3f8c08d8", +9838 => x"0570538c", +9839 => x"08c80570", +9840 => x"5351530b", +9841 => x"0b0bab92", +9842 => x"3f8c08ec", +9843 => x"05705253", +9844 => x"0b0b0b80", +9845 => x"df3f8008", +9846 => x"53720b0b", +9847 => x"0b0b9e38", +9848 => x"8c08d805", +9849 => x"7052530b", +9850 => x"0b0b80c8", +9851 => x"3f800853", +9852 => x"720b0b0b", +9853 => x"0b87380b", +9854 => x"0b0b0b8e", +9855 => x"39810b8c", +9856 => x"08c4050c", +9857 => x"0b0b0b0b", +9858 => x"9e398c08", +9859 => x"d8057053", +9860 => x"8c08ec05", +9861 => x"70535153", +9862 => x"0b0b0bae", +9863 => x"c53f8008", +9864 => x"708c08c4", +9865 => x"050c538c", +9866 => x"08c40508", +9867 => x"800c943d", +9868 => x"0d8c0c04", +9869 => x"8c08028c", +9870 => x"0c707080", +9871 => x"0b8c08fc", +9872 => x"050c8c08", +9873 => x"88050851", +9874 => x"7008802e", +9875 => x"0b0b0b0b", +9876 => x"97388c08", +9877 => x"88050851", +9878 => x"7008812e", +9879 => x"0b0b0b0b", +9880 => x"87380b0b", +9881 => x"0b0b8839", +9882 => x"810b8c08", +9883 => x"fc050c8c", +9884 => x"08fc0508", +9885 => x"70800c51", +9886 => x"50508c0c", +9887 => x"048c0802", +9888 => x"8c0cee3d", +9889 => x"0d8c0888", +9890 => x"05088c08", +9891 => x"8c050855", +9892 => x"53728c08", +9893 => x"d0050c73", +9894 => x"8c08d405", +9895 => x"0c8c0890", +9896 => x"05088c08", +9897 => x"94050855", +9898 => x"53728c08", +9899 => x"c8050c73", +9900 => x"8c08cc05", +9901 => x"0c8c08ec", +9902 => x"0570538c", +9903 => x"08d00570", +9904 => x"5351530b", +9905 => x"0b0ba992", +9906 => x"3f8c08d8", +9907 => x"0570538c", +9908 => x"08c80570", +9909 => x"5351530b", +9910 => x"0b0ba8fe", +9911 => x"3f8c08ec", +9912 => x"05705253", +9913 => x"0b0b0b80", +9914 => x"df3f8008", +9915 => x"53720b0b", +9916 => x"0b0b9e38", +9917 => x"8c08d805", +9918 => x"7052530b", +9919 => x"0b0b80c8", +9920 => x"3f800853", +9921 => x"720b0b0b", +9922 => x"0b87380b", +9923 => x"0b0b0b8e", +9924 => x"39810b8c", +9925 => x"08c4050c", +9926 => x"0b0b0b0b", +9927 => x"9e398c08", +9928 => x"d8057053", +9929 => x"8c08ec05", +9930 => x"70535153", +9931 => x"0b0b0bac", +9932 => x"b13f8008", +9933 => x"708c08c4", +9934 => x"050c538c", +9935 => x"08c40508", +9936 => x"800c943d", +9937 => x"0d8c0c04", +9938 => x"8c08028c", +9939 => x"0c707080", +9940 => x"0b8c08fc", +9941 => x"050c8c08", +9942 => x"88050851", +9943 => x"7008802e", +9944 => x"0b0b0b0b", +9945 => x"97388c08", +9946 => x"88050851", +9947 => x"7008812e", +9948 => x"0b0b0b0b", +9949 => x"87380b0b", +9950 => x"0b0b8839", +9951 => x"810b8c08", +9952 => x"fc050c8c", +9953 => x"08fc0508", +9954 => x"70800c51", +9955 => x"50508c0c", +9956 => x"048c0802", +9957 => x"8c0cee3d", +9958 => x"0d8c0888", +9959 => x"05088c08", +9960 => x"8c050855", +9961 => x"53728c08", +9962 => x"d0050c73", +9963 => x"8c08d405", +9964 => x"0c8c0890", +9965 => x"05088c08", +9966 => x"94050855", +9967 => x"53728c08", +9968 => x"c8050c73", +9969 => x"8c08cc05", +9970 => x"0c8c08ec", +9971 => x"0570538c", +9972 => x"08d00570", +9973 => x"5351530b", +9974 => x"0b0ba6fe", +9975 => x"3f8c08d8", +9976 => x"0570538c", +9977 => x"08c80570", +9978 => x"5351530b", +9979 => x"0b0ba6ea", +9980 => x"3f8c08ec", +9981 => x"05705253", +9982 => x"0b0b0b80", +9983 => x"df3f8008", +9984 => x"53720b0b", +9985 => x"0b0b9e38", +9986 => x"8c08d805", +9987 => x"7052530b", +9988 => x"0b0b80c8", +9989 => x"3f800853", +9990 => x"720b0b0b", +9991 => x"0b87380b", +9992 => x"0b0b0b8e", +9993 => x"39ff0b8c", +9994 => x"08c4050c", +9995 => x"0b0b0b0b", +9996 => x"9e398c08", +9997 => x"d8057053", +9998 => x"8c08ec05", +9999 => x"70535153", +10000 => x"0b0b0baa", +10001 => x"9d3f8008", +10002 => x"708c08c4", +10003 => x"050c538c", +10004 => x"08c40508", +10005 => x"800c943d", +10006 => x"0d8c0c04", +10007 => x"8c08028c", +10008 => x"0c707080", +10009 => x"0b8c08fc", +10010 => x"050c8c08", +10011 => x"88050851", +10012 => x"7008802e", +10013 => x"0b0b0b0b", +10014 => x"97388c08", +10015 => x"88050851", +10016 => x"7008812e", +10017 => x"0b0b0b0b", +10018 => x"87380b0b", +10019 => x"0b0b8839", +10020 => x"810b8c08", +10021 => x"fc050c8c", +10022 => x"08fc0508", +10023 => x"70800c51", +10024 => x"50508c0c", +10025 => x"048c0802", +10026 => x"8c0cee3d", +10027 => x"0d8c0888", +10028 => x"05088c08", +10029 => x"8c050855", +10030 => x"53728c08", +10031 => x"d0050c73", +10032 => x"8c08d405", +10033 => x"0c8c0890", +10034 => x"05088c08", +10035 => x"94050855", +10036 => x"53728c08", +10037 => x"c8050c73", +10038 => x"8c08cc05", +10039 => x"0c8c08ec", +10040 => x"0570538c", +10041 => x"08d00570", +10042 => x"5351530b", +10043 => x"0b0ba4ea", +10044 => x"3f8c08d8", +10045 => x"0570538c", +10046 => x"08c80570", +10047 => x"5351530b", +10048 => x"0b0ba4d6", +10049 => x"3f8c08ec", +10050 => x"05705253", +10051 => x"0b0b0b80", +10052 => x"df3f8008", +10053 => x"53720b0b", +10054 => x"0b0b9e38", +10055 => x"8c08d805", +10056 => x"7052530b", +10057 => x"0b0b80c8", +10058 => x"3f800853", +10059 => x"720b0b0b", +10060 => x"0b87380b", +10061 => x"0b0b0b8e", +10062 => x"39810b8c", +10063 => x"08c4050c", +10064 => x"0b0b0b0b", +10065 => x"9e398c08", +10066 => x"d8057053", +10067 => x"8c08ec05", +10068 => x"70535153", +10069 => x"0b0b0ba8", +10070 => x"893f8008", +10071 => x"708c08c4", +10072 => x"050c538c", +10073 => x"08c40508", +10074 => x"800c943d", +10075 => x"0d8c0c04", +10076 => x"8c08028c", +10077 => x"0c707080", +10078 => x"0b8c08fc", +10079 => x"050c8c08", +10080 => x"88050851", +10081 => x"7008802e", +10082 => x"0b0b0b0b", +10083 => x"97388c08", +10084 => x"88050851", +10085 => x"7008812e", +10086 => x"0b0b0b0b", +10087 => x"87380b0b", +10088 => x"0b0b8839", +10089 => x"810b8c08", +10090 => x"fc050c8c", +10091 => x"08fc0508", +10092 => x"70800c51", +10093 => x"50508c0c", +10094 => x"048c0802", +10095 => x"8c0cee3d", +10096 => x"0d8c0888", +10097 => x"05088c08", +10098 => x"8c050855", +10099 => x"53728c08", +10100 => x"d0050c73", +10101 => x"8c08d405", +10102 => x"0c8c0890", +10103 => x"05088c08", +10104 => x"94050855", +10105 => x"53728c08", +10106 => x"c8050c73", +10107 => x"8c08cc05", +10108 => x"0c8c08ec", +10109 => x"0570538c", +10110 => x"08d00570", +10111 => x"5351530b", +10112 => x"0b0ba2d6", +10113 => x"3f8c08d8", +10114 => x"0570538c", +10115 => x"08c80570", +10116 => x"5351530b", +10117 => x"0b0ba2c2", +10118 => x"3f8c08ec", +10119 => x"05705253", +10120 => x"0b0b0b80", +10121 => x"df3f8008", +10122 => x"53720b0b", +10123 => x"0b0b9e38", +10124 => x"8c08d805", +10125 => x"7052530b", +10126 => x"0b0b80c8", +10127 => x"3f800853", +10128 => x"720b0b0b", +10129 => x"0b87380b", +10130 => x"0b0b0b8e", +10131 => x"39810b8c", +10132 => x"08c4050c", +10133 => x"0b0b0b0b", +10134 => x"9e398c08", +10135 => x"d8057053", +10136 => x"8c08ec05", +10137 => x"70535153", +10138 => x"0b0b0ba5", +10139 => x"f53f8008", +10140 => x"708c08c4", +10141 => x"050c538c", +10142 => x"08c40508", +10143 => x"800c943d", +10144 => x"0d8c0c04", +10145 => x"8c08028c", +10146 => x"0c707080", +10147 => x"0b8c08fc", +10148 => x"050c8c08", +10149 => x"88050851", +10150 => x"7008802e", +10151 => x"0b0b0b0b", +10152 => x"97388c08", +10153 => x"88050851", +10154 => x"7008812e", +10155 => x"0b0b0b0b", +10156 => x"87380b0b", +10157 => x"0b0b8839", +10158 => x"810b8c08", +10159 => x"fc050c8c", +10160 => x"08fc0508", +10161 => x"70800c51", +10162 => x"50508c0c", +10163 => x"048c0802", +10164 => x"8c0cf63d", +10165 => x"0d830b8c", +10166 => x"08ec050c", +10167 => x"800b8c08", +10168 => x"e8050c8c", +10169 => x"088c0508", +10170 => x"80250b0b", +10171 => x"0b0b8838", +10172 => x"810b8c08", +10173 => x"e8050c8c", +10174 => x"08e80508", +10175 => x"8c08f005", +10176 => x"0c8c088c", +10177 => x"05080b0b", +10178 => x"0b0b8e38", +10179 => x"820b8c08", +10180 => x"ec050c0b", +10181 => x"0b0b81b5", +10182 => x"39bc0b8c", +10183 => x"08f4050c", +10184 => x"8c08f005", +10185 => x"08802e0b", +10186 => x"0b0b80c9", +10187 => x"388c088c", +10188 => x"0508810a", +10189 => x"2e098106", +10190 => x"0b0b0b0b", +10191 => x"9b388f83", +10192 => x"0a53800b", +10193 => x"8c088805", +10194 => x"08565472", +10195 => x"750c7384", +10196 => x"160c0b0b", +10197 => x"0b818939", +10198 => x"8c088c05", +10199 => x"0830708c", +10200 => x"08fc050c", +10201 => x"709f2c70", +10202 => x"8c08f805", +10203 => x"0c51530b", +10204 => x"0b0b0b97", +10205 => x"398c088c", +10206 => x"0508708c", +10207 => x"08fc050c", +10208 => x"709f2c70", +10209 => x"8c08f805", +10210 => x"0c51538c", +10211 => x"08f80508", +10212 => x"f00a260b", +10213 => x"0b0b0bb5", +10214 => x"388c08fc", +10215 => x"05089f2a", +10216 => x"8c08f805", +10217 => x"08107072", +10218 => x"078c08f8", +10219 => x"050c8c08", +10220 => x"fc050810", +10221 => x"8c08fc05", +10222 => x"0c8c08f4", +10223 => x"0508ff05", +10224 => x"8c08f405", +10225 => x"0c54540b", +10226 => x"0b0bffbf", +10227 => x"398c08ec", +10228 => x"0570538c", +10229 => x"08880508", +10230 => x"52530b0b", +10231 => x"0b8db93f", +10232 => x"8c088805", +10233 => x"08800c8c", +10234 => x"3d0d8c0c", +10235 => x"048c0802", +10236 => x"8c0cec3d", +10237 => x"0d8c0888", +10238 => x"05088c08", +10239 => x"8c050857", +10240 => x"55748c08", +10241 => x"e0050c75", +10242 => x"8c08e405", +10243 => x"0c8c08ec", +10244 => x"0570538c", +10245 => x"08e00570", +10246 => x"5351550b", +10247 => x"0b0b9eba", +10248 => x"3f8c08ec", +10249 => x"05705255", +10250 => x"0b0b0b83", +10251 => x"d93f8008", +10252 => x"5574802e", +10253 => x"0b0b0b0b", +10254 => x"8e38800b", +10255 => x"8c08d405", +10256 => x"0c0b0b0b", +10257 => x"82b4398c", +10258 => x"08ec0570", +10259 => x"52550b0b", +10260 => x"0b82ea3f", +10261 => x"80085574", +10262 => x"802e0b0b", +10263 => x"0b0b8e38", +10264 => x"800b8c08", +10265 => x"d4050c0b", +10266 => x"0b0b828e", +10267 => x"398c08ec", +10268 => x"05705255", +10269 => x"0b0b0b82", +10270 => x"8e3f8008", +10271 => x"5574802e", +10272 => x"0b0b0b0b", +10273 => x"b4388c08", +10274 => x"f0050880", +10275 => x"2e0b0b0b", +10276 => x"0b8f3881", +10277 => x"0a0b8c08", +10278 => x"d0050c0b", +10279 => x"0b0b0b89", +10280 => x"39fe0a0b", +10281 => x"8c08d005", +10282 => x"0c8c08d0", +10283 => x"05088c08", +10284 => x"d4050c0b", +10285 => x"0b0b81c2", +10286 => x"398c08f4", +10287 => x"05088025", +10288 => x"0b0b0b0b", +10289 => x"8e38800b", +10290 => x"8c08d405", +10291 => x"0c0b0b0b", +10292 => x"81a8399e", +10293 => x"0b8c08f4", +10294 => x"0508250b", +10295 => x"0b0b0bb4", +10296 => x"388c08f0", +10297 => x"0508802e", +10298 => x"0b0b0b0b", +10299 => x"8f38810a", +10300 => x"0b8c08cc", +10301 => x"050c0b0b", +10302 => x"0b0b8939", +10303 => x"fe0a0b8c", +10304 => x"08cc050c", +10305 => x"8c08cc05", +10306 => x"088c08d4", +10307 => x"050c0b0b", +10308 => x"0b80e739", +10309 => x"bc0b8c08", +10310 => x"f4050831", +10311 => x"8c08d805", +10312 => x"71565855", +10313 => x"8c08f805", +10314 => x"088c08fc", +10315 => x"05085755", +10316 => x"74527553", +10317 => x"76510b0b", +10318 => x"0b88d53f", +10319 => x"8c08d805", +10320 => x"088c08dc", +10321 => x"0508708c", +10322 => x"08e8050c", +10323 => x"8c08e805", +10324 => x"088c08c8", +10325 => x"050c5755", +10326 => x"8c08f005", +10327 => x"08802e0b", +10328 => x"0b0b0b8c", +10329 => x"388c08c8", +10330 => x"0508308c", +10331 => x"08c8050c", +10332 => x"8c08c805", +10333 => x"088c08d4", +10334 => x"050c8c08", +10335 => x"d4050880", +10336 => x"0c963d0d", +10337 => x"8c0c048c", +10338 => x"08028c0c", +10339 => x"7070800b", +10340 => x"8c08fc05", +10341 => x"0c8c0888", +10342 => x"05085170", +10343 => x"08842e09", +10344 => x"81060b0b", +10345 => x"0b0b8838", +10346 => x"810b8c08", +10347 => x"fc050c8c", +10348 => x"08fc0508", +10349 => x"70800c51", +10350 => x"50508c0c", +10351 => x"048c0802", +10352 => x"8c0c7070", +10353 => x"800b8c08", +10354 => x"fc050c8c", +10355 => x"08880508", +10356 => x"51700880", +10357 => x"2e0b0b0b", +10358 => x"0b97388c", +10359 => x"08880508", +10360 => x"51700881", +10361 => x"2e0b0b0b", +10362 => x"0b87380b", +10363 => x"0b0b0b88", +10364 => x"39810b8c", +10365 => x"08fc050c", +10366 => x"8c08fc05", +10367 => x"0870800c", +10368 => x"5150508c", +10369 => x"0c048c08", +10370 => x"028c0c70", +10371 => x"70800b8c", +10372 => x"08fc050c", +10373 => x"8c088805", +10374 => x"08517008", +10375 => x"822e0981", +10376 => x"060b0b0b", +10377 => x"0b883881", +10378 => x"0b8c08fc", +10379 => x"050c8c08", +10380 => x"fc050870", +10381 => x"800c5150", +10382 => x"508c0c04", +10383 => x"8c08028c", +10384 => x"0c707070", +10385 => x"7080538c", +10386 => x"088c0508", +10387 => x"528c0888", +10388 => x"0508510b", +10389 => x"0bfdccbf", +10390 => x"3f800870", +10391 => x"800c5450", +10392 => x"5050508c", +10393 => x"0c048c08", +10394 => x"028c0c70", +10395 => x"70707081", +10396 => x"538c088c", +10397 => x"0508528c", +10398 => x"08880508", +10399 => x"510b0bfd", +10400 => x"cc953f80", +10401 => x"0870800c", +10402 => x"54505050", +10403 => x"508c0c04", +10404 => x"8c08028c", +10405 => x"0c707080", +10406 => x"0b8c08fc", +10407 => x"050c8c08", +10408 => x"88050881", +10409 => x"06ff1170", +10410 => x"09708c08", +10411 => x"8c050806", +10412 => x"8c08fc05", +10413 => x"08118c08", +10414 => x"fc050c8c", +10415 => x"08880508", +10416 => x"812a8c08", +10417 => x"88050c8c", +10418 => x"088c0508", +10419 => x"108c088c", +10420 => x"050c5151", +10421 => x"51518c08", +10422 => x"88050880", +10423 => x"2e0b0b0b", +10424 => x"0b87380b", +10425 => x"0b0bffb6", +10426 => x"398c08fc", +10427 => x"05087080", +10428 => x"0c515050", +10429 => x"8c0c048c", +10430 => x"08028c0c", +10431 => x"eb3d0d80", +10432 => x"0b8c08f0", +10433 => x"050c800b", +10434 => x"8c08f405", +10435 => x"0c8c088c", +10436 => x"05088c08", +10437 => x"90050856", +10438 => x"54738c08", +10439 => x"f0050c74", +10440 => x"8c08f405", +10441 => x"0c8c08f8", +10442 => x"058c08f0", +10443 => x"05565688", +10444 => x"70547553", +10445 => x"7652540b", +10446 => x"0bfdcccf", +10447 => x"3f800b8c", +10448 => x"08e8050c", +10449 => x"800b8c08", +10450 => x"ec050c8c", +10451 => x"08940508", +10452 => x"8c089805", +10453 => x"08565473", +10454 => x"8c08e805", +10455 => x"0c748c08", +10456 => x"ec050c8c", +10457 => x"08f0058c", +10458 => x"08e80556", +10459 => x"56887054", +10460 => x"75537652", +10461 => x"540b0bfd", +10462 => x"cc913f80", +10463 => x"0b8c08e8", +10464 => x"050c800b", +10465 => x"8c08ec05", +10466 => x"0c8c08fc", +10467 => x"050883ff", +10468 => x"ff068c08", +10469 => x"cc050c8c", +10470 => x"08fc0508", +10471 => x"902a8c08", +10472 => x"c4050c8c", +10473 => x"08f40508", +10474 => x"83ffff06", +10475 => x"8c08c805", +10476 => x"0c8c08f4", +10477 => x"0508902a", +10478 => x"8c08c005", +10479 => x"0c8c08cc", +10480 => x"05088c08", +10481 => x"c8050829", +10482 => x"708c08dc", +10483 => x"050c8c08", +10484 => x"cc05088c", +10485 => x"08c00508", +10486 => x"29708c08", +10487 => x"d8050c8c", +10488 => x"08c40508", +10489 => x"8c08c805", +10490 => x"0829708c", +10491 => x"08d4050c", +10492 => x"8c08c405", +10493 => x"088c08c0", +10494 => x"05082970", +10495 => x"8c08d005", +10496 => x"0c8c08dc", +10497 => x"0508902a", +10498 => x"8c08d805", +10499 => x"08118c08", +10500 => x"d8050c8c", +10501 => x"08d80508", +10502 => x"8c08d405", +10503 => x"08058c08", +10504 => x"d8050c51", +10505 => x"51515154", +10506 => x"8c08d805", +10507 => x"088c08d4", +10508 => x"0508270b", +10509 => x"0b0b0b8f", +10510 => x"388c08d0", +10511 => x"05088480", +10512 => x"80058c08", +10513 => x"d0050c8c", +10514 => x"08d80508", +10515 => x"902a8c08", +10516 => x"d0050811", +10517 => x"8c08e005", +10518 => x"0c8c08d8", +10519 => x"050883ff", +10520 => x"ff067090", +10521 => x"2b8c08dc", +10522 => x"050883ff", +10523 => x"ff067012", +10524 => x"8c08e405", +10525 => x"0c525751", +10526 => x"548c08e0", +10527 => x"05088c08", +10528 => x"e4050856", +10529 => x"54738c08", +10530 => x"e8050c74", +10531 => x"8c08ec05", +10532 => x"0c8c08fc", +10533 => x"05088c08", +10534 => x"f0050829", +10535 => x"8c08f805", +10536 => x"088c08f4", +10537 => x"05082970", +10538 => x"128c08e8", +10539 => x"0508118c", +10540 => x"08e8050c", +10541 => x"5155558c", +10542 => x"08e80508", +10543 => x"8c08ec05", +10544 => x"088c0888", +10545 => x"05085856", +10546 => x"5473760c", +10547 => x"7484170c", +10548 => x"8c088805", +10549 => x"08800c97", +10550 => x"3d0d8c0c", +10551 => x"048c0802", +10552 => x"8c0cf63d", +10553 => x"0d800b8c", +10554 => x"08f0050c", +10555 => x"800b8c08", +10556 => x"f4050c8c", +10557 => x"088c0508", +10558 => x"8c089005", +10559 => x"08565473", +10560 => x"8c08f005", +10561 => x"0c748c08", +10562 => x"f4050c8c", +10563 => x"08f8058c", +10564 => x"08f00556", +10565 => x"56887054", +10566 => x"75537652", +10567 => x"540b0bfd", +10568 => x"c8e93f80", +10569 => x"0b8c08f0", +10570 => x"050c800b", +10571 => x"8c08f405", +10572 => x"0c8c08f8", +10573 => x"0508308c", +10574 => x"08ec050c", +10575 => x"8c08fc05", +10576 => x"08802e0b", +10577 => x"0b0b0b8d", +10578 => x"388c08ec", +10579 => x"0508ff05", +10580 => x"8c08ec05", +10581 => x"0c8c08ec", +10582 => x"05088c08", +10583 => x"f0050c8c", +10584 => x"08fc0508", +10585 => x"308c08f4", +10586 => x"050c8c08", +10587 => x"f005088c", +10588 => x"08f40508", +10589 => x"8c088805", +10590 => x"08585654", +10591 => x"73760c74", +10592 => x"84170c8c", +10593 => x"08880508", +10594 => x"800c8c3d", +10595 => x"0d8c0c04", +10596 => x"8c08028c", +10597 => x"0cf53d0d", +10598 => x"8c089405", +10599 => x"080b0b0b", +10600 => x"0ba0388c", +10601 => x"088c0508", +10602 => x"8c089005", +10603 => x"088c0888", +10604 => x"05085856", +10605 => x"5473760c", +10606 => x"7484170c", +10607 => x"0b0b0b81", +10608 => x"ca39800b", +10609 => x"8c08f005", +10610 => x"0c800b8c", +10611 => x"08f4050c", +10612 => x"8c088c05", +10613 => x"088c0890", +10614 => x"05085654", +10615 => x"738c08f0", +10616 => x"050c748c", +10617 => x"08f4050c", +10618 => x"8c08f805", +10619 => x"8c08f005", +10620 => x"56568870", +10621 => x"54755376", +10622 => x"52540b0b", +10623 => x"fdc78c3f", +10624 => x"a00b8c08", +10625 => x"94050831", +10626 => x"8c08ec05", +10627 => x"0c8c08ec", +10628 => x"05088024", +10629 => x"0b0b0b0b", +10630 => x"a138800b", +10631 => x"8c08f005", +10632 => x"0c8c08ec", +10633 => x"0508308c", +10634 => x"08f80508", +10635 => x"712a8c08", +10636 => x"f4050c54", +10637 => x"0b0b0b0b", +10638 => x"b9398c08", +10639 => x"f805088c", +10640 => x"08ec0508", +10641 => x"2b8c08e8", +10642 => x"050c8c08", +10643 => x"f805088c", +10644 => x"08940508", +10645 => x"2a8c08f0", +10646 => x"050c8c08", +10647 => x"fc05088c", +10648 => x"08940508", +10649 => x"2a708c08", +10650 => x"e8050807", +10651 => x"8c08f405", +10652 => x"0c548c08", +10653 => x"f005088c", +10654 => x"08f40508", +10655 => x"8c088805", +10656 => x"08585654", +10657 => x"73760c74", +10658 => x"84170c8c", +10659 => x"08880508", +10660 => x"800c8d3d", +10661 => x"0d8c0c04", +10662 => x"8c08028c", +10663 => x"0cc73d0d", +10664 => x"8c088c05", +10665 => x"08559015", +10666 => x"088c1608", +10667 => x"5656748c", +10668 => x"08f0050c", +10669 => x"758c08f4", +10670 => x"050c8c08", +10671 => x"8c050884", +10672 => x"11088c08", +10673 => x"ec050c55", +10674 => x"800b8c08", +10675 => x"e8050c8c", +10676 => x"088c0508", +10677 => x"510b0b0b", +10678 => x"90b73f80", +10679 => x"08557480", +10680 => x"2e0b0b0b", +10681 => x"0bad388f", +10682 => x"ff0b8c08", +10683 => x"e8050c8c", +10684 => x"08f00508", +10685 => x"a0808007", +10686 => x"8c08f405", +10687 => x"08800757", +10688 => x"55748c08", +10689 => x"f0050c75", +10690 => x"8c08f405", +10691 => x"0c0b0b0b", +10692 => x"8df4398c", +10693 => x"088c0508", +10694 => x"510b0b0b", +10695 => x"8fbd3f80", +10696 => x"08557480", +10697 => x"2e0b0b0b", +10698 => x"0b9f388f", +10699 => x"ff0b8c08", +10700 => x"e8050c80", +10701 => x"55805674", +10702 => x"8c08f005", +10703 => x"0c758c08", +10704 => x"f4050c0b", +10705 => x"0b0b8dbe", +10706 => x"398c088c", +10707 => x"0508510b", +10708 => x"0b0b8ed1", +10709 => x"3f800855", +10710 => x"74802e0b", +10711 => x"0b0b0b9e", +10712 => x"38800b8c", +10713 => x"08e8050c", +10714 => x"80558056", +10715 => x"748c08f0", +10716 => x"050c758c", +10717 => x"08f4050c", +10718 => x"0b0b0b8d", +10719 => x"89398c08", +10720 => x"f0050870", +10721 => x"8c08f405", +10722 => x"08075155", +10723 => x"740b0b0b", +10724 => x"0b8e3880", +10725 => x"0b8c08e8", +10726 => x"050c0b0b", +10727 => x"0b8ce739", +10728 => x"8c088c05", +10729 => x"08558815", +10730 => x"08f88225", +10731 => x"0b0b0b87", +10732 => x"af388c08", +10733 => x"8c0508f8", +10734 => x"820b8812", +10735 => x"08318c08", +10736 => x"e4050c55", +10737 => x"800b8c08", +10738 => x"e8050cb8", +10739 => x"0b8c08e4", +10740 => x"0508250b", +10741 => x"0b0b0b97", +10742 => x"38805580", +10743 => x"56748c08", +10744 => x"f0050c75", +10745 => x"8c08f405", +10746 => x"0c0b0b0b", +10747 => x"82b03980", +10748 => x"0b8c08e0", +10749 => x"050c8c08", +10750 => x"d8055780", +10751 => x"55810b8c", +10752 => x"08e40508", +10753 => x"55567452", +10754 => x"75537651", +10755 => x"0b0bfdbc", +10756 => x"ab3f8c08", +10757 => x"d805088c", +10758 => x"08dc0508", +10759 => x"5755748c", +10760 => x"08d0050c", +10761 => x"758c08d4", +10762 => x"050cff56", +10763 => x"ff57758c", +10764 => x"08c8050c", +10765 => x"768c08cc", +10766 => x"050c8c08", +10767 => x"d405088c", +10768 => x"08cc0508", +10769 => x"7012708c", +10770 => x"08c4050c", +10771 => x"52565781", +10772 => x"0b8c08ff", +10773 => x"bc050c8c", +10774 => x"08c40508", +10775 => x"8c08d405", +10776 => x"08585676", +10777 => x"76260b0b", +10778 => x"0b0b8938", +10779 => x"800b8c08", +10780 => x"ffbc050c", +10781 => x"8c08d005", +10782 => x"088c08c8", +10783 => x"05087012", +10784 => x"708c08c0", +10785 => x"050c8c08", +10786 => x"c005088c", +10787 => x"08ffbc05", +10788 => x"0811708c", +10789 => x"08c0050c", +10790 => x"8c08c005", +10791 => x"08708c08", +10792 => x"f0050806", +10793 => x"8c08c405", +10794 => x"08708c08", +10795 => x"f4050806", +10796 => x"72707207", +10797 => x"51525752", +10798 => x"5252525a", +10799 => x"52575576", +10800 => x"802e0b0b", +10801 => x"0b0b8838", +10802 => x"810b8c08", +10803 => x"e0050c8c", +10804 => x"08d8058c", +10805 => x"08e40508", +10806 => x"55578c08", +10807 => x"f005088c", +10808 => x"08f40508", +10809 => x"57557452", +10810 => x"75537651", +10811 => x"0b0b0bf9", +10812 => x"9f3f8c08", +10813 => x"d805088c", +10814 => x"08dc0508", +10815 => x"8c08e005", +10816 => x"089f2c8c", +10817 => x"08e00508", +10818 => x"71707507", +10819 => x"8c08f005", +10820 => x"0c737207", +10821 => x"8c08f405", +10822 => x"0c59595b", +10823 => x"59578c08", +10824 => x"f0050880", +10825 => x"06708c08", +10826 => x"ffb4050c", +10827 => x"8c08f405", +10828 => x"0881ff06", +10829 => x"708c08ff", +10830 => x"b8050c57", +10831 => x"558c08ff", +10832 => x"b405088c", +10833 => x"08ffb805", +10834 => x"08575574", +10835 => x"8c08ffb4", +10836 => x"050c758c", +10837 => x"08ffb805", +10838 => x"0c8c08ff", +10839 => x"b4050856", +10840 => x"750b0b0b", +10841 => x"81f8388c", +10842 => x"08ffb805", +10843 => x"08577681", +10844 => x"802e0981", +10845 => x"060b0b0b", +10846 => x"81e4388c", +10847 => x"08f00508", +10848 => x"982b8c08", +10849 => x"f4050888", +10850 => x"2a707207", +10851 => x"8c08f005", +10852 => x"08882a71", +10853 => x"81065158", +10854 => x"58585874", +10855 => x"802e0b0b", +10856 => x"0b82ef38", +10857 => x"8c08f005", +10858 => x"088c08f4", +10859 => x"05085755", +10860 => x"748c08ff", +10861 => x"ac050c75", +10862 => x"8c08ffb0", +10863 => x"050c8056", +10864 => x"81805775", +10865 => x"8c08ffa4", +10866 => x"050c768c", +10867 => x"08ffa805", +10868 => x"0c8c08ff", +10869 => x"b005088c", +10870 => x"08ffa805", +10871 => x"08701270", +10872 => x"8c08ffa0", +10873 => x"050c5256", +10874 => x"57810b8c", +10875 => x"08ff9805", +10876 => x"0c8c08ff", +10877 => x"a005088c", +10878 => x"08ffb005", +10879 => x"08585676", +10880 => x"76260b0b", +10881 => x"0b0b8938", +10882 => x"800b8c08", +10883 => x"ff98050c", +10884 => x"8c08ffac", +10885 => x"05088c08", +10886 => x"ffa40508", +10887 => x"7012708c", +10888 => x"08ff9c05", +10889 => x"0c8c08ff", +10890 => x"9c05088c", +10891 => x"08ff9805", +10892 => x"0811708c", +10893 => x"08ff9c05", +10894 => x"0c525a52", +10895 => x"57558c08", +10896 => x"ff9c0508", +10897 => x"8c08ffa0", +10898 => x"05085755", +10899 => x"748c08f0", +10900 => x"050c758c", +10901 => x"08f4050c", +10902 => x"0b0b0b81", +10903 => x"b5398c08", +10904 => x"f005088c", +10905 => x"08f40508", +10906 => x"5856758c", +10907 => x"08ff9005", +10908 => x"0c768c08", +10909 => x"ff94050c", +10910 => x"805580ff", +10911 => x"56748c08", +10912 => x"ff88050c", +10913 => x"758c08ff", +10914 => x"8c050c8c", +10915 => x"08ff9405", +10916 => x"088c08ff", +10917 => x"8c050870", +10918 => x"12708c08", +10919 => x"ff84050c", +10920 => x"52585681", +10921 => x"0b8c08fe", +10922 => x"fc050c8c", +10923 => x"08ff8405", +10924 => x"088c08ff", +10925 => x"94050857", +10926 => x"55757526", +10927 => x"0b0b0b0b", +10928 => x"8938800b", +10929 => x"8c08fefc", +10930 => x"050c8c08", +10931 => x"ff900508", +10932 => x"8c08ff88", +10933 => x"05087012", +10934 => x"708c08ff", +10935 => x"80050c8c", +10936 => x"08ff8005", +10937 => x"088c08fe", +10938 => x"fc050811", +10939 => x"708c08ff", +10940 => x"80050c53", +10941 => x"59525657", +10942 => x"8c08ff80", +10943 => x"05088c08", +10944 => x"ff840508", +10945 => x"5755748c", +10946 => x"08f0050c", +10947 => x"758c08f4", +10948 => x"050c8c08", +10949 => x"f00508f0", +10950 => x"0a260b0b", +10951 => x"0b0b8738", +10952 => x"0b0b0b0b", +10953 => x"8d398c08", +10954 => x"e8050881", +10955 => x"058c08e8", +10956 => x"050c8c08", +10957 => x"f0050898", +10958 => x"2b8c08f4", +10959 => x"0508882a", +10960 => x"7072078c", +10961 => x"08f00508", +10962 => x"882a5858", +10963 => x"5858748c", +10964 => x"08f0050c", +10965 => x"758c08f4", +10966 => x"050c0b0b", +10967 => x"0b85a739", +10968 => x"8c088c05", +10969 => x"085587ff", +10970 => x"0b881608", +10971 => x"250b0b0b", +10972 => x"0b9f388f", +10973 => x"ff0b8c08", +10974 => x"e8050c80", +10975 => x"55805674", +10976 => x"8c08f005", +10977 => x"0c758c08", +10978 => x"f4050c0b", +10979 => x"0b0b84f6", +10980 => x"398c088c", +10981 => x"05088811", +10982 => x"0887ff05", +10983 => x"8c08e805", +10984 => x"0c8c08f0", +10985 => x"05088006", +10986 => x"708c08fe", +10987 => x"f4050c8c", +10988 => x"08f40508", +10989 => x"81ff0670", +10990 => x"8c08fef8", +10991 => x"050c5957", +10992 => x"558c08fe", +10993 => x"f405088c", +10994 => x"08fef805", +10995 => x"08575574", +10996 => x"8c08fef4", +10997 => x"050c758c", +10998 => x"08fef805", +10999 => x"0c8c08fe", +11000 => x"f4050856", +11001 => x"750b0b0b", +11002 => x"81f8388c", +11003 => x"08fef805", +11004 => x"08577681", +11005 => x"802e0981", +11006 => x"060b0b0b", +11007 => x"81e4388c", +11008 => x"08f00508", +11009 => x"982b8c08", +11010 => x"f4050888", +11011 => x"2a707207", +11012 => x"8c08f005", +11013 => x"08882a71", +11014 => x"81065158", +11015 => x"58585874", +11016 => x"802e0b0b", +11017 => x"0b82ef38", +11018 => x"8c08f005", +11019 => x"088c08f4", +11020 => x"05085755", +11021 => x"748c08fe", +11022 => x"ec050c75", +11023 => x"8c08fef0", +11024 => x"050c8056", +11025 => x"81805775", +11026 => x"8c08fee4", +11027 => x"050c768c", +11028 => x"08fee805", +11029 => x"0c8c08fe", +11030 => x"f005088c", +11031 => x"08fee805", +11032 => x"08701270", +11033 => x"8c08fee0", +11034 => x"050c5256", +11035 => x"57810b8c", +11036 => x"08fed805", +11037 => x"0c8c08fe", +11038 => x"e005088c", +11039 => x"08fef005", +11040 => x"08585676", +11041 => x"76260b0b", +11042 => x"0b0b8938", +11043 => x"800b8c08", +11044 => x"fed8050c", +11045 => x"8c08feec", +11046 => x"05088c08", +11047 => x"fee40508", +11048 => x"7012708c", +11049 => x"08fedc05", +11050 => x"0c8c08fe", +11051 => x"dc05088c", +11052 => x"08fed805", +11053 => x"0811708c", +11054 => x"08fedc05", +11055 => x"0c525a52", +11056 => x"57558c08", +11057 => x"fedc0508", +11058 => x"8c08fee0", +11059 => x"05085755", +11060 => x"748c08f0", +11061 => x"050c758c", +11062 => x"08f4050c", +11063 => x"0b0b0b81", +11064 => x"b5398c08", +11065 => x"f005088c", +11066 => x"08f40508", +11067 => x"5856758c", +11068 => x"08fed005", +11069 => x"0c768c08", +11070 => x"fed4050c", +11071 => x"805580ff", +11072 => x"56748c08", +11073 => x"fec8050c", +11074 => x"758c08fe", +11075 => x"cc050c8c", +11076 => x"08fed405", +11077 => x"088c08fe", +11078 => x"cc050870", +11079 => x"12708c08", +11080 => x"fec4050c", +11081 => x"52585681", +11082 => x"0b8c08fe", +11083 => x"bc050c8c", +11084 => x"08fec405", +11085 => x"088c08fe", +11086 => x"d4050857", +11087 => x"55757526", +11088 => x"0b0b0b0b", +11089 => x"8938800b", +11090 => x"8c08febc", +11091 => x"050c8c08", +11092 => x"fed00508", +11093 => x"8c08fec8", +11094 => x"05087012", +11095 => x"708c08fe", +11096 => x"c0050c8c", +11097 => x"08fec005", +11098 => x"088c08fe", +11099 => x"bc050811", +11100 => x"708c08fe", +11101 => x"c0050c53", +11102 => x"59525657", +11103 => x"8c08fec0", +11104 => x"05088c08", +11105 => x"fec40508", +11106 => x"5755748c", +11107 => x"08f0050c", +11108 => x"758c08f4", +11109 => x"050c8c08", +11110 => x"f00508f8", +11111 => x"0a260b0b", +11112 => x"0b0b8738", +11113 => x"0b0b0b0b", +11114 => x"b5398c08", +11115 => x"f005089f", +11116 => x"2b8c08f4", +11117 => x"0508812a", +11118 => x"7072078c", +11119 => x"08f00508", +11120 => x"812a5858", +11121 => x"5858748c", +11122 => x"08f0050c", +11123 => x"758c08f4", +11124 => x"050c8c08", +11125 => x"e8050881", +11126 => x"058c08e8", +11127 => x"050c8c08", +11128 => x"f0050898", +11129 => x"2b8c08f4", +11130 => x"0508882a", +11131 => x"7072078c", +11132 => x"08f00508", +11133 => x"882a5858", +11134 => x"5858748c", +11135 => x"08f0050c", +11136 => x"758c08f4", +11137 => x"050c8c08", +11138 => x"f00508bf", +11139 => x"ffff068c", +11140 => x"08f8050c", +11141 => x"8c08f405", +11142 => x"08ff068c", +11143 => x"08fc050c", +11144 => x"8c08e805", +11145 => x"08568070", +11146 => x"8006778f", +11147 => x"ff067094", +11148 => x"2b535a58", +11149 => x"55800b8c", +11150 => x"08f80508", +11151 => x"76078c08", +11152 => x"f8050c70", +11153 => x"8c08fc05", +11154 => x"08078c08", +11155 => x"fc050c8c", +11156 => x"08ec0508", +11157 => x"51568070", +11158 => x"80067781", +11159 => x"06709f2b", +11160 => x"535a5855", +11161 => x"800b8c08", +11162 => x"f8050876", +11163 => x"078c08f8", +11164 => x"050c708c", +11165 => x"08fc0508", +11166 => x"078c08fc", +11167 => x"050c568c", +11168 => x"08f80508", +11169 => x"8c08fc05", +11170 => x"088c0888", +11171 => x"05085957", +11172 => x"5574770c", +11173 => x"7584180c", +11174 => x"8c088805", +11175 => x"08800cbb", +11176 => x"3d0d8c0c", +11177 => x"048c0802", +11178 => x"8c0c7070", +11179 => x"800b8c08", +11180 => x"fc050c8c", +11181 => x"08880508", +11182 => x"51700882", +11183 => x"2e098106", +11184 => x"0b0b0b0b", +11185 => x"8838810b", +11186 => x"8c08fc05", +11187 => x"0c8c08fc", +11188 => x"05087080", +11189 => x"0c515050", +11190 => x"8c0c048c", +11191 => x"08028c0c", +11192 => x"7070800b", +11193 => x"8c08fc05", +11194 => x"0c8c0888", +11195 => x"05085170", +11196 => x"08842e09", +11197 => x"81060b0b", +11198 => x"0b0b8838", +11199 => x"810b8c08", +11200 => x"fc050c8c", +11201 => x"08fc0508", +11202 => x"70800c51", +11203 => x"50508c0c", +11204 => x"048c0802", +11205 => x"8c0c7070", +11206 => x"800b8c08", +11207 => x"fc050c8c", +11208 => x"08880508", +11209 => x"51700880", +11210 => x"2e0b0b0b", +11211 => x"0b97388c", +11212 => x"08880508", +11213 => x"51700881", +11214 => x"2e0b0b0b", +11215 => x"0b87380b", +11216 => x"0b0b0b88", +11217 => x"39810b8c", +11218 => x"08fc050c", +11219 => x"8c08fc05", +11220 => x"0870800c", +11221 => x"5150508c", +11222 => x"0c048c08", +11223 => x"028c0cf8", +11224 => x"3d0d8c08", +11225 => x"88050870", +11226 => x"08bfffff", +11227 => x"068c08f8", +11228 => x"050c8411", +11229 => x"08ff068c", +11230 => x"08fc050c", +11231 => x"8c088805", +11232 => x"08700894", +11233 => x"2a545451", +11234 => x"80728fff", +11235 => x"068c08f4", +11236 => x"050c8c08", +11237 => x"88050870", +11238 => x"089f2a54", +11239 => x"54518072", +11240 => x"81068c08", +11241 => x"f0050c8c", +11242 => x"088c0508", +11243 => x"8c08f005", +11244 => x"0884120c", +11245 => x"51518c08", +11246 => x"f405080b", +11247 => x"0b0b81cf", +11248 => x"388c08f8", +11249 => x"0508708c", +11250 => x"08fc0508", +11251 => x"07515170", +11252 => x"0b0b0b0b", +11253 => x"90388c08", +11254 => x"8c050851", +11255 => x"82710c0b", +11256 => x"0b0b82f8", +11257 => x"398c088c", +11258 => x"05088c08", +11259 => x"f40508f8", +11260 => x"82058812", +11261 => x"0c8c08fc", +11262 => x"0508982a", +11263 => x"8c08f805", +11264 => x"08882b70", +11265 => x"72078c08", +11266 => x"fc050888", +11267 => x"2b565355", +11268 => x"5551708c", +11269 => x"08f8050c", +11270 => x"718c08fc", +11271 => x"050c8c08", +11272 => x"8c050851", +11273 => x"83710c8c", +11274 => x"08f80508", +11275 => x"f00a260b", +11276 => x"0b0b0bbb", +11277 => x"388c08fc", +11278 => x"05089f2a", +11279 => x"8c08f805", +11280 => x"08107072", +11281 => x"078c08fc", +11282 => x"05081055", +11283 => x"53545470", +11284 => x"8c08f805", +11285 => x"0c718c08", +11286 => x"fc050c8c", +11287 => x"088c0508", +11288 => x"881108ff", +11289 => x"0588120c", +11290 => x"510b0b0b", +11291 => x"ffb9398c", +11292 => x"088c0508", +11293 => x"538c08f8", +11294 => x"05088c08", +11295 => x"fc050853", +11296 => x"51708c14", +11297 => x"0c719014", +11298 => x"0c0b0b0b", +11299 => x"81ce398c", +11300 => x"08f40508", +11301 => x"8fff2e09", +11302 => x"81060b0b", +11303 => x"0b80f438", +11304 => x"8c08f805", +11305 => x"08708c08", +11306 => x"fc050807", +11307 => x"5151700b", +11308 => x"0b0b0b90", +11309 => x"388c088c", +11310 => x"05085184", +11311 => x"710c0b0b", +11312 => x"0b819939", +11313 => x"8c08f805", +11314 => x"08932a52", +11315 => x"80728106", +11316 => x"51517080", +11317 => x"2e0b0b0b", +11318 => x"0b90388c", +11319 => x"088c0508", +11320 => x"5181710c", +11321 => x"0b0b0b0b", +11322 => x"8a398c08", +11323 => x"8c050851", +11324 => x"80710c8c", +11325 => x"088c0508", +11326 => x"538c08f8", +11327 => x"05088c08", +11328 => x"fc050853", +11329 => x"51708c14", +11330 => x"0c719014", +11331 => x"0c0b0b0b", +11332 => x"80ca398c", +11333 => x"088c0508", +11334 => x"8c08f405", +11335 => x"08f88105", +11336 => x"88120c8c", +11337 => x"088c0508", +11338 => x"51518371", +11339 => x"0c8c088c", +11340 => x"05088c08", +11341 => x"fc050898", +11342 => x"2a8c08f8", +11343 => x"0508882b", +11344 => x"7072078c", +11345 => x"08fc0508", +11346 => x"882b7188", +11347 => x"0a078c16", +11348 => x"0c708007", +11349 => x"90160c56", +11350 => x"54555555", +11351 => x"8a3d0d8c", +11352 => x"0c048c08", +11353 => x"028c0cf0", +11354 => x"3d0d8c08", +11355 => x"88050851", +11356 => x"0b0b0b89", +11357 => x"993f8008", +11358 => x"52710b0b", +11359 => x"0b0b9d38", +11360 => x"8c088c05", +11361 => x"08510b0b", +11362 => x"0b89833f", +11363 => x"80085271", +11364 => x"0b0b0b0b", +11365 => x"87380b0b", +11366 => x"0b0b8e39", +11367 => x"810b8c08", +11368 => x"fc050c0b", +11369 => x"0b0b87ed", +11370 => x"398c0888", +11371 => x"0508510b", +11372 => x"0b0b88a4", +11373 => x"3f800852", +11374 => x"71802e0b", +11375 => x"0b0b0bb9", +11376 => x"388c088c", +11377 => x"0508510b", +11378 => x"0b0b888c", +11379 => x"3f800852", +11380 => x"71802e0b", +11381 => x"0b0b0ba1", +11382 => x"388c088c", +11383 => x"05088c08", +11384 => x"88050884", +11385 => x"12088412", +11386 => x"0831708c", +11387 => x"08fc050c", +11388 => x"5254520b", +11389 => x"0b0b879d", +11390 => x"398c0888", +11391 => x"0508510b", +11392 => x"0b0b87d4", +11393 => x"3f800852", +11394 => x"71802e0b", +11395 => x"0b0b0bb6", +11396 => x"388c0888", +11397 => x"05085284", +11398 => x"1208802e", +11399 => x"0b0b0b0b", +11400 => x"8e38ff0b", +11401 => x"8c08f805", +11402 => x"0c0b0b0b", +11403 => x"0b883981", +11404 => x"0b8c08f8", +11405 => x"050c8c08", +11406 => x"f805088c", +11407 => x"08fc050c", +11408 => x"0b0b0b86", +11409 => x"d0398c08", +11410 => x"8c050851", +11411 => x"0b0b0b87", +11412 => x"873f8008", +11413 => x"5271802e", +11414 => x"0b0b0b0b", +11415 => x"b6388c08", +11416 => x"8c050852", +11417 => x"84120880", +11418 => x"2e0b0b0b", +11419 => x"0b8e3881", +11420 => x"0b8c08f4", +11421 => x"050c0b0b", +11422 => x"0b0b8839", +11423 => x"ff0b8c08", +11424 => x"f4050c8c", +11425 => x"08f40508", +11426 => x"8c08fc05", +11427 => x"0c0b0b0b", +11428 => x"8683398c", +11429 => x"08880508", +11430 => x"510b0b0b", +11431 => x"86843f80", +11432 => x"08527180", +11433 => x"2e0b0b0b", +11434 => x"0ba6388c", +11435 => x"088c0508", +11436 => x"510b0b0b", +11437 => x"85ec3f80", +11438 => x"08527180", +11439 => x"2e0b0b0b", +11440 => x"0b8e3880", +11441 => x"0b8c08fc", +11442 => x"050c0b0b", +11443 => x"0b85c639", +11444 => x"8c088805", +11445 => x"08510b0b", +11446 => x"0b85c73f", +11447 => x"80085271", +11448 => x"802e0b0b", +11449 => x"0b0bb638", +11450 => x"8c088c05", +11451 => x"08528412", +11452 => x"08802e0b", +11453 => x"0b0b0b8e", +11454 => x"38810b8c", +11455 => x"08f0050c", +11456 => x"0b0b0b0b", +11457 => x"8839ff0b", +11458 => x"8c08f005", +11459 => x"0c8c08f0", +11460 => x"05088c08", +11461 => x"fc050c0b", +11462 => x"0b0b84f9", +11463 => x"398c088c", +11464 => x"0508510b", +11465 => x"0b0b84fa", +11466 => x"3f800852", +11467 => x"71802e0b", +11468 => x"0b0b0bb6", +11469 => x"388c0888", +11470 => x"05085284", +11471 => x"1208802e", +11472 => x"0b0b0b0b", +11473 => x"8e38ff0b", +11474 => x"8c08ec05", +11475 => x"0c0b0b0b", +11476 => x"0b883981", +11477 => x"0b8c08ec", +11478 => x"050c8c08", +11479 => x"ec05088c", +11480 => x"08fc050c", +11481 => x"0b0b0b84", +11482 => x"ac398c08", +11483 => x"8805088c", +11484 => x"088c0508", +11485 => x"53538413", +11486 => x"08841308", +11487 => x"2e0b0b0b", +11488 => x"0bb6388c", +11489 => x"08880508", +11490 => x"52841208", +11491 => x"802e0b0b", +11492 => x"0b0b8e38", +11493 => x"ff0b8c08", +11494 => x"e8050c0b", +11495 => x"0b0b0b88", +11496 => x"39810b8c", +11497 => x"08e8050c", +11498 => x"8c08e805", +11499 => x"088c08fc", +11500 => x"050c0b0b", +11501 => x"0b83de39", +11502 => x"8c088805", +11503 => x"088c088c", +11504 => x"05085353", +11505 => x"88120888", +11506 => x"1408250b", +11507 => x"0b0b0bb6", +11508 => x"388c0888", +11509 => x"05085284", +11510 => x"1208802e", +11511 => x"0b0b0b0b", +11512 => x"8e38ff0b", +11513 => x"8c08e405", +11514 => x"0c0b0b0b", +11515 => x"0b883981", +11516 => x"0b8c08e4", +11517 => x"050c8c08", +11518 => x"e405088c", +11519 => x"08fc050c", +11520 => x"0b0b0b83", +11521 => x"90398c08", +11522 => x"8805088c", +11523 => x"088c0508", +11524 => x"53538813", +11525 => x"08881308", +11526 => x"250b0b0b", +11527 => x"0bb6388c", +11528 => x"08880508", +11529 => x"52841208", +11530 => x"802e0b0b", +11531 => x"0b0b8e38", +11532 => x"810b8c08", +11533 => x"e0050c0b", +11534 => x"0b0b0b88", +11535 => x"39ff0b8c", +11536 => x"08e0050c", +11537 => x"8c08e005", +11538 => x"088c08fc", +11539 => x"050c0b0b", +11540 => x"0b82c239", +11541 => x"8c088805", +11542 => x"088c08dc", +11543 => x"050c8c08", +11544 => x"8c05088c", +11545 => x"08d8050c", +11546 => x"8c08dc05", +11547 => x"088c08d8", +11548 => x"05085452", +11549 => x"8c12088c", +11550 => x"1408260b", +11551 => x"0b0b0bbc", +11552 => x"388c08dc", +11553 => x"05088c08", +11554 => x"d8050854", +11555 => x"528c1208", +11556 => x"8c14082e", +11557 => x"0981060b", +11558 => x"0b0b80d5", +11559 => x"388c08dc", +11560 => x"05088c08", +11561 => x"d8050854", +11562 => x"52901208", +11563 => x"90140826", +11564 => x"0b0b0b0b", +11565 => x"87380b0b", +11566 => x"0b0bb639", +11567 => x"8c088805", +11568 => x"08528412", +11569 => x"08802e0b", +11570 => x"0b0b0b8e", +11571 => x"38ff0b8c", +11572 => x"08d4050c", +11573 => x"0b0b0b0b", +11574 => x"8839810b", +11575 => x"8c08d405", +11576 => x"0c8c08d4", +11577 => x"05088c08", +11578 => x"fc050c0b", +11579 => x"0b0b81a5", +11580 => x"398c088c", +11581 => x"05088c08", +11582 => x"d0050c8c", +11583 => x"08880508", +11584 => x"8c08cc05", +11585 => x"0c8c08d0", +11586 => x"05088c08", +11587 => x"cc050854", +11588 => x"528c1208", +11589 => x"8c140826", +11590 => x"0b0b0b0b", +11591 => x"bc388c08", +11592 => x"d005088c", +11593 => x"08cc0508", +11594 => x"54528c12", +11595 => x"088c1408", +11596 => x"2e098106", +11597 => x"0b0b0b80", +11598 => x"d5388c08", +11599 => x"d005088c", +11600 => x"08cc0508", +11601 => x"54529012", +11602 => x"08901408", +11603 => x"260b0b0b", +11604 => x"0b87380b", +11605 => x"0b0b0bb6", +11606 => x"398c0888", +11607 => x"05085284", +11608 => x"1208802e", +11609 => x"0b0b0b0b", +11610 => x"8e38810b", +11611 => x"8c08c805", +11612 => x"0c0b0b0b", +11613 => x"0b8839ff", +11614 => x"0b8c08c8", +11615 => x"050c8c08", +11616 => x"c805088c", +11617 => x"08fc050c", +11618 => x"0b0b0b0b", +11619 => x"8839800b", +11620 => x"8c08fc05", +11621 => x"0c8c08fc", +11622 => x"0508800c", +11623 => x"923d0d8c", +11624 => x"0c048c08", +11625 => x"028c0c70", +11626 => x"70800b8c", +11627 => x"08fc050c", +11628 => x"8c088805", +11629 => x"08517008", +11630 => x"822e0981", +11631 => x"060b0b0b", +11632 => x"0b883881", +11633 => x"0b8c08fc", +11634 => x"050c8c08", +11635 => x"fc050870", +11636 => x"800c5150", +11637 => x"508c0c04", +11638 => x"8c08028c", +11639 => x"0c707080", +11640 => x"0b8c08fc", +11641 => x"050c8c08", +11642 => x"88050851", +11643 => x"7008842e", +11644 => x"0981060b", +11645 => x"0b0b0b88", +11646 => x"38810b8c", +11647 => x"08fc050c", +11648 => x"8c08fc05", +11649 => x"0870800c", +11650 => x"5150508c", +11651 => x"0c048c08", +11652 => x"028c0c70", +11653 => x"70800b8c", +11654 => x"08fc050c", +11655 => x"8c088805", +11656 => x"08517008", +11657 => x"802e0b0b", +11658 => x"0b0b9738", +11659 => x"8c088805", +11660 => x"08517008", +11661 => x"812e0b0b", +11662 => x"0b0b8738", +11663 => x"0b0b0b0b", +11664 => x"8839810b", +11665 => x"8c08fc05", +11666 => x"0c8c08fc", +11667 => x"05087080", +11668 => x"0c515050", +11669 => x"8c0c0470", +11670 => x"700b0b83", +11671 => x"84d80bfc", +11672 => x"05700852", +11673 => x"5270ff2e", +11674 => x"0b0b0b0b", +11675 => x"9538702d", +11676 => x"fc127008", +11677 => x"525270ff", +11678 => x"2e098106", +11679 => x"0b0b0b0b", +11680 => x"ed385050", +11681 => x"04040b0b", +11682 => x"fd9e993f", +11683 => x"04000000", +11684 => x"00000040", +11685 => x"48656c6c", +11686 => x"6f20776f", +11687 => x"726c6421", +11688 => x"0a000000", +11689 => x"20202020", +11690 => x"20202020", +11691 => x"20202020", +11692 => x"20202020", +11693 => x"30303030", +11694 => x"30303030", +11695 => x"30303030", +11696 => x"30303030", +11697 => x"0000164c", +11698 => x"000010d6", +11699 => x"000010d6", +11700 => x"0000163f", +11701 => x"000010d6", +11702 => x"000010d6", +11703 => x"000010d6", +11704 => x"000010d6", +11705 => x"000010d6", +11706 => x"000010d6", +11707 => x"000010a4", +11708 => x"000015c6", +11709 => x"000010d6", +11710 => x"000010b9", +11711 => x"000012d9", +11712 => x"000010d6", +11713 => x"000015fe", +11714 => x"000015d5", +11715 => x"000015d5", +11716 => x"000015d5", +11717 => x"000015d5", +11718 => x"000015d5", +11719 => x"000015d5", +11720 => x"000015d5", +11721 => x"000015d5", +11722 => x"000015d5", +11723 => x"000010d6", +11724 => x"000010d6", +11725 => x"000010d6", +11726 => x"000010d6", +11727 => x"000010d6", +11728 => x"000010d6", +11729 => x"000010d6", +11730 => x"000010d6", +11731 => x"000010d6", +11732 => x"00001476", +11733 => x"00001060", +11734 => x"000013e5", +11735 => x"000010d6", +11736 => x"000013e5", +11737 => x"000010d6", +11738 => x"000010d6", +11739 => x"000010d6", +11740 => x"000010d6", +11741 => x"0000160c", +11742 => x"000010d6", +11743 => x"000010d6", +11744 => x"00001024", +11745 => x"000010d6", +11746 => x"000010d6", +11747 => x"000010d6", +11748 => x"0000152a", +11749 => x"000010d6", +11750 => x"00000ce0", +11751 => x"000010d6", +11752 => x"000010d6", +11753 => x"000014d2", +11754 => x"000010d6", +11755 => x"000010d6", +11756 => x"000010d6", +11757 => x"000010d6", +11758 => x"000010d6", +11759 => x"000010d6", +11760 => x"000010d6", +11761 => x"000010d6", +11762 => x"000010d6", +11763 => x"000010d6", +11764 => x"00001476", +11765 => x"00001064", +11766 => x"000013e5", +11767 => x"000013e5", +11768 => x"000013e5", +11769 => x"000013d7", +11770 => x"00001064", +11771 => x"000010d6", +11772 => x"000010d6", +11773 => x"000012b5", +11774 => x"000010d6", +11775 => x"00001592", +11776 => x"00001028", +11777 => x"0000132c", +11778 => x"000010c9", +11779 => x"000010d6", +11780 => x"0000152a", +11781 => x"000010d6", +11782 => x"00000ce4", +11783 => x"000010d6", +11784 => x"000010d6", +11785 => x"00001619", +11786 => x"62756720", +11787 => x"696e2076", +11788 => x"66707269", +11789 => x"6e74663a", +11790 => x"20626164", +11791 => x"20626173", +11792 => x"65000000", +11793 => x"30313233", +11794 => x"34353637", +11795 => x"38396162", +11796 => x"63646566", +11797 => x"00000000", +11798 => x"496e6600", +11799 => x"30313233", +11800 => x"34353637", +11801 => x"38394142", +11802 => x"43444546", +11803 => x"00000000", +11804 => x"30000000", +11805 => x"2e000000", +11806 => x"4e614e00", +11807 => x"286e756c", +11808 => x"6c290000", +11809 => x"432d5554", +11810 => x"462d3800", +11811 => x"432d534a", +11812 => x"49530000", +11813 => x"432d4555", +11814 => x"434a5000", +11815 => x"432d4a49", +11816 => x"53000000", +11817 => x"496e6669", +11818 => x"6e697479", +11819 => x"00000000", +11820 => x"000037a9", +11821 => x"000037a9", +11822 => x"0000378d", +11823 => x"000031e6", +11824 => x"00003792", +11825 => x"000031eb", +11826 => x"43000000", +11827 => x"49534f2d", +11828 => x"38383539", +11829 => x"2d310000", +11830 => x"0000b874", +11831 => x"0000b86c", +11832 => x"0000b86c", +11833 => x"0000b86c", +11834 => x"0000b86c", +11835 => x"0000b86c", +11836 => x"0000b86c", +11837 => x"0000b86c", +11838 => x"0000b86c", +11839 => x"0000b86c", +11840 => x"ffffffff", +11841 => x"ffffffff", +11842 => x"3c9cd2b2", +11843 => x"97d889bc", +11844 => x"3949f623", +11845 => x"d5a8a733", +11846 => x"32a50ffd", +11847 => x"44f4a73d", +11848 => x"255bba08", +11849 => x"cf8c979d", +11850 => x"0ac80628", +11851 => x"64ac6f43", +11852 => x"4341c379", +11853 => x"37e08000", +11854 => x"4693b8b5", +11855 => x"b5056e17", +11856 => x"4d384f03", +11857 => x"e93ff9f5", +11858 => x"5a827748", +11859 => x"f9301d32", +11860 => x"75154fdd", +11861 => x"7f73bf3c", +11862 => x"3ff00000", +11863 => x"00000000", +11864 => x"40240000", +11865 => x"00000000", +11866 => x"40590000", +11867 => x"00000000", +11868 => x"408f4000", +11869 => x"00000000", +11870 => x"40c38800", +11871 => x"00000000", +11872 => x"40f86a00", +11873 => x"00000000", +11874 => x"412e8480", +11875 => x"00000000", +11876 => x"416312d0", +11877 => x"00000000", +11878 => x"4197d784", +11879 => x"00000000", +11880 => x"41cdcd65", +11881 => x"00000000", +11882 => x"4202a05f", +11883 => x"20000000", +11884 => x"42374876", +11885 => x"e8000000", +11886 => x"426d1a94", +11887 => x"a2000000", +11888 => x"42a2309c", +11889 => x"e5400000", +11890 => x"42d6bcc4", +11891 => x"1e900000", +11892 => x"430c6bf5", +11893 => x"26340000", +11894 => x"4341c379", +11895 => x"37e08000", +11896 => x"43763457", +11897 => x"85d8a000", +11898 => x"43abc16d", +11899 => x"674ec800", +11900 => x"43e158e4", +11901 => x"60913d00", +11902 => x"4415af1d", +11903 => x"78b58c40", +11904 => x"444b1ae4", +11905 => x"d6e2ef50", +11906 => x"4480f0cf", +11907 => x"064dd592", +11908 => x"44b52d02", +11909 => x"c7e14af6", +11910 => x"44ea7843", +11911 => x"79d99db4", +11912 => x"00000005", +11913 => x"00000019", +11914 => x"0000007d", +11915 => x"64756d6d", +11916 => x"792e6578", +11917 => x"65000000", +11918 => x"00000000", +11919 => x"00000000", +11920 => x"00000000", +11921 => x"00000000", +11922 => x"00000000", +11923 => x"00ffffff", +11924 => x"ff00ffff", +11925 => x"ffff00ff", +11926 => x"ffffff00", +11927 => x"00000000", +11928 => x"00000000", +11929 => x"00000000", +11930 => x"0000c260", +11931 => x"0000ba70", +11932 => x"00000000", +11933 => x"0000bcd8", +11934 => x"0000bd34", +11935 => x"0000bd90", +11936 => x"00000000", +11937 => x"00000000", +11938 => x"00000000", +11939 => x"00000000", +11940 => x"00000000", +11941 => x"00000000", +11942 => x"00000000", +11943 => x"00000000", +11944 => x"00000000", +11945 => x"0000b8c8", +11946 => x"00000000", +11947 => x"00000000", +11948 => x"00000000", +11949 => x"00000000", +11950 => x"00000000", +11951 => x"00000000", +11952 => x"00000000", +11953 => x"00000000", +11954 => x"00000000", +11955 => x"00000000", +11956 => x"00000000", +11957 => x"00000000", +11958 => x"00000000", +11959 => x"00000000", +11960 => x"00000000", +11961 => x"00000000", +11962 => x"00000000", +11963 => x"00000000", +11964 => x"00000000", +11965 => x"00000000", +11966 => x"00000000", +11967 => x"00000000", +11968 => x"00000000", +11969 => x"00000000", +11970 => x"00000000", +11971 => x"00000000", +11972 => x"00000000", +11973 => x"00000000", +11974 => x"00000001", +11975 => x"330eabcd", +11976 => x"1234e66d", +11977 => x"deec0005", +11978 => x"000b0000", +11979 => x"00000000", +11980 => x"00000000", +11981 => x"00000000", +11982 => x"00000000", +11983 => x"00000000", +11984 => x"00000000", +11985 => x"00000000", +11986 => x"00000000", +11987 => x"00000000", +11988 => x"00000000", +11989 => x"00000000", +11990 => x"00000000", +11991 => x"00000000", +11992 => x"00000000", +11993 => x"00000000", +11994 => x"00000000", +11995 => x"00000000", +11996 => x"00000000", +11997 => x"00000000", +11998 => x"00000000", +11999 => x"00000000", +12000 => x"00000000", +12001 => x"00000000", +12002 => x"00000000", +12003 => x"00000000", +12004 => x"00000000", +12005 => x"00000000", +12006 => x"00000000", +12007 => x"00000000", +12008 => x"00000000", +12009 => x"00000000", +12010 => x"00000000", +12011 => x"00000000", +12012 => x"00000000", +12013 => x"00000000", +12014 => x"00000000", +12015 => x"00000000", +12016 => x"00000000", +12017 => x"00000000", +12018 => x"00000000", +12019 => x"00000000", +12020 => x"00000000", +12021 => x"00000000", +12022 => x"00000000", +12023 => x"00000000", +12024 => x"00000000", +12025 => x"00000000", +12026 => x"00000000", +12027 => x"00000000", +12028 => x"00000000", +12029 => x"00000000", +12030 => x"00000000", +12031 => x"00000000", +12032 => x"00000000", +12033 => x"00000000", +12034 => x"00000000", +12035 => x"00000000", +12036 => x"00000000", +12037 => x"00000000", +12038 => x"00000000", +12039 => x"00000000", +12040 => x"00000000", +12041 => x"00000000", +12042 => x"00000000", +12043 => x"00000000", +12044 => x"00000000", +12045 => x"00000000", +12046 => x"00000000", +12047 => x"00000000", +12048 => x"00000000", +12049 => x"00000000", +12050 => x"00000000", +12051 => x"00000000", +12052 => x"00000000", +12053 => x"00000000", +12054 => x"00000000", +12055 => x"00000000", +12056 => x"00000000", +12057 => x"00000000", +12058 => x"00000000", +12059 => x"00000000", +12060 => x"00000000", +12061 => x"00000000", +12062 => x"00000000", +12063 => x"00000000", +12064 => x"00000000", +12065 => x"00000000", +12066 => x"00000000", +12067 => x"00000000", +12068 => x"00000000", +12069 => x"00000000", +12070 => x"00000000", +12071 => x"00000000", +12072 => x"00000000", +12073 => x"00000000", +12074 => x"00000000", +12075 => x"00000000", +12076 => x"00000000", +12077 => x"00000000", +12078 => x"00000000", +12079 => x"00000000", +12080 => x"00000000", +12081 => x"00000000", +12082 => x"00000000", +12083 => x"00000000", +12084 => x"00000000", +12085 => x"00000000", +12086 => x"00000000", +12087 => x"00000000", +12088 => x"00000000", +12089 => x"00000000", +12090 => x"00000000", +12091 => x"00000000", +12092 => x"00000000", +12093 => x"00000000", +12094 => x"00000000", +12095 => x"00000000", +12096 => x"00000000", +12097 => x"00000000", +12098 => x"00000000", +12099 => x"00000000", +12100 => x"00000000", +12101 => x"00000000", +12102 => x"00000000", +12103 => x"00000000", +12104 => x"00000000", +12105 => x"00000000", +12106 => x"00000000", +12107 => x"00000000", +12108 => x"00000000", +12109 => x"00000000", +12110 => x"00000000", +12111 => x"00000000", +12112 => x"00000000", +12113 => x"00000000", +12114 => x"00000000", +12115 => x"00000000", +12116 => x"00000000", +12117 => x"00000000", +12118 => x"00000000", +12119 => x"00000000", +12120 => x"00000000", +12121 => x"00000000", +12122 => x"00000000", +12123 => x"00000000", +12124 => x"00000000", +12125 => x"00000000", +12126 => x"00000000", +12127 => x"00000000", +12128 => x"00000000", +12129 => x"00000000", +12130 => x"00000000", +12131 => x"00000000", +12132 => x"00000000", +12133 => x"00000000", +12134 => x"00000000", +12135 => x"00000000", +12136 => x"00000000", +12137 => x"00000000", +12138 => x"00000000", +12139 => x"00000000", +12140 => x"00000000", +12141 => x"00000000", +12142 => x"00000000", +12143 => x"00000000", +12144 => x"00000000", +12145 => x"00000000", +12146 => x"00000000", +12147 => x"00000000", +12148 => x"00000000", +12149 => x"00000000", +12150 => x"00000000", +12151 => x"00000000", +12152 => x"00000000", +12153 => x"00000000", +12154 => x"00000000", +12155 => x"43000000", +12156 => x"00000000", +12157 => x"00000000", +12158 => x"00000000", +12159 => x"00000000", +12160 => x"00000000", +12161 => x"00000001", +12162 => x"0000b8cc", +12163 => x"00000000", +12164 => x"00000000", +12165 => x"00000000", +12166 => x"00000000", +12167 => x"00000000", +12168 => x"00000000", +12169 => x"00000000", +12170 => x"00000000", +12171 => x"00000000", +12172 => x"00000000", +12173 => x"00000000", +12174 => x"00000000", +12175 => x"ffffffff", +12176 => x"00000000", +12177 => x"00020000", +12178 => x"00000000", +12179 => x"00000000", +12180 => x"0000be48", +12181 => x"0000be48", +12182 => x"0000be50", +12183 => x"0000be50", +12184 => x"0000be58", +12185 => x"0000be58", +12186 => x"0000be60", +12187 => x"0000be60", +12188 => x"0000be68", +12189 => x"0000be68", +12190 => x"0000be70", +12191 => x"0000be70", +12192 => x"0000be78", +12193 => x"0000be78", +12194 => x"0000be80", +12195 => x"0000be80", +12196 => x"0000be88", +12197 => x"0000be88", +12198 => x"0000be90", +12199 => x"0000be90", +12200 => x"0000be98", +12201 => x"0000be98", +12202 => x"0000bea0", +12203 => x"0000bea0", +12204 => x"0000bea8", +12205 => x"0000bea8", +12206 => x"0000beb0", +12207 => x"0000beb0", +12208 => x"0000beb8", +12209 => x"0000beb8", +12210 => x"0000bec0", +12211 => x"0000bec0", +12212 => x"0000bec8", +12213 => x"0000bec8", +12214 => x"0000bed0", +12215 => x"0000bed0", +12216 => x"0000bed8", +12217 => x"0000bed8", +12218 => x"0000bee0", +12219 => x"0000bee0", +12220 => x"0000bee8", +12221 => x"0000bee8", +12222 => x"0000bef0", +12223 => x"0000bef0", +12224 => x"0000bef8", +12225 => x"0000bef8", +12226 => x"0000bf00", +12227 => x"0000bf00", +12228 => x"0000bf08", +12229 => x"0000bf08", +12230 => x"0000bf10", +12231 => x"0000bf10", +12232 => x"0000bf18", +12233 => x"0000bf18", +12234 => x"0000bf20", +12235 => x"0000bf20", +12236 => x"0000bf28", +12237 => x"0000bf28", +12238 => x"0000bf30", +12239 => x"0000bf30", +12240 => x"0000bf38", +12241 => x"0000bf38", +12242 => x"0000bf40", +12243 => x"0000bf40", +12244 => x"0000bf48", +12245 => x"0000bf48", +12246 => x"0000bf50", +12247 => x"0000bf50", +12248 => x"0000bf58", +12249 => x"0000bf58", +12250 => x"0000bf60", +12251 => x"0000bf60", +12252 => x"0000bf68", +12253 => x"0000bf68", +12254 => x"0000bf70", +12255 => x"0000bf70", +12256 => x"0000bf78", +12257 => x"0000bf78", +12258 => x"0000bf80", +12259 => x"0000bf80", +12260 => x"0000bf88", +12261 => x"0000bf88", +12262 => x"0000bf90", +12263 => x"0000bf90", +12264 => x"0000bf98", +12265 => x"0000bf98", +12266 => x"0000bfa0", +12267 => x"0000bfa0", +12268 => x"0000bfa8", +12269 => x"0000bfa8", +12270 => x"0000bfb0", +12271 => x"0000bfb0", +12272 => x"0000bfb8", +12273 => x"0000bfb8", +12274 => x"0000bfc0", +12275 => x"0000bfc0", +12276 => x"0000bfc8", +12277 => x"0000bfc8", +12278 => x"0000bfd0", +12279 => x"0000bfd0", +12280 => x"0000bfd8", +12281 => x"0000bfd8", +12282 => x"0000bfe0", +12283 => x"0000bfe0", +12284 => x"0000bfe8", +12285 => x"0000bfe8", +12286 => x"0000bff0", +12287 => x"0000bff0", +12288 => x"0000bff8", +12289 => x"0000bff8", +12290 => x"0000c000", +12291 => x"0000c000", +12292 => x"0000c008", +12293 => x"0000c008", +12294 => x"0000c010", +12295 => x"0000c010", +12296 => x"0000c018", +12297 => x"0000c018", +12298 => x"0000c020", +12299 => x"0000c020", +12300 => x"0000c028", +12301 => x"0000c028", +12302 => x"0000c030", +12303 => x"0000c030", +12304 => x"0000c038", +12305 => x"0000c038", +12306 => x"0000c040", +12307 => x"0000c040", +12308 => x"0000c048", +12309 => x"0000c048", +12310 => x"0000c050", +12311 => x"0000c050", +12312 => x"0000c058", +12313 => x"0000c058", +12314 => x"0000c060", +12315 => x"0000c060", +12316 => x"0000c068", +12317 => x"0000c068", +12318 => x"0000c070", +12319 => x"0000c070", +12320 => x"0000c078", +12321 => x"0000c078", +12322 => x"0000c080", +12323 => x"0000c080", +12324 => x"0000c088", +12325 => x"0000c088", +12326 => x"0000c090", +12327 => x"0000c090", +12328 => x"0000c098", +12329 => x"0000c098", +12330 => x"0000c0a0", +12331 => x"0000c0a0", +12332 => x"0000c0a8", +12333 => x"0000c0a8", +12334 => x"0000c0b0", +12335 => x"0000c0b0", +12336 => x"0000c0b8", +12337 => x"0000c0b8", +12338 => x"0000c0c0", +12339 => x"0000c0c0", +12340 => x"0000c0c8", +12341 => x"0000c0c8", +12342 => x"0000c0d0", +12343 => x"0000c0d0", +12344 => x"0000c0d8", +12345 => x"0000c0d8", +12346 => x"0000c0e0", +12347 => x"0000c0e0", +12348 => x"0000c0e8", +12349 => x"0000c0e8", +12350 => x"0000c0f0", +12351 => x"0000c0f0", +12352 => x"0000c0f8", +12353 => x"0000c0f8", +12354 => x"0000c100", +12355 => x"0000c100", +12356 => x"0000c108", +12357 => x"0000c108", +12358 => x"0000c110", +12359 => x"0000c110", +12360 => x"0000c118", +12361 => x"0000c118", +12362 => x"0000c120", +12363 => x"0000c120", +12364 => x"0000c128", +12365 => x"0000c128", +12366 => x"0000c130", +12367 => x"0000c130", +12368 => x"0000c138", +12369 => x"0000c138", +12370 => x"0000c140", +12371 => x"0000c140", +12372 => x"0000c148", +12373 => x"0000c148", +12374 => x"0000c150", +12375 => x"0000c150", +12376 => x"0000c158", +12377 => x"0000c158", +12378 => x"0000c160", +12379 => x"0000c160", +12380 => x"0000c168", +12381 => x"0000c168", +12382 => x"0000c170", +12383 => x"0000c170", +12384 => x"0000c178", +12385 => x"0000c178", +12386 => x"0000c180", +12387 => x"0000c180", +12388 => x"0000c188", +12389 => x"0000c188", +12390 => x"0000c190", +12391 => x"0000c190", +12392 => x"0000c198", +12393 => x"0000c198", +12394 => x"0000c1a0", +12395 => x"0000c1a0", +12396 => x"0000c1a8", +12397 => x"0000c1a8", +12398 => x"0000c1b0", +12399 => x"0000c1b0", +12400 => x"0000c1b8", +12401 => x"0000c1b8", +12402 => x"0000c1c0", +12403 => x"0000c1c0", +12404 => x"0000c1c8", +12405 => x"0000c1c8", +12406 => x"0000c1d0", +12407 => x"0000c1d0", +12408 => x"0000c1d8", +12409 => x"0000c1d8", +12410 => x"0000c1e0", +12411 => x"0000c1e0", +12412 => x"0000c1e8", +12413 => x"0000c1e8", +12414 => x"0000c1f0", +12415 => x"0000c1f0", +12416 => x"0000c1f8", +12417 => x"0000c1f8", +12418 => x"0000c200", +12419 => x"0000c200", +12420 => x"0000c208", +12421 => x"0000c208", +12422 => x"0000c210", +12423 => x"0000c210", +12424 => x"0000c218", +12425 => x"0000c218", +12426 => x"0000c220", +12427 => x"0000c220", +12428 => x"0000c228", +12429 => x"0000c228", +12430 => x"0000c230", +12431 => x"0000c230", +12432 => x"0000c238", +12433 => x"0000c238", +12434 => x"0000c240", +12435 => x"0000c240", +12436 => x"0000ba2c", +12437 => x"ffffffff", +12438 => x"00000000", +12439 => x"ffffffff", +12440 => 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/example/io.vhd b/zpu/hdl/example/io.vhd new file mode 100644 index 0000000..7dbe36f --- /dev/null +++ b/zpu/hdl/example/io.vhd @@ -0,0 +1,97 @@ +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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(7 downto 0), + 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"2028003" 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 + print(l_file, character'val(conv_integer(write))); + report "Illegal IO write" severity warning; + end if; + + end if; + read <= (others => '0'); + if (readEnable = '1') then + if addr=x"1001" then + read <= (0=>'1', others => '0'); -- recieve empty + elsif addr(12)='1' then + read(7 downto 0) <= timer_read; + elsif addr(11)='1' then + read(7 downto 0) <= ZPU_Frequency; + elsif addr=x"2028003" then + read <= (others => '0'); + else + read <= (others => '0'); + read(8) <= '1'; + report "Illegal IO read" severity warning; + end if; + end if; + end if; + end process; + + +end behave; + diff --git a/zpu/hdl/example/log.txt b/zpu/hdl/example/log.txt new file mode 100644 index 0000000..6954a81 --- /dev/null +++ b/zpu/hdl/example/log.txt @@ -0,0 +1,15 @@ +H +e +l +l +o + +w +o +r +l +d +! + + + diff --git a/zpu/hdl/example/sim_fpga_top.vhd b/zpu/hdl/example/sim_fpga_top.vhd new file mode 100644 index 0000000..b51fea0 --- /dev/null +++ b/zpu/hdl/example/sim_fpga_top.vhd @@ -0,0 +1,179 @@ +-------------------------------------------------------------------------------- +-- 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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + 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; + + + + -- 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 <= 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/example/simzpu.do b/zpu/hdl/example/simzpu.do new file mode 100644 index 0000000..083187f --- /dev/null +++ b/zpu/hdl/example/simzpu.do @@ -0,0 +1,29 @@ +# Xilinx WebPack modelsim script +# +# 1. Change directory to this source directory +# cd C:/workspace/zpunew/hdl/example +# "do zimzpu.do" + +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config.vhd +vcom -93 -explicit ../zpu4/src/zpupkg.vhd +vcom -93 -explicit ../zpu4/src/txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit ../zpu4/src/zpu_core_small.vhd +vcom -93 -explicit helloworld.vhd +vcom -93 -explicit ../zpu4/src/timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit ../zpu4/src/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 10 ms diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd new file mode 100644 index 0000000..a59ac8e --- /dev/null +++ b/zpu/hdl/example/zpu_config.vhd @@ -0,0 +1,20 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +package zpu_config is + -- generate trace output + 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"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 27; + constant maxAddrBitBRAM : integer := 16; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; +end zpu_config; diff --git a/zpu/hdl/index.html b/zpu/hdl/index.html new file mode 100644 index 0000000..d3b4c1a --- /dev/null +++ b/zpu/hdl/index.html @@ -0,0 +1,47 @@ + + +

Getting started - FPGA

+The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART +is a good place to start. +

+You'll find a working simulation script in hdl/example/simzpu.do. +

+When implementing the ZPU, copy the following files and modify them to your needs: +

    +
  1. hdl/example/zpu_config.vhd - set up RAM size here +
  2. hdl/example/helloworld.vhd - dual port BRAM implementation. +
+Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is memory mapped(read/write) in the ZPU. +

Generating VHDL BRAM initialization

+ + +../install/bin/zpu-elf-objdump -O binary hello.elf hello.bin
+java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
+ +
+

Running example simulation

+The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt: +
    +
  1. cd c:/<installfolder>/hdl/example +
  2. do zpusim.do +
+

+After running the hello world simulation (see zpusim.do), two files are written to the hdl/exmaple directory: +

    +
  1. log.txt - contains the "Hello world!" text written to the debug channel/simplified UART. +
  2. trace.txt - a trace file for the CPU. The instruction set simulator has the capability of taking +this file as input in order to verify that the HDL implementation matches the instruction set simulator. +When a mismatch is found, the GDB debugger will break. Very handy for debugging custom ZPU implementations. +
+

HDL Directories & files

+ + +The HDL files need a bit of spit and polish! + + diff --git a/zpu/hdl/wishbone/wishbone_pkg.vhd b/zpu/hdl/wishbone/wishbone_pkg.vhd new file mode 100644 index 0000000..c3b0d9b --- /dev/null +++ b/zpu/hdl/wishbone/wishbone_pkg.vhd @@ -0,0 +1,52 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package wishbone_pkg is + + type wishbone_bus_in is record + adr : std_logic_vector(31 downto 0); + sel : std_logic_vector(3 downto 0); + we : std_logic; + dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we' + cyc : std_logic; + stb : std_logic; + end record; + + type wishbone_bus_out is record + dat : std_logic_vector(31 downto 0); + ack : std_logic; + end record; + + type wishbone_bus is record + insig : wishbone_bus_in; + outsig : wishbone_bus_out; + end record; + + component atomic32_access is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from CPU interface + wb_16_i : in wishbone_bus_in; + wb_16_o : out wishbone_bus_out; + -- Wishbone to FPGA registers and ethernet core + wb_32_i : in wishbone_bus_out; + wb_32_o : out wishbone_bus_in); + end component; + + component eth_access_corr is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from Wishbone MUX + eth_raw_o : out wishbone_bus_out; + eth_raw_i : in wishbone_bus_in; + + -- Wishbone ethernet core + eth_slave_i : in wishbone_bus_out; + eth_slave_o : out wishbone_bus_in); + end component; + + +end wishbone_pkg; diff --git a/zpu/hdl/wishbone/zpu_system.vhd b/zpu/hdl/wishbone/zpu_system.vhd new file mode 100644 index 0000000..6e79370 --- /dev/null +++ b/zpu/hdl/wishbone/zpu_system.vhd @@ -0,0 +1,71 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.all; + +library work; +use work.wishbone_pkg.all; +use work.zpupkg.all; +use work.zpu_config.all; +use work.ic300pkg.all; + +entity zpu_system is + generic( + simulate : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + + -- ZPU Control signals + enable : in std_logic; + interrupt : in std_logic; + + zpu_status : out std_logic_vector(63 downto 0); + + -- wishbone interfaces + zpu_wb_i : in wishbone_bus_out; + zpu_wb_o : out wishbone_bus_in); +end zpu_system; + +architecture behave of zpu_system is + +signal mem_req : std_logic; +signal mem_we : std_logic; +signal mem_ack : std_logic; +signal mem_read : std_logic_vector(wordSize-1 downto 0); +signal mem_write : std_logic_vector(wordSize-1 downto 0); +signal out_mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); +signal mem_writeMask : std_logic_vector(wordBytes-1 downto 0); + + +begin + + my_zpu_core: + zpu_core port map ( + clk => cpu_clk, + areset => areset, + enable => enable, + mem_req => mem_req, + mem_we => mem_we, + mem_ack => mem_ack, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => out_mem_addr, + mem_writeMask => mem_writeMask, + interrupt => interrupt, + zpu_status => zpu_status, + break => open); + + my_zpu_wb_bridge: + zpu_wb_bridge port map ( + clk => cpu_clk, + areset => areset, + mem_req => mem_req, + mem_we => mem_we, + mem_ack => mem_ack, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => out_mem_addr, + mem_writeMask => mem_writeMask, + zpu_wb_i => zpu_wb_i, + zpu_wb_o => zpu_wb_o); + +end behave; diff --git a/zpu/hdl/wishbone/zpu_wb_bridge.vhd b/zpu/hdl/wishbone/zpu_wb_bridge.vhd new file mode 100644 index 0000000..4182f7a --- /dev/null +++ b/zpu/hdl/wishbone/zpu_wb_bridge.vhd @@ -0,0 +1,49 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +use work.phi_config.all; +use work.wishbone_pkg.all; +use work.zpupkg.all; +use work.zpu_config.all; + +entity zpu_wb_bridge is + port ( -- Native ZPU interface + clk : in std_logic; + areset : in std_logic; + + mem_req : in std_logic; + mem_we : in std_logic; + mem_ack : out std_logic; + mem_read : out std_logic_vector(wordSize-1 downto 0); + mem_write : in std_logic_vector(wordSize-1 downto 0); + out_mem_addr : in std_logic_vector(maxAddrBitIncIO downto 0); + mem_writeMask : in std_logic_vector(wordBytes-1 downto 0); + + -- Wishbone from ZPU + zpu_wb_i : in wishbone_bus_out; + zpu_wb_o : out wishbone_bus_in); + +end zpu_wb_bridge; + +architecture behave of zpu_wb_bridge is + +begin + + mem_read <= zpu_wb_i.dat; + mem_ack <= zpu_wb_i.ack; + + zpu_wb_o.adr <= "000000" & out_mem_addr(27) & out_mem_addr(24 downto 0); + zpu_wb_o.dat <= mem_write; + zpu_wb_o.sel <= mem_writeMask; + zpu_wb_o.stb <= mem_req; + zpu_wb_o.cyc <= mem_req; + zpu_wb_o.we <= mem_we; + +end behave; + + + + + diff --git a/zpu/hdl/zpu3/src/.cvsignore b/zpu/hdl/zpu3/src/.cvsignore new file mode 100644 index 0000000..760be11 --- /dev/null +++ b/zpu/hdl/zpu3/src/.cvsignore @@ -0,0 +1 @@ +xilinx_device_details.xml diff --git a/zpu/hdl/zpu3/src/build.xml b/zpu/hdl/zpu3/src/build.xml new file mode 100644 index 0000000..e1b268a --- /dev/null +++ b/zpu/hdl/zpu3/src/build.xml @@ -0,0 +1,114 @@ + + + + + + + eCosBoard firmware build file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zpu/hdl/zpu3/src/clocks.vhd b/zpu/hdl/zpu3/src/clocks.vhd new file mode 100644 index 0000000..a352b3c --- /dev/null +++ b/zpu/hdl/zpu3/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/zpu3/src/ddr_bridge.vhd b/zpu/hdl/zpu3/src/ddr_bridge.vhd new file mode 100644 index 0000000..7dece76 --- /dev/null +++ b/zpu/hdl/zpu3/src/ddr_bridge.vhd @@ -0,0 +1,203 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.vcomponents.all; + +library zylin; +use zylin.ddr.all; + +library work; +use work.phi_config.all; + +entity 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 ddr_bridge; + +architecture behave of ddr_bridge is + +signal refresh_en : std_logic; +signal ddr_command_we : std_logic; +signal ddr_command : std_logic_vector(15 downto 0); + +signal ddr_req : std_logic; +signal ddr_req_adr : std_logic_vector(23 downto 1); +signal ddr_rd_wr_n : std_logic; +signal ddr_req_len : std_logic; + +signal ddr_read_en : std_logic; +signal ddr_write_en : std_logic; +signal ddr_data_read : std_logic_vector(31 downto 0); +signal ddr_data_write : std_logic_vector(35 downto 0); + +signal ddr_read_smp : std_logic_vector(31 downto 0); +signal ddr_read_delay : std_logic_vector(15 downto 0); + +signal ddr_write_smp : std_logic_vector(15 downto 0); +signal ddr_addr_smp : std_logic_vector(15 downto 0); + +signal ddr_req_type_smp : std_logic; +signal ddr_req_on : std_logic; +signal ddr_req_off : std_logic; +signal ddr_req_int : std_logic; + +constant Sim_Delay : time := 1.0 ns; + +begin + + ddr_req_len <= '0'; + ddr_data_write <= "0000" & ddr_write_smp & ddr_write_smp; + ddr_req_adr <= "0000000" & ddr_addr_smp; + ddr_rd_wr_n <= ddr_req_type_smp; + ddr_req <= ddr_req_int; + + process(cpu_clk, areset) -- CPU writeable registers + begin + if areset = '1' then + refresh_en <= '0'; + ddr_command_we <= '0'; + ddr_command <= "0000000000000000"; + ddr_write_smp <= "0000000000000000"; + ddr_req_type_smp <= '0'; + ddr_req_on <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Ctrl_Reg_Addr then + refresh_en <= cpu_din(0); + else + refresh_en <= refresh_en; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Mode_Reg_Addr then + ddr_command <= cpu_din; + ddr_command_we <= '1'; + else + ddr_command <= ddr_command; + ddr_command_we <= '0'; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr then + ddr_write_smp <= cpu_din; + else + ddr_write_smp <= ddr_write_smp; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Addr_Reg_Addr then + ddr_addr_smp <= cpu_din; + else + ddr_addr_smp <= ddr_addr_smp; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Req_Reg_Addr then + ddr_req_type_smp <= cpu_din(0); + ddr_req_on <= '1'; + else + ddr_req_type_smp <= ddr_req_type_smp; + ddr_req_on <= '0'; + end if; + + end if; + end process; + + -- CPU readable registers + cpu_dout <= ddr_read_delay when (cpu_re = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr) else "ZZZZZZZZZZZZZZZZ"; + + -- Capture data read from DDR + process(cpu_clk_2x, areset) + begin + if areset = '1' then + ddr_read_smp <= (others => '0'); + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + if ddr_read_en = '1' then + ddr_read_smp <= ddr_data_read after Sim_Delay; + else + ddr_read_smp <= ddr_read_smp after Sim_Delay; + end if; + end if; + end process; + + -- Move captured data from DDR to cpu_clk domain (for better routing timing) + process(cpu_clk, areset) + begin + if areset = '1' then + ddr_read_delay <= "0000000000000000"; + elsif (cpu_clk'event and cpu_clk = '1') then + ddr_read_delay <= ddr_read_smp(15 downto 0); + end if; + end process; + + process(cpu_clk_2x, areset) + begin + if areset = '1' then + ddr_req_int <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + if ddr_req_on = '1' then + ddr_req_int <= '1' after Sim_Delay; + elsif ddr_read_en = '1' or ddr_write_en = '1' then + ddr_req_int <= '0' after Sim_Delay; + else + ddr_req_int <= ddr_req_int after Sim_Delay; + end if; + end if; + end process; + + + ddr_interface: + ddr_top port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + ddr_command => ddr_command, + ddr_command_we => ddr_command_we, + refresh_en => refresh_en, + ddr_data_read => ddr_data_read, + ddr_data_write => ddr_data_write, + ddr_req => ddr_req, + ddr_req_adr => ddr_req_adr, + ddr_rd_wr_n => ddr_rd_wr_n, + ddr_req_len => ddr_req_len, + ddr_read_en => ddr_read_en, + ddr_write_en => ddr_write_en, + sdr_clk_p => sdr_clk_p, + sdr_clk_n_p => sdr_clk_n_p, + cke_q_p => cke_q_p, + cs_qn_p => cs_qn_p, + ras_qn_p => ras_qn_p, + cas_qn_p => cas_qn_p, + we_qn_p => we_qn_p, + dm_q_p => dm_q_p, + dqs_q_p => dqs_q_p, + ba_q_p => ba_q_p, + sdr_a_p => sdr_a_p, + sdr_d_p => sdr_d_p); + + +end behave; diff --git a/zpu/hdl/zpu3/src/dmips_ram.vhd b/zpu/hdl/zpu3/src/dmips_ram.vhd new file mode 100644 index 0000000..f472653 --- /dev/null +++ b/zpu/hdl/zpu3/src/dmips_ram.vhd @@ -0,0 +1,3824 @@ +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 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"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 + +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/zpu3/src/dualport_ram.vhd b/zpu/hdl/zpu3/src/dualport_ram.vhd new file mode 100644 index 0000000..54380ce --- /dev/null +++ b/zpu/hdl/zpu3/src/dualport_ram.vhd @@ -0,0 +1,4996 @@ +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 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"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b818a", +3 => x"880c3a0b", +4 => x"0b80fae8", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80fbba2d", +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"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"72728072", +73 => x"8106ff05", +74 => x"09720605", +75 => x"71105272", +76 => x"0a100a53", +77 => x"0b0b72eb", +78 => x"38515153", +79 => x"0b0b5104", +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"52040000", +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"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b8189", +162 => x"f4738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88ac0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8f", +171 => x"e42d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b91", +179 => x"9c2d5050", +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"818a840c", +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"0571530b", +250 => x"0b510400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"83cd3f80", +257 => x"fd803f04", +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"3c047070", +274 => x"0b0b819a", +275 => x"90085284", +276 => x"0b720508", +277 => x"70810651", +278 => x"510b0b70", +279 => x"f2387108", +280 => x"81ff0680", +281 => x"0c505004", +282 => x"70700b0b", +283 => x"819a9008", +284 => x"52840b72", +285 => x"0508700a", +286 => x"100a7081", +287 => x"06515151", +288 => x"0b0b70ed", +289 => x"3873720c", +290 => x"50500481", +291 => x"8a840880", +292 => x"2ea83883", +293 => x"80800b0b", +294 => x"0b819a90", +295 => x"0c82a080", +296 => x"0b0b0b81", +297 => x"9a940c82", +298 => x"90800b81", +299 => x"9aa40c0b", +300 => x"0b819a98", +301 => x"0b819aa8", +302 => x"0c04f880", +303 => x"8080a40b", +304 => x"0b0b819a", +305 => x"900cf880", +306 => x"8082800b", +307 => x"0b0b819a", +308 => x"940cf880", +309 => x"8084800b", +310 => x"819aa40c", +311 => x"f8808080", +312 => x"940b819a", +313 => x"a80cf880", +314 => x"80809c0b", +315 => x"819aa00c", +316 => x"f8808080", +317 => x"a00b819a", +318 => x"ac0c04f2", +319 => x"3d0d600b", +320 => x"0b819a94", +321 => x"08565d82", +322 => x"750c8059", +323 => x"805a800b", +324 => x"8f3d7110", +325 => x"10177008", +326 => x"5a575d5b", +327 => x"807781ff", +328 => x"067c832b", +329 => x"5658520b", +330 => x"76530b0b", +331 => x"7b5183ae", +332 => x"3f7d7f7a", +333 => x"72077c72", +334 => x"07717160", +335 => x"8105415f", +336 => x"5d5b5957", +337 => x"557a8724", +338 => x"bf380b0b", +339 => x"819a9408", +340 => x"7b101071", +341 => x"05700859", +342 => x"51558077", +343 => x"81ff067c", +344 => x"832b5658", +345 => x"520b7653", +346 => x"0b0b7b51", +347 => x"82f03f7d", +348 => x"7f7a7207", +349 => x"7c720771", +350 => x"71608105", +351 => x"415f5d5b", +352 => x"59575587", +353 => x"7b25c338", +354 => x"767d0c77", +355 => x"841e0c7c", +356 => x"800c903d", +357 => x"0d047070", +358 => x"819a9c33", +359 => x"510b0b70", +360 => x"aa38818a", +361 => x"90087008", +362 => x"52520b70", +363 => x"802e9638", +364 => x"84720581", +365 => x"8a900c70", +366 => x"2d818a90", +367 => x"08700852", +368 => x"520b70ec", +369 => x"38810b81", +370 => x"9a9c3450", +371 => x"50040470", +372 => x"0b0b819a", +373 => x"8c08802e", +374 => x"8e380b0b", +375 => x"0b0b800b", +376 => x"802e0981", +377 => x"06833850", +378 => x"040b0b81", +379 => x"9a8c510b", +380 => x"0b0bf48c", +381 => x"3f500404", +382 => x"8c08028c", +383 => x"0cfa3d0d", +384 => x"800b8c08", +385 => x"fc050c8c", +386 => x"08fc0508", +387 => x"892481b9", +388 => x"388c08f0", +389 => x"05705253", +390 => x"0b0bfddf", +391 => x"3f8c08f4", +392 => x"05088c08", +393 => x"f8050c8c", +394 => x"08f80508", +395 => x"520b0b81", +396 => x"85b45187", +397 => x"c53f0b0b", +398 => x"8185c051", +399 => x"8a8b3f0b", +400 => x"0b8185d0", +401 => x"518a823f", +402 => x"fc0b819a", +403 => x"b00c819a", +404 => x"b008812c", +405 => x"530b0b72", +406 => x"fe2e8438", +407 => x"87903f8a", +408 => x"0b819ab4", +409 => x"0c819ab4", +410 => x"08819ab0", +411 => x"0829530b", +412 => x"0b72d82e", +413 => x"843886f6", +414 => x"3f8a0b81", +415 => x"9ab00c84", +416 => x"e2ad800b", +417 => x"819ab40c", +418 => x"819ab408", +419 => x"819ab008", +420 => x"29530b0b", +421 => x"72afd7c2", +422 => x"802e8438", +423 => x"86d03f81", +424 => x"0a0b819a", +425 => x"b00cff0b", +426 => x"819ab40c", +427 => x"819ab408", +428 => x"819ab008", +429 => x"25843886", +430 => x"b53f8c08", +431 => x"fc050881", +432 => x"058c08fc", +433 => x"050cfebf", +434 => x"398c08fc", +435 => x"05088a2e", +436 => x"8438869a", +437 => x"3f72800c", +438 => x"883d0d8c", +439 => x"0c048c08", +440 => x"028c0cf5", +441 => x"3d0d8c08", +442 => x"9405089f", +443 => x"388c088c", +444 => x"05088c08", +445 => x"9005088c", +446 => x"08880508", +447 => x"5856540b", +448 => x"0b73760c", +449 => x"7484170c", +450 => x"81cd3980", +451 => x"0b8c08f0", +452 => x"050c800b", +453 => x"8c08f405", +454 => x"0c8c088c", +455 => x"05088c08", +456 => x"90050856", +457 => x"540b0b73", +458 => x"8c08f005", +459 => x"0c748c08", +460 => x"f4050c8c", +461 => x"08f8058c", +462 => x"08f00556", +463 => x"56887054", +464 => x"0b0b7553", +465 => x"0b0b7652", +466 => x"540b0b85", +467 => x"ef3fa00b", +468 => x"8c089405", +469 => x"08318c08", +470 => x"ec050c8c", +471 => x"08ec0508", +472 => x"80249f38", +473 => x"800b8c08", +474 => x"f4050c8c", +475 => x"08ec0508", +476 => x"308c08fc", +477 => x"0508712b", +478 => x"8c08f005", +479 => x"0c540b0b", +480 => x"bb398c08", +481 => x"fc05088c", +482 => x"08ec0508", +483 => x"2a8c08e8", +484 => x"050c8c08", +485 => x"fc05088c", +486 => x"08940508", +487 => x"2b8c08f4", +488 => x"050c8c08", +489 => x"f805088c", +490 => x"08940508", +491 => x"2b708c08", +492 => x"e8050807", +493 => x"8c08f005", +494 => x"0c540b0b", +495 => x"8c08f005", +496 => x"088c08f4", +497 => x"05088c08", +498 => x"88050858", +499 => x"56540b0b", +500 => x"73760c74", +501 => x"84170c8c", +502 => x"08880508", +503 => x"800c8d3d", +504 => x"0d8c0c04", +505 => x"8c08028c", +506 => x"0cf93d0d", +507 => x"800b8c08", +508 => x"fc050c8c", +509 => x"08880508", +510 => x"8025ab38", +511 => x"8c088805", +512 => x"08308c08", +513 => x"88050c80", +514 => x"0b8c08f4", +515 => x"050c8c08", +516 => x"fc050888", +517 => x"38810b8c", +518 => x"08f4050c", +519 => x"8c08f405", +520 => x"088c08fc", +521 => x"050c8c08", +522 => x"8c050880", +523 => x"25ab388c", +524 => x"088c0508", +525 => x"308c088c", +526 => x"050c800b", +527 => x"8c08f005", +528 => x"0c8c08fc", +529 => x"05088838", +530 => x"810b8c08", +531 => x"f0050c8c", +532 => x"08f00508", +533 => x"8c08fc05", +534 => x"0c80530b", +535 => x"0b8c088c", +536 => x"0508528c", +537 => x"08880508", +538 => x"5181b13f", +539 => x"8008708c", +540 => x"08f8050c", +541 => x"540b0b8c", +542 => x"08fc0508", +543 => x"802e8c38", +544 => x"8c08f805", +545 => x"08308c08", +546 => x"f8050c8c", +547 => x"08f80508", +548 => x"70800c54", +549 => x"0b0b893d", +550 => x"0d8c0c04", +551 => x"8c08028c", +552 => x"0cfb3d0d", +553 => x"800b8c08", +554 => x"fc050c8c", +555 => x"08880508", +556 => x"80259338", +557 => x"8c088805", +558 => x"08308c08", +559 => x"88050c81", +560 => x"0b8c08fc", +561 => x"050c8c08", +562 => x"8c050880", +563 => x"258c388c", +564 => x"088c0508", +565 => x"308c088c", +566 => x"050c8153", +567 => x"0b0b8c08", +568 => x"8c050852", +569 => x"8c088805", +570 => x"0851b13f", +571 => x"8008708c", +572 => x"08f8050c", +573 => x"540b0b8c", +574 => x"08fc0508", +575 => x"802e8c38", +576 => x"8c08f805", +577 => x"08308c08", +578 => x"f8050c8c", +579 => x"08f80508", +580 => x"70800c54", +581 => x"0b0b873d", +582 => x"0d8c0c04", +583 => x"8c08028c", +584 => x"0c707070", +585 => x"70810b8c", +586 => x"08fc050c", +587 => x"800b8c08", +588 => x"f8050c8c", +589 => x"088c0508", +590 => x"8c088805", +591 => x"0827ac38", +592 => x"8c08fc05", +593 => x"08802ea3", +594 => x"38800b8c", +595 => x"088c0508", +596 => x"2499388c", +597 => x"088c0508", +598 => x"108c088c", +599 => x"050c8c08", +600 => x"fc050810", +601 => x"8c08fc05", +602 => x"0cc9398c", +603 => x"08fc0508", +604 => x"802e80c9", +605 => x"388c088c", +606 => x"05088c08", +607 => x"88050826", +608 => x"a1388c08", +609 => x"8805088c", +610 => x"088c0508", +611 => x"318c0888", +612 => x"050c8c08", +613 => x"f805088c", +614 => x"08fc0508", +615 => x"078c08f8", +616 => x"050c8c08", +617 => x"fc050881", +618 => x"2a8c08fc", +619 => x"050c8c08", +620 => x"8c050881", +621 => x"2a8c088c", +622 => x"050cffaf", +623 => x"398c0890", +624 => x"0508802e", +625 => x"8f388c08", +626 => x"88050870", +627 => x"8c08f405", +628 => x"0c518d39", +629 => x"8c08f805", +630 => x"08708c08", +631 => x"f4050c51", +632 => x"8c08f405", +633 => x"08800c50", +634 => x"5050508c", +635 => x"0c047086", +636 => x"5186a03f", +637 => x"815180e7", +638 => x"be3ffc3d", +639 => x"0d873d70", +640 => x"70840552", +641 => x"0856530b", +642 => x"0b745281", +643 => x"8a940888", +644 => x"71050852", +645 => x"540b0b9f", +646 => x"e73f863d", +647 => x"0d047070", +648 => x"7070863d", +649 => x"8805530b", +650 => x"0b765275", +651 => x"88710508", +652 => x"52540b0b", +653 => x"9fca3f50", +654 => x"50505004", +655 => x"fc3d0d76", +656 => x"70797b55", +657 => x"5555558f", +658 => x"72278e38", +659 => x"72750783", +660 => x"06510b0b", +661 => x"70802eaf", +662 => x"38ff7205", +663 => x"520b0b71", +664 => x"ff2e9d38", +665 => x"72708105", +666 => x"540b0b33", +667 => x"74708105", +668 => x"5634ff72", +669 => x"05520b0b", +670 => x"71ff2e09", +671 => x"8106e538", +672 => x"74800c86", +673 => x"3d0d0474", +674 => x"51727084", +675 => x"05540b0b", +676 => x"08717084", +677 => x"05530b0b", +678 => x"0c727084", +679 => x"05540b0b", +680 => x"08717084", +681 => x"05530b0b", +682 => x"0c727084", +683 => x"05540b0b", +684 => x"08717084", +685 => x"05530b0b", +686 => x"0c727084", +687 => x"05540b0b", +688 => x"08717084", +689 => x"05530b0b", +690 => x"0cf07205", +691 => x"520b0b71", +692 => x"8f26ffb5", +693 => x"38837227", +694 => x"9c387270", +695 => x"8405540b", +696 => x"0b087170", +697 => x"8405530b", +698 => x"0b0cfc72", +699 => x"05520b0b", +700 => x"718326e6", +701 => x"3870540b", +702 => x"0bfede39", +703 => x"f73d0d7c", +704 => x"7052530b", +705 => x"0b858c3f", +706 => x"72540b0b", +707 => x"80085581", +708 => x"85e05681", +709 => x"57800881", +710 => x"055a8b3d", +711 => x"e4710559", +712 => x"530b0b82", +713 => x"59f47305", +714 => x"527b8871", +715 => x"05085253", +716 => x"0b0bb7ce", +717 => x"3f800830", +718 => x"70800807", +719 => x"9f2c8a07", +720 => x"800c530b", +721 => x"0b8b3d0d", +722 => x"04707073", +723 => x"52818a94", +724 => x"0851ffa8", +725 => x"3f505004", +726 => x"70707070", +727 => x"75530b0b", +728 => x"84d87305", +729 => x"08802e8d", +730 => x"3880530b", +731 => x"0b72800c", +732 => x"50505050", +733 => x"04818052", +734 => x"725180c1", +735 => x"cc3f8008", +736 => x"84d8140c", +737 => x"ff530b0b", +738 => x"8008802e", +739 => x"e0388008", +740 => x"540b0b9f", +741 => x"530b0b80", +742 => x"74708405", +743 => x"560cff73", +744 => x"05530b0b", +745 => x"807324c1", +746 => x"38807470", +747 => x"8405560c", +748 => x"ff730553", +749 => x"0b0b7280", +750 => x"25dd38ff", +751 => x"ac397070", +752 => x"70707577", +753 => x"55530b0b", +754 => x"9f742790", +755 => x"3896730c", +756 => x"ff520b0b", +757 => x"71800c50", +758 => x"50505004", +759 => x"84d87305", +760 => x"08520b0b", +761 => x"71802e97", +762 => x"38731010", +763 => x"72057008", +764 => x"79720c51", +765 => x"520b0b71", +766 => x"800c5050", +767 => x"50500472", +768 => x"51fed53f", +769 => x"ff528008", +770 => x"c93884d8", +771 => x"73050874", +772 => x"10107105", +773 => x"70087a72", +774 => x"0c515152", +775 => x"d839f93d", +776 => x"0d797b58", +777 => x"560b769f", +778 => x"2680f138", +779 => x"84d81608", +780 => x"540b0b73", +781 => x"802ead38", +782 => x"76101014", +783 => x"70085555", +784 => x"0b73802e", +785 => x"be388058", +786 => x"73812e8f", +787 => x"3873ff2e", +788 => x"a7388075", +789 => x"0c765173", +790 => x"2d80580b", +791 => x"0b77800c", +792 => x"893d0d04", +793 => x"7551fdf0", +794 => x"3fff5880", +795 => x"08ed3884", +796 => x"d8160854", +797 => x"0b0bc139", +798 => x"96760c81", +799 => x"0b800c89", +800 => x"3d0d0475", +801 => x"5182873f", +802 => x"76530b0b", +803 => x"80085275", +804 => x"5181be3f", +805 => x"8008800c", +806 => x"893d0d04", +807 => x"96760cff", +808 => x"0b800c89", +809 => x"3d0d04fc", +810 => x"3d0d7678", +811 => x"56530b0b", +812 => x"ff540b0b", +813 => x"749f2680", +814 => x"c13884d8", +815 => x"73050852", +816 => x"0b0b7180", +817 => x"2ebb3874", +818 => x"10107205", +819 => x"7008530b", +820 => x"0b530b0b", +821 => x"81540b0b", +822 => x"71802e9e", +823 => x"3882540b", +824 => x"0b71ff2e", +825 => x"95388354", +826 => x"0b0b7181", +827 => x"2e8c3880", +828 => x"730c7451", +829 => x"712d8054", +830 => x"0b0b7380", +831 => x"0c863d0d", +832 => x"047251fc", +833 => x"d33f8008", +834 => x"f13884d8", +835 => x"73050852", +836 => x"ffb53970", +837 => x"70735281", +838 => x"8a940851", +839 => x"fe803f50", +840 => x"50047070", +841 => x"7075530b", +842 => x"0b745281", +843 => x"8a940851", +844 => x"fd8c3f50", +845 => x"50500470", +846 => x"818a9408", +847 => x"51fc993f", +848 => x"50047070", +849 => x"7352818a", +850 => x"940851fe", +851 => x"da3f5050", +852 => x"04fc3d0d", +853 => x"800b819a", +854 => x"b80c7852", +855 => x"775180df", +856 => x"bc3f8008", +857 => x"540b0b80", +858 => x"08ff2e88", +859 => x"3873800c", +860 => x"863d0d04", +861 => x"819ab808", +862 => x"550b0b74", +863 => x"802eee38", +864 => x"7675710c", +865 => x"530b0b73", +866 => x"800c863d", +867 => x"0d0480df", +868 => x"873f0470", +869 => x"70707075", +870 => x"70718306", +871 => x"530b0b55", +872 => x"5270bf38", +873 => x"71700870", +874 => x"09f7fbfd", +875 => x"ff720506", +876 => x"70f88482", +877 => x"81800651", +878 => x"5152530b", +879 => x"0b70a138", +880 => x"84730570", +881 => x"087009f7", +882 => x"fbfdff72", +883 => x"050670f8", +884 => x"84828180", +885 => x"06515152", +886 => x"530b0b70", +887 => x"802ee138", +888 => x"72520b0b", +889 => x"7133510b", +890 => x"0b70802e", +891 => x"8c388172", +892 => x"05703352", +893 => x"520b70f6", +894 => x"38717431", +895 => x"800c5050", +896 => x"50500470", +897 => x"70707076", +898 => x"88710508", +899 => x"540b0b54", +900 => x"0b0b728d", +901 => x"38728415", +902 => x"0c72800c", +903 => x"50505050", +904 => x"04735275", +905 => x"51b1db3f", +906 => x"800b8815", +907 => x"0c800b84", +908 => x"150c8008", +909 => x"800c5050", +910 => x"505004fd", +911 => x"ad3d0d82", +912 => x"d63d0882", +913 => x"d83d0882", +914 => x"da3d0882", +915 => x"dc3d0844", +916 => x"5b454980", +917 => x"70658c05", +918 => x"2270832a", +919 => x"81327081", +920 => x"06515959", +921 => x"4947750b", +922 => x"672e0981", +923 => x"068c3863", +924 => x"90050867", +925 => x"2e098106", +926 => x"92386351", +927 => x"a2e03fff", +928 => x"56800881", +929 => x"ec38638c", +930 => x"0522570b", +931 => x"0b769a06", +932 => x"560b0b75", +933 => x"8a2ebf38", +934 => x"82c13d70", +935 => x"7182d43d", +936 => x"0c5b4380", +937 => x"0b82d43d", +938 => x"0c800b82", +939 => x"d33d0c80", +940 => x"46785b80", +941 => x"79337081", +942 => x"ff065959", +943 => x"56760b76", +944 => x"2e833881", +945 => x"5676a52e", +946 => x"81b13875", +947 => x"802e81ab", +948 => x"38811959", +949 => x"de39638e", +950 => x"05227090", +951 => x"2b575880", +952 => x"7624ffb4", +953 => x"3876fd06", +954 => x"560b0b75", +955 => x"82a33d23", +956 => x"77028405", +957 => x"89860523", +958 => x"639c0508", +959 => x"82a73d0c", +960 => x"63a40508", +961 => x"82a93d0c", +962 => x"9f3d7082", +963 => x"a13d0c82", +964 => x"a43d0c88", +965 => x"800b82a2", +966 => x"3d0c8880", +967 => x"0b82a53d", +968 => x"0c800b82", +969 => x"a63d0c60", +970 => x"530b0b78", +971 => x"52829f3d", +972 => x"70525695", +973 => x"cb3f8008", +974 => x"57800b80", +975 => x"08248e38", +976 => x"7551a39b", +977 => x"3f800880", +978 => x"2e8338ff", +979 => x"5782a23d", +980 => x"2270862a", +981 => x"70810651", +982 => x"57580b75", +983 => x"802e9038", +984 => x"638c0522", +985 => x"80c00756", +986 => x"0b0b7564", +987 => x"8c052376", +988 => x"560b0b75", +989 => x"800c82d5", +990 => x"3d0d0478", +991 => x"7b31570b", +992 => x"0b76802e", +993 => x"b1387a7a", +994 => x"0c76841b", +995 => x"0c82d33d", +996 => x"081782d4", +997 => x"3d0c881a", +998 => x"82d33d08", +999 => x"81710582", +1000 => x"d53d0c81", +1001 => x"71055157", +1002 => x"5a0b7587", +1003 => x"2480cb38", +1004 => x"65177933", +1005 => x"59460b77", +1006 => x"81ff0656", +1007 => x"0b0b7580", +1008 => x"2e93fe38", +1009 => x"81195980", +1010 => x"70714743", +1011 => x"5fff5e7e", +1012 => x"82d53d34", +1013 => x"7833580b", +1014 => x"0b7781ff", +1015 => x"06811a5a", +1016 => x"5de01d56", +1017 => x"0b0b7580", +1018 => x"d82687a1", +1019 => x"38751010", +1020 => x"81868405", +1021 => x"560b0b75", +1022 => x"080482d5", +1023 => x"3df00552", +1024 => x"6351fbff", +1025 => x"3f80088a", +1026 => x"a5386266", +1027 => x"187a335a", +1028 => x"475affa2", +1029 => x"397e9007", +1030 => x"5f0b0b7e", +1031 => x"842a7081", +1032 => x"0651560b", +1033 => x"0b7592ba", +1034 => x"387e862a", +1035 => x"70810651", +1036 => x"560b0b75", +1037 => x"802e92aa", +1038 => x"38606184", +1039 => x"05827205", +1040 => x"225a4256", +1041 => x"815c800b", +1042 => x"82d53d34", +1043 => x"7d42807e", +1044 => x"2486387e", +1045 => x"feff065f", +1046 => x"62783070", +1047 => x"7a079f2a", +1048 => x"64307066", +1049 => x"079f2a72", +1050 => x"07525951", +1051 => x"585b0b76", +1052 => x"802e918d", +1053 => x"387b812e", +1054 => x"8b9d3881", +1055 => x"7c259281", +1056 => x"387b822e", +1057 => x"8bd63881", +1058 => x"88e85b0b", +1059 => x"0b7a51fa", +1060 => x"823f8008", +1061 => x"5c0b0b7b", +1062 => x"5e7b6225", +1063 => x"8338615e", +1064 => x"82d43d33", +1065 => x"7081ff06", +1066 => x"57580b75", +1067 => x"802e90ba", +1068 => x"38811e5e", +1069 => x"7e818406", +1070 => x"400b0b7f", +1071 => x"80fa3864", +1072 => x"7e315780", +1073 => x"0b772580", +1074 => x"ef389077", +1075 => x"25b93881", +1076 => x"85e47a0c", +1077 => x"900b841b", +1078 => x"0c82d33d", +1079 => x"08900582", +1080 => x"d43d0c88", +1081 => x"1a82d33d", +1082 => x"08817105", +1083 => x"82d53d0c", +1084 => x"81710551", +1085 => x"575a0b75", +1086 => x"872485aa", +1087 => x"38f01757", +1088 => x"0b0b7690", +1089 => x"24c93881", +1090 => x"85e47a0c", +1091 => x"76841b0c", +1092 => x"82d33d08", +1093 => x"1782d43d", +1094 => x"0c881a82", +1095 => x"d33d0881", +1096 => x"710582d5", +1097 => x"3d0c8171", +1098 => x"0551575a", +1099 => x"0b758724", +1100 => x"8ff63882", +1101 => x"d43d3358", +1102 => x"0b0b7781", +1103 => x"ff06560b", +1104 => x"0b75802e", +1105 => x"86e83882", +1106 => x"d53dfc71", +1107 => x"057b0c58", +1108 => x"810b841b", +1109 => x"0c82d33d", +1110 => x"08810582", +1111 => x"d43d0c88", +1112 => x"1a82d33d", +1113 => x"08817105", +1114 => x"82d53d0c", +1115 => x"81710551", +1116 => x"575a0b75", +1117 => x"87248789", +1118 => x"387f8180", +1119 => x"2e84d738", +1120 => x"617c3157", +1121 => x"800b7725", +1122 => x"80fa3890", +1123 => x"7725b938", +1124 => x"8185f47a", +1125 => x"0c900b84", +1126 => x"1b0c82d3", +1127 => x"3d089005", +1128 => x"82d43d0c", +1129 => x"881a82d3", +1130 => x"3d088171", +1131 => x"0582d53d", +1132 => x"0c817105", +1133 => x"51575a0b", +1134 => x"75872484", +1135 => x"8138f017", +1136 => x"570b0b76", +1137 => x"9024c938", +1138 => x"8185f47a", +1139 => x"0c76841b", +1140 => x"0c82d33d", +1141 => x"081782d4", +1142 => x"3d0c881a", +1143 => x"82d33d08", +1144 => x"81710582", +1145 => x"d53d0c81", +1146 => x"71055157", +1147 => x"5a877625", +1148 => x"933882d5", +1149 => x"3df00552", +1150 => x"6351f887", +1151 => x"3f800886", +1152 => x"ad38625a", +1153 => x"7a0b7a0c", +1154 => x"7b841b0c", +1155 => x"82d33d08", +1156 => x"1c82d43d", +1157 => x"0c881a82", +1158 => x"d33d0881", +1159 => x"710582d5", +1160 => x"3d0c8171", +1161 => x"0551575a", +1162 => x"0b758724", +1163 => x"84eb387e", +1164 => x"822a7081", +1165 => x"0651560b", +1166 => x"0b75802e", +1167 => x"81813864", +1168 => x"7e315780", +1169 => x"0b772580", +1170 => x"f6389077", +1171 => x"25b93881", +1172 => x"85e47a0c", +1173 => x"900b841b", +1174 => x"0c82d33d", +1175 => x"08900582", +1176 => x"d43d0c88", +1177 => x"1a82d33d", +1178 => x"08817105", +1179 => x"82d53d0c", +1180 => x"81710551", +1181 => x"575a0b75", +1182 => x"87248485", +1183 => x"38f01757", +1184 => x"0b0b7690", +1185 => x"24c93881", +1186 => x"85e47a0c", +1187 => x"76841b0c", +1188 => x"82d33d08", +1189 => x"1782d43d", +1190 => x"0c82d23d", +1191 => x"08817105", +1192 => x"82d43d0c", +1193 => x"81710551", +1194 => x"56870b76", +1195 => x"25913882", +1196 => x"d53df005", +1197 => x"526351f6", +1198 => x"ca3f8008", +1199 => x"84f0387d", +1200 => x"567d6525", +1201 => x"83386456", +1202 => x"65164682", +1203 => x"d33d0884", +1204 => x"cb38800b", +1205 => x"82d33d0c", +1206 => x"625a6680", +1207 => x"2ef7d238", +1208 => x"6651b2d6", +1209 => x"3f80795c", +1210 => x"47f7c839", +1211 => x"7e90075f", +1212 => x"0b0b7e84", +1213 => x"2a708106", +1214 => x"51560b0b", +1215 => x"758cd538", +1216 => x"7e862a70", +1217 => x"81065156", +1218 => x"0b0b7580", +1219 => x"2e8cc538", +1220 => x"60618405", +1221 => x"82720522", +1222 => x"5a425680", +1223 => x"5c800b82", +1224 => x"d53d34fa", +1225 => x"a7397e90", +1226 => x"075f0b0b", +1227 => x"7e842a70", +1228 => x"81065156", +1229 => x"0b0b758c", +1230 => x"89387e86", +1231 => x"2a708106", +1232 => x"51560b0b", +1233 => x"75802e8b", +1234 => x"f9386061", +1235 => x"84057108", +1236 => x"902b7090", +1237 => x"2c515a42", +1238 => x"56807824", +1239 => x"89ac3881", +1240 => x"5cf9e939", +1241 => x"60618405", +1242 => x"71084742", +1243 => x"56648025", +1244 => x"f8e23864", +1245 => x"30457e84", +1246 => x"07793359", +1247 => x"5ff8d839", +1248 => x"8119597e", +1249 => x"90077933", +1250 => x"595ff8cb", +1251 => x"397c802e", +1252 => x"8caf3882", +1253 => x"b73d5b7c", +1254 => x"0b7b3481", +1255 => x"5c800b82", +1256 => x"d53d34f9", +1257 => x"f03982d5", +1258 => x"3df00552", +1259 => x"6351f4d3", +1260 => x"3f800882", +1261 => x"f93862f0", +1262 => x"18585afa", +1263 => x"c33982d5", +1264 => x"3df00552", +1265 => x"6351f4bb", +1266 => x"3f800882", +1267 => x"e13862f0", +1268 => x"18585afb", +1269 => x"ec39647e", +1270 => x"3157800b", +1271 => x"7725fba0", +1272 => x"38907725", +1273 => x"b9388185", +1274 => x"f47a0c90", +1275 => x"0b841b0c", +1276 => x"82d33d08", +1277 => x"900582d4", +1278 => x"3d0c881a", +1279 => x"82d33d08", +1280 => x"81710582", +1281 => x"d53d0c81", +1282 => x"71055157", +1283 => x"5a0b7587", +1284 => x"2480d638", +1285 => x"f017570b", +1286 => x"0b769024", +1287 => x"c9388185", +1288 => x"f47a0c76", +1289 => x"841b0c82", +1290 => x"d33d0817", +1291 => x"82d43d0c", +1292 => x"881a82d3", +1293 => x"3d088171", +1294 => x"0582d53d", +1295 => x"0c817105", +1296 => x"51575a87", +1297 => x"7625fab8", +1298 => x"3882d53d", +1299 => x"f0055263", +1300 => x"51f3b03f", +1301 => x"800881d6", +1302 => x"3862627d", +1303 => x"31585a0b", +1304 => x"768024fa", +1305 => x"a638fb9c", +1306 => x"3982d53d", +1307 => x"f0055263", +1308 => x"51f3903f", +1309 => x"800881b6", +1310 => x"3862f018", +1311 => x"585aff97", +1312 => x"3982d53d", +1313 => x"f0055263", +1314 => x"51f2f83f", +1315 => x"8008819e", +1316 => x"3862f018", +1317 => x"585afbe8", +1318 => x"3982d53d", +1319 => x"f0055263", +1320 => x"51f2e03f", +1321 => x"80088186", +1322 => x"38625afb", +1323 => x"82397e0a", +1324 => x"100a7081", +1325 => x"0651560b", +1326 => x"0b75802e", +1327 => x"f9bb38b0", +1328 => x"0b82b73d", +1329 => x"347c0284", +1330 => x"0589d505", +1331 => x"3482d53d", +1332 => x"ff84057a", +1333 => x"0c820b84", +1334 => x"1b0c82d3", +1335 => x"3d088205", +1336 => x"82d43d0c", +1337 => x"881a82d3", +1338 => x"3d088171", +1339 => x"0582d53d", +1340 => x"0c817105", +1341 => x"51575a87", +1342 => x"7625f8fd", +1343 => x"3882d53d", +1344 => x"58f01852", +1345 => x"6351f1fb", +1346 => x"3f8008a2", +1347 => x"38625a7f", +1348 => x"81802e09", +1349 => x"8106f8e8", +1350 => x"38fdbb39", +1351 => x"82d53df0", +1352 => x"05526351", +1353 => x"f1dd3f80", +1354 => x"08802efb", +1355 => x"a5386680", +1356 => x"2e863866", +1357 => x"51ae833f", +1358 => x"638c0522", +1359 => x"70862a70", +1360 => x"8106685a", +1361 => x"5157440b", +1362 => x"75802ef4", +1363 => x"a238ff56", +1364 => x"f49f3980", +1365 => x"0b82d53d", +1366 => x"34606184", +1367 => x"0571085d", +1368 => x"42567a80", +1369 => x"2e88d138", +1370 => x"7c80d32e", +1371 => x"85aa387e", +1372 => x"842a7081", +1373 => x"0651560b", +1374 => x"0b75859c", +1375 => x"38807e24", +1376 => x"f689387d", +1377 => x"530b0b75", +1378 => x"527a51ba", +1379 => x"d03f7d5c", +1380 => x"8008802e", +1381 => x"f5ff3880", +1382 => x"087b315c", +1383 => x"7d0b7c25", +1384 => x"f5f3387d", +1385 => x"5cf5ee39", +1386 => x"7e842a70", +1387 => x"81065156", +1388 => x"0b0b7587", +1389 => x"bb387e86", +1390 => x"2a708106", +1391 => x"51560b0b", +1392 => x"75802e87", +1393 => x"ab386061", +1394 => x"84057108", +1395 => x"52425665", +1396 => x"0b762378", +1397 => x"5bf1dc39", +1398 => x"78337081", +1399 => x"ff065758", +1400 => x"0b7580ec", +1401 => x"2efb9938", +1402 => x"7e900778", +1403 => x"81ff0681", +1404 => x"1b5b5e5f", +1405 => x"f3eb3960", +1406 => x"61840571", +1407 => x"085a4256", +1408 => x"820b8189", +1409 => x"84607207", +1410 => x"41495c80", +1411 => x"f85d800b", +1412 => x"82d53d34", +1413 => x"f4b63989", +1414 => x"7827a838", +1415 => x"ff1b5b8a", +1416 => x"52775180", +1417 => x"d8b43f80", +1418 => x"08b00556", +1419 => x"0b0b757b", +1420 => x"348a5277", +1421 => x"5180d7f6", +1422 => x"3f800858", +1423 => x"0b0b7789", +1424 => x"26da38ff", +1425 => x"1bb01957", +1426 => x"5b0b750b", +1427 => x"7b3482d5", +1428 => x"3d707c31", +1429 => x"ffb0055d", +1430 => x"56f4ba39", +1431 => x"ff1b788f", +1432 => x"06690557", +1433 => x"5b0b7533", +1434 => x"7b347784", +1435 => x"2a580b0b", +1436 => x"77802eda", +1437 => x"38ff1b78", +1438 => x"8f066905", +1439 => x"575b0b75", +1440 => x"337b3477", +1441 => x"842a580b", +1442 => x"0b77d138", +1443 => x"c1397e80", +1444 => x"c0077933", +1445 => x"595ff2bf", +1446 => x"3982b73d", +1447 => x"5b7c80c3", +1448 => x"2e91387e", +1449 => x"842a7081", +1450 => x"0651560b", +1451 => x"0b75802e", +1452 => x"82c83888", +1453 => x"530b0b80", +1454 => x"529d3d70", +1455 => x"5256bbcf", +1456 => x"3f75540b", +1457 => x"0b606184", +1458 => x"05710855", +1459 => x"7c540b0b", +1460 => x"6a530b0b", +1461 => x"425686e8", +1462 => x"3f80085c", +1463 => x"8008ff2e", +1464 => x"fccc3880", +1465 => x"0b82d53d", +1466 => x"34f3aa39", +1467 => x"78708105", +1468 => x"5a335d0b", +1469 => x"0b7caa2e", +1470 => x"85ef3880", +1471 => x"0bd01e71", +1472 => x"4057570b", +1473 => x"758926f1", +1474 => x"d8387610", +1475 => x"10107710", +1476 => x"057d05d0", +1477 => x"05797081", +1478 => x"055b33d0", +1479 => x"7105585e", +1480 => x"57897627", +1481 => x"e538765e", +1482 => x"76ff25f1", +1483 => x"b438ff5e", +1484 => x"f1af3981", +1485 => x"89987f84", +1486 => x"2a708106", +1487 => x"5157480b", +1488 => x"75818a38", +1489 => x"7e862a70", +1490 => x"81065156", +1491 => x"0b0b7580", +1492 => x"2e80fa38", +1493 => x"60618405", +1494 => x"82720522", +1495 => x"5a425682", +1496 => x"7f810657", +1497 => x"5c77802e", +1498 => x"f1dc3875", +1499 => x"802ef1d6", +1500 => x"387e7c07", +1501 => x"5f800b82", +1502 => x"d53d34f1", +1503 => x"cf39ab0b", +1504 => x"82d53d34", +1505 => x"783358f0", +1506 => x"ce398057", +1507 => x"0b0b7610", +1508 => x"10107710", +1509 => x"057d05d0", +1510 => x"05797081", +1511 => x"055b33d0", +1512 => x"7105585e", +1513 => x"57897627", +1514 => x"e3387645", +1515 => x"f0b3397e", +1516 => x"81800779", +1517 => x"33595ff0", +1518 => x"9e398189", +1519 => x"847f842a", +1520 => x"70810651", +1521 => x"57480b75", +1522 => x"802efef8", +1523 => x"38606184", +1524 => x"0571085a", +1525 => x"4256ff87", +1526 => x"397e8107", +1527 => x"7933595f", +1528 => x"eff53982", +1529 => x"d43d3356", +1530 => x"0b0b75ef", +1531 => x"e738a00b", +1532 => x"82d53d34", +1533 => x"783358ef", +1534 => x"de396061", +1535 => x"84054256", +1536 => x"8316337b", +1537 => x"34815cf7", +1538 => x"94397730", +1539 => x"58ad0b82", +1540 => x"d53d3481", +1541 => x"5cf0b539", +1542 => x"7a4a8070", +1543 => x"585c8853", +1544 => x"0b0b7b52", +1545 => x"9b3d7052", +1546 => x"58b8e43f", +1547 => x"7b7e2481", +1548 => x"94387610", +1549 => x"106a0556", +1550 => x"0b0b7508", +1551 => x"802eb638", +1552 => x"77540b0b", +1553 => x"7508530b", +1554 => x"0b82d53d", +1555 => x"ff880552", +1556 => x"685183ec", +1557 => x"3f8008ff", +1558 => x"2ef9d338", +1559 => x"80081c56", +1560 => x"0b0b757e", +1561 => x"248f3881", +1562 => x"17765d57", +1563 => x"757e2e09", +1564 => x"8106ffbe", +1565 => x"387b802e", +1566 => x"f09b3881", +1567 => x"1c526851", +1568 => x"a7c73f80", +1569 => x"08478008", +1570 => x"802ef9ac", +1571 => x"3888530b", +1572 => x"0b805277", +1573 => x"51b7f83f", +1574 => x"77557b54", +1575 => x"0b0b82d5", +1576 => x"3df69405", +1577 => x"530b0b66", +1578 => x"52685184", +1579 => x"8a3f8008", +1580 => x"7c2e0981", +1581 => x"06f8f738", +1582 => x"66678008", +1583 => x"05575b80", +1584 => x"7634efd1", +1585 => x"3977557b", +1586 => x"540b0b82", +1587 => x"d53df694", +1588 => x"05530b0b", +1589 => x"7b526851", +1590 => x"83dd3f80", +1591 => x"085c8008", +1592 => x"ff2ef8ca", +1593 => x"387a4aff", +1594 => x"8c397e0a", +1595 => x"100a7081", +1596 => x"0651560b", +1597 => x"0b75802e", +1598 => x"efba3882", +1599 => x"1e5eefb4", +1600 => x"397bfaca", +1601 => x"387e8106", +1602 => x"560b0b75", +1603 => x"802efabe", +1604 => x"380289ff", +1605 => x"055bb00b", +1606 => x"7b3482d5", +1607 => x"3d707c31", +1608 => x"ffb0055d", +1609 => x"56eeee39", +1610 => x"82d53df0", +1611 => x"05526351", +1612 => x"e9d13f80", +1613 => x"08f7f738", +1614 => x"6282d53d", +1615 => x"33595aef", +1616 => x"f7396061", +1617 => x"84057108", +1618 => x"5a425677", +1619 => x"8025f48f", +1620 => x"38fdb739", +1621 => x"60618405", +1622 => x"71085a42", +1623 => x"56805cf3", +1624 => x"bc396061", +1625 => x"84057108", +1626 => x"5a425681", +1627 => x"5cedd739", +1628 => x"60618405", +1629 => x"71086871", +1630 => x"0c527a5d", +1631 => x"4256eab3", +1632 => x"397bee83", +1633 => x"38ff1b78", +1634 => x"b706b007", +1635 => x"585b0b76", +1636 => x"0b7b3477", +1637 => x"832a580b", +1638 => x"0b77ea38", +1639 => x"7e810656", +1640 => x"0b0b7580", +1641 => x"2ef9a738", +1642 => x"76b02ef9", +1643 => x"a138ff1b", +1644 => x"5bb00b7b", +1645 => x"34fee339", +1646 => x"8189ac5b", +1647 => x"865cedd5", +1648 => x"3982d33d", +1649 => x"088a3880", +1650 => x"0b82d33d", +1651 => x"0cf6df39", +1652 => x"82d53df0", +1653 => x"05526351", +1654 => x"e8a93f80", +1655 => x"08f6cf38", +1656 => x"800b82d3", +1657 => x"3d0cf6c6", +1658 => x"39606184", +1659 => x"05710840", +1660 => x"42567d80", +1661 => x"25ebdd38", +1662 => x"ff793359", +1663 => x"5eebd839", +1664 => x"fc3d0d81", +1665 => x"8a940855", +1666 => x"b8150880", +1667 => x"2e973878", +1668 => x"540b0b77", +1669 => x"530b0b76", +1670 => x"52818a94", +1671 => x"0851e89b", +1672 => x"3f863d0d", +1673 => x"04745190", +1674 => x"c13f7854", +1675 => x"0b0b7753", +1676 => x"0b0b7652", +1677 => x"818a9408", +1678 => x"51e8803f", +1679 => x"863d0d04", +1680 => x"f63d0d7c", +1681 => x"7e615956", +1682 => x"58805674", +1683 => x"0b762ea0", +1684 => x"3876540b", +1685 => x"0b7e530b", +1686 => x"0b745277", +1687 => x"5182d53f", +1688 => x"80085580", +1689 => x"08ff2ea6", +1690 => x"3874800c", +1691 => x"8c3d0d04", +1692 => x"76540b0b", +1693 => x"75530b0b", +1694 => x"8c3df405", +1695 => x"52775182", +1696 => x"b33f8008", +1697 => x"558008ff", +1698 => x"2e098106", +1699 => x"dc388077", +1700 => x"0c818a78", +1701 => x"0c74800c", +1702 => x"8c3d0d04", +1703 => x"70707070", +1704 => x"77540b0b", +1705 => x"76530b0b", +1706 => x"7552818a", +1707 => x"940851ff", +1708 => x"8f3f5050", +1709 => x"505004ec", +1710 => x"3d0d6668", +1711 => x"6a6c6e73", +1712 => x"5c405d42", +1713 => x"42420b60", +1714 => x"802e819b", +1715 => x"38806008", +1716 => x"5a5d0b0b", +1717 => x"7c7a2781", +1718 => x"8338933d", +1719 => x"5b7b0884", +1720 => x"1d087d56", +1721 => x"7a08557c", +1722 => x"540b0b63", +1723 => x"530b0b40", +1724 => x"5efecd3f", +1725 => x"80085880", +1726 => x"08ff2e80", +1727 => x"fa38807a", +1728 => x"80083156", +1729 => x"567c7526", +1730 => x"83388156", +1731 => x"80087a27", +1732 => x"80da3875", +1733 => x"802e80d4", +1734 => x"3880081d", +1735 => x"5d60802e", +1736 => x"a7388056", +1737 => x"0b0b7580", +1738 => x"08259738", +1739 => x"751b550b", +1740 => x"0b743377", +1741 => x"70810559", +1742 => x"34811656", +1743 => x"770b7624", +1744 => x"eb387f08", +1745 => x"8405600c", +1746 => x"78708405", +1747 => x"5a08550b", +1748 => x"0b74802e", +1749 => x"b138797d", +1750 => x"26ff8238", +1751 => x"7c550b0b", +1752 => x"74800c96", +1753 => x"3d0d04ff", +1754 => x"5afee239", +1755 => x"7d7c0c7e", +1756 => x"841d0c7c", +1757 => x"55e83981", +1758 => x"8a620c80", +1759 => x"7c0c8008", +1760 => x"800c963d", +1761 => x"0d046080", +1762 => x"2e843874", +1763 => x"600c747c", +1764 => x"0cff1d80", +1765 => x"0c963d0d", +1766 => x"04fc3d0d", +1767 => x"79557854", +1768 => x"0b0b7753", +1769 => x"0b0b7652", +1770 => x"818a9408", +1771 => x"51fe883f", +1772 => x"863d0d04", +1773 => x"f83d0d7b", +1774 => x"7d7f8191", +1775 => x"94540b0b", +1776 => x"595755e3", +1777 => x"ce3f8008", +1778 => x"81269838", +1779 => x"74540b0b", +1780 => x"74802e88", +1781 => x"38757534", +1782 => x"81540b0b", +1783 => x"73800c8a", +1784 => x"3d0d0481", +1785 => x"89b45281", +1786 => x"919451be", +1787 => x"c93f8008", +1788 => x"81d93880", +1789 => x"08540b0b", +1790 => x"74802ee0", +1791 => x"3880ff76", +1792 => x"25d338ff", +1793 => x"8016530b", +1794 => x"0b8eff73", +1795 => x"2785b838", +1796 => x"f0801653", +1797 => x"0b0b83ef", +1798 => x"ff732782", +1799 => x"d038fc80", +1800 => x"8016530b", +1801 => x"0b80fbff", +1802 => x"ff732785", +1803 => x"c2388fff", +1804 => x"0a16530b", +1805 => x"0bf7c00a", +1806 => x"73278689", +1807 => x"38ff540b", +1808 => x"0bc00a76", +1809 => x"25ff9538", +1810 => x"75820a06", +1811 => x"709e2c70", +1812 => x"fc075151", +1813 => x"530b0b72", +1814 => x"75708105", +1815 => x"57347581", +1816 => x"fc0a0670", +1817 => x"982aff80", +1818 => x"0751530b", +1819 => x"0b727570", +1820 => x"81055734", +1821 => x"7587f080", +1822 => x"80067092", +1823 => x"2aff8007", +1824 => x"51530b0b", +1825 => x"72757081", +1826 => x"05573475", +1827 => x"8fe08006", +1828 => x"708c2aff", +1829 => x"80075153", +1830 => x"0b0b7275", +1831 => x"70810557", +1832 => x"34759fc0", +1833 => x"0670862a", +1834 => x"ff800751", +1835 => x"530b0b72", +1836 => x"75708105", +1837 => x"573475ff", +1838 => x"bf06ff80", +1839 => x"07530b0b", +1840 => x"72753486", +1841 => x"0b800c8a", +1842 => x"3d0d0481", +1843 => x"89bc5281", +1844 => x"919451bc", +1845 => x"e13f8008", +1846 => x"81f93875", +1847 => x"81ff0676", +1848 => x"882c7081", +1849 => x"ff068008", +1850 => x"5759540b", +1851 => x"0b587480", +1852 => x"2efde938", +1853 => x"76802efd", +1854 => x"d3388008", +1855 => x"80ff1870", +1856 => x"81ff0651", +1857 => x"540b0b56", +1858 => x"729e2683", +1859 => x"38815680", +1860 => x"08a01870", +1861 => x"81ff0651", +1862 => x"540b0b54", +1863 => x"0b0b728f", +1864 => x"26853881", +1865 => x"540b0b75", +1866 => x"7407530b", +1867 => x"0b72802e", +1868 => x"b4388008", +1869 => x"c019540b", +1870 => x"0b5672be", +1871 => x"26833881", +1872 => x"568008ff", +1873 => x"80197081", +1874 => x"ff065154", +1875 => x"0b0b540b", +1876 => x"0b7280fc", +1877 => x"26853881", +1878 => x"540b0b75", +1879 => x"7407530b", +1880 => x"0b7280da", +1881 => x"38ff0b80", +1882 => x"0c8a3d0d", +1883 => x"04fcd080", +1884 => x"16530b0b", +1885 => x"ff540b0b", +1886 => x"8fff7327", +1887 => x"fcde3875", +1888 => x"83e08006", +1889 => x"708c2ae0", +1890 => x"0751530b", +1891 => x"0b727570", +1892 => x"81055734", +1893 => x"759fc006", +1894 => x"70862aff", +1895 => x"80075153", +1896 => x"0b0b7275", +1897 => x"70810557", +1898 => x"3475ffbf", +1899 => x"06ff8007", +1900 => x"530b0b72", +1901 => x"7534830b", +1902 => x"800c8a3d", +1903 => x"0d047675", +1904 => x"70810557", +1905 => x"34777534", +1906 => x"82540b0b", +1907 => x"73800c8a", +1908 => x"3d0d0481", +1909 => x"89c45281", +1910 => x"919451ba", +1911 => x"d93f8008", +1912 => x"80eb3875", +1913 => x"81ff0676", +1914 => x"882c7081", +1915 => x"ff068008", +1916 => x"5759540b", +1917 => x"0b587480", +1918 => x"2efbe138", +1919 => x"76802efb", +1920 => x"cb388008", +1921 => x"530b0b81", +1922 => x"a0772785", +1923 => x"3881530b", +1924 => x"0b7681ff", +1925 => x"2efece38", +1926 => x"81707406", +1927 => x"540b0b54", +1928 => x"0b0b7280", +1929 => x"2efebe38", +1930 => x"8008530b", +1931 => x"0b81a078", +1932 => x"27853873", +1933 => x"530b0b77", +1934 => x"81ff2efe", +1935 => x"a8387274", +1936 => x"06530b0b", +1937 => x"72802efe", +1938 => x"9c38fef2", +1939 => x"398189cc", +1940 => x"52819194", +1941 => x"51b9df3f", +1942 => x"8008faf0", +1943 => x"38800876", +1944 => x"81ff0677", +1945 => x"882c7081", +1946 => x"ff065955", +1947 => x"59598154", +1948 => x"0b0b7480", +1949 => x"2efae538", +1950 => x"75802e82", +1951 => x"b438df16", +1952 => x"530b0b72", +1953 => x"80dd26fd", +1954 => x"dc38df18", +1955 => x"530b0b72", +1956 => x"80dd26fd", +1957 => x"d0387608", +1958 => x"9c387377", +1959 => x"0c9b7570", +1960 => x"81055734", +1961 => x"a4757081", +1962 => x"05573480", +1963 => x"c2757081", +1964 => x"05573483", +1965 => x"59757570", +1966 => x"81055734", +1967 => x"77753482", +1968 => x"19800c8a", +1969 => x"3d0d0475", +1970 => x"8fc00670", +1971 => x"862ac007", +1972 => x"51530b0b", +1973 => x"72757081", +1974 => x"05573475", +1975 => x"ffbf06ff", +1976 => x"8007530b", +1977 => x"0b727534", +1978 => x"82540b0b", +1979 => x"fdde3975", +1980 => x"80f08080", +1981 => x"0670922a", +1982 => x"f0075153", +1983 => x"0b0b7275", +1984 => x"70810557", +1985 => x"34758fe0", +1986 => x"8006708c", +1987 => x"2aff8007", +1988 => x"51530b0b", +1989 => x"72757081", +1990 => x"05573475", +1991 => x"9fc00670", +1992 => x"862aff80", +1993 => x"0751530b", +1994 => x"0b727570", +1995 => x"81055734", +1996 => x"75ffbf06", +1997 => x"ff800753", +1998 => x"0b0b7275", +1999 => x"34840b80", +2000 => x"0c8a3d0d", +2001 => x"047581c0", +2002 => x"0a067098", +2003 => x"2af80751", +2004 => x"530b0b72", +2005 => x"75708105", +2006 => x"57347587", +2007 => x"f0808006", +2008 => x"70922aff", +2009 => x"80075153", +2010 => x"0b0b7275", +2011 => x"70810557", +2012 => x"34758fe0", +2013 => x"8006708c", +2014 => x"2aff8007", +2015 => x"51530b0b", +2016 => x"72757081", +2017 => x"05573475", +2018 => x"9fc00670", +2019 => x"862aff80", +2020 => x"0751530b", +2021 => x"0b727570", +2022 => x"81055734", +2023 => x"75ffbf06", +2024 => x"ff800753", +2025 => x"0b0b7275", +2026 => x"34850b80", +2027 => x"0c8a3d0d", +2028 => x"04760880", +2029 => x"2e9d3880", +2030 => x"08770c9b", +2031 => x"75708105", +2032 => x"5734a875", +2033 => x"70810557", +2034 => x"3480c275", +2035 => x"70810557", +2036 => x"34835977", +2037 => x"75348119", +2038 => x"800c8a3d", +2039 => x"0d04fa3d", +2040 => x"0d78818a", +2041 => x"9408540b", +2042 => x"0b55b873", +2043 => x"0508802e", +2044 => x"81ce388c", +2045 => x"15227083", +2046 => x"ffff0670", +2047 => x"832a8132", +2048 => x"70810651", +2049 => x"55555672", +2050 => x"802e80ea", +2051 => x"3873842a", +2052 => x"81328106", +2053 => x"57ff530b", +2054 => x"0b76818b", +2055 => x"3873822a", +2056 => x"70810651", +2057 => x"530b0b72", +2058 => x"802ebf38", +2059 => x"b0150854", +2060 => x"0b0b7380", +2061 => x"2e9e3880", +2062 => x"c015530b", +2063 => x"0b73732e", +2064 => x"8f387352", +2065 => x"818a9408", +2066 => x"5188a53f", +2067 => x"8c152256", +2068 => x"76b0160c", +2069 => x"75db0653", +2070 => x"0b0b728c", +2071 => x"1623800b", +2072 => x"84160c90", +2073 => x"1508750c", +2074 => x"72560b0b", +2075 => x"75880753", +2076 => x"0b0b728c", +2077 => x"16239015", +2078 => x"08802e80", +2079 => x"cb388c15", +2080 => x"22708106", +2081 => x"55530b0b", +2082 => x"73a43872", +2083 => x"0a100a70", +2084 => x"81065153", +2085 => x"0b0b7287", +2086 => x"38941508", +2087 => x"540b0b73", +2088 => x"88160c80", +2089 => x"530b0b72", +2090 => x"800c883d", +2091 => x"0d04800b", +2092 => x"88160c94", +2093 => x"15083098", +2094 => x"160c8053", +2095 => x"0b0be839", +2096 => x"725183a6", +2097 => x"3ffeac39", +2098 => x"745194c6", +2099 => x"3f8c1522", +2100 => x"70810655", +2101 => x"530b0b73", +2102 => x"802effaf", +2103 => x"38d039f8", +2104 => x"3d0d7a58", +2105 => x"0b0b7780", +2106 => x"2e81a938", +2107 => x"818a9408", +2108 => x"540b0bb8", +2109 => x"1408802e", +2110 => x"80f9388c", +2111 => x"18227090", +2112 => x"2b70902c", +2113 => x"70832a81", +2114 => x"3281065c", +2115 => x"5157540b", +2116 => x"0b7880d7", +2117 => x"38901808", +2118 => x"570b0b76", +2119 => x"802e80cb", +2120 => x"38770877", +2121 => x"3177790c", +2122 => x"7683067a", +2123 => x"5855550b", +2124 => x"73853894", +2125 => x"1808560b", +2126 => x"0b758819", +2127 => x"0c807525", +2128 => x"aa387453", +2129 => x"0b0b7652", +2130 => x"9c180851", +2131 => x"a4180854", +2132 => x"0b0b732d", +2133 => x"800b8008", +2134 => x"2580cd38", +2135 => x"80081775", +2136 => x"80083156", +2137 => x"570b7480", +2138 => x"24d83880", +2139 => x"0b800c8a", +2140 => x"3d0d0473", +2141 => x"5181f33f", +2142 => x"8c182270", +2143 => x"902b7090", +2144 => x"2c70832a", +2145 => x"81328106", +2146 => x"5c515754", +2147 => x"0b0b78db", +2148 => x"38ff8239", +2149 => x"80c1df52", +2150 => x"818a9408", +2151 => x"5191973f", +2152 => x"8008800c", +2153 => x"8a3d0d04", +2154 => x"8c182280", +2155 => x"c007540b", +2156 => x"0b738c19", +2157 => x"23ff0b80", +2158 => x"0c8a3d0d", +2159 => x"04707251", +2160 => x"800b710c", +2161 => x"800b8472", +2162 => x"050c800b", +2163 => x"8872050c", +2164 => x"028e0522", +2165 => x"8c720523", +2166 => x"02920522", +2167 => x"8e720523", +2168 => x"800b9072", +2169 => x"050c800b", +2170 => x"9472050c", +2171 => x"800b9872", +2172 => x"050c709c", +2173 => x"72050c80", +2174 => x"f3d60ba0", +2175 => x"72050c80", +2176 => x"f4a90ba4", +2177 => x"72050c80", +2178 => x"f5bc0ba8", +2179 => x"72050c80", +2180 => x"f6960bac", +2181 => x"72050c50", +2182 => x"04fa3d0d", +2183 => x"797080dc", +2184 => x"298c7105", +2185 => x"540b0b7a", +2186 => x"530b0b56", +2187 => x"57949a3f", +2188 => x"80088008", +2189 => x"55568008", +2190 => x"802ea838", +2191 => x"80088c05", +2192 => x"540b0b80", +2193 => x"0b80080c", +2194 => x"76800884", +2195 => x"050c7380", +2196 => x"0888050c", +2197 => x"74530b0b", +2198 => x"80527351", +2199 => x"a4b13f75", +2200 => x"540b0b73", +2201 => x"800c883d", +2202 => x"0d04fc3d", +2203 => x"0d7680c7", +2204 => x"940bbc72", +2205 => x"050c5581", +2206 => x"0bb8160c", +2207 => x"800b84dc", +2208 => x"160c830b", +2209 => x"84e0160c", +2210 => x"84e81584", +2211 => x"e4160c74", +2212 => x"540b0b80", +2213 => x"530b0b84", +2214 => x"52841508", +2215 => x"51fe9e3f", +2216 => x"74540b0b", +2217 => x"81530b0b", +2218 => x"89528815", +2219 => x"0851fe8d", +2220 => x"3f74540b", +2221 => x"0b82530b", +2222 => x"0b8a528c", +2223 => x"150851fd", +2224 => x"fc3f863d", +2225 => x"0d04f93d", +2226 => x"0d79818a", +2227 => x"9408540b", +2228 => x"0b57b873", +2229 => x"0508802e", +2230 => x"80ce3884", +2231 => x"dc730556", +2232 => x"88160884", +2233 => x"1708ff05", +2234 => x"55558074", +2235 => x"24a2388c", +2236 => x"15227090", +2237 => x"2b70902c", +2238 => x"51540b0b", +2239 => x"5872802e", +2240 => x"80cd3880", +2241 => x"dc15ff15", +2242 => x"55550b73", +2243 => x"8025e038", +2244 => x"7508530b", +2245 => x"0b72802e", +2246 => x"9f387256", +2247 => x"88160884", +2248 => x"1708ff05", +2249 => x"5555c339", +2250 => x"7251febe", +2251 => x"3f818a94", +2252 => x"0884dc05", +2253 => x"56ffa939", +2254 => x"84527651", +2255 => x"fddb3f80", +2256 => x"08760c80", +2257 => x"08802e80", +2258 => x"c0388008", +2259 => x"56ce3981", +2260 => x"0b8c1623", +2261 => x"72750c72", +2262 => x"88160c72", +2263 => x"84160c72", +2264 => x"90160c72", +2265 => x"94160c72", +2266 => x"98160cff", +2267 => x"0b8e1623", +2268 => x"72b0160c", +2269 => x"72b4160c", +2270 => x"7280c416", +2271 => x"0c7280c8", +2272 => x"160c7480", +2273 => x"0c893d0d", +2274 => x"048c770c", +2275 => x"800b800c", +2276 => x"893d0d04", +2277 => x"707080c1", +2278 => x"df527351", +2279 => x"8d983f50", +2280 => x"50047081", +2281 => x"8a940851", +2282 => x"eb3f5004", +2283 => x"fb3d0d77", +2284 => x"705256a3", +2285 => x"873f8191", +2286 => x"f00b8805", +2287 => x"08847105", +2288 => x"08fc0670", +2289 => x"7b319fef", +2290 => x"05e08006", +2291 => x"e0800556", +2292 => x"56530b0b", +2293 => x"a0807424", +2294 => x"96388052", +2295 => x"7551abbb", +2296 => x"3f8191f8", +2297 => x"0815530b", +2298 => x"0b728008", +2299 => x"2e913875", +2300 => x"51a2ca3f", +2301 => x"80530b0b", +2302 => x"72800c87", +2303 => x"3d0d0473", +2304 => x"30527551", +2305 => x"ab953f80", +2306 => x"08ff2eab", +2307 => x"388191f0", +2308 => x"0b880508", +2309 => x"75753181", +2310 => x"07847205", +2311 => x"0c530b0b", +2312 => x"8191b408", +2313 => x"74318191", +2314 => x"b40c7551", +2315 => x"a28f3f81", +2316 => x"0b800c87", +2317 => x"3d0d0480", +2318 => x"527551aa", +2319 => x"de3f8191", +2320 => x"f00b8805", +2321 => x"08800871", +2322 => x"3156530b", +2323 => x"0b8f7525", +2324 => x"ff9d3880", +2325 => x"088191e4", +2326 => x"08318191", +2327 => x"b40c7481", +2328 => x"0784140c", +2329 => x"7551a1d5", +2330 => x"3f80530b", +2331 => x"0bff8939", +2332 => x"f63d0d7c", +2333 => x"7e540b0b", +2334 => x"5b72802e", +2335 => x"82a2387a", +2336 => x"51a1b93f", +2337 => x"f8730584", +2338 => x"71050870", +2339 => x"fe067073", +2340 => x"05847105", +2341 => x"08fc065d", +2342 => x"5859540b", +2343 => x"0b588191", +2344 => x"f808752e", +2345 => x"83833878", +2346 => x"84160c80", +2347 => x"73810654", +2348 => x"0b0b5a72", +2349 => x"0b7a2e81", +2350 => x"eb387815", +2351 => x"84710508", +2352 => x"81065153", +2353 => x"0b0b72a3", +2354 => x"38781757", +2355 => x"7981fc38", +2356 => x"88150853", +2357 => x"0b0b7281", +2358 => x"91f82e83", +2359 => x"9c388c15", +2360 => x"08708c15", +2361 => x"0c738872", +2362 => x"050c5676", +2363 => x"81078419", +2364 => x"0c761877", +2365 => x"710c530b", +2366 => x"0b79819f", +2367 => x"3883ff77", +2368 => x"2781da38", +2369 => x"76892a77", +2370 => x"832a5653", +2371 => x"0b0b7280", +2372 => x"2e80c038", +2373 => x"76862ab8", +2374 => x"05558473", +2375 => x"27b53880", +2376 => x"db730555", +2377 => x"947327ab", +2378 => x"38768c2a", +2379 => x"80ee0555", +2380 => x"80d47327", +2381 => x"9e38768f", +2382 => x"2a80f705", +2383 => x"5582d473", +2384 => x"27913876", +2385 => x"922a80fc", +2386 => x"05558ad4", +2387 => x"73278438", +2388 => x"80fe550b", +2389 => x"0b741010", +2390 => x"108191f0", +2391 => x"05887105", +2392 => x"0855560b", +2393 => x"730b762e", +2394 => x"82cd3884", +2395 => x"1408fc06", +2396 => x"530b0b76", +2397 => x"73278f38", +2398 => x"88140854", +2399 => x"0b0b7376", +2400 => x"2e098106", +2401 => x"e6388c14", +2402 => x"08708c1a", +2403 => x"0c74881a", +2404 => x"0c788872", +2405 => x"050c5677", +2406 => x"8c150c7a", +2407 => x"519f9e3f", +2408 => x"8c3d0d04", +2409 => x"77087871", +2410 => x"31597705", +2411 => x"88190854", +2412 => x"0b0b5772", +2413 => x"8191f82e", +2414 => x"80ea388c", +2415 => x"1808708c", +2416 => x"150c7388", +2417 => x"72050c56", +2418 => x"fdf03988", +2419 => x"15088c16", +2420 => x"08708c73", +2421 => x"050c5788", +2422 => x"170cfe8f", +2423 => x"3976832a", +2424 => x"70540b0b", +2425 => x"55800b75", +2426 => x"2481a338", +2427 => x"72822c81", +2428 => x"712b8191", +2429 => x"f4080781", +2430 => x"91f00b84", +2431 => x"050c530b", +2432 => x"0b741010", +2433 => x"108191f0", +2434 => x"05887105", +2435 => x"0855560b", +2436 => x"0b758c19", +2437 => x"0c738819", +2438 => x"0c778817", +2439 => x"0c778c15", +2440 => x"0cfef839", +2441 => x"815afd92", +2442 => x"39781773", +2443 => x"8106540b", +2444 => x"0b57729a", +2445 => x"38770878", +2446 => x"71315977", +2447 => x"058c1908", +2448 => x"881a0871", +2449 => x"8c72050c", +2450 => x"8872050c", +2451 => x"57570b0b", +2452 => x"76810784", +2453 => x"190c7781", +2454 => x"91f00b88", +2455 => x"050c8191", +2456 => x"ec087726", +2457 => x"feb53881", +2458 => x"91e80852", +2459 => x"7a51fabc", +2460 => x"3f7a519d", +2461 => x"c83ffea8", +2462 => x"3981788c", +2463 => x"150c7888", +2464 => x"150c738c", +2465 => x"1a0c7388", +2466 => x"1a0c5afc", +2467 => x"de398315", +2468 => x"70822c81", +2469 => x"712b8191", +2470 => x"f4080781", +2471 => x"91f00b84", +2472 => x"050c5153", +2473 => x"0b0b7410", +2474 => x"10108191", +2475 => x"f0058871", +2476 => x"05085556", +2477 => x"fed93974", +2478 => x"530b0b80", +2479 => x"7524a938", +2480 => x"72822c81", +2481 => x"712b8191", +2482 => x"f4080781", +2483 => x"91f00b84", +2484 => x"050c530b", +2485 => x"0b758c19", +2486 => x"0c738819", +2487 => x"0c778817", +2488 => x"0c778c15", +2489 => x"0cfdb439", +2490 => x"83157082", +2491 => x"2c81712b", +2492 => x"8191f408", +2493 => x"078191f0", +2494 => x"0b84050c", +2495 => x"51530b0b", +2496 => x"d439f23d", +2497 => x"0d606288", +2498 => x"71050870", +2499 => x"57575f5a", +2500 => x"74802e81", +2501 => x"9f388c1a", +2502 => x"2270832a", +2503 => x"81327081", +2504 => x"06515558", +2505 => x"0b738638", +2506 => x"901a0893", +2507 => x"387951f1", +2508 => x"ad3fff54", +2509 => x"0b0b8008", +2510 => x"80fa388c", +2511 => x"1a22587d", +2512 => x"08578078", +2513 => x"83ffff06", +2514 => x"700a100a", +2515 => x"70810651", +2516 => x"56575573", +2517 => x"0b752e80", +2518 => x"e2387491", +2519 => x"38760884", +2520 => x"18088819", +2521 => x"5956590b", +2522 => x"74802ef1", +2523 => x"3874540b", +2524 => x"0b888075", +2525 => x"27863888", +2526 => x"80540b0b", +2527 => x"73530b0b", +2528 => x"78529c1a", +2529 => x"0851a41a", +2530 => x"08540b0b", +2531 => x"732d800b", +2532 => x"80082583", +2533 => x"86388008", +2534 => x"19758008", +2535 => x"317f8805", +2536 => x"08800831", +2537 => x"70618805", +2538 => x"0c565659", +2539 => x"73ffab38", +2540 => x"80540b0b", +2541 => x"73800c90", +2542 => x"3d0d0475", +2543 => x"81327081", +2544 => x"06764151", +2545 => x"540b0b73", +2546 => x"802e81d0", +2547 => x"38749138", +2548 => x"76088418", +2549 => x"08881959", +2550 => x"56590b74", +2551 => x"802ef138", +2552 => x"881a0878", +2553 => x"83ffff06", +2554 => x"70892a70", +2555 => x"81065156", +2556 => x"59567380", +2557 => x"2e839e38", +2558 => x"7575278f", +2559 => x"3877872a", +2560 => x"70810651", +2561 => x"540b0b73", +2562 => x"82d63874", +2563 => x"76278338", +2564 => x"74560b0b", +2565 => x"75530b0b", +2566 => x"78527908", +2567 => x"5196f93f", +2568 => x"881a0876", +2569 => x"31881b0c", +2570 => x"7908167a", +2571 => x"0c74560b", +2572 => x"0b751975", +2573 => x"77317f88", +2574 => x"05087831", +2575 => x"70618805", +2576 => x"0c565659", +2577 => x"73802efe", +2578 => x"e7388c1a", +2579 => x"2258fefd", +2580 => x"39777854", +2581 => x"0b0b7953", +2582 => x"0b0b7b52", +2583 => x"5696b93f", +2584 => x"881a0878", +2585 => x"31881b0c", +2586 => x"7908187a", +2587 => x"0c7c7631", +2588 => x"5d0b0b7c", +2589 => x"8e387951", +2590 => x"f0e53f80", +2591 => x"08819c38", +2592 => x"80085f75", +2593 => x"19757731", +2594 => x"7f880508", +2595 => x"78317061", +2596 => x"88050c56", +2597 => x"56597380", +2598 => x"2efe9538", +2599 => x"74819438", +2600 => x"76088418", +2601 => x"08881959", +2602 => x"56590b74", +2603 => x"802ef138", +2604 => x"74530b0b", +2605 => x"8a527851", +2606 => x"94a33f80", +2607 => x"08793181", +2608 => x"055d8008", +2609 => x"84388115", +2610 => x"5d815f7c", +2611 => x"58747d27", +2612 => x"83387458", +2613 => x"941a0888", +2614 => x"1b087105", +2615 => x"575c807a", +2616 => x"085c540b", +2617 => x"0b901a08", +2618 => x"7b278538", +2619 => x"81540b0b", +2620 => x"75782585", +2621 => x"387380c2", +2622 => x"387b7824", +2623 => x"fed3387b", +2624 => x"530b0b78", +2625 => x"529c1a08", +2626 => x"51a41a08", +2627 => x"540b0b73", +2628 => x"2d800856", +2629 => x"80088024", +2630 => x"fed3388c", +2631 => x"1a2280c0", +2632 => x"07540b0b", +2633 => x"738c1b23", +2634 => x"ff540b0b", +2635 => x"73800c90", +2636 => x"3d0d047e", +2637 => x"ff9538fe", +2638 => x"f7397553", +2639 => x"0b0b7852", +2640 => x"7a5194d4", +2641 => x"3f790816", +2642 => x"7a0c7951", +2643 => x"ef913f80", +2644 => x"08c9387c", +2645 => x"76315d0b", +2646 => x"0b7cfea7", +2647 => x"38fe9739", +2648 => x"901a087a", +2649 => x"08713176", +2650 => x"71057056", +2651 => x"5a575281", +2652 => x"8a940851", +2653 => x"97c83f80", +2654 => x"08802eff", +2655 => x"9e388008", +2656 => x"901b0c80", +2657 => x"08167a0c", +2658 => x"77941b0c", +2659 => x"74881b0c", +2660 => x"7456fcf7", +2661 => x"39790858", +2662 => x"901a0878", +2663 => x"27853881", +2664 => x"540b0b75", +2665 => x"75278438", +2666 => x"73bd3894", +2667 => x"1a08560b", +2668 => x"0b757526", +2669 => x"80e13875", +2670 => x"530b0b78", +2671 => x"529c1a08", +2672 => x"51a41a08", +2673 => x"540b0b73", +2674 => x"2d800856", +2675 => x"80088024", +2676 => x"fcdd388c", +2677 => x"1a2280c0", +2678 => x"07540b0b", +2679 => x"738c1b23", +2680 => x"ff540b0b", +2681 => x"fec63975", +2682 => x"530b0b78", +2683 => x"52775193", +2684 => x"a73f7908", +2685 => x"167a0c79", +2686 => x"51ede43f", +2687 => x"8008802e", +2688 => x"fcad388c", +2689 => x"1a2280c0", +2690 => x"07540b0b", +2691 => x"738c1b23", +2692 => x"ff540b0b", +2693 => x"fe963974", +2694 => x"75540b0b", +2695 => x"79530b0b", +2696 => x"78525692", +2697 => x"f33f881a", +2698 => x"08753188", +2699 => x"1b0c7908", +2700 => x"157a0cfb", +2701 => x"fa39f93d", +2702 => x"0d797b58", +2703 => x"530b0b80", +2704 => x"0b818a94", +2705 => x"08530b0b", +2706 => x"5672722e", +2707 => x"80d03884", +2708 => x"dc730555", +2709 => x"0b0b7476", +2710 => x"2e80c338", +2711 => x"88150884", +2712 => x"1608ff05", +2713 => x"540b0b54", +2714 => x"0b0b8073", +2715 => x"24a3388c", +2716 => x"14227090", +2717 => x"2b70902c", +2718 => x"51530b0b", +2719 => x"587180ed", +2720 => x"3880dc14", +2721 => x"ff14540b", +2722 => x"0b540b0b", +2723 => x"728025df", +2724 => x"38740855", +2725 => x"0b0b74c4", +2726 => x"38818a94", +2727 => x"085284dc", +2728 => x"7205550b", +2729 => x"0b74802e", +2730 => x"bd388815", +2731 => x"08841608", +2732 => x"ff05540b", +2733 => x"0b540b0b", +2734 => x"807324a2", +2735 => x"388c1422", +2736 => x"70902b70", +2737 => x"902c5153", +2738 => x"0b0b5871", +2739 => x"b33880dc", +2740 => x"14ff1454", +2741 => x"0b0b540b", +2742 => x"0b728025", +2743 => x"e0387408", +2744 => x"550b0b74", +2745 => x"c5387580", +2746 => x"0c893d0d", +2747 => x"04735176", +2748 => x"2d758008", +2749 => x"0780dc15", +2750 => x"ff155555", +2751 => x"56ff8d39", +2752 => x"7351762d", +2753 => x"75800807", +2754 => x"80dc15ff", +2755 => x"15555556", +2756 => x"c839ea3d", +2757 => x"0d688c71", +2758 => x"0522700a", +2759 => x"100a8106", +2760 => x"57585674", +2761 => x"80ee388e", +2762 => x"16227090", +2763 => x"2b70902c", +2764 => x"51555880", +2765 => x"7424b538", +2766 => x"983dc405", +2767 => x"530b0b73", +2768 => x"52818a94", +2769 => x"0851a298", +2770 => x"3f800b80", +2771 => x"08249938", +2772 => x"7983e080", +2773 => x"06540b0b", +2774 => x"7380c080", +2775 => x"2e819f38", +2776 => x"73828080", +2777 => x"2e81a138", +2778 => x"8c162257", +2779 => x"0b0b7690", +2780 => x"8007540b", +2781 => x"0b738c17", +2782 => x"23888052", +2783 => x"818a9408", +2784 => x"5181c63f", +2785 => x"80089f38", +2786 => x"8c162282", +2787 => x"07540b0b", +2788 => x"738c1723", +2789 => x"80c31670", +2790 => x"770c9017", +2791 => x"0c810b94", +2792 => x"170c983d", +2793 => x"0d04818a", +2794 => x"940880c7", +2795 => x"940bbc72", +2796 => x"050c540b", +2797 => x"0b8c1622", +2798 => x"81800754", +2799 => x"0b0b738c", +2800 => x"17238008", +2801 => x"760c8008", +2802 => x"90170c88", +2803 => x"800b9417", +2804 => x"0c74802e", +2805 => x"cd388e16", +2806 => x"2270902b", +2807 => x"70902c53", +2808 => x"0b0b5558", +2809 => x"aacb3f80", +2810 => x"08802eff", +2811 => x"b5388c16", +2812 => x"22810754", +2813 => x"0b0b738c", +2814 => x"1723983d", +2815 => x"0d04810b", +2816 => x"8c172258", +2817 => x"55fee539", +2818 => x"a8160880", +2819 => x"f5bc2e09", +2820 => x"8106fed4", +2821 => x"388c1622", +2822 => x"88800754", +2823 => x"0b0b738c", +2824 => x"17238880", +2825 => x"0b80cc17", +2826 => x"0cfece39", +2827 => x"70707352", +2828 => x"818a9408", +2829 => x"51933f50", +2830 => x"50047070", +2831 => x"7352818a", +2832 => x"940851f0", +2833 => x"ab3f5050", +2834 => x"04f33d0d", +2835 => x"7f618b71", +2836 => x"0570f806", +2837 => x"5c55555e", +2838 => x"72962683", +2839 => x"38905980", +2840 => x"0b792474", +2841 => x"7a260753", +2842 => x"0b0b8054", +2843 => x"0b0b7274", +2844 => x"2e098106", +2845 => x"80d4387d", +2846 => x"5191c13f", +2847 => x"7883f726", +2848 => x"80cf3878", +2849 => x"832a7010", +2850 => x"10108191", +2851 => x"f0058c71", +2852 => x"05085959", +2853 => x"5a76782e", +2854 => x"83e73884", +2855 => x"1708fc06", +2856 => x"568c1708", +2857 => x"88180871", +2858 => x"8c72050c", +2859 => x"8872050c", +2860 => x"58751784", +2861 => x"71050881", +2862 => x"07847205", +2863 => x"0c530b0b", +2864 => x"7d5190f9", +2865 => x"3f881754", +2866 => x"0b0b7380", +2867 => x"0c8f3d0d", +2868 => x"0478892a", +2869 => x"79832a5b", +2870 => x"530b0b72", +2871 => x"802e80c0", +2872 => x"3878862a", +2873 => x"b8055a84", +2874 => x"7327b538", +2875 => x"80db7305", +2876 => x"5a947327", +2877 => x"ab38788c", +2878 => x"2a80ee05", +2879 => x"5a80d473", +2880 => x"279e3878", +2881 => x"8f2a80f7", +2882 => x"055a82d4", +2883 => x"73279138", +2884 => x"78922a80", +2885 => x"fc055a8a", +2886 => x"d4732784", +2887 => x"3880fe5a", +2888 => x"0b0b7910", +2889 => x"10108191", +2890 => x"f0058c71", +2891 => x"05085855", +2892 => x"0b760b75", +2893 => x"2ea63884", +2894 => x"1708fc06", +2895 => x"707a3155", +2896 => x"560b738f", +2897 => x"2489c638", +2898 => x"738025fe", +2899 => x"d4388c17", +2900 => x"08570b0b", +2901 => x"76752e09", +2902 => x"8106dc38", +2903 => x"811a5a81", +2904 => x"92800857", +2905 => x"0b0b7681", +2906 => x"91f82e82", +2907 => x"ed388417", +2908 => x"08fc0670", +2909 => x"7a315556", +2910 => x"0b738f24", +2911 => x"829c3881", +2912 => x"91f80b81", +2913 => x"92840c81", +2914 => x"91f80b81", +2915 => x"92800c73", +2916 => x"8025fe9d", +2917 => x"3883ff76", +2918 => x"27849d38", +2919 => x"75892a76", +2920 => x"832a5553", +2921 => x"0b0b7280", +2922 => x"2e80cc38", +2923 => x"75862ab8", +2924 => x"05540b0b", +2925 => x"847327bf", +2926 => x"3880db73", +2927 => x"05540b0b", +2928 => x"947327b3", +2929 => x"38758c2a", +2930 => x"80ee0554", +2931 => x"0b0b80d4", +2932 => x"7327a438", +2933 => x"758f2a80", +2934 => x"f705540b", +2935 => x"0b82d473", +2936 => x"27953875", +2937 => x"922a80fc", +2938 => x"05540b0b", +2939 => x"8ad47327", +2940 => x"863880fe", +2941 => x"540b0b73", +2942 => x"10101081", +2943 => x"91f00588", +2944 => x"71050856", +2945 => x"580b740b", +2946 => x"782e87a0", +2947 => x"38841508", +2948 => x"fc06530b", +2949 => x"0b757327", +2950 => x"8f388815", +2951 => x"08550b0b", +2952 => x"74782e09", +2953 => x"8106e638", +2954 => x"8c150881", +2955 => x"91f00b84", +2956 => x"0508718c", +2957 => x"1a0c7688", +2958 => x"1a0c7888", +2959 => x"73050c78", +2960 => x"8c180c5d", +2961 => x"5879530b", +2962 => x"0b807a24", +2963 => x"84983872", +2964 => x"822c8171", +2965 => x"2b5c530b", +2966 => x"0b7a7c26", +2967 => x"81ac387b", +2968 => x"7b06530b", +2969 => x"0b728398", +2970 => x"3879fc06", +2971 => x"84055a7a", +2972 => x"10707d06", +2973 => x"540b0b5b", +2974 => x"72838538", +2975 => x"841a5aef", +2976 => x"3988178c", +2977 => x"71050858", +2978 => x"580b760b", +2979 => x"782e0981", +2980 => x"06fc8838", +2981 => x"821a5afd", +2982 => x"c6397817", +2983 => x"79810784", +2984 => x"190c7081", +2985 => x"92840c70", +2986 => x"8192800c", +2987 => x"8191f80b", +2988 => x"8c72050c", +2989 => x"8c710508", +2990 => x"8872050c", +2991 => x"74810784", +2992 => x"72050c74", +2993 => x"71057571", +2994 => x"0c51530b", +2995 => x"0b7d518c", +2996 => x"ec3f8817", +2997 => x"540b0bfb", +2998 => x"f1398191", +2999 => x"f00b8405", +3000 => x"087a540b", +3001 => x"0b5c7980", +3002 => x"25fee438", +3003 => x"82f8397a", +3004 => x"097c0670", +3005 => x"8191f00b", +3006 => x"84050c5c", +3007 => x"7a105b0b", +3008 => x"0b7a7c26", +3009 => x"85387a85", +3010 => x"f2388191", +3011 => x"f00b8805", +3012 => x"08708472", +3013 => x"0508fc06", +3014 => x"707c317c", +3015 => x"72268f72", +3016 => x"25075757", +3017 => x"5c5d5572", +3018 => x"802e80e3", +3019 => x"38797a16", +3020 => x"8191e808", +3021 => x"1b907105", +3022 => x"5a55575b", +3023 => x"8191e408", +3024 => x"ff2e8938", +3025 => x"a08f7305", +3026 => x"e0800657", +3027 => x"0b0b7652", +3028 => x"7d5194c7", +3029 => x"3f800854", +3030 => x"0b0b8008", +3031 => x"ff2e9038", +3032 => x"80087627", +3033 => x"82b33874", +3034 => x"8191f02e", +3035 => x"82ab3881", +3036 => x"91f00b88", +3037 => x"05085584", +3038 => x"1508fc06", +3039 => x"707a317a", +3040 => x"72268f72", +3041 => x"25075255", +3042 => x"530b0b72", +3043 => x"84913874", +3044 => x"79810784", +3045 => x"170c7916", +3046 => x"708191f0", +3047 => x"0b88050c", +3048 => x"75810784", +3049 => x"72050c54", +3050 => x"0b0b7e52", +3051 => x"578b8e3f", +3052 => x"8817540b", +3053 => x"0bfa9339", +3054 => x"75832a70", +3055 => x"540b0b54", +3056 => x"0b0b8074", +3057 => x"2481a738", +3058 => x"72822c81", +3059 => x"712b8191", +3060 => x"f4080770", +3061 => x"8191f00b", +3062 => x"84050c75", +3063 => x"10101081", +3064 => x"91f00588", +3065 => x"71050858", +3066 => x"5a5d530b", +3067 => x"0b778c18", +3068 => x"0c748818", +3069 => x"0c768819", +3070 => x"0c768c16", +3071 => x"0cfcc639", +3072 => x"797a1010", +3073 => x"108191f0", +3074 => x"05705759", +3075 => x"5d8c1508", +3076 => x"570b0b76", +3077 => x"752ea638", +3078 => x"841708fc", +3079 => x"06707a31", +3080 => x"55560b73", +3081 => x"8f2483ef", +3082 => x"38738025", +3083 => x"84af388c", +3084 => x"1708570b", +3085 => x"0b76752e", +3086 => x"098106dc", +3087 => x"38881581", +3088 => x"1b708306", +3089 => x"555b5572", +3090 => x"c4387c83", +3091 => x"06530b0b", +3092 => x"72802efd", +3093 => x"9a38ff1d", +3094 => x"f819595d", +3095 => x"88180878", +3096 => x"2ee838fd", +3097 => x"9739831a", +3098 => x"530b0bfb", +3099 => x"e2398314", +3100 => x"70822c81", +3101 => x"712b8191", +3102 => x"f4080770", +3103 => x"8191f00b", +3104 => x"84050c76", +3105 => x"10101081", +3106 => x"91f00588", +3107 => x"71050859", +3108 => x"5b5e5153", +3109 => x"0b0bfed5", +3110 => x"398191b4", +3111 => x"08175880", +3112 => x"08762e81", +3113 => x"99388191", +3114 => x"e408ff2e", +3115 => x"849b3873", +3116 => x"76311881", +3117 => x"91b40c73", +3118 => x"87067057", +3119 => x"530b0b72", +3120 => x"802e8838", +3121 => x"88733170", +3122 => x"15555676", +3123 => x"149fff06", +3124 => x"a0807131", +3125 => x"1770540b", +3126 => x"0b7f530b", +3127 => x"0b57530b", +3128 => x"0b91b83f", +3129 => x"8008530b", +3130 => x"0b8008ff", +3131 => x"2e81a738", +3132 => x"8191b408", +3133 => x"16708191", +3134 => x"b40c7475", +3135 => x"8191f00b", +3136 => x"88050c74", +3137 => x"76311870", +3138 => x"81075155", +3139 => x"56587b81", +3140 => x"91f02e83", +3141 => x"c138798f", +3142 => x"2682ee38", +3143 => x"810b8415", +3144 => x"0c841508", +3145 => x"fc06707a", +3146 => x"317a7226", +3147 => x"8f722507", +3148 => x"5255530b", +3149 => x"0b72802e", +3150 => x"fcd53880", +3151 => x"e2398008", +3152 => x"9fff0653", +3153 => x"0b0b72fe", +3154 => x"dd387781", +3155 => x"91b40c81", +3156 => x"91f00b88", +3157 => x"05087b18", +3158 => x"81078472", +3159 => x"050c5581", +3160 => x"91e00878", +3161 => x"27863877", +3162 => x"8191e00c", +3163 => x"8191dc08", +3164 => x"7827fc83", +3165 => x"38778191", +3166 => x"dc0c8415", +3167 => x"08fc0670", +3168 => x"7a317a72", +3169 => x"268f7225", +3170 => x"07525553", +3171 => x"0b0b7280", +3172 => x"2efbfc38", +3173 => x"8a398074", +3174 => x"540b0b56", +3175 => x"fed2397d", +3176 => x"51879a3f", +3177 => x"800b800c", +3178 => x"8f3d0d04", +3179 => x"73530b0b", +3180 => x"807424ab", +3181 => x"3872822c", +3182 => x"81712b81", +3183 => x"91f40807", +3184 => x"708191f0", +3185 => x"0b84050c", +3186 => x"5d530b0b", +3187 => x"778c180c", +3188 => x"7488180c", +3189 => x"7688190c", +3190 => x"768c160c", +3191 => x"f8e73983", +3192 => x"1470822c", +3193 => x"81712b81", +3194 => x"91f40807", +3195 => x"708191f0", +3196 => x"0b84050c", +3197 => x"5e51530b", +3198 => x"0bd2397b", +3199 => x"7b06530b", +3200 => x"0b72fbfc", +3201 => x"38841a7b", +3202 => x"105c5aef", +3203 => x"39ff1a81", +3204 => x"7105515a", +3205 => x"f6c93978", +3206 => x"17798107", +3207 => x"84190c8c", +3208 => x"18088819", +3209 => x"08718c72", +3210 => x"050c8872", +3211 => x"050c5970", +3212 => x"8192840c", +3213 => x"70819280", +3214 => x"0c8191f8", +3215 => x"0b8c7205", +3216 => x"0c8c7105", +3217 => x"08887205", +3218 => x"0c748107", +3219 => x"8472050c", +3220 => x"74710575", +3221 => x"710c5153", +3222 => x"0b0bf8f1", +3223 => x"39751784", +3224 => x"71050881", +3225 => x"07847205", +3226 => x"0c530b0b", +3227 => x"8c170888", +3228 => x"1808718c", +3229 => x"72050c88", +3230 => x"72050c58", +3231 => x"7d5185bd", +3232 => x"3f881754", +3233 => x"0b0bf4c2", +3234 => x"39728415", +3235 => x"0cf41af8", +3236 => x"0670841e", +3237 => x"08810607", +3238 => x"841e0c70", +3239 => x"1d540b0b", +3240 => x"5b850b84", +3241 => x"140c850b", +3242 => x"88140c8f", +3243 => x"7b27fdaf", +3244 => x"38881c52", +3245 => x"7d51e3b8", +3246 => x"3f8191f0", +3247 => x"0b880508", +3248 => x"8191b408", +3249 => x"5955fd97", +3250 => x"39778191", +3251 => x"b40c7381", +3252 => x"91e40cfb", +3253 => x"e2397284", +3254 => x"150cfd83", +3255 => x"39fa3d0d", +3256 => x"7a790288", +3257 => x"05a70533", +3258 => x"5652530b", +3259 => x"0b837327", +3260 => x"8c387083", +3261 => x"06520b0b", +3262 => x"71802eb1", +3263 => x"38ff7305", +3264 => x"530b0b72", +3265 => x"ff2e9b38", +3266 => x"70335273", +3267 => x"0b722e94", +3268 => x"38817105", +3269 => x"ff14540b", +3270 => x"0b5172ff", +3271 => x"2e098106", +3272 => x"e7388051", +3273 => x"0b0b7080", +3274 => x"0c883d0d", +3275 => x"04707257", +3276 => x"55835175", +3277 => x"82802914", +3278 => x"ff720552", +3279 => x"560b7080", +3280 => x"25f13883", +3281 => x"732780cb", +3282 => x"38740876", +3283 => x"327009f7", +3284 => x"fbfdff72", +3285 => x"050670f8", +3286 => x"84828180", +3287 => x"06515151", +3288 => x"0b0b7080", +3289 => x"2e9e3874", +3290 => x"51805270", +3291 => x"3357730b", +3292 => x"772effb0", +3293 => x"38817105", +3294 => x"81730553", +3295 => x"0b0b5183", +3296 => x"7227e838", +3297 => x"fc730584", +3298 => x"1656530b", +3299 => x"0b728326", +3300 => x"ffb73874", +3301 => x"51fee639", +3302 => x"fa3d0d78", +3303 => x"7a7c7272", +3304 => x"72575757", +3305 => x"5956560b", +3306 => x"740b7627", +3307 => x"be387615", +3308 => x"51750b71", +3309 => x"27b53870", +3310 => x"7717ff14", +3311 => x"540b0b55", +3312 => x"530b0b71", +3313 => x"ff2e9d38", +3314 => x"ff14ff14", +3315 => x"540b0b54", +3316 => x"0b0b7233", +3317 => x"7434ff72", +3318 => x"05520b0b", +3319 => x"71ff2e09", +3320 => x"8106e538", +3321 => x"75800c88", +3322 => x"3d0d0476", +3323 => x"8f269c38", +3324 => x"ff720552", +3325 => x"0b0b71ff", +3326 => x"2eea3872", +3327 => x"70810554", +3328 => x"0b0b3374", +3329 => x"70810556", +3330 => x"34e63974", +3331 => x"76078306", +3332 => x"510b0b70", +3333 => x"db387575", +3334 => x"540b0b51", +3335 => x"72708405", +3336 => x"540b0b08", +3337 => x"71708405", +3338 => x"530b0b0c", +3339 => x"72708405", +3340 => x"540b0b08", +3341 => x"71708405", +3342 => x"530b0b0c", +3343 => x"72708405", +3344 => x"540b0b08", +3345 => x"71708405", +3346 => x"530b0b0c", +3347 => x"72708405", +3348 => x"540b0b08", +3349 => x"71708405", +3350 => x"530b0b0c", +3351 => x"f0720552", +3352 => x"0b0b718f", +3353 => x"26ffb538", +3354 => x"8372279c", +3355 => x"38727084", +3356 => x"05540b0b", +3357 => x"08717084", +3358 => x"05530b0b", +3359 => x"0cfc7205", +3360 => x"520b0b71", +3361 => x"8326e638", +3362 => x"70540b0b", +3363 => x"fee239fc", +3364 => x"3d0d7679", +3365 => x"71028c05", +3366 => x"9f053357", +3367 => x"55530b0b", +3368 => x"55837227", +3369 => x"8c387483", +3370 => x"06510b0b", +3371 => x"70802ea8", +3372 => x"38ff7205", +3373 => x"520b0b71", +3374 => x"ff2e9638", +3375 => x"73737081", +3376 => x"055534ff", +3377 => x"7205520b", +3378 => x"0b71ff2e", +3379 => x"098106ec", +3380 => x"3874800c", +3381 => x"863d0d04", +3382 => x"7474882b", +3383 => x"75077071", +3384 => x"902b0751", +3385 => x"540b0b51", +3386 => x"8f7227b0", +3387 => x"38727170", +3388 => x"8405530b", +3389 => x"0b0c7271", +3390 => x"70840553", +3391 => x"0b0b0c72", +3392 => x"71708405", +3393 => x"530b0b0c", +3394 => x"72717084", +3395 => x"05530b0b", +3396 => x"0cf07205", +3397 => x"520b0b71", +3398 => x"8f26d238", +3399 => x"83722795", +3400 => x"38727170", +3401 => x"8405530b", +3402 => x"0b0cfc72", +3403 => x"05520b0b", +3404 => x"718326ed", +3405 => x"3870530b", +3406 => x"0bfef639", +3407 => x"0404ef3d", +3408 => x"0d636567", +3409 => x"405d420b", +3410 => x"7b802e85", +3411 => x"ab386151", +3412 => x"eb3ff81c", +3413 => x"70847205", +3414 => x"0870fc06", +3415 => x"70628b05", +3416 => x"70f80641", +3417 => x"59455b5c", +3418 => x"41579674", +3419 => x"2782e238", +3420 => x"807b247e", +3421 => x"7c260759", +3422 => x"80540b0b", +3423 => x"78742e09", +3424 => x"810682c6", +3425 => x"38777b25", +3426 => x"82913877", +3427 => x"178191f0", +3428 => x"0b880508", +3429 => x"5e560b7c", +3430 => x"0b762e84", +3431 => x"ea388416", +3432 => x"0870fe06", +3433 => x"17847105", +3434 => x"08810651", +3435 => x"55550b73", +3436 => x"82a43874", +3437 => x"fc06597c", +3438 => x"762e858f", +3439 => x"3877195f", +3440 => x"0b0b7e7b", +3441 => x"25829438", +3442 => x"79810654", +3443 => x"0b0b7382", +3444 => x"dc387677", +3445 => x"08318471", +3446 => x"0508fc06", +3447 => x"565a7580", +3448 => x"2e93387c", +3449 => x"762e859c", +3450 => x"38741918", +3451 => x"590b0b78", +3452 => x"7b2584b0", +3453 => x"3879802e", +3454 => x"82b33877", +3455 => x"15567a0b", +3456 => x"762482a9", +3457 => x"388c1a08", +3458 => x"881b0871", +3459 => x"8c72050c", +3460 => x"8872050c", +3461 => x"55797659", +3462 => x"57881761", +3463 => x"fc055759", +3464 => x"0b75a426", +3465 => x"86ab387b", +3466 => x"79555593", +3467 => x"762780cf", +3468 => x"387b7084", +3469 => x"055d087c", +3470 => x"56790c74", +3471 => x"70840556", +3472 => x"088c180c", +3473 => x"9017540b", +3474 => x"0b9b7627", +3475 => x"b2387470", +3476 => x"84055608", +3477 => x"740c7470", +3478 => x"84055608", +3479 => x"94180c98", +3480 => x"17540b0b", +3481 => x"a3762797", +3482 => x"38747084", +3483 => x"05560874", +3484 => x"0c747084", +3485 => x"0556089c", +3486 => x"180ca017", +3487 => x"540b0b74", +3488 => x"70840556", +3489 => x"08747084", +3490 => x"05560c74", +3491 => x"70840556", +3492 => x"08747084", +3493 => x"05560c74", +3494 => x"08740c77", +3495 => x"7b31560b", +3496 => x"0b758f26", +3497 => x"80d13884", +3498 => x"17088106", +3499 => x"78078418", +3500 => x"0c771784", +3501 => x"71050881", +3502 => x"07847205", +3503 => x"0c540b0b", +3504 => x"6151fcf9", +3505 => x"3f881754", +3506 => x"0b0b7380", +3507 => x"0c933d0d", +3508 => x"04905bfd", +3509 => x"9b397856", +3510 => x"fdee398c", +3511 => x"16088817", +3512 => x"08718c72", +3513 => x"050c8872", +3514 => x"050c557e", +3515 => x"707c3157", +3516 => x"588f7627", +3517 => x"ffb1387a", +3518 => x"17841808", +3519 => x"81067c07", +3520 => x"84190c76", +3521 => x"81078472", +3522 => x"050c7671", +3523 => x"05847105", +3524 => x"08810784", +3525 => x"72050c55", +3526 => x"88055261", +3527 => x"51dad13f", +3528 => x"6151fc99", +3529 => x"3f881754", +3530 => x"0b0bff9e", +3531 => x"397d5261", +3532 => x"51ea963f", +3533 => x"80085980", +3534 => x"08802e81", +3535 => x"ab388008", +3536 => x"f8056084", +3537 => x"0508fe06", +3538 => x"61055557", +3539 => x"0b0b7674", +3540 => x"2e848d38", +3541 => x"fc18560b", +3542 => x"0b75a426", +3543 => x"81b0387b", +3544 => x"80085555", +3545 => x"93762780", +3546 => x"dc387470", +3547 => x"84055608", +3548 => x"80087084", +3549 => x"05800c0c", +3550 => x"80087570", +3551 => x"84055708", +3552 => x"71708405", +3553 => x"530b0b0c", +3554 => x"540b0b9b", +3555 => x"7627b638", +3556 => x"74708405", +3557 => x"56087470", +3558 => x"8405560c", +3559 => x"74708405", +3560 => x"56087470", +3561 => x"8405560c", +3562 => x"a3762799", +3563 => x"38747084", +3564 => x"05560874", +3565 => x"70840556", +3566 => x"0c747084", +3567 => x"05560874", +3568 => x"70840556", +3569 => x"0c747084", +3570 => x"05560874", +3571 => x"70840556", +3572 => x"0c747084", +3573 => x"05560874", +3574 => x"70840556", +3575 => x"0c740874", +3576 => x"0c7b5261", +3577 => x"51d9893f", +3578 => x"6151fad1", +3579 => x"3f78540b", +3580 => x"0b73800c", +3581 => x"933d0d04", +3582 => x"7d526151", +3583 => x"e8cb3f80", +3584 => x"08800c93", +3585 => x"3d0d0484", +3586 => x"160855fb", +3587 => x"a6397553", +3588 => x"0b0b7b52", +3589 => x"800851ff", +3590 => x"a4a23f7b", +3591 => x"526151d8", +3592 => x"cf3fc539", +3593 => x"8c160888", +3594 => x"1708718c", +3595 => x"72050c88", +3596 => x"72050c55", +3597 => x"8c1a0888", +3598 => x"1b08718c", +3599 => x"72050c88", +3600 => x"72050c55", +3601 => x"79795957", +3602 => x"fbcf3977", +3603 => x"19901c55", +3604 => x"550b730b", +3605 => x"7524faf0", +3606 => x"387a1770", +3607 => x"8191f00b", +3608 => x"88050c75", +3609 => x"7c318107", +3610 => x"8472050c", +3611 => x"5d841708", +3612 => x"81067b07", +3613 => x"84180c61", +3614 => x"51f9c23f", +3615 => x"8817540b", +3616 => x"0bfcc739", +3617 => x"74191890", +3618 => x"1c555d0b", +3619 => x"730b7d24", +3620 => x"fae3388c", +3621 => x"1a08881b", +3622 => x"08718c72", +3623 => x"050c8872", +3624 => x"050c5588", +3625 => x"1a61fc05", +3626 => x"57590b75", +3627 => x"a42681bc", +3628 => x"387b7955", +3629 => x"55937627", +3630 => x"80cf387b", +3631 => x"7084055d", +3632 => x"087c5679", +3633 => x"0c747084", +3634 => x"0556088c", +3635 => x"1b0c901a", +3636 => x"540b0b9b", +3637 => x"7627b238", +3638 => x"74708405", +3639 => x"5608740c", +3640 => x"74708405", +3641 => x"5608941b", +3642 => x"0c981a54", +3643 => x"0b0ba376", +3644 => x"27973874", +3645 => x"70840556", +3646 => x"08740c74", +3647 => x"70840556", +3648 => x"089c1b0c", +3649 => x"a01a540b", +3650 => x"0b747084", +3651 => x"05560874", +3652 => x"70840556", +3653 => x"0c747084", +3654 => x"05560874", +3655 => x"70840556", +3656 => x"0c740874", +3657 => x"0c7a1a70", +3658 => x"8191f00b", +3659 => x"88050c7d", +3660 => x"7c318107", +3661 => x"8472050c", +3662 => x"540b0b84", +3663 => x"1a088106", +3664 => x"7b07841b", +3665 => x"0c6151f7", +3666 => x"f43f7854", +3667 => x"0b0bfda1", +3668 => x"3975530b", +3669 => x"0b7b5278", +3670 => x"51ffa1e0", +3671 => x"3ffabc39", +3672 => x"841708fc", +3673 => x"06186058", +3674 => x"58fab039", +3675 => x"75530b0b", +3676 => x"7b527851", +3677 => x"ffa1c53f", +3678 => x"7a1a7081", +3679 => x"91f00b88", +3680 => x"050c7d7c", +3681 => x"31810784", +3682 => x"72050c54", +3683 => x"0b0b841a", +3684 => x"0881067b", +3685 => x"07841b0c", +3686 => x"ffab3970", +3687 => x"70707080", +3688 => x"0b819ab8", +3689 => x"0c765187", +3690 => x"853f8008", +3691 => x"530b0b80", +3692 => x"08ff2e89", +3693 => x"3872800c", +3694 => x"50505050", +3695 => x"04819ab8", +3696 => x"08540b0b", +3697 => x"73802eed", +3698 => x"38757471", +3699 => x"0c527280", +3700 => x"0c505050", +3701 => x"5004f93d", +3702 => x"0d797c55", +3703 => x"7b540b0b", +3704 => x"8e710522", +3705 => x"70902b70", +3706 => x"902c5557", +3707 => x"818a9408", +3708 => x"530b0b58", +3709 => x"5685e33f", +3710 => x"80085780", +3711 => x"0b800824", +3712 => x"933880d0", +3713 => x"16088008", +3714 => x"0580d017", +3715 => x"0c76800c", +3716 => x"893d0d04", +3717 => x"8c162283", +3718 => x"dfff0655", +3719 => x"0b0b748c", +3720 => x"17237680", +3721 => x"0c893d0d", +3722 => x"04fa3d0d", +3723 => x"788c7105", +3724 => x"2270882a", +3725 => x"70810651", +3726 => x"57585674", +3727 => x"b1388c16", +3728 => x"2283dfff", +3729 => x"06550b0b", +3730 => x"748c1723", +3731 => x"7a540b0b", +3732 => x"79530b0b", +3733 => x"8e162270", +3734 => x"902b7090", +3735 => x"2c540b0b", +3736 => x"56818a94", +3737 => x"08525682", +3738 => x"fe3f883d", +3739 => x"0d048254", +3740 => x"0b0b8053", +3741 => x"0b0b8e16", +3742 => x"2270902b", +3743 => x"70902c54", +3744 => x"0b0b5681", +3745 => x"8a940852", +3746 => x"5784913f", +3747 => x"8c162283", +3748 => x"dfff0655", +3749 => x"0b0b748c", +3750 => x"17237a54", +3751 => x"0b0b7953", +3752 => x"0b0b8e16", +3753 => x"2270902b", +3754 => x"70902c54", +3755 => x"0b0b5681", +3756 => x"8a940852", +3757 => x"5682b03f", +3758 => x"883d0d04", +3759 => x"f93d0d79", +3760 => x"7c557b54", +3761 => x"0b0b8e71", +3762 => x"05227090", +3763 => x"2b70902c", +3764 => x"5557818a", +3765 => x"9408530b", +3766 => x"0b585683", +3767 => x"bf3f8008", +3768 => x"578008ff", +3769 => x"2e9b388c", +3770 => x"1622a080", +3771 => x"07550b0b", +3772 => x"748c1723", +3773 => x"800880d0", +3774 => x"170c7680", +3775 => x"0c893d0d", +3776 => x"048c1622", +3777 => x"83dfff06", +3778 => x"550b0b74", +3779 => x"8c172376", +3780 => x"800c893d", +3781 => x"0d047070", +3782 => x"70748e71", +3783 => x"05227090", +3784 => x"2b70902c", +3785 => x"55515153", +3786 => x"0b0b818a", +3787 => x"94085181", +3788 => x"f43f5050", +3789 => x"5004fb3d", +3790 => x"0d777970", +3791 => x"72078306", +3792 => x"530b0b54", +3793 => x"0b0b5270", +3794 => x"99387173", +3795 => x"7308540b", +3796 => x"0b56540b", +3797 => x"0b717308", +3798 => x"2e80d038", +3799 => x"7375540b", +3800 => x"0b520b0b", +3801 => x"71337081", +3802 => x"ff065254", +3803 => x"0b0b7080", +3804 => x"2ea33872", +3805 => x"3355700b", +3806 => x"752e0981", +3807 => x"069a3881", +3808 => x"72058114", +3809 => x"71337081", +3810 => x"ff06540b", +3811 => x"0b56540b", +3812 => x"0b5270df", +3813 => x"38723355", +3814 => x"7381ff06", +3815 => x"7581ff06", +3816 => x"71713180", +3817 => x"0c525287", +3818 => x"3d0d0471", +3819 => x"0970f7fb", +3820 => x"fdff1406", +3821 => x"70f88482", +3822 => x"81800651", +3823 => x"51510b0b", +3824 => x"709d3884", +3825 => x"14841671", +3826 => x"08540b0b", +3827 => x"56540b0b", +3828 => x"7175082e", +3829 => x"d6387375", +3830 => x"540b0b52", +3831 => x"ff843980", +3832 => x"0b800c87", +3833 => x"3d0d04fb", +3834 => x"3d0d800b", +3835 => x"819ab80c", +3836 => x"7a530b0b", +3837 => x"79527851", +3838 => x"83c33f80", +3839 => x"08558008", +3840 => x"ff2e8838", +3841 => x"74800c87", +3842 => x"3d0d0481", +3843 => x"9ab80856", +3844 => x"0b0b7580", +3845 => x"2eee3877", +3846 => x"76710c54", +3847 => x"0b0b7480", +3848 => x"0c873d0d", +3849 => x"04707070", +3850 => x"70800b81", +3851 => x"9ab80c76", +3852 => x"5185db3f", +3853 => x"8008530b", +3854 => x"0b8008ff", +3855 => x"2e893872", +3856 => x"800c5050", +3857 => x"50500481", +3858 => x"9ab80854", +3859 => x"0b0b7380", +3860 => x"2eed3875", +3861 => x"74710c52", +3862 => x"72800c50", +3863 => x"50505004", +3864 => x"fc3d0d80", +3865 => x"0b819ab8", +3866 => x"0c785277", +3867 => x"51889c3f", +3868 => x"8008540b", +3869 => x"0b8008ff", +3870 => x"2e883873", +3871 => x"800c863d", +3872 => x"0d04819a", +3873 => x"b808550b", +3874 => x"0b74802e", +3875 => x"ee387675", +3876 => x"710c530b", +3877 => x"0b73800c", +3878 => x"863d0d04", +3879 => x"fb3d0d80", +3880 => x"0b819ab8", +3881 => x"0c7a530b", +3882 => x"0b795278", +3883 => x"5185e63f", +3884 => x"80085580", +3885 => x"08ff2e88", +3886 => x"3874800c", +3887 => x"873d0d04", +3888 => x"819ab808", +3889 => x"560b0b75", +3890 => x"802eee38", +3891 => x"7776710c", +3892 => x"540b0b74", +3893 => x"800c873d", +3894 => x"0d04fb3d", +3895 => x"0d800b81", +3896 => x"9ab80c7a", +3897 => x"530b0b79", +3898 => x"52785182", +3899 => x"cd3f8008", +3900 => x"558008ff", +3901 => x"2e883874", +3902 => x"800c873d", +3903 => x"0d04819a", +3904 => x"b808560b", +3905 => x"0b75802e", +3906 => x"ee387776", +3907 => x"710c540b", +3908 => x"0b74800c", +3909 => x"873d0d04", +3910 => x"810b800c", +3911 => x"04707281", +3912 => x"2e873880", +3913 => x"0b800c50", +3914 => x"04735181", +3915 => x"8a3f7070", +3916 => x"70819abc", +3917 => x"08510b0b", +3918 => x"708a3881", +3919 => x"9ac47081", +3920 => x"9abc0c51", +3921 => x"0b0b7075", +3922 => x"72055252", +3923 => x"ff530b0b", +3924 => x"7087fb80", +3925 => x"80268a38", +3926 => x"70819abc", +3927 => x"0c71530b", +3928 => x"0b72800c", +3929 => x"50505004", +3930 => x"70707070", +3931 => x"800b818a", +3932 => x"8808540b", +3933 => x"0b540b0b", +3934 => x"72812e9e", +3935 => x"3873819a", +3936 => x"c00cff8e", +3937 => x"863fff8c", +3938 => x"f73f8199", +3939 => x"f8528151", +3940 => x"ff90e53f", +3941 => x"80085187", +3942 => x"d53f7281", +3943 => x"9ac00cff", +3944 => x"8de93fff", +3945 => x"8cda3f81", +3946 => x"99f85281", +3947 => x"51ff90c8", +3948 => x"3f800851", +3949 => x"87b83f00", +3950 => x"ff3900ff", +3951 => x"39f53d0d", +3952 => x"7e60819a", +3953 => x"c008705b", +3954 => x"585b5b75", +3955 => x"80c63877", +3956 => x"7a25a338", +3957 => x"771b7033", +3958 => x"7081ff06", +3959 => x"58585975", +3960 => x"8a2e9a38", +3961 => x"7681ff06", +3962 => x"51ff8cfc", +3963 => x"3f811858", +3964 => x"790b7824", +3965 => x"df387980", +3966 => x"0c8d3d0d", +3967 => x"048d51ff", +3968 => x"8ce63f78", +3969 => x"337081ff", +3970 => x"065257ff", +3971 => x"8cda3f81", +3972 => x"1858dd39", +3973 => x"79557a54", +3974 => x"0b0b7d53", +3975 => x"0b0b8552", +3976 => x"8d3dfc05", +3977 => x"51ff8c9c", +3978 => x"3f800856", +3979 => x"86b93f7b", +3980 => x"80080c75", +3981 => x"800c8d3d", +3982 => x"0d04f63d", +3983 => x"0d7d7f81", +3984 => x"9ac00870", +3985 => x"5a585a5a", +3986 => x"7580ca38", +3987 => x"767925b6", +3988 => x"38761a56", +3989 => x"ff8bef3f", +3990 => x"80087634", +3991 => x"800b8008", +3992 => x"81ff0657", +3993 => x"580b758a", +3994 => x"2ea73875", +3995 => x"8d327030", +3996 => x"7080257a", +3997 => x"07515156", +3998 => x"0b0b75bf", +3999 => x"38811757", +4000 => x"780b7724", +4001 => x"cc387656", +4002 => x"0b0b7580", +4003 => x"0c8c3d0d", +4004 => x"048158d7", +4005 => x"39785579", +4006 => x"540b0b7c", +4007 => x"530b0b84", +4008 => x"528c3dfc", +4009 => x"0551ff8b", +4010 => x"9b3f8008", +4011 => x"5685b83f", +4012 => x"7a80080c", +4013 => x"75800c8c", +4014 => x"3d0d0481", +4015 => x"1756c939", +4016 => x"f93d0d79", +4017 => x"57819ac0", +4018 => x"08802eb2", +4019 => x"387651ff", +4020 => x"9dc13f7b", +4021 => x"567a5580", +4022 => x"08810554", +4023 => x"0b0b7653", +4024 => x"0b0b8252", +4025 => x"893dfc05", +4026 => x"51ff8ad8", +4027 => x"3f800857", +4028 => x"84f53f77", +4029 => x"80080c76", +4030 => x"800c893d", +4031 => x"0d0484e7", +4032 => x"3f850b80", +4033 => x"080cff0b", +4034 => x"800c893d", +4035 => x"0d04fb3d", +4036 => x"0d819ac0", +4037 => x"08705654", +4038 => x"0b0b7388", +4039 => x"3874800c", +4040 => x"873d0d04", +4041 => x"77530b0b", +4042 => x"8352873d", +4043 => x"fc0551ff", +4044 => x"8a923f80", +4045 => x"08540b0b", +4046 => x"84ad3f75", +4047 => x"80080c73", +4048 => x"800c873d", +4049 => x"0d04ff0b", +4050 => x"800c04fb", +4051 => x"3d0d7755", +4052 => x"819ac008", +4053 => x"802eae38", +4054 => x"7451ff9c", +4055 => x"b63f8008", +4056 => x"8105540b", +4057 => x"0b74530b", +4058 => x"0b875287", +4059 => x"3dfc0551", +4060 => x"ff89d13f", +4061 => x"80085583", +4062 => x"ee3f7580", +4063 => x"080c7480", +4064 => x"0c873d0d", +4065 => x"0483e03f", +4066 => x"850b8008", +4067 => x"0cff0b80", +4068 => x"0c873d0d", +4069 => x"04fa3d0d", +4070 => x"819ac008", +4071 => x"802ea738", +4072 => x"7a557954", +4073 => x"0b0b7853", +4074 => x"0b0b8652", +4075 => x"883dfc05", +4076 => x"51ff8990", +4077 => x"3f800856", +4078 => x"83ad3f76", +4079 => x"80080c75", +4080 => x"800c883d", +4081 => x"0d04839f", +4082 => x"3f9d0b80", +4083 => x"080cff0b", +4084 => x"800c883d", +4085 => x"0d04fb3d", +4086 => x"0d777956", +4087 => x"56807054", +4088 => x"0b0b540b", +4089 => x"0b737525", +4090 => x"9f387410", +4091 => x"1010f805", +4092 => x"52721670", +4093 => x"3370742b", +4094 => x"76078116", +4095 => x"f8165656", +4096 => x"56515174", +4097 => x"7324ea38", +4098 => x"73800c87", +4099 => x"3d0d04fc", +4100 => x"3d0d7678", +4101 => x"5555bc53", +4102 => x"0b0b8052", +4103 => x"7351e8ef", +4104 => x"3f845274", +4105 => x"51ffaf3f", +4106 => x"80087423", +4107 => x"84528415", +4108 => x"51ffa33f", +4109 => x"80088215", +4110 => x"23845288", +4111 => x"1551ff96", +4112 => x"3f800884", +4113 => x"150c8452", +4114 => x"8c1551ff", +4115 => x"893f8008", +4116 => x"88152384", +4117 => x"52901551", +4118 => x"fefc3f80", +4119 => x"088a1523", +4120 => x"84529415", +4121 => x"51feef3f", +4122 => x"80088c15", +4123 => x"23845298", +4124 => x"1551fee2", +4125 => x"3f80088e", +4126 => x"15238852", +4127 => x"9c1551fe", +4128 => x"d53f8008", +4129 => x"90150c86", +4130 => x"3d0d04e9", +4131 => x"3d0d6a81", +4132 => x"9ac00857", +4133 => x"570b7593", +4134 => x"3880c080", +4135 => x"0b84180c", +4136 => x"75ac180c", +4137 => x"75800c99", +4138 => x"3d0d0489", +4139 => x"3d70556a", +4140 => x"540b0b55", +4141 => x"8a52993d", +4142 => x"ffbc0551", +4143 => x"ff87853f", +4144 => x"80087753", +4145 => x"0b0b7552", +4146 => x"56fec43f", +4147 => x"81993f77", +4148 => x"80080c75", +4149 => x"800c993d", +4150 => x"0d04e93d", +4151 => x"0d695781", +4152 => x"9ac00880", +4153 => x"2ebb3876", +4154 => x"51ff99a7", +4155 => x"3f893d70", +4156 => x"56800881", +4157 => x"05557754", +4158 => x"0b0b568f", +4159 => x"52993dff", +4160 => x"bc0551ff", +4161 => x"86be3f80", +4162 => x"086b530b", +4163 => x"0b765257", +4164 => x"fdfd3f80", +4165 => x"d23f7780", +4166 => x"080c7680", +4167 => x"0c993d0d", +4168 => x"0480c43f", +4169 => x"850b8008", +4170 => x"0cff0b80", +4171 => x"0c993d0d", +4172 => x"04fc3d0d", +4173 => x"81540b0b", +4174 => x"819ac008", +4175 => x"88387380", +4176 => x"0c863d0d", +4177 => x"0476530b", +4178 => x"0b97b952", +4179 => x"863dfc05", +4180 => x"51ff85f0", +4181 => x"3f800854", +4182 => x"0b0b8c3f", +4183 => x"7480080c", +4184 => x"73800c86", +4185 => x"3d0d0481", +4186 => x"8a940880", +4187 => x"0c04f73d", +4188 => x"0d7b818a", +4189 => x"940882c8", +4190 => x"7105085a", +4191 => x"540b0b5a", +4192 => x"77802e80", +4193 => x"eb388188", +4194 => x"18841908", +4195 => x"ff058171", +4196 => x"2b595559", +4197 => x"80742481", +4198 => x"80388074", +4199 => x"2480c138", +4200 => x"73822b78", +4201 => x"71058805", +4202 => x"56568180", +4203 => x"19087706", +4204 => x"530b0b72", +4205 => x"802e80c3", +4206 => x"38781670", +4207 => x"08530b0b", +4208 => x"530b0b79", +4209 => x"51740853", +4210 => x"0b0b722d", +4211 => x"ff14fc17", +4212 => x"fc177981", +4213 => x"2c5a5757", +4214 => x"540b0b73", +4215 => x"8025cb38", +4216 => x"7708580b", +4217 => x"0b77ff9e", +4218 => x"38818a94", +4219 => x"08530b0b", +4220 => x"bc730508", +4221 => x"a9387951", +4222 => x"f7bd3f74", +4223 => x"08530b0b", +4224 => x"722dff14", +4225 => x"fc17fc17", +4226 => x"79812c5a", +4227 => x"5757540b", +4228 => x"0b738025", +4229 => x"ff9438c8", +4230 => x"398057fe", +4231 => x"fd397251", +4232 => x"bc730508", +4233 => x"530b0b72", +4234 => x"2d7951f7", +4235 => x"8a3f8c08", +4236 => x"028c0c70", +4237 => x"70707080", +4238 => x"530b0b8c", +4239 => x"088c0508", +4240 => x"528c0888", +4241 => x"050851ff", +4242 => x"8dd23f80", +4243 => x"0870800c", +4244 => x"540b0b50", +4245 => x"5050508c", +4246 => x"0c048c08", +4247 => x"028c0c70", +4248 => x"70707081", +4249 => x"530b0b8c", +4250 => x"088c0508", +4251 => x"528c0888", +4252 => x"050851ff", +4253 => x"8da63f80", +4254 => x"0870800c", +4255 => x"540b0b50", +4256 => x"5050508c", +4257 => x"0c047070", +4258 => x"819a800b", +4259 => x"fc057008", +4260 => x"52520b70", +4261 => x"ff2e9338", +4262 => x"702dfc72", +4263 => x"05700852", +4264 => x"520b70ff", +4265 => x"2e098106", +4266 => x"ef385050", +4267 => x"0404ff85", +4268 => x"e53f0400", +4269 => x"4379636c", +4270 => x"65732025", +4271 => x"640a0000", +4272 => x"48656c6c", +4273 => x"6f20776f", +4274 => x"726c6420", +4275 => x"310a0000", +4276 => x"48656c6c", +4277 => x"6f20776f", +4278 => x"726c6420", +4279 => x"320a0000", +4280 => x"0a000000", +4281 => x"20202020", +4282 => x"20202020", +4283 => x"20202020", +4284 => x"20202020", +4285 => x"30303030", +4286 => x"30303030", +4287 => x"30303030", +4288 => x"30303030", +4289 => x"000017e3", +4290 => x"0000138d", +4291 => x"0000138d", +4292 => x"000017d9", +4293 => x"0000138d", +4294 => x"0000138d", +4295 => x"0000138d", +4296 => x"0000138d", +4297 => x"0000138d", +4298 => x"0000138d", +4299 => x"00001364", +4300 => x"0000177e", +4301 => x"0000138d", +4302 => x"00001376", +4303 => x"000016ec", +4304 => x"0000138d", +4305 => x"000017af", +4306 => x"0000178a", +4307 => x"0000178a", +4308 => x"0000178a", +4309 => x"0000178a", +4310 => x"0000178a", +4311 => x"0000178a", +4312 => x"0000178a", +4313 => x"0000178a", +4314 => x"0000178a", +4315 => x"0000138d", +4316 => x"0000138d", +4317 => x"0000138d", +4318 => x"0000138d", +4319 => x"0000138d", +4320 => x"0000138d", +4321 => x"0000138d", +4322 => x"0000138d", +4323 => x"0000138d", +4324 => x"00001699", +4325 => x"00001326", +4326 => x"0000138d", +4327 => x"0000138d", +4328 => x"0000138d", +4329 => x"0000138d", +4330 => x"0000138d", +4331 => x"0000138d", +4332 => x"0000138d", +4333 => x"0000138d", +4334 => x"0000138d", +4335 => x"0000138d", +4336 => x"000012ec", +4337 => x"0000138d", +4338 => x"0000138d", +4339 => x"0000138d", +4340 => x"00001553", +4341 => x"0000138d", +4342 => x"00001015", +4343 => x"0000138d", +4344 => x"0000138d", +4345 => x"00001733", +4346 => x"0000138d", +4347 => x"0000138d", +4348 => x"0000138d", +4349 => x"0000138d", +4350 => x"0000138d", +4351 => x"0000138d", +4352 => x"0000138d", +4353 => x"0000138d", +4354 => x"0000138d", +4355 => x"0000138d", +4356 => x"00001699", +4357 => x"0000132a", +4358 => x"0000138d", +4359 => x"0000138d", +4360 => x"0000138d", +4361 => x"0000168e", +4362 => x"0000132a", +4363 => x"0000138d", +4364 => x"0000138d", +4365 => x"000015d8", +4366 => x"0000138d", +4367 => x"000015a8", +4368 => x"000012f0", +4369 => x"000015f7", +4370 => x"00001383", +4371 => x"0000138d", +4372 => x"00001553", +4373 => x"0000138d", +4374 => x"00001019", +4375 => x"0000138d", +4376 => x"0000138d", +4377 => x"000017ba", +4378 => x"62756720", +4379 => x"696e2076", +4380 => x"66707269", +4381 => x"6e74663a", +4382 => x"20626164", +4383 => x"20626173", +4384 => x"65000000", +4385 => x"30313233", +4386 => x"34353637", +4387 => x"38396162", +4388 => x"63646566", +4389 => x"00000000", +4390 => x"30313233", +4391 => x"34353637", +4392 => x"38394142", +4393 => x"43444546", +4394 => x"00000000", +4395 => x"286e756c", +4396 => x"6c290000", +4397 => x"432d5554", +4398 => x"462d3800", +4399 => x"432d534a", +4400 => x"49530000", +4401 => x"432d4555", +4402 => x"434a5000", +4403 => x"432d4a49", +4404 => x"53000000", +4405 => x"43000000", +4406 => x"2e000000", +4407 => x"49534f2d", +4408 => x"38383539", +4409 => x"2d310000", +4410 => x"64756d6d", +4411 => x"792e6578", +4412 => x"65000000", +4413 => x"00ffffff", +4414 => x"ff00ffff", +4415 => x"ffff00ff", +4416 => x"ffffff00", +4417 => x"00000000", +4418 => x"00000000", +4419 => x"00000000", +4420 => x"00004d08", +4421 => x"00004518", +4422 => x"00000000", +4423 => x"00004780", +4424 => x"000047dc", +4425 => x"00004838", +4426 => x"00000000", +4427 => x"00000000", +4428 => x"00000000", +4429 => x"00000000", +4430 => x"00000000", +4431 => x"00000000", +4432 => x"00000000", +4433 => x"00000000", +4434 => x"00000000", +4435 => x"000044d4", +4436 => x"00000000", +4437 => x"00000000", +4438 => x"00000000", +4439 => x"00000000", +4440 => x"00000000", +4441 => x"00000000", +4442 => x"00000000", +4443 => x"00000000", +4444 => x"00000000", +4445 => x"00000000", +4446 => x"00000000", +4447 => x"00000000", +4448 => x"00000000", +4449 => x"00000000", +4450 => x"00000000", +4451 => x"00000000", +4452 => x"00000000", +4453 => x"00000000", +4454 => x"00000000", +4455 => x"00000000", +4456 => x"00000000", +4457 => x"00000000", +4458 => x"00000000", +4459 => x"00000000", +4460 => x"00000000", +4461 => x"00000000", +4462 => x"00000000", +4463 => x"00000000", +4464 => x"00000001", +4465 => x"330eabcd", +4466 => x"1234e66d", +4467 => x"deec0005", +4468 => x"000b0000", +4469 => x"00000000", +4470 => x"00000000", +4471 => x"00000000", +4472 => x"00000000", +4473 => x"00000000", +4474 => x"00000000", +4475 => x"00000000", +4476 => x"00000000", +4477 => x"00000000", +4478 => x"00000000", +4479 => x"00000000", +4480 => x"00000000", +4481 => x"00000000", +4482 => x"00000000", +4483 => x"00000000", +4484 => x"00000000", +4485 => x"00000000", +4486 => x"00000000", +4487 => x"00000000", +4488 => x"00000000", +4489 => x"00000000", +4490 => x"00000000", +4491 => x"00000000", +4492 => x"00000000", +4493 => x"00000000", +4494 => x"00000000", +4495 => x"00000000", +4496 => x"00000000", +4497 => x"00000000", +4498 => x"00000000", +4499 => x"00000000", +4500 => x"00000000", +4501 => x"00000000", +4502 => x"00000000", +4503 => x"00000000", +4504 => x"00000000", +4505 => x"00000000", +4506 => x"00000000", +4507 => x"00000000", +4508 => x"00000000", +4509 => x"00000000", +4510 => x"00000000", +4511 => x"00000000", +4512 => x"00000000", +4513 => x"00000000", +4514 => x"00000000", +4515 => x"00000000", +4516 => x"00000000", +4517 => x"00000000", +4518 => x"00000000", +4519 => x"00000000", +4520 => x"00000000", +4521 => x"00000000", +4522 => x"00000000", +4523 => x"00000000", +4524 => x"00000000", +4525 => x"00000000", +4526 => x"00000000", +4527 => x"00000000", +4528 => x"00000000", +4529 => x"00000000", +4530 => x"00000000", +4531 => x"00000000", +4532 => x"00000000", +4533 => x"00000000", +4534 => x"00000000", +4535 => x"00000000", +4536 => x"00000000", +4537 => x"00000000", +4538 => x"00000000", +4539 => x"00000000", +4540 => x"00000000", +4541 => x"00000000", +4542 => x"00000000", +4543 => x"00000000", +4544 => x"00000000", +4545 => x"00000000", +4546 => x"00000000", +4547 => x"00000000", +4548 => x"00000000", +4549 => x"00000000", +4550 => x"00000000", +4551 => x"00000000", +4552 => x"00000000", +4553 => x"00000000", +4554 => x"00000000", +4555 => x"00000000", +4556 => x"00000000", +4557 => x"00000000", +4558 => x"00000000", +4559 => x"00000000", +4560 => x"00000000", +4561 => x"00000000", +4562 => x"00000000", +4563 => x"00000000", +4564 => x"00000000", +4565 => x"00000000", +4566 => x"00000000", +4567 => x"00000000", +4568 => x"00000000", +4569 => x"00000000", +4570 => x"00000000", +4571 => x"00000000", +4572 => x"00000000", +4573 => x"00000000", +4574 => x"00000000", +4575 => x"00000000", +4576 => x"00000000", +4577 => x"00000000", +4578 => x"00000000", +4579 => x"00000000", +4580 => x"00000000", +4581 => x"00000000", +4582 => x"00000000", +4583 => x"00000000", +4584 => x"00000000", +4585 => x"00000000", +4586 => x"00000000", +4587 => x"00000000", +4588 => x"00000000", +4589 => x"00000000", +4590 => x"00000000", +4591 => x"00000000", +4592 => x"00000000", +4593 => x"00000000", +4594 => x"00000000", +4595 => x"00000000", +4596 => x"00000000", +4597 => x"00000000", +4598 => x"00000000", +4599 => x"00000000", +4600 => x"00000000", +4601 => x"00000000", +4602 => x"00000000", +4603 => x"00000000", +4604 => x"00000000", +4605 => x"00000000", +4606 => x"00000000", +4607 => x"00000000", +4608 => x"00000000", +4609 => x"00000000", +4610 => x"00000000", +4611 => x"00000000", +4612 => x"00000000", +4613 => x"00000000", +4614 => x"00000000", +4615 => x"00000000", +4616 => x"00000000", +4617 => x"00000000", +4618 => x"00000000", +4619 => x"00000000", +4620 => x"00000000", +4621 => x"00000000", +4622 => x"00000000", +4623 => x"00000000", +4624 => x"00000000", +4625 => x"00000000", +4626 => x"00000000", +4627 => x"00000000", +4628 => x"00000000", +4629 => x"00000000", +4630 => x"00000000", +4631 => x"00000000", +4632 => x"00000000", +4633 => x"00000000", +4634 => x"00000000", +4635 => x"00000000", +4636 => x"00000000", +4637 => x"00000000", +4638 => x"00000000", +4639 => x"00000000", +4640 => x"00000000", +4641 => x"00000000", +4642 => x"00000000", +4643 => x"00000000", +4644 => x"00000000", +4645 => x"43000000", +4646 => x"00000000", +4647 => x"00000000", +4648 => x"00000000", +4649 => x"00000000", +4650 => x"00000000", +4651 => x"00000001", +4652 => x"000044dc", +4653 => x"00000000", +4654 => x"00000000", +4655 => x"00000000", +4656 => x"00000000", +4657 => x"00000000", +4658 => x"00000000", +4659 => x"00000000", +4660 => x"00000000", +4661 => x"00000000", +4662 => x"00000000", +4663 => x"00000000", +4664 => x"00000000", +4665 => x"ffffffff", +4666 => x"00000000", +4667 => x"00020000", +4668 => x"00000000", +4669 => x"00000000", +4670 => x"000048f0", +4671 => x"000048f0", +4672 => x"000048f8", +4673 => x"000048f8", +4674 => x"00004900", +4675 => x"00004900", +4676 => x"00004908", +4677 => x"00004908", +4678 => x"00004910", +4679 => x"00004910", +4680 => x"00004918", +4681 => x"00004918", +4682 => x"00004920", +4683 => x"00004920", +4684 => x"00004928", +4685 => x"00004928", +4686 => x"00004930", +4687 => x"00004930", +4688 => x"00004938", +4689 => x"00004938", +4690 => x"00004940", +4691 => x"00004940", +4692 => x"00004948", +4693 => x"00004948", +4694 => x"00004950", +4695 => x"00004950", +4696 => x"00004958", +4697 => x"00004958", +4698 => x"00004960", +4699 => x"00004960", +4700 => x"00004968", +4701 => x"00004968", +4702 => x"00004970", +4703 => x"00004970", +4704 => x"00004978", +4705 => x"00004978", +4706 => x"00004980", +4707 => x"00004980", +4708 => x"00004988", +4709 => x"00004988", +4710 => x"00004990", +4711 => x"00004990", +4712 => x"00004998", +4713 => x"00004998", +4714 => x"000049a0", +4715 => x"000049a0", +4716 => x"000049a8", +4717 => x"000049a8", +4718 => x"000049b0", +4719 => x"000049b0", +4720 => x"000049b8", +4721 => x"000049b8", +4722 => x"000049c0", +4723 => x"000049c0", +4724 => x"000049c8", +4725 => x"000049c8", +4726 => x"000049d0", +4727 => x"000049d0", +4728 => x"000049d8", +4729 => x"000049d8", +4730 => x"000049e0", +4731 => x"000049e0", +4732 => x"000049e8", +4733 => x"000049e8", +4734 => x"000049f0", +4735 => x"000049f0", +4736 => x"000049f8", +4737 => x"000049f8", +4738 => x"00004a00", +4739 => x"00004a00", +4740 => x"00004a08", +4741 => x"00004a08", +4742 => x"00004a10", +4743 => x"00004a10", +4744 => x"00004a18", +4745 => x"00004a18", +4746 => x"00004a20", +4747 => x"00004a20", +4748 => x"00004a28", +4749 => x"00004a28", +4750 => x"00004a30", +4751 => x"00004a30", +4752 => x"00004a38", +4753 => x"00004a38", +4754 => x"00004a40", +4755 => x"00004a40", +4756 => x"00004a48", +4757 => x"00004a48", +4758 => x"00004a50", +4759 => x"00004a50", +4760 => x"00004a58", +4761 => x"00004a58", +4762 => x"00004a60", +4763 => x"00004a60", +4764 => x"00004a68", +4765 => x"00004a68", +4766 => x"00004a70", +4767 => x"00004a70", +4768 => x"00004a78", +4769 => x"00004a78", +4770 => x"00004a80", +4771 => x"00004a80", +4772 => x"00004a88", +4773 => x"00004a88", +4774 => x"00004a90", +4775 => x"00004a90", +4776 => x"00004a98", +4777 => x"00004a98", +4778 => x"00004aa0", +4779 => x"00004aa0", +4780 => x"00004aa8", +4781 => x"00004aa8", +4782 => x"00004ab0", +4783 => x"00004ab0", +4784 => x"00004ab8", +4785 => x"00004ab8", +4786 => x"00004ac0", +4787 => x"00004ac0", +4788 => x"00004ac8", +4789 => x"00004ac8", +4790 => x"00004ad0", +4791 => x"00004ad0", +4792 => x"00004ad8", +4793 => x"00004ad8", +4794 => x"00004ae0", +4795 => x"00004ae0", +4796 => x"00004ae8", +4797 => x"00004ae8", +4798 => x"00004af0", +4799 => x"00004af0", +4800 => x"00004af8", +4801 => x"00004af8", +4802 => x"00004b00", +4803 => x"00004b00", +4804 => x"00004b08", +4805 => x"00004b08", +4806 => x"00004b10", +4807 => x"00004b10", +4808 => x"00004b18", +4809 => x"00004b18", +4810 => x"00004b20", +4811 => x"00004b20", +4812 => x"00004b28", +4813 => x"00004b28", +4814 => x"00004b30", +4815 => x"00004b30", +4816 => x"00004b38", +4817 => x"00004b38", +4818 => x"00004b40", +4819 => x"00004b40", +4820 => x"00004b48", +4821 => x"00004b48", +4822 => x"00004b50", +4823 => x"00004b50", +4824 => x"00004b58", +4825 => x"00004b58", +4826 => x"00004b60", +4827 => x"00004b60", +4828 => x"00004b68", +4829 => x"00004b68", +4830 => x"00004b70", +4831 => x"00004b70", +4832 => x"00004b78", +4833 => x"00004b78", +4834 => x"00004b80", +4835 => x"00004b80", +4836 => x"00004b88", +4837 => x"00004b88", +4838 => x"00004b90", +4839 => x"00004b90", +4840 => x"00004b98", +4841 => x"00004b98", +4842 => x"00004ba0", +4843 => x"00004ba0", +4844 => x"00004ba8", +4845 => x"00004ba8", +4846 => x"00004bb0", +4847 => x"00004bb0", +4848 => x"00004bb8", +4849 => x"00004bb8", +4850 => x"00004bc0", +4851 => x"00004bc0", +4852 => x"00004bc8", +4853 => x"00004bc8", +4854 => x"00004bd0", +4855 => x"00004bd0", +4856 => x"00004bd8", +4857 => x"00004bd8", +4858 => x"00004be0", +4859 => x"00004be0", +4860 => x"00004be8", +4861 => x"00004be8", +4862 => x"00004bf0", +4863 => x"00004bf0", +4864 => x"00004bf8", +4865 => x"00004bf8", +4866 => x"00004c00", +4867 => x"00004c00", +4868 => x"00004c08", +4869 => x"00004c08", +4870 => x"00004c10", +4871 => x"00004c10", +4872 => x"00004c18", +4873 => x"00004c18", +4874 => x"00004c20", +4875 => x"00004c20", +4876 => x"00004c28", +4877 => x"00004c28", +4878 => x"00004c30", +4879 => x"00004c30", +4880 => x"00004c38", +4881 => x"00004c38", +4882 => x"00004c40", +4883 => x"00004c40", +4884 => x"00004c48", +4885 => x"00004c48", +4886 => x"00004c50", +4887 => x"00004c50", +4888 => x"00004c58", +4889 => x"00004c58", +4890 => x"00004c60", +4891 => x"00004c60", +4892 => x"00004c68", +4893 => x"00004c68", +4894 => x"00004c70", +4895 => x"00004c70", +4896 => x"00004c78", +4897 => x"00004c78", +4898 => x"00004c80", +4899 => x"00004c80", +4900 => x"00004c88", +4901 => x"00004c88", +4902 => x"00004c90", +4903 => x"00004c90", +4904 => x"00004c98", +4905 => x"00004c98", +4906 => x"00004ca0", +4907 => x"00004ca0", +4908 => x"00004ca8", +4909 => x"00004ca8", +4910 => x"00004cb0", +4911 => x"00004cb0", +4912 => x"00004cb8", +4913 => x"00004cb8", +4914 => x"00004cc0", +4915 => x"00004cc0", +4916 => x"00004cc8", +4917 => x"00004cc8", +4918 => x"00004cd0", +4919 => x"00004cd0", +4920 => x"00004cd8", +4921 => x"00004cd8", +4922 => x"00004ce0", +4923 => x"00004ce0", +4924 => x"00004ce8", +4925 => x"00004ce8", +4926 => x"000044e8", +4927 => x"ffffffff", +4928 => x"00000000", +4929 => x"ffffffff", +4930 => 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/zpu3/src/dualport_ram_synplicity.vhd b/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd new file mode 100644 index 0000000..83a7de2 --- /dev/null +++ b/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd @@ -0,0 +1,5012 @@ +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 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 := +signal ram : ram_type := +( +0 => x"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b818a", +3 => x"dc0c3a0b", +4 => x"0b80dab4", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80db972d", +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"832b0b2a", +20 => x"83ffff06", +21 => x"52810504", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b0b2b09", +29 => x"067383ff", +30 => x"ff0b0b0b", +31 => x"0b83a704", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53518105", +38 => x"04000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51810504", +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"53518105", +55 => x"04000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51810504", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"72ff0571", +65 => x"81050673", +66 => x"ff050972", +67 => x"74058005", +68 => x"06075350", +69 => x"50040000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b8c", +73 => x"f8040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535181", +82 => x"05040000", +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"81050400", +102 => x"00000000", +103 => x"00000000", +104 => x"71718105", +105 => x"53510406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515181", +111 => x"05040000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51810504", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53518105", +125 => x"04000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52810504", +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"81050409", +139 => x"81058305", +140 => x"1010102b", +141 => x"0772fc06", +142 => x"0c515181", +143 => x"05040000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535181", +147 => x"05040000", +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"81050400", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b818a", +162 => x"88738306", +163 => x"10100508", +164 => x"067381ff", +165 => x"06738306", +166 => x"0b0b0b84", +167 => x"ab040000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0bb3", +171 => x"912d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c810551", +175 => x"04000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0bb4", +179 => x"8a2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c810551", +183 => x"04000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547181", +188 => x"05067309", +189 => x"72740580", +190 => x"05060753", +191 => x"50500400", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"81050673", +197 => x"09727405", +198 => x"80050607", +199 => x"53505004", +200 => x"05800504", +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"818ad80c", +210 => x"51810504", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"72830610", +217 => x"10728306", +218 => x"0710100b", +219 => x"0b818a98", +220 => x"05080400", +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"81050400", +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"71710571", +249 => x"81055351", +250 => x"04000000", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"8db33f80", +257 => x"f39e3f04", +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"51810504", +267 => x"72fc0608", +268 => x"81ff0a06", +269 => x"72fc0670", +270 => x"5408fe80", +271 => x"0a060772", +272 => x"0c515181", +273 => x"050472fc", +274 => x"06080a10", +275 => x"10101010", +276 => x"1010100a", +277 => x"87fc8080", +278 => x"0672fc06", +279 => x"08f883ff", +280 => x"ff060772", +281 => x"fc060c51", +282 => x"51810504", +283 => x"72fc0608", +284 => x"0a101010", +285 => x"10101010", +286 => x"10101010", +287 => x"10101010", +288 => x"100a83fe", +289 => x"800672fc", +290 => x"0608fc81", +291 => x"ff060772", +292 => x"fc060c51", +293 => x"51810504", +294 => x"72fc0608", +295 => x"0a101010", +296 => x"10101010", +297 => x"10101010", +298 => x"10101010", +299 => x"10101010", +300 => x"10101010", +301 => x"100a81ff", +302 => x"0672fc06", +303 => x"08fe8006", +304 => x"0772fc06", +305 => x"0c515181", +306 => x"050472fc", +307 => x"06081010", +308 => x"10101010", +309 => x"101081ff", +310 => x"0a0672fc", +311 => x"0608fe80", +312 => x"0a060772", +313 => x"fc060c51", +314 => x"51810504", +315 => x"72fc0608", +316 => x"87fc8080", +317 => x"0672fc06", +318 => x"705408f8", +319 => x"83ffff06", +320 => x"07720c51", +321 => x"51810504", +322 => x"72fc0608", +323 => x"0a101010", +324 => x"10101010", +325 => x"100a83fe", +326 => x"800672fc", +327 => x"0608fc81", +328 => x"ff060772", +329 => x"fc060c51", +330 => x"51810504", +331 => x"72fc0608", +332 => x"0a101010", +333 => x"10101010", +334 => x"10101010", +335 => x"10101010", +336 => x"100a81ff", +337 => x"0672fc06", +338 => x"08fe8006", +339 => x"0772fc06", +340 => x"0c515181", +341 => x"050472fc", +342 => x"06081010", +343 => x"10101010", +344 => x"10101010", +345 => x"10101010", +346 => x"101081ff", +347 => x"0a0672fc", +348 => x"0608fe80", +349 => x"0a060772", +350 => x"fc060c51", +351 => x"51810504", +352 => x"72fc0608", +353 => x"10101010", +354 => x"10101010", +355 => x"87fc8080", +356 => x"0672fc06", +357 => x"08f883ff", +358 => x"ff060772", +359 => x"fc060c51", +360 => x"51810504", +361 => x"72fc0608", +362 => x"83fe8006", +363 => x"72fc0670", +364 => x"5408fc81", +365 => x"ff060772", +366 => x"0c515181", +367 => x"050472fc", +368 => x"06080a10", +369 => x"10101010", +370 => x"1010100a", +371 => x"81ff0672", +372 => x"fc0608fe", +373 => x"80060772", +374 => x"fc060c51", +375 => x"51810504", +376 => x"72fc0608", +377 => x"10101010", +378 => x"10101010", +379 => x"10101010", +380 => x"10101010", +381 => x"10101010", +382 => x"10101010", +383 => x"81ff0a06", +384 => x"72fc0608", +385 => x"fe800a06", +386 => x"0772fc06", +387 => x"0c515181", +388 => x"050472fc", +389 => x"06081010", +390 => x"10101010", +391 => x"10101010", +392 => x"10101010", +393 => x"101087fc", +394 => x"80800672", +395 => x"fc0608f8", +396 => x"83ffff06", +397 => x"0772fc06", +398 => x"0c515181", +399 => x"050472fc", +400 => x"06081010", +401 => x"10101010", +402 => x"101083fe", +403 => x"800672fc", +404 => x"0608fc81", +405 => x"ff060772", +406 => x"fc060c51", +407 => x"51810504", +408 => x"72fc0608", +409 => x"81ff0672", +410 => x"fc067054", +411 => x"08fe8006", +412 => x"07720c51", +413 => x"51810504", +414 => x"72728072", +415 => x"8106ff05", +416 => x"09720605", +417 => x"71105272", +418 => x"0a100a53", +419 => x"728106ff", +420 => x"05097206", +421 => x"05711052", +422 => x"720a100a", +423 => x"53728106", +424 => x"ff050972", +425 => x"06057110", +426 => x"52720a10", +427 => x"0a537281", +428 => x"06ff0509", +429 => x"72060571", +430 => x"1052720a", +431 => x"100a5372", +432 => x"8106ff05", +433 => x"09720605", +434 => x"71105272", +435 => x"0a100a53", +436 => x"728106ff", +437 => x"05097206", +438 => x"05711052", +439 => x"720a100a", +440 => x"53728106", +441 => x"ff050972", +442 => x"06057110", +443 => x"52720a10", +444 => x"0a537281", +445 => x"06ff0509", +446 => x"72060571", +447 => x"1052720a", +448 => x"100a5372", +449 => x"83a13772", +450 => x"8106ff05", +451 => x"09720605", +452 => x"71105272", +453 => x"0a100a53", +454 => x"728106ff", +455 => x"05097206", +456 => x"05711052", +457 => x"720a100a", +458 => x"53728106", +459 => x"ff050972", +460 => x"06057110", +461 => x"52720a10", +462 => x"0a537281", +463 => x"06ff0509", +464 => x"72060571", +465 => x"1052720a", +466 => x"100a5372", +467 => x"8106ff05", +468 => x"09720605", +469 => x"71105272", +470 => x"0a100a53", +471 => x"728106ff", +472 => x"05097206", +473 => x"05711052", +474 => x"720a100a", +475 => x"53728106", +476 => x"ff050972", +477 => x"06057110", +478 => x"52720a10", +479 => x"0a537281", +480 => x"06ff0509", +481 => x"72060571", +482 => x"1052720a", +483 => x"100a5372", +484 => x"82953772", +485 => x"8106ff05", +486 => x"09720605", +487 => x"71105272", +488 => x"0a100a53", +489 => x"728106ff", +490 => x"05097206", +491 => x"05711052", +492 => x"720a100a", +493 => x"53728106", +494 => x"ff050972", +495 => x"06057110", +496 => x"52720a10", +497 => x"0a537281", +498 => x"06ff0509", +499 => x"72060571", +500 => x"1052720a", +501 => x"100a5372", +502 => x"8106ff05", +503 => x"09720605", +504 => x"71105272", +505 => x"0a100a53", +506 => x"728106ff", +507 => x"05097206", +508 => x"05711052", +509 => x"720a100a", +510 => x"53728106", +511 => x"ff050972", +512 => x"06057110", +513 => x"52720a10", +514 => x"0a537281", +515 => x"06ff0509", +516 => x"72060571", +517 => x"1052720a", +518 => x"100a5372", +519 => x"81893772", +520 => x"8106ff05", +521 => x"09720605", +522 => x"71105272", +523 => x"0a100a53", +524 => x"728106ff", +525 => x"05097206", +526 => x"05711052", +527 => x"720a100a", +528 => x"53728106", +529 => x"ff050972", +530 => x"06057110", +531 => x"52720a10", +532 => x"0a537281", +533 => x"06ff0509", +534 => x"72060571", +535 => x"1052720a", +536 => x"100a5372", +537 => x"8106ff05", +538 => x"09720605", +539 => x"71105272", +540 => x"0a100a53", +541 => x"728106ff", +542 => x"05097206", +543 => x"05711052", +544 => x"720a100a", +545 => x"53728106", +546 => x"ff050972", +547 => x"06057110", +548 => x"52720a10", +549 => x"0a537281", +550 => x"06ff0509", +551 => x"72060571", +552 => x"1052720a", +553 => x"100a5351", +554 => x"51535181", +555 => x"05043c04", +556 => x"70700b0b", +557 => x"819acc08", +558 => x"52841208", +559 => x"70810651", +560 => x"51700970", +561 => x"81050906", +562 => x"0a098106", +563 => x"ff0509e9", +564 => x"0bf70506", +565 => x"84010505", +566 => x"04710881", +567 => x"ff06800c", +568 => x"50500470", +569 => x"700b0b81", +570 => x"9acc0852", +571 => x"84120870", +572 => x"0a100a70", +573 => x"81065151", +574 => x"51700970", +575 => x"81050906", +576 => x"0a098106", +577 => x"ff0509e4", +578 => x"0bf70506", +579 => x"84010505", +580 => x"0473720c", +581 => x"50500481", +582 => x"8ad80809", +583 => x"70810509", +584 => x"060a8106", +585 => x"ff0509b0", +586 => x"0bf70506", +587 => x"84010505", +588 => x"04838080", +589 => x"0b0b0b81", +590 => x"9acc0c82", +591 => x"a0800b0b", +592 => x"0b819ad0", +593 => x"0c829080", +594 => x"0b819ae0", +595 => x"0c0b0b81", +596 => x"9ad40b81", +597 => x"9ae40c04", +598 => x"f8808080", +599 => x"a40b0b0b", +600 => x"819acc0c", +601 => x"f8808082", +602 => x"800b0b0b", +603 => x"819ad00c", +604 => x"f8808084", +605 => x"800b819a", +606 => x"e00cf880", +607 => x"8080940b", +608 => x"819ae40c", +609 => x"f8808080", +610 => x"9c0b819a", +611 => x"dc0cf880", +612 => x"8080a00b", +613 => x"819ae80c", +614 => x"04f23d0d", +615 => x"600b0b81", +616 => x"9ad00856", +617 => x"5d82750c", +618 => x"8059805a", +619 => x"800b8f3d", +620 => x"71101017", +621 => x"70085957", +622 => x"5d5b8076", +623 => x"81ff067c", +624 => x"832b5658", +625 => x"5276537b", +626 => x"519ede3f", +627 => x"7d7f7a72", +628 => x"077c7207", +629 => x"71716081", +630 => x"05415f5d", +631 => x"5b595755", +632 => x"7a8724ff", +633 => x"050980ce", +634 => x"0bf70506", +635 => x"84010505", +636 => x"040b0b81", +637 => x"9ad0087b", +638 => x"10101170", +639 => x"08585155", +640 => x"807681ff", +641 => x"067c832b", +642 => x"56585276", +643 => x"537b519e", +644 => x"983f7d7f", +645 => x"7a72077c", +646 => x"72077171", +647 => x"60810541", +648 => x"5f5d5b59", +649 => x"5755877b", +650 => x"25ff0509", +651 => x"c40bf705", +652 => x"06840105", +653 => x"0504767d", +654 => x"0c77841e", +655 => x"0c7c800c", +656 => x"903d0d04", +657 => x"7070819a", +658 => x"d8335170", +659 => x"09708105", +660 => x"09060a09", +661 => x"8106ff05", +662 => x"0980d60b", +663 => x"f7050684", +664 => x"01050504", +665 => x"818ae408", +666 => x"70085252", +667 => x"70097081", +668 => x"0509060a", +669 => x"8106ff05", +670 => x"09b10bf7", +671 => x"05068401", +672 => x"05050484", +673 => x"12818ae4", +674 => x"0c702d81", +675 => x"8ae40870", +676 => x"08525270", +677 => x"09708105", +678 => x"09060a09", +679 => x"8106ff05", +680 => x"09e10bf7", +681 => x"05068401", +682 => x"05050481", +683 => x"0b819ad8", +684 => x"34505004", +685 => x"04700b0b", +686 => x"819ac808", +687 => x"09708105", +688 => x"09060a81", +689 => x"06ff0509", +690 => x"a50bf705", +691 => x"06840105", +692 => x"05040b0b", +693 => x"0b0b8009", +694 => x"70810509", +695 => x"060a0981", +696 => x"06ff0509", +697 => x"8b0bf705", +698 => x"06840105", +699 => x"05045004", +700 => x"0b0b819a", +701 => x"c8510b0b", +702 => x"0bea853f", +703 => x"50040470", +704 => x"70028f05", +705 => x"33527109", +706 => x"81058a05", +707 => x"09708105", +708 => x"09060a81", +709 => x"06ff0509", +710 => x"910bf705", +711 => x"06840105", +712 => x"05047151", +713 => x"fbbd3f50", +714 => x"50048d51", +715 => x"fbb53f71", +716 => x"51fbb03f", +717 => x"505004cd", +718 => x"3d0db63d", +719 => x"70708405", +720 => x"520895ff", +721 => x"5d56a63d", +722 => x"5f5d8075", +723 => x"70810557", +724 => x"33765c55", +725 => x"59730981", +726 => x"05790509", +727 => x"70810509", +728 => x"060a8106", +729 => x"ff050981", +730 => x"ad0bf705", +731 => x"06840105", +732 => x"05048f3d", +733 => x"5c730981", +734 => x"05a50509", +735 => x"70810509", +736 => x"060a0981", +737 => x"06ff0509", +738 => x"819c0bf7", +739 => x"05068401", +740 => x"05050479", +741 => x"7081055b", +742 => x"33547309", +743 => x"810580e4", +744 => x"05097081", +745 => x"0509060a", +746 => x"8106ff05", +747 => x"0982ee0b", +748 => x"f7050684", +749 => x"01050504", +750 => x"7380e424", +751 => x"ff050981", +752 => x"900bf705", +753 => x"06840105", +754 => x"05047309", +755 => x"810580e3", +756 => x"05097081", +757 => x"0509060a", +758 => x"8106ff05", +759 => x"09bf0bf7", +760 => x"05068401", +761 => x"05050480", +762 => x"52a5517a", +763 => x"2d805273", +764 => x"517a2d82", +765 => x"19597970", +766 => x"81055b33", +767 => x"54730970", +768 => x"81050906", +769 => x"0a098106", +770 => x"ff0509fe", +771 => x"e80bf705", +772 => x"06840105", +773 => x"05047880", +774 => x"0cb53d0d", +775 => x"047c841e", +776 => x"83123356", +777 => x"5e578052", +778 => x"73517a2d", +779 => x"81197a70", +780 => x"81055c33", +781 => x"55597309", +782 => x"70810509", +783 => x"060a0981", +784 => x"06ff0509", +785 => x"feaf0bf7", +786 => x"05068401", +787 => x"050504c6", +788 => x"39730981", +789 => x"0580f305", +790 => x"09708105", +791 => x"09060a09", +792 => x"8106ff05", +793 => x"09ff800b", +794 => x"f7050684", +795 => x"01050504", +796 => x"7c841e71", +797 => x"08595e56", +798 => x"80773356", +799 => x"56740981", +800 => x"05760509", +801 => x"70810509", +802 => x"060a8106", +803 => x"ff0509aa", +804 => x"0bf70506", +805 => x"84010505", +806 => x"04811670", +807 => x"1870335a", +808 => x"55567709", +809 => x"70810509", +810 => x"060a0981", +811 => x"06ff0509", +812 => x"e80bf705", +813 => x"06840105", +814 => x"0504ff16", +815 => x"55807625", +816 => x"ff0509fe", +817 => x"b10bf705", +818 => x"06840105", +819 => x"05047670", +820 => x"81055833", +821 => x"58805277", +822 => x"517a2d81", +823 => x"1975ff17", +824 => x"57575980", +825 => x"7625ff05", +826 => x"09fe8b0b", +827 => x"f7050684", +828 => x"01050504", +829 => x"76708105", +830 => x"58335880", +831 => x"5277517a", +832 => x"2d811975", +833 => x"ff175757", +834 => x"59758024", +835 => x"ff0509ff", +836 => x"bd0bf705", +837 => x"06840105", +838 => x"0504fdda", +839 => x"397c841e", +840 => x"71087071", +841 => x"9f2c5953", +842 => x"595e5680", +843 => x"7524ff05", +844 => x"0981f80b", +845 => x"f7050684", +846 => x"01050504", +847 => x"757e7d58", +848 => x"59558057", +849 => x"74098105", +850 => x"77050970", +851 => x"81050906", +852 => x"0a098106", +853 => x"ff050980", +854 => x"f40bf705", +855 => x"06840105", +856 => x"0504b07c", +857 => x"3402b905", +858 => x"567b0981", +859 => x"05760509", +860 => x"70810509", +861 => x"060a8106", +862 => x"ff0509b3", +863 => x"0bf70506", +864 => x"84010505", +865 => x"04ff1656", +866 => x"75787081", +867 => x"055a3b81", +868 => x"17577b09", +869 => x"81057605", +870 => x"09708105", +871 => x"09060a09", +872 => x"8106ff05", +873 => x"09df0bf7", +874 => x"05068401", +875 => x"05050480", +876 => x"7834767e", +877 => x"ff125758", +878 => x"56758024", +879 => x"ff0509fe", +880 => x"8d0bf705", +881 => x"06840105", +882 => x"0504fcaa", +883 => x"398a7536", +884 => x"0b0b80fb", +885 => x"fc055473", +886 => x"76708105", +887 => x"583b8a75", +888 => x"35557409", +889 => x"70810509", +890 => x"060a8106", +891 => x"ff0509fe", +892 => x"f80bf705", +893 => x"06840105", +894 => x"05048a75", +895 => x"360b0b80", +896 => x"fbfc0554", +897 => x"73767081", +898 => x"05583b8a", +899 => x"75355574", +900 => x"09708105", +901 => x"09060a09", +902 => x"8106ff05", +903 => x"09ffae0b", +904 => x"f7050684", +905 => x"01050504", +906 => x"febf3974", +907 => x"527653b5", +908 => x"3dffb805", +909 => x"5195c73f", +910 => x"a43d0856", +911 => x"fdfe3970", +912 => x"80c10b81", +913 => x"e9983480", +914 => x"0b81eaf0", +915 => x"0c70800c", +916 => x"50047070", +917 => x"800b81e9", +918 => x"98335252", +919 => x"70098105", +920 => x"80c10509", +921 => x"70810509", +922 => x"060a8106", +923 => x"ff0509a0", +924 => x"0bf70506", +925 => x"84010505", +926 => x"047181ea", +927 => x"f0080781", +928 => x"eaf00c80", +929 => x"c20b81e9", +930 => x"9c347080", +931 => x"0c505004", +932 => x"810b81ea", +933 => x"f0080781", +934 => x"eaf00c80", +935 => x"c20b81e9", +936 => x"9c347080", +937 => x"0c505004", +938 => x"70707070", +939 => x"7570088a", +940 => x"05535381", +941 => x"e9983351", +942 => x"70098105", +943 => x"80c10509", +944 => x"70810509", +945 => x"060a8106", +946 => x"ff0509a9", +947 => x"0bf70506", +948 => x"84010505", +949 => x"04730970", +950 => x"81050906", +951 => x"0a098106", +952 => x"ff0509cf", +953 => x"0bf70506", +954 => x"84010505", +955 => x"0470800c", +956 => x"50505050", +957 => x"04ff1270", +958 => x"81e99408", +959 => x"31740c80", +960 => x"0c505050", +961 => x"5004fc3d", +962 => x"0d81e9a0", +963 => x"08557409", +964 => x"70810509", +965 => x"060a8106", +966 => x"ff050994", +967 => x"0bf70506", +968 => x"84010505", +969 => x"04767508", +970 => x"710c81e9", +971 => x"a0085654", +972 => x"8c155381", +973 => x"e9940852", +974 => x"8a5190ac", +975 => x"3f73800c", +976 => x"863d0d04", +977 => x"fb3d0d77", +978 => x"70085656", +979 => x"b05381e9", +980 => x"a0085274", +981 => x"51acb53f", +982 => x"850b8c17", +983 => x"0c850b8c", +984 => x"160c7508", +985 => x"750c81e9", +986 => x"a0085473", +987 => x"09708105", +988 => x"09060a81", +989 => x"06ff0509", +990 => x"920bf705", +991 => x"06840105", +992 => x"05047308", +993 => x"750c81e9", +994 => x"a008548c", +995 => x"145381e9", +996 => x"9408528a", +997 => x"518fd13f", +998 => x"84150809", +999 => x"70810509", +1000 => x"060a0981", +1001 => x"06ff0509", +1002 => x"b50bf705", +1003 => x"06840105", +1004 => x"0504860b", +1005 => x"8c160c88", +1006 => x"15528816", +1007 => x"08518dd3", +1008 => x"3f81e9a0", +1009 => x"08700876", +1010 => x"0c548c15", +1011 => x"7054548a", +1012 => x"52730851", +1013 => x"8f923f73", +1014 => x"800c873d", +1015 => x"0d047508", +1016 => x"54b05373", +1017 => x"527551ab", +1018 => x"a33f7380", +1019 => x"0c873d0d", +1020 => x"04e13d0d", +1021 => x"b05196c2", +1022 => x"3f800881", +1023 => x"e9900cb0", +1024 => x"5196b73f", +1025 => x"800881e9", +1026 => x"a00c81e9", +1027 => x"90088008", +1028 => x"0c800b80", +1029 => x"0884050c", +1030 => x"820b8008", +1031 => x"88050ca8", +1032 => x"0b80088c", +1033 => x"050c9f53", +1034 => x"0b0b80fc", +1035 => x"88528008", +1036 => x"900551aa", +1037 => x"d73f993d", +1038 => x"5c9f530b", +1039 => x"0b80fca8", +1040 => x"527b51aa", +1041 => x"c73f8a0b", +1042 => x"81a7d80c", +1043 => x"0b0b8186", +1044 => x"cc51f5e3", +1045 => x"3f0b0b80", +1046 => x"fcc851f5", +1047 => x"da3f0b0b", +1048 => x"8186cc51", +1049 => x"f5d13f81", +1050 => x"8aec0809", +1051 => x"70810509", +1052 => x"060a8106", +1053 => x"ff05098a", +1054 => x"ef0bf705", +1055 => x"06840105", +1056 => x"05040b0b", +1057 => x"80fcf851", +1058 => x"f5ad3f0b", +1059 => x"0b8186cc", +1060 => x"51f5a43f", +1061 => x"818ae808", +1062 => x"520b0b80", +1063 => x"fda451f5", +1064 => x"963f8051", +1065 => x"80c5a13f", +1066 => x"8008819a", +1067 => x"f80c810b", +1068 => x"923d5c58", +1069 => x"800b818a", +1070 => x"e80825ff", +1071 => x"05098492", +1072 => x"0bf70506", +1073 => x"84010505", +1074 => x"048e3d5d", +1075 => x"80c10b81", +1076 => x"e9983481", +1077 => x"0b81eaf0", +1078 => x"0c80c20b", +1079 => x"81e99c34", +1080 => x"825e835a", +1081 => x"9f530b0b", +1082 => x"80fdd452", +1083 => x"7a51a99c", +1084 => x"3f815f80", +1085 => x"7b537c52", +1086 => x"558eba3f", +1087 => x"80080981", +1088 => x"05750509", +1089 => x"70810509", +1090 => x"060a0981", +1091 => x"06ff0509", +1092 => x"8b0bf705", +1093 => x"06840105", +1094 => x"05048155", +1095 => x"7481eaf0", +1096 => x"0c7d7057", +1097 => x"55748325", +1098 => x"ff0509b4", +1099 => x"0bf70506", +1100 => x"84010505", +1101 => x"04741010", +1102 => x"15fd0540", +1103 => x"a13dffbc", +1104 => x"05538352", +1105 => x"75518ca0", +1106 => x"3f811e70", +1107 => x"5f705755", +1108 => x"837524ff", +1109 => x"0509de0b", +1110 => x"f7050684", +1111 => x"01050504", +1112 => x"7f547453", +1113 => x"819afc52", +1114 => x"81e9a851", +1115 => x"8c863f81", +1116 => x"e9a00870", +1117 => x"085757b0", +1118 => x"53765275", +1119 => x"51a88d3f", +1120 => x"850b8c18", +1121 => x"0c850b8c", +1122 => x"170c7608", +1123 => x"760c81e9", +1124 => x"a0085574", +1125 => x"09708105", +1126 => x"09060a81", +1127 => x"06ff0509", +1128 => x"920bf705", +1129 => x"06840105", +1130 => x"05047408", +1131 => x"760c81e9", +1132 => x"a008558c", +1133 => x"155381e9", +1134 => x"9408528a", +1135 => x"518ba93f", +1136 => x"84160809", +1137 => x"70810509", +1138 => x"060a0981", +1139 => x"06ff0509", +1140 => x"889f0bf7", +1141 => x"05068401", +1142 => x"05050486", +1143 => x"0b8c170c", +1144 => x"88165288", +1145 => x"17085189", +1146 => x"aa3f81e9", +1147 => x"a0087008", +1148 => x"770c578c", +1149 => x"16705455", +1150 => x"8a527408", +1151 => x"518ae93f", +1152 => x"80c10b81", +1153 => x"e99c3356", +1154 => x"56757526", +1155 => x"ff050980", +1156 => x"cc0bf705", +1157 => x"06840105", +1158 => x"050480c3", +1159 => x"5275518b", +1160 => x"d33f8008", +1161 => x"0981057f", +1162 => x"05097081", +1163 => x"0509060a", +1164 => x"8106ff05", +1165 => x"0987f50b", +1166 => x"f7050684", +1167 => x"01050504", +1168 => x"81167081", +1169 => x"ff0681e9", +1170 => x"9c335257", +1171 => x"55747627", +1172 => x"ff0509c6", +1173 => x"0bf70506", +1174 => x"84010505", +1175 => x"04797e29", +1176 => x"60707235", +1177 => x"70417272", +1178 => x"31707011", +1179 => x"11111111", +1180 => x"11517231", +1181 => x"5e538a05", +1182 => x"81e99833", +1183 => x"81e99408", +1184 => x"5a525258", +1185 => x"55760981", +1186 => x"0580c105", +1187 => x"09708105", +1188 => x"09060a81", +1189 => x"06ff0509", +1190 => x"87c10bf7", +1191 => x"05068401", +1192 => x"05050478", +1193 => x"09708105", +1194 => x"09060a09", +1195 => x"8106ff05", +1196 => x"09d30bf7", +1197 => x"05068401", +1198 => x"05050481", +1199 => x"1858818a", +1200 => x"e8087825", +1201 => x"ff0509fc", +1202 => x"830bf705", +1203 => x"06840105", +1204 => x"05048051", +1205 => x"80c0f13f", +1206 => x"800881e9", +1207 => x"8c0c0b0b", +1208 => x"80fdf451", +1209 => x"f0d13f0b", +1210 => x"0b8186cc", +1211 => x"51f0c83f", +1212 => x"0b0b80fe", +1213 => x"8451f0bf", +1214 => x"3f0b0b81", +1215 => x"86cc51f0", +1216 => x"b63f81e9", +1217 => x"9408520b", +1218 => x"0b80febc", +1219 => x"51f0a83f", +1220 => x"85520b0b", +1221 => x"80fed851", +1222 => x"f09d3f81", +1223 => x"eaf00852", +1224 => x"0b0b80fe", +1225 => x"f451f08f", +1226 => x"3f81520b", +1227 => x"0b80fed8", +1228 => x"51f0843f", +1229 => x"81e99833", +1230 => x"520b0b80", +1231 => x"ff9051ef", +1232 => x"f63f80c1", +1233 => x"520b0b80", +1234 => x"ffac51ef", +1235 => x"ea3f81e9", +1236 => x"9c33520b", +1237 => x"0b80ffc8", +1238 => x"51efdc3f", +1239 => x"80c2520b", +1240 => x"0b80ffac", +1241 => x"51efd03f", +1242 => x"81e9c808", +1243 => x"520b0b80", +1244 => x"ffe451ef", +1245 => x"c23f8752", +1246 => x"0b0b80fe", +1247 => x"d851efb7", +1248 => x"3f81a7d8", +1249 => x"08520b0b", +1250 => x"81808051", +1251 => x"efa93f0b", +1252 => x"0b81809c", +1253 => x"51efa03f", +1254 => x"0b0b8180", +1255 => x"c851ef97", +1256 => x"3f81e9a0", +1257 => x"08700853", +1258 => x"560b0b81", +1259 => x"80d451ef", +1260 => x"863f0b0b", +1261 => x"8180f051", +1262 => x"eefd3f81", +1263 => x"e9a00884", +1264 => x"1108535d", +1265 => x"0b0b8181", +1266 => x"a451eeeb", +1267 => x"3f80520b", +1268 => x"0b80fed8", +1269 => x"51eee03f", +1270 => x"81e9a008", +1271 => x"88110853", +1272 => x"580b0b81", +1273 => x"81c051ee", +1274 => x"ce3f8252", +1275 => x"0b0b80fe", +1276 => x"d851eec3", +1277 => x"3f81e9a0", +1278 => x"088c1108", +1279 => x"53590b0b", +1280 => x"8181dc51", +1281 => x"eeb13f91", +1282 => x"520b0b80", +1283 => x"fed851ee", +1284 => x"a63f81e9", +1285 => x"a0089005", +1286 => x"520b0b81", +1287 => x"81f851ee", +1288 => x"963f0b0b", +1289 => x"81829451", +1290 => x"ee8d3f0b", +1291 => x"0b8182cc", +1292 => x"51ee843f", +1293 => x"81e99008", +1294 => x"70085357", +1295 => x"0b0b8180", +1296 => x"d451edf3", +1297 => x"3f0b0b81", +1298 => x"82e051ed", +1299 => x"ea3f81e9", +1300 => x"90088411", +1301 => x"0853550b", +1302 => x"0b8181a4", +1303 => x"51edd83f", +1304 => x"80520b0b", +1305 => x"80fed851", +1306 => x"edcd3f81", +1307 => x"e9900888", +1308 => x"11085356", +1309 => x"0b0b8181", +1310 => x"c051edbb", +1311 => x"3f81520b", +1312 => x"0b80fed8", +1313 => x"51edb03f", +1314 => x"81e99008", +1315 => x"8c110853", +1316 => x"5d0b0b81", +1317 => x"81dc51ed", +1318 => x"9e3f9252", +1319 => x"0b0b80fe", +1320 => x"d851ed93", +1321 => x"3f81e990", +1322 => x"08900552", +1323 => x"0b0b8181", +1324 => x"f851ed83", +1325 => x"3f0b0b81", +1326 => x"829451ec", +1327 => x"fa3f7d52", +1328 => x"0b0b8183", +1329 => x"a051ecef", +1330 => x"3f85520b", +1331 => x"0b80fed8", +1332 => x"51ece43f", +1333 => x"79520b0b", +1334 => x"8183bc51", +1335 => x"ecd93f8d", +1336 => x"520b0b80", +1337 => x"fed851ec", +1338 => x"ce3f7f52", +1339 => x"0b0b8183", +1340 => x"d851ecc3", +1341 => x"3f87520b", +1342 => x"0b80fed8", +1343 => x"51ecb83f", +1344 => x"7e520b0b", +1345 => x"8183f451", +1346 => x"ecad3f81", +1347 => x"520b0b80", +1348 => x"fed851ec", +1349 => x"a23f7b52", +1350 => x"0b0b8184", +1351 => x"9051ec97", +1352 => x"3f0b0b81", +1353 => x"84ac51ec", +1354 => x"8e3f7a52", +1355 => x"0b0b8184", +1356 => x"e451ec83", +1357 => x"3f0b0b81", +1358 => x"858051eb", +1359 => x"fa3f0b0b", +1360 => x"8186cc51", +1361 => x"ebf13f81", +1362 => x"e98c0881", +1363 => x"9af80831", +1364 => x"70819af4", +1365 => x"0c520b0b", +1366 => x"8185b851", +1367 => x"ebd93f81", +1368 => x"9af40856", +1369 => x"817625ff", +1370 => x"0509819d", +1371 => x"0bf70506", +1372 => x"84010505", +1373 => x"04818ae8", +1374 => x"087077bd", +1375 => x"84c0290b", +1376 => x"35819aec", +1377 => x"0c767135", +1378 => x"819af00c", +1379 => x"768ddd29", +1380 => x"7187e829", +1381 => x"0b3581e9", +1382 => x"a40c5b0b", +1383 => x"0b8185c8", +1384 => x"51eb943f", +1385 => x"819aec08", +1386 => x"520b0b81", +1387 => x"85f851eb", +1388 => x"863f0b0b", +1389 => x"81868051", +1390 => x"eafd3f81", +1391 => x"9af00852", +1392 => x"0b0b8185", +1393 => x"f851eaef", +1394 => x"3f81e9a4", +1395 => x"08520b0b", +1396 => x"8186b051", +1397 => x"eae13f0b", +1398 => x"0b8186cc", +1399 => x"51ead83f", +1400 => x"800b800c", +1401 => x"a13d0d04", +1402 => x"0b0b8186", +1403 => x"d051f598", +1404 => x"39760856", +1405 => x"b0537552", +1406 => x"76519f90", +1407 => x"3f80c10b", +1408 => x"81e99c33", +1409 => x"5656f881", +1410 => x"390b0b81", +1411 => x"878051ea", +1412 => x"a63f0b0b", +1413 => x"8187b851", +1414 => x"ea9d3f0b", +1415 => x"0b8186cc", +1416 => x"51ea943f", +1417 => x"800b800c", +1418 => x"a13d0d04", +1419 => x"a13dffb8", +1420 => x"05528051", +1421 => x"80dd3f9f", +1422 => x"530b0b81", +1423 => x"87d8527a", +1424 => x"519ec93f", +1425 => x"777881e9", +1426 => x"940c8117", +1427 => x"7081ff06", +1428 => x"81e99c33", +1429 => x"5258565a", +1430 => x"f7f339ff", +1431 => x"15707731", +1432 => x"7e0c5980", +1433 => x"0b811959", +1434 => x"59818ae8", +1435 => x"087825ff", +1436 => x"0509f4d8", +1437 => x"0bf70506", +1438 => x"84010505", +1439 => x"04f8d339", +1440 => x"70707382", +1441 => x"32703070", +1442 => x"72078025", +1443 => x"800c5252", +1444 => x"50500470", +1445 => x"70707476", +1446 => x"71535452", +1447 => x"71098105", +1448 => x"82050970", +1449 => x"81050906", +1450 => x"0a8106ff", +1451 => x"05098b0b", +1452 => x"f7050684", +1453 => x"01050504", +1454 => x"83517109", +1455 => x"81058105", +1456 => x"09708105", +1457 => x"09060a81", +1458 => x"06ff0509", +1459 => x"80dd0bf7", +1460 => x"05068401", +1461 => x"05050481", +1462 => x"7226ff05", +1463 => x"0980e10b", +1464 => x"f7050684", +1465 => x"01050504", +1466 => x"71098105", +1467 => x"82050970", +1468 => x"81050906", +1469 => x"0a8106ff", +1470 => x"050980e2", +1471 => x"0bf70506", +1472 => x"84010505", +1473 => x"04710981", +1474 => x"05840509", +1475 => x"70810509", +1476 => x"060a8106", +1477 => x"ff0509bc", +1478 => x"0bf70506", +1479 => x"84010505", +1480 => x"0470730c", +1481 => x"70800c50", +1482 => x"50500480", +1483 => x"e40b81e9", +1484 => x"940825ff", +1485 => x"0509930b", +1486 => x"f7050684", +1487 => x"01050504", +1488 => x"80730c70", +1489 => x"800c5050", +1490 => x"50048373", +1491 => x"0c70800c", +1492 => x"50505004", +1493 => x"82730c70", +1494 => x"800c5050", +1495 => x"50048173", +1496 => x"0c70800c", +1497 => x"50505004", +1498 => x"70747414", +1499 => x"8205710c", +1500 => x"800c5004", +1501 => x"f73d0d7b", +1502 => x"7d7f6185", +1503 => x"1270822b", +1504 => x"75117074", +1505 => x"71708405", +1506 => x"530c5a5a", +1507 => x"5d5b760c", +1508 => x"7980f818", +1509 => x"0c798612", +1510 => x"5257585a", +1511 => x"5a767624", +1512 => x"ff0509ac", +1513 => x"0bf70506", +1514 => x"84010505", +1515 => x"0476b329", +1516 => x"822b7911", +1517 => x"51537673", +1518 => x"70840555", +1519 => x"0c811454", +1520 => x"757425ff", +1521 => x"0509ef0b", +1522 => x"f7050684", +1523 => x"01050504", +1524 => x"7681cc29", +1525 => x"19fc1108", +1526 => x"8105fc12", +1527 => x"0c7a1970", +1528 => x"089fa013", +1529 => x"0c585685", +1530 => x"0b81e994", +1531 => x"0c75800c", +1532 => x"8b3d0d04", +1533 => x"70707002", +1534 => x"93053351", +1535 => x"80028405", +1536 => x"97053354", +1537 => x"52700981", +1538 => x"05730509", +1539 => x"70810509", +1540 => x"060a8106", +1541 => x"ff050990", +1542 => x"0bf70506", +1543 => x"84010505", +1544 => x"0471800c", +1545 => x"50505004", +1546 => x"7081e998", +1547 => x"34810b80", +1548 => x"0c505050", +1549 => x"04f83d0d", +1550 => x"7a7c5956", +1551 => x"820b8319", +1552 => x"55557416", +1553 => x"70337533", +1554 => x"5b515372", +1555 => x"09810579", +1556 => x"05097081", +1557 => x"0509060a", +1558 => x"8106ff05", +1559 => x"0981860b", +1560 => x"f7050684", +1561 => x"01050504", +1562 => x"80c10b81", +1563 => x"16811656", +1564 => x"56578275", +1565 => x"25ff0509", +1566 => x"c90bf705", +1567 => x"06840105", +1568 => x"0504ffa9", +1569 => x"177081ff", +1570 => x"06555973", +1571 => x"8226ff05", +1572 => x"098b0bf7", +1573 => x"05068401", +1574 => x"05050487", +1575 => x"55815376", +1576 => x"09810580", +1577 => x"d2050970", +1578 => x"81050906", +1579 => x"0a8106ff", +1580 => x"0509ab0b", +1581 => x"f7050684", +1582 => x"01050504", +1583 => x"77527551", +1584 => x"9cb43f80", +1585 => x"53728008", +1586 => x"25ff0509", +1587 => x"910bf705", +1588 => x"06840105", +1589 => x"05048715", +1590 => x"81e9940c", +1591 => x"81537280", +1592 => x"0c8a3d0d", +1593 => x"047281e9", +1594 => x"98348275", +1595 => x"25ff0509", +1596 => x"fed00bf7", +1597 => x"05068401", +1598 => x"050504ff", +1599 => x"8539f93d", +1600 => x"0d797b7d", +1601 => x"54587259", +1602 => x"77307970", +1603 => x"30707207", +1604 => x"9f2a7371", +1605 => x"315a5259", +1606 => x"77795673", +1607 => x"0c537384", +1608 => x"130c5480", +1609 => x"0c893d0d", +1610 => x"04f93d0d", +1611 => x"797b7d7f", +1612 => x"56545254", +1613 => x"72097081", +1614 => x"0509060a", +1615 => x"8106ff05", +1616 => x"09b30bf7", +1617 => x"05068401", +1618 => x"05050470", +1619 => x"577158a0", +1620 => x"73315280", +1621 => x"7225ff05", +1622 => x"09a90bf7", +1623 => x"05068401", +1624 => x"05050477", +1625 => x"70742b57", +1626 => x"70732a78", +1627 => x"752b0756", +1628 => x"51747653", +1629 => x"5170740c", +1630 => x"7184150c", +1631 => x"73800c89", +1632 => x"3d0d0480", +1633 => x"56777230", +1634 => x"0b2b5574", +1635 => x"765351e5", +1636 => x"39fb3d0d", +1637 => x"77795555", +1638 => x"80567575", +1639 => x"24ff0509", +1640 => x"80d00bf7", +1641 => x"05068401", +1642 => x"05050480", +1643 => x"7424ff05", +1644 => x"09b70bf7", +1645 => x"05068401", +1646 => x"05050480", +1647 => x"53735274", +1648 => x"51819c3f", +1649 => x"80085475", +1650 => x"09708105", +1651 => x"09060a81", +1652 => x"06ff0509", +1653 => x"8d0bf705", +1654 => x"06840105", +1655 => x"05048008", +1656 => x"30547380", +1657 => x"0c873d0d", +1658 => x"04733076", +1659 => x"81325754", +1660 => x"ca397430", +1661 => x"55815673", +1662 => x"8025ff05", +1663 => x"09ffbc0b", +1664 => x"f7050684", +1665 => x"01050504", +1666 => x"e039fa3d", +1667 => x"0d787a57", +1668 => x"55805776", +1669 => x"7524ff05", +1670 => x"09be0bf7", +1671 => x"05068401", +1672 => x"05050475", +1673 => x"9f2c5481", +1674 => x"53757432", +1675 => x"74315274", +1676 => x"51ad3f80", +1677 => x"08547609", +1678 => x"70810509", +1679 => x"060a8106", +1680 => x"ff05098d", +1681 => x"0bf70506", +1682 => x"84010505", +1683 => x"04800830", +1684 => x"5473800c", +1685 => x"883d0d04", +1686 => x"74305581", +1687 => x"57c539fc", +1688 => x"3d0d7678", +1689 => x"53548153", +1690 => x"80747326", +1691 => x"52557209", +1692 => x"70810509", +1693 => x"060a8106", +1694 => x"ff050980", +1695 => x"d50bf705", +1696 => x"06840105", +1697 => x"05047009", +1698 => x"70810509", +1699 => x"060a8106", +1700 => x"ff050980", +1701 => x"ea0bf705", +1702 => x"06840105", +1703 => x"05048072", +1704 => x"24ff0509", +1705 => x"80d90bf7", +1706 => x"05068401", +1707 => x"05050471", +1708 => x"10731075", +1709 => x"72265354", +1710 => x"52720970", +1711 => x"81050906", +1712 => x"0a098106", +1713 => x"ff0509ff", +1714 => x"bd0bf705", +1715 => x"06840105", +1716 => x"05047351", +1717 => x"78097081", +1718 => x"0509060a", +1719 => x"098106ff", +1720 => x"05098b0b", +1721 => x"f7050684", +1722 => x"01050504", +1723 => x"74517080", +1724 => x"0c863d0d", +1725 => x"04720a10", +1726 => x"0a720a10", +1727 => x"0a535372", +1728 => x"09708105", +1729 => x"09060a81", +1730 => x"06ff0509", +1731 => x"c50bf705", +1732 => x"06840105", +1733 => x"05047174", +1734 => x"26ff0509", +1735 => x"d80bf705", +1736 => x"06840105", +1737 => x"05047372", +1738 => x"31757407", +1739 => x"740a100a", +1740 => x"740a100a", +1741 => x"55555654", +1742 => x"c6397070", +1743 => x"73528193", +1744 => x"b4085193", +1745 => x"3f505004", +1746 => x"70707352", +1747 => x"8193b408", +1748 => x"519bc43f", +1749 => x"505004f4", +1750 => x"3d0d7e60", +1751 => x"8b1170f8", +1752 => x"065b5555", +1753 => x"5d729626", +1754 => x"ff05098b", +1755 => x"0bf70506", +1756 => x"84010505", +1757 => x"04905880", +1758 => x"78247479", +1759 => x"26075580", +1760 => x"54740981", +1761 => x"05740509", +1762 => x"70810509", +1763 => x"060a0981", +1764 => x"06ff0509", +1765 => x"80f40bf7", +1766 => x"05068401", +1767 => x"0505047c", +1768 => x"5195f13f", +1769 => x"7783f726", +1770 => x"ff050980", +1771 => x"e40bf705", +1772 => x"06840105", +1773 => x"05047783", +1774 => x"2a701010", +1775 => x"10818bac", +1776 => x"058c1108", +1777 => x"58585475", +1778 => x"09810577", +1779 => x"05097081", +1780 => x"0509060a", +1781 => x"8106ff05", +1782 => x"0983b60b", +1783 => x"f7050684", +1784 => x"01050504", +1785 => x"841608fc", +1786 => x"068c1708", +1787 => x"88180871", +1788 => x"8c120c88", +1789 => x"120c5b76", +1790 => x"05841108", +1791 => x"81078412", +1792 => x"0c537c51", +1793 => x"958f3f88", +1794 => x"16547380", +1795 => x"0c8e3d0d", +1796 => x"0477892a", +1797 => x"78832a58", +1798 => x"54730970", +1799 => x"81050906", +1800 => x"0a8106ff", +1801 => x"05098180", +1802 => x"0bf70506", +1803 => x"84010505", +1804 => x"0477862a", +1805 => x"b8055784", +1806 => x"7427ff05", +1807 => x"0980e90b", +1808 => x"f7050684", +1809 => x"01050504", +1810 => x"80db1457", +1811 => x"947427ff", +1812 => x"050980d4", +1813 => x"0bf70506", +1814 => x"84010505", +1815 => x"04778c2a", +1816 => x"80ee0557", +1817 => x"80d47427", +1818 => x"ff0509bc", +1819 => x"0bf70506", +1820 => x"84010505", +1821 => x"04778f2a", +1822 => x"80f70557", +1823 => x"82d47427", +1824 => x"ff0509a4", +1825 => x"0bf70506", +1826 => x"84010505", +1827 => x"0477922a", +1828 => x"80fc0557", +1829 => x"8ad47427", +1830 => x"ff05098c", +1831 => x"0bf70506", +1832 => x"84010505", +1833 => x"0480fe57", +1834 => x"76101010", +1835 => x"818bac05", +1836 => x"8c110856", +1837 => x"53740981", +1838 => x"05730509", +1839 => x"70810509", +1840 => x"060a8106", +1841 => x"ff050980", +1842 => x"d70bf705", +1843 => x"06840105", +1844 => x"05048415", +1845 => x"08fc0670", +1846 => x"79315556", +1847 => x"738f24ff", +1848 => x"05098fb7", +1849 => x"0bf70506", +1850 => x"84010505", +1851 => x"04738025", +1852 => x"ff05098f", +1853 => x"ae0bf705", +1854 => x"06840105", +1855 => x"05048c15", +1856 => x"08557409", +1857 => x"81057305", +1858 => x"09708105", +1859 => x"09060a09", +1860 => x"8106ff05", +1861 => x"09ffbb0b", +1862 => x"f7050684", +1863 => x"01050504", +1864 => x"81175981", +1865 => x"8bbc0856", +1866 => x"75098105", +1867 => x"818bb405", +1868 => x"09708105", +1869 => x"09060a81", +1870 => x"06ff0509", +1871 => x"84ce0bf7", +1872 => x"05068401", +1873 => x"05050484", +1874 => x"1608fc06", +1875 => x"70793155", +1876 => x"55738f24", +1877 => x"ff050980", +1878 => x"e30bf705", +1879 => x"06840105", +1880 => x"0504818b", +1881 => x"b40b818b", +1882 => x"c00c818b", +1883 => x"b40b818b", +1884 => x"bc0c8074", +1885 => x"24ff0509", +1886 => x"80f80bf7", +1887 => x"05068401", +1888 => x"05050474", +1889 => x"16841108", +1890 => x"81078412", +1891 => x"0c53fcf2", +1892 => x"3988168c", +1893 => x"11085759", +1894 => x"75098105", +1895 => x"79050970", +1896 => x"81050906", +1897 => x"0a098106", +1898 => x"ff0509fc", +1899 => x"b70bf705", +1900 => x"06840105", +1901 => x"05048214", +1902 => x"59fee839", +1903 => x"77167881", +1904 => x"0784180c", +1905 => x"70818bc0", +1906 => x"0c70818b", +1907 => x"bc0c818b", +1908 => x"b40b8c12", +1909 => x"0c8c1108", +1910 => x"88120c74", +1911 => x"81078412", +1912 => x"0c740574", +1913 => x"710c5b7c", +1914 => x"5191aa3f", +1915 => x"881654fc", +1916 => x"993983ff", +1917 => x"7527ff05", +1918 => x"0985ff0b", +1919 => x"f7050684", +1920 => x"01050504", +1921 => x"74892a75", +1922 => x"832a5454", +1923 => x"73097081", +1924 => x"0509060a", +1925 => x"8106ff05", +1926 => x"0981800b", +1927 => x"f7050684", +1928 => x"01050504", +1929 => x"74862ab8", +1930 => x"05538474", +1931 => x"27ff0509", +1932 => x"80e90bf7", +1933 => x"05068401", +1934 => x"05050480", +1935 => x"db145394", +1936 => x"7427ff05", +1937 => x"0980d40b", +1938 => x"f7050684", +1939 => x"01050504", +1940 => x"748c2a80", +1941 => x"ee055380", +1942 => x"d47427ff", +1943 => x"0509bc0b", +1944 => x"f7050684", +1945 => x"01050504", +1946 => x"748f2a80", +1947 => x"f7055382", +1948 => x"d47427ff", +1949 => x"0509a40b", +1950 => x"f7050684", +1951 => x"01050504", +1952 => x"74922a80", +1953 => x"fc05538a", +1954 => x"d47427ff", +1955 => x"05098c0b", +1956 => x"f7050684", +1957 => x"01050504", +1958 => x"80fe5372", +1959 => x"10101081", +1960 => x"8bac0588", +1961 => x"11085557", +1962 => x"73098105", +1963 => x"77050970", +1964 => x"81050906", +1965 => x"0a8106ff", +1966 => x"05098aec", +1967 => x"0bf70506", +1968 => x"84010505", +1969 => x"04841408", +1970 => x"fc065b74", +1971 => x"7b27ff05", +1972 => x"09aa0bf7", +1973 => x"05068401", +1974 => x"05050488", +1975 => x"14085473", +1976 => x"09810577", +1977 => x"05097081", +1978 => x"0509060a", +1979 => x"098106ff", +1980 => x"0509d20b", +1981 => x"f7050684", +1982 => x"01050504", +1983 => x"8c140881", +1984 => x"8bac0b84", +1985 => x"0508718c", +1986 => x"190c7588", +1987 => x"190c7788", +1988 => x"130c5c57", +1989 => x"758c150c", +1990 => x"78538079", +1991 => x"24ff0509", +1992 => x"86860bf7", +1993 => x"05068401", +1994 => x"05050472", +1995 => x"822c8171", +1996 => x"2b565674", +1997 => x"7b26ff05", +1998 => x"0981a80b", +1999 => x"f7050684", +2000 => x"01050504", +2001 => x"7a750657", +2002 => x"76097081", +2003 => x"0509060a", +2004 => x"098106ff", +2005 => x"050983ee", +2006 => x"0bf70506", +2007 => x"84010505", +2008 => x"0478fc06", +2009 => x"84055974", +2010 => x"10707c06", +2011 => x"55557309", +2012 => x"70810509", +2013 => x"060a0981", +2014 => x"06ff0509", +2015 => x"83c80bf7", +2016 => x"05068401", +2017 => x"05050484", +2018 => x"1959dc39", +2019 => x"818bac0b", +2020 => x"84050879", +2021 => x"545b7880", +2022 => x"25ff0509", +2023 => x"ff8d0bf7", +2024 => x"05068401", +2025 => x"05050484", +2026 => x"ff397409", +2027 => x"7b067081", +2028 => x"8bac0b84", +2029 => x"050c5b74", +2030 => x"1055747b", +2031 => x"26ff0509", +2032 => x"a20bf705", +2033 => x"06840105", +2034 => x"05047409", +2035 => x"70810509", +2036 => x"060a0981", +2037 => x"06ff0509", +2038 => x"899c0bf7", +2039 => x"05068401", +2040 => x"05050481", +2041 => x"8bac0b88", +2042 => x"05087084", +2043 => x"1208fc06", +2044 => x"707b317b", +2045 => x"72268f72", +2046 => x"25075d57", +2047 => x"5c5c5578", +2048 => x"09708105", +2049 => x"09060a81", +2050 => x"06ff0509", +2051 => x"81c60bf7", +2052 => x"05068401", +2053 => x"05050479", +2054 => x"15818ba4", +2055 => x"08199011", +2056 => x"59545681", +2057 => x"8ba00809", +2058 => x"8105ff05", +2059 => x"09708105", +2060 => x"09060a81", +2061 => x"06ff0509", +2062 => x"900bf705", +2063 => x"06840105", +2064 => x"0504a08f", +2065 => x"13e08006", +2066 => x"5776527c", +2067 => x"518cc73f", +2068 => x"80085480", +2069 => x"08098105", +2070 => x"ff050970", +2071 => x"81050906", +2072 => x"0a8106ff", +2073 => x"0509ba0b", +2074 => x"f7050684", +2075 => x"01050504", +2076 => x"80087627", +2077 => x"ff050983", +2078 => x"e90bf705", +2079 => x"06840105", +2080 => x"05047409", +2081 => x"8105818b", +2082 => x"ac050970", +2083 => x"81050906", +2084 => x"0a8106ff", +2085 => x"050983ca", +2086 => x"0bf70506", +2087 => x"84010505", +2088 => x"04818bac", +2089 => x"0b880508", +2090 => x"55841508", +2091 => x"fc067079", +2092 => x"31797226", +2093 => x"8f722507", +2094 => x"5d555a7a", +2095 => x"09708105", +2096 => x"09060a09", +2097 => x"8106ff05", +2098 => x"0986d00b", +2099 => x"f7050684", +2100 => x"01050504", +2101 => x"77810784", +2102 => x"160c7715", +2103 => x"70818bac", +2104 => x"0b88050c", +2105 => x"74810784", +2106 => x"120c567c", +2107 => x"518ba63f", +2108 => x"88155473", +2109 => x"800c8e3d", +2110 => x"0d047483", +2111 => x"2a705454", +2112 => x"807424ff", +2113 => x"050982a6", +2114 => x"0bf70506", +2115 => x"84010505", +2116 => x"0472822c", +2117 => x"81712b81", +2118 => x"8bb00807", +2119 => x"70818bac", +2120 => x"0b84050c", +2121 => x"75101010", +2122 => x"818bac05", +2123 => x"88110871", +2124 => x"8c1b0c70", +2125 => x"881b0c79", +2126 => x"88130c57", +2127 => x"555c5575", +2128 => x"8c150cfb", +2129 => x"d3397879", +2130 => x"10101081", +2131 => x"8bac0570", +2132 => x"565b5c8c", +2133 => x"14085675", +2134 => x"09810574", +2135 => x"05097081", +2136 => x"0509060a", +2137 => x"8106ff05", +2138 => x"0980d70b", +2139 => x"f7050684", +2140 => x"01050504", +2141 => x"841608fc", +2142 => x"06707931", +2143 => x"5853768f", +2144 => x"24ff0509", +2145 => x"86c10bf7", +2146 => x"05068401", +2147 => x"05050476", +2148 => x"8025ff05", +2149 => x"0986f40b", +2150 => x"f7050684", +2151 => x"01050504", +2152 => x"8c160856", +2153 => x"75098105", +2154 => x"74050970", +2155 => x"81050906", +2156 => x"0a098106", +2157 => x"ff0509ff", +2158 => x"bb0bf705", +2159 => x"06840105", +2160 => x"05048814", +2161 => x"811a7083", +2162 => x"06555a54", +2163 => x"72097081", +2164 => x"0509060a", +2165 => x"098106ff", +2166 => x"0509fef7", +2167 => x"0bf70506", +2168 => x"84010505", +2169 => x"047b8306", +2170 => x"56750970", +2171 => x"81050906", +2172 => x"0a8106ff", +2173 => x"0509fbb2", +2174 => x"0bf70506", +2175 => x"84010505", +2176 => x"04ff1cf8", +2177 => x"1b5b5c88", +2178 => x"1a080981", +2179 => x"057a0509", +2180 => x"70810509", +2181 => x"060a8106", +2182 => x"ff0509c9", +2183 => x"0bf70506", +2184 => x"84010505", +2185 => x"04fb9039", +2186 => x"831953f9", +2187 => x"fe398314", +2188 => x"70822c81", +2189 => x"712b818b", +2190 => x"b0080770", +2191 => x"818bac0b", +2192 => x"84050c76", +2193 => x"10101081", +2194 => x"8bac0588", +2195 => x"1108718c", +2196 => x"1c0c7088", +2197 => x"1c0c7a88", +2198 => x"130c5853", +2199 => x"5d5653fd", +2200 => x"de39818a", +2201 => x"f0081759", +2202 => x"80080981", +2203 => x"05760509", +2204 => x"70810509", +2205 => x"060a8106", +2206 => x"ff050982", +2207 => x"870bf705", +2208 => x"06840105", +2209 => x"0504818b", +2210 => x"a0080981", +2211 => x"05ff0509", +2212 => x"70810509", +2213 => x"060a8106", +2214 => x"ff050985", +2215 => x"db0bf705", +2216 => x"06840105", +2217 => x"05047376", +2218 => x"3119818a", +2219 => x"f00c7387", +2220 => x"06705653", +2221 => x"72097081", +2222 => x"0509060a", +2223 => x"8106ff05", +2224 => x"09900bf7", +2225 => x"05068401", +2226 => x"05050488", +2227 => x"73317015", +2228 => x"55557614", +2229 => x"9fff06a0", +2230 => x"80713116", +2231 => x"70547e53", +2232 => x"515387b2", +2233 => x"3f800856", +2234 => x"80080981", +2235 => x"05ff0509", +2236 => x"70810509", +2237 => x"060a8106", +2238 => x"ff050982", +2239 => x"970bf705", +2240 => x"06840105", +2241 => x"0504818a", +2242 => x"f0081370", +2243 => x"818af00c", +2244 => x"7475818b", +2245 => x"ac0b8805", +2246 => x"0c777631", +2247 => x"15810755", +2248 => x"56597a09", +2249 => x"8105818b", +2250 => x"ac050970", +2251 => x"81050906", +2252 => x"0a8106ff", +2253 => x"050984cd", +2254 => x"0bf70506", +2255 => x"84010505", +2256 => x"04798f26", +2257 => x"ff050983", +2258 => x"e60bf705", +2259 => x"06840105", +2260 => x"0504810b", +2261 => x"84150c84", +2262 => x"1508fc06", +2263 => x"70793179", +2264 => x"72268f72", +2265 => x"25075d55", +2266 => x"5a7a0970", +2267 => x"81050906", +2268 => x"0a8106ff", +2269 => x"0509fadc", +2270 => x"0bf70506", +2271 => x"84010505", +2272 => x"04819839", +2273 => x"80089fff", +2274 => x"06557409", +2275 => x"70810509", +2276 => x"060a0981", +2277 => x"06ff0509", +2278 => x"fdec0bf7", +2279 => x"05068401", +2280 => x"05050478", +2281 => x"818af00c", +2282 => x"818bac0b", +2283 => x"8805087a", +2284 => x"18810784", +2285 => x"120c5581", +2286 => x"8b9c0879", +2287 => x"27ff0509", +2288 => x"8e0bf705", +2289 => x"06840105", +2290 => x"05047881", +2291 => x"8b9c0c81", +2292 => x"8b980879", +2293 => x"27ff0509", +2294 => x"f9cf0bf7", +2295 => x"05068401", +2296 => x"05050478", +2297 => x"818b980c", +2298 => x"841508fc", +2299 => x"06707931", +2300 => x"7972268f", +2301 => x"7225075d", +2302 => x"555a7a09", +2303 => x"70810509", +2304 => x"060a8106", +2305 => x"ff0509f9", +2306 => x"cb0bf705", +2307 => x"06840105", +2308 => x"05048839", +2309 => x"80745753", +2310 => x"fdec397c", +2311 => x"5184f63f", +2312 => x"800b800c", +2313 => x"8e3d0d04", +2314 => x"807324ff", +2315 => x"0509ad0b", +2316 => x"f7050684", +2317 => x"01050504", +2318 => x"72822c81", +2319 => x"712b818b", +2320 => x"b0080770", +2321 => x"818bac0b", +2322 => x"84050c5c", +2323 => x"5a768c17", +2324 => x"0c738817", +2325 => x"0c758818", +2326 => x"0cf5b939", +2327 => x"83137082", +2328 => x"2c81712b", +2329 => x"818bb008", +2330 => x"0770818b", +2331 => x"ac0b8405", +2332 => x"0c5d5b53", +2333 => x"d8397a75", +2334 => x"065c7b09", +2335 => x"70810509", +2336 => x"060a0981", +2337 => x"06ff0509", +2338 => x"f9bc0bf7", +2339 => x"05068401", +2340 => x"05050484", +2341 => x"19751056", +2342 => x"59dc39ff", +2343 => x"17810559", +2344 => x"f181398c", +2345 => x"15088816", +2346 => x"08718c12", +2347 => x"0c88120c", +2348 => x"59751584", +2349 => x"11088107", +2350 => x"84120c58", +2351 => x"7c5183d5", +2352 => x"3f881554", +2353 => x"f8ad3977", +2354 => x"16788107", +2355 => x"84180c8c", +2356 => x"17088818", +2357 => x"08718c12", +2358 => x"0c88120c", +2359 => x"5c70818b", +2360 => x"c00c7081", +2361 => x"8bbc0c81", +2362 => x"8bb40b8c", +2363 => x"120c8c11", +2364 => x"0888120c", +2365 => x"77810784", +2366 => x"120c7705", +2367 => x"77710c55", +2368 => x"7c518391", +2369 => x"3f881654", +2370 => x"ee803972", +2371 => x"16841108", +2372 => x"81078412", +2373 => x"0c588c16", +2374 => x"08881708", +2375 => x"718c120c", +2376 => x"88120c57", +2377 => x"7c5182ed", +2378 => x"3f881654", +2379 => x"eddc3972", +2380 => x"84150cf4", +2381 => x"1af80670", +2382 => x"841d0881", +2383 => x"0607841d", +2384 => x"0c701c55", +2385 => x"56850b84", +2386 => x"150c850b", +2387 => x"88150c8f", +2388 => x"7627ff05", +2389 => x"09fce00b", +2390 => x"f7050684", +2391 => x"01050504", +2392 => x"881b527c", +2393 => x"5187b03f", +2394 => x"818bac0b", +2395 => x"88050881", +2396 => x"8af0085a", +2397 => x"55fcc039", +2398 => x"78818af0", +2399 => x"0c73818b", +2400 => x"a00cfaaa", +2401 => x"39728415", +2402 => x"0cfcac39", +2403 => x"fb3d0d77", +2404 => x"707a7c58", +2405 => x"5553568f", +2406 => x"7527ff05", +2407 => x"0981a40b", +2408 => x"f7050684", +2409 => x"01050504", +2410 => x"72760783", +2411 => x"06517009", +2412 => x"70810509", +2413 => x"060a0981", +2414 => x"06ff0509", +2415 => x"81850bf7", +2416 => x"05068401", +2417 => x"05050475", +2418 => x"73525470", +2419 => x"70840552", +2420 => x"08747084", +2421 => x"05560c73", +2422 => x"71708405", +2423 => x"53087170", +2424 => x"8405530c", +2425 => x"71708405", +2426 => x"53087170", +2427 => x"8405530c", +2428 => x"71708405", +2429 => x"53087170", +2430 => x"8405530c", +2431 => x"f0165654", +2432 => x"748f26ff", +2433 => x"0509c40b", +2434 => x"f7050684", +2435 => x"01050504", +2436 => x"837527ff", +2437 => x"0509a80b", +2438 => x"f7050684", +2439 => x"01050504", +2440 => x"70708405", +2441 => x"52087470", +2442 => x"8405560c", +2443 => x"fc155574", +2444 => x"8326ff05", +2445 => x"09ea0bf7", +2446 => x"05068401", +2447 => x"05050473", +2448 => x"715452ff", +2449 => x"15517009", +2450 => x"8105ff05", +2451 => x"09708105", +2452 => x"09060a81", +2453 => x"06ff0509", +2454 => x"b40bf705", +2455 => x"06840105", +2456 => x"05047270", +2457 => x"81055472", +2458 => x"70810554", +2459 => x"3bff1151", +2460 => x"70098105", +2461 => x"ff050970", +2462 => x"81050906", +2463 => x"0a098106", +2464 => x"ff0509de", +2465 => x"0bf70506", +2466 => x"84010505", +2467 => x"0475800c", +2468 => x"873d0d04", +2469 => x"04047070", +2470 => x"7070800b", +2471 => x"81eaf40c", +2472 => x"76518cc1", +2473 => x"3f800853", +2474 => x"80080981", +2475 => x"05ff0509", +2476 => x"70810509", +2477 => x"060a8106", +2478 => x"ff050991", +2479 => x"0bf70506", +2480 => x"84010505", +2481 => x"0472800c", +2482 => x"50505050", +2483 => x"0481eaf4", +2484 => x"08547309", +2485 => x"70810509", +2486 => x"060a8106", +2487 => x"ff0509e5", +2488 => x"0bf70506", +2489 => x"84010505", +2490 => x"04757471", +2491 => x"0c527280", +2492 => x"0c505050", +2493 => x"5004fb3d", +2494 => x"0d777970", +2495 => x"72078306", +2496 => x"53545270", +2497 => x"09708105", +2498 => x"09060a09", +2499 => x"8106ff05", +2500 => x"09b20bf7", +2501 => x"05068401", +2502 => x"05050471", +2503 => x"73730854", +2504 => x"56547109", +2505 => x"81057308", +2506 => x"05097081", +2507 => x"0509060a", +2508 => x"8106ff05", +2509 => x"0981890b", +2510 => x"f7050684", +2511 => x"01050504", +2512 => x"73755452", +2513 => x"71337081", +2514 => x"ff065254", +2515 => x"70097081", +2516 => x"0509060a", +2517 => x"8106ff05", +2518 => x"0980cf0b", +2519 => x"f7050684", +2520 => x"01050504", +2521 => x"72335570", +2522 => x"09810575", +2523 => x"05097081", +2524 => x"0509060a", +2525 => x"098106ff", +2526 => x"0509b20b", +2527 => x"f7050684", +2528 => x"01050504", +2529 => x"81128114", +2530 => x"71337081", +2531 => x"ff065456", +2532 => x"54527009", +2533 => x"70810509", +2534 => x"060a0981", +2535 => x"06ff0509", +2536 => x"c30bf705", +2537 => x"06840105", +2538 => x"05047233", +2539 => x"557381ff", +2540 => x"067581ff", +2541 => x"06717131", +2542 => x"800c5552", +2543 => x"873d0d04", +2544 => x"7109f7fb", +2545 => x"fdff1306", +2546 => x"f8848281", +2547 => x"80065271", +2548 => x"09708105", +2549 => x"09060a09", +2550 => x"8106ff05", +2551 => x"09b70bf7", +2552 => x"05068401", +2553 => x"05050484", +2554 => x"14841671", +2555 => x"08545654", +2556 => x"71098105", +2557 => x"75080509", +2558 => x"70810509", +2559 => x"060a8106", +2560 => x"ff0509ff", +2561 => x"bb0bf705", +2562 => x"06840105", +2563 => x"05047375", +2564 => x"5452feb0", +2565 => x"39800b80", +2566 => x"0c873d0d", +2567 => x"04fb3d0d", +2568 => x"77705256", +2569 => x"fcee3f81", +2570 => x"8bac0b88", +2571 => x"05088411", +2572 => x"08fc0670", +2573 => x"7b319fef", +2574 => x"05e08006", +2575 => x"e0800552", +2576 => x"5555a080", +2577 => x"7524ff05", +2578 => x"09b30bf7", +2579 => x"05068401", +2580 => x"05050480", +2581 => x"527551fc", +2582 => x"bd3f818b", +2583 => x"b4081453", +2584 => x"72098105", +2585 => x"80080509", +2586 => x"70810509", +2587 => x"060a8106", +2588 => x"ff050997", +2589 => x"0bf70506", +2590 => x"84010505", +2591 => x"047551fc", +2592 => x"943f8053", +2593 => x"72800c87", +2594 => x"3d0d0474", +2595 => x"30527551", +2596 => x"fc843f80", +2597 => x"08098105", +2598 => x"ff050970", +2599 => x"81050906", +2600 => x"0a8106ff", +2601 => x"0509b00b", +2602 => x"f7050684", +2603 => x"01050504", +2604 => x"818bac0b", +2605 => x"88050874", +2606 => x"76318107", +2607 => x"84120c53", +2608 => x"818af008", +2609 => x"7531818a", +2610 => x"f00c7551", +2611 => x"fbc73f81", +2612 => x"0b800c87", +2613 => x"3d0d0480", +2614 => x"527551fb", +2615 => x"b93f818b", +2616 => x"ac0b8805", +2617 => x"08800871", +2618 => x"3154548f", +2619 => x"7325ff05", +2620 => x"09ff8a0b", +2621 => x"f7050684", +2622 => x"01050504", +2623 => x"8008818b", +2624 => x"a0083181", +2625 => x"8af00c72", +2626 => x"81078415", +2627 => x"0c7551fb", +2628 => x"843f8053", +2629 => x"feee39f7", +2630 => x"3d0d7b7d", +2631 => x"545a7209", +2632 => x"70810509", +2633 => x"060a8106", +2634 => x"ff050984", +2635 => x"9e0bf705", +2636 => x"06840105", +2637 => x"05047951", +2638 => x"fada3ff8", +2639 => x"13841108", +2640 => x"70fe0670", +2641 => x"13841108", +2642 => x"fc065c57", +2643 => x"58545781", +2644 => x"8bb40809", +2645 => x"81057405", +2646 => x"09708105", +2647 => x"09060a81", +2648 => x"06ff0509", +2649 => x"85840bf7", +2650 => x"05068401", +2651 => x"05050477", +2652 => x"84150c80", +2653 => x"73810656", +2654 => x"59740981", +2655 => x"05790509", +2656 => x"70810509", +2657 => x"060a8106", +2658 => x"ff050983", +2659 => x"c20bf705", +2660 => x"06840105", +2661 => x"05047714", +2662 => x"84110881", +2663 => x"06565374", +2664 => x"09708105", +2665 => x"09060a09", +2666 => x"8106ff05", +2667 => x"0980d40b", +2668 => x"f7050684", +2669 => x"01050504", +2670 => x"77165678", +2671 => x"09708105", +2672 => x"09060a09", +2673 => x"8106ff05", +2674 => x"0983bf0b", +2675 => x"f7050684", +2676 => x"01050504", +2677 => x"88140855", +2678 => x"74098105", +2679 => x"818bb405", +2680 => x"09708105", +2681 => x"09060a81", +2682 => x"06ff0509", +2683 => x"84e60bf7", +2684 => x"05068401", +2685 => x"0505048c", +2686 => x"1408708c", +2687 => x"170c7588", +2688 => x"120c5875", +2689 => x"81078418", +2690 => x"0c751776", +2691 => x"710c5478", +2692 => x"09708105", +2693 => x"09060a09", +2694 => x"8106ff05", +2695 => x"0982a70b", +2696 => x"f7050684", +2697 => x"01050504", +2698 => x"83ff7627", +2699 => x"ff050982", +2700 => x"ea0bf705", +2701 => x"06840105", +2702 => x"05047589", +2703 => x"2a76832a", +2704 => x"54547309", +2705 => x"70810509", +2706 => x"060a8106", +2707 => x"ff050981", +2708 => x"800bf705", +2709 => x"06840105", +2710 => x"05047586", +2711 => x"2ab80553", +2712 => x"847427ff", +2713 => x"050980e9", +2714 => x"0bf70506", +2715 => x"84010505", +2716 => x"0480db14", +2717 => x"53947427", +2718 => x"ff050980", +2719 => x"d40bf705", +2720 => x"06840105", +2721 => x"0504758c", +2722 => x"2a80ee05", +2723 => x"5380d474", +2724 => x"27ff0509", +2725 => x"bc0bf705", +2726 => x"06840105", +2727 => x"0504758f", +2728 => x"2a80f705", +2729 => x"5382d474", +2730 => x"27ff0509", +2731 => x"a40bf705", +2732 => x"06840105", +2733 => x"05047592", +2734 => x"2a80fc05", +2735 => x"538ad474", +2736 => x"27ff0509", +2737 => x"8c0bf705", +2738 => x"06840105", +2739 => x"050480fe", +2740 => x"53721010", +2741 => x"10818bac", +2742 => x"05881108", +2743 => x"55557309", +2744 => x"81057505", +2745 => x"09708105", +2746 => x"09060a81", +2747 => x"06ff0509", +2748 => x"83a90bf7", +2749 => x"05068401", +2750 => x"05050484", +2751 => x"1408fc06", +2752 => x"59757927", +2753 => x"ff0509aa", +2754 => x"0bf70506", +2755 => x"84010505", +2756 => x"04881408", +2757 => x"54730981", +2758 => x"05750509", +2759 => x"70810509", +2760 => x"060a0981", +2761 => x"06ff0509", +2762 => x"d20bf705", +2763 => x"06840105", +2764 => x"05048c14", +2765 => x"08708c19", +2766 => x"0c748819", +2767 => x"0c778812", +2768 => x"0c55768c", +2769 => x"150c7951", +2770 => x"f6cb3f8b", +2771 => x"3d0d0476", +2772 => x"08777131", +2773 => x"58760588", +2774 => x"18085656", +2775 => x"74098105", +2776 => x"818bb405", +2777 => x"09708105", +2778 => x"09060a81", +2779 => x"06ff0509", +2780 => x"80f30bf7", +2781 => x"05068401", +2782 => x"0505048c", +2783 => x"1708708c", +2784 => x"170c7588", +2785 => x"120c53fc", +2786 => x"8d398814", +2787 => x"088c1508", +2788 => x"708c130c", +2789 => x"5988190c", +2790 => x"fce93975", +2791 => x"832a7054", +2792 => x"54807424", +2793 => x"ff050981", +2794 => x"c00bf705", +2795 => x"06840105", +2796 => x"05047282", +2797 => x"2c81712b", +2798 => x"818bb008", +2799 => x"07818bac", +2800 => x"0b84050c", +2801 => x"74101010", +2802 => x"818bac05", +2803 => x"88110871", +2804 => x"8c1b0c70", +2805 => x"881b0c79", +2806 => x"88130c56", +2807 => x"5a55768c", +2808 => x"150cfee2", +2809 => x"398159fb", +2810 => x"ad397716", +2811 => x"73810654", +2812 => x"55720970", +2813 => x"81050906", +2814 => x"0a098106", +2815 => x"ff0509a0", +2816 => x"0bf70506", +2817 => x"84010505", +2818 => x"04760877", +2819 => x"71315875", +2820 => x"058c1808", +2821 => x"88190871", +2822 => x"8c120c88", +2823 => x"120c5555", +2824 => x"74810784", +2825 => x"180c7681", +2826 => x"8bac0b88", +2827 => x"050c818b", +2828 => x"a8087526", +2829 => x"ff0509fe", +2830 => x"8d0bf705", +2831 => x"06840105", +2832 => x"0504818b", +2833 => x"a4085279", +2834 => x"51f7d23f", +2835 => x"7951f4c5", +2836 => x"3ffdf839", +2837 => x"81778c17", +2838 => x"0c778817", +2839 => x"0c758c19", +2840 => x"0c758819", +2841 => x"0c59fb9b", +2842 => x"39831470", +2843 => x"822c8171", +2844 => x"2b818bb0", +2845 => x"0807818b", +2846 => x"ac0b8405", +2847 => x"0c751010", +2848 => x"10818bac", +2849 => x"05881108", +2850 => x"718c1c0c", +2851 => x"70881c0c", +2852 => x"7a88130c", +2853 => x"575b5653", +2854 => x"fec43980", +2855 => x"7324ff05", +2856 => x"09ab0bf7", +2857 => x"05068401", +2858 => x"05050472", +2859 => x"822c8171", +2860 => x"2b818bb0", +2861 => x"0807818b", +2862 => x"ac0b8405", +2863 => x"0c58748c", +2864 => x"180c7388", +2865 => x"180c7688", +2866 => x"160cfcf6", +2867 => x"39831370", +2868 => x"822c8171", +2869 => x"2b818bb0", +2870 => x"0807818b", +2871 => x"ac0b8405", +2872 => x"0c5953da", +2873 => x"39707070", +2874 => x"81eaf808", +2875 => x"51700970", +2876 => x"81050906", +2877 => x"0a098106", +2878 => x"ff050992", +2879 => x"0bf70506", +2880 => x"84010505", +2881 => x"0481eb80", +2882 => x"7081eaf8", +2883 => x"0c517411", +2884 => x"52ff5371", +2885 => x"87fb8080", +2886 => x"26ff0509", +2887 => x"900bf705", +2888 => x"06840105", +2889 => x"05047181", +2890 => x"eaf80c70", +2891 => x"5372800c", +2892 => x"50505004", +2893 => x"70707070", +2894 => x"800b818a", +2895 => x"dc085454", +2896 => x"72098105", +2897 => x"81050970", +2898 => x"81050906", +2899 => x"0a8106ff", +2900 => x"0509a50b", +2901 => x"f7050684", +2902 => x"01050504", +2903 => x"7381eafc", +2904 => x"0cffb7b3", +2905 => x"3fffad98", +2906 => x"3f819ab4", +2907 => x"528151c5", +2908 => x"803f8008", +2909 => x"518cbe3f", +2910 => x"7281eafc", +2911 => x"0cffb797", +2912 => x"3fffacfc", +2913 => x"3f819ab4", +2914 => x"528151c4", +2915 => x"e43f8008", +2916 => x"518ca23f", +2917 => x"00ff3900", +2918 => x"ff39f53d", +2919 => x"0d7e6081", +2920 => x"eafc0870", +2921 => x"5b585b5b", +2922 => x"75097081", +2923 => x"0509060a", +2924 => x"098106ff", +2925 => x"050980fb", +2926 => x"0bf70506", +2927 => x"84010505", +2928 => x"04777a25", +2929 => x"ff050980", +2930 => x"cc0bf705", +2931 => x"06840105", +2932 => x"0504771b", +2933 => x"70337081", +2934 => x"ff065858", +2935 => x"59750981", +2936 => x"058a0509", +2937 => x"70810509", +2938 => x"060a8106", +2939 => x"ff0509ac", +2940 => x"0bf70506", +2941 => x"84010505", +2942 => x"047681ff", +2943 => x"0651ffb5", +2944 => x"e23f8118", +2945 => x"58797824", +2946 => x"ff0509c6", +2947 => x"0bf70506", +2948 => x"84010505", +2949 => x"0479800c", +2950 => x"8d3d0d04", +2951 => x"8d51ffb5", +2952 => x"c23f7833", +2953 => x"7081ff06", +2954 => x"5257ffb5", +2955 => x"b63f8118", +2956 => x"58d33979", +2957 => x"557a547d", +2958 => x"5385528d", +2959 => x"3dfc0551", +2960 => x"ffb4eb3f", +2961 => x"8008568a", +2962 => x"e53f7b80", +2963 => x"080c7580", +2964 => x"0c8d3d0d", +2965 => x"04f63d0d", +2966 => x"7d7f81ea", +2967 => x"fc08705a", +2968 => x"585a5a75", +2969 => x"09708105", +2970 => x"09060a09", +2971 => x"8106ff05", +2972 => x"0981930b", +2973 => x"f7050684", +2974 => x"01050504", +2975 => x"767925ff", +2976 => x"050980f4", +2977 => x"0bf70506", +2978 => x"84010505", +2979 => x"04761a58", +2980 => x"ffb49d3f", +2981 => x"80087834", +2982 => x"800b8008", +2983 => x"81ff0657", +2984 => x"58750981", +2985 => x"058a0509", +2986 => x"70810509", +2987 => x"060a8106", +2988 => x"ff050980", +2989 => x"cc0bf705", +2990 => x"06840105", +2991 => x"0504758d", +2992 => x"32703070", +2993 => x"80257a07", +2994 => x"51515675", +2995 => x"09708105", +2996 => x"09060a09", +2997 => x"8106ff05", +2998 => x"0980cd0b", +2999 => x"f7050684", +3000 => x"01050504", +3001 => x"81175778", +3002 => x"7724ff05", +3003 => x"09ff9e0b", +3004 => x"f7050684", +3005 => x"01050504", +3006 => x"76567580", +3007 => x"0c8c3d0d", +3008 => x"048158ff", +3009 => x"b9397855", +3010 => x"79547c53", +3011 => x"84528c3d", +3012 => x"fc0551ff", +3013 => x"b3983f80", +3014 => x"08568992", +3015 => x"3f7a8008", +3016 => x"0c75800c", +3017 => x"8c3d0d04", +3018 => x"811756ce", +3019 => x"39f93d0d", +3020 => x"795781ea", +3021 => x"fc080970", +3022 => x"81050906", +3023 => x"0a8106ff", +3024 => x"0509b50b", +3025 => x"f7050684", +3026 => x"01050504", +3027 => x"76518d88", +3028 => x"3f7b567a", +3029 => x"55800881", +3030 => x"05547653", +3031 => x"8252893d", +3032 => x"fc0551ff", +3033 => x"b2c83f80", +3034 => x"085788c2", +3035 => x"3f778008", +3036 => x"0c76800c", +3037 => x"893d0d04", +3038 => x"88b43f85", +3039 => x"0b80080c", +3040 => x"ff0b800c", +3041 => x"893d0d04", +3042 => x"fb3d0d81", +3043 => x"eafc0870", +3044 => x"56547309", +3045 => x"70810509", +3046 => x"060a0981", +3047 => x"06ff0509", +3048 => x"900bf705", +3049 => x"06840105", +3050 => x"05047480", +3051 => x"0c873d0d", +3052 => x"04775383", +3053 => x"52873dfc", +3054 => x"0551ffb1", +3055 => x"f13f8008", +3056 => x"5487eb3f", +3057 => x"7580080c", +3058 => x"73800c87", +3059 => x"3d0d04ff", +3060 => x"0b800c04", +3061 => x"fb3d0d77", +3062 => x"5581eafc", +3063 => x"08097081", +3064 => x"0509060a", +3065 => x"8106ff05", +3066 => x"09b10bf7", +3067 => x"05068401", +3068 => x"05050474", +3069 => x"518be13f", +3070 => x"80088105", +3071 => x"54745387", +3072 => x"52873dfc", +3073 => x"0551ffb1", +3074 => x"a53f8008", +3075 => x"55879f3f", +3076 => x"7580080c", +3077 => x"74800c87", +3078 => x"3d0d0487", +3079 => x"913f850b", +3080 => x"80080cff", +3081 => x"0b800c87", +3082 => x"3d0d04fa", +3083 => x"3d0d81ea", +3084 => x"fc080970", +3085 => x"81050906", +3086 => x"0a8106ff", +3087 => x"0509ab0b", +3088 => x"f7050684", +3089 => x"01050504", +3090 => x"7a557954", +3091 => x"78538652", +3092 => x"883dfc05", +3093 => x"51ffb0d6", +3094 => x"3f800856", +3095 => x"86d03f76", +3096 => x"80080c75", +3097 => x"800c883d", +3098 => x"0d0486c2", +3099 => x"3f9d0b80", +3100 => x"080cff0b", +3101 => x"800c883d", +3102 => x"0d04f73d", +3103 => x"0d7b7d5b", +3104 => x"59bc5380", +3105 => x"52795188", +3106 => x"cd3f8070", +3107 => x"56579856", +3108 => x"74197033", +3109 => x"70782b79", +3110 => x"078118f8", +3111 => x"1a5a5859", +3112 => x"55588475", +3113 => x"24ff0509", +3114 => x"e70bf705", +3115 => x"06840105", +3116 => x"0504767a", +3117 => x"23841958", +3118 => x"80705657", +3119 => x"98567418", +3120 => x"70337078", +3121 => x"2b790781", +3122 => x"18f81a5a", +3123 => x"58595154", +3124 => x"847524ff", +3125 => x"0509e70b", +3126 => x"f7050684", +3127 => x"01050504", +3128 => x"76821b23", +3129 => x"88195880", +3130 => x"70565798", +3131 => x"56741870", +3132 => x"3370782b", +3133 => x"79078118", +3134 => x"f81a5a58", +3135 => x"59515484", +3136 => x"7524ff05", +3137 => x"09e70bf7", +3138 => x"05068401", +3139 => x"05050476", +3140 => x"841b0c8c", +3141 => x"19588070", +3142 => x"56579856", +3143 => x"74187033", +3144 => x"70782b79", +3145 => x"078118f8", +3146 => x"1a5a5859", +3147 => x"51548475", +3148 => x"24ff0509", +3149 => x"e70bf705", +3150 => x"06840105", +3151 => x"05047688", +3152 => x"1b239019", +3153 => x"58807056", +3154 => x"57985674", +3155 => x"18703370", +3156 => x"782b7907", +3157 => x"8118f81a", +3158 => x"5a585951", +3159 => x"54847524", +3160 => x"ff0509e7", +3161 => x"0bf70506", +3162 => x"84010505", +3163 => x"04768a1b", +3164 => x"23941958", +3165 => x"80705657", +3166 => x"98567418", +3167 => x"70337078", +3168 => x"2b790781", +3169 => x"18f81a5a", +3170 => x"58595154", +3171 => x"847524ff", +3172 => x"0509e70b", +3173 => x"f7050684", +3174 => x"01050504", +3175 => x"768c1b23", +3176 => x"98195880", +3177 => x"70565798", +3178 => x"56741870", +3179 => x"3370782b", +3180 => x"79078118", +3181 => x"f81a5a58", +3182 => x"59515484", +3183 => x"7524ff05", +3184 => x"09e70bf7", +3185 => x"05068401", +3186 => x"05050476", +3187 => x"8e1b239c", +3188 => x"19588070", +3189 => x"5657b856", +3190 => x"74187033", +3191 => x"70782b79", +3192 => x"078118f8", +3193 => x"1a5a5859", +3194 => x"5a548875", +3195 => x"24ff0509", +3196 => x"e70bf705", +3197 => x"06840105", +3198 => x"05047690", +3199 => x"1b0c8b3d", +3200 => x"0d04e93d", +3201 => x"0d6a81ea", +3202 => x"fc085757", +3203 => x"75097081", +3204 => x"0509060a", +3205 => x"098106ff", +3206 => x"05099b0b", +3207 => x"f7050684", +3208 => x"01050504", +3209 => x"80c0800b", +3210 => x"84180c75", +3211 => x"ac180c75", +3212 => x"800c993d", +3213 => x"0d04893d", +3214 => x"70556a54", +3215 => x"558a5299", +3216 => x"3dffbc05", +3217 => x"51fface6", +3218 => x"3f800877", +3219 => x"53755256", +3220 => x"fca83f82", +3221 => x"d93f7780", +3222 => x"080c7580", +3223 => x"0c993d0d", +3224 => x"04e93d0d", +3225 => x"695781ea", +3226 => x"fc080970", +3227 => x"81050906", +3228 => x"0a8106ff", +3229 => x"0509be0b", +3230 => x"f7050684", +3231 => x"01050504", +3232 => x"765186d4", +3233 => x"3f893d70", +3234 => x"56800881", +3235 => x"05557754", +3236 => x"568f5299", +3237 => x"3dffbc05", +3238 => x"51ffac92", +3239 => x"3f80086b", +3240 => x"53765257", +3241 => x"fbd43f82", +3242 => x"853f7780", +3243 => x"080c7680", +3244 => x"0c993d0d", +3245 => x"0481f73f", +3246 => x"850b8008", +3247 => x"0cff0b80", +3248 => x"0c993d0d", +3249 => x"04fc3d0d", +3250 => x"815481ea", +3251 => x"fc080970", +3252 => x"81050906", +3253 => x"0a098106", +3254 => x"ff050990", +3255 => x"0bf70506", +3256 => x"84010505", +3257 => x"0473800c", +3258 => x"863d0d04", +3259 => x"765397b9", +3260 => x"52863dfc", +3261 => x"0551ffab", +3262 => x"b53f8008", +3263 => x"5481af3f", +3264 => x"7480080c", +3265 => x"73800c86", +3266 => x"3d0d04f4", +3267 => x"3d0d7e81", +3268 => x"9ae00870", +3269 => x"0881ff06", +3270 => x"913df805", +3271 => x"54515959", +3272 => x"ffacf63f", +3273 => x"77578054", +3274 => x"76557b7d", +3275 => x"58527653", +3276 => x"8e3df005", +3277 => x"5186e23f", +3278 => x"797b5879", +3279 => x"0c76841a", +3280 => x"0c78800c", +3281 => x"8e3d0d04", +3282 => x"f43d0d7e", +3283 => x"819ae008", +3284 => x"70087081", +3285 => x"ff06923d", +3286 => x"f8055551", +3287 => x"5a5759ff", +3288 => x"acb73f77", +3289 => x"57800b8b", +3290 => x"3d595476", +3291 => x"557b7d58", +3292 => x"52765377", +3293 => x"5186a23f", +3294 => x"8056bd84", +3295 => x"c0765555", +3296 => x"797b5852", +3297 => x"76537751", +3298 => x"868f3f7a", +3299 => x"57780970", +3300 => x"81050906", +3301 => x"0a8106ff", +3302 => x"05098c0b", +3303 => x"f7050684", +3304 => x"01050504", +3305 => x"76790c76", +3306 => x"800c8e3d", +3307 => x"0d048193", +3308 => x"b408800c", +3309 => x"04f73d0d", +3310 => x"7b8193b4", +3311 => x"0882c811", +3312 => x"085a545a", +3313 => x"77097081", +3314 => x"0509060a", +3315 => x"8106ff05", +3316 => x"0981ac0b", +3317 => x"f7050684", +3318 => x"01050504", +3319 => x"81881884", +3320 => x"1908ff05", +3321 => x"81712b59", +3322 => x"55598074", +3323 => x"24ff0509", +3324 => x"81d20bf7", +3325 => x"05068401", +3326 => x"05050480", +3327 => x"7424ff05", +3328 => x"0980db0b", +3329 => x"f7050684", +3330 => x"01050504", +3331 => x"73822b78", +3332 => x"11880556", +3333 => x"56818019", +3334 => x"08770653", +3335 => x"72097081", +3336 => x"0509060a", +3337 => x"8106ff05", +3338 => x"0980f30b", +3339 => x"f7050684", +3340 => x"01050504", +3341 => x"78167008", +3342 => x"53537951", +3343 => x"74085372", +3344 => x"2dff14fc", +3345 => x"17fc1779", +3346 => x"812c5a57", +3347 => x"57547380", +3348 => x"25ff0509", +3349 => x"c00bf705", +3350 => x"06840105", +3351 => x"05047708", +3352 => x"58770970", +3353 => x"81050906", +3354 => x"0a098106", +3355 => x"ff0509fe", +3356 => x"eb0bf705", +3357 => x"06840105", +3358 => x"05048193", +3359 => x"b40853bc", +3360 => x"13080970", +3361 => x"81050906", +3362 => x"0a098106", +3363 => x"ff0509b9", +3364 => x"0bf70506", +3365 => x"84010505", +3366 => x"047951f1", +3367 => x"f73f7408", +3368 => x"53722dff", +3369 => x"14fc17fc", +3370 => x"1779812c", +3371 => x"5a575754", +3372 => x"738025ff", +3373 => x"0509fedd", +3374 => x"0bf70506", +3375 => x"84010505", +3376 => x"04ff9b39", +3377 => x"8057feb3", +3378 => x"397251bc", +3379 => x"13085473", +3380 => x"2d7951f1", +3381 => x"bf3ffb3d", +3382 => x"0d777a71", +3383 => x"028c05a3", +3384 => x"05335854", +3385 => x"54568373", +3386 => x"27ff0509", +3387 => x"819d0bf7", +3388 => x"05068401", +3389 => x"05050475", +3390 => x"83065170", +3391 => x"09708105", +3392 => x"09060a09", +3393 => x"8106ff05", +3394 => x"0981800b", +3395 => x"f7050684", +3396 => x"01050504", +3397 => x"74882b75", +3398 => x"07707190", +3399 => x"2b075551", +3400 => x"8f7327ff", +3401 => x"0509ba0b", +3402 => x"f7050684", +3403 => x"01050504", +3404 => x"73727084", +3405 => x"05540c71", +3406 => x"74717084", +3407 => x"05530c74", +3408 => x"71708405", +3409 => x"530c7471", +3410 => x"70840553", +3411 => x"0cf01454", +3412 => x"52728f26", +3413 => x"ff0509d8", +3414 => x"0bf70506", +3415 => x"84010505", +3416 => x"04837327", +3417 => x"ff0509a3", +3418 => x"0bf70506", +3419 => x"84010505", +3420 => x"04737270", +3421 => x"8405540c", +3422 => x"fc135372", +3423 => x"8326ff05", +3424 => x"09ef0bf7", +3425 => x"05068401", +3426 => x"050504ff", +3427 => x"13517009", +3428 => x"8105ff05", +3429 => x"09708105", +3430 => x"09060a81", +3431 => x"06ff0509", +3432 => x"b00bf705", +3433 => x"06840105", +3434 => x"05047472", +3435 => x"70810554", +3436 => x"34ff1151", +3437 => x"70098105", +3438 => x"ff050970", +3439 => x"81050906", +3440 => x"0a098106", +3441 => x"ff0509e2", +3442 => x"0bf70506", +3443 => x"84010505", +3444 => x"0475800c", +3445 => x"873d0d04", +3446 => x"70707070", +3447 => x"75707183", +3448 => x"06535552", +3449 => x"70097081", +3450 => x"0509060a", +3451 => x"098106ff", +3452 => x"050980e3", +3453 => x"0bf70506", +3454 => x"84010505", +3455 => x"04717008", +3456 => x"7009f7fb", +3457 => x"fdff1206", +3458 => x"f8848281", +3459 => x"80065452", +3460 => x"53710970", +3461 => x"81050906", +3462 => x"0a098106", +3463 => x"ff0509b5", +3464 => x"0bf70506", +3465 => x"84010505", +3466 => x"04841370", +3467 => x"087009f7", +3468 => x"fbfdff12", +3469 => x"06f88482", +3470 => x"81800654", +3471 => x"52537109", +3472 => x"70810509", +3473 => x"060a8106", +3474 => x"ff0509dd", +3475 => x"0bf70506", +3476 => x"84010505", +3477 => x"04725271", +3478 => x"33537209", +3479 => x"70810509", +3480 => x"060a8106", +3481 => x"ff0509a7", +3482 => x"0bf70506", +3483 => x"84010505", +3484 => x"04811270", +3485 => x"33545272", +3486 => x"09708105", +3487 => x"09060a09", +3488 => x"8106ff05", +3489 => x"09eb0bf7", +3490 => x"05068401", +3491 => x"05050471", +3492 => x"7431800c", +3493 => x"50505050", +3494 => x"04e43d0d", +3495 => x"6ea13d08", +3496 => x"a33d0859", +3497 => x"575f8076", +3498 => x"4d774ea3", +3499 => x"3d08a53d", +3500 => x"08574b75", +3501 => x"4c5e7d6c", +3502 => x"24ff0509", +3503 => x"8b860bf7", +3504 => x"05068401", +3505 => x"05050480", +3506 => x"6a24ff05", +3507 => x"098b9b0b", +3508 => x"f7050684", +3509 => x"01050504", +3510 => x"696b5856", +3511 => x"6b6d5d46", +3512 => x"7b477544", +3513 => x"76456464", +3514 => x"68685c5c", +3515 => x"56567409", +3516 => x"70810509", +3517 => x"060a0981", +3518 => x"06ff0509", +3519 => x"82ee0bf7", +3520 => x"05068401", +3521 => x"05050478", +3522 => x"7627ff05", +3523 => x"09848f0b", +3524 => x"f7050684", +3525 => x"01050504", +3526 => x"7581ff26", +3527 => x"832b5583", +3528 => x"ffff7627", +3529 => x"ff05099f", +3530 => x"0bf70506", +3531 => x"84010505", +3532 => x"049055fe", +3533 => x"800a7627", +3534 => x"ff05098b", +3535 => x"0bf70506", +3536 => x"84010505", +3537 => x"04985575", +3538 => x"752a8188", +3539 => x"88057033", +3540 => x"a0773171", +3541 => x"31575557", +3542 => x"74097081", +3543 => x"0509060a", +3544 => x"8106ff05", +3545 => x"099d0bf7", +3546 => x"05068401", +3547 => x"05050475", +3548 => x"752ba076", +3549 => x"317a772b", +3550 => x"7c722a07", +3551 => x"7c782b5d", +3552 => x"5b595675", +3553 => x"902a7683", +3554 => x"ffff0671", +3555 => x"547a5359", +3556 => x"578c803f", +3557 => x"80085b8b", +3558 => x"e93f8008", +3559 => x"80087929", +3560 => x"7c902b7c", +3561 => x"902a0756", +3562 => x"56597375", +3563 => x"27ff0509", +3564 => x"b20bf705", +3565 => x"06840105", +3566 => x"05048008", +3567 => x"ff057615", +3568 => x"55597574", +3569 => x"26ff0509", +3570 => x"9a0bf705", +3571 => x"06840105", +3572 => x"05047474", +3573 => x"26ff0509", +3574 => x"8b9f0bf7", +3575 => x"05068401", +3576 => x"05050476", +3577 => x"52737531", +3578 => x"518ba83f", +3579 => x"8008558b", +3580 => x"913f8008", +3581 => x"80087929", +3582 => x"7b83ffff", +3583 => x"0677902b", +3584 => x"07565957", +3585 => x"737827ff", +3586 => x"0509a90b", +3587 => x"f7050684", +3588 => x"01050504", +3589 => x"8008ff05", +3590 => x"76155557", +3591 => x"757426ff", +3592 => x"0509910b", +3593 => x"f7050684", +3594 => x"01050504", +3595 => x"77742677", +3596 => x"71315856", +3597 => x"78902b77", +3598 => x"0758805b", +3599 => x"7a407741", +3600 => x"7f615654", +3601 => x"7d097081", +3602 => x"0509060a", +3603 => x"098106ff", +3604 => x"050981ac", +3605 => x"0bf70506", +3606 => x"84010505", +3607 => x"04737f0c", +3608 => x"747f8405", +3609 => x"0c7e800c", +3610 => x"9e3d0d04", +3611 => x"80705c58", +3612 => x"747926ff", +3613 => x"0509c50b", +3614 => x"f7050684", +3615 => x"01050504", +3616 => x"7481ff26", +3617 => x"832b5774", +3618 => x"83ffff26", +3619 => x"ff050983", +3620 => x"e90bf705", +3621 => x"06840105", +3622 => x"05047477", +3623 => x"2a818888", +3624 => x"057033a0", +3625 => x"79317131", +3626 => x"595c5d76", +3627 => x"09708105", +3628 => x"09060a09", +3629 => x"8106ff05", +3630 => x"0983ff0b", +3631 => x"f7050684", +3632 => x"01050504", +3633 => x"76547479", +3634 => x"27ff0509", +3635 => x"8b0bf705", +3636 => x"06840105", +3637 => x"05048154", +3638 => x"79762774", +3639 => x"07598158", +3640 => x"78097081", +3641 => x"0509060a", +3642 => x"098106ff", +3643 => x"0509feca", +3644 => x"0bf70506", +3645 => x"84010505", +3646 => x"04765880", +3647 => x"5bfebd39", +3648 => x"73527453", +3649 => x"9e3de805", +3650 => x"51ffbff2", +3651 => x"3f676956", +3652 => x"7f0c747f", +3653 => x"84050c7e", +3654 => x"800c9e3d", +3655 => x"0d047509", +3656 => x"70810509", +3657 => x"060a8106", +3658 => x"ff050982", +3659 => x"c00bf705", +3660 => x"06840105", +3661 => x"05047581", +3662 => x"ff26832b", +3663 => x"5583ffff", +3664 => x"7627ff05", +3665 => x"099f0bf7", +3666 => x"05068401", +3667 => x"05050490", +3668 => x"55fe800a", +3669 => x"7627ff05", +3670 => x"098b0bf7", +3671 => x"05068401", +3672 => x"05050498", +3673 => x"5575752a", +3674 => x"81888805", +3675 => x"7033a077", +3676 => x"31713157", +3677 => x"5e547409", +3678 => x"70810509", +3679 => x"060a0981", +3680 => x"06ff0509", +3681 => x"86810bf7", +3682 => x"05068401", +3683 => x"05050478", +3684 => x"76315481", +3685 => x"76902a77", +3686 => x"83ffff06", +3687 => x"5f5d5b7b", +3688 => x"52735187", +3689 => x"ee3f8008", +3690 => x"5787d73f", +3691 => x"80088008", +3692 => x"7e297890", +3693 => x"2b7c902a", +3694 => x"07565659", +3695 => x"737527ff", +3696 => x"0509b20b", +3697 => x"f7050684", +3698 => x"01050504", +3699 => x"8008ff05", +3700 => x"76155559", +3701 => x"757426ff", +3702 => x"05099a0b", +3703 => x"f7050684", +3704 => x"01050504", +3705 => x"747426ff", +3706 => x"05098784", +3707 => x"0bf70506", +3708 => x"84010505", +3709 => x"047b5273", +3710 => x"75315187", +3711 => x"963f8008", +3712 => x"5586ff3f", +3713 => x"80088008", +3714 => x"7e297b83", +3715 => x"ffff0677", +3716 => x"902b0756", +3717 => x"59577378", +3718 => x"27ff0509", +3719 => x"a90bf705", +3720 => x"06840105", +3721 => x"05048008", +3722 => x"ff057615", +3723 => x"55577574", +3724 => x"26ff0509", +3725 => x"910bf705", +3726 => x"06840105", +3727 => x"05047774", +3728 => x"26777131", +3729 => x"585a7890", +3730 => x"2b77077b", +3731 => x"41417f61", +3732 => x"56547d09", +3733 => x"70810509", +3734 => x"060a8106", +3735 => x"ff0509fb", +3736 => x"fc0bf705", +3737 => x"06840105", +3738 => x"0504fd94", +3739 => x"39755281", +3740 => x"51868f3f", +3741 => x"800856fd", +3742 => x"bd399057", +3743 => x"fe800a75", +3744 => x"27ff0509", +3745 => x"fc940bf7", +3746 => x"05068401", +3747 => x"05050498", +3748 => x"75712a81", +3749 => x"88880570", +3750 => x"33a07331", +3751 => x"7131535d", +3752 => x"5e577609", +3753 => x"70810509", +3754 => x"060a8106", +3755 => x"ff0509fc", +3756 => x"930bf705", +3757 => x"06840105", +3758 => x"0504a077", +3759 => x"3175782b", +3760 => x"77722a07", +3761 => x"77792b7b", +3762 => x"7a2b7d74", +3763 => x"2a077d7b", +3764 => x"2b73902a", +3765 => x"7483ffff", +3766 => x"0671597f", +3767 => x"772a585e", +3768 => x"5c415f58", +3769 => x"5c5485ab", +3770 => x"3f800854", +3771 => x"85943f80", +3772 => x"08800879", +3773 => x"2975902b", +3774 => x"7e902a07", +3775 => x"56565973", +3776 => x"7527ff05", +3777 => x"09b70bf7", +3778 => x"05068401", +3779 => x"05050480", +3780 => x"08ff057b", +3781 => x"1555597a", +3782 => x"7426ff05", +3783 => x"099f0bf7", +3784 => x"05068401", +3785 => x"05050473", +3786 => x"7527ff05", +3787 => x"098f0bf7", +3788 => x"05068401", +3789 => x"050504ff", +3790 => x"197b1555", +3791 => x"59765273", +3792 => x"75315184", +3793 => x"ce3f8008", +3794 => x"5584b73f", +3795 => x"80088008", +3796 => x"79297d83", +3797 => x"ffff0677", +3798 => x"902b0756", +3799 => x"59577378", +3800 => x"27ff0509", +3801 => x"b70bf705", +3802 => x"06840105", +3803 => x"05048008", +3804 => x"ff057b15", +3805 => x"55577a74", +3806 => x"26ff0509", +3807 => x"9f0bf705", +3808 => x"06840105", +3809 => x"05047378", +3810 => x"27ff0509", +3811 => x"8f0bf705", +3812 => x"06840105", +3813 => x"0504ff17", +3814 => x"7b155557", +3815 => x"73783179", +3816 => x"902b7807", +3817 => x"7083ffff", +3818 => x"0671902a", +3819 => x"7983ffff", +3820 => x"067a902a", +3821 => x"73722973", +3822 => x"73297473", +3823 => x"29767429", +3824 => x"73902a05", +3825 => x"72055755", +3826 => x"435f5b58", +3827 => x"5a57595a", +3828 => x"747c27ff", +3829 => x"05098e0b", +3830 => x"f7050684", +3831 => x"01050504", +3832 => x"84808017", +3833 => x"5774902a", +3834 => x"177983ff", +3835 => x"ff067684", +3836 => x"80802905", +3837 => x"5757767a", +3838 => x"26ff0509", +3839 => x"bf0bf705", +3840 => x"06840105", +3841 => x"0504767a", +3842 => x"32703070", +3843 => x"72078025", +3844 => x"565a5b7c", +3845 => x"7627ff05", +3846 => x"09f89f0b", +3847 => x"f7050684", +3848 => x"01050504", +3849 => x"73097081", +3850 => x"0509060a", +3851 => x"8106ff05", +3852 => x"09f8870b", +3853 => x"f7050684", +3854 => x"01050504", +3855 => x"ff185880", +3856 => x"5bf7f939", +3857 => x"ff765377", +3858 => x"549f3de8", +3859 => x"05525eff", +3860 => x"b9ac3f67", +3861 => x"69574c75", +3862 => x"4d698025", +3863 => x"ff0509f4", +3864 => x"f70bf705", +3865 => x"06840105", +3866 => x"05047d09", +3867 => x"6a6c5c53", +3868 => x"7a549f3d", +3869 => x"e805525e", +3870 => x"ffb9833f", +3871 => x"6769714c", +3872 => x"704d5856", +3873 => x"f4d639a0", +3874 => x"75317676", +3875 => x"2b7a772b", +3876 => x"7c732a07", +3877 => x"7c782b72", +3878 => x"902a7383", +3879 => x"ffff0671", +3880 => x"587e762a", +3881 => x"5742405d", +3882 => x"5d575881", +3883 => x"e63f8008", +3884 => x"5781cf3f", +3885 => x"80088008", +3886 => x"7e297890", +3887 => x"2b7d902a", +3888 => x"07565659", +3889 => x"737527ff", +3890 => x"0509b70b", +3891 => x"f7050684", +3892 => x"01050504", +3893 => x"8008ff05", +3894 => x"76155559", +3895 => x"757426ff", +3896 => x"05099f0b", +3897 => x"f7050684", +3898 => x"01050504", +3899 => x"737527ff", +3900 => x"05098f0b", +3901 => x"f7050684", +3902 => x"01050504", +3903 => x"ff197615", +3904 => x"55597b52", +3905 => x"73753151", +3906 => x"81893f80", +3907 => x"085580f2", +3908 => x"3f800880", +3909 => x"087e297c", +3910 => x"83ffff06", +3911 => x"7078902b", +3912 => x"07515658", +3913 => x"58737727", +3914 => x"ff0509b7", +3915 => x"0bf70506", +3916 => x"84010505", +3917 => x"048008ff", +3918 => x"05761555", +3919 => x"58757426", +3920 => x"ff05099f", +3921 => x"0bf70506", +3922 => x"84010505", +3923 => x"04737727", +3924 => x"ff05098f", +3925 => x"0bf70506", +3926 => x"84010505", +3927 => x"04ff1876", +3928 => x"15555878", +3929 => x"902b7807", +3930 => x"74783155", +3931 => x"5bf8b039", +3932 => x"ff197615", +3933 => x"5559f8fd", +3934 => x"39ff1976", +3935 => x"155559f4", +3936 => x"e2397070", +3937 => x"70805375", +3938 => x"527451ff", +3939 => x"b9d13f50", +3940 => x"50500470", +3941 => x"70708153", +3942 => x"75527451", +3943 => x"ffb9c03f", +3944 => x"50505004", +3945 => x"7070819a", +3946 => x"bc0bfc05", +3947 => x"70085252", +3948 => x"70098105", +3949 => x"ff050970", +3950 => x"81050906", +3951 => x"0a8106ff", +3952 => x"0509ae0b", +3953 => x"f7050684", +3954 => x"01050504", +3955 => x"702dfc12", +3956 => x"70085252", +3957 => x"70098105", +3958 => x"ff050970", +3959 => x"81050906", +3960 => x"0a098106", +3961 => x"ff0509e4", +3962 => x"0bf70506", +3963 => x"84010505", +3964 => x"04505004", +3965 => x"04ff98cc", +3966 => x"3f040000", +3967 => x"30313233", +3968 => x"34353637", +3969 => x"38390000", +3970 => x"44485259", +3971 => x"53544f4e", +3972 => x"45205052", +3973 => x"4f475241", +3974 => x"4d2c2053", +3975 => x"4f4d4520", +3976 => x"53545249", +3977 => x"4e470000", +3978 => x"44485259", +3979 => x"53544f4e", +3980 => x"45205052", +3981 => x"4f475241", +3982 => x"4d2c2031", +3983 => x"27535420", +3984 => x"53545249", +3985 => x"4e470000", +3986 => x"44687279", +3987 => x"73746f6e", +3988 => x"65204265", +3989 => x"6e63686d", +3990 => x"61726b2c", +3991 => x"20566572", +3992 => x"73696f6e", +3993 => x"20322e31", +3994 => x"20284c61", +3995 => x"6e677561", +3996 => x"67653a20", +3997 => x"43290a00", +3998 => x"50726f67", +3999 => x"72616d20", +4000 => x"636f6d70", +4001 => x"696c6564", +4002 => x"20776974", +4003 => x"68202772", +4004 => x"65676973", +4005 => x"74657227", +4006 => x"20617474", +4007 => x"72696275", +4008 => x"74650a00", +4009 => x"45786563", +4010 => x"7574696f", +4011 => x"6e207374", +4012 => x"61727473", +4013 => x"2c202564", +4014 => x"2072756e", +4015 => x"73207468", +4016 => x"726f7567", +4017 => x"68204468", +4018 => x"72797374", +4019 => x"6f6e650a", +4020 => x"00000000", +4021 => x"44485259", +4022 => x"53544f4e", +4023 => x"45205052", +4024 => x"4f475241", +4025 => x"4d2c2032", +4026 => x"274e4420", +4027 => x"53545249", +4028 => x"4e470000", +4029 => x"45786563", +4030 => x"7574696f", +4031 => x"6e20656e", +4032 => x"64730a00", +4033 => x"46696e61", +4034 => x"6c207661", +4035 => x"6c756573", +4036 => x"206f6620", +4037 => x"74686520", +4038 => x"76617269", +4039 => x"61626c65", +4040 => x"73207573", +4041 => x"65642069", +4042 => x"6e207468", +4043 => x"65206265", +4044 => x"6e63686d", +4045 => x"61726b3a", +4046 => x"0a000000", +4047 => x"496e745f", +4048 => x"476c6f62", +4049 => x"3a202020", +4050 => x"20202020", +4051 => x"20202020", +4052 => x"2025640a", +4053 => x"00000000", +4054 => x"20202020", +4055 => x"20202020", +4056 => x"73686f75", +4057 => x"6c642062", +4058 => x"653a2020", +4059 => x"2025640a", +4060 => x"00000000", +4061 => x"426f6f6c", +4062 => x"5f476c6f", +4063 => x"623a2020", +4064 => x"20202020", +4065 => x"20202020", +4066 => x"2025640a", +4067 => x"00000000", +4068 => x"43685f31", +4069 => x"5f476c6f", +4070 => x"623a2020", +4071 => x"20202020", +4072 => x"20202020", +4073 => x"2025630a", +4074 => x"00000000", +4075 => x"20202020", +4076 => x"20202020", +4077 => x"73686f75", +4078 => x"6c642062", +4079 => x"653a2020", +4080 => x"2025630a", +4081 => x"00000000", +4082 => x"43685f32", +4083 => x"5f476c6f", +4084 => x"623a2020", +4085 => x"20202020", +4086 => x"20202020", +4087 => x"2025630a", +4088 => x"00000000", +4089 => x"4172725f", +4090 => x"315f476c", +4091 => x"6f625b38", +4092 => x"5d3a2020", +4093 => x"20202020", +4094 => x"2025640a", +4095 => x"00000000", +4096 => x"4172725f", +4097 => x"325f476c", +4098 => x"6f625b38", +4099 => x"5d5b375d", +4100 => x"3a202020", +4101 => x"2025640a", +4102 => x"00000000", +4103 => x"20202020", +4104 => x"20202020", +4105 => x"73686f75", +4106 => x"6c642062", +4107 => x"653a2020", +4108 => x"204e756d", +4109 => x"6265725f", +4110 => x"4f665f52", +4111 => x"756e7320", +4112 => x"2b203130", +4113 => x"0a000000", +4114 => x"5074725f", +4115 => x"476c6f62", +4116 => x"2d3e0a00", +4117 => x"20205074", +4118 => x"725f436f", +4119 => x"6d703a20", +4120 => x"20202020", +4121 => x"20202020", +4122 => x"2025640a", +4123 => x"00000000", +4124 => x"20202020", +4125 => x"20202020", +4126 => x"73686f75", +4127 => x"6c642062", +4128 => x"653a2020", +4129 => x"2028696d", +4130 => x"706c656d", +4131 => x"656e7461", +4132 => x"74696f6e", +4133 => x"2d646570", +4134 => x"656e6465", +4135 => x"6e74290a", +4136 => x"00000000", +4137 => x"20204469", +4138 => x"7363723a", +4139 => x"20202020", +4140 => x"20202020", +4141 => x"20202020", +4142 => x"2025640a", +4143 => x"00000000", +4144 => x"2020456e", +4145 => x"756d5f43", +4146 => x"6f6d703a", +4147 => x"20202020", +4148 => x"20202020", +4149 => x"2025640a", +4150 => x"00000000", +4151 => x"2020496e", +4152 => x"745f436f", +4153 => x"6d703a20", +4154 => x"20202020", +4155 => x"20202020", +4156 => x"2025640a", +4157 => x"00000000", +4158 => x"20205374", +4159 => x"725f436f", +4160 => x"6d703a20", +4161 => x"20202020", +4162 => x"20202020", +4163 => x"2025730a", +4164 => x"00000000", +4165 => x"20202020", +4166 => x"20202020", +4167 => x"73686f75", +4168 => x"6c642062", +4169 => x"653a2020", +4170 => x"20444852", +4171 => x"5953544f", +4172 => x"4e452050", +4173 => x"524f4752", +4174 => x"414d2c20", +4175 => x"534f4d45", +4176 => x"20535452", +4177 => x"494e470a", +4178 => x"00000000", +4179 => x"4e657874", +4180 => x"5f507472", +4181 => x"5f476c6f", +4182 => x"622d3e0a", +4183 => x"00000000", +4184 => x"20202020", +4185 => x"20202020", +4186 => x"73686f75", +4187 => x"6c642062", +4188 => x"653a2020", +4189 => x"2028696d", +4190 => x"706c656d", +4191 => x"656e7461", +4192 => x"74696f6e", +4193 => x"2d646570", +4194 => x"656e6465", +4195 => x"6e74292c", +4196 => x"2073616d", +4197 => x"65206173", +4198 => x"2061626f", +4199 => x"76650a00", +4200 => x"496e745f", +4201 => x"315f4c6f", +4202 => x"633a2020", +4203 => x"20202020", +4204 => x"20202020", +4205 => x"2025640a", +4206 => x"00000000", +4207 => x"496e745f", +4208 => x"325f4c6f", +4209 => x"633a2020", +4210 => x"20202020", +4211 => x"20202020", +4212 => x"2025640a", +4213 => x"00000000", +4214 => x"496e745f", +4215 => x"335f4c6f", +4216 => x"633a2020", +4217 => x"20202020", +4218 => x"20202020", +4219 => x"2025640a", +4220 => x"00000000", +4221 => x"456e756d", +4222 => x"5f4c6f63", +4223 => x"3a202020", +4224 => x"20202020", +4225 => x"20202020", +4226 => x"2025640a", +4227 => x"00000000", +4228 => x"5374725f", +4229 => x"315f4c6f", +4230 => x"633a2020", +4231 => x"20202020", +4232 => x"20202020", +4233 => x"2025730a", +4234 => x"00000000", +4235 => x"20202020", +4236 => x"20202020", +4237 => x"73686f75", +4238 => x"6c642062", +4239 => x"653a2020", +4240 => x"20444852", +4241 => x"5953544f", +4242 => x"4e452050", +4243 => x"524f4752", +4244 => x"414d2c20", +4245 => x"31275354", +4246 => x"20535452", +4247 => x"494e470a", +4248 => x"00000000", +4249 => x"5374725f", +4250 => x"325f4c6f", +4251 => x"633a2020", +4252 => x"20202020", +4253 => x"20202020", +4254 => x"2025730a", +4255 => x"00000000", +4256 => x"20202020", +4257 => x"20202020", +4258 => x"73686f75", +4259 => x"6c642062", +4260 => x"653a2020", +4261 => x"20444852", +4262 => x"5953544f", +4263 => x"4e452050", +4264 => x"524f4752", +4265 => x"414d2c20", +4266 => x"32274e44", +4267 => x"20535452", +4268 => x"494e470a", +4269 => x"00000000", +4270 => x"55736572", +4271 => x"2074696d", +4272 => x"653a2025", +4273 => x"640a0000", +4274 => x"4d696372", +4275 => x"6f736563", +4276 => x"6f6e6473", +4277 => x"20666f72", +4278 => x"206f6e65", +4279 => x"2072756e", +4280 => x"20746872", +4281 => x"6f756768", +4282 => x"20446872", +4283 => x"7973746f", +4284 => x"6e653a20", +4285 => x"00000000", +4286 => x"2564200a", +4287 => x"00000000", +4288 => x"44687279", +4289 => x"73746f6e", +4290 => x"65732070", +4291 => x"65722053", +4292 => x"65636f6e", +4293 => x"643a2020", +4294 => x"20202020", +4295 => x"20202020", +4296 => x"20202020", +4297 => x"20202020", +4298 => x"20202020", +4299 => x"00000000", +4300 => x"56415820", +4301 => x"4d495053", +4302 => x"20726174", +4303 => x"696e6720", +4304 => x"2a203130", +4305 => x"3030203d", +4306 => x"20256420", +4307 => x"0a000000", +4308 => x"50726f67", +4309 => x"72616d20", +4310 => x"636f6d70", +4311 => x"696c6564", +4312 => x"20776974", +4313 => x"686f7574", +4314 => x"20277265", +4315 => x"67697374", +4316 => x"65722720", +4317 => x"61747472", +4318 => x"69627574", +4319 => x"650a0000", +4320 => x"4d656173", +4321 => x"75726564", +4322 => x"2074696d", +4323 => x"6520746f", +4324 => x"6f20736d", +4325 => x"616c6c20", +4326 => x"746f206f", +4327 => x"62746169", +4328 => x"6e206d65", +4329 => x"616e696e", +4330 => x"6766756c", +4331 => x"20726573", +4332 => x"756c7473", +4333 => x"0a000000", +4334 => x"506c6561", +4335 => x"73652069", +4336 => x"6e637265", +4337 => x"61736520", +4338 => x"6e756d62", +4339 => x"6572206f", +4340 => x"66207275", +4341 => x"6e730a00", +4342 => x"44485259", +4343 => x"53544f4e", +4344 => x"45205052", +4345 => x"4f475241", +4346 => x"4d2c2033", +4347 => x"27524420", +4348 => x"53545249", +4349 => x"4e470000", +4350 => x"43000000", +4351 => x"64756d6d", +4352 => x"792e6578", +4353 => x"65000000", +4354 => x"00010202", +4355 => x"03030303", +4356 => x"04040404", +4357 => x"04040404", +4358 => x"05050505", +4359 => x"05050505", +4360 => x"05050505", +4361 => x"05050505", +4362 => x"06060606", +4363 => x"06060606", +4364 => x"06060606", +4365 => x"06060606", +4366 => x"06060606", +4367 => x"06060606", +4368 => x"06060606", +4369 => x"06060606", +4370 => x"07070707", +4371 => x"07070707", +4372 => x"07070707", +4373 => x"07070707", +4374 => x"07070707", +4375 => x"07070707", +4376 => x"07070707", +4377 => x"07070707", +4378 => x"07070707", +4379 => x"07070707", +4380 => x"07070707", +4381 => x"07070707", +4382 => x"07070707", +4383 => x"07070707", +4384 => x"07070707", +4385 => x"07070707", +4386 => x"08080808", +4387 => x"08080808", +4388 => x"08080808", +4389 => x"08080808", +4390 => x"08080808", +4391 => x"08080808", +4392 => x"08080808", +4393 => x"08080808", +4394 => x"08080808", +4395 => x"08080808", +4396 => x"08080808", +4397 => x"08080808", +4398 => x"08080808", +4399 => x"08080808", +4400 => x"08080808", +4401 => x"08080808", +4402 => x"08080808", +4403 => x"08080808", +4404 => x"08080808", +4405 => x"08080808", +4406 => x"08080808", +4407 => x"08080808", +4408 => x"08080808", +4409 => x"08080808", +4410 => x"08080808", +4411 => x"08080808", +4412 => x"08080808", +4413 => x"08080808", +4414 => x"08080808", +4415 => x"08080808", +4416 => x"08080808", +4417 => x"08080808", +4418 => x"00ffffff", +4419 => x"ff00ffff", +4420 => x"ffff00ff", +4421 => x"ffffff00", +4422 => x"0000042c", +4423 => x"00000446", +4424 => x"0000046c", +4425 => x"00000498", +4426 => x"000004ca", +4427 => x"000004ec", +4428 => x"00000508", +4429 => x"0000052c", +4430 => x"00000556", +4431 => x"00000580", +4432 => x"000005a4", +4433 => x"000005be", +4434 => x"000005e0", +4435 => x"00000612", +4436 => x"0000063e", +4437 => x"00000660", +4438 => x"00000000", +4439 => x"00000000", +4440 => x"00000000", +4441 => x"00004d44", +4442 => x"0000c350", +4443 => x"00000000", +4444 => x"00000000", +4445 => x"00000000", +4446 => x"00000000", +4447 => x"00000000", +4448 => x"00000000", +4449 => x"00000000", +4450 => x"00000000", +4451 => x"00000000", +4452 => x"00000000", +4453 => x"00000000", +4454 => x"00000000", +4455 => x"00000000", +4456 => x"ffffffff", +4457 => x"00000000", +4458 => x"00020000", +4459 => x"00000000", +4460 => x"00000000", +4461 => x"000045ac", +4462 => x"000045ac", +4463 => x"000045b4", +4464 => x"000045b4", +4465 => x"000045bc", +4466 => x"000045bc", +4467 => x"000045c4", +4468 => x"000045c4", +4469 => x"000045cc", +4470 => x"000045cc", +4471 => x"000045d4", +4472 => x"000045d4", +4473 => x"000045dc", +4474 => x"000045dc", +4475 => x"000045e4", +4476 => x"000045e4", +4477 => x"000045ec", +4478 => x"000045ec", +4479 => x"000045f4", +4480 => x"000045f4", +4481 => x"000045fc", +4482 => x"000045fc", +4483 => x"00004604", +4484 => x"00004604", +4485 => x"0000460c", +4486 => x"0000460c", +4487 => x"00004614", +4488 => x"00004614", +4489 => x"0000461c", +4490 => x"0000461c", +4491 => x"00004624", +4492 => x"00004624", +4493 => x"0000462c", +4494 => x"0000462c", +4495 => x"00004634", +4496 => x"00004634", +4497 => x"0000463c", +4498 => x"0000463c", +4499 => x"00004644", +4500 => x"00004644", +4501 => x"0000464c", +4502 => x"0000464c", +4503 => x"00004654", +4504 => x"00004654", +4505 => x"0000465c", +4506 => x"0000465c", +4507 => x"00004664", +4508 => x"00004664", +4509 => x"0000466c", +4510 => x"0000466c", +4511 => x"00004674", +4512 => x"00004674", +4513 => x"0000467c", +4514 => x"0000467c", +4515 => x"00004684", +4516 => x"00004684", +4517 => x"0000468c", +4518 => x"0000468c", +4519 => x"00004694", +4520 => x"00004694", +4521 => x"0000469c", +4522 => x"0000469c", +4523 => x"000046a4", +4524 => x"000046a4", +4525 => x"000046ac", +4526 => x"000046ac", +4527 => x"000046b4", +4528 => x"000046b4", +4529 => x"000046bc", +4530 => x"000046bc", +4531 => x"000046c4", +4532 => x"000046c4", +4533 => x"000046cc", +4534 => x"000046cc", +4535 => x"000046d4", +4536 => x"000046d4", +4537 => x"000046dc", +4538 => x"000046dc", +4539 => x"000046e4", +4540 => x"000046e4", +4541 => x"000046ec", +4542 => x"000046ec", +4543 => x"000046f4", +4544 => x"000046f4", +4545 => x"000046fc", +4546 => x"000046fc", +4547 => x"00004704", +4548 => x"00004704", +4549 => x"0000470c", +4550 => x"0000470c", +4551 => x"00004714", +4552 => x"00004714", +4553 => x"0000471c", +4554 => x"0000471c", +4555 => x"00004724", +4556 => x"00004724", +4557 => x"0000472c", +4558 => x"0000472c", +4559 => x"00004734", +4560 => x"00004734", +4561 => x"0000473c", +4562 => x"0000473c", +4563 => x"00004744", +4564 => x"00004744", +4565 => x"0000474c", +4566 => x"0000474c", +4567 => x"00004754", +4568 => x"00004754", +4569 => x"0000475c", +4570 => x"0000475c", +4571 => x"00004764", +4572 => x"00004764", +4573 => x"0000476c", +4574 => x"0000476c", +4575 => x"00004774", +4576 => x"00004774", +4577 => x"0000477c", +4578 => x"0000477c", +4579 => x"00004784", +4580 => x"00004784", +4581 => x"0000478c", +4582 => x"0000478c", +4583 => x"00004794", +4584 => x"00004794", +4585 => x"0000479c", +4586 => x"0000479c", +4587 => x"000047a4", +4588 => x"000047a4", +4589 => x"000047ac", +4590 => x"000047ac", +4591 => x"000047b4", +4592 => x"000047b4", +4593 => x"000047bc", +4594 => x"000047bc", +4595 => x"000047c4", +4596 => x"000047c4", +4597 => x"000047cc", +4598 => x"000047cc", +4599 => x"000047d4", +4600 => x"000047d4", +4601 => x"000047dc", +4602 => x"000047dc", +4603 => x"000047e4", +4604 => x"000047e4", +4605 => x"000047ec", +4606 => x"000047ec", +4607 => x"000047f4", +4608 => x"000047f4", +4609 => x"000047fc", +4610 => x"000047fc", +4611 => x"00004804", +4612 => x"00004804", +4613 => x"0000480c", +4614 => x"0000480c", +4615 => x"00004814", +4616 => x"00004814", +4617 => x"0000481c", +4618 => x"0000481c", +4619 => x"00004824", +4620 => x"00004824", +4621 => x"0000482c", +4622 => x"0000482c", +4623 => x"00004834", +4624 => x"00004834", +4625 => x"0000483c", +4626 => x"0000483c", +4627 => x"00004844", +4628 => x"00004844", +4629 => x"0000484c", +4630 => x"0000484c", +4631 => x"00004854", +4632 => x"00004854", +4633 => x"0000485c", +4634 => x"0000485c", +4635 => x"00004864", +4636 => x"00004864", +4637 => x"0000486c", +4638 => x"0000486c", +4639 => x"00004874", +4640 => x"00004874", +4641 => x"0000487c", +4642 => x"0000487c", +4643 => x"00004884", +4644 => x"00004884", +4645 => x"0000488c", +4646 => x"0000488c", +4647 => x"00004894", +4648 => x"00004894", +4649 => x"0000489c", +4650 => x"0000489c", +4651 => x"000048a4", +4652 => x"000048a4", +4653 => x"000048ac", +4654 => x"000048ac", +4655 => x"000048b4", +4656 => x"000048b4", +4657 => x"000048bc", +4658 => x"000048bc", +4659 => x"000048c4", +4660 => x"000048c4", +4661 => x"000048cc", +4662 => x"000048cc", +4663 => x"000048d4", +4664 => x"000048d4", +4665 => x"000048dc", +4666 => x"000048dc", +4667 => x"000048e4", +4668 => x"000048e4", +4669 => x"000048ec", +4670 => x"000048ec", +4671 => x"000048f4", +4672 => x"000048f4", +4673 => x"000048fc", +4674 => x"000048fc", +4675 => x"00004904", +4676 => x"00004904", +4677 => x"0000490c", +4678 => x"0000490c", +4679 => x"00004914", +4680 => x"00004914", +4681 => x"0000491c", +4682 => x"0000491c", +4683 => x"00004924", +4684 => x"00004924", +4685 => x"0000492c", +4686 => x"0000492c", +4687 => x"00004934", +4688 => x"00004934", +4689 => x"0000493c", +4690 => x"0000493c", +4691 => x"00004944", +4692 => x"00004944", +4693 => x"0000494c", +4694 => x"0000494c", +4695 => x"00004954", +4696 => x"00004954", +4697 => x"0000495c", +4698 => x"0000495c", +4699 => x"00004964", +4700 => x"00004964", +4701 => x"0000496c", +4702 => x"0000496c", +4703 => x"00004974", +4704 => x"00004974", +4705 => x"0000497c", +4706 => x"0000497c", +4707 => x"00004984", +4708 => x"00004984", +4709 => x"0000498c", +4710 => x"0000498c", +4711 => x"00004994", +4712 => x"00004994", +4713 => x"0000499c", +4714 => x"0000499c", +4715 => x"000049a4", +4716 => x"000049a4", +4717 => x"000049b8", +4718 => x"00000000", +4719 => x"00004c20", +4720 => x"00004c7c", +4721 => x"00004cd8", +4722 => x"00000000", +4723 => x"00000000", +4724 => x"00000000", +4725 => x"00000000", +4726 => x"00000000", +4727 => x"00000000", +4728 => x"00000000", +4729 => x"00000000", +4730 => x"00000000", +4731 => x"000043f8", +4732 => x"00000000", +4733 => x"00000000", +4734 => x"00000000", +4735 => x"00000000", +4736 => x"00000000", +4737 => x"00000000", +4738 => x"00000000", +4739 => x"00000000", +4740 => x"00000000", +4741 => x"00000000", +4742 => x"00000000", +4743 => x"00000000", +4744 => x"00000000", +4745 => x"00000000", +4746 => x"00000000", +4747 => x"00000000", +4748 => x"00000000", +4749 => x"00000000", +4750 => x"00000000", +4751 => x"00000000", +4752 => x"00000000", +4753 => x"00000000", +4754 => x"00000000", +4755 => x"00000000", +4756 => x"00000000", +4757 => x"00000000", +4758 => x"00000000", +4759 => x"00000000", +4760 => x"00000001", +4761 => x"330eabcd", +4762 => x"1234e66d", +4763 => x"deec0005", +4764 => x"000b0000", +4765 => x"00000000", +4766 => x"00000000", +4767 => x"00000000", +4768 => x"00000000", +4769 => x"00000000", +4770 => x"00000000", +4771 => x"00000000", +4772 => x"00000000", +4773 => x"00000000", +4774 => x"00000000", +4775 => x"00000000", +4776 => x"00000000", +4777 => x"00000000", +4778 => x"00000000", +4779 => x"00000000", +4780 => x"00000000", +4781 => x"00000000", +4782 => x"00000000", +4783 => x"00000000", +4784 => x"00000000", +4785 => x"00000000", +4786 => x"00000000", +4787 => x"00000000", +4788 => x"00000000", +4789 => x"00000000", +4790 => x"00000000", +4791 => x"00000000", +4792 => x"00000000", +4793 => x"00000000", +4794 => x"00000000", +4795 => x"00000000", +4796 => x"00000000", +4797 => x"00000000", +4798 => x"00000000", +4799 => x"00000000", +4800 => x"00000000", +4801 => x"00000000", +4802 => x"00000000", +4803 => x"00000000", +4804 => x"00000000", +4805 => x"00000000", +4806 => x"00000000", +4807 => x"00000000", +4808 => x"00000000", +4809 => x"00000000", +4810 => x"00000000", +4811 => x"00000000", +4812 => x"00000000", +4813 => x"00000000", +4814 => x"00000000", +4815 => x"00000000", +4816 => x"00000000", +4817 => x"00000000", +4818 => x"00000000", +4819 => x"00000000", +4820 => x"00000000", +4821 => x"00000000", +4822 => x"00000000", +4823 => x"00000000", +4824 => x"00000000", +4825 => x"00000000", +4826 => x"00000000", +4827 => x"00000000", +4828 => x"00000000", +4829 => x"00000000", +4830 => x"00000000", +4831 => x"00000000", +4832 => x"00000000", +4833 => x"00000000", +4834 => x"00000000", +4835 => x"00000000", +4836 => x"00000000", +4837 => x"00000000", +4838 => x"00000000", +4839 => x"00000000", +4840 => x"00000000", +4841 => x"00000000", +4842 => x"00000000", +4843 => x"00000000", +4844 => x"00000000", +4845 => x"00000000", +4846 => x"00000000", +4847 => x"00000000", +4848 => x"00000000", +4849 => x"00000000", +4850 => x"00000000", +4851 => x"00000000", +4852 => x"00000000", +4853 => x"00000000", +4854 => x"00000000", +4855 => x"00000000", +4856 => x"00000000", +4857 => x"00000000", +4858 => x"00000000", +4859 => x"00000000", +4860 => x"00000000", +4861 => x"00000000", +4862 => x"00000000", +4863 => x"00000000", +4864 => x"00000000", +4865 => x"00000000", +4866 => x"00000000", +4867 => x"00000000", +4868 => x"00000000", +4869 => x"00000000", +4870 => x"00000000", +4871 => x"00000000", +4872 => x"00000000", +4873 => x"00000000", +4874 => x"00000000", +4875 => x"00000000", +4876 => x"00000000", +4877 => x"00000000", +4878 => x"00000000", +4879 => x"00000000", +4880 => x"00000000", +4881 => x"00000000", +4882 => x"00000000", +4883 => x"00000000", +4884 => x"00000000", +4885 => x"00000000", +4886 => x"00000000", +4887 => x"00000000", +4888 => x"00000000", +4889 => x"00000000", +4890 => x"00000000", +4891 => x"00000000", +4892 => x"00000000", +4893 => x"00000000", +4894 => x"00000000", +4895 => x"00000000", +4896 => x"00000000", +4897 => x"00000000", +4898 => x"00000000", +4899 => x"00000000", +4900 => x"00000000", +4901 => x"00000000", +4902 => x"00000000", +4903 => x"00000000", +4904 => x"00000000", +4905 => x"00000000", +4906 => x"00000000", +4907 => x"00000000", +4908 => x"00000000", +4909 => x"00000000", +4910 => x"00000000", +4911 => x"00000000", +4912 => x"00000000", +4913 => x"00000000", +4914 => x"00000000", +4915 => x"00000000", +4916 => x"00000000", +4917 => x"00000000", +4918 => x"00000000", +4919 => x"00000000", +4920 => x"00000000", +4921 => x"00000000", +4922 => x"00000000", +4923 => x"00000000", +4924 => x"00000000", +4925 => x"00000000", +4926 => x"00000000", +4927 => x"00000000", +4928 => x"00000000", +4929 => x"00000000", +4930 => x"00000000", +4931 => x"00000000", +4932 => x"00000000", +4933 => x"00000000", +4934 => x"00000000", +4935 => x"00000000", +4936 => x"00000000", +4937 => x"00000000", +4938 => x"00000000", +4939 => x"00000000", +4940 => x"00000000", +4941 => x"000043fc", +4942 => x"ffffffff", +4943 => x"00000000", +4944 => x"ffffffff", +4945 => x"00000000", + others => x"00000000" +); + +attribute syn_ramstyle : string; +attribute syn_ramstyle of ram : signal is "no_rw_check" ; + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + 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/zpu3/src/helloworld_ram.vhd b/zpu/hdl/zpu3/src/helloworld_ram.vhd new file mode 100644 index 0000000..2e1d35d --- /dev/null +++ b/zpu/hdl/zpu3/src/helloworld_ram.vhd @@ -0,0 +1,3345 @@ +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 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"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b80d6", +3 => x"f00c3a0b", +4 => x"0b80cd92", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80cde02d", +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"832b0b2a", +20 => x"83ffff06", +21 => x"52040000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b0b2b09", +29 => x"067383ff", +30 => x"ff0b0b0b", +31 => x"0b83a504", +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"72728072", +73 => x"8106ff05", +74 => x"09720605", +75 => x"71105272", +76 => x"0a100a53", +77 => x"72ed3851", +78 => x"51535104", +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"04067383", +106 => x"06098105", +107 => x"8205832b", +108 => x"0b2b0772", +109 => x"fc060c51", +110 => x"51040000", +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"04098105", +139 => x"83051010", +140 => x"102b0772", +141 => x"fc060c51", +142 => x"51040000", +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"0b0b80d6", +162 => x"dc738306", +163 => x"10100508", +164 => x"067381ff", +165 => x"06738306", +166 => x"0b0b0b84", +167 => x"a9040000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8e", +171 => x"fd2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b90", +179 => x"af2d5050", +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"07535050", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075350", +199 => x"50040000", +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"80d6ec0c", +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"04000000", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"839f3f80", +257 => x"cdf83f04", +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"51043c04", +267 => x"70700b0b", +268 => x"80e6d808", +269 => x"52841208", +270 => x"70810651", +271 => x"5170f638", +272 => x"710881ff", +273 => x"06800c50", +274 => x"50047070", +275 => x"0b0b80e6", +276 => x"d8085284", +277 => x"1208700a", +278 => x"100a7081", +279 => x"06515151", +280 => x"70f13873", +281 => x"720c5050", +282 => x"0480d6ec", +283 => x"08802ea8", +284 => x"38838080", +285 => x"0b0b0b80", +286 => x"e6d80c82", +287 => x"a0800b0b", +288 => x"0b80e6dc", +289 => x"0c829080", +290 => x"0b80e6ec", +291 => x"0c0b0b80", +292 => x"e6e00b80", +293 => x"e6f00c04", +294 => x"f8808080", +295 => x"a40b0b0b", +296 => x"80e6d80c", +297 => x"f8808082", +298 => x"800b0b0b", +299 => x"80e6dc0c", +300 => x"f8808084", +301 => x"800b80e6", +302 => x"ec0cf880", +303 => x"8080940b", +304 => x"80e6f00c", +305 => x"f8808080", +306 => x"9c0b80e6", +307 => x"e80cf880", +308 => x"8080a00b", +309 => x"80e6f40c", +310 => x"04f23d0d", +311 => x"600b0b80", +312 => x"e6dc0856", +313 => x"5d82750c", +314 => x"8059805a", +315 => x"800b8f3d", +316 => x"71101017", +317 => x"70085a57", +318 => x"5d5b8077", +319 => x"81ff067c", +320 => x"832b5658", +321 => x"5276537b", +322 => x"5182fc3f", +323 => x"7d7f7a72", +324 => x"077c7207", +325 => x"71716081", +326 => x"05415f5d", +327 => x"5b595755", +328 => x"7a8724bb", +329 => x"380b0b80", +330 => x"e6dc087b", +331 => x"10101170", +332 => x"08595155", +333 => x"807781ff", +334 => x"067c832b", +335 => x"56585276", +336 => x"537b5182", +337 => x"c23f7d7f", +338 => x"7a72077c", +339 => x"72077171", +340 => x"60810541", +341 => x"5f5d5b59", +342 => x"5755877b", +343 => x"25c73876", +344 => x"7d0c7784", +345 => x"1e0c7c80", +346 => x"0c903d0d", +347 => x"04707080", +348 => x"e6e43351", +349 => x"70a73880", +350 => x"d6f80870", +351 => x"08525270", +352 => x"802e9438", +353 => x"841280d6", +354 => x"f80c702d", +355 => x"80d6f808", +356 => x"70085252", +357 => x"70ee3881", +358 => x"0b80e6e4", +359 => x"34505004", +360 => x"04700b0b", +361 => x"80e6d408", +362 => x"802e8e38", +363 => x"0b0b0b0b", +364 => x"800b802e", +365 => x"09810683", +366 => x"3850040b", +367 => x"0b80e6d4", +368 => x"510b0b0b", +369 => x"f4ba3f50", +370 => x"04048c08", +371 => x"028c0c70", +372 => x"70707080", +373 => x"0b8c08fc", +374 => x"050c8c08", +375 => x"fc050889", +376 => x"24818e38", +377 => x"0b0b80d6", +378 => x"a85188f3", +379 => x"3f0b0b80", +380 => x"d6b85188", +381 => x"ea3ffc0b", +382 => x"80e6f80c", +383 => x"80e6f808", +384 => x"812c5372", +385 => x"fe2e8438", +386 => x"86f13f8a", +387 => x"0b80e6fc", +388 => x"0c80e6fc", +389 => x"0880e6f8", +390 => x"08295372", +391 => x"d82e8438", +392 => x"86d93f8a", +393 => x"0b80e6f8", +394 => x"0c84e2ad", +395 => x"800b80e6", +396 => x"fc0c80e6", +397 => x"fc0880e6", +398 => x"f8082953", +399 => x"72afd7c2", +400 => x"802e8438", +401 => x"86b53f81", +402 => x"0a0b80e6", +403 => x"f80cff0b", +404 => x"80e6fc0c", +405 => x"80e6fc08", +406 => x"80e6f808", +407 => x"25843886", +408 => x"9a3f8c08", +409 => x"fc050881", +410 => x"058c08fc", +411 => x"050cfeea", +412 => x"398c08fc", +413 => x"05088a2e", +414 => x"843885ff", +415 => x"3f72800c", +416 => x"50505050", +417 => x"8c0c048c", +418 => x"08028c0c", +419 => x"f53d0d8c", +420 => x"08940508", +421 => x"9d388c08", +422 => x"8c05088c", +423 => x"08900508", +424 => x"8c088805", +425 => x"08585654", +426 => x"73760c74", +427 => x"84170c81", +428 => x"bf39800b", +429 => x"8c08f005", +430 => x"0c800b8c", +431 => x"08f4050c", +432 => x"8c088c05", +433 => x"088c0890", +434 => x"05085654", +435 => x"738c08f0", +436 => x"050c748c", +437 => x"08f4050c", +438 => x"8c08f805", +439 => x"8c08f005", +440 => x"56568870", +441 => x"54755376", +442 => x"5254859a", +443 => x"3fa00b8c", +444 => x"08940508", +445 => x"318c08ec", +446 => x"050c8c08", +447 => x"ec050880", +448 => x"249d3880", +449 => x"0b8c08f4", +450 => x"050c8c08", +451 => x"ec050830", +452 => x"8c08fc05", +453 => x"08712b8c", +454 => x"08f0050c", +455 => x"54b9398c", +456 => x"08fc0508", +457 => x"8c08ec05", +458 => x"082a8c08", +459 => x"e8050c8c", +460 => x"08fc0508", +461 => x"8c089405", +462 => x"082b8c08", +463 => x"f4050c8c", +464 => x"08f80508", +465 => x"8c089405", +466 => x"082b708c", +467 => x"08e80508", +468 => x"078c08f0", +469 => x"050c548c", +470 => x"08f00508", +471 => x"8c08f405", +472 => x"088c0888", +473 => x"05085856", +474 => x"5473760c", +475 => x"7484170c", +476 => x"8c088805", +477 => x"08800c8d", +478 => x"3d0d8c0c", +479 => x"048c0802", +480 => x"8c0cf93d", +481 => x"0d800b8c", +482 => x"08fc050c", +483 => x"8c088805", +484 => x"088025ab", +485 => x"388c0888", +486 => x"0508308c", +487 => x"0888050c", +488 => x"800b8c08", +489 => x"f4050c8c", +490 => x"08fc0508", +491 => x"8838810b", +492 => x"8c08f405", +493 => x"0c8c08f4", +494 => x"05088c08", +495 => x"fc050c8c", +496 => x"088c0508", +497 => x"8025ab38", +498 => x"8c088c05", +499 => x"08308c08", +500 => x"8c050c80", +501 => x"0b8c08f0", +502 => x"050c8c08", +503 => x"fc050888", +504 => x"38810b8c", +505 => x"08f0050c", +506 => x"8c08f005", +507 => x"088c08fc", +508 => x"050c8053", +509 => x"8c088c05", +510 => x"08528c08", +511 => x"88050851", +512 => x"81a73f80", +513 => x"08708c08", +514 => x"f8050c54", +515 => x"8c08fc05", +516 => x"08802e8c", +517 => x"388c08f8", +518 => x"0508308c", +519 => x"08f8050c", +520 => x"8c08f805", +521 => x"0870800c", +522 => x"54893d0d", +523 => x"8c0c048c", +524 => x"08028c0c", +525 => x"fb3d0d80", +526 => x"0b8c08fc", +527 => x"050c8c08", +528 => x"88050880", +529 => x"2593388c", +530 => x"08880508", +531 => x"308c0888", +532 => x"050c810b", +533 => x"8c08fc05", +534 => x"0c8c088c", +535 => x"05088025", +536 => x"8c388c08", +537 => x"8c050830", +538 => x"8c088c05", +539 => x"0c81538c", +540 => x"088c0508", +541 => x"528c0888", +542 => x"050851ad", +543 => x"3f800870", +544 => x"8c08f805", +545 => x"0c548c08", +546 => x"fc050880", +547 => x"2e8c388c", +548 => x"08f80508", +549 => x"308c08f8", +550 => x"050c8c08", +551 => x"f8050870", +552 => x"800c5487", +553 => x"3d0d8c0c", +554 => x"048c0802", +555 => x"8c0c7070", +556 => x"7070810b", +557 => x"8c08fc05", +558 => x"0c800b8c", +559 => x"08f8050c", +560 => x"8c088c05", +561 => x"088c0888", +562 => x"050827ac", +563 => x"388c08fc", +564 => x"0508802e", +565 => x"a338800b", +566 => x"8c088c05", +567 => x"08249938", +568 => x"8c088c05", +569 => x"08108c08", +570 => x"8c050c8c", +571 => x"08fc0508", +572 => x"108c08fc", +573 => x"050cc939", +574 => x"8c08fc05", +575 => x"08802e80", +576 => x"c9388c08", +577 => x"8c05088c", +578 => x"08880508", +579 => x"26a1388c", +580 => x"08880508", +581 => x"8c088c05", +582 => x"08318c08", +583 => x"88050c8c", +584 => x"08f80508", +585 => x"8c08fc05", +586 => x"08078c08", +587 => x"f8050c8c", +588 => x"08fc0508", +589 => x"812a8c08", +590 => x"fc050c8c", +591 => x"088c0508", +592 => x"812a8c08", +593 => x"8c050cff", +594 => x"af398c08", +595 => x"90050880", +596 => x"2e8f388c", +597 => x"08880508", +598 => x"708c08f4", +599 => x"050c518d", +600 => x"398c08f8", +601 => x"0508708c", +602 => x"08f4050c", +603 => x"518c08f4", +604 => x"0508800c", +605 => x"50505050", +606 => x"8c0c0470", +607 => x"865184ea", +608 => x"3f8151ba", +609 => x"d83ffc3d", +610 => x"0d767079", +611 => x"7b555555", +612 => x"558f7227", +613 => x"8c387275", +614 => x"07830651", +615 => x"70802ea7", +616 => x"38ff1252", +617 => x"71ff2e98", +618 => x"38727081", +619 => x"05543374", +620 => x"70810556", +621 => x"34ff1252", +622 => x"71ff2e09", +623 => x"8106ea38", +624 => x"74800c86", +625 => x"3d0d0474", +626 => x"51727084", +627 => x"05540871", +628 => x"70840553", +629 => x"0c727084", +630 => x"05540871", +631 => x"70840553", +632 => x"0c727084", +633 => x"05540871", +634 => x"70840553", +635 => x"0c727084", +636 => x"05540871", +637 => x"70840553", +638 => x"0cf01252", +639 => x"718f26c9", +640 => x"38837227", +641 => x"95387270", +642 => x"84055408", +643 => x"71708405", +644 => x"530cfc12", +645 => x"52718326", +646 => x"ed387054", +647 => x"ff8339f7", +648 => x"3d0d7c70", +649 => x"525384b8", +650 => x"3f725480", +651 => x"085580d6", +652 => x"c8568157", +653 => x"80088105", +654 => x"5a8b3de4", +655 => x"11595382", +656 => x"59f41352", +657 => x"7b881108", +658 => x"525384f5", +659 => x"3f800830", +660 => x"70800807", +661 => x"9f2c8a07", +662 => x"800c538b", +663 => x"3d0d0470", +664 => x"70735280", +665 => x"d6fc0851", +666 => x"ffb53f50", +667 => x"50047070", +668 => x"70707553", +669 => x"84d81308", +670 => x"802e8b38", +671 => x"80537280", +672 => x"0c505050", +673 => x"50048180", +674 => x"5272518a", +675 => x"9b3f8008", +676 => x"84d8140c", +677 => x"ff538008", +678 => x"802ee338", +679 => x"8008549f", +680 => x"53807470", +681 => x"8405560c", +682 => x"ff135380", +683 => x"7324cd38", +684 => x"80747084", +685 => x"05560cff", +686 => x"13537280", +687 => x"25e338ff", +688 => x"bb397070", +689 => x"70707577", +690 => x"55539f74", +691 => x"278e3896", +692 => x"730cff52", +693 => x"71800c50", +694 => x"50505004", +695 => x"84d81308", +696 => x"5271802e", +697 => x"94387310", +698 => x"10127008", +699 => x"79720c51", +700 => x"5271800c", +701 => x"50505050", +702 => x"047251fe", +703 => x"f13fff52", +704 => x"8008d138", +705 => x"84d81308", +706 => x"74101011", +707 => x"70087a72", +708 => x"0c515152", +709 => x"dc39f93d", +710 => x"0d797b58", +711 => x"56769f26", +712 => x"80e83884", +713 => x"d8160854", +714 => x"73802eaa", +715 => x"38761010", +716 => x"14700855", +717 => x"5573802e", +718 => x"ba388058", +719 => x"73812e8f", +720 => x"3873ff2e", +721 => x"a3388075", +722 => x"0c765173", +723 => x"2d805877", +724 => x"800c893d", +725 => x"0d047551", +726 => x"fe943fff", +727 => x"588008ef", +728 => x"3884d816", +729 => x"0854c639", +730 => x"96760c81", +731 => x"0b800c89", +732 => x"3d0d0475", +733 => x"5181e53f", +734 => x"76538008", +735 => x"52755181", +736 => x"a53f8008", +737 => x"800c893d", +738 => x"0d049676", +739 => x"0cff0b80", +740 => x"0c893d0d", +741 => x"04fc3d0d", +742 => x"76785653", +743 => x"ff54749f", +744 => x"26b13884", +745 => x"d8130852", +746 => x"71802eae", +747 => x"38741010", +748 => x"12700853", +749 => x"53815471", +750 => x"802e9838", +751 => x"825471ff", +752 => x"2e913883", +753 => x"5471812e", +754 => x"8a388073", +755 => x"0c745171", +756 => x"2d805473", +757 => x"800c863d", +758 => x"0d047251", +759 => x"fd903f80", +760 => x"08f13884", +761 => x"d8130852", +762 => x"c4397070", +763 => x"735280d6", +764 => x"fc0851fe", +765 => x"a13f5050", +766 => x"04707070", +767 => x"75537452", +768 => x"80d6fc08", +769 => x"51fdbb3f", +770 => x"50505004", +771 => x"7080d6fc", +772 => x"0851fcda", +773 => x"3f500470", +774 => x"70735280", +775 => x"d6fc0851", +776 => x"fef33f50", +777 => x"5004fc3d", +778 => x"0d800b80", +779 => x"e7800c78", +780 => x"527751b4", +781 => x"9b3f8008", +782 => x"548008ff", +783 => x"2e883873", +784 => x"800c863d", +785 => x"0d0480e7", +786 => x"80085574", +787 => x"802ef038", +788 => x"7675710c", +789 => x"5373800c", +790 => x"863d0d04", +791 => x"b3ed3f04", +792 => x"70707070", +793 => x"75707183", +794 => x"06535552", +795 => x"70b83871", +796 => x"70087009", +797 => x"f7fbfdff", +798 => x"120670f8", +799 => x"84828180", +800 => x"06515152", +801 => x"53709d38", +802 => x"84137008", +803 => x"7009f7fb", +804 => x"fdff1206", +805 => x"70f88482", +806 => x"81800651", +807 => x"51525370", +808 => x"802ee538", +809 => x"72527133", +810 => x"5170802e", +811 => x"8a388112", +812 => x"70335252", +813 => x"70f83871", +814 => x"7431800c", +815 => x"50505050", +816 => x"04f23d0d", +817 => x"60628811", +818 => x"08705757", +819 => x"5f5a7480", +820 => x"2e819038", +821 => x"8c1a2270", +822 => x"832a8132", +823 => x"70810651", +824 => x"55587386", +825 => x"38901a08", +826 => x"91387951", +827 => x"9cd03fff", +828 => x"54800880", +829 => x"ee388c1a", +830 => x"22587d08", +831 => x"57807883", +832 => x"ffff0670", +833 => x"0a100a70", +834 => x"81065156", +835 => x"57557375", +836 => x"2e80d738", +837 => x"74903876", +838 => x"08841808", +839 => x"88195956", +840 => x"5974802e", +841 => x"f2387454", +842 => x"88807527", +843 => x"84388880", +844 => x"54735378", +845 => x"529c1a08", +846 => x"51a41a08", +847 => x"54732d80", +848 => x"0b800825", +849 => x"82e63880", +850 => x"08197580", +851 => x"08317f88", +852 => x"05088008", +853 => x"31706188", +854 => x"050c5656", +855 => x"5973ffb4", +856 => x"38805473", +857 => x"800c903d", +858 => x"0d047581", +859 => x"32708106", +860 => x"76415154", +861 => x"73802e81", +862 => x"c1387490", +863 => x"38760884", +864 => x"18088819", +865 => x"59565974", +866 => x"802ef238", +867 => x"881a0878", +868 => x"83ffff06", +869 => x"70892a70", +870 => x"81065156", +871 => x"59567380", +872 => x"2e82fa38", +873 => x"7575278d", +874 => x"3877872a", +875 => x"70810651", +876 => x"547382b5", +877 => x"38747627", +878 => x"83387456", +879 => x"75537852", +880 => x"79085190", +881 => x"f83f881a", +882 => x"08763188", +883 => x"1b0c7908", +884 => x"167a0c74", +885 => x"56751975", +886 => x"77317f88", +887 => x"05087831", +888 => x"70618805", +889 => x"0c565659", +890 => x"73802efe", +891 => x"f4388c1a", +892 => x"2258ff86", +893 => x"39777854", +894 => x"79537b52", +895 => x"5690be3f", +896 => x"881a0878", +897 => x"31881b0c", +898 => x"7908187a", +899 => x"0c7c7631", +900 => x"5d7c8e38", +901 => x"79519c8a", +902 => x"3f800881", +903 => x"8f388008", +904 => x"5f751975", +905 => x"77317f88", +906 => x"05087831", +907 => x"70618805", +908 => x"0c565659", +909 => x"73802efe", +910 => x"a8387481", +911 => x"83387608", +912 => x"84180888", +913 => x"19595659", +914 => x"74802ef2", +915 => x"3874538a", +916 => x"5278518e", +917 => x"c93f8008", +918 => x"79318105", +919 => x"5d800884", +920 => x"3881155d", +921 => x"815f7c58", +922 => x"747d2783", +923 => x"38745894", +924 => x"1a08881b", +925 => x"0811575c", +926 => x"807a085c", +927 => x"54901a08", +928 => x"7b278338", +929 => x"81547578", +930 => x"25843873", +931 => x"ba387b78", +932 => x"24fee238", +933 => x"7b537852", +934 => x"9c1a0851", +935 => x"a41a0854", +936 => x"732d8008", +937 => x"56800880", +938 => x"24fee238", +939 => x"8c1a2280", +940 => x"c0075473", +941 => x"8c1b23ff", +942 => x"5473800c", +943 => x"903d0d04", +944 => x"7effa338", +945 => x"ff873975", +946 => x"5378527a", +947 => x"518eee3f", +948 => x"7908167a", +949 => x"0c79519a", +950 => x"c93f8008", +951 => x"cf387c76", +952 => x"315d7cfe", +953 => x"bc38feac", +954 => x"39901a08", +955 => x"7a087131", +956 => x"76117056", +957 => x"5a575280", +958 => x"d6fc0851", +959 => x"90843f80", +960 => x"08802eff", +961 => x"a7388008", +962 => x"901b0c80", +963 => x"08167a0c", +964 => x"77941b0c", +965 => x"74881b0c", +966 => x"7456fd99", +967 => x"39790858", +968 => x"901a0878", +969 => x"27833881", +970 => x"54757527", +971 => x"843873b3", +972 => x"38941a08", +973 => x"56757526", +974 => x"80d33875", +975 => x"5378529c", +976 => x"1a0851a4", +977 => x"1a085473", +978 => x"2d800856", +979 => x"80088024", +980 => x"fd83388c", +981 => x"1a2280c0", +982 => x"0754738c", +983 => x"1b23ff54", +984 => x"fed73975", +985 => x"53785277", +986 => x"518dd23f", +987 => x"7908167a", +988 => x"0c795199", +989 => x"ad3f8008", +990 => x"802efcd9", +991 => x"388c1a22", +992 => x"80c00754", +993 => x"738c1b23", +994 => x"ff54fead", +995 => x"39747554", +996 => x"79537852", +997 => x"568da63f", +998 => x"881a0875", +999 => x"31881b0c", +1000 => x"7908157a", +1001 => x"0cfcae39", +1002 => x"f33d0d7f", +1003 => x"618b1170", +1004 => x"f8065c55", +1005 => x"555e7296", +1006 => x"26833890", +1007 => x"59807924", +1008 => x"747a2607", +1009 => x"53805472", +1010 => x"742e0981", +1011 => x"0680cb38", +1012 => x"7d518eac", +1013 => x"3f7883f7", +1014 => x"2680c638", +1015 => x"78832a70", +1016 => x"10101080", +1017 => x"deb8058c", +1018 => x"11085959", +1019 => x"5a76782e", +1020 => x"83b03884", +1021 => x"1708fc06", +1022 => x"568c1708", +1023 => x"88180871", +1024 => x"8c120c88", +1025 => x"120c5875", +1026 => x"17841108", +1027 => x"81078412", +1028 => x"0c537d51", +1029 => x"8deb3f88", +1030 => x"17547380", +1031 => x"0c8f3d0d", +1032 => x"0478892a", +1033 => x"79832a5b", +1034 => x"5372802e", +1035 => x"bf387886", +1036 => x"2ab8055a", +1037 => x"847327b4", +1038 => x"3880db13", +1039 => x"5a947327", +1040 => x"ab38788c", +1041 => x"2a80ee05", +1042 => x"5a80d473", +1043 => x"279e3878", +1044 => x"8f2a80f7", +1045 => x"055a82d4", +1046 => x"73279138", +1047 => x"78922a80", +1048 => x"fc055a8a", +1049 => x"d4732784", +1050 => x"3880fe5a", +1051 => x"79101010", +1052 => x"80deb805", +1053 => x"8c110858", +1054 => x"5576752e", +1055 => x"a3388417", +1056 => x"08fc0670", +1057 => x"7a315556", +1058 => x"738f2488", +1059 => x"d5387380", +1060 => x"25fee638", +1061 => x"8c170857", +1062 => x"76752e09", +1063 => x"8106df38", +1064 => x"811a5a80", +1065 => x"dec80857", +1066 => x"7680dec0", +1067 => x"2e82c038", +1068 => x"841708fc", +1069 => x"06707a31", +1070 => x"5556738f", +1071 => x"2481f938", +1072 => x"80dec00b", +1073 => x"80decc0c", +1074 => x"80dec00b", +1075 => x"80dec80c", +1076 => x"738025fe", +1077 => x"b23883ff", +1078 => x"762783df", +1079 => x"3875892a", +1080 => x"76832a55", +1081 => x"5372802e", +1082 => x"bf387586", +1083 => x"2ab80554", +1084 => x"847327b4", +1085 => x"3880db13", +1086 => x"54947327", +1087 => x"ab38758c", +1088 => x"2a80ee05", +1089 => x"5480d473", +1090 => x"279e3875", +1091 => x"8f2a80f7", +1092 => x"055482d4", +1093 => x"73279138", +1094 => x"75922a80", +1095 => x"fc05548a", +1096 => x"d4732784", +1097 => x"3880fe54", +1098 => x"73101010", +1099 => x"80deb805", +1100 => x"88110856", +1101 => x"5874782e", +1102 => x"86cf3884", +1103 => x"1508fc06", +1104 => x"53757327", +1105 => x"8d388815", +1106 => x"08557478", +1107 => x"2e098106", +1108 => x"ea388c15", +1109 => x"0880deb8", +1110 => x"0b840508", +1111 => x"718c1a0c", +1112 => x"76881a0c", +1113 => x"7888130c", +1114 => x"788c180c", +1115 => x"5d587953", +1116 => x"807a2483", +1117 => x"e6387282", +1118 => x"2c81712b", +1119 => x"5c537a7c", +1120 => x"26819838", +1121 => x"7b7b0653", +1122 => x"7282f138", +1123 => x"79fc0684", +1124 => x"055a7a10", +1125 => x"707d0654", +1126 => x"5b7282e0", +1127 => x"38841a5a", +1128 => x"f1398817", +1129 => x"8c110858", +1130 => x"5876782e", +1131 => x"098106fc", +1132 => x"c238821a", +1133 => x"5afdec39", +1134 => x"78177981", +1135 => x"0784190c", +1136 => x"7080decc", +1137 => x"0c7080de", +1138 => x"c80c80de", +1139 => x"c00b8c12", +1140 => x"0c8c1108", +1141 => x"88120c74", +1142 => x"81078412", +1143 => x"0c741175", +1144 => x"710c5153", +1145 => x"7d518a99", +1146 => x"3f881754", +1147 => x"fcac3980", +1148 => x"deb80b84", +1149 => x"05087a54", +1150 => x"5c798025", +1151 => x"fef83882", +1152 => x"da397a09", +1153 => x"7c067080", +1154 => x"deb80b84", +1155 => x"050c5c7a", +1156 => x"105b7a7c", +1157 => x"2685387a", +1158 => x"85b83880", +1159 => x"deb80b88", +1160 => x"05087084", +1161 => x"1208fc06", +1162 => x"707c317c", +1163 => x"72268f72", +1164 => x"25075757", +1165 => x"5c5d5572", +1166 => x"802e80db", +1167 => x"38797a16", +1168 => x"80deb008", +1169 => x"1b90115a", +1170 => x"55575b80", +1171 => x"deac08ff", +1172 => x"2e8838a0", +1173 => x"8f13e080", +1174 => x"06577652", +1175 => x"7d5191a7", +1176 => x"3f800854", +1177 => x"8008ff2e", +1178 => x"90388008", +1179 => x"76278299", +1180 => x"387480de", +1181 => x"b82e8291", +1182 => x"3880deb8", +1183 => x"0b880508", +1184 => x"55841508", +1185 => x"fc06707a", +1186 => x"317a7226", +1187 => x"8f722507", +1188 => x"52555372", +1189 => x"83e63874", +1190 => x"79810784", +1191 => x"170c7916", +1192 => x"7080deb8", +1193 => x"0b88050c", +1194 => x"75810784", +1195 => x"120c547e", +1196 => x"525788cd", +1197 => x"3f881754", +1198 => x"fae03975", +1199 => x"832a7054", +1200 => x"54807424", +1201 => x"819b3872", +1202 => x"822c8171", +1203 => x"2b80debc", +1204 => x"08077080", +1205 => x"deb80b84", +1206 => x"050c7510", +1207 => x"101080de", +1208 => x"b8058811", +1209 => x"08585a5d", +1210 => x"53778c18", +1211 => x"0c748818", +1212 => x"0c768819", +1213 => x"0c768c16", +1214 => x"0cfcf339", +1215 => x"797a1010", +1216 => x"1080deb8", +1217 => x"05705759", +1218 => x"5d8c1508", +1219 => x"5776752e", +1220 => x"a3388417", +1221 => x"08fc0670", +1222 => x"7a315556", +1223 => x"738f2483", +1224 => x"ca387380", +1225 => x"25848138", +1226 => x"8c170857", +1227 => x"76752e09", +1228 => x"8106df38", +1229 => x"8815811b", +1230 => x"70830655", +1231 => x"5b5572c9", +1232 => x"387c8306", +1233 => x"5372802e", +1234 => x"fdb838ff", +1235 => x"1df81959", +1236 => x"5d881808", +1237 => x"782eea38", +1238 => x"fdb53983", +1239 => x"1a53fc96", +1240 => x"39831470", +1241 => x"822c8171", +1242 => x"2b80debc", +1243 => x"08077080", +1244 => x"deb80b84", +1245 => x"050c7610", +1246 => x"101080de", +1247 => x"b8058811", +1248 => x"08595b5e", +1249 => x"5153fee1", +1250 => x"3980ddfc", +1251 => x"08175880", +1252 => x"08762e81", +1253 => x"8d3880de", +1254 => x"ac08ff2e", +1255 => x"83ec3873", +1256 => x"76311880", +1257 => x"ddfc0c73", +1258 => x"87067057", +1259 => x"5372802e", +1260 => x"88388873", +1261 => x"31701555", +1262 => x"5676149f", +1263 => x"ff06a080", +1264 => x"71311770", +1265 => x"547f5357", +1266 => x"538ebc3f", +1267 => x"80085380", +1268 => x"08ff2e81", +1269 => x"a03880dd", +1270 => x"fc081670", +1271 => x"80ddfc0c", +1272 => x"747580de", +1273 => x"b80b8805", +1274 => x"0c747631", +1275 => x"18708107", +1276 => x"51555658", +1277 => x"7b80deb8", +1278 => x"2e839c38", +1279 => x"798f2682", +1280 => x"cb38810b", +1281 => x"84150c84", +1282 => x"1508fc06", +1283 => x"707a317a", +1284 => x"72268f72", +1285 => x"25075255", +1286 => x"5372802e", +1287 => x"fcf93880", +1288 => x"db398008", +1289 => x"9fff0653", +1290 => x"72feeb38", +1291 => x"7780ddfc", +1292 => x"0c80deb8", +1293 => x"0b880508", +1294 => x"7b188107", +1295 => x"84120c55", +1296 => x"80dea808", +1297 => x"78278638", +1298 => x"7780dea8", +1299 => x"0c80dea4", +1300 => x"087827fc", +1301 => x"ac387780", +1302 => x"dea40c84", +1303 => x"1508fc06", +1304 => x"707a317a", +1305 => x"72268f72", +1306 => x"25075255", +1307 => x"5372802e", +1308 => x"fca53888", +1309 => x"39807454", +1310 => x"56fedb39", +1311 => x"7d518581", +1312 => x"3f800b80", +1313 => x"0c8f3d0d", +1314 => x"04735380", +1315 => x"7424a938", +1316 => x"72822c81", +1317 => x"712b80de", +1318 => x"bc080770", +1319 => x"80deb80b", +1320 => x"84050c5d", +1321 => x"53778c18", +1322 => x"0c748818", +1323 => x"0c768819", +1324 => x"0c768c16", +1325 => x"0cf9b739", +1326 => x"83147082", +1327 => x"2c81712b", +1328 => x"80debc08", +1329 => x"077080de", +1330 => x"b80b8405", +1331 => x"0c5e5153", +1332 => x"d4397b7b", +1333 => x"065372fc", +1334 => x"a338841a", +1335 => x"7b105c5a", +1336 => x"f139ff1a", +1337 => x"8111515a", +1338 => x"f7b93978", +1339 => x"17798107", +1340 => x"84190c8c", +1341 => x"18088819", +1342 => x"08718c12", +1343 => x"0c88120c", +1344 => x"597080de", +1345 => x"cc0c7080", +1346 => x"dec80c80", +1347 => x"dec00b8c", +1348 => x"120c8c11", +1349 => x"0888120c", +1350 => x"74810784", +1351 => x"120c7411", +1352 => x"75710c51", +1353 => x"53f9bd39", +1354 => x"75178411", +1355 => x"08810784", +1356 => x"120c538c", +1357 => x"17088818", +1358 => x"08718c12", +1359 => x"0c88120c", +1360 => x"587d5183", +1361 => x"bc3f8817", +1362 => x"54f5cf39", +1363 => x"7284150c", +1364 => x"f41af806", +1365 => x"70841e08", +1366 => x"81060784", +1367 => x"1e0c701d", +1368 => x"545b850b", +1369 => x"84140c85", +1370 => x"0b88140c", +1371 => x"8f7b27fd", +1372 => x"cf38881c", +1373 => x"527d5193", +1374 => x"e73f80de", +1375 => x"b80b8805", +1376 => x"0880ddfc", +1377 => x"085955fd", +1378 => x"b7397780", +1379 => x"ddfc0c73", +1380 => x"80deac0c", +1381 => x"fc913972", +1382 => x"84150cfd", +1383 => x"a339fa3d", +1384 => x"0d7a7902", +1385 => x"8805a705", +1386 => x"33565253", +1387 => x"8373278a", +1388 => x"38708306", +1389 => x"5271802e", +1390 => x"a838ff13", +1391 => x"5372ff2e", +1392 => x"97387033", +1393 => x"5273722e", +1394 => x"91388111", +1395 => x"ff145451", +1396 => x"72ff2e09", +1397 => x"8106eb38", +1398 => x"80517080", +1399 => x"0c883d0d", +1400 => x"04707257", +1401 => x"55835175", +1402 => x"82802914", +1403 => x"ff125256", +1404 => x"708025f3", +1405 => x"38837327", +1406 => x"bf387408", +1407 => x"76327009", +1408 => x"f7fbfdff", +1409 => x"120670f8", +1410 => x"84828180", +1411 => x"06515151", +1412 => x"70802e99", +1413 => x"38745180", +1414 => x"52703357", +1415 => x"73772eff", +1416 => x"b9388111", +1417 => x"81135351", +1418 => x"837227ed", +1419 => x"38fc1384", +1420 => x"16565372", +1421 => x"8326c338", +1422 => x"7451fefe", +1423 => x"39fa3d0d", +1424 => x"787a7c72", +1425 => x"72725757", +1426 => x"57595656", +1427 => x"747627b2", +1428 => x"38761551", +1429 => x"757127aa", +1430 => x"38707717", +1431 => x"ff145455", +1432 => x"5371ff2e", +1433 => x"9638ff14", +1434 => x"ff145454", +1435 => x"72337434", +1436 => x"ff125271", +1437 => x"ff2e0981", +1438 => x"06ec3875", +1439 => x"800c883d", +1440 => x"0d04768f", +1441 => x"269738ff", +1442 => x"125271ff", +1443 => x"2eed3872", +1444 => x"70810554", +1445 => x"33747081", +1446 => x"055634eb", +1447 => x"39747607", +1448 => x"83065170", +1449 => x"e2387575", +1450 => x"54517270", +1451 => x"84055408", +1452 => x"71708405", +1453 => x"530c7270", +1454 => x"84055408", +1455 => x"71708405", +1456 => x"530c7270", +1457 => x"84055408", +1458 => x"71708405", +1459 => x"530c7270", +1460 => x"84055408", +1461 => x"71708405", +1462 => x"530cf012", +1463 => x"52718f26", +1464 => x"c9388372", +1465 => x"27953872", +1466 => x"70840554", +1467 => x"08717084", +1468 => x"05530cfc", +1469 => x"12527183", +1470 => x"26ed3870", +1471 => x"54ff8839", +1472 => x"0404ef3d", +1473 => x"0d636567", +1474 => x"405d427b", +1475 => x"802e84f9", +1476 => x"386151ec", +1477 => x"3ff81c70", +1478 => x"84120870", +1479 => x"fc067062", +1480 => x"8b0570f8", +1481 => x"06415945", +1482 => x"5b5c4157", +1483 => x"96742782", +1484 => x"c338807b", +1485 => x"247e7c26", +1486 => x"07598054", +1487 => x"78742e09", +1488 => x"810682a9", +1489 => x"38777b25", +1490 => x"81fc3877", +1491 => x"1780deb8", +1492 => x"0b880508", +1493 => x"5e567c76", +1494 => x"2e84bd38", +1495 => x"84160870", +1496 => x"fe061784", +1497 => x"11088106", +1498 => x"51555573", +1499 => x"828b3874", +1500 => x"fc06597c", +1501 => x"762e84dd", +1502 => x"3877195f", +1503 => x"7e7b2581", +1504 => x"fd387981", +1505 => x"06547382", +1506 => x"bf387677", +1507 => x"08318411", +1508 => x"08fc0656", +1509 => x"5a75802e", +1510 => x"91387c76", +1511 => x"2e84ea38", +1512 => x"74191859", +1513 => x"787b2584", +1514 => x"89387980", +1515 => x"2e829938", +1516 => x"7715567a", +1517 => x"76248290", +1518 => x"388c1a08", +1519 => x"881b0871", +1520 => x"8c120c88", +1521 => x"120c5579", +1522 => x"76595788", +1523 => x"1761fc05", +1524 => x"575975a4", +1525 => x"2685ef38", +1526 => x"7b795555", +1527 => x"93762780", +1528 => x"c9387b70", +1529 => x"84055d08", +1530 => x"7c56790c", +1531 => x"74708405", +1532 => x"56088c18", +1533 => x"0c901754", +1534 => x"9b7627ae", +1535 => x"38747084", +1536 => x"05560874", +1537 => x"0c747084", +1538 => x"05560894", +1539 => x"180c9817", +1540 => x"54a37627", +1541 => x"95387470", +1542 => x"84055608", +1543 => x"740c7470", +1544 => x"84055608", +1545 => x"9c180ca0", +1546 => x"17547470", +1547 => x"84055608", +1548 => x"74708405", +1549 => x"560c7470", +1550 => x"84055608", +1551 => x"74708405", +1552 => x"560c7408", +1553 => x"740c777b", +1554 => x"3156758f", +1555 => x"2680c938", +1556 => x"84170881", +1557 => x"06780784", +1558 => x"180c7717", +1559 => x"84110881", +1560 => x"0784120c", +1561 => x"546151fd", +1562 => x"983f8817", +1563 => x"5473800c", +1564 => x"933d0d04", +1565 => x"905bfdba", +1566 => x"397856fe", +1567 => x"85398c16", +1568 => x"08881708", +1569 => x"718c120c", +1570 => x"88120c55", +1571 => x"7e707c31", +1572 => x"57588f76", +1573 => x"27ffb938", +1574 => x"7a178418", +1575 => x"0881067c", +1576 => x"0784190c", +1577 => x"76810784", +1578 => x"120c7611", +1579 => x"84110881", +1580 => x"0784120c", +1581 => x"55880552", +1582 => x"61518da4", +1583 => x"3f6151fc", +1584 => x"c03f8817", +1585 => x"54ffa639", +1586 => x"7d526151", +1587 => x"edda3f80", +1588 => x"08598008", +1589 => x"802e81a3", +1590 => x"388008f8", +1591 => x"05608405", +1592 => x"08fe0661", +1593 => x"05555776", +1594 => x"742e83e6", +1595 => x"38fc1856", +1596 => x"75a42681", +1597 => x"aa387b80", +1598 => x"08555593", +1599 => x"762780d8", +1600 => x"38747084", +1601 => x"05560880", +1602 => x"08708405", +1603 => x"800c0c80", +1604 => x"08757084", +1605 => x"05570871", +1606 => x"70840553", +1607 => x"0c549b76", +1608 => x"27b63874", +1609 => x"70840556", +1610 => x"08747084", +1611 => x"05560c74", +1612 => x"70840556", +1613 => x"08747084", +1614 => x"05560ca3", +1615 => x"76279938", +1616 => x"74708405", +1617 => x"56087470", +1618 => x"8405560c", +1619 => x"74708405", +1620 => x"56087470", +1621 => x"8405560c", +1622 => x"74708405", +1623 => x"56087470", +1624 => x"8405560c", +1625 => x"74708405", +1626 => x"56087470", +1627 => x"8405560c", +1628 => x"7408740c", +1629 => x"7b526151", +1630 => x"8be63f61", +1631 => x"51fb823f", +1632 => x"78547380", +1633 => x"0c933d0d", +1634 => x"047d5261", +1635 => x"51ec993f", +1636 => x"8008800c", +1637 => x"933d0d04", +1638 => x"84160855", +1639 => x"fbd13975", +1640 => x"537b5280", +1641 => x"0851dfde", +1642 => x"3f7b5261", +1643 => x"518bb13f", +1644 => x"ca398c16", +1645 => x"08881708", +1646 => x"718c120c", +1647 => x"88120c55", +1648 => x"8c1a0888", +1649 => x"1b08718c", +1650 => x"120c8812", +1651 => x"0c557979", +1652 => x"5957fbf7", +1653 => x"39771990", +1654 => x"1c555573", +1655 => x"7524fba2", +1656 => x"387a1770", +1657 => x"80deb80b", +1658 => x"88050c75", +1659 => x"7c318107", +1660 => x"84120c5d", +1661 => x"84170881", +1662 => x"067b0784", +1663 => x"180c6151", +1664 => x"f9ff3f88", +1665 => x"1754fce5", +1666 => x"39741918", +1667 => x"901c555d", +1668 => x"737d24fb", +1669 => x"95388c1a", +1670 => x"08881b08", +1671 => x"718c120c", +1672 => x"88120c55", +1673 => x"881a61fc", +1674 => x"05575975", +1675 => x"a42681ae", +1676 => x"387b7955", +1677 => x"55937627", +1678 => x"80c9387b", +1679 => x"7084055d", +1680 => x"087c5679", +1681 => x"0c747084", +1682 => x"0556088c", +1683 => x"1b0c901a", +1684 => x"549b7627", +1685 => x"ae387470", +1686 => x"84055608", +1687 => x"740c7470", +1688 => x"84055608", +1689 => x"941b0c98", +1690 => x"1a54a376", +1691 => x"27953874", +1692 => x"70840556", +1693 => x"08740c74", +1694 => x"70840556", +1695 => x"089c1b0c", +1696 => x"a01a5474", +1697 => x"70840556", +1698 => x"08747084", +1699 => x"05560c74", +1700 => x"70840556", +1701 => x"08747084", +1702 => x"05560c74", +1703 => x"08740c7a", +1704 => x"1a7080de", +1705 => x"b80b8805", +1706 => x"0c7d7c31", +1707 => x"81078412", +1708 => x"0c54841a", +1709 => x"0881067b", +1710 => x"07841b0c", +1711 => x"6151f8c1", +1712 => x"3f7854fd", +1713 => x"bd397553", +1714 => x"7b527851", +1715 => x"ddb83ffa", +1716 => x"f5398417", +1717 => x"08fc0618", +1718 => x"605858fa", +1719 => x"e9397553", +1720 => x"7b527851", +1721 => x"dda03f7a", +1722 => x"1a7080de", +1723 => x"b80b8805", +1724 => x"0c7d7c31", +1725 => x"81078412", +1726 => x"0c54841a", +1727 => x"0881067b", +1728 => x"07841b0c", +1729 => x"ffb63970", +1730 => x"70707080", +1731 => x"0b80e780", +1732 => x"0c765196", +1733 => x"cc3f8008", +1734 => x"538008ff", +1735 => x"2e893872", +1736 => x"800c5050", +1737 => x"50500480", +1738 => x"e7800854", +1739 => x"73802eef", +1740 => x"38757471", +1741 => x"0c527280", +1742 => x"0c505050", +1743 => x"5004fa3d", +1744 => x"0d7880d6", +1745 => x"fc085455", +1746 => x"b8130880", +1747 => x"2e81b638", +1748 => x"8c152270", +1749 => x"83ffff06", +1750 => x"70832a81", +1751 => x"32708106", +1752 => x"51555556", +1753 => x"72802e80", +1754 => x"dc387384", +1755 => x"2a813281", +1756 => x"0657ff53", +1757 => x"7680f738", +1758 => x"73822a70", +1759 => x"81065153", +1760 => x"72802eb9", +1761 => x"38b01508", +1762 => x"5473802e", +1763 => x"9c3880c0", +1764 => x"15537373", +1765 => x"2e8f3873", +1766 => x"5280d6fc", +1767 => x"085187c0", +1768 => x"3f8c1522", +1769 => x"5676b016", +1770 => x"0c75db06", +1771 => x"53728c16", +1772 => x"23800b84", +1773 => x"160c9015", +1774 => x"08750c72", +1775 => x"56758807", +1776 => x"53728c16", +1777 => x"23901508", +1778 => x"802e80c1", +1779 => x"388c1522", +1780 => x"70810655", +1781 => x"53739e38", +1782 => x"720a100a", +1783 => x"70810651", +1784 => x"53728538", +1785 => x"94150854", +1786 => x"7388160c", +1787 => x"80537280", +1788 => x"0c883d0d", +1789 => x"04800b88", +1790 => x"160c9415", +1791 => x"08309816", +1792 => x"0c8053ea", +1793 => x"39725182", +1794 => x"f73ffec4", +1795 => x"3974518c", +1796 => x"de3f8c15", +1797 => x"22708106", +1798 => x"55537380", +1799 => x"2effb938", +1800 => x"d439f83d", +1801 => x"0d7a5877", +1802 => x"802e8199", +1803 => x"3880d6fc", +1804 => x"0854b814", +1805 => x"08802e80", +1806 => x"ed388c18", +1807 => x"2270902b", +1808 => x"70902c70", +1809 => x"832a8132", +1810 => x"81065c51", +1811 => x"57547880", +1812 => x"cd389018", +1813 => x"08577680", +1814 => x"2e80c338", +1815 => x"77087731", +1816 => x"77790c76", +1817 => x"83067a58", +1818 => x"55557385", +1819 => x"38941808", +1820 => x"56758819", +1821 => x"0c807525", +1822 => x"a5387453", +1823 => x"76529c18", +1824 => x"0851a418", +1825 => x"0854732d", +1826 => x"800b8008", +1827 => x"2580c938", +1828 => x"80081775", +1829 => x"80083156", +1830 => x"57748024", +1831 => x"dd38800b", +1832 => x"800c8a3d", +1833 => x"0d047351", +1834 => x"81d63f8c", +1835 => x"18227090", +1836 => x"2b70902c", +1837 => x"70832a81", +1838 => x"3281065c", +1839 => x"51575478", +1840 => x"dd38ff8e", +1841 => x"39b8a252", +1842 => x"80d6fc08", +1843 => x"5189e73f", +1844 => x"8008800c", +1845 => x"8a3d0d04", +1846 => x"8c182280", +1847 => x"c0075473", +1848 => x"8c1923ff", +1849 => x"0b800c8a", +1850 => x"3d0d0470", +1851 => x"72518071", +1852 => x"0c800b84", +1853 => x"120c800b", +1854 => x"88120c02", +1855 => x"8e05228c", +1856 => x"12230292", +1857 => x"05228e12", +1858 => x"23800b90", +1859 => x"120c800b", +1860 => x"94120c80", +1861 => x"0b98120c", +1862 => x"709c120c", +1863 => x"80c8810b", +1864 => x"a0120c80", +1865 => x"c8cd0ba4", +1866 => x"120c80c9", +1867 => x"c90ba812", +1868 => x"0c80ca9a", +1869 => x"0bac120c", +1870 => x"5004fa3d", +1871 => x"0d797080", +1872 => x"dc298c11", +1873 => x"547a5356", +1874 => x"57e4dd3f", +1875 => x"80088008", +1876 => x"55568008", +1877 => x"802ea238", +1878 => x"80088c05", +1879 => x"54800b80", +1880 => x"080c7680", +1881 => x"0884050c", +1882 => x"73800888", +1883 => x"050c7453", +1884 => x"80527351", +1885 => x"8bfc3f75", +1886 => x"5473800c", +1887 => x"883d0d04", +1888 => x"fc3d0d76", +1889 => x"bd930bbc", +1890 => x"120c5581", +1891 => x"0bb8160c", +1892 => x"800b84dc", +1893 => x"160c830b", +1894 => x"84e0160c", +1895 => x"84e81584", +1896 => x"e4160c74", +1897 => x"54805384", +1898 => x"52841508", +1899 => x"51febc3f", +1900 => x"74548153", +1901 => x"89528815", +1902 => x"0851feaf", +1903 => x"3f745482", +1904 => x"538a528c", +1905 => x"150851fe", +1906 => x"a23f863d", +1907 => x"0d04f93d", +1908 => x"0d7980d6", +1909 => x"fc085457", +1910 => x"b8130880", +1911 => x"2e80c838", +1912 => x"84dc1356", +1913 => x"88160884", +1914 => x"1708ff05", +1915 => x"55558074", +1916 => x"249f388c", +1917 => x"15227090", +1918 => x"2b70902c", +1919 => x"51545872", +1920 => x"802e80ca", +1921 => x"3880dc15", +1922 => x"ff155555", +1923 => x"738025e3", +1924 => x"38750853", +1925 => x"72802e9f", +1926 => x"38725688", +1927 => x"16088417", +1928 => x"08ff0555", +1929 => x"55c83972", +1930 => x"51fed53f", +1931 => x"80d6fc08", +1932 => x"84dc0556", +1933 => x"ffae3984", +1934 => x"527651fd", +1935 => x"fd3f8008", +1936 => x"760c8008", +1937 => x"802e80c0", +1938 => x"38800856", +1939 => x"ce39810b", +1940 => x"8c162372", +1941 => x"750c7288", +1942 => x"160c7284", +1943 => x"160c7290", +1944 => x"160c7294", +1945 => x"160c7298", +1946 => x"160cff0b", +1947 => x"8e162372", +1948 => x"b0160c72", +1949 => x"b4160c72", +1950 => x"80c4160c", +1951 => x"7280c816", +1952 => x"0c74800c", +1953 => x"893d0d04", +1954 => x"8c770c80", +1955 => x"0b800c89", +1956 => x"3d0d0470", +1957 => x"70b8a252", +1958 => x"7351869a", +1959 => x"3f505004", +1960 => x"7080d6fc", +1961 => x"0851ec3f", +1962 => x"5004fb3d", +1963 => x"0d777052", +1964 => x"56f0cd3f", +1965 => x"80deb80b", +1966 => x"88050884", +1967 => x"1108fc06", +1968 => x"707b319f", +1969 => x"ef05e080", +1970 => x"06e08005", +1971 => x"565653a0", +1972 => x"80742494", +1973 => x"38805275", +1974 => x"51f8ac3f", +1975 => x"80dec008", +1976 => x"15537280", +1977 => x"082e8f38", +1978 => x"7551f095", +1979 => x"3f805372", +1980 => x"800c873d", +1981 => x"0d047330", +1982 => x"527551f8", +1983 => x"8a3f8008", +1984 => x"ff2ea838", +1985 => x"80deb80b", +1986 => x"88050875", +1987 => x"75318107", +1988 => x"84120c53", +1989 => x"80ddfc08", +1990 => x"743180dd", +1991 => x"fc0c7551", +1992 => x"efdf3f81", +1993 => x"0b800c87", +1994 => x"3d0d0480", +1995 => x"527551f7", +1996 => x"d63f80de", +1997 => x"b80b8805", +1998 => x"08800871", +1999 => x"3156538f", +2000 => x"7525ffa4", +2001 => x"38800880", +2002 => x"deac0831", +2003 => x"80ddfc0c", +2004 => x"74810784", +2005 => x"140c7551", +2006 => x"efa73f80", +2007 => x"53ff9039", +2008 => x"f63d0d7c", +2009 => x"7e545b72", +2010 => x"802e8283", +2011 => x"387a51ef", +2012 => x"8f3ff813", +2013 => x"84110870", +2014 => x"fe067013", +2015 => x"841108fc", +2016 => x"065d5859", +2017 => x"545880de", +2018 => x"c008752e", +2019 => x"82de3878", +2020 => x"84160c80", +2021 => x"73810654", +2022 => x"5a727a2e", +2023 => x"81d53878", +2024 => x"15841108", +2025 => x"81065153", +2026 => x"72a03878", +2027 => x"17577981", +2028 => x"e6388815", +2029 => x"08537280", +2030 => x"dec02e82", +2031 => x"f9388c15", +2032 => x"08708c15", +2033 => x"0c738812", +2034 => x"0c567681", +2035 => x"0784190c", +2036 => x"76187771", +2037 => x"0c537981", +2038 => x"913883ff", +2039 => x"772781c8", +2040 => x"3876892a", +2041 => x"77832a56", +2042 => x"5372802e", +2043 => x"bf387686", +2044 => x"2ab80555", +2045 => x"847327b4", +2046 => x"3880db13", +2047 => x"55947327", +2048 => x"ab38768c", +2049 => x"2a80ee05", +2050 => x"5580d473", +2051 => x"279e3876", +2052 => x"8f2a80f7", +2053 => x"055582d4", +2054 => x"73279138", +2055 => x"76922a80", +2056 => x"fc05558a", +2057 => x"d4732784", +2058 => x"3880fe55", +2059 => x"74101010", +2060 => x"80deb805", +2061 => x"88110855", +2062 => x"5673762e", +2063 => x"82b33884", +2064 => x"1408fc06", +2065 => x"53767327", +2066 => x"8d388814", +2067 => x"08547376", +2068 => x"2e098106", +2069 => x"ea388c14", +2070 => x"08708c1a", +2071 => x"0c74881a", +2072 => x"0c788812", +2073 => x"0c56778c", +2074 => x"150c7a51", +2075 => x"ed933f8c", +2076 => x"3d0d0477", +2077 => x"08787131", +2078 => x"59770588", +2079 => x"19085457", +2080 => x"7280dec0", +2081 => x"2e80e038", +2082 => x"8c180870", +2083 => x"8c150c73", +2084 => x"88120c56", +2085 => x"fe893988", +2086 => x"15088c16", +2087 => x"08708c13", +2088 => x"0c578817", +2089 => x"0cfea339", +2090 => x"76832a70", +2091 => x"54558075", +2092 => x"24819838", +2093 => x"72822c81", +2094 => x"712b80de", +2095 => x"bc080780", +2096 => x"deb80b84", +2097 => x"050c5374", +2098 => x"10101080", +2099 => x"deb80588", +2100 => x"11085556", +2101 => x"758c190c", +2102 => x"7388190c", +2103 => x"7788170c", +2104 => x"778c150c", +2105 => x"ff843981", +2106 => x"5afdb439", +2107 => x"78177381", +2108 => x"06545772", +2109 => x"98387708", +2110 => x"78713159", +2111 => x"77058c19", +2112 => x"08881a08", +2113 => x"718c120c", +2114 => x"88120c57", +2115 => x"57768107", +2116 => x"84190c77", +2117 => x"80deb80b", +2118 => x"88050c80", +2119 => x"deb40877", +2120 => x"26fec738", +2121 => x"80deb008", +2122 => x"527a51fa", +2123 => x"fd3f7a51", +2124 => x"ebcf3ffe", +2125 => x"ba398178", +2126 => x"8c150c78", +2127 => x"88150c73", +2128 => x"8c1a0c73", +2129 => x"881a0c5a", +2130 => x"fd803983", +2131 => x"1570822c", +2132 => x"81712b80", +2133 => x"debc0807", +2134 => x"80deb80b", +2135 => x"84050c51", +2136 => x"53741010", +2137 => x"1080deb8", +2138 => x"05881108", +2139 => x"5556fee4", +2140 => x"39745380", +2141 => x"7524a738", +2142 => x"72822c81", +2143 => x"712b80de", +2144 => x"bc080780", +2145 => x"deb80b84", +2146 => x"050c5375", +2147 => x"8c190c73", +2148 => x"88190c77", +2149 => x"88170c77", +2150 => x"8c150cfd", +2151 => x"cd398315", +2152 => x"70822c81", +2153 => x"712b80de", +2154 => x"bc080780", +2155 => x"deb80b84", +2156 => x"050c5153", +2157 => x"d639f93d", +2158 => x"0d797b58", +2159 => x"53800b80", +2160 => x"d6fc0853", +2161 => x"5672722e", +2162 => x"80c03884", +2163 => x"dc135574", +2164 => x"762eb738", +2165 => x"88150884", +2166 => x"1608ff05", +2167 => x"54548073", +2168 => x"249d388c", +2169 => x"14227090", +2170 => x"2b70902c", +2171 => x"51535871", +2172 => x"80d83880", +2173 => x"dc14ff14", +2174 => x"54547280", +2175 => x"25e53874", +2176 => x"085574d0", +2177 => x"3880d6fc", +2178 => x"085284dc", +2179 => x"12557480", +2180 => x"2eb13888", +2181 => x"15088416", +2182 => x"08ff0554", +2183 => x"54807324", +2184 => x"9c388c14", +2185 => x"2270902b", +2186 => x"70902c51", +2187 => x"535871ad", +2188 => x"3880dc14", +2189 => x"ff145454", +2190 => x"728025e6", +2191 => x"38740855", +2192 => x"74d13875", +2193 => x"800c893d", +2194 => x"0d047351", +2195 => x"762d7580", +2196 => x"080780dc", +2197 => x"15ff1555", +2198 => x"5556ff9e", +2199 => x"39735176", +2200 => x"2d758008", +2201 => x"0780dc15", +2202 => x"ff155555", +2203 => x"56ca39ea", +2204 => x"3d0d688c", +2205 => x"1122700a", +2206 => x"100a8106", +2207 => x"57585674", +2208 => x"80e4388e", +2209 => x"16227090", +2210 => x"2b70902c", +2211 => x"51555880", +2212 => x"7424b138", +2213 => x"983dc405", +2214 => x"53735280", +2215 => x"d6fc0851", +2216 => x"86833f80", +2217 => x"0b800824", +2218 => x"97387983", +2219 => x"e0800654", +2220 => x"7380c080", +2221 => x"2e818f38", +2222 => x"73828080", +2223 => x"2e819138", +2224 => x"8c162257", +2225 => x"76908007", +2226 => x"54738c17", +2227 => x"23888052", +2228 => x"80d6fc08", +2229 => x"51d9d13f", +2230 => x"80089d38", +2231 => x"8c162282", +2232 => x"0754738c", +2233 => x"172380c3", +2234 => x"1670770c", +2235 => x"90170c81", +2236 => x"0b94170c", +2237 => x"983d0d04", +2238 => x"80d6fc08", +2239 => x"bd930bbc", +2240 => x"120c548c", +2241 => x"16228180", +2242 => x"0754738c", +2243 => x"17238008", +2244 => x"760c8008", +2245 => x"90170c88", +2246 => x"800b9417", +2247 => x"0c74802e", +2248 => x"d3388e16", +2249 => x"2270902b", +2250 => x"70902c53", +2251 => x"55588df3", +2252 => x"3f800880", +2253 => x"2effbd38", +2254 => x"8c162281", +2255 => x"0754738c", +2256 => x"1723983d", +2257 => x"0d04810b", +2258 => x"8c172258", +2259 => x"55fef539", +2260 => x"a8160880", +2261 => x"c9c92e09", +2262 => x"8106fee4", +2263 => x"388c1622", +2264 => x"88800754", +2265 => x"738c1723", +2266 => x"88800b80", +2267 => x"cc170cfe", +2268 => x"dc39fc3d", +2269 => x"0d767971", +2270 => x"028c059f", +2271 => x"05335755", +2272 => x"53558372", +2273 => x"278a3874", +2274 => x"83065170", +2275 => x"802ea238", +2276 => x"ff125271", +2277 => x"ff2e9338", +2278 => x"73737081", +2279 => x"055534ff", +2280 => x"125271ff", +2281 => x"2e098106", +2282 => x"ef387480", +2283 => x"0c863d0d", +2284 => x"04747488", +2285 => x"2b750770", +2286 => x"71902b07", +2287 => x"5154518f", +2288 => x"7227a538", +2289 => x"72717084", +2290 => x"05530c72", +2291 => x"71708405", +2292 => x"530c7271", +2293 => x"70840553", +2294 => x"0c727170", +2295 => x"8405530c", +2296 => x"f0125271", +2297 => x"8f26dd38", +2298 => x"83722790", +2299 => x"38727170", +2300 => x"8405530c", +2301 => x"fc125271", +2302 => x"8326f238", +2303 => x"7053ff90", +2304 => x"39f93d0d", +2305 => x"797c557b", +2306 => x"548e1122", +2307 => x"70902b70", +2308 => x"902c5557", +2309 => x"80d6fc08", +2310 => x"53585683", +2311 => x"f63f8008", +2312 => x"57800b80", +2313 => x"08249338", +2314 => x"80d01608", +2315 => x"80080580", +2316 => x"d0170c76", +2317 => x"800c893d", +2318 => x"0d048c16", +2319 => x"2283dfff", +2320 => x"0655748c", +2321 => x"17237680", +2322 => x"0c893d0d", +2323 => x"04fa3d0d", +2324 => x"788c1122", +2325 => x"70882a70", +2326 => x"81065157", +2327 => x"585674a9", +2328 => x"388c1622", +2329 => x"83dfff06", +2330 => x"55748c17", +2331 => x"237a5479", +2332 => x"538e1622", +2333 => x"70902b70", +2334 => x"902c5456", +2335 => x"80d6fc08", +2336 => x"525681b2", +2337 => x"3f883d0d", +2338 => x"04825480", +2339 => x"538e1622", +2340 => x"70902b70", +2341 => x"902c5456", +2342 => x"80d6fc08", +2343 => x"525782bb", +2344 => x"3f8c1622", +2345 => x"83dfff06", +2346 => x"55748c17", +2347 => x"237a5479", +2348 => x"538e1622", +2349 => x"70902b70", +2350 => x"902c5456", +2351 => x"80d6fc08", +2352 => x"525680f2", +2353 => x"3f883d0d", +2354 => x"04f93d0d", +2355 => x"797c557b", +2356 => x"548e1122", +2357 => x"70902b70", +2358 => x"902c5557", +2359 => x"80d6fc08", +2360 => x"53585681", +2361 => x"f63f8008", +2362 => x"578008ff", +2363 => x"2e99388c", +2364 => x"1622a080", +2365 => x"0755748c", +2366 => x"17238008", +2367 => x"80d0170c", +2368 => x"76800c89", +2369 => x"3d0d048c", +2370 => x"162283df", +2371 => x"ff065574", +2372 => x"8c172376", +2373 => x"800c893d", +2374 => x"0d047070", +2375 => x"70748e11", +2376 => x"2270902b", +2377 => x"70902c55", +2378 => x"51515380", +2379 => x"d6fc0851", +2380 => x"bd3f5050", +2381 => x"5004fb3d", +2382 => x"0d800b80", +2383 => x"e7800c7a", +2384 => x"53795278", +2385 => x"51839c3f", +2386 => x"80085580", +2387 => x"08ff2e88", +2388 => x"3874800c", +2389 => x"873d0d04", +2390 => x"80e78008", +2391 => x"5675802e", +2392 => x"f0387776", +2393 => x"710c5474", +2394 => x"800c873d", +2395 => x"0d047070", +2396 => x"7070800b", +2397 => x"80e7800c", +2398 => x"765185a4", +2399 => x"3f800853", +2400 => x"8008ff2e", +2401 => x"89387280", +2402 => x"0c505050", +2403 => x"500480e7", +2404 => x"80085473", +2405 => x"802eef38", +2406 => x"7574710c", +2407 => x"5272800c", +2408 => x"50505050", +2409 => x"04fc3d0d", +2410 => x"800b80e7", +2411 => x"800c7852", +2412 => x"775187d4", +2413 => x"3f800854", +2414 => x"8008ff2e", +2415 => x"88387380", +2416 => x"0c863d0d", +2417 => x"0480e780", +2418 => x"08557480", +2419 => x"2ef03876", +2420 => x"75710c53", +2421 => x"73800c86", +2422 => x"3d0d04fb", +2423 => x"3d0d800b", +2424 => x"80e7800c", +2425 => x"7a537952", +2426 => x"785185b0", +2427 => x"3f800855", +2428 => x"8008ff2e", +2429 => x"88387480", +2430 => x"0c873d0d", +2431 => x"0480e780", +2432 => x"08567580", +2433 => x"2ef03877", +2434 => x"76710c54", +2435 => x"74800c87", +2436 => x"3d0d04fb", +2437 => x"3d0d800b", +2438 => x"80e7800c", +2439 => x"7a537952", +2440 => x"785182b7", +2441 => x"3f800855", +2442 => x"8008ff2e", +2443 => x"88387480", +2444 => x"0c873d0d", +2445 => x"0480e780", +2446 => x"08567580", +2447 => x"2ef03877", +2448 => x"76710c54", +2449 => x"74800c87", +2450 => x"3d0d0481", +2451 => x"0b800c04", +2452 => x"7072812e", +2453 => x"8738800b", +2454 => x"800c5004", +2455 => x"735180fd", +2456 => x"3f707070", +2457 => x"80e78408", +2458 => x"51708a38", +2459 => x"80e78c70", +2460 => x"80e7840c", +2461 => x"51707512", +2462 => x"5252ff53", +2463 => x"7087fb80", +2464 => x"80268838", +2465 => x"7080e784", +2466 => x"0c715372", +2467 => x"800c5050", +2468 => x"50047070", +2469 => x"7070800b", +2470 => x"80d6f008", +2471 => x"54547281", +2472 => x"2e9e3873", +2473 => x"80e7880c", +2474 => x"ffbbbe3f", +2475 => x"ffbad13f", +2476 => x"80e6c052", +2477 => x"8151ffbe", +2478 => x"913f8008", +2479 => x"51879b3f", +2480 => x"7280e788", +2481 => x"0cffbba1", +2482 => x"3fffbab4", +2483 => x"3f80e6c0", +2484 => x"528151ff", +2485 => x"bdf43f80", +2486 => x"085186fe", +2487 => x"3f00ff39", +2488 => x"00ff39f5", +2489 => x"3d0d7e60", +2490 => x"80e78808", +2491 => x"705b585b", +2492 => x"5b7580c5", +2493 => x"38777a25", +2494 => x"a238771b", +2495 => x"70337081", +2496 => x"ff065858", +2497 => x"59758a2e", +2498 => x"99387681", +2499 => x"ff0651ff", +2500 => x"bab83f81", +2501 => x"18587978", +2502 => x"24e03879", +2503 => x"800c8d3d", +2504 => x"0d048d51", +2505 => x"ffbaa33f", +2506 => x"78337081", +2507 => x"ff065257", +2508 => x"ffba973f", +2509 => x"811858de", +2510 => x"3979557a", +2511 => x"547d5385", +2512 => x"528d3dfc", +2513 => x"0551ffb9", +2514 => x"e13f8008", +2515 => x"5686843f", +2516 => x"7b80080c", +2517 => x"75800c8d", +2518 => x"3d0d04f6", +2519 => x"3d0d7d7f", +2520 => x"80e78808", +2521 => x"705a585a", +2522 => x"5a7580c4", +2523 => x"38767925", +2524 => x"b238761a", +2525 => x"56ffb9b4", +2526 => x"3f800876", +2527 => x"34800b80", +2528 => x"0881ff06", +2529 => x"5758758a", +2530 => x"2ea23875", +2531 => x"8d327030", +2532 => x"7080257a", +2533 => x"07515156", +2534 => x"75b83881", +2535 => x"17577877", +2536 => x"24d03876", +2537 => x"5675800c", +2538 => x"8c3d0d04", +2539 => x"8158dc39", +2540 => x"78557954", +2541 => x"7c538452", +2542 => x"8c3dfc05", +2543 => x"51ffb8ea", +2544 => x"3f800856", +2545 => x"858d3f7a", +2546 => x"80080c75", +2547 => x"800c8c3d", +2548 => x"0d048117", +2549 => x"56cf39f9", +2550 => x"3d0d7957", +2551 => x"80e78808", +2552 => x"802ead38", +2553 => x"7651c8f8", +2554 => x"3f7b567a", +2555 => x"55800881", +2556 => x"05547653", +2557 => x"8252893d", +2558 => x"fc0551ff", +2559 => x"b8ac3f80", +2560 => x"085784cf", +2561 => x"3f778008", +2562 => x"0c76800c", +2563 => x"893d0d04", +2564 => x"84c13f85", +2565 => x"0b80080c", +2566 => x"ff0b800c", +2567 => x"893d0d04", +2568 => x"fb3d0d80", +2569 => x"e7880870", +2570 => x"56547388", +2571 => x"3874800c", +2572 => x"873d0d04", +2573 => x"77538352", +2574 => x"873dfc05", +2575 => x"51ffb7ea", +2576 => x"3f800854", +2577 => x"848d3f75", +2578 => x"80080c73", +2579 => x"800c873d", +2580 => x"0d04ff0b", +2581 => x"800c04fb", +2582 => x"3d0d7755", +2583 => x"80e78808", +2584 => x"802ea938", +2585 => x"7451c7f8", +2586 => x"3f800881", +2587 => x"05547453", +2588 => x"8752873d", +2589 => x"fc0551ff", +2590 => x"b7b03f80", +2591 => x"085583d3", +2592 => x"3f758008", +2593 => x"0c74800c", +2594 => x"873d0d04", +2595 => x"83c53f85", +2596 => x"0b80080c", +2597 => x"ff0b800c", +2598 => x"873d0d04", +2599 => x"fa3d0d80", +2600 => x"e7880880", +2601 => x"2ea3387a", +2602 => x"55795478", +2603 => x"53865288", +2604 => x"3dfc0551", +2605 => x"ffb6f33f", +2606 => x"80085683", +2607 => x"963f7680", +2608 => x"080c7580", +2609 => x"0c883d0d", +2610 => x"0483883f", +2611 => x"9d0b8008", +2612 => x"0cff0b80", +2613 => x"0c883d0d", +2614 => x"04fb3d0d", +2615 => x"77795656", +2616 => x"80705454", +2617 => x"7375259f", +2618 => x"38741010", +2619 => x"10f80552", +2620 => x"72167033", +2621 => x"70742b76", +2622 => x"078116f8", +2623 => x"16565656", +2624 => x"51517473", +2625 => x"24ea3873", +2626 => x"800c873d", +2627 => x"0d04fc3d", +2628 => x"0d767855", +2629 => x"55bc5380", +2630 => x"527351f4", +2631 => x"d53f8452", +2632 => x"7451ffb5", +2633 => x"3f800874", +2634 => x"23845284", +2635 => x"1551ffa9", +2636 => x"3f800882", +2637 => x"15238452", +2638 => x"881551ff", +2639 => x"9c3f8008", +2640 => x"84150c84", +2641 => x"528c1551", +2642 => x"ff8f3f80", +2643 => x"08881523", +2644 => x"84529015", +2645 => x"51ff823f", +2646 => x"80088a15", +2647 => x"23845294", +2648 => x"1551fef5", +2649 => x"3f80088c", +2650 => x"15238452", +2651 => x"981551fe", +2652 => x"e83f8008", +2653 => x"8e152388", +2654 => x"529c1551", +2655 => x"fedb3f80", +2656 => x"0890150c", +2657 => x"863d0d04", +2658 => x"e93d0d6a", +2659 => x"80e78808", +2660 => x"57577593", +2661 => x"3880c080", +2662 => x"0b84180c", +2663 => x"75ac180c", +2664 => x"75800c99", +2665 => x"3d0d0489", +2666 => x"3d70556a", +2667 => x"54558a52", +2668 => x"993dffbc", +2669 => x"0551ffb4", +2670 => x"f13f8008", +2671 => x"77537552", +2672 => x"56fecb3f", +2673 => x"818d3f77", +2674 => x"80080c75", +2675 => x"800c993d", +2676 => x"0d04e93d", +2677 => x"0d695780", +2678 => x"e7880880", +2679 => x"2eb63876", +2680 => x"51c4fd3f", +2681 => x"893d7056", +2682 => x"80088105", +2683 => x"55775456", +2684 => x"8f52993d", +2685 => x"ffbc0551", +2686 => x"ffb4af3f", +2687 => x"80086b53", +2688 => x"765257fe", +2689 => x"893f80cb", +2690 => x"3f778008", +2691 => x"0c76800c", +2692 => x"993d0d04", +2693 => x"be3f850b", +2694 => x"80080cff", +2695 => x"0b800c99", +2696 => x"3d0d04fc", +2697 => x"3d0d8154", +2698 => x"80e78808", +2699 => x"88387380", +2700 => x"0c863d0d", +2701 => x"04765397", +2702 => x"b952863d", +2703 => x"fc0551ff", +2704 => x"b3e83f80", +2705 => x"08548c3f", +2706 => x"7480080c", +2707 => x"73800c86", +2708 => x"3d0d0480", +2709 => x"d6fc0880", +2710 => x"0c04f73d", +2711 => x"0d7b80d6", +2712 => x"fc0882c8", +2713 => x"11085a54", +2714 => x"5a77802e", +2715 => x"80da3881", +2716 => x"88188419", +2717 => x"08ff0581", +2718 => x"712b5955", +2719 => x"59807424", +2720 => x"80ea3880", +2721 => x"7424b538", +2722 => x"73822b78", +2723 => x"11880556", +2724 => x"56818019", +2725 => x"08770653", +2726 => x"72802eb6", +2727 => x"38781670", +2728 => x"08535379", +2729 => x"51740853", +2730 => x"722dff14", +2731 => x"fc17fc17", +2732 => x"79812c5a", +2733 => x"57575473", +2734 => x"8025d638", +2735 => x"77085877", +2736 => x"ffad3880", +2737 => x"d6fc0853", +2738 => x"bc1308a5", +2739 => x"387951f8", +2740 => x"8c3f7408", +2741 => x"53722dff", +2742 => x"14fc17fc", +2743 => x"1779812c", +2744 => x"5a575754", +2745 => x"738025ff", +2746 => x"a838d139", +2747 => x"8057ff93", +2748 => x"397251bc", +2749 => x"13085372", +2750 => x"2d7951f7", +2751 => x"e03f7070", +2752 => x"80e6c80b", +2753 => x"fc057008", +2754 => x"525270ff", +2755 => x"2e913870", +2756 => x"2dfc1270", +2757 => x"08525270", +2758 => x"ff2e0981", +2759 => x"06f13850", +2760 => x"500404ff", +2761 => x"b4c73f04", +2762 => x"48656c6c", +2763 => x"6f20776f", +2764 => x"726c6420", +2765 => x"310a0000", +2766 => x"48656c6c", +2767 => x"6f20776f", +2768 => x"726c6420", +2769 => x"320a0000", +2770 => x"0a000000", +2771 => x"43000000", +2772 => x"64756d6d", +2773 => x"792e6578", +2774 => x"65000000", +2775 => x"00ffffff", +2776 => x"ff00ffff", +2777 => x"ffff00ff", +2778 => x"ffffff00", +2779 => x"00000000", +2780 => x"00000000", +2781 => x"00000000", +2782 => x"00003350", +2783 => x"00002b80", +2784 => x"00000000", +2785 => x"00002de8", +2786 => x"00002e44", +2787 => x"00002ea0", +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"00002b4c", +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"00000001", +2827 => x"330eabcd", +2828 => x"1234e66d", +2829 => x"deec0005", +2830 => x"000b0000", +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"00000000", +2900 => x"00000000", +2901 => x"00000000", +2902 => x"00000000", +2903 => x"00000000", +2904 => x"00000000", +2905 => x"00000000", +2906 => x"00000000", +2907 => x"00000000", +2908 => x"00000000", +2909 => x"00000000", +2910 => x"00000000", +2911 => x"00000000", +2912 => x"00000000", +2913 => x"00000000", +2914 => x"00000000", +2915 => x"00000000", +2916 => x"00000000", +2917 => x"00000000", +2918 => x"00000000", +2919 => x"00000000", +2920 => x"00000000", +2921 => x"00000000", +2922 => x"00000000", +2923 => x"00000000", +2924 => x"00000000", +2925 => x"00000000", +2926 => x"00000000", +2927 => x"00000000", +2928 => x"00000000", +2929 => x"00000000", +2930 => x"00000000", +2931 => x"00000000", +2932 => x"00000000", +2933 => x"00000000", +2934 => x"00000000", +2935 => x"00000000", +2936 => x"00000000", +2937 => x"00000000", +2938 => x"00000000", +2939 => x"00000000", +2940 => x"00000000", +2941 => x"00000000", +2942 => x"00000000", +2943 => x"00000000", +2944 => x"00000000", +2945 => x"00000000", +2946 => x"00000000", +2947 => x"00000000", +2948 => x"00000000", +2949 => x"00000000", +2950 => x"00000000", +2951 => x"00000000", +2952 => x"00000000", +2953 => x"00000000", +2954 => x"00000000", +2955 => x"00000000", +2956 => x"00000000", +2957 => x"00000000", +2958 => x"00000000", +2959 => x"00000000", +2960 => x"00000000", +2961 => x"00000000", +2962 => x"00000000", +2963 => x"00000000", +2964 => x"00000000", +2965 => x"00000000", +2966 => x"00000000", +2967 => x"00000000", +2968 => x"00000000", +2969 => x"00000000", +2970 => x"00000000", +2971 => x"00000000", +2972 => x"00000000", +2973 => x"00000000", +2974 => x"00000000", +2975 => x"00000000", +2976 => x"00000000", +2977 => x"00000000", +2978 => x"00000000", +2979 => x"00000000", +2980 => x"00000000", +2981 => x"00000000", +2982 => x"00000000", +2983 => x"00000000", +2984 => x"00000000", +2985 => x"00000000", +2986 => x"00000000", +2987 => x"00000000", +2988 => x"00000000", +2989 => x"00000000", +2990 => x"00000000", +2991 => x"00000000", +2992 => x"00000000", +2993 => x"00000000", +2994 => x"00000000", +2995 => x"00000000", +2996 => x"00000000", +2997 => x"00000000", +2998 => x"00000000", +2999 => x"00000000", +3000 => x"00000000", +3001 => x"00000000", +3002 => x"00000000", +3003 => x"00000000", +3004 => x"00000000", +3005 => x"00000000", +3006 => x"00000000", +3007 => x"00000000", +3008 => x"00000000", +3009 => x"00000000", +3010 => x"00000000", +3011 => x"00000000", +3012 => x"00000000", +3013 => x"00000000", +3014 => x"00000000", +3015 => x"00000000", +3016 => x"00000000", +3017 => x"00000000", +3018 => x"00000000", +3019 => x"ffffffff", +3020 => x"00000000", +3021 => x"00020000", +3022 => x"00000000", +3023 => x"00000000", +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"00003158", +3161 => x"00003158", +3162 => x"00003160", +3163 => x"00003160", +3164 => x"00003168", +3165 => x"00003168", +3166 => x"00003170", +3167 => x"00003170", +3168 => x"00003178", +3169 => x"00003178", +3170 => x"00003180", +3171 => x"00003180", +3172 => x"00003188", +3173 => x"00003188", +3174 => x"00003190", +3175 => x"00003190", +3176 => x"00003198", +3177 => x"00003198", +3178 => x"000031a0", +3179 => x"000031a0", +3180 => x"000031a8", +3181 => x"000031a8", +3182 => x"000031b0", +3183 => x"000031b0", +3184 => x"000031b8", +3185 => x"000031b8", +3186 => x"000031c0", +3187 => x"000031c0", +3188 => x"000031c8", +3189 => x"000031c8", +3190 => x"000031d0", +3191 => x"000031d0", +3192 => x"000031d8", +3193 => x"000031d8", +3194 => x"000031e0", +3195 => x"000031e0", +3196 => x"000031e8", +3197 => x"000031e8", +3198 => x"000031f0", +3199 => x"000031f0", +3200 => x"000031f8", +3201 => x"000031f8", +3202 => x"00003200", +3203 => x"00003200", +3204 => x"00003208", +3205 => x"00003208", +3206 => x"00003210", +3207 => x"00003210", +3208 => x"00003218", +3209 => x"00003218", +3210 => x"00003220", +3211 => x"00003220", +3212 => x"00003228", +3213 => x"00003228", +3214 => x"00003230", +3215 => x"00003230", +3216 => x"00003238", +3217 => x"00003238", +3218 => x"00003240", +3219 => x"00003240", +3220 => x"00003248", +3221 => x"00003248", +3222 => x"00003250", +3223 => x"00003250", +3224 => x"00003258", +3225 => x"00003258", +3226 => x"00003260", +3227 => x"00003260", +3228 => x"00003268", +3229 => x"00003268", +3230 => x"00003270", +3231 => x"00003270", +3232 => x"00003278", +3233 => x"00003278", +3234 => x"00003280", +3235 => x"00003280", +3236 => x"00003288", +3237 => x"00003288", +3238 => x"00003290", +3239 => x"00003290", +3240 => x"00003298", +3241 => x"00003298", +3242 => x"000032a0", +3243 => x"000032a0", +3244 => x"000032a8", +3245 => x"000032a8", +3246 => x"000032b0", +3247 => x"000032b0", +3248 => x"000032b8", +3249 => x"000032b8", +3250 => x"000032c0", +3251 => x"000032c0", +3252 => x"000032c8", +3253 => x"000032c8", +3254 => x"000032d0", +3255 => x"000032d0", +3256 => x"000032d8", +3257 => x"000032d8", +3258 => x"000032e0", +3259 => x"000032e0", +3260 => x"000032e8", +3261 => x"000032e8", +3262 => x"000032f0", +3263 => x"000032f0", +3264 => x"000032f8", +3265 => x"000032f8", +3266 => x"00003300", +3267 => x"00003300", +3268 => x"00003308", +3269 => x"00003308", +3270 => x"00003310", +3271 => x"00003310", +3272 => x"00003318", +3273 => x"00003318", +3274 => x"00003320", +3275 => x"00003320", +3276 => x"00003328", +3277 => x"00003328", +3278 => x"00003330", +3279 => x"00003330", +3280 => x"00002b50", +3281 => x"ffffffff", +3282 => x"00000000", +3283 => x"ffffffff", +3284 => x"00000000", + others => x"00000000" +); + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + 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/zpu3/src/ic300.bitgen b/zpu/hdl/zpu3/src/ic300.bitgen new file mode 100644 index 0000000..1095099 --- /dev/null +++ b/zpu/hdl/zpu3/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/zpu3/src/ic300.lso b/zpu/hdl/zpu3/src/ic300.lso new file mode 100644 index 0000000..22de730 --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300.lso @@ -0,0 +1 @@ +work diff --git a/zpu/hdl/zpu3/src/ic300.ucf b/zpu/hdl/zpu3/src/ic300.ucf new file mode 100644 index 0000000..e11357f --- /dev/null +++ b/zpu/hdl/zpu3/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" 15.6 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/zpu3/src/ic300.vhd b/zpu/hdl/zpu3/src/ic300.vhd new file mode 100644 index 0000000..a1b4f41 --- /dev/null +++ b/zpu/hdl/zpu3/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/zpu3/src/ic300_config.vhd b/zpu/hdl/zpu3/src/ic300_config.vhd new file mode 100644 index 0000000..9d3f939 --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300_config.vhd @@ -0,0 +1,20 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +package phi_config is + + constant Fpga_Global_Base : std_logic_vector(19 downto 17) := "000"; -- 0x0280.... + constant Clock_Stat_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000 + constant Testreg32_Lower_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C + constant Testreg32_Upper_Addr : std_logic_vector(3 downto 1) := "111"; -- 0x....000E + + constant Fpga_DDR_Ctrl_Base : std_logic_vector(19 downto 17) := "111"; -- 0x028E.... + constant DDR_Ctrl_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000 + constant DDR_Mode_Reg_Addr : std_logic_vector(3 downto 1) := "001"; -- 0x....0002 + + -- These are temporary test registers only! + constant DDR_Data_Reg_Addr : std_logic_vector(3 downto 1) := "100"; -- 0x....0008 + constant DDR_Addr_Reg_Addr : std_logic_vector(3 downto 1) := "101"; -- 0x....000A + constant DDR_Req_Reg_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C + +end phi_config; diff --git a/zpu/hdl/zpu3/src/ic300pkg.vhd b/zpu/hdl/zpu3/src/ic300pkg.vhd new file mode 100644 index 0000000..13da306 --- /dev/null +++ b/zpu/hdl/zpu3/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/zpu3/src/io.vhd b/zpu/hdl/zpu3/src/io.vhd new file mode 100644 index 0000000..6b50ca1 --- /dev/null +++ b/zpu/hdl/zpu3/src/io.vhd @@ -0,0 +1,95 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; +use zylin.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; + +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); + + + process(areset, clk) + begin + if (areset = '1') then + timer_we <= '0'; + busy <= '1'; + elsif (clk'event and clk = '1') then + busy <= '1'; + 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))); + busy <= '0'; + elsif addr(12)='1' then + timer_we <= '1'; + busy <= '0'; + else + report "Illegal IO write" severity failure; + end if; + + end if; + if (readEnable = '1') then + if addr=x"1001" then + read <= (0=>'1', others => '0'); -- recieve empty + busy <= '0'; + elsif addr(12)='1' then + read <= timer_read; + busy <= '0'; + elsif addr(11)='1' then + read <= ZPU_Frequency; + busy <= '0'; + else + report "Illegal IO read" severity failure; + end if; + else + read <= (others => '1'); + end if; + end if; + end process; + + +end behave; + diff --git a/zpu/hdl/zpu3/src/log.txt b/zpu/hdl/zpu3/src/log.txt new file mode 100644 index 0000000..5557b06 --- /dev/null +++ b/zpu/hdl/zpu3/src/log.txt @@ -0,0 +1,156 @@ + + + +D +h +r +y +s +t +o +n +e + +B +e +n +c +h +m +a +r +k +, + +V +e +r +s +i +o +n + +2 +. +1 + +( +L +a +n +g +u +a +g +e +: + +C +) + + + + + + +P +r +o +g +r +a +m + +c +o +m +p +i +l +e +d + +w +i +t +h +o +u +t + +' +r +e +g +i +s +t +e +r +' + +a +t +t +r +i +b +u +t +e + + + + + + +E +x +e +c +u +t +i +o +n + +s +t +a +r +t +s +, + +2 +0 +0 +0 +0 +0 + +r +u +n +s + +t +h +r +o +u +g +h + +D +h +r +y +s +t +o +n +e + + + diff --git a/zpu/hdl/zpu3/src/niltrace.vhd b/zpu/hdl/zpu3/src/niltrace.vhd new file mode 100644 index 0000000..40fc1ca --- /dev/null +++ b/zpu/hdl/zpu3/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/zpu3/src/sim_fpga_top.vhd b/zpu/hdl/zpu3/src/sim_fpga_top.vhd new file mode 100644 index 0000000..3044606 --- /dev/null +++ b/zpu/hdl/zpu3/src/sim_fpga_top.vhd @@ -0,0 +1,127 @@ +-------------------------------------------------------------------------------- +-- 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 zylin; +use zylin.zpu_config.all; +use zylin.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_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end component; + + +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 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 break : std_logic; + +begin + poweronreset: roc port map (O => areset); + + + + zpu: zpu_top port map ( + clk => clk , + areset => areset, + io_busy => io_busy, + io_read => io_read, + io_write => io_write, + io_addr => io_addr, + io_writeEnable => io_writeEnable, + io_readEnable => io_readEnable, + interrupt => '0', + break => break); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_writeEnable, + readEnable => io_readEnable, + write => io_write, + read => io_read, + addr => io_addr + ); + + + + -- 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/zpu3/src/status.txt b/zpu/hdl/zpu3/src/status.txt new file mode 100644 index 0000000..df8773a --- /dev/null +++ b/zpu/hdl/zpu3/src/status.txt @@ -0,0 +1,67 @@ +- Make LOADSP/STORESP/ADDSP/PUSHPC & OR emulated => From 444 => 428 LUT. + A pitiful saving in return for destroying performance. +- If I reduce datapath to 8(which is useless) => 197 LUT. + +Bare bones version of ZPU3: + +- remove NOP, PUSHPC, STORESP, LOADSP, ADDSP and OR instructions. This requires + modification to the GCC toolchain and will result in a fairly significant + code increase. We should still do better than ARM though. +- reduce datapath to 16 bits. This will reduce stack usage, which is good. +- 4kBytes of RAM. + + [exec] ========================================================================= + [exec] Device utilization summary: + [exec] --------------------------- + [exec] Selected Device : 3s400ft256-4 + [exec] Number of Slices: 167 out of 3584 4% + [exec] Number of Slice Flip Flops: 126 out of 7168 1% + [exec] Number of 4 input LUTs: 288 out of 7168 4% + [exec] Number of bonded IOBs: 49 out of 173 28% + [exec] Number of BRAMs: 1 out of 16 6% + [exec] Number of GCLKs: 1 out of 8 12% + [exec] ========================================================================= + + + + +Measurements: + +- Removing PUSHPC(which is possible) reduces usage by 2 LUT's. +- I tried to introduce the instructions as seperate states at the top level, + but did not succeed in reducing LUT count. This might be an avenue to + pursue if asynchronous(?) ROM's could replace logic. +- 550 LUT @ 76MHz. 32 bit datapath & 8 bit instructions. Added seperate decode + stage. +- Tried to move memAControl into decoded opcode. Usage went up to 594 from 550. + +- using 16 bit opcodes to encode signals directly. 466 LUT's. +- w/2kBytes 32 RAM & 32 bit opcodes. 415 LUT's. +- 16 bit opcode, 16 bit datapath and 1kbyte RAM. 292 LUT's. + +- 725 LUT's @ 63MHz + Minimum period: 15.909ns{1} (Maximum frequency: 62.858MHz) +- removed addsp, loadsp & storesp. => 670 LUT's. +- removed all pushes & pops to sp. => 638 LUT's. +- removed OR instruction. => 672 LUT's. +- on the second cycle an ADD is done regardless => 713 LUT's. +- using others => 'x' for e.g. pushsp. 713 => 703. +- switching from lots of prioritized if() for decoding instruction to a case + statement. 713 => 631. +- Using ZPU1's memory scheme instead of inferred memory. 713 => 715, i.e. no + difference. +- Removing AddSP. 715 => 704 LUT's. +- Add COMPARE. 715 => 743 LUT's. +- Slight reorganization of binary operand & NOP 715 => 704. +- STORE only pops 1 (which can be fixed in the assembler). 704 => 701. +- Remove NOP. NOP is only used to clear idim_flag. Use NOT instead. +- Removing FLIP. 681 => 646. Using a different way to generate the FLIP, + 681 => 679. +- Add a seperate memory system for code? +- Use IDIM_FLAG to cache value before IM and make add single cycle. + +- by expanding the opcode to 32 bits, encoding everything in the opcode & + using case statements. 713 => 433 LUT. +- 32 bit opcode w/encoded state & 16 bit datapath. => 325 LUT +- by using 512 byte RAM, 16 bit datapath and 32 bit instructions => 285. + diff --git a/zpu/hdl/zpu3/src/testlut.vhd b/zpu/hdl/zpu3/src/testlut.vhd new file mode 100644 index 0000000..fcc8fde --- /dev/null +++ b/zpu/hdl/zpu3/src/testlut.vhd @@ -0,0 +1,106 @@ +-- 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 zylin; +use zylin.zpu_config.all; +use zylin.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); + +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_top port map ( + clk => cpu_clk_p , + areset => areset, + io_busy => '0', + io_writeEnable => io_writeEnable, + io_readEnable => io_readEnable, + io_write => io_write, + io_read => io_read, + io_addr => io_addr, + interrupt => '0' + ); + + + +end behave; diff --git a/zpu/hdl/zpu3/src/timer.vhd b/zpu/hdl/zpu3/src/timer.vhd new file mode 100644 index 0000000..65836f0 --- /dev/null +++ b/zpu/hdl/zpu3/src/timer.vhd @@ -0,0 +1,157 @@ +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 c : std_logic_vector(1 to 7); + +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 + c <= "0000000"; + elsif (clk'event and clk = '1') then + if reset = '1' then + c <= "0000000"; + else + if cnt(7 downto 0) = "11111110" then + c(1) <= '1'; + else + c(1) <= '0'; + end if; + if cnt(15 downto 8) = "11111111" then + c(2) <= '1'; + else + c(2) <= '0'; + end if; + if cnt(23 downto 16) = "11111111" and c(2) = '1' then + c(3) <= '1'; + else + c(3) <= '0'; + end if; + if cnt(31 downto 24) = "11111111" and c(3) = '1' then + c(4) <= '1'; + else + c(4) <= '0'; + end if; + if cnt(39 downto 32) = "11111111" and c(4) = '1' then + c(5) <= '1'; + else + c(5) <= '0'; + end if; + if cnt(47 downto 40) = "11111111" and c(5) = '1' then + c(6) <= '1'; + else + c(6) <= '0'; + end if; + if cnt(55 downto 48) = "11111111" and c(6) = '1' then + c(7) <= '1'; + else + c(7) <= '0'; + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt <= (others=>'0'); + else + cnt(7 downto 0) <= cnt(7 downto 0) + '1'; + if c(1) = '1' then + cnt(15 downto 8) <= cnt(15 downto 8) + '1'; + else + cnt(15 downto 8) <= cnt(15 downto 8); + end if; + if c(2) = '1' and c(1) = '1' then + cnt(23 downto 16) <= cnt(23 downto 16) + '1'; + else + cnt(23 downto 16) <= cnt(23 downto 16); + end if; + if c(3) = '1' and c(1) = '1' then + cnt(31 downto 24) <= cnt(31 downto 24) + '1'; + else + cnt(31 downto 24) <= cnt(31 downto 24); + end if; + if c(4) = '1' and c(1) = '1' then + cnt(39 downto 32) <= cnt(39 downto 32) + '1'; + else + cnt(39 downto 32) <= cnt(39 downto 32); + end if; + if c(5) = '1' and c(1) = '1' then + cnt(47 downto 40) <= cnt(47 downto 40) + '1'; + else + cnt(47 downto 40) <= cnt(47 downto 40); + end if; + if c(6) = '1' and c(1) = '1' then + cnt(55 downto 48) <= cnt(55 downto 48) + '1'; + else + cnt(55 downto 48) <= cnt(55 downto 48); + end if; + if c(7) = '1' and c(1) = '1' then + cnt(63 downto 56) <= cnt(63 downto 56) + '1'; + else + cnt(63 downto 56) <= cnt(63 downto 56); + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt_smp <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt_smp <= (others=>'0'); + elsif sample = '1' then + cnt_smp <= cnt; + else + cnt_smp <= cnt_smp; + 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/zpu3/src/trace.vhd b/zpu/hdl/zpu3/src/trace.vhd new file mode 100644 index 0000000..81eb448 --- /dev/null +++ b/zpu/hdl/zpu3/src/trace.vhd @@ -0,0 +1,80 @@ +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 zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; +use zylin.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(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); + memB : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic + ); +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(maxAddrBit downto 0); + + + +begin + + t:= (others => '0'); + t2:= (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 + + if begin_inst = '1' then + t(maxAddrBit downto 2):=sp; + t2:=pc; + print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB)); + end if; + + wait until clk = '0'; + + end loop; + + end process receive_data; + + + +end behave; + diff --git a/zpu/hdl/zpu3/src/txt_util.vhd b/zpu/hdl/zpu3/src/txt_util.vhd new file mode 100644 index 0000000..d42303b --- /dev/null +++ b/zpu/hdl/zpu3/src/txt_util.vhd @@ -0,0 +1,586 @@ +library ieee; +use ieee.std_logic_1164.all; +use std.textio.all; + + +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/zpu3/src/xilinx_dualport.vhd b/zpu/hdl/zpu3/src/xilinx_dualport.vhd new file mode 100644 index 0000000..0e6edc9 --- /dev/null +++ b/zpu/hdl/zpu3/src/xilinx_dualport.vhd @@ -0,0 +1,1482 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 11:47:36 03/22/05 +-- Design Name: +-- Module Name: mem_sys - 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 zylin; +use zylin.zpu_config.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 + + +signal low : std_logic; +signal high : std_logic; +signal re : std_logic; + +begin + + high <= '1'; + low <= '0'; + re <= '1'; + + + ZPU_RAM0 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"01A100E100010001003600770002006D000F0000000F06AD000302940008003C", + INIT_01 => X"7D4000000741F68100C800030000377935990003000300030003002A00150001", + INIT_02 => X"0007584101010C3D55555555370000000092800000001490000000066A594EBB", + INIT_03 => X"0009015555932D564C093A4024055555564CB555593C1569EA90C00000007000", + INIT_04 => X"BF8AA55961BE2A956586C40A4CB00932C00024A80000024C9569C893C0024E90", + INIT_05 => X"18A1251E2A956586F8AA55961BF8AA55961BE2A956586FE2A956586F8AA55961", + INIT_06 => X"51349D53764E258A2043E21BE5645DE5C4FC00E0100430C140E4665595558750", + INIT_07 => X"47B1656A855555D435575A815D077558E475559E755715A1C364945042425555", + INIT_08 => X"5555F123348C17657C405070D5E745A518B58DD5555F55551D5506F00D707B15", + INIT_09 => X"C141C74DD5137120D51C0715094CC4F01006A8131DD91531B913118944815155", + INIT_0A => X"5E559655003D3549550D458C5994A04D476568D05B0F45451D143E53D0F2CD6B", + INIT_0B => X"4D1E1C5D3474C5C5A1E1C5D34787171C44DC7844D3451D37974D164DD55DD555", + INIT_0C => X"2074532E4C3A5074DE129D074D1137134477D546C01D374DD348774DE15D3717", + INIT_0D => X"875650117671948CB05545A5A2615074889149341D04D4956F843575543E1A19", + INIT_0E => X"F804036D9753106651D5140E6905C158D8979404C7459123540DD9955A43F563", + INIT_0F => X"7958D037C3557056405549520F96E88622775767141BA3755D1418E1BE234480", + INIT_10 => X"294A1C405ACCC3705D5599D55037776149584D8F98F98F98FDD00D904D205421", + INIT_11 => X"74710D5C26798346751441DD555BE179544D8F98F98F98FDD00D910DC3D357C3", + INIT_12 => X"605D5570051840119D04C0DC3755B61D7951D9A9522D995D51D5BB106B90F7C0", + INIT_13 => X"D81BC3646611D695A02D1A9419695D695422C40110C0F85D6F899E4D0D555BC3", + INIT_14 => X"28531104D5F01EDD204141807555735D38346423303676407555545F6B945696", + INIT_15 => X"5212D7645155503146685C599546660676E81041C85D570DCE1B07116F116021", + INIT_16 => X"5F9D03530F840406A5725910604E420D910DD521D6170F9AF0F940D91836445D", + INIT_17 => X"83E03E03C03414D5D5F5D9BE7550DD55775514A145E5405657024C3664F3059C", + INIT_18 => X"444C7584143756C431049D594DC444FD19CE181427555124440155503F58E14D", + INIT_19 => X"D54521B201810644D895159C568F40C6C85503E135203FCF555151102C7343CC", + INIT_1A => X"5A95904431351D93820C4D1AA2C7FD0CD95555311185802971639A1755607515", + INIT_1B => X"E7D41815C826057201815C826057201815C806057209815C82741C75D1BF4336", + INIT_1C => X"41BD443664E14155000C4191440445305B46A8D40443A3E115495503116861C3", + INIT_1D => X"A1520F9C10F850FC18DB80D4777F1D5757195241D35F9754D755DD35F40D9D99", + INIT_1E => X"65E6A10F206870F0557411545536F0D5FA1765C8D5443E658956E52727558D14", + INIT_1F => X"DDD2151D31A956A0400F03FC754175510FD4A34252E0DC4076A5EC66A10FB312", + INIT_20 => X"77C1676610FBD310C3C3CC76F05C9FF20755DC17ECE5451D3472D9D215D34C40", + INIT_21 => X"55556189C508B6C3F0F0FF1D9F4561676610F207A5EF52D7957CC0F8800F7726", + INIT_22 => X"8890203480C224080B251D4352F126920C8CF13E00C15A16445A44DA4F105554", + INIT_23 => X"0F203CF4495240B82923890203080E20B8809249524080C2C0B490210C803203", + INIT_24 => X"854F25C74C20400C1030000B24838A6F858A08E24080F2823890203C80D203C8", + INIT_25 => X"00000C000000001F75D5D74FC0000000000000003FFFFFFFEAAA95438104DA47", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000154000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(1 downto 0), -- Port A 2-bit Data Output + DOB => memBRead(1 downto 0), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(1 downto 0), -- Port A 2-bit Data Input + DIB => memBWrite(1 downto 0), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => low, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM1 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"01510111000100020061006B0000004000100002001005510001059A00360064", + INIT_01 => X"40300000064005640380001E0001543802180002000200010002000500110005", + INIT_02 => X"000653709D19C24E555555552400000000920000000024000000000162843876", + INIT_03 => X"0000CC55555DC1557EC5DC00033155555577055555D315607655000000007000", + INIT_04 => X"74818211417206084505C705770000F940000398000001765560745D30017700", + INIT_05 => X"165081C206084505C8182114174818211417206084505D206084505C81821141", + INIT_06 => X"51200592163801450816D095E0044564ADB5C58C82606080118051A1162881C8", + INIT_07 => X"550175554516163566505D44014118AA4818516C185014519662131830201616", + INIT_08 => X"96140906D01981608AF43685992015DA5245D45628675859062835B511755017", + INIT_09 => X"6000B8F861B22CE39C0EC602ED202FC596B59458405845C55118595694001162", + INIT_0A => X"55A58300016D31668D5941040556516111611710005B4D4545716E190280595B", + INIT_0B => X"C968C00BA5BE80B2C68C00B65A3002C1BC8BA32CBE70C3EA02C9CAC89C59458A", + INIT_0C => X"0B1A0D6164EC408F8A047008D9CB622E2D19546CB32362C8BE8312FACC4BA202", + INIT_0D => X"4455CCCC1601143B2E45916976DC147401104104059F14685B456418596D1171", + INIT_0E => X"B4B55655D7453C5DA01654441070416015693378C475DC495A0458256156D15F", + INIT_0F => X"468751645665865943F040105B8164446641416011165018A11454D15D007415", + INIT_10 => X"8175134656FB96434615446289641B554684057595597595D066598611165695", + INIT_11 => X"18A6599B55F856501AD764059656556684017495497495C066598559C91D555D", + INIT_12 => X"5346166005EB404406411356518A35554684656685DD4686446112185F85B684", + INIT_13 => X"D555D6601585546854151468D5568546895EB4044115B4595F454E12599655D6", + INIT_14 => X"335D511B5557C55D467C504218A4E119C7135101456604AE1A05A1555F861668", + INIT_15 => X"91101161116169E0F5D448156855955595171C7110462859E41D55815FD556C1", + INIT_16 => X"153011465B440F059A495550560474598A50591544045B8105B8459841662905", + INIT_17 => X"16E16C16C16514546104654E051C0615418A9450651A1155A1B165662D1D417D", + INIT_18 => X"700111F690095D6159A445904D270024D7D3C3B711855915976D62896C56D165", + INIT_19 => X"62A10F7C5B0C0557D468857E5149D00170C316D15CCD6EC558AD0441D72116D2", + INIT_1A => X"97681F4400824581000023D4516DE3E2517161920D8D38057557861185921514", + INIT_1B => X"E152154484F551212D544846551210954484D551212154484515A45C3B78F895", + INIT_1C => X"457E256626804961925697473A0E2C44D0F51470F47849C431468400D048CD56", + INIT_1D => X"51105B8C05B445B315555C05417946285153C440619C2166018A4619C8598151", + INIT_1E => X"4595955BA2EA0761584405655975B59920519556E9056E0566859A4581645C14", + INIT_1F => X"9055965A909455530D5B16F1185118A55B15520D55159076C55AF455155B50B6", + INIT_20 => X"8085515155B6E90616D6E0146830806841851156724A0EC620DD04559653A415", + INIT_21 => X"75858C001F40514145B5B40507C305515155BA2D93E496D5695545B4605B9418", + INIT_22 => X"0810203080F20408032DA18003C200E266D1C15050400CF788038803844E58A1", + INIT_23 => X"0F203CCF4CF040B12103010203480F208C80A24CF04080D0C03C1023BC82F203", + INIT_24 => X"0600F6CFD04155043040000C38832340070840C04080F2103010203C803203C8", + INIT_25 => X"0A000C00000020061C7185CFEAAAAAAAAAAAAAAA95555555555555540B080387", + INIT_26 => X"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A", + INIT_27 => X"313A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A", + INIT_28 => X"00000000000000000000000000000000000000000001F0000000000000030000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(3 downto 2), -- Port A 2-bit Data Output + DOB => memBRead(3 downto 2), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(3 downto 2), -- Port A 2-bit Data Input + DIB => memBWrite(3 downto 2), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM2 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"0008000800000000000000010001002A000200000002000800000080000800C6", + INIT_01 => X"023AAAAAA028A040002A0000000002B000000000000000000000000000080000", + INIT_02 => X"AAA00B000020000C0000000002AAAAAAAA082AAAAAAA828AAAAAAAA008223032", + INIT_03 => X"AAA8CC000000E0000CC00E2AA33000000003800000030008300C2AAAAAAA3AAA", + INIT_04 => X"3C2828002830A0A000A0C020038AA8F02AAAA302AAAAA8000008300032A8038A", + INIT_05 => X"820800C0A0A000A0C282800283C2828002830A0A000A0F0A0A000A0C28280028", + INIT_06 => X"00000C00303000208600C841C0008C028AB00806C170000010000C0080002A30", + INIT_07 => X"8AB83808200000C000020C2000023002A830001E300380080002A00230100000", + INIT_08 => X"0000C00C00322300330800E0008020C088C0E280000B0003CC0020F08038AB83", + INIT_09 => X"40001DA0C0200401080400000CD880A23C00C23008C00A3B20303010102C8000", + INIT_0A => X"0000002AEC0C70000A0093220A8008C0230028EE00032A008CA00C230004F00B", + INIT_0B => X"9030420240C820130704202C1C108041C900C10A2CD04E0C00B34C80380E4000", + INIT_0C => X"8E32028C080030DA0244070DA342C0BC26AA40880A36C0A020D1008304020040", + INIT_0D => X"20A0303230280000AC0020A828028A20220000000C2080000B200030000C82C2", + INIT_0E => X"323200204380C300000080880B80A80B83008D037820E3A00008C0400000C203", + INIT_0F => X"00004800400008012C2000000300820808A323008D800A30008083C81C801000", + INIT_10 => X"8030808000C0002F8C0008C0000230000002200882883881C8CB0002FA000000", + INIT_11 => X"3080000A8030002A3220A08C0002800002200882883881C8CB000200C1200170", + INIT_12 => X"2F8C000AB0282A0A8CAFA006230000040008C8300080100408C08A820B003028", + INIT_13 => X"0002C0020208400002C8C1020800040002C282A0A800320003203C02000000C0", + INIT_14 => X"28002208005C2A840002A08A3009090828820E0900000A823200200507004300", + INIT_15 => X"0880A3000000020F00420E030000A080A0208208828C00000821810007080322", + INIT_16 => X"85002D080320300040088382000800000008C080E0AA0300E030A0000000008C", + INIT_17 => X"80C00C00C0010088C088C83C00028C002300800820000200013834000010B03C", + INIT_18 => X"0A20108A00290E4080038C088C00A20081C12810A30000E0A0A000000C02C804", + INIT_19 => X"C000020C0223C020C300000C002300C20882C0C813280FEF0008C0A8280900C0", + INIT_1A => X"8200000030428C0E008C100108E0CC084020000ABA882800380702E300026028", + INIT_1B => X"C0CE4280A240A02890280A240A02890280A200A02880280A2230228824330210", + INIT_1C => X"081C8000008000008C00C204DC280368800042CE0002C1C0A0000383A00E0280", + INIT_1D => X"0880030E803200308281822223088C00020082C0C08C630003008C08CA000000", + INIT_1E => X"00206003248C882E00238008023030008EB33021D0D00C002020400323020E80", + INIT_1F => X"08CA008A00888008AE0300F230223002030008AE02A00808A040812060030823", + INIT_20 => X"88B0060A0032E00880C0C8322821A22AA3020D83B00D808C182E28CA00878020", + INIT_21 => X"20000C003280A28E2030320C8B8220060A003248C6EA80C3003820302403026A", + INIT_22 => X"C2BA0AAC2AA0AE82A93AAEABA2A0B110EAAFA3EFEE8ABBAAC2C442444F300000", + INIT_23 => X"A90AA4BABAAAE82F04946BA0AAC2AA0AC82AE0BAAAE82AB24E5ABA09E42B90AA", + INIT_24 => X"AA8FAAAAACFBBEE8BED8AAA9EC0AEEBECAC1251AE82A905946BA0AA42AA0AA42", + INIT_25 => X"FAA00C000000700562A2FC8FC00000000000000000000000000000000E02C44E", + INIT_26 => X"FAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F", + INIT_27 => X"0D25500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F", + INIT_28 => X"0000000000000000000000000000000000000000000080000000000000020000", + INIT_29 => X"00000000000000000CF000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(5 downto 4), -- Port A 2-bit Data Output + DOB => memBRead(5 downto 4), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(5 downto 4), -- Port A 2-bit Data Input + DIB => memBWrite(5 downto 4), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM3 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"00040044000000020008000200020115000500020005000400020000000C0089", + INIT_01 => X"2975555550165082031500000000017218820002000200020002002000040000", + INIT_02 => X"5550070B0150281C000000008155555555849555555561555555555404117230", + INIT_03 => X"5555EE000000D8000CE00D9557B8000000036000000B80053000555555553555", + INIT_04 => X"31141484143450521050E090036555F0955557015555540000053200B9540365", + INIT_05 => X"4305181450521050D1414841431141484143450521050C450521050D14148414", + INIT_06 => X"088A0C0830B088305988C583C9824C914136660AEABA8A2AAA2A08084081160A", + INIT_07 => X"1544300C14808010800A0C1694A932055632082D3208420448095991A8684080", + INIT_08 => X"008210800A02130B030A8092006990C04620C540821702028C8290F568315443", + INIT_09 => X"9AB92A20C8084AAB01A820AB082640D53AA081A164C265B750A1702032124808", + INIT_0A => X"08016955148DF82021207E5595420685930996D9952351204C588C926A2FC00B", + INIT_0B => X"20E9A590C3A2192A9E9A590C3A6964A7A312A6830CEBA08A6433AA21310CA020", + INIT_0C => X"6E31A15036890AA312FD78AA33A084ACBE61820106E8843108A6A4229A90C4A4", + INIT_0D => X"11510AC9309402005C20185021614512190A28A28CF042020F108232008C45C4", + INIT_0E => X"31214814832100080940422454855404420142448520CC9E00A4C2C40808D90B", + INIT_0F => X"20268482C800150257062188232541244453130942420532044203C43C593612", + INIT_10 => X"7830466802C008134C8064C8208132082025942102102103D4C6202525980008", + INIT_11 => X"3241200540B2481531105A4C0002082025942102102103D4C6202520FB5002B0", + INIT_12 => X"134C801D711635AD4C525809932060882024C4202648202924C855430F223516", + INIT_13 => X"8282C80B91A8820265040201042028202691635AD44231040B103C99200003C8", + INIT_14 => X"9600999400AC154C98015A653207468C14C808871080914131A01A0A0F24C301", + INIT_15 => X"044853098808030C00C111820210C16080C44104654C8220949E86A80B240B19", + INIT_16 => X"4B46A224231280A0801E421B0AA401202064C048D1552324123252026480814C", + INIT_17 => X"48E88E88E8828204C864C42C90814C8053204205108099080A743C809070883D", + INIT_18 => X"0596A8858AA60CAA58004C066C60594203DB16B053201012505808208D03C468", + INIT_19 => X"C818807D4458A0C2C202603D081702E6862888C460988FDF02089AD4164688C6", + INIT_1A => X"420200A2B99B4C29286E640205F1CC088844081F49601684300F25132009D084", + INIT_1B => X"C9C2831215A0C4856831215A0C4856831215A0C485683121593251515C730222", + INIT_1C => X"203D4080904A20086864E4682C918096010081C30A0292C6442020EBD9160148", + INIT_1D => X"0548232D623112344203115113204C82084015E8C94D930063204C94D5202448", + INIT_1E => X"1080842348196501021064050170B2005553108554208C902010C06313012D42", + INIT_1F => X"04C500542A464205692388F93219320523420569084206041080560084234606", + INIT_20 => X"660408084234C2A548C8D63106851905632142433C9D654C965D54C5005B0A92", + INIT_21 => X"00201E21706259615232358C576854080842348195C541C3003112361A235591", + INIT_22 => X"005000100050140005055541515105505555514554414515441544554002020A", + INIT_23 => X"0500145455514015051545000140050014001055514000514054500114005001", + INIT_24 => X"4545554554515544005000055401555541414551400050515450001400500140", + INIT_25 => X"FFF00C000000501394E93A4FC000000000000000000000000000000005041545", + INIT_26 => X"FFFFFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F", + INIT_27 => X"093FFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F", + INIT_28 => X"0000000000000000000000000000000000000000000070000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(7 downto 6), -- Port A 2-bit Data Output + DOB => memBRead(7 downto 6), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(7 downto 6), -- Port A 2-bit Data Input + DIB => memBWrite(7 downto 6), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM4 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"02550195000200030077007600030359001E0003001C09DD000307EA00000064", + INIT_01 => X"706555555755A365027600130001222837780003000300030003001600120005", + INIT_02 => X"555709831042087800000000D355555554DA5555555536355555554D5AA46DF7", + INIT_03 => X"5541AA00002A2800AC82A25506A8000000A8A00002A200018329555555559555", + INIT_04 => X"A6956586F8AA55961BE2AAACA89541B85555060D555554AAC001822A2154A895", + INIT_05 => X"15564C3A55961BE2A956586F8A6956586F8AA55961BE29A55961BE2A956586F8", + INIT_06 => X"C4DD0F9C3E254D554C5A94D4A3500F07C1D00B5C330CF3C3F3CC5544DD52494A", + INIT_07 => X"E1B5D755571D97818E76755CE71835646436755036461D5558E13248A5555D99", + INIT_08 => X"DD953042010B03E0024CD486B931E7579D27491D5550765A0D55154409D21B5D", + INIT_09 => X"4424F150D91D3714CDB070020425D4601515551100F8018994D19555114041D5", + INIT_0A => X"75543554959F55D556679190489D554403E0072C4060DE140F41BA11D6E44451", + INIT_0B => X"6845704D611544DC545704D5111C1371144C1DC79E5C71E113697174D0747754", + INIT_0C => X"38344823553107174E413471697193C477905D84C7455344DE19D378574D9313", + INIT_0D => X"55DD48483E1B310505675CCD58860351454104100F441D5552558C3655B95098", + INIT_0E => X"65111AF8DD1AD055541D1D54F08F41D115509285CE0754B47450F82DDB5B6556", + INIT_0F => X"D550499F18E4B076DA4214846A8499649843C3E382555435685D9495496C3106", + INIT_10 => X"4DD55C3555001BD40D9110D5558C3701D5515951951D5114D0D2678221658145", + INIT_11 => X"340D6B9445289AC434711C0F9F15CDD5515951951D5114D0D2678267C4950175", + INIT_12 => X"F40D912D604235CD0D221D444356E005D550D1555381555500D97D875686A420", + INIT_13 => X"80549BE357DF5D553D7DD55A1DD555D557D4336CD746A5475E5D6A216391175A", + INIT_14 => X"010501F5405D40C8D5940C1435580D3849CE5740B18E1910340745C556881D5B", + INIT_15 => X"9B4603E049D9C0084555521555D5710555774D34040D536B8421F9D453441141", + INIT_16 => X"041175106E554455555F9551036500638510F943D169668356285678818E340F", + INIT_17 => X"D8F98F98F98FDD00D920DD6A08440D9103545D563755637555C621AE0505C164", + INIT_18 => X"1157D3918169757BC8590F9710611503950440C103644653210DD555BE179544", + INIT_19 => X"D54C433594B0854455550145755140154527D89514BD8B95754C1CD64F0D1906", + INIT_1A => X"5551405045830F8D75D16D155464110C4D99D918486C8049DD528503667CD750", + INIT_1B => X"A3429553102554C409553102554C409553102554C4095531003C972139044313", + INIT_1C => X"D151519E005111D94414170D204D0484CA4555500503216C59D5301C3526441B", + INIT_1D => X"57046685066556A495D5DD4103D10D51773591C0DE4C83E503570DE4CD6B889D", + INIT_1E => X"1775776F4CCF97A4766261D877D536396DC347407021AA255525558D03E7055D", + INIT_1F => X"30F31DBD15BBDD56706F9BF83648357C6F5D547377B6FD0855545F35776F3A33", + INIT_20 => X"8837575776B0C15859D9843C816FE39A4366411D28401C0D41F3E0FB1D9F4566", + INIT_21 => X"07670D146590C32F1676610FF31267545776B40CCCCFC89D59D5A6E8DC6F2CDF", + INIT_22 => X"CC30300C00300C000C320499A95208E1C4535A2755E92DCB882389238A427556", + INIT_23 => X"000002951C50C080313003030BC02D003400811C50C002CB87E43003F803E300", + INIT_24 => X"5841550C544F955C0740000C380831B1C14C8C00C0C023330030300800D00000", + INIT_25 => X"FFF00C000000F01400FFEAB3C0000000000000003FFFFFFFEAAA9543850823A8", + INIT_26 => X"555555555555555555555555555555500000000000000000000000000000000F", + INIT_27 => X"3A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5", + INIT_28 => X"00000000000000000000000000000000000000000000B0000000000000020000", + INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(9 downto 8), -- Port A 2-bit Data Output + DOB => memBRead(9 downto 8), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(9 downto 8), -- Port A 2-bit Data Input + DIB => memBWrite(9 downto 8), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM5 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"0028016800040002006B00A40002002500150002001500200002078500620060", + INIT_01 => X"090555555A16501F0555001E00011554543400020002000200020008001C0004", + INIT_02 => X"555A082282D08E55000000009355555555841555555561455555555058510938", + INIT_03 => X"5564320000C598030D3C595590C80000031660000C58C0246FC1555555550555", + INIT_04 => X"12084505C8182114172040DF165564345555903D55555715C0246FC58D571655", + INIT_05 => X"96296A48211417206084505C81A084505C8182114172058211417206084505C8", + INIT_06 => X"E18B5B896D1CD962A7546A5450CF5B71580861C4E138618E91B8586205916041", + INIT_07 => X"17146758A54584656E0B18A04CF16646C1660945661A862854D183703F0F0588", + INIT_08 => X"0582C0F063C156D030459915F861A18480718705961516185996751FBC617146", + INIT_09 => X"378E9CA59823E272012C64BB400C144101558A49B5B4BD50710945615F380059", + INIT_0A => X"1852855419554461645F509EE3462926D6D2F546F1595CCC5B756511B2343155", + INIT_0B => X"B7702AFAD5CB6C8B1702AFAD9C0AB629CBD9C4BA28082E8CBEA02C8E801A1166", + INIT_0C => X"0166AC531C4502C8D941902C80263E735D40066BA5723A8DA8CCBEA322DAFEBE", + INIT_0D => X"A01240416D1107E5A19151016694527B3730C30C5B44061651A15D6601668510", + INIT_0E => X"DA01D4D9861C12585D05065D2811A8519615D0104661940514C5B41453955451", + INIT_0F => X"6168095D15E114149C58BE2F5542950D5956D6D080162966440614694692E3C5", + INIT_10 => X"40628441544996DA5988A599654D643461695D65165D65D45596534A07012D74", + INIT_11 => X"668D5784B55457D16459CA5B8496B061695D65165D65D4559653465304D4BC14", + INIT_12 => X"CA5985D59F72958459207121566453606155996169016161A5985D5559451715", + INIT_13 => X"4D5555D195940616913116116061606165B7295844555A2759A175215B85D555", + INIT_14 => X"70B417352F056B6A715694656668C4C6756858D0D14D121D66E164A05D440611", + INIT_15 => X"80ACD6D20058E080458A141616C58D8595B41041C55991577DC058B25D774D57", + INIT_16 => X"A01F145855A314C58515165132DC89574495B80B0855514715545534054D025B", + INIT_17 => X"17495497495C066598559D45356659889666462941859D185867416D14046975", + INIT_18 => X"99524CDD7720192513505B84634995CA1454710996622409D9C0596565546840", + INIT_19 => X"996DF895A74805A21616894518A86430CC0D5568440545001645484671C4D444", + INIT_1A => X"561B22C94D195B472D1345162807D10000A4582043DF16F464514116627A61A5", + INIT_1B => X"5100966998A59A662966998A59A662966998A59A66296699896E9892E1FC400C", + INIT_1C => X"6545195D1AC85458697806A50148143DF1458A102C00D046646190140D247717", + INIT_1D => X"280F5144451A15D51616D05456C1599118412815927256E196655927215B4460", + INIT_1E => X"11858751486456951621685817855578511641A9DF0165016105845C16E02E06", + INIT_1F => X"35B8051B0CB846294559D7456619664659462A441B75B441C587E5058759A619", + INIT_20 => X"641759587598E0C15454556E8BAA56A5566140865C12B2596B3255B40507C305", + INIT_21 => X"C1632BBD073618665515155B50B647595875948676CA8846106405D4D05DA420", + INIT_22 => X"C030003C40F10C040D284715799040C1155498499FE9FDA30103010304C41658", + INIT_23 => X"0D1036025D60C0F617D18300080422103440125D60C0420B00C4301190424003", + INIT_24 => X"D0456C31905419FC4108000C300999F50245F460C000C14D1830003040D10344", + INIT_25 => X"AAA00C000000002AAA555573EAAAAAAAAAAAAAAA955555555555555407010320", + INIT_26 => X"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA", + INIT_27 => X"003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + INIT_28 => X"0000000000000000000000000000000000000000000060000000000000020000", + INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(11 downto 10), -- Port A 2-bit Data Output + DOB => memBRead(11 downto 10), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(11 downto 10), -- Port A 2-bit Data Input + DIB => memBWrite(11 downto 10), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM6 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"00000000000000000001000200000000000200000002008800000300000000B0", + INIT_01 => X"202000000800080A010000000000080202B20000000000000000000200000000", + INIT_02 => X"0008A20300A00C02AAAAAAAA0B00000000020000000000000000000002002830", + INIT_03 => X"0000B8AAAAC002AB2CBC000002E2AAAAAB000AAAAC0EEA800FC8000000000000", + INIT_04 => X"84A000A0C2828002830A22CF000000B00000023C00000300EA800FC0EC030000", + INIT_05 => X"000003028002830A0A000A0C284A000A0C2828002830A328002830A0A000A0C2", + INIT_06 => X"3C0003000CA33000040300400B38030004028238020082002600000C8C080000", + INIT_07 => X"8A08CB00028C0A803C31300EA08000208000200800208C0003C8380232828C02", + INIT_08 => X"8C000B04881380C8800F0400B03803020093020C000A30280000202224C0A08C", + INIT_09 => X"003914C000B6C0E02C000003000820C882A00080003200900D800800B802D8C0", + INIT_0A => X"30003002B808C8C004033000800C020000C802409E0608CE03080080A00C0302", + INIT_0B => X"C0D00083034C08010D100830340028034CB3403C3000030420C004DA00322302", + INIT_0C => X"E0002A07384C004DB0C22004D00B6894C2820CAE22D364D8304820C120932820", + INIT_0D => X"00E002C00C811C0028A3282C08228A2400CB2CB203C08C0000002C0008000200", + INIT_0E => X"000E80CACC0B80002A0C0C80280088C20008800A22B32C0E30803220CB808800", + INIT_0F => X"C002283E00C289320830C830042028000200C0C8200000002A8C80000022BC30", + INIT_10 => X"88C0020880BB82C800080000003C02F8C0000C08408008008002032202088038", + INIT_11 => X"022C0B02300202C0000020030A00B8C0000C0840800800800203220B08800010", + INIT_12 => X"C8000A04800A12240020200280022F80C000000001080000200000010020A080", + INIT_13 => X"BE8081C90A260C0010BA8008A8C000C00100A122401000030C0030880F0A0080", + INIT_14 => X"0A00822000040020688002080028208008480200401C8A80002302800C200C08", + INIT_15 => X"00A000C8D8C0C0800000028000E00C20200082082000080B202050200E020802", + INIT_16 => X"000218020C02208000050088F8834C0F2A20300FB400002380C20072201CA803", + INIT_17 => X"00882883881C8CB000200C008880000800028C00230002300003203C81004038", + INIT_18 => X"000008428210320A080A03020820002200880A80000202B92028C00028000022", + INIT_19 => X"00890210803420210000280A30001020B8C8C200000C1800302F82430A2083B2", + INIT_1A => X"0000D0B68823032CC0A208000200000C20A8C0E000830008C800228000B06320", + INIT_1B => X"0820808E8CA023A12808E84A023A12808E84A023A12808E8480C0B8AE0040304", + INIT_1C => X"C808003C8233A0C00C30080800009008320000000B83A00828C0082808800001", + INIT_1D => X"00B00820E0C000A08080022200C6000A322860C0083880C000020083800F2028", + INIT_1E => X"E320230E188022AA300E24C13380203035000332ED0C20800080020E80C03C8C", + INIT_1F => X"70320C8A08388C003602C18800000022028C00363330F3888002A2E0230A2220", + INIT_20 => X"2263020230E1E0880182800C92308AAA0000384C8C202300C23220320C8B8220", + INIT_21 => X"E303800A0100820A0060A003082303020230E18800DAB48C08C8B0E0C80202AA", + INIT_22 => X"4AAA2AA4AAA2AA8AAB2AEEEAE2A12512CFEFA2FAAA8F2AA2C59444944F803000", + INIT_23 => X"A32A8CAAABAAA8EF04892AA3AC4AB02AD0AAC2ABAAA8AB12CF7EAA2B4CA932AA", + INIT_24 => X"AE8EEAAFA8FBFAA8AE94AAAAAC8FABAA8A81224AA8EA305892AA3A8CAAB2A8CA", + INIT_25 => X"00000C000000100000000033C00000000000000000000000000000000A04944E", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"1500000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"00000000000000000000000000000000000000000000A0000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(13 downto 12), -- Port A 2-bit Data Output + DOB => memBRead(13 downto 12), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(13 downto 12), -- Port A 2-bit Data Input + DIB => memBWrite(13 downto 12), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM7 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"028200020002000000020081000001800000000000000A4600000320002A00CA", + INIT_01 => X"905000000C800680020000080000444101710000000000000000001100000002", + INIT_02 => X"000C51A6981A9A015555555587000000002140000000081000000006010850B2", + INIT_03 => X"0001745555E001579D7E000005D15555578005555E0DD5410FE400000000A000", + INIT_04 => X"4C521050D1414841434519CF80000172000005BC00000380D5410FE0DC038000", + INIT_05 => X"00800311484143450521050D148521050D1414841434521484143450521050D1", + INIT_06 => X"B21023208C60000808020082040823582DA15A0A0A828A202A0202024C040620", + INIT_07 => X"5454C702054C25583CB23201564080111480B02080B14C8202C4451530504C29", + INIT_08 => X"4C2CD70F843F88C6782C0E40B2442321A663258C008530942000508418C9454C", + INIT_09 => X"90332AA202A8C4867C420A02E68152956550205C02310276425C64087C4124C0", + INIT_0A => X"320900014031E4C8090F7980048C817008C409D4390C4DAD23442049465EBE08", + INIT_0B => X"A6EA40229BAA42128EA40229BA900843AA22A93A69924E9A08A64AA22E319301", + INIT_0C => X"1080551FB198A8AA21E92A8AA64A88A82A6D8C6B22EA88A329A508A694328808", + INIT_0D => X"091921E08C46AC38145316580551649C4024924923E24C8008083C80A4202506", + INIT_0E => X"809103D78C9C4802118C8C50462554C94085486515E31E1D32123198C7831708", + INIT_0F => X"C805903D82C942314421C0700C1514904108C8C518408080114C42002005E000", + INIT_10 => X"64C82514423FC3D4202E1200002C8134C8000C048048048202080B1484546834", + INIT_11 => X"81380F25708102D882181023258074C8000C048048048202080B140BA642AAA2", + INIT_12 => X"D42025987905A11A208844A948010368C80200080368080812025822081080C0", + INIT_13 => X"0D4202C615198C803475408494C808C802D05A11A220C0A30C0830540B258202", + INIT_14 => X"45A24450AAA8001ED44005148016322E0482011A9C2C554C8013056A0C128C84", + INIT_15 => X"267108C424C2CAA22020854080D02C10102165961120040B501AB6060C09A404", + INIT_16 => X"2A80668308085210208B405C3410A90B1512326F49010C17408110F1542C5423", + INIT_17 => X"42102102103D4C6202520C204660202E08014C80932001320243982C52A28031", + INIT_18 => X"800422C160763185560523251E58003082160568080B914B1814C00020820259", + INIT_19 => X"00470222620A101A808054213206208A2193C202621C225A301FD1A305320225", + INIT_1A => X"408028096013231C01580480818028AE6674C292201F5104C60814480A709312", + INIT_1B => X"05A8405D4A5017529405D4A5017529405D4A5017529405D4A48D445D900A2B99", + INIT_1C => X"C421882C5F0098C24E6697488A6D6201F520208A80EBD91434C81A9690E40082", + INIT_1D => X"81700C11108080C14040851988D92005316491C20534C8C808012053440F1254", + INIT_1E => X"1310130866891415309108C2332080B255482315568030580850212D48C9BC4C", + INIT_1F => X"B2358C41A1714C810908C22080848011084C81093370B4E690215110130841A2", + INIT_20 => X"119301013086DA150202108D206544150809068C5E980520407852358C576850", + INIT_21 => X"D30B40018241451440808423460613010130866895E50E4C84C54086C6085545", + INIT_22 => X"4410101440510404051545555151455155455154554145554515451540283001", + INIT_23 => X"0510145455504015151141010144051054405055504040514154101054415101", + INIT_24 => X"5445551554515554415400041401555541454450404051511410101440510144", + INIT_25 => X"55500C000000D00000000033C000000000000000000000000000000005051544", + INIT_26 => X"5555555555555555555555555555555555555555555555555555555555555555", + INIT_27 => X"1515555555555555555555555555555555555555555555555555555555555555", + INIT_28 => X"00000000000000000000000000000000000000000000E0000000000000010000", + INIT_29 => X"00000000000000000CD000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(15 downto 14), -- Port A 2-bit Data Output + DOB => memBRead(15 downto 14), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(15 downto 14), -- Port A 2-bit Data Input + DIB => memBWrite(15 downto 14), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM8 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"015502550005000300F6005200030357002A0003002A066500030BDD001C000F", + INIT_01 => X"793000000D4EC7C70123002F0001191522250003000300030003003D00060009", + INIT_02 => X"000D601010C040A555555554DA00000001DCC000000077600000001645953DFD", + INIT_03 => X"0024C9555693855A7CB92A00932555555A4E15556932D564899E00000000A000", + INIT_04 => X"5D961BE2A956586F8AA567064E0024F0000093A4000002405564CB932C024A80", + INIT_05 => X"5D510E56586F8AA55961BE2A955961BE2A956586F8AA566586F8AA55961BE2A9", + INIT_06 => X"A2CD6E8D995445D50415505D54486DAC86F2014401004100D90F76420F951317", + INIT_07 => X"1510D0756C0F85016A08356D69D1AE7545BE09D1BE090D551595211564540F86", + INIT_08 => X"0F805644C511DB9595044165E874C364C783450F96543E146F9B074370D9510D", + INIT_09 => X"D0059716B8C5137DC0372001534D13641227546416A51443126409D9590120F9", + INIT_0A => X"36560854A95A40D9CF52944C950D51909A94912C5C5517E569C5555639E4D274", + INIT_0B => X"1C5D34787171C74DC5D34787174D1531714974D1874D34571E113716083403E4", + INIT_0C => X"11BC45059E74587172579D87113C5A54D9100D71F15C56148574D215D3785A1E", + INIT_0D => X"57101951A951691C0443C079D85206791520820865500D917555498E15555D43", + INIT_0E => X"5643D4020DC94C76460F0D54FD2FB0F89D9E0713B48365143E566570FDD56475", + INIT_0F => X"D9515D4955A1203DB50398E455555344471A9996A41D51BE6B0D1D51D5B6B105", + INIT_10 => X"10D5514C5D3FD4116B8D1639C1459E40D9C401D0DD3DD2DD36BE5659440CD400", + INIT_11 => X"9F7C5E85475555A1AF08416284DD00D9F401D01D31D21D36BE56595B07104410", + INIT_12 => X"016B86C4001110346B344830DAE76470D916F1D9C089D9C816783811755571F1", + INIT_13 => X"905DD595B4040D9C0A341D9FD0D9C0D98D1111034FC55553757DD5545E865D17", + INIT_14 => X"11907484261415500C0179A5BE6373A31C467445C5596D8D8C03C3F0755C0D9D", + INIT_15 => X"83E4589420F845D51755749D9C37408777410410826F9657E7434002771C0034", + INIT_16 => X"354053475556521764441D2BC0A4815E5456A851083F555955557525B559536A", + INIT_17 => X"951951D5114D0D2678263DD55BD1678D58E60D5903659436431C1549535241DD", + INIT_18 => X"44003B04E4403403010B6681900440719D0110345BE343C85440F9715CDD5515", + INIT_19 => X"7986431374C5975D9D99B9D835502D49FC805555310551403E56034C107395E0", + INIT_1A => X"9D9120C85C8066553413241D5C5014B168B0F8D350CD1D40D275549BE1100366", + INIT_1B => X"54B49D071CE741C739D071CE741C739D071C2741C739D071CD815C8654051858", + INIT_1C => X"D1D145596B4080F8C1518D8456E6310CD53754060C2C353430D91D85BC110115", + INIT_1D => X"5264555525557571DDDD84001BD76B9437189636B0241BA01AE46B024D525D40", + INIT_1E => X"0377485474C5E3903E3400F03FC755E86D59C3478B415575D96767055BA26C0D", + INIT_1F => X"E6A10F207A310D5D0455154D8E21AE7F540D550437D5EC0C6767EA6748574D31", + INIT_20 => X"EF2D7675C576C499D515DDAD233DBA2F18E0360D814C1E67410C66A10FB31265", + INIT_21 => X"03E10116505841CC7565776BFB332B767485444C49EF430D90DD1554E856A57E", + INIT_22 => X"060010B042F18004022C024D1C0C8C024C88055CCD9726B03330313015D43E70", + INIT_23 => X"2E10B94C860800712F77200103040C105040C086080040C8029A0013B84AE10B", + INIT_24 => X"7D02A0C02689FCD84294002EC00712EB68CBDDC80042C2F7720010B040210B84", + INIT_25 => X"00008C00000000000000003CC0000000000000003FFFFFFFEAAA954349323032", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000C20000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(17 downto 16), -- Port A 2-bit Data Output + DOB => memBRead(17 downto 16), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(17 downto 16), -- Port A 2-bit Data Input + DIB => memBWrite(17 downto 16), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM9 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"009600160000000600E4009200060557000C0006000C02960006039300FA003A", + INIT_01 => X"B5D000000581E4BC081000060000110A155A0006000600060006004200740002", + INIT_02 => X"000959D19C274612555555558600000001AD000000006B60000000120541D009", + INIT_03 => X"00176555560F45581050E6005D955555583D155560F955579000000000002000", + INIT_04 => X"811417206084505C818201B03D00174C00005DC0000000331557D00F94003980", + INIT_05 => X"05904844505C8182114172060811417206084505C818204505C8182114172060", + INIT_06 => X"00B95D4956847059025610062B41597E299E04403812086A800816305B801AB3", + INIT_07 => X"16159116405B452D7501664AC09D5E01854D00657D01599654685565C7F75B44", + INIT_08 => X"5B405444511054691C433355D45496618696555B86456D155784919B25916159", + INIT_09 => X"970A02C57472B208C4E68B5073F10827B8D166E7551A574890E7B45841D905B8", + INIT_0A => X"6608B8000D640598E4514E75D5599B9D54695D15555904C55955628C08C3901A", + INIT_0B => X"C00B65A3002C1BE880B25A3002E96FA02CB02E9C30CB670268CB22CAE16696E1", + INIT_0C => X"356F85644232302C85304B02CBE7201284D6591C100B20C8302FA0CCBEB32C68", + INIT_0D => X"5A1BF03D468501103796DC24564AC421C50C30C3550C59841859454D1161632D", + INIT_0E => X"85D4D448590820161C5B595667C5A5B00581FCE8121643C16C95DA45B0D65418", + INIT_0F => X"985951471451596F6CB8120458A153154515546A2F45996E0059061061011525", + INIT_10 => X"659969F546555451534615B81D455DA5981400574554574665B551AAF5F542E5", + INIT_11 => X"6E55514D618A545D4CF26151450565984400574554574665B151AA555CD50306", + INIT_12 => X"615B4500879C03135F4F516357E04A6598053058E04058E495F4D4C818A5A16D", + INIT_13 => X"2B06D5689712598E0D3485815598E5986439C031312585AA184862965D454615", + INIT_14 => X"5C56557980C2D511356D69554E245A019110147CD1668D555F16CD6E18AD5981", + INIT_15 => X"4547156A05B44C709165B5058C4155014151861854578151255C0A1E1890E155", + INIT_16 => X"2C2148055859485162900507A804095DA5159403033C58A4458A051A45469451", + INIT_17 => X"D65165D65D4559653465B062850D534657E159901662056619D03156BAC41061", + INIT_18 => X"B40CA027558966CDB0B5594581EB405406459A4355D1A9405265B84963061695", + INIT_19 => X"B88C400052E3616445894869665813035A621616A3C160716E0031309D5A160E", + INIT_1A => X"85810003DF1055A137F7C24592C0B0534655B4753E2568459918A017D1809655", + INIT_1B => X"2ABF45A916115A458456916115A458456916D15A4584569161554844B32CD4D2", + INIT_1C => X"90665146A34835B4405B2243F45997E25841667C00140D3415982F3F5F100D16", + INIT_1D => X"914458A14585B58D0505057316525381649A743537DD175394E25B7DD251A445", + INIT_1E => X"564156596A42E5216D10D5B16F1195145157D6798BF562805801602E55501859", + INIT_1F => X"55955BA2D8F159910159565D4D217E105A5995016785D8328160E61156594E90", + INIT_20 => X"ED891416A5952D91D6561D652197FA6617D2065983117557579455155B50B645", + INIT_21 => X"96D1C15CCF5965D07595875966192514156597A438065D59859925A5D55A7182", + INIT_22 => X"86601098427198040F00102D2065F4638C0066147C25890194D197D1A48D6E32", + INIT_23 => X"2F10BD01DBE980D133F4660103040C10F04001DBE98040CF435E60123048C109", + INIT_24 => X"41CC71F0461277C043200020184454DCA90C7D198042D31F466010B440F10BC4", + INIT_25 => X"00000C00000000000000003CEAAAAAAAAAAAAAAA95555555555555540D14D180", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000B70000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(19 downto 18), -- Port A 2-bit Data Output + DOB => memBRead(19 downto 18), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(19 downto 18), -- Port A 2-bit Data Input + DIB => memBWrite(19 downto 18), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM10 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"00000000000200000042000800000003000A0000000A00000000038300200000", + INIT_01 => X"300AAAAAA020C232008800040000088008000000000000000000000800020000", + INIT_02 => X"AAA00002000008000000000000AAAAAAA8042AAAAAAA010AAAAAAA8020080088", + INIT_03 => X"AA800000008F00020208C0AA00000000023C000008F00000088CAAAAAAAA0AAA", + INIT_04 => X"0002830A0A000A0C282820323C2A800CAAAA00E2AAAAAA330000C88F02AA302A", + INIT_05 => X"8C0800000A0C2828002830A0A0002830A0A000A0C2828000A0C2828002830A0A", + INIT_06 => X"00300020200000C0A1000A0C000002088CA200005C130CB400003000030080C3", + INIT_07 => X"020002302E0320083088002282802C00880C88C83C880000C000083000800320", + INIT_08 => X"0322C80CE030C20033203A80C2CB0000E00022030A800C830F0A2321A0082000", + INIT_09 => X"020C00407253203845C00010EF0EF6002003008C60406000008C08C000200030", + INIT_0A => X"000003AAA80820008C020809000002318101802138028CC00E20000838403030", + INIT_0B => X"4202C0C108040C8010241C108090720804C0093413A20D00B042004C0C0000C0", + INIT_0C => X"802D008C8E130004D020800042893401283000252C01344D1008344020C13030", + INIT_0D => X"008A4000100000328380C228C82C20A028000000063200023000082C800000C0", + INIT_0E => X"02A8408800BCD830040300828028A0328C009022AA0000000EA0800030C08030", + INIT_0F => X"00A0000A0008280C031A0E8000000B8020C18000808C083C0A000C08C0A20800", + INIT_10 => X"000000808C9540880F24C0F0A0183C8000A2A0C78C78C68C90B000080080A800", + INIT_11 => X"0C100020230080883C080804208C8000A2A0C78C78C68C90B00008020822A882", + INIT_12 => X"880720A2880288820F00008800C0A800008070C0C0A8C0C140320BE030002868", + INIT_13 => X"A00C000080A0000C0A120C004000C000880028882000002E3028C0000C208C00", + INIT_14 => X"02A03008AA200022008010800C001222002A3008243000041C40D082300C0002", + INIT_15 => X"20808202003208CF6300308C0EA32823032C208220030202210210BA32028B30", + INIT_16 => X"08D080B10000B62300200C028200260C0080C20B80FF0000000030003800020C", + INIT_17 => X"C084080080080020322030C02A200B2401C0000880028000200AA000258210C8", + INIT_18 => X"82A22200A08000200A0A0820C2282A1A8CA0000800C90280080030A00B8C0000", + INIT_19 => X"7038030C21E023288C0238C80023663238A100000C2002080C000822021200A2", + INIT_1A => X"8C0C088083000C003020CD8C08382EA2083032C0008420000A3000C0C8000020", + INIT_1B => X"00F08C08A0A3022828C08A0A3022828C08A023022828C08A08280A2C0D0B6882", + INIT_1C => X"00C800000108003200820121208428084F63002088280880B000FC0A230B8800", + INIT_1D => X"088000002000300C8C0CB208838A0300000AA21072EA030B82C00F2EA2000820", + INIT_1E => X"802328022802E2A80C8AE0300F2320023A02C0294F080038C023003C03080E00", + INIT_1F => X"206003248E340008E002008C3C903C08020008E00380E000E30008A328021E00", + INIT_20 => X"ECAA3232802208C0C0808C386200BAA2C3C8E20012002B0B0281206003082300", + INIT_21 => X"00C82C04338C00893020230E2220EA32328022800A22AC00000AA020E00200AA", + INIT_22 => X"8BAA2AC8AB22EA8AAA3AAAABAEF12242EAEEFAAAEAEAB9EB858904893FB00C38", + INIT_23 => X"B62ADAAFAAAEA88604013AA2AD8AB62AA8AAA3AAAEA8AB6ECAA3AA299CAE72AC", + INIT_24 => X"FA8BABAAF8BEAEACBAC0AABBF88B3FAB8FC1804EA8AB706013AA2ADCAA22AD8A", + INIT_25 => X"00000C00000000000000003CC00000000000000000000000000000000B05893B", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"00000000000000000000000000000000000000000002C0000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(21 downto 20), -- Port A 2-bit Data Output + DOB => memBRead(21 downto 20), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(21 downto 20), -- Port A 2-bit Data Input + DIB => memBWrite(21 downto 20), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM11 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"010002800005000000C1008400000003002100000021040000000B0B00000080", + INIT_01 => X"300555555818C13E024600280002446044400000000000000000001400210008", + INIT_02 => X"5558001502C05488000000002055555554085555555502055555554490240A60", + INIT_03 => X"55400000005F20014925C05500000000017C800005F080001652555555554555", + INIT_04 => X"284143450521050D141494397C95402E555500D95555557B8000D65F09557015", + INIT_05 => X"4C06A011050D1414841434505284143450521050D1414A1050D1414841434505", + INIT_06 => X"08300810202228C05A80858C82220C544955A62AAEABAEBA2AA230A8232640C7", + INIT_07 => X"81820930112311843064801515403C98683C64CC3C642000820254B002222311", + INIT_08 => X"2319C42EE8BAC200709BF860C11608091088112325648C440F25531652041820", + INIT_09 => X"0AAA64A0B1AA88B6AE80A0F9CB0D89600123002ED080D0A1082E04C2601C8232", + INIT_0A => X"80B1F855540592024B086067802000BB42034297B9016AC008640821B6A83830", + INIT_0B => X"A590C3A6964A7A3129083A696430E8864AA6423AE830CEA4A9A084AA0C8048C8", + INIT_0C => X"402E609E6DA6824AA1855024A08AA99B160820AA6292A9AA6A4229A908A6A9E9", + INIT_0D => X"0155C680202440B64308D144C55D125014820820088920293200203C44080420", + INIT_0E => X"21158224204A263099232052441402364C257115550828288DD0801236C05232", + INIT_0F => X"025008204204448D20BD0F420204075350030300404C042C95208C84C8591480", + INIT_10 => X"120000824C6A82140F18C0B258202D42025358CF4CF4CF4C70F6080202425682", + INIT_11 => X"2D2E0814132042102D960C0C114C42025358CF4CF4CF4C70F608020811195469", + INIT_12 => X"140F1159658164C80B60264402C9144202E0B8C2CA74C2C6C0F140DA32001498", + INIT_13 => X"508C820240D8202CA5A58C268202C2024698164C8BB0201D3214C8120C114C82", + INIT_14 => X"41582246551A8099826834902C91209986B53201DC3018282FC8F041320C2024", + INIT_15 => X"14404302823121C09300314C2D531653231C1041590B25085301B0E5318547A2", + INIT_16 => X"812A614202024993081A8C9343921D0C01408167603C02062020808004200508", + INIT_17 => X"C048048048202080B140B8C815580B1803C9200648096080914544201F19B8C4", + INIT_18 => X"635309A05A60803045A50814A916352D4C51801602C6196216023258074C8000", + INIT_19 => X"B2642B997AD453154C2904C48011F864F8BA80800C1809048C988C8B81208071", + INIT_1A => X"4C2886A01F5A0808B007D24C040A0258047231C180889E2205320603C46A4810", + INIT_1B => X"80704C945513251544C945513251544C945513251544C9455031215D42809601", + INIT_1C => X"08C528201A2E02316950461B05582C08889300706A9690E6B2029C005E94E8C0", + INIT_1D => X"044202085020302C4C8C718442140B248247C1B0F4D18206C3C90B4D15080612", + INIT_1E => X"4813140150A9C5588C5692388F9310815542C81567040804C25309BC02058D20", + INIT_1F => X"80842348197820041901405C3C782C95012004188320C6849309555314016C2A", + INIT_20 => X"CC55313140158184C0404C219A25715003C510202846A50F6A46008423460610", + INIT_21 => X"08C41C890A4D24963010130841A215313140150A91905D2022045012D6015414", + INIT_22 => X"4050001400501400051411551455445144445554554505515511551140808CB4", + INIT_23 => X"0500154555414015155545000500140050004155414001414154500154015001", + INIT_24 => X"5545515054551554015400055445555541451551400051455450001400500140", + INIT_25 => X"00000C00000000000000003CC000000000000000000000000000000001151151", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(23 downto 22), -- Port A 2-bit Data Output + DOB => memBRead(23 downto 22), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(23 downto 22), -- Port A 2-bit Data Input + DIB => memBWrite(23 downto 22), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM12 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"039A019A000D000B001200DA0007023A001E000F001E0FDA000F0BD9003C00CC", + INIT_01 => X"B69555554C5750DF077600150001D65619160003000B0003000B007E00620009", + INIT_02 => X"554C39042084105A00000001DD55555555D955555555769555555565615EB5BE", + INIT_03 => X"554AAC0000192000620183552AB000000064800001B8800A0819555555549555", + INIT_04 => X"686F8AA55961BE2A9565862064954A8855552A255555506A800A481B855060D5", + INIT_05 => X"0F947491BE2A956586F8AA559686F8AA55961BE2A9565A1BE2A956586F8AA559", + INIT_06 => X"55E4555D553130F9471D940D531356044986430CC330E31F333C3E346A848391", + INIT_07 => X"35D6B03E5162555DD551BE454D416A32594950D1695D6F969D55D0B050106257", + INIT_08 => X"6A55650674135555948D2557551899E1D319DC6686C599575286C34146735D6B", + INIT_09 => X"0B511375E55C5CCB20300054564209022543E5E74557415004E410F8141746E8", + INIT_0A => X"AE0A5E5545D396F84475FC1100639791155105719777D7445735D550CB8C5434", + INIT_0B => X"704D5111C1371164C4DA119C13584551371134971C79E5D3C571D371018C5BA1", + INIT_0C => X"994753E402D391371FF80D1371A5C46D51346795104DC671DD378774DE15C546", + INIT_0D => X"5B5A9011555CD497541A5760FB60D8541C4D34D354C86B843665D9495DD99522", + INIT_0E => X"64695D546782203E03646F924107E6D50F86A6360919C905A7E55556E49D9436", + INIT_0F => X"B8440DDE1D5511B9048D4B53755C343160951559A40F957A056F0D90D94114C7", + INIT_10 => X"D679D4140D155DD85255D5E851D14116B87360F80F80F00D0537757F43D40796", + INIT_11 => X"7410755803559DF9600C1C55540FD6387360F80F80F00D0534757C75D144000D", + INIT_12 => X"D8525415078455CE5804350557A1910638D530F845D0F840E5651B0C35474055", + INIT_13 => X"450D5D5551C06F8451150F8B46F8467840C8455CEC0766083640D5A775540D9D", + INIT_14 => X"C435C39600054001D41427915A29110183343D0001D5B8055FDAF500354C6B86", + INIT_15 => X"5E50155F46A5765083E7050F8583D043C3C4D34D43568A75400001C83704D943", + INIT_16 => X"092310E176738BC3E0850F1317C143755645556B5856754057556754DDD55B55", + INIT_17 => X"1D05D35D25D36BE56595F0D52318565417A1679C5AE171AE108065D5B81070DC", + INIT_18 => X"137710413751AC75D19455584241371D0D284586159535150C16284DD40D9740", + INIT_19 => X"68B51C594F5503C60F85C0DDBE728B201C6CDD960905D341AA04DCE847119D04", + INIT_1A => X"0F8C5FD0CDD555441033720F9048321F20C6655390C4D1167C355C5495C159F5", + INIT_1B => X"54650F25F943C97E50F25F943C97E50F25F943C97E50F25F99553100D20C86C8", + INIT_1C => X"B0D3CDD5C10D16651A0001CA4C27190C4C83E467FD85FC2686B8D90E8F841C1D", + INIT_1D => X"9B517557476727680F0FB03495F05689BECE30C59D995556D6A05DD991756036", + INIT_1E => X"9AC3CC76F058CBDDA96706F9BF837755E8D719DE3645D500F8C3E26C15549C6B", + INIT_1F => X"75776F40CEB46F9098761DF5694D6A1D776B9C198FF7418483E18F83EC767C15", + INIT_20 => X"CF6C3C3EC76E0CC7DD9D71515318703B9794416707741951E1AF35776F3A3327", + INIT_21 => X"1995184149CDC7DFA76748564D310C3C3CC76F45BAFA416F86F01755E5775604", + INIT_22 => X"C13000BC02E04C002D999D80225BDDC38B0652041E3E0C672F772F7700859A10", + INIT_23 => X"3900D6125104C0BE1369130006001000D000C25104C001872DE13009E407500B", + INIT_24 => X"9B24DA1D155701E2091800057049300F44449A44C003B116913000DC02D00F40", + INIT_25 => X"00000C00000000000000003F00000000000000003FFFFFFFEAAA954314EF7729", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"00000000000000000000000000000000000000000002B0000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(25 downto 24), -- Port A 2-bit Data Output + DOB => memBRead(25 downto 24), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(25 downto 24), -- Port A 2-bit Data Input + DIB => memBWrite(25 downto 24), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM13 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"048000800000000200D00184000A017000000002000011200002000000180188", + INIT_01 => X"7C5555555854138606440000000108641104000E0006000A0002005000C00000", + INIT_02 => X"5558042D08A0B41A00000001AD555555549155555555E41555555541A0206648", + INIT_03 => X"55715C000240F00919240F55C57000000903C000243480300640555555555555", + INIT_04 => X"405C8182114172060845114903D571635555C5955555590C80300643455903D5", + INIT_05 => X"5B801D017206084505C818211405C8182114172060845017206084505C818211", + INIT_06 => X"CF9158A961AC95B82D05825991BD5A818146BA784E178E05EE196D1F5140921C", + INIT_07 => X"B005756E115DA14862955E25811175003146959146905384061691264ACA55A0", + INIT_08 => X"59A42C80120D1614043907018A5255D15255DD5D458556865145564855BB005F", + INIT_09 => X"01CCB2259A0B2392C28EB25C2C44439D7556E1C065846DC42FC145B4B017F5D4", + INIT_0A => X"5D045055085455F440192D596B5B87059615B7094314F0445810596FD2990D67", + INIT_0B => X"2AFAD9C0AB629CBFAFADDC0ABEB572DBE2CBEB0208A280BA712A3A2C017F5451", + INIT_0C => X"11556380E4B31F22CC8459F22A00B2C9AD2F53440AC8B22C8BAA332CA8CCB170", + INIT_0D => X"20521D116161320750D75445BA63043113F3CF3C5A8353456600614680580100", + INIT_0E => X"61C0465D5B55056D2C59536A410615565B4484160756D1354445850590451166", + INIT_0F => X"34540464C6282165840F2FC01644185361165611845B8175155F598598574301", + INIT_10 => X"95B81610590006D555A145D454614515B44D55B85B05B059451518414910F155", + INIT_11 => X"754218A4566586A15676D758A25B95745945B85B05B05945151841195403B8C5", + INIT_12 => X"D551A2D57526556851549CC515512185746555B44C55B454651AD2896651552D", + INIT_13 => X"8559861581715344E5155B4405F4557449226556808162B96615991018A25946", + INIT_14 => X"26810900EE302D971042C7156514441D7E116C47006114D165575485665C5744", + INIT_15 => X"A0C05611F51A011016E3015B4416DC56D6D50410605144194847857167575649", + INIT_16 => X"8501D75816390056D02C5B13154B001851558A06B000164401658184C0614458", + INIT_17 => X"0574554574665B151AA515999DD755A194515B8256D1855D195248612057559C", + INIT_18 => X"294541ADD1C95F545C0658A6DD729444592D35B5D46841BCF6D5145056598440", + INIT_19 => X"149C18D3853DD6ED5B46C5954E2306988017058001305075452D168064440507", + INIT_1A => X"5B45DE3E255C5866C889405B844000F7C4859A19500318D5F56654D4686755D5", + INIT_1B => X"94C55B661556D98555B661556D98555B661556D98555B6615966998090003DF1", + INIT_1C => X"3592E46160BFE5DAB10482E8425701001416E005E33F6F15057471E127141505", + INIT_1D => X"80C9165B516301415B5B0701161251457D340D55D4531628D7525D4509184AA5", + INIT_1E => X"16D6E0146835CA997694559D7456518A815556F59C405905B416D01856291657", + INIT_1F => X"8587514864C4538C5A1605E146B57504145784994C01A31416D14956D0141E0C", + INIT_20 => X"CD516D6D0145C6464505A965E90EB3E9566B0C5F1536A2596A25058759A61921", + INIT_21 => X"5468563D4019C7D5514156594E90616D6E0146C37529415345B4115925148658", + INIT_22 => X"01C0003000C07000268DD053D75C7D13203354162007003471F473F46485451C", + INIT_23 => X"020009137507003F200E1C000C003400D00003750700030D29C1C00BC00F0003", + INIT_24 => X"CC244C4D1D8522020A340015444E300FD448038700000200E1C0000002D00080", + INIT_25 => X"00000C00000000000000003F2AAAAAAAAAAAAAAA95555555555555541931F475", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(27 downto 26), -- Port A 2-bit Data Output + DOB => memBRead(27 downto 26), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(27 downto 26), -- Port A 2-bit Data Input + DIB => memBWrite(27 downto 26), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM14 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"000A000A00020008000A0002000400B2000A0008000A008A000C000A00100010", + INIT_01 => X"3C00000002000B2100020000000000020882000C000800000004000A00060002", + INIT_02 => X"0002800A00C02800AAAAAAA80400000003080000000042000000000008082020", + INIT_03 => X"00300EAAA808FAA00C008F00C03AAAAAA023EAAA80B02AB22008000000000000", + INIT_04 => X"2A0C2828002830A0A000802023C0303B0000C0000000002E2AB2200B000023C0", + INIT_05 => X"0302A00830A0A000A0C2828002A0C2828002830A0A000A830A0A000A0C282800", + INIT_06 => X"322C0000000F2030098C00000AC20218800000408020003A00A00C9008220000", + INIT_07 => X"3000B00C08080028C0002C008CC030B82000000000000B0A0C00001031310403", + INIT_08 => X"080003203C800000000302230088C3CB2C00CF0420E030020020000200F3000F", + INIT_09 => X"0284200000013410000200FB000402024000C082C002C087A08260320D0F0002", + INIT_0A => X"1C88F20068CB00320032CA23C00F020B000B0203C230201A00B0C00610320001", + INIT_0B => X"00830340024034CA0830340020C0D302C0420C0001C30028D0036C04002D0108", + INIT_0C => X"CC390F8224230200473B002007401083A38D0B0080801204828C120B304810D1", + INIT_0D => X"2B020380000CCE810202820030002ACC0B082082000003200008C80000C02802", + INIT_0E => X"004C8C800F22000C8E0E072BB02AA0A003228022B000F80018400000228C0000", + INIT_0F => X"7202A8CC8C002008E004CD363022A22F0A808008200300308807000000200D83", + INIT_10 => X"4070A00200000C00000240C208C0188072012030030030004022302201020A80", + INIT_11 => X"3802300200028CA00A8A040000030032012030030030004022302232C0A80B28", + INIT_12 => X"000000000880004802201A200008A820F24020320800321260002A2000232800", + INIT_13 => X"A0008C000C4A0B208080032230B210720008000488830208000000823000008C", + INIT_14 => X"0008812A02CA808202280340308C0A8280900FC200C08BE03940902800240B22", + INIT_15 => X"0234800B00400A0000C3A0032000C200C0C820820A0022322904885000800281", + INIT_16 => X"2209082030310040C888038181680230000000030082302223002302E8C00200", + INIT_17 => X"0C78C78C68C90B0000802000A02800020008070001C8203C880808C0A0281003", + INIT_18 => X"A121A82029842D1002A00002420A1204002880CA000088080A004208C8000A2A", + INIT_19 => X"0233E882882000C80320E0080C0E0A284C208C024008C0AC10800488800A8C00", + INIT_1A => X"032E0CC0840800023421000303022020C080C00080C20BA070002200000E03C0", + INIT_1B => X"0B000302E000C0B800302E000C0B800302E000C0B800302E0808E84000880830", + INIT_1C => X"B002E8C088442000220300C83023800C1400C300CC0A33000032C00B0700280C", + INIT_1D => X"003630032303A32803032088808800201CC82C30E08A000243080E0882302220", + INIT_1E => X"82C0C8322820D2881003602C1880230035C081C88008C0A032C0C80E00000C0B", + INIT_1F => X"20230E18800B030389304CE000303088320703880C23280000C88880C8322E08", + INIT_20 => X"DE080C0C8320883A8C8CA008A00036AA8300AE0F0221300E1312E0230A2220E3", + INIT_21 => X"03000BCE003CC3C2A32328021E00880C0C83228208AAA00720B0E32A223212A9", + INIT_22 => X"0ABA2A90AA42AE8AB02AAEFA8AC18042EFAACFBAAB4AAEAB060104013F402082", + INIT_23 => X"AC2AB3AAAEEAE8940911ABA2AB8AAE2AB8AAE2AEEAE8AAE84B2ABA2DB0A6C2A9", + INIT_24 => X"AB4EAAEAB2AAAAB4BA84AAAAB08BAAAA2A42C46AE8AAD0B11ABA2AB4AB42AB0A", + INIT_25 => X"00000C00000000000000003F000000000000000000000000000000002E06012A", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000170000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(29 downto 28), -- Port A 2-bit Data Output + DOB => memBRead(29 downto 28), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(29 downto 28), -- Port A 2-bit Data Input + DIB => memBWrite(29 downto 28), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM15 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"012501250005000C00850021000C04790015000800150445000C06A500A20022", + INIT_01 => X"3E0000000102861A0021001A000062014461000800080008000C000500090005", + INIT_02 => X"00016181A9A606405555555408000000020400000000C1800000002406860012", + INIT_03 => X"00380D555416F5504C816F00E0355555505BD555417215799015000000000000", + INIT_04 => X"150D141484143450521044505BC038370000E0000000005D1579901720005BC0", + INIT_05 => X"232560943450521050D141484150D1414841434505210543450521050D141484", + INIT_06 => X"00220200080CA232424C242006C10156652140C2A0A8208A00A08C600C152802", + INIT_07 => X"7960B48C94080954C8002C90603830464420020820060B290C804A2B0A8A0808", + INIT_08 => X"0801A099B260808262038663204603C45802DC0C111020210811482500B7960F", + INIT_09 => X"B21A08408092A834489A08F2B02D6019E008C8D9C021C81E70D9D231028F00C1", + INIT_0A => X"3C65F50054C400B126310D53AA0B236700872053A93255150278C00D7442A482", + INIT_0B => X"40229BA900843AA20229BA9008A6EA90C4A08A6493A69908EA4E884AE83E0304", + INIT_0C => X"083213991D0B0084AC3620084E992813008A0B666021294A508A694329A528EA", + INIT_0D => X"941900480802026609C30522351855428704104100200F1080A4C42028C29489", + INIT_0E => X"09924C500B55848C49080F5E48945081231541904403C48021D020A0854C8880", + INIT_0F => X"F11354CE4C829821D2282A093015515E4540408412232430540F202202542263", + INIT_10 => X"C0B252C920AA8C820809A0C114C82140F11A123A23A23A20A08132192B490540", + INIT_11 => X"31A9320188014C4821458A02082340F11A123A23A23A20A08132193189540F14", + INIT_12 => X"82080840056000820852B53082055430F180823121423135908045108013168C", + INIT_13 => X"50204C8060860B121484231580B130B12056000826630914809200493208204C", + INIT_14 => X"60147B5503C56A444956B3C8304DAD4164688CA9A8C840D832822238801B0B15", + INIT_15 => X"050A408700809D8A08CB58231148D108C8D65965050811315FBC68B48264017B", + INIT_16 => X"3987081A30B361C8C641238A42DC6932092020630669301593001321D4C82502", + INIT_17 => X"8CF4CF4CF4C70F60802082005016080982040F2403C4582C4D2424C852942208", + INIT_18 => X"5A12D4581F1C3F2241500201C105A1AA20896085820254018580C114C4202535", + INIT_19 => X"81709601658808D02311D2042C992E2EAE684C29A084C9682040482661AD4CA0", + INIT_1A => X"231F1CC0888102070A2228232621A807D66080894AE65C90B4801182024003D0", + INIT_1B => X"060023511408D445023511408D445023511408D4450235114405D4AA486A01F5", + INIT_1C => X"F208D4C846C8108005EA29C4245760AE6A08CA81CC005E9120F1C00A4B12968C", + INIT_1D => X"26093003130B531623235855404608102D249870C644408183040C6451321180", + INIT_1E => X"42C8D6310685E5402010908C22081320554202D55024C0523108C58D80818C0F", + INIT_1F => X"1013086689640B2442308CC820343062310B24402E93142648C56148D6315DA1", + INIT_20 => X"ED148C8D631068854C4C500542A579414301690F86B5240C527110130841A213", + INIT_21 => X"82028B29217CE3C1531314016C2A548C8D6310685441680F10F6131181315052", + INIT_22 => X"4150005401505400051555515555155155055515155504555455555540A03041", + INIT_23 => X"1100451145454055115515000500140050004145454001414151500144051005", + INIT_24 => X"5544555515551154011400155405100554441545400111055150004400500440", + INIT_25 => X"00000C00000000000000003F0000000000000000000000000000000015545555", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(31 downto 30), -- Port A 2-bit Data Output + DOB => memBRead(31 downto 30), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(31 downto 30), -- Port A 2-bit Data Input + DIB => memBWrite(31 downto 30), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); +end dualport_ram_arch; diff --git a/zpu/hdl/zpu3/src/xmake.filelist b/zpu/hdl/zpu3/src/xmake.filelist new file mode 100644 index 0000000..3d0a779 --- /dev/null +++ b/zpu/hdl/zpu3/src/xmake.filelist @@ -0,0 +1,5 @@ +vhdl zylin "zpu_config.vhd" +vhdl zylin "zpupkg.vhd" +vhdl work "dmips_ram.vhd" +vhdl zylin "zpu_top_bram_intstack.vhd" +vhdl work "testlut.vhd" diff --git a/zpu/hdl/zpu3/src/xmake.xst b/zpu/hdl/zpu3/src/xmake.xst new file mode 100644 index 0000000..bfdb23f --- /dev/null +++ b/zpu/hdl/zpu3/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/zpu3/src/zpu_config.vhd b/zpu/hdl/zpu3/src/zpu_config.vhd new file mode 100644 index 0000000..506121c --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_config.vhd @@ -0,0 +1,25 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +package zpu_config is + + constant Generate_Trace : boolean := false; + -- 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"; + -- maximum address includes upper bit for IO registers + -- the rest is RAM + constant maxAddrBit : integer := 14; + constant minAddrBit : integer := 2; + -- 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 ioBit : integer := maxAddrBit+1; + constant wordPower : integer := 5; + constant wordSize : integer := 2**wordPower; + +end zpu_config; diff --git a/zpu/hdl/zpu3/src/zpu_pipelined.vhd b/zpu/hdl/zpu3/src/zpu_pipelined.vhd new file mode 100644 index 0000000..207939d --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_pipelined.vhd @@ -0,0 +1,852 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +use IEEE.STD_LOGIC_arith.ALL; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + + +entity zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end zpu_top; + +architecture behave of zpu_top 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 busy : std_logic; + +signal begin_inst : std_logic; + + + +signal trace_opcode : std_logic_vector(7 downto 0); +signal trace_pc : std_logic_vector(maxAddrBit downto 0); +signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); + +type DecodedOpcodeType is +( +Decoded_Stall , +Decoded_Nop , +Decoded_Im , +Decoded_ImShift , +Decoded_LoadSP , +Decoded_StoreSP , +Decoded_AddSP , +Decoded_Emulate , +Decoded_Break , +Decoded_PushPC , +Decoded_PushSP , +Decoded_PopPC , +Decoded_Add , +Decoded_Or , +Decoded_And , +Decoded_Load , +Decoded_Not , +Decoded_Flip , +Decoded_Store , +Decoded_Storeb , +Decoded_PopSP , +Decoded_Ashiftleft , +Decoded_Ashiftright , +Decoded_Lshiftright , +Decoded_Eqbranch , +Decoded_Neqbranch , +Decoded_Eq , +Decoded_Neq , +Decoded_Loadb , +Decoded_Lessthan , +Decoded_Lessthanorequal , +Decoded_Ulessthan , +Decoded_Ulessthanorequal , +Decoded_Duplicate , +Decoded_Duplicate2 , +Decoded_Duplicate3 , +Decoded_MoveDown, +Decoded_MoveDown2, +Decoded_MoveDown3, +Decoded_Pushspadd, +Decoded_Callpcrel, +Decoded_Sub +); + + +signal decode_pc : std_logic_vector(maxAddrBit downto 0); +signal decode_fetchedPC : std_logic_vector(maxAddrBit downto 0); +signal decode_fetched : std_logic; +signal decode_opcode : std_logic_vector(OpCode_Size-1 downto 0); +signal decode_opcodeWord : std_logic_vector(wordSize-1 downto 0); +signal decode_starved : std_logic; +signal decode_wordStarved : std_logic; +signal decode_willBeStarved : std_logic; +signal decode_idim_flag : std_logic; + +signal execute1_stall : std_logic; +signal execute1_fetched : std_logic; +signal execute1_decodedOpcode : DecodedOpcodeType; +signal execute1_fetchedPC : std_logic_vector(maxAddrBit downto 0); +signal execute1_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal execute1_opcode : std_logic_vector(opCode_Size-1 downto 0); +signal execute1_spOffset : std_logic_vector(4 downto 0); +signal execute1_fetchPC : std_logic_vector(maxAddrBit downto 0); +signal execute1_push1 : std_logic; +signal execute1_push2 : std_logic; +signal execute1_pop1 : std_logic; +signal execute1_pop2 : std_logic; +signal execute1_antialias : std_logic; +signal execute1_savedTopOfStack : std_logic_vector(wordSize-1 downto 0); + + +signal load_decodedOpcode : DecodedOpcodeType; +signal load_opcode : std_logic_vector(opCode_Size-1 downto 0); +signal load_spOffset : std_logic_vector(4 downto 0); +signal load_stall : std_logic; +signal load_willBeStalled : std_logic; + +signal execute2_opcode : std_logic_vector(opCode_Size-1 downto 0); +signal execute2_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal execute2_addResult : std_logic_vector(wordSize-1 downto 0); +signal execute2_topOfStackB : std_logic_vector(wordSize-1 downto 0); +signal execute2_pc : std_logic_vector(maxAddrBit downto 0); +signal execute2_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal execute2_loading : std_logic; +signal execute2_loadByte : std_logic; +signal execute2_storeByte : std_logic; +signal execute2_loadingDone : std_logic; +signal execute2_decodedOpcode : DecodedOpcodeType; +signal execute2_spOffset : std_logic_vector(4 downto 0); +signal execute2_persistTopOfStack : std_logic; +signal execute2_persistTopOfStackB : std_logic; +signal execute2_resync : std_logic; +signal execute2_resync2 : std_logic; +signal execute2_resync3 : std_logic; +signal execute2_resync4 : std_logic; +signal execute2_resync5 : std_logic; +signal execute2_resync6 : std_logic; +signal execute2_resync7 : std_logic; +signal execute2_resync8 : std_logic; +signal execute2_resync9 : std_logic; +signal execute2_resync10 : std_logic; + + +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 + ); + end generate; + + + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr, + memAWrite => memAWrite, + memARead => memARead, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr, + memBWrite => memBWrite, + memBRead => memBRead + ); + + opcodeControl: + process(clk, areset) + variable compareA : signed(wordSize-1 downto 0); + variable compareB : signed(wordSize-1 downto 0); + variable execute1_doFetch : boolean; + begin + if areset = '1' then + break <= '0'; + begin_inst <= '0'; + memAAddr <= (others => '0'); + memBAddr <= (others => '0'); + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + + memBAddr <= (others => '0'); + memBWrite <= (others => '0'); + + + io_writeEnable <= '0'; + io_readEnable <= '0'; + io_addr <= (others => '0'); + io_write <= (others => '0'); + + -- stage 1. Don't care since this is driven by stage2 + decode_pc <= (others => '0'); + decode_fetched <= '0'; + decode_starved <= '0'; + decode_opcode <= (others => '0'); + decode_opcodeWord <= (others => '0'); + + -- stage 2. + execute1_antialias <= '0'; + execute1_fetchPC <= (others => '0'); + execute1_fetched <= '0'; + execute1_decodedOpcode <= Decoded_Stall; + execute1_sp <= (2 => '0', others => '1'); + execute1_push1 <= '0'; + execute1_push2 <= '0'; + execute1_pop1 <= '0'; + execute1_pop2 <= '0'; + execute1_stall <= '1'; + + -- stage 3 + load_decodedOpcode <= Decoded_Stall; + load_stall <= '1'; + load_willBeStalled <= '1'; + + -- stage 4 + decode_idim_flag <= '0'; + execute2_pc <= (others => '0'); + execute2_sp <= (2 => '0', others => '1'); + execute2_loading <= '0'; + execute2_loadByte <= '0'; + execute2_storeByte <= '0'; + execute2_loadingDone <= '0'; + execute2_decodedOpcode <= Decoded_Stall; + execute2_resync <= '1'; + execute2_resync2 <= '0'; + execute2_resync3 <= '0'; + execute2_resync4 <= '0'; + execute2_resync5 <= '0'; + execute2_resync6 <= '0'; + execute2_resync7 <= '0'; + execute2_resync8 <= '0'; + execute2_resync9 <= '0'; + execute2_resync10 <= '0'; + execute2_persistTopOfStack <= '0'; + execute2_persistTopOfStackB <= '0'; + + -- stage 5 + memBWriteEnable <= '0'; + + + elsif (clk'event and clk = '1') then + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + io_writeEnable <= '0'; + io_readEnable <= '0'; + begin_inst <= '0'; + + -- stage0: fetch + decode_willBeStarved <= '0'; + if (decode_fetched='1') then + -- resync #4 + decode_opcodeWord <= memARead; + decode_pc <= decode_fetchedPC; + elsif (decode_pc(minAddrBit-1 downto 0)=b"11") then + decode_willBeStarved <= '1'; + else + -- we can continue decoding. + decode_pc <= decode_pc + 1; + end if; + + -- stage 0b: move to byte.. + -- resync #5 + decode_starved <= decode_willBeStarved; + case decode_pc(minAddrBit-1 downto 0) is + when "00" => decode_opcode <= decode_opcodeWord(31 downto 24); + when "01" => decode_opcode <= decode_opcodeWord(23 downto 16); + when "10" => decode_opcode <= decode_opcodeWord(15 downto 8); + when others => decode_opcode <= decode_opcodeWord(7 downto 0); + end case; + + -- stage1: decode 1 + execute1_opcode <= decode_opcode; + + execute1_spOffset(4)<=not decode_opcode(4); + execute1_spOffset(3 downto 0)<=decode_opcode(3 downto 0); + + execute1_decodedOpcode<=Decoded_Break; + + decode_idim_flag <= '0'; + + -- resync #6 + -- resync #1 + if (decode_starved = '1') then + execute1_decodedOpcode<=Decoded_Stall; + decode_idim_flag <= decode_idim_flag; + elsif (decode_opcode(7 downto 7)=OpCode_Im) then + decode_idim_flag <= '1'; + if (decode_idim_flag = '0') then + execute1_decodedOpcode<=Decoded_Im; + else + execute1_decodedOpcode<=Decoded_ImShift; + end if; + elsif (decode_opcode(7 downto 5)=OpCode_StoreSP) then + if (decode_opcode(4 downto 0)=b"10001") then + execute1_decodedOpcode<=Decoded_MoveDown; + elsif (decode_opcode(4 downto 0)=b"10010") then + execute1_decodedOpcode<=Decoded_MoveDown2; +-- elsif (decode_opcode(4 downto 0)=b"10011") then +-- execute1_decodedOpcode<=Decoded_MoveDown3; + else + execute1_decodedOpcode<=Decoded_StoreSP; + end if; + elsif (decode_opcode(7 downto 5)=OpCode_LoadSP) then + if (decode_opcode(4 downto 0)=b"10000") then + execute1_decodedOpcode<=Decoded_Duplicate; + elsif (decode_opcode(4 downto 0)=b"10001") then + execute1_decodedOpcode<=Decoded_Duplicate2; + elsif (decode_opcode(4 downto 0)=b"10010") then + execute1_decodedOpcode<=Decoded_Duplicate3; + else + execute1_decodedOpcode<=Decoded_LoadSP; + end if; + elsif (decode_opcode(7 downto 5)=OpCode_Emulate) then + execute1_decodedOpcode<=Decoded_Emulate; + if decode_opcode(5 downto 0)=OpCode_Neqbranch then + execute1_decodedOpcode <= Decoded_Neqbranch; + elsif decode_opcode(5 downto 0)=OpCode_Eq then + execute1_decodedOpcode <= Decoded_Eq; + elsif decode_opcode(5 downto 0)=OpCode_Lessthan then + execute1_decodedOpcode <= Decoded_Lessthan; + elsif decode_opcode(5 downto 0)=OpCode_Ulessthan then + execute1_decodedOpcode <= Decoded_Ulessthan; + elsif decode_opcode(5 downto 0)=OpCode_Loadb then + execute1_decodedOpcode <= Decoded_Loadb; + elsif decode_opcode(5 downto 0)=OpCode_Storeb then + execute1_decodedOpcode <= Decoded_Storeb; + elsif decode_opcode(5 downto 0)=OpCode_Pushspadd then + execute1_decodedOpcode <= Decoded_Pushspadd; + elsif decode_opcode(5 downto 0)=OpCode_Callpcrel then + execute1_decodedOpcode <= Decoded_Callpcrel; + elsif decode_opcode(5 downto 0)=OpCode_Sub then + execute1_decodedOpcode <= Decoded_Sub; + end if; + elsif (decode_opcode(7 downto 4)=OpCode_AddSP) then + if (decode_opcode(3 downto 0) = 0) then + execute1_decodedOpcode<=Decoded_Ashiftleft; + elsif (decode_opcode(3 downto 0) = 1) then +-- execute1_decodedOpcode<=Decoded_AddSP; + elsif (decode_opcode(3 downto 0) = 2) then +-- execute1_decodedOpcode<=Decoded_AddSP; + else + execute1_decodedOpcode<=Decoded_AddSP; + end if; + else + case decode_opcode(3 downto 0) is + when OpCode_Nop => + execute1_decodedOpcode<=Decoded_Nop; + when OpCode_PushSP => + execute1_decodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + execute1_decodedOpcode<=Decoded_PopPC; + when OpCode_Add => + execute1_decodedOpcode<=Decoded_Add; + when OpCode_Or => + execute1_decodedOpcode<=Decoded_Or; + when OpCode_And => + execute1_decodedOpcode<=Decoded_And; + when OpCode_Load => + execute1_decodedOpcode<=Decoded_Load; + when OpCode_Not => + execute1_decodedOpcode<=Decoded_Not; + when OpCode_Flip => + execute1_decodedOpcode<=Decoded_Flip; + when OpCode_Store => + execute1_decodedOpcode<=Decoded_Store; + when OpCode_PopSP => + execute1_decodedOpcode<=Decoded_PopSP; + when others => + execute1_decodedOpcode<=Decoded_Break; + end case; + end if; + + + -- stage 2: execute 1 - load stage. + -- + -- the address must be known without using the value on top of the stack... + -- resync #3 + execute1_fetched <= '0'; + decode_fetched <= execute1_fetched; -- the value in memAAddr will be valid for 1 cycle only + decode_fetchedPC <= execute1_fetchedPC; + + if (execute1_fetchPC(1 downto 0)/=b"00") then + execute1_fetchPC <= execute1_fetchPC+1; + end if; + + execute1_push1 <= '0'; + execute1_push2 <= execute1_push1; + execute1_pop1 <= '0'; + execute1_pop2 <= execute1_pop1; + + if ((execute1_push1 and execute1_push2)='1') then + memAWrite <= execute2_topOfStack; + else + memAWrite <= execute2_topOfStackB; + end if; + + -- resync #7 + case execute1_decodedOpcode is + when Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_Load | Decoded_Loadb | Decoded_Store | Decoded_Storeb | Decoded_Emulate | Decoded_PopSP | Decoded_PopPC| Decoded_Callpcrel => + execute1_stall <= '1'; + when others => + -- nothing... + end case; + + execute1_antialias <= load_stall; + execute1_doFetch := false; + case execute1_decodedOpcode is + when Decoded_PushSP | Decoded_Emulate => + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + execute1_doFetch := true; + when Decoded_Duplicate3 => + memAWriteEnable <= ((execute1_push1 and execute1_push2) or + (execute1_push1 and not execute1_pop2) or + (execute1_push2 and not execute1_pop1)) and + (not execute1_antialias and not execute1_stall); + memAAddr <= execute1_sp + 2; + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + when Decoded_Im | Decoded_Duplicate | Decoded_Duplicate2 => + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + execute1_doFetch := true; + when Decoded_LoadSP => + memAAddr <= execute1_sp+execute1_spOffset; + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + when Decoded_AddSP => + memAAddr <= execute1_sp+execute1_spOffset; + when Decoded_MoveDown2 => + execute1_sp <= execute1_sp + 1; + execute1_pop1 <= '1'; + execute1_doFetch := true; + when Decoded_Ulessthan | Decoded_Lessthan | Decoded_Eq | Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_MoveDown | Decoded_Add | Decoded_Sub | Decoded_Or | Decoded_And | Decoded_PopPC | Decoded_StoreSP => + -- be afraid :-) + memAWriteEnable <= ((execute1_push1 and execute1_push2) or + (execute1_push1 and not execute1_pop2) or + (execute1_push2 and not execute1_pop1)) and + (not execute1_antialias and not execute1_stall); + memAAddr <= execute1_sp + 2; + execute1_sp <= execute1_sp + 1; + execute1_pop1 <= '1'; + when others => + execute1_doFetch := true; + end case; + + if execute1_doFetch then + -- resync #2 + -- some instruction that does not change the stack pointer + -- and does not need use a memory operand. + -- We can fetch the next word to be decoded to avoid stalls + execute1_fetchPC <= execute1_fetchPC+1; + memAAddr <= execute1_fetchPC(maxAddrBit downto minAddrBit); + execute1_fetchedPC <= execute1_fetchPC; + execute1_fetched <= '1'; + end if; + + + -- stage 3: fetching memory takes 1 cycle + -- here we also verify that we've fetched & decoded the right + -- opcode. + -- resync #8 + load_decodedOpcode <= execute1_decodedOpcode; + load_opcode <= execute1_opcode; + load_spOffset <= execute1_spOffset; + load_stall <= execute1_stall; + -- resync #9 + if (load_stall = '1') then + execute2_decodedOpcode <= Decoded_Stall; + else + execute2_decodedOpcode <= load_decodedOpcode; + end if; + execute2_opcode <= load_opcode; + execute2_spOffset <= load_spOffset; + + -- stage 4: execute 2 - we now have both operands. This is the + -- main execute stage... + begin_inst <= '1'; + trace_pc <= execute2_pc; + trace_opcode <= execute2_opcode; + trace_sp <= execute2_sp; + trace_topOfStack <= execute2_topOfStack; + trace_topOfStackB <= execute2_topOfStackB; + + execute2_pc <= execute2_pc + 1; + execute2_loading <= '0'; + memBWriteEnable <= '0'; + + case execute2_decodedOpcode is + when Decoded_PopSP => + execute2_sp <= execute2_topOfStack(maxAddrBit downto minAddrBit); + + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + execute2_resync <= '1'; + when Decoded_Callpcrel => + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1; + execute2_pc <= execute2_pc + execute2_topOfStack(maxAddrBit downto 0); + execute2_persistTopOfStack <= '1'; + when Decoded_PopPC => + execute2_pc <= execute2_topOfStack(maxAddrBit downto 0); + execute2_sp <= execute2_sp + 1; + + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + execute2_resync <= '1'; + when Decoded_Emulate => + execute2_sp <= execute2_sp - 1; + + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1; + execute2_topOfStackB <= execute2_topOfStack; + + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+1; + memBWrite <= execute2_topOfStackB; + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + execute2_pc <= (others => '0'); + execute2_pc(9 downto 5) <= execute2_opcode(4 downto 0); + execute2_persistTopOfStack <= '1'; + when Decoded_Im => + execute2_sp <= execute2_sp - 1; + for i in wordSize-1 downto 7 loop + execute2_topOfStack(i) <= execute2_opcode(6); + end loop; + execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0); + + execute2_topOfStackB <= execute2_topOfStack; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_ImShift => + execute2_topOfStack(wordSize-1 downto 7) <= execute2_topOfStack(wordSize-8 downto 0); + execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0); + when Decoded_LoadSP => + execute2_sp <= execute2_sp - 1; + execute2_topOfStack <= memARead; + execute2_topOfStackB <= execute2_topOfStack; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Break => + report "Break instruction encountered" severity failure; + break <= '1'; + when Decoded_PushSP => + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp; + + execute2_sp <= execute2_sp - 1; + execute2_topOfStackB <= execute2_topOfStack; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Add => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB + execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_Sub => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB - execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_AddSP => + execute2_topOfStack <= execute2_topOfStack + memARead; + when Decoded_Or => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB or execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_And => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB and execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_Load | Decoded_Loadb | Decoded_Storeb => + if (execute2_topOfStack(ioBit)='1') then + io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + io_readEnable <= '1'; + else + memAAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + execute1_fetched <= '0'; + end if; + if (execute2_decodedOpcode = Decoded_Loadb) then + execute2_loadByte <= '1'; + else + execute2_loadByte <= '0'; + end if; + if (execute2_decodedOpcode = Decoded_Storeb) then + execute2_storeByte <= '1'; + else + execute2_storebyte <= '0'; + end if; + execute2_loading <= '1'; + when Decoded_Ashiftleft => + execute2_topOfStack(wordSize-1 downto 1) <= execute2_topOfStack(wordSize-2 downto 0); + execute2_topOfStack(0) <= '0'; + when Decoded_MoveDown => + execute2_sp <= execute2_sp + 1; + execute2_topOfStackB <= memARead; + when Decoded_MoveDown2 => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= execute2_topOfStack; + when Decoded_MoveDown3 => + execute2_sp <= execute2_sp + 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+execute2_spOffset; + memBWrite <= execute2_topOfStack; + + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= memARead; + execute2_persistTopOfStack <= '1'; + when Decoded_Duplicate => + execute2_topOfStackB <= execute2_topOfStack; + execute2_sp <= execute2_sp - 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Duplicate2 => + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= execute2_topOfStack; + execute2_sp <= execute2_sp - 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Duplicate3 => + execute2_topOfStack <= memARead; + execute2_topOfStackB <= execute2_topOfStack; + execute2_sp <= execute2_sp - 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Pushspadd => + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp + execute2_topOfStack(maxAddrBit-minAddrBit downto 0); + when Decoded_Not => + execute2_topOfStack <= not execute2_topOfStack; + when Decoded_Flip => + for i in 0 to wordSize-1 loop + execute2_topOfStack(i) <= execute2_topOfStack(wordSize-1-i); + end loop; + when Decoded_Store => + execute2_sp <= execute2_sp + 2; + if (execute2_topOfStack(ioBit)='0') then + memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + memBWrite <= execute2_topOfStackB; + memBWriteEnable <= '1'; + else + io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + io_write <= execute2_topOfStackB(7 downto 0); + io_writeEnable <= '1'; + end if; + execute2_resync <= '1'; + when Decoded_StoreSP => + execute2_sp <= execute2_sp + 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+execute2_spOffset; + memBWrite <= execute2_topOfStack; + + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= memARead; + when Decoded_Neqbranch => + execute2_sp <= execute2_sp + 2; + if (execute2_topOfStackB/=0) then + execute2_pc <= execute2_topOfStack(maxAddrBit downto 0) + execute2_pc; + end if; + execute2_resync <= '1'; + when Decoded_Eq => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= (others => '0'); + if (execute2_topOfStack=execute2_topOfStackB) then + execute2_topOfStack(0) <= '1'; + end if; + execute2_topOfStackB <= memARead; + when Decoded_Ulessthan => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= (others => '0'); + if (execute2_topOfStack + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= (others => '0'); + compareA := signed(execute2_topOfStack); + compareB := signed(execute2_topOfStackB); + if (compareA + begin_inst <= '0'; + execute2_pc <= execute2_pc; + when others => + -- nop + end case; + + -- load cycle... + execute2_loadingDone <= execute2_loading; + if (execute2_loadingDone ='1') then + if (execute2_topOfStack(ioBit)='1') then + if (io_busy = '0') then + execute2_topOfStack <= (others => '0'); + execute2_topOfStack(7 downto 0) <= io_read; + execute2_persistTopOfStack <= '1'; + else + execute2_loadingDone <= '1'; + end if; + else + if (execute2_storeByte = '1') then + execute2_sp <= execute2_sp + 2; + memBWriteEnable <= '1'; + memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + memBWrite <= memARead; + case execute2_topOfStack(minAddrBit-1 downto 0) is + when "00" => memBWrite(31 downto 24) <= execute2_topOfStackB(7 downto 0); + when "01" => memBWrite(23 downto 16) <= execute2_topOfStackB(7 downto 0); + when "10" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0); + when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0); + end case; +-- case execute2_topOfStack(0 downto 0) is +-- when "1" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0); +-- when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0); +-- end case; + execute2_resync <= '1'; + elsif (execute2_loadByte = '1') then + execute2_topOfStack <= (others => '0'); + case execute2_topOfStack(minAddrBit-1 downto 0) is + when "00" => execute2_topOfStack(7 downto 0) <= memARead(31 downto 24); + when "01" => execute2_topOfStack(7 downto 0) <= memARead(23 downto 16); + when "10" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8); + when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0); + end case; +-- case execute2_topOfStack(0 downto 0) is +-- when "1" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8); +-- when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0); +-- end case; + execute2_persistTopOfStack <= '1'; + else + execute2_topOfStack <= memARead; + execute2_persistTopOfStack <= '1'; + end if; + end if; + end if; + + -- write top of stack... + execute2_persistTopOfStackB <= execute2_persistTopOfStack; + if (execute2_persistTopOfStack = '1') then + execute2_persistTopOfStack <= '0'; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp; + memBWrite <= execute2_topOfStack; + end if; + if (execute2_persistTopOfStackB = '1') then + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+1; + memBWrite <= execute2_topOfStackB; + + execute2_resync <= '1'; + end if; + + -- here we resync the pipeline. + -- a number of things have to happen on certain cycles + execute2_resync2 <= execute2_resync; + execute2_resync3 <= execute2_resync2; + execute2_resync4 <= execute2_resync3; + execute2_resync5 <= execute2_resync4; + execute2_resync6 <= execute2_resync5; + execute2_resync7 <= execute2_resync6; + execute2_resync8 <= execute2_resync7; + execute2_resync9 <= execute2_resync8; + execute2_resync10 <= execute2_resync9; + + if (execute2_resync = '1' ) then + -- resync #1 + execute2_resync <= '0'; + decode_starved <= '1'; + memAAddr <= execute2_sp; + end if; + if (execute2_resync2 = '1') then + -- resync #2 + execute1_fetchPC <= execute2_pc; + memAAddr <= execute2_sp + 1; + end if; + if (execute2_resync3 = '1') then + -- resync #3 + execute2_topOfStack <= memARead; + end if; + if (execute2_resync4 = '1') then + -- resync #4 + -- during this cycle the address is set to the opcode + execute2_topOfStackB <= memARead; + end if; + if (execute2_resync5 = '1') then + -- resync #5 + execute1_pop1 <= '0'; + execute1_push1 <= '0'; + end if; + if (execute2_resync6 = '1') then + -- resync #6 + decode_idim_flag <= '0'; + execute1_pop1 <= '0'; + execute1_push1 <= '0'; + end if; + if (execute2_resync7 = '1') then + -- resync #7 + execute1_sp <= execute2_sp; + execute1_stall <= '0'; + end if; + if (execute2_resync8 = '1') then + -- resync #8 +-- load_stall <= '0'; + end if; + if (execute2_resync9 = '1') then + -- resync #9 + end if; + if (execute2_resync10 = '1') then + end if; + + + + + end if; + end process; + + + +end behave; diff --git a/zpu/hdl/zpu3/src/zpu_top.vhd b/zpu/hdl/zpu3/src/zpu_top.vhd new file mode 100644 index 0000000..0ac6df4 --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_top.vhd @@ -0,0 +1,421 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +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 zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end zpu_top; + +architecture behave of zpu_top 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(maxAddrBit downto 0); +signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); + +-- state machine. + +subtype State_Type is std_logic_vector(3 downto 0); +constant State_Fetch : State_Type := b"0000"; +constant State_WriteIODone : State_Type := b"0001"; +constant State_Execute : State_Type := b"0010"; +constant State_StoreToStack : State_Type := b"0011"; +constant State_Add : State_Type := b"0100"; +constant State_Or : State_Type := b"0101"; +constant State_And : State_Type := b"0110"; +constant State_Store : State_Type := b"0111"; +constant State_ReadIO : State_Type := b"1000"; +constant State_WriteIO : State_Type := b"1001"; +constant State_Load : State_Type := b"1010"; +constant State_FetchNext : State_Type := b"1011"; +constant State_AddSP : State_Type := b"1100"; +constant State_ReadIODone : State_Type := b"1101"; +constant State_Decode : State_Type := b"1110"; +constant State_Resync : State_Type := b"1111"; + + +subtype DecodedOpcodeType is std_logic_vector(4 downto 0); +constant Decoded_Nop : DecodedOpcodeType := b"00000"; +constant Decoded_Im : DecodedOpcodeType := b"00001"; +constant Decoded_ImShift : DecodedOpcodeType := b"00010"; +constant Decoded_LoadSP : DecodedOpcodeType := b"00011"; +constant Decoded_StoreSP : DecodedOpcodeType := b"00100"; +constant Decoded_AddSP : DecodedOpcodeType := b"00101"; +constant Decoded_Emulate : DecodedOpcodeType := b"00110"; +constant Decoded_Break : DecodedOpcodeType := b"00111"; +constant Decoded_PushPC : DecodedOpcodeType := b"01000"; +constant Decoded_PushSP : DecodedOpcodeType := b"01001"; +constant Decoded_PopPC : DecodedOpcodeType := b"01010"; +constant Decoded_Add : DecodedOpcodeType := b"01011"; +constant Decoded_Or : DecodedOpcodeType := b"01100"; +constant Decoded_And : DecodedOpcodeType := b"01101"; +constant Decoded_Load : DecodedOpcodeType := b"01110"; +constant Decoded_Not : DecodedOpcodeType := b"01111"; +constant Decoded_Flip : DecodedOpcodeType := b"10000"; +constant Decoded_Store : DecodedOpcodeType := b"10001"; +constant Decoded_PopSP : DecodedOpcodeType := b"10010"; + +signal opcode : std_logic_vector(OpCode_Size-1 downto 0); + +signal decodedOpcode : 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 + ); + end generate; + + + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr, + memAWrite => memAWrite, + memARead => memARead, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr, + memBWrite => memBWrite, + memBRead => memBRead + ); + + + + + opcodeControl: + process(clk, areset) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + variable spOffset : std_logic_vector(4 downto 0); + begin + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= (2 => '0', others => '1'); + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + memAAddr <= (others => '0'); + memBAddr <= (others => '0'); + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + io_writeEnable <= '0'; + io_readEnable <= '0'; + decodedOpcode <= (others => '0'); + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + opcode <= (others => '0'); + io_addr <= (others => '0'); + io_write <= (others => '0'); + 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); + opcode <= (others => DontCareValue); +-- io_addr <= (others => DontCareValue); +-- io_write <= (others => DontCareValue); + spOffset := (others => DontCareValue); + memAAddr <= (others => DontCareValue); + memBAddr <= (others => DontCareValue); + + io_writeEnable <= '0'; + io_readEnable <= '0'; + begin_inst <= '0'; + + 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 <= pc; + trace_opcode <= opcode; + trace_sp <= 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); + + case decodedOpcode is + when Decoded_Im => + memAWriteEnable <= '1'; + 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); + when Decoded_ImShift => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= opcode(6 downto 0); + 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 + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_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 (io_busy = '0') then + state <= State_Fetch; + memAWriteEnable <= '1'; + memAWrite <= (others => '0'); + memAWrite(7 downto 0) <= io_read; + end if; + when State_WriteIO => + sp <= sp + 1; + io_writeEnable <= '1'; + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_write <= memBRead(7 downto 0); + state <= State_WriteIODone; + when State_WriteIODone => + if (io_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 => + case pc(1 downto 0) is + when "00" => tOpcode := memBRead(31 downto 24); + when "01" => tOpcode := memBRead(23 downto 16); + when "10" => tOpcode := memBRead(15 downto 8); + when others => tOpcode := memBRead(7 downto 0); + end case; + idim_flag <= tOpcode(7); + opcode <= tOpcode; + if (tOpcode(7 downto 7)=OpCode_Im) then + if (idim_flag='1') then + decodedOpcode<=Decoded_ImShift; + else + decodedOpcode<=Decoded_Im; + end if; + elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then + decodedOpcode<=Decoded_StoreSP; + elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then + decodedOpcode<=Decoded_LoadSP; + elsif (tOpcode(7 downto 5)=OpCode_Emulate) then + decodedOpcode<=Decoded_Emulate; + elsif (tOpcode(7 downto 4)=OpCode_AddSP) then + decodedOpcode<=Decoded_AddSP; + else + case tOpcode(3 downto 0) is + when OpCode_Break => + decodedOpcode<=Decoded_Break; + when OpCode_PushSP => + decodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + decodedOpcode<=Decoded_PopPC; + when OpCode_Add => + decodedOpcode<=Decoded_Add; + when OpCode_Or => + decodedOpcode<=Decoded_Or; + when OpCode_And => + decodedOpcode<=Decoded_And; + when OpCode_Load => + decodedOpcode<=Decoded_Load; + when OpCode_Not => + decodedOpcode<=Decoded_Not; + when OpCode_Flip => + decodedOpcode<=Decoded_Flip; + when OpCode_Store => + decodedOpcode<=Decoded_Store; + when OpCode_PopSP => + decodedOpcode<=Decoded_PopSP; + when others => + decodedOpcode<=Decoded_Nop; + end case; + end if; + -- 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/zpu3/src/zpu_top_medium.vhd b/zpu/hdl/zpu3/src/zpu_top_medium.vhd new file mode 100644 index 0000000..4896b30 --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_top_medium.vhd @@ -0,0 +1,768 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +use IEEE.STD_LOGIC_arith.ALL; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + + +entity zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end zpu_top; + +architecture behave of zpu_top 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(maxAddrBit downto 0); +signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); + +-- state machine. + +subtype State_Type is std_logic_vector(4 downto 0); +constant State_ResyncDecode : State_Type := b"00000"; +constant State_WriteIODone : State_Type := b"00001"; +constant State_Execute : State_Type := b"00010"; +constant State_StoreToStack : State_Type := b"00011"; +constant State_Add : State_Type := b"00100"; +constant State_Or : State_Type := b"00101"; +constant State_And : State_Type := b"00110"; +constant State_Store : State_Type := b"00111"; +constant State_ReadIO : State_Type := b"01000"; +constant State_WriteIO : State_Type := b"01001"; +constant State_Load : State_Type := b"01010"; +constant State_ResyncStack : State_Type := b"01011"; +constant State_AddSP : State_Type := b"01100"; +constant State_ReadIODone : State_Type := b"01101"; +constant State_Decode : State_Type := b"01110"; +constant State_LoadByte1 : State_Type := b"01111"; +constant State_LoadByte2 : State_Type := b"10000"; +constant State_StoreByte1 : State_Type := b"10001"; +constant State_StoreByte2 : State_Type := b"10010"; +constant State_Mult1 : State_Type := b"10011"; +constant State_Mult2 : State_Type := b"10100"; +constant State_Mult3 : State_Type := b"10101"; + + +subtype DecodedOpcodeType is std_logic_vector(5 downto 0); +constant Decoded_Nop : DecodedOpcodeType := b"000000"; +constant Decoded_Im : DecodedOpcodeType := b"000001"; +constant Decoded_ImShift : DecodedOpcodeType := b"000010"; +constant Decoded_LoadSP : DecodedOpcodeType := b"000011"; +constant Decoded_StoreSP : DecodedOpcodeType := b"000100"; +constant Decoded_AddSP : DecodedOpcodeType := b"000101"; +constant Decoded_Emulate : DecodedOpcodeType := b"000110"; +constant Decoded_Break : DecodedOpcodeType := b"000111"; +constant Decoded_PushPC : DecodedOpcodeType := b"001000"; +constant Decoded_PushSP : DecodedOpcodeType := b"001001"; +constant Decoded_PopPC : DecodedOpcodeType := b"001010"; +constant Decoded_Add : DecodedOpcodeType := b"001011"; +constant Decoded_Or : DecodedOpcodeType := b"001100"; +constant Decoded_And : DecodedOpcodeType := b"001101"; +constant Decoded_Load : DecodedOpcodeType := b"001110"; +constant Decoded_Not : DecodedOpcodeType := b"001111"; +constant Decoded_Flip : DecodedOpcodeType := b"010000"; +constant Decoded_Store : DecodedOpcodeType := b"010001"; +constant Decoded_PopSP : DecodedOpcodeType := b"010010"; +constant Decoded_Ashiftleft : DecodedOpcodeType := b"010011"; +constant Decoded_Ashiftright : DecodedOpcodeType := b"010100"; +constant Decoded_Lshiftright : DecodedOpcodeType := b"010101"; +constant Decoded_Eqbranch : DecodedOpcodeType := b"010110"; +constant Decoded_Neqbranch : DecodedOpcodeType := b"010111"; +constant Decoded_Eq : DecodedOpcodeType := b"011000"; +constant Decoded_Neq : DecodedOpcodeType := b"011001"; +constant Decoded_Loadb : DecodedOpcodeType := b"011010"; +constant Decoded_Lessthan : DecodedOpcodeType := b"011011"; +constant Decoded_Lessthanorequal : DecodedOpcodeType := b"011100"; +constant Decoded_Ulessthan : DecodedOpcodeType := b"011101"; +constant Decoded_Ulessthanorequal : DecodedOpcodeType := b"011110"; +constant Decoded_Storeb : DecodedOpcodeType := b"011111"; +constant Decoded_Lshift2 : DecodedOpcodeType := b"100000"; +constant Decoded_DoubleIm : DecodedOpcodeType := b"100001"; +constant Decoded_AddIm : DecodedOpcodeType := b"100011"; +constant Decoded_Mult16x16 : DecodedOpcodeType := b"100100"; +constant Decoded_Swap : DecodedOpcodeType := b"100101"; +constant Decoded_Callpcrel : DecodedOpcodeType := b"100110"; +constant Decoded_Pushspadd : DecodedOpcodeType := b"100111"; + + +signal mult1 : std_logic_vector(wordSize/2-1 downto 0); +signal mult2 : std_logic_vector(wordSize/2-1 downto 0); +signal multResult : std_logic_vector(wordSize-1 downto 0); + +signal storeByte : std_logic_vector(7 downto 0); +signal byteSelect : std_logic_vector(minAddrBit-1 downto 0); + +signal opcode : std_logic_vector(OpCode_Size-1 downto 0); +signal opcode2 : std_logic_vector(OpCode_Size-1 downto 0); + +signal decodedOpcode : 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, + busy => busy + ); + end generate; + + + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr, + memAWrite => memAWrite, + memARead => memARead, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr, + memBWrite => memBWrite, + memBRead => memBRead + ); + + + process(clk, areset) + begin + if (clk'event and clk = '1') then + multResult <= mult1 * mult2; + end if; + end process; + + + + opcodeControl: + process(clk, areset) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + variable tOpcode2 : std_logic_vector(OpCode_Size-1 downto 0); + variable spOffset : std_logic_vector(4 downto 0); + variable spOffset2 : std_logic_vector(4 downto 0); + variable nextPC : std_logic_vector(maxAddrBit downto 0); + variable pushspaddTemp : std_logic_vector(maxAddrBit downto minAddrBit); + variable tempVal : std_logic_vector(wordSize-1 downto 0); + variable compareA : signed(wordSize-1 downto 0); + variable compareB : signed(wordSize-1 downto 0); + begin + if areset = '1' then + mult1 <= (others => '0'); + mult2 <= (others => '0'); + state <= State_ResyncDecode; + break <= '0'; + sp <= (2 => '0', others => '1'); + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + memAAddr <= (others => '0'); + memBAddr <= (others => '0'); + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + io_writeEnable <= '0'; + io_readEnable <= '0'; + decodedOpcode <= (others => '0'); + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + opcode <= (others => '0'); + io_addr <= (others => '0'); + io_write <= (others => '0'); + elsif (clk'event and clk = '1') then + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + + io_writeEnable <= '0'; + io_readEnable <= '0'; + begin_inst <= '0'; + + case state is + when State_Decode => + nextPC:=pc+1; + case pc(1 downto 0) is + when "00" => tOpcode := memARead(31 downto 24); + when "01" => tOpcode := memARead(23 downto 16); + when "10" => tOpcode := memARead(15 downto 8); + when others => tOpcode := memARead(7 downto 0); + end case; + case nextPC(1 downto 0) is + when "00" => tOpcode2 := memBRead(31 downto 24); + when "01" => tOpcode2 := memBRead(23 downto 16); + when "10" => tOpcode2 := memBRead(15 downto 8); + when others => tOpcode2 := memBRead(7 downto 0); + end case; + idim_flag <= tOpcode(7); + opcode <= tOpcode; + opcode2 <= tOpcode2; + if (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 4)=0 and tOpcode2(3 downto 0)=Opcode_Add and idim_flag='0') then + idim_flag <= '0'; + decodedOpcode <= Decoded_AddIm; + nextPC := pc + 2; + elsif (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 7)=OpCode_Im and idim_flag='0') then + decodedOpcode <= Decoded_DoubleIm; + nextPC := pc + 2; + elsif (tOpcode(7 downto 4)=OpCode_AddSP and tOpcode(3 downto 0)=0 and + tOpcode2(7 downto 4)=OpCode_AddSP and tOpcode2(3 downto 0)=0) then + decodedOpcode <= Decoded_Lshift2; + nextPC := pc + 2; + elsif (tOpcode(7 downto 7)=OpCode_Im) then + if (idim_flag='1') then + decodedOpcode<=Decoded_ImShift; + else + decodedOpcode<=Decoded_Im; + end if; + elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then + decodedOpcode<=Decoded_StoreSP; + elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then + decodedOpcode<=Decoded_LoadSP; + elsif (tOpcode(7 downto 5)=OpCode_Emulate) then + if tOpcode(5 downto 0)=OpCode_Eqbranch then + decodedOpcode <= Decoded_Eqbranch; + elsif tOpcode(5 downto 0)=OpCode_Neqbranch then + decodedOpcode <= Decoded_Neqbranch; + elsif tOpcode(5 downto 0)=OpCode_Eq then + decodedOpcode <= Decoded_Eq; + elsif tOpcode(5 downto 0)=OpCode_Neq then + decodedOpcode <= Decoded_Neq; + elsif tOpcode(5 downto 0)=OpCode_Lessthan then + decodedOpcode <= Decoded_Lessthan; + elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then + decodedOpcode <= Decoded_Lessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Ulessthan then + decodedOpcode <= Decoded_Ulessthan; + elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then + decodedOpcode <= Decoded_Ulessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Loadb then + decodedOpcode <= Decoded_Loadb; + elsif tOpcode(5 downto 0)=OpCode_Storeb then + decodedOpcode <= Decoded_Storeb; + elsif tOpcode(5 downto 0)=OpCode_Mult16x16 then + decodedOpcode <= Decoded_Mult16x16; + elsif tOpcode(5 downto 0)=OpCode_Swap then + decodedOpcode <= Decoded_Swap; + elsif tOpcode(5 downto 0)=OpCode_Callpcrel then + decodedOpcode <= Decoded_Callpcrel; + elsif tOpcode(5 downto 0)=OpCode_Pushspadd then + decodedOpcode <= Decoded_Pushspadd; +-- elsif tOpcode(5 downto 0)=OpCode_Lshiftright then +-- decodedOpcode <= Decoded_Lshiftright; +-- elsif tOpcode(5 downto 0)=OpCode_Ashiftleft then +-- decodedOpcode <= Decoded_Ashiftleft; +-- elsif tOpcode(5 downto 0)=OpCode_Ashiftright then +-- decodedOpcode <= Decoded_Ashiftright; + else + decodedOpcode<=Decoded_Emulate; + end if; + elsif (tOpcode(7 downto 4)=OpCode_AddSP) then + decodedOpcode<=Decoded_AddSP; + else + case tOpcode(3 downto 0) is + when OpCode_Break => + decodedOpcode<=Decoded_Break; + when OpCode_PushPC => + decodedOpcode<=Decoded_PushPC; + when OpCode_PushSP => + decodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + decodedOpcode<=Decoded_PopPC; + when OpCode_Add => + decodedOpcode<=Decoded_Add; + when OpCode_Or => + decodedOpcode<=Decoded_Or; + when OpCode_And => + decodedOpcode<=Decoded_And; + when OpCode_Load => + decodedOpcode<=Decoded_Load; + when OpCode_Not => + decodedOpcode<=Decoded_Not; + when OpCode_Flip => + decodedOpcode<=Decoded_Flip; + when OpCode_Store => + decodedOpcode<=Decoded_Store; + when OpCode_PopSP => + decodedOpcode<=Decoded_PopSP; + when others => + decodedOpcode<=Decoded_Nop; + end case; + end if; + -- Fetch the two next opcodes... :-) + memAAddr <= nextPC(maxAddrBit downto minAddrBit); + nextPC:=nextPC+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Execute; + when State_Execute => + state <= State_Decode; + -- at this point: + -- memBRead contains opcode word + -- memARead contains top of stack + pc <= pc + 1; + + -- trace + begin_inst <= '1'; + trace_pc <= pc; + trace_opcode <= opcode; + trace_sp <= sp; + trace_topOfStack <= memARead; + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0):=opcode(3 downto 0); + spOffset2(4):=not opcode2(4); + spOffset2(3 downto 0):=opcode2(3 downto 0); + + case decodedOpcode is + + when Decoded_DoubleIm => + memAWriteEnable <= '1'; + sp <= sp - 1; + memAAddr <= sp-1; + for i in wordSize-1 downto 14 loop + memAWrite(i) <= opcode(6); + end loop; + memAWrite(13 downto 7) <= opcode(6 downto 0); + memAWrite(6 downto 0) <= opcode2(6 downto 0); + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + pc <= pc + 2; + when Decoded_Im => + memAWriteEnable <= '1'; + 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); + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_ImShift => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= opcode(6 downto 0); + memBAddr <= sp + 1; + when Decoded_StoreSP => + memAWriteEnable <= '1'; + memAAddr <= sp+spOffset; + memAWrite <= memARead; + -- avoid address crashes. + memBAddr <= sp - 1; + sp <= sp + 1; + state <= State_ResyncDecode; + when Decoded_LoadSP => + sp <= sp - 1; + if (spOffset = 0) then + -- This is a duplicate instruction. + memAAddr <= sp-1; + memAWriteEnable <= '1'; + memAWrite <= memARead; + else + memAAddr <= sp+spOffset; + end if; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_Callpcrel => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc + 1; + memBAddr <= sp+1; + pc <= pc + memARead(maxAddrBit downto 0); + state <= State_ResyncDecode; + when Decoded_Emulate => + sp <= sp - 1; + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + pc <= (others => '0'); + pc(9 downto 5) <= opcode(4 downto 0); + state <= State_ResyncDecode; + when Decoded_AddSP => + if spOffset=0 then + -- avoid address line crashes... + -- FIX!!! is this an issue? + -- oh-well. While we are at it, we've got a faster + -- shift operation without updating the toolchain. + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= memARead + memARead; + memBAddr <= sp+1; + else + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= memARead; + memBAddr <= sp+spOffset; + state <= State_AddSP; + end if; + when Decoded_Break => + report "Break instruction encountered" severity failure; + break <= '1'; + when Decoded_PushPC => + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + sp <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_PushSP => + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + sp <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto minAddrBit) <= sp; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_Pushspadd => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => DontCareValue); + pushspaddTemp := memARead(maxAddrBit-minAddrBit downto 0); + memAWrite(maxAddrBit downto minAddrBit) <= sp+pushspaddTemp; + memBAddr <= sp+1; + when Decoded_PopPC => + memAAddr <= sp; + pc <= memARead(maxAddrBit downto 0); + sp <= sp + 1; + state <= State_ResyncDecode; + when Decoded_AddIm => + memAWriteEnable <= '1'; + memAAddr <= sp; + tempVal(wordSize-1 downto 7) := (others => tOpcode(6)); + tempVal(6 downto 0) := tOpcode(6 downto 0); + memAWrite <= memARead + tempVal; + memBAddr <= sp + 1; + pc <= pc + 2; + when Decoded_Add => + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Or => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAWrite <= memARead or memBRead; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + when Decoded_And => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAWrite <= memARead and memBRead; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + when Decoded_Load => + if (memARead(ioBit)='1') then + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_readEnable <= '1'; + state <= State_ReadIO; + else + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memBAddr <= sp + 1; + end if; + when Decoded_Swap => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize/2-1 downto 0) <= memARead(wordSize-1 downto wordSize/2); + memAWrite(wordSize-1 downto wordSize/2) <= memARead(wordSize/2-1 downto 0); + memBAddr <= sp + 1; + when Decoded_Not => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= not memARead; + memBAddr <= sp + 1; + when Decoded_Flip => + memAAddr <= sp; + memAWriteEnable <= '1'; + for i in 0 to wordSize-1 loop + memAWrite(i) <= memARead(wordSize-1-i); + end loop; + memBAddr <= sp + 1; + when Decoded_Lshift2 => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(1 downto 0) <= (others => '0'); + memAWrite(wordSize-1 downto 2) <= memARead(wordSize-1-2 downto 0); + memBAddr <= sp + 1; + pc <= pc + 2; + when Decoded_Store => + sp <= sp + 2; + if (memARead(ioBit)='1') then + io_writeEnable <= '1'; + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_write <= memBRead(7 downto 0); + state <= State_WriteIO; + else + memAWriteEnable <= '1'; + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memAWrite <= memBRead; + state <= State_ResyncDecode; + end if; + when Decoded_PopSP => + sp <= memARead(maxAddrBit downto minAddrBit); + state <= State_ResyncDecode; + when Decoded_Ashiftleft => + memAWrite(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))) <= + memBRead(wordSize-conv_integer(memARead(wordPower-1 downto 0))-1 downto 0); + if memARead(wordPower-1 downto 0)/=0 then + memAWrite(conv_integer(memARead(wordPower-1 downto 0))-1 downto 0) <= (others => '0'); + end if; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Ashiftright | Decoded_Lshiftright => + memAWrite(wordSize-1-conv_integer(memARead(wordPower-1 downto 0)) downto 0) <= + memBRead(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))); + if memARead(wordPower-1 downto 0)/=0 then + if decodedOpcode=Decoded_Ashiftright and memBRead(wordSize-1)='1' then + memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '1'); + else + memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '0'); + end if; + end if; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Eqbranch => + sp <= sp + 2; + if (memBRead=0) then + pc <= memARead(maxAddrBit downto 0) + pc; + end if; + state <= State_ResyncDecode; + when Decoded_Neqbranch => + sp <= sp + 2; + if (memBRead/=0) then + pc <= memARead(maxAddrBit downto 0) + pc; + end if; + state <= State_ResyncDecode; + when Decoded_Eq => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Neq => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead/=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Ulessthan => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead<=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Lessthan => + sp <= sp + 1; + memAWrite <= (others => '0'); + compareA := signed(memARead); + compareB := signed(memBRead); + if (compareA + sp <= sp + 1; + memAWrite <= (others => '0'); + compareA := signed(memARead); + compareB := signed(memBRead); + if (compareA<=compareB) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Loadb => + byteSelect <= memARead(minAddrBit-1 downto 0); + memAAddr <= memARead(maxAddrBit downto minAddrBit); + state <= State_LoadByte1; + when Decoded_Storeb => + sp <= sp + 2; + byteSelect <= memARead(minAddrBit-1 downto 0); + storeByte <= memBRead(7 downto 0); + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memBAddr <= sp; + state <= State_StoreByte1; + when Decoded_Mult16x16 => + mult1 <= memARead(wordSize/2-1 downto 0); + mult2 <= memBRead(wordSize/2-1 downto 0); + sp <= sp + 1; + state <= State_Mult1; + when others => + -- nop. Here we persist whatever was loaded into + -- memARead + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead; + memBAddr <= sp + 1; + + end case; + when State_ReadIO => + state <= State_ReadIODone; + when State_ReadIODone => + if (io_busy = '0') then + state <= State_ResyncDecode; + memAWriteEnable <= '1'; + memAWrite <= (others => '0'); + memAWrite(7 downto 0) <= io_read; + memAAddr <= sp; + end if; + when State_WriteIO => + state <= State_WriteIODone; + when State_WriteIODone => + if (io_busy = '0') then + state <= State_ResyncDecode; + end if; + when State_ResyncDecode => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_ResyncStack; + when State_ResyncStack => + memAAddr <= sp; + memBAddr <= sp+1; + state <= State_Decode; + when State_AddSP => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Add; + when State_Add => + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + when State_LoadByte1 => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_LoadByte2; + when State_LoadByte2 => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => '0'); + case byteSelect is + when "00" => memAWrite(7 downto 0) <= memARead(31 downto 24); + when "01" => memAWrite(7 downto 0) <= memARead(23 downto 16); + when "10" => memAWrite(7 downto 0) <= memARead(15 downto 8); + when others => memAWrite(7 downto 0) <= memARead(7 downto 0); + end case; + memBAddr <= sp + 1; + state <= State_Decode; + when State_StoreByte1 => + state <= State_StoreByte2; + when State_StoreByte2 => + memAWriteEnable <= '1'; + memAAddr <= memBRead(maxAddrBit downto minAddrBit); + memAWrite <= memARead; + case byteSelect is + when "00" => memAWrite(31 downto 24) <= storeByte; + when "01" => memAWrite(23 downto 16) <= storeByte; + when "10" => memAWrite(15 downto 8) <= storeByte; + when others => memAWrite(7 downto 0) <= storeByte; + end case; + state <= State_ResyncDecode; + when State_Mult1 => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Mult2; + when State_Mult2 => + memAWriteEnable <= '1'; + memAWrite <= multResult; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + + when others => + null; + end case; + end if; + end process; + + + +end behave; diff --git a/zpu/hdl/zpu3/src/zpuio.vhd b/zpu/hdl/zpu3/src/zpuio.vhd new file mode 100644 index 0000000..96e9aea --- /dev/null +++ b/zpu/hdl/zpu3/src/zpuio.vhd @@ -0,0 +1,180 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library zylin; +use zylin.arm7.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.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 io_readEnable : 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; +begin + + timerinst: timer port map ( + clk => cpu_clk, + areset => areset, + we => timer_we, + din => io_write, + adr => io_addr(4 downto 2), + dout => timer_read); + + zpu: zpu_top port map ( + clk => cpu_clk , + areset => areset, + io_busy => io_busy, + io_writeEnable => io_writeEnable, + io_readEnable => io_readEnable, + io_write => io_write, + io_read => io_read, + io_addr => io_addr, + interrupt => '0' + --, +-- break => cpu_fiq_p +); + + + -- 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 <= '1'; + uartData <= x"58"; -- 'X' + readingTimer <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + timer_we <= '0'; + io_busy <= '1'; + if uartTXCleared = '1' then + uartTXPending <= '0'; + end if; + + if io_writeEnable = '1' then + if io_addr=x"1000" then + -- Write to UART + uartData <= io_write; + uartTXPending <= '1'; + io_busy <= '0'; + elsif io_addr(12)='1' then + timer_we <= '1'; + io_busy <= '0'; + 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 <= '0'; + elsif io_addr(12)='1' then + readingTimer <= '1'; + io_busy <= '1'; + elsif io_addr(11)='1' then + io_read <= ZPU_Frequency; + io_busy <= '0'; + 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'); + + + +end behave; diff --git a/zpu/hdl/zpu3/src/zpupkg.vhd b/zpu/hdl/zpu3/src/zpupkg.vhd new file mode 100644 index 0000000..a904b11 --- /dev/null +++ b/zpu/hdl/zpu3/src/zpupkg.vhd @@ -0,0 +1,130 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_ARITH.all; + +library zylin; +use zylin.zpu_config.all; + +package zpupkg is + + component 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 component; + + + component 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 minAddrBit); + memA : in std_logic_vector(wordSize-1 downto 0); + memB : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic + ); + end component; + + component zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + 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_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_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_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; diff --git a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd new file mode 100644 index 0000000..95fbc18 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd @@ -0,0 +1,31 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package arm7 is + + component arm7wb + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + 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; + + cpu_din : out std_logic_vector(15 downto 0); + cpu_a : out std_logic_vector(20 downto 0); + cpu_we : out std_logic_vector(1 downto 0); + cpu_re : out std_logic; + cpu_dout : in std_logic_vector(15 downto 0)); + end component; + +end arm7; + + \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd new file mode 100644 index 0000000..55b8125 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd @@ -0,0 +1,213 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity arm7wb is + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + 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; + + cpu_din : out std_logic_vector(15 downto 0); + cpu_a : out std_logic_vector(20 downto 0); + cpu_we : out std_logic_vector(1 downto 0); + cpu_re : out std_logic; + cpu_dout : in std_logic_vector(15 downto 0)); +end arm7wb; + +architecture behave of arm7wb is + +attribute keep : string; + +signal cpu_oe_n : std_logic; +signal cpu_fiq : std_logic; +signal cpu_wait_n : std_logic; +signal cpu_clk_toggle : std_logic; +signal cpu_clk_smp1 : std_logic; +signal cpu_clk_smp2 : std_logic; +signal cpu_clk_phase : std_logic; +signal cpu_oe_n_del : std_logic; +signal cpu_a_smp : std_logic_vector(20 downto 0); +signal cpu_d_smp : std_logic_vector(15 downto 0); + +signal int_oe_n : std_logic_vector(15 downto 0); +attribute keep of int_oe_n:signal is "true"; + +signal cpu_irq : std_logic_vector(1 downto 0); +signal cpu_wr_n : std_logic_vector(1 downto 0); +signal cpu_cs_n : std_logic_vector(3 downto 1); + +signal dout : std_logic_vector(15 downto 0); +signal cpu_d_p_out : std_logic_vector(15 downto 0); +signal read_cnt : std_logic_vector(1 downto 0); + +signal cpu_wr_n_p_del : std_logic_vector(1 downto 0); +signal cpu_a_p_del : std_logic_vector(20 downto 0); +signal cpu_d_p_del : std_logic_vector(15 downto 0); +signal cpu_cs_n_p_del : std_logic_vector(3 downto 1); +signal cpu_oe_n_p_del : std_logic; + +constant Sim_Delay : time := 0.5 ns; +constant Clock_2_Out : time := 5.5 ns; +constant Input_Setup : time := 2.5 ns; + +begin + + cpu_wait_n <= '1'; + cpu_fiq <= '1'; + cpu_irq <= "11"; + + iotimingon: + if simulate_io_time generate + begin + cpu_wr_n_p_del <= "XX" after 0 ns, cpu_wr_n_p after Input_Setup; + cpu_a_p_del <= "XXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup; + cpu_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup; + cpu_cs_n_p_del <= "XXX" after 0 ns, cpu_cs_n_p after Input_Setup; + cpu_oe_n_p_del <= 'X' after 0 ns, cpu_oe_n_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cpu_wr_n_p_del <= cpu_wr_n_p; + cpu_a_p_del <= cpu_a_p; + cpu_d_p_del <= cpu_d_p; + cpu_cs_n_p_del <= cpu_cs_n_p; + cpu_oe_n_p_del <= cpu_oe_n_p; + end generate; + + process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase + begin + if areset = '1' then + cpu_clk_toggle <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_toggle <= not(cpu_clk_toggle); + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock + begin + if areset = '1' then + cpu_clk_smp1 <= '0'; + cpu_clk_smp2 <= '1'; + cpu_clk_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_smp1 <= cpu_clk_toggle; + cpu_clk_smp2 <= cpu_clk_smp1; + if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then + cpu_clk_phase <= '0' after Sim_Delay; + else + cpu_clk_phase <= not(cpu_clk_phase) after Sim_Delay; + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- Sample input signals + begin + if areset = '1' then + cpu_oe_n <= '1'; + cpu_a_smp <= "000000000000000000000"; + cpu_d_smp <= "0000000000000000"; + cpu_wr_n <= "11"; + cpu_cs_n <= "111"; + elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then + cpu_oe_n <= cpu_oe_n_p_del after Sim_Delay; + cpu_a_smp <= cpu_a_p_del after Sim_Delay; + cpu_d_smp <= cpu_d_p_del after Sim_Delay; + cpu_wr_n <= cpu_wr_n_p_del after Sim_Delay; + cpu_cs_n <= cpu_cs_n_p_del after Sim_Delay; + end if; + end process; + + cpu_d_out: + for i in 0 to 15 generate + begin + process(cpu_clk_2x, areset) + begin + if areset = '1' then + cpu_d_p(i) <= 'Z'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + if int_oe_n(i) = '0' then + cpu_d_p(i) <= cpu_d_p_out(i) after Clock_2_Out; + else + cpu_d_p(i) <= 'Z' after Clock_2_Out; + end if; + end if; + end process; + end generate; + + process(cpu_clk, areset) -- Clocked output pins + begin + if areset = '1' then + cpu_d_p_out <= "1111111111111111"; + cpu_wait_n_p <= '1'; + cpu_irq_p <= "11"; + cpu_fiq_p <= '1'; + elsif (cpu_clk = '1' and cpu_clk'event) then + cpu_d_p_out <= cpu_dout; + cpu_wait_n_p <= '1'; + cpu_irq_p <= "11"; + cpu_fiq_p <= '1'; + end if; + end process; + + process(cpu_clk, areset) -- Generate control signals + begin + if areset = '1' then + int_oe_n <= "1111111111111111"; + read_cnt <= "00"; + cpu_we <= "00"; + cpu_re <= '0'; + cpu_a <= "000000000000000000000"; + cpu_din <= "0000000000000000"; + elsif (cpu_clk = '1' and cpu_clk'event) then + + cpu_a <= cpu_a_smp; + cpu_din <= cpu_d_smp; + + cpu_oe_n_del <= cpu_oe_n; + + if cpu_cs_n(1) = '1' then + read_cnt <= "00"; + else + read_cnt <= read_cnt + '1'; + end if; + + if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_wr_n(0) = '0' then + cpu_we(0) <= '1'; + else + cpu_we(0) <= '0'; + end if; + + if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_wr_n(1) = '0' then + cpu_we(1) <= '1'; + else + cpu_we(1) <= '0'; + end if; + + if read_cnt = "00" and cpu_cs_n(1) = '0' and cpu_oe_n = '0' then + cpu_re <= '1'; + else + cpu_re <= '0'; + end if; + + if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_oe_n = '0' then + int_oe_n <= "0000000000000000"; + else + int_oe_n <= "1111111111111111"; + end if; + + end if; + end process; + +end behave; diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do new file mode 100644 index 0000000..d2c22cf --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do @@ -0,0 +1,17 @@ +vlib zylin +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_pkg.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_top.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/mt46v16m16.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_tb.vhd +vlib work +vsim -t 1ps zylin.ddr_tb +view wave +view signals +radix hex +add wave * +add wave sim:/ddr_tb/ddr_ctrl/* +force -freeze sim:/ddr_tb/areset 1 0 +run 10 ns +force -freeze sim:/ddr_tb/areset 0 0 +when sim:/ddr_tb/break_out stop +run 10 ms \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do new file mode 100644 index 0000000..31dd294 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do @@ -0,0 +1,111 @@ +vlib zylin +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_pkg.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_top.vhd +vlib work +vsim -t 1ps zylin.ddr_top +view wave +view signals +radix hex +# Add wave signals + +add wave -divider "System" +add wave sim:/ddr_top/areset +add wave sim:/ddr_top/cpu_clk +add wave sim:/ddr_top/cpu_clk_2x +add wave sim:/ddr_top/cpu_clk_4x +add wave sim:/ddr_top/ddr_in_clk +add wave sim:/ddr_top/ddr_in_clk_2x + +add wave -divider "Ctrl interface" +add wave sim:/ddr_top/cpu_clk +add wave sim:/ddr_top/ddr_data_read +add wave sim:/ddr_top/ddr_data_write +add wave sim:/ddr_top/ddr_req +add wave sim:/ddr_top/ddr_rd_wr_n +add wave sim:/ddr_top/ddr_req_len +add wave sim:/ddr_top/ddr_wr_mask +add wave sim:/ddr_top/ddr_read_en +add wave sim:/ddr_top/ddr_write_en +add wave sim:/ddr_top/ddr_command +add wave sim:/ddr_top/ddr_command_we + +add wave -divider "DDR interface" +add wave sim:/ddr_top/sdr_clk_p +add wave sim:/ddr_top/sdr_clk_n_p +add wave sim:/ddr_top/cke_q_p +add wave sim:/ddr_top/cs_qn_p +add wave sim:/ddr_top/ras_qn_p +add wave sim:/ddr_top/cas_qn_p +add wave sim:/ddr_top/we_qn_p +add wave sim:/ddr_top/dm_q_p +add wave sim:/ddr_top/dqs_q_p +add wave sim:/ddr_top/ba_q_p +add wave sim:/ddr_top/sdr_a_p +add wave sim:/ddr_top/sdr_d_p + +add wave -divider "Internal signals" +add wave sim:/ddr_top/clk2_phase +add wave sim:/ddr_top/clk4_phase +add wave sim:/ddr_top/ddr_state +add wave sim:/ddr_top/sdr_oe_n +add wave sim:/ddr_top/sdr_smp +add wave sim:/ddr_top/sdr_d + + +# Add input signals +force -freeze sim:/ddr_top/cpu_clk_4x 1 0, 0 {1.875 ns} -r 3.75 +run 100 ps +force -freeze sim:/ddr_top/cpu_clk_2x 1 0, 0 {3.75 ns} -r 7.5 +run 100 ps +force -freeze sim:/ddr_top/cpu_clk 1 0, 0 {7.5 ns} -r 15 +force -freeze sim:/ddr_top/ddr_in_clk 1 2ns, 0 {5.75 ns} -r 7.5 +force -freeze sim:/ddr_top/ddr_in_clk_2x 0 0.125ns, 1 {2 ns} -r 3.75 + +force -freeze sim:/ddr_top/areset 1 0 +force -freeze sim:/ddr_top/ddr_command 0000 0 +force -freeze sim:/ddr_top/ddr_command_we 0 0 +force -freeze sim:/ddr_top/ddr_data_write 1234abcd 0 +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 + +# Start simulation +run 45 +force -freeze sim:/ddr_top/areset 0 0 +run 92 +# DDR Command +force -freeze sim:/ddr_top/ddr_command 000A 0 +force -freeze sim:/ddr_top/ddr_command_we 1 0 +run 15 +force -freeze sim:/ddr_top/ddr_command 0000 0 +force -freeze sim:/ddr_top/ddr_command_we 0 0 +run 90 +# DDR Read +force -freeze sim:/ddr_top/ddr_req 1 0 +force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 1 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 15 +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 150 +# DDR Write +force -freeze sim:/ddr_top/ddr_req 1 0 +force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 15 +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 180 + diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd new file mode 100644 index 0000000..95f4b8a --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd @@ -0,0 +1,90 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package ddr is + + component ddr_top + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + 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; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(23 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_req_ack : out std_logic; -- Request acknowledge + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- 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 + end component; + + component MT46V16M16 + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); + end component; + +end ddr; + \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd new file mode 100644 index 0000000..5666532 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd @@ -0,0 +1,301 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library zylin; +use zylin.ddr.all; + +entity ddr_tb is + port ( areset : in std_logic; + break_out : out std_logic); +end ddr_tb; + +architecture behave of ddr_tb is + +signal cpu_clk : std_logic; +signal cpu_clk_2x : std_logic; +signal cpu_clk_4x : std_logic; +signal ddr_in_clk : std_logic; +signal ddr_in_clk_2x : std_logic; + +signal ddr_command : std_logic_vector(15 downto 0); +signal ddr_command_we : std_logic; + +signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM +signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM +signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address +signal ddr_req : std_logic; -- Request DDR SDRAM access +signal ddr_req_ack : std_logic; -- Request acknowledge +signal ddr_busy : std_logic; -- Request acknowledge +signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE +signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer +signal ddr_read_en : std_logic; -- Enable signal for read data +signal ddr_write_en : std_logic; -- Enable (read) signal for data write +signal refresh_en : std_logic; + +signal sdr_clk_p : std_logic; -- ddr_sdram_clock +signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock +signal cke_q_p : std_logic; -- clock enable +signal cs_qn_p : std_logic; -- /chip select +signal ras_qn_p : std_logic; -- /ras +signal cas_qn_p : std_logic; -- /cas +signal we_qn_p : std_logic; -- /write enable +signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00" +signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write +signal ba_q_p : std_logic_vector(1 downto 0); -- bank select +signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus +signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus + +constant min_time : time := 1.875 ns; + +begin + + clock1: + process + begin + loop + cpu_clk_4x <= '1'; + wait for min_time; + cpu_clk_4x <= '0'; + wait for min_time; + end loop; + end process; + + clock2: + process + begin + loop + cpu_clk_2x <= '1' after 100 ps; + wait until rising_edge(cpu_clk_4x); + cpu_clk_2x <= '0' after 100 ps; + wait until rising_edge(cpu_clk_4x); + end loop; + end process; + + clock3: + process + begin + loop + cpu_clk <= '1' after 100 ps; + wait until rising_edge(cpu_clk_2x); + cpu_clk <= '0' after 100 ps; + wait until rising_edge(cpu_clk_2x); + end loop; + end process; + + ddr_in_clk_2x <= cpu_clk_4x after 1 ns; + + clock4: + process + begin + loop + ddr_in_clk <= '0' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + ddr_in_clk <= '1' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + end loop; + end process; + + inputdata: + process + begin + -- Wait until global reset released + loop + ddr_command <= x"0000"; + ddr_command_we <= '0'; + ddr_data_write <= x"000000000"; + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + break_out <= '0'; + refresh_en <= '0'; + + wait until falling_edge(areset); + + -- DDR initialization sequence + -- Wait more than 200 us + wait for 201000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load extended mode register + -- Enable DLL + -- Normal drive strength + wait until rising_edge(cpu_clk); + ddr_command <= x"2000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0121"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Enable refresh + refresh_en <= '1'; + + -- Wait 30 us (minimum 2 autorefresh cycles) + wait for 30000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Deactivate Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0021"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 2 us (DLL stable) + wait for 2000 ns; + + -- Write data to DDR + wait until rising_edge(cpu_clk_2x); + ddr_data_write <= x"312345678"; + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_write_en); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + wait for 100 ns; + + -- Read data from DDR + wait until rising_edge(cpu_clk_2x); + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '1'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_req_ack); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + + + + wait for 100 ns; + break_out <= '1'; + wait for 100 ns; + + end loop; + + end process; + + ddr_ctrl: + ddr_top port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + + -- Command interface + ddr_command => ddr_command, + ddr_command_we => ddr_command_we, + refresh_en => refresh_en, + + -- Data interface signals + ddr_data_read => ddr_data_read, + ddr_data_write => ddr_data_write, + ddr_req_adr => ddr_req_adr, + ddr_req => ddr_req, + ddr_req_ack => ddr_req_ack, + ddr_busy => ddr_busy, + ddr_rd_wr_n => ddr_rd_wr_n, + ddr_req_len => ddr_req_len, + ddr_read_en => ddr_read_en, + ddr_write_en => ddr_write_en, + -- DDR SDRAM Signals + sdr_clk_p => sdr_clk_p, + sdr_clk_n_p => sdr_clk_n_p, + cke_q_p => cke_q_p, + cs_qn_p => cs_qn_p, + ras_qn_p => ras_qn_p, + cas_qn_p => cas_qn_p, + we_qn_p => we_qn_p, + dm_q_p => dm_q_p, + dqs_q_p => dqs_q_p, + ba_q_p => ba_q_p, + sdr_a_p => sdr_a_p, + sdr_d_p => sdr_d_p); + + myram: + MT46V16M16 generic map( + tCK => 7.500 ns, + tCH => 3.375 ns, -- 0.45*tCK + tCL => 3.375 ns, -- 0.45*tCK + tDH => 0.500 ns, + tDS => 0.500 ns, + tIH => 0.900 ns, + tIS => 0.900 ns, + tMRD => 15.000 ns, + tRAS => 40.000 ns, + tRAP => 20.000 ns, + tRC => 65.000 ns, + tRFC => 75.000 ns, + tRCD => 20.000 ns, + tRP => 20.000 ns, + tRRD => 15.000 ns, + tWR => 15.000 ns, + addr_bits => 13, + data_bits => 16, + cols_bits => 9) + port map( + Dq => sdr_d_p, + Dqs => dqs_q_p, + Addr => sdr_a_p, + Ba => ba_q_p, + Clk => sdr_clk_p, + Clk_n => sdr_clk_n_p, + Cke => cke_q_p, + Cs_n => cs_qn_p, + Ras_n => ras_qn_p, + Cas_n => cas_qn_p, + We_n => we_qn_p, + Dm => dm_q_p); + +end behave; diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd new file mode 100644 index 0000000..d5e98e1 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd @@ -0,0 +1,660 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity ddr_top is + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + 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; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(23 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_req_ack : out std_logic; -- Request acknowledge + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- 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 +end ddr_top; + +architecture behave of ddr_top is + +attribute keep : string; + +signal cpu_clk_tog : std_logic; +signal ddr_cmd : std_logic_vector(15 downto 0); +signal ddr_cmd_we_smp : std_logic; +signal new_command : std_logic; + +signal cpu_clk_2x_smp1 : std_logic; +signal cpu_clk_2x_smp2 : std_logic; +signal cpu_clk_4x_smp1 : std_logic; +signal cpu_clk_4x_smp2 : std_logic; + +signal clk2_phase : std_logic; +signal clk4_phase : std_logic_vector(3 downto 0); +signal clk4_phase_short : std_logic_vector(1 downto 0); + +signal ddr_clk_tog : std_logic; +signal ddr_clk_smp1 : std_logic; +signal ddr_clk_smp2 : std_logic; +signal ddr_clk_phase : std_logic; + +signal smp_req_adr : std_logic_vector(23 downto 1); +signal smp_req_type : std_logic; +signal smp_req_len : std_logic; +signal ddr_write_en_int : std_logic; +signal ddr_read_en_int : std_logic; + +signal dqs_q : std_logic_vector(1 downto 0); +signal dqs_oe_n : std_logic_vector(1 downto 0); +attribute keep of dqs_oe_n:signal is "true"; +signal cas_qn : std_logic; +signal ras_qn : std_logic; +signal we_qn : std_logic; +signal ba_q : std_logic_vector(1 downto 0); +signal sdr_clk : std_logic; +signal sdr_clk_n : std_logic; +signal sdr_a : std_logic_vector(12 downto 0); +signal sdr_d : std_logic_vector(15 downto 0); +signal sdr_smp : std_logic_vector(35 downto 0); +signal sdr_oe_n : std_logic_vector(15 downto 0); +attribute keep of sdr_oe_n:signal is "true"; +signal sdr_oe_ctrl : std_logic; +signal sdr_wr_msw : std_logic_vector(17 downto 0); +attribute keep of sdr_wr_msw:signal is "true"; +signal dm_q : std_logic_vector(1 downto 0); + +signal cas_n_smp : std_logic; +signal ras_n_smp : std_logic; +signal we_n_smp : std_logic; +signal read_start_sig : std_logic; +signal sdr_d_in : std_logic_vector(15 downto 0); +signal read_time_cnt : std_logic_vector(1 downto 0); +signal read_input_en : std_logic; +signal ddr_data_read_int : std_logic_vector(31 downto 0); + +signal refresh_pend : std_logic; +signal refresh_end : std_logic; +signal refresh_cnt : std_logic_vector(9 downto 0); +signal refresh_wait_cnt : std_logic_vector(2 downto 0); +signal refresh_wait_end : std_logic; + +signal cas_qn_p_del : std_logic; +signal ras_qn_p_del : std_logic; +signal we_qn_p_del : std_logic; +signal sdr_d_p_del : std_logic_vector(15 downto 0); + +type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1, + rd_nop2, pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2, + wr_nop3, cmd, cpu_pre, refresh, refresh_wait); +signal ddr_state : state_type; + +constant Clk_to_Output : time := 2.2 ns; +constant Sim_Delay : time := 0.5 ns; +constant Input_Setup : time := 2.5 ns; + +constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110"; + +begin + + iotimingon: + if simulate_io_time generate + begin + cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup; + ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup; + we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup; + sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cas_qn_p_del <= cas_qn_p; + ras_qn_p_del <= ras_qn_p; + we_qn_p_del <= we_qn_p; + sdr_d_p_del <= sdr_d_p; + end generate; + + ddr_write_en <= ddr_write_en_int; + ddr_read_en <= ddr_read_en_int; + ddr_data_read <= ddr_data_read_int; + + process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order + begin -- to find phase relation with 2x and 4x clocks + if areset = '1' then + cpu_clk_tog <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_tog <= not(cpu_clk_tog) after Sim_Delay; + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x + begin + if areset = '1' then + cpu_clk_2x_smp1 <= '0'; + cpu_clk_2x_smp2 <= '0'; + clk2_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_2x_smp1 <= cpu_clk_tog after Sim_Delay; + cpu_clk_2x_smp2 <= cpu_clk_2x_smp1 after Sim_Delay; + if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then + clk2_phase <= '0' after Sim_Delay; + else + clk2_phase <= not(clk2_phase) after Sim_Delay; + end if; + end if; + end process; + + process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x + begin + if areset = '1' then + cpu_clk_4x_smp1 <= '0'; + cpu_clk_4x_smp2 <= '0'; + clk4_phase <= "0000"; + clk4_phase_short <= "00"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + cpu_clk_4x_smp1 <= cpu_clk_tog after Sim_Delay; + cpu_clk_4x_smp2 <= cpu_clk_4x_smp1 after Sim_Delay; + if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then + clk4_phase <= "0100" after Sim_Delay; + clk4_phase_short <= "01" after Sim_Delay; + else + clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3)) after Sim_Delay; + clk4_phase_short <= clk4_phase_short(0) & clk4_phase_short(1); + end if; + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_clk <= '0'; + sdr_clk_n <= '0'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + if clk4_phase_short(0) = '1' then + sdr_clk <= '1' after Sim_Delay; + else + sdr_clk <= '0' after Sim_Delay; + end if; + if clk4_phase_short(1) = '1' then + sdr_clk_n <= '1' after Sim_Delay; + else + sdr_clk_n <= '0' after Sim_Delay; + end if; + end if; + end process; + + cke_q_p <= '1' after Clk_to_Output; + cs_qn_p <= '0' after Clk_to_Output; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + ras_qn_p <= '1'; + cas_qn_p <= '1'; + we_qn_p <= '1'; + dqs_q_p <= "ZZ"; + sdr_a_p <= "0000000000000"; + ba_q_p <= "00"; + sdr_clk_p <= '0'; + sdr_clk_n_p <= '1'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + ras_qn_p <= transport ras_qn after Clk_to_Output; + cas_qn_p <= transport cas_qn after Clk_to_Output; + we_qn_p <= transport we_qn after Clk_to_Output; + if dqs_oe_n(0) = '0' then + dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output; + else + dqs_q_p(0) <= transport 'Z' after Clk_to_Output; + end if; + if dqs_oe_n(1) = '0' then + dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output; + else + dqs_q_p(1) <= transport 'Z' after Clk_to_Output; + end if; + sdr_a_p <= transport sdr_a after Clk_to_Output; + ba_q_p <= transport ba_q after Clk_to_Output; + sdr_clk_p <= transport sdr_clk after Clk_to_Output; + sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_state <= idle; + ras_qn <= '1'; + cas_qn <= '1'; + we_qn <= '1'; + smp_req_adr <= (others => '0'); + smp_req_type <= '0'; + smp_req_len <= '0'; + sdr_a <= "XXXXXXXXXXXXX"; + ba_q <= "00"; + ddr_req_ack <= '0'; + ddr_busy <= '1'; + ddr_write_en_int <= '0'; + ddr_read_en_int <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + -- Default values + ras_qn <= '1' after Sim_Delay; + cas_qn <= '1' after Sim_Delay; + we_qn <= '1' after Sim_Delay; + sdr_a <= "XXXXXXXXXXXXX" after Sim_Delay; + ba_q <= "00" after Sim_Delay; + ddr_req_ack <= '0' after Sim_Delay; + ddr_busy <= '1' after Sim_Delay; + ddr_write_en_int <= '0' after Sim_Delay; + ddr_read_en_int <= '0' after Sim_Delay; + + case ddr_state is + when idle => + smp_req_adr <= ddr_req_adr after Sim_Delay; + smp_req_type <= ddr_rd_wr_n after Sim_Delay; + smp_req_len <= ddr_req_len after Sim_Delay; + ddr_busy <= '0' after Sim_Delay; + if refresh_pend = '1' then + ddr_state <= refresh after Sim_Delay; + elsif new_command = '1' then + if ddr_cmd(15) = '1' then + ddr_state <= cpu_pre after Sim_Delay; + else + ddr_state <= cmd after Sim_Delay; + end if; + elsif ddr_req = '1' then + ddr_state <= act after Sim_Delay; + else + ddr_state <= idle after Sim_Delay; + end if; + when act => + sdr_a <= smp_req_adr(23 downto 11) after Sim_Delay; + ras_qn <= '0' after Sim_Delay; + ddr_state <= act_nop1 after Sim_Delay; + ddr_req_ack <= '1' after Sim_Delay; + ddr_write_en_int <= not(smp_req_type) after Sim_Delay; + when act_nop1 => + ddr_state <= act_nop2 after Sim_Delay; + when act_nop2 => + ddr_state <= rd_wr after Sim_Delay; + when rd_wr => + sdr_a(10) <= '0' after Sim_Delay; -- Disable auto precharge + sdr_a(9 downto 0) <= smp_req_adr(10 downto 1) after Sim_Delay; + cas_qn <= '0' after Sim_Delay; + we_qn <= smp_req_type after Sim_Delay; + if smp_req_type = '1' then + ddr_state <= rd_nop1 after Sim_Delay; + else + ddr_state <= wr_nop1 after Sim_Delay; + end if; + when wr_nop1 => + ddr_state <= wr_nop2 after Sim_Delay; + when wr_nop2 => + ddr_state <= wr_nop3 after Sim_Delay; + when wr_nop3 => + ddr_state <= pre after Sim_Delay; + when rd_nop1 => + ddr_state <= rd_nop2 after Sim_Delay; + when rd_nop2 => + ddr_state <= pre after Sim_Delay; + when pre => + ras_qn <= '0' after Sim_Delay; + we_qn <= '0' after Sim_Delay; + sdr_a(10) <= '1' after Sim_Delay; -- Precharge all banks + ddr_state <= pre_nop1 after Sim_Delay; + ddr_read_en_int <= smp_req_type after Sim_Delay; + when pre_nop1 => + ddr_state <= pre_nop2 after Sim_Delay; + when cmd => + cas_qn <= '0' after Sim_Delay; + ras_qn <= '0' after Sim_Delay; + we_qn <= '0' after Sim_Delay; + ba_q <= ddr_cmd(14 downto 13) after Sim_Delay; + sdr_a <= ddr_cmd(12 downto 0) after Sim_Delay; + ddr_state <= idle after Sim_Delay; + when cpu_pre => + ddr_state <= pre after Sim_Delay; + when refresh => + cas_qn <= '0' after Sim_Delay; + ras_qn <= '0' after Sim_Delay; + ddr_state <= refresh_wait after Sim_Delay; + when refresh_wait => + if refresh_wait_end = '1' then + ddr_state <= pre after Sim_Delay; + end if; + when pre_nop2 => + ddr_state <= idle after Sim_Delay; + when others => + ddr_state <= idle after Sim_Delay; + end case; + end if; + end process; + + process(cpu_clk, areset) -- + begin + if areset = '1' then + ddr_cmd <= "0000000000000000"; + elsif (cpu_clk'event and cpu_clk = '1') then + if ddr_command_we = '1' then + ddr_cmd <= ddr_command after Sim_Delay; + else + ddr_cmd <= ddr_cmd after Sim_Delay; + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_cmd_we_smp <= '0'; + new_command <= '0'; + sdr_smp <= "000000000000000000000000000000000000"; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + ddr_cmd_we_smp <= ddr_command_we after Sim_Delay; + if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then + new_command <= '1' after Sim_Delay; + elsif ddr_state = cmd or ddr_state = cpu_pre then + new_command <= '0' after Sim_Delay; + else + new_command <= new_command after Sim_Delay; + end if; + + if ddr_write_en_int = '1' then + sdr_smp <= ddr_data_write after Sim_Delay; + else + sdr_smp <= sdr_smp after Sim_Delay; + end if; + + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + dqs_q <= "00"; + dqs_oe_n <= "11"; + sdr_oe_ctrl <= '1'; + sdr_wr_msw <= "000000000000000000"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + + if ddr_state = wr_nop1 and clk4_phase_short(0) = '1' then + sdr_oe_ctrl <= '0' after Sim_Delay; + elsif ddr_state = wr_nop3 and clk4_phase_short(0) = '1' then + sdr_oe_ctrl <= '1' after Sim_Delay; + else + sdr_oe_ctrl <= sdr_oe_ctrl after Sim_Delay; + end if; + + if ddr_state = idle or ddr_state = wr_nop3 then + dqs_oe_n <= "11" after Sim_Delay; + elsif ddr_state = wr_nop1 then + dqs_oe_n <= "00" after Sim_Delay; + else + dqs_oe_n <= dqs_oe_n after Sim_Delay; + end if; + + if (ddr_state = wr_nop2 and clk4_phase_short(0) = '1') then + dqs_q <= "11" after Sim_Delay; + else + dqs_q <= "00" after Sim_Delay; + end if; + + if ddr_state = wr_nop1 and clk4_phase_short(1) = '1' then + sdr_wr_msw <= "111111111111111111" after Sim_Delay; + else + sdr_wr_msw <= "000000000000000000" after Sim_Delay; + end if; + + end if; + end process; + + -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_d_p <= "ZZZZZZZZZZZZZZZZ"; + dm_q_p <= "11"; + sdr_oe_n <= "1111111111111111"; + sdr_d <= "0000000000000000"; + dm_q <= "11"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then + + for i in 0 to 15 loop + if sdr_oe_n(i) = '0' then + sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output; + else + sdr_d_p(i) <= transport 'Z' after Clk_to_Output; + end if; + end loop; + + dm_q_p <= transport dm_q after Clk_to_Output; + + if sdr_oe_ctrl = '0' then + sdr_oe_n <= "0000000000000000" after Sim_Delay; + else + sdr_oe_n <= "1111111111111111" after Sim_Delay; + end if; + + for i in 0 to 15 loop + if sdr_wr_msw(i) = '0' then + sdr_d(i) <= sdr_smp(i) after Sim_Delay; + else + sdr_d(i) <= sdr_smp(i+16) after Sim_Delay; + end if; + end loop; + + for i in 0 to 1 loop + if sdr_wr_msw(i+16) = '0' then + dm_q(i) <= sdr_smp(i+32) after Sim_Delay; + else + dm_q(i) <= sdr_smp(i+34) after Sim_Delay; + end if; + end loop; + + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + refresh_cnt <= "0000000000"; + refresh_pend <= '0'; + refresh_end <= '0'; + refresh_wait_cnt <= "000"; + refresh_wait_end <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + if refresh_cnt = Refresh_Interval then + refresh_end <= '1'; + else + refresh_end <= '0'; + end if; + + if refresh_end = '1' then + refresh_cnt <= "0000000000"; + else + refresh_cnt <= refresh_cnt + '1'; + end if; + + if refresh_end = '1' and refresh_en = '1' then + refresh_pend <= '1' after Sim_Delay; + elsif ddr_state = refresh then + refresh_pend <= '0' after Sim_Delay; + else + refresh_pend <= refresh_pend after Sim_Delay; + end if; + + if ddr_state = refresh_wait then + refresh_wait_cnt <= refresh_wait_cnt + '1'; + else + refresh_wait_cnt <= "000"; + end if; + + if refresh_wait_cnt = "111" then + refresh_wait_end <= '1' after Sim_Delay; + else + refresh_wait_end <= '0' after Sim_Delay; + end if; + + end if; + end process; + + -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING + + process(ddr_in_clk, areset) + begin + if areset = '1' then + ddr_clk_tog <= '0'; + elsif (ddr_in_clk'event and ddr_in_clk = '1') then + ddr_clk_tog <= not(ddr_clk_tog) after Sim_Delay; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_clk_smp1 <= '0'; + ddr_clk_smp2 <= '0'; + ddr_clk_phase <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + ddr_clk_smp1 <= ddr_clk_tog after Sim_Delay; + ddr_clk_smp2 <= ddr_clk_smp1 after Sim_Delay; + if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then + ddr_clk_phase <= '0'; + else + ddr_clk_phase <= not(ddr_clk_phase); + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + cas_n_smp <= '0'; + ras_n_smp <= '0'; + we_n_smp <= '0'; + read_start_sig <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + cas_n_smp <= cas_qn_p_del after Sim_Delay; + ras_n_smp <= ras_qn_p_del after Sim_Delay; + we_n_smp <= we_qn_p_del after Sim_Delay; + if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then + read_start_sig <= '1' after Sim_Delay; + else + read_start_sig <= '0' after Sim_Delay; + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + sdr_d_in <= "0000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + sdr_d_in <= sdr_d_p_del after Sim_Delay; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + read_time_cnt <= "00"; + read_input_en <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + + if read_start_sig = '1' then + read_time_cnt <= "01" after Sim_Delay; + elsif read_time_cnt = "00" then + read_time_cnt <= read_time_cnt after Sim_Delay; + else + read_time_cnt <= read_time_cnt + '1' after Sim_Delay; + end if; + + if read_time_cnt = "11" then + read_input_en <= '1' after Sim_Delay; + else + read_input_en <= '0' after Sim_Delay; + end if; + + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_data_read_int <= "00000000000000000000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + ddr_data_read_int(31 downto 16) <= "0000000000000000" after Sim_Delay; + if read_input_en = '1' then + ddr_data_read_int(15 downto 0) <= sdr_d_in after Sim_Delay; + else + ddr_data_read_int(15 downto 0) <= ddr_data_read_int(15 downto 0) after Sim_Delay; + end if; + end if; + end process; + + + + + + + + + -- ############### + + process(cpu_clk, areset) -- + begin + if areset = '1' then + elsif (cpu_clk'event and cpu_clk = '1') then + end if; + end process; + + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + end if; + end process; + + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + end if; + end process; + + +end behave; + + diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd new file mode 100644 index 0000000..6b89345 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd @@ -0,0 +1,1320 @@ +----------------------------------------------------------------------------------------- +-- +-- File Name: MT46V16M16.VHD +-- Version: 2.1 +-- Date: January 14th, 2002 +-- Model: Behavioral +-- Simulator: NCDesktop - http://www.cadence.com +-- ModelSim PE - http://www.model.com +-- +-- Dependencies: None +-- +-- Author: Son P. Huynh +-- Email: sphuynh@micron.com +-- Phone: (208) 368-3825 +-- Company: Micron Technology, Inc. +-- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks) +-- +-- Description: Micron 256 Mb SDRAM DDR (Double Data Rate) +-- +-- Limitation: Doesn't model internal refresh counter +-- +-- Note: +-- +-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY +-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR +-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. +-- +-- Copyright (c) 1998 Micron Semiconductor Products, Inc. +-- All rights researved +-- +-- Rev Author Date Changes +-- --- ---------------------------- ---------- ------------------------------------- +-- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter +-- Micron Technology, Inc. +-- +-- 2.0 Son P. Huynh 11/08/2001 - Second release +-- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE +-- +----------------------------------------------------------------------------------------- + +LIBRARY IEEE; + USE IEEE.STD_LOGIC_1164.ALL; + USE IEEE.STD_LOGIC_UNSIGNED.ALL; + USE IEEE.STD_LOGIC_ARITH.ALL; + +ENTITY MT46V16M16 IS + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); +END MT46V16M16; + +ARCHITECTURE behave OF MT46V16M16 IS + -- Array for Read pipeline + TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Write pipeline + TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Auto Precharge + TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER; + + -- Array for Manual Precharge + TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Burst Terminate + TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Memory Access + TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + TYPE Array_ram_pntr IS ACCESS Array_ram_type; + TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr; + + -- Data pair + SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0); + SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0); + + -- Mode Register + SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + -- Command Decode Variables + SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0'; + SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; + + -- Burst Length Decode Variables + SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0'; + + -- Cas Latency Decode Variables + SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0'; + + -- Internal Control Signals + SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; + + -- System Clock + SIGNAL Sys_clk : STD_LOGIC := '0'; + + -- Dqs buffer + SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + +BEGIN + -- Strip the strength + Cs_in <= To_X01 (Cs_n); + Ras_in <= To_X01 (Ras_n); + Cas_in <= To_X01 (Cas_n); + We_in <= To_X01 (We_n); + + -- Commands Decode + Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; + Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; + Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); + Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1)); + Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1)); + Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); + Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; + Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); + + -- Burst Length Decode + Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); + Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); + Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + + -- CAS Latency Decode + Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4)); + Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); + Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4)); + + -- Dqs buffer + Dqs <= Dqs_out; + + -- + -- System Clock + -- + int_clk : PROCESS (Clk, Clk_n) + VARIABLE ClkZ, CkeZ : STD_LOGIC := '0'; + begin + IF Clk = '1' AND Clk_n = '0' THEN + ClkZ := '1'; + CkeZ := Cke; + ELSIF Clk = '0' AND Clk_n = '1' THEN + ClkZ := '0'; + END IF; + Sys_clk <= CkeZ AND ClkZ; + END PROCESS; + + -- + -- Main Process + -- + state_register : PROCESS + -- Precharge Variables + VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; + + -- Activate Variables + VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; + + -- Data IO variables + VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; + + -- Internal address mux variables + VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0); + VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + + -- DLL Reset variables + VARIABLE DLL_enable : STD_LOGIC := '0'; + VARIABLE DLL_reset : STD_LOGIC := '0'; + VARIABLE DLL_done : STD_LOGIC := '0'; + VARIABLE DLL_count : INTEGER := 0; + + -- Timing Check + VARIABLE MRD_chk : TIME := 0 ns; + VARIABLE RFC_chk : TIME := 0 ns; + VARIABLE RRD_chk : TIME := 0 ns; + VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; + VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns; + VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; + VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; + VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; + VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns; + + -- Read pipeline variables + VARIABLE Read_cmnd : Array_Read_cmnd; + VARIABLE Read_bank : Array_Read_bank; + VARIABLE Read_cols : Array_Read_cols; + + -- Write pipeline variables + VARIABLE Write_cmnd : Array_Write_cmnd; + VARIABLE Write_bank : Array_Write_bank; + VARIABLE Write_cols : Array_Write_cols; + + -- Auto Precharge variables + VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 ); + + -- Manual Precharge variables + VARIABLE A10_precharge : Array_A10_precharge; + VARIABLE Bank_precharge : Array_Bank_precharge; + VARIABLE Cmnd_precharge : Array_Cmnd_precharge; + + -- Burst Terminate variable + VARIABLE Cmnd_bst : Array_Cmnd_bst; + + -- Memory Banks + VARIABLE Bank0 : Array_ram_stor; + VARIABLE Bank1 : Array_ram_stor; + VARIABLE Bank2 : Array_ram_stor; + VARIABLE Bank3 : Array_ram_stor; + + -- Burst Counter + VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Internal Dqs initialize + VARIABLE Dqs_int : STD_LOGIC := '0'; + + -- Data buffer for DM Mask + VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + + -- + -- Initialize empty rows + -- + PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS + VARIABLE i, j : INTEGER := 0; + BEGIN + IF Bank = "00" THEN + IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty + Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank0 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "01" THEN + IF Bank1 (Row_index) = NULL THEN + Bank1 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank1 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "10" THEN + IF Bank2 (Row_index) = NULL THEN + Bank2 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank2 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "11" THEN + IF Bank3 (Row_index) = NULL THEN + Bank3 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank3 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + END IF; + END; + + -- + -- Burst Counter + -- + PROCEDURE Burst_decode IS + VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0'); + BEGIN + -- Advance burst counter + Burst_counter := Burst_counter + 1; + + -- Burst Type + IF Mode_reg (3) = '0' THEN + Cols_temp := Cols_addr + 1; + ELSIF Mode_reg (3) = '1' THEN + Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2); + Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1); + Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0); + END IF; + + -- Burst Length + IF Burst_length_2 = '1' THEN + Cols_addr (0) := Cols_temp (0); + ELSIF Burst_length_4 = '1' THEN + Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0); + ELSIF Burst_length_8 = '1' THEN + Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0); + ELSE + Cols_addr := Cols_temp; + END IF; + + -- Data counter + IF Burst_length_2 = '1' THEN + IF Burst_counter >= 2 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_4 = '1' THEN + IF Burst_counter >= 4 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_8 = '1' THEN + IF Burst_counter >= 8 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + END IF; + END; + + BEGIN + WAIT ON Sys_clk; + + -- + -- Manual Precharge Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- A10 Precharge Pipeline + A10_precharge(0) := A10_precharge(1); + A10_precharge(1) := A10_precharge(2); + A10_precharge(2) := A10_precharge(3); + A10_precharge(3) := A10_precharge(4); + A10_precharge(4) := A10_precharge(5); + A10_precharge(5) := A10_precharge(6); + A10_precharge(6) := A10_precharge(7); + A10_precharge(7) := A10_precharge(8); + A10_precharge(8) := '0'; + + -- Bank Precharge Pipeline + Bank_precharge(0) := Bank_precharge(1); + Bank_precharge(1) := Bank_precharge(2); + Bank_precharge(2) := Bank_precharge(3); + Bank_precharge(3) := Bank_precharge(4); + Bank_precharge(4) := Bank_precharge(5); + Bank_precharge(5) := Bank_precharge(6); + Bank_precharge(6) := Bank_precharge(7); + Bank_precharge(7) := Bank_precharge(8); + Bank_precharge(8) := "00"; + + -- Command Precharge Pipeline + Cmnd_precharge(0) := Cmnd_precharge(1); + Cmnd_precharge(1) := Cmnd_precharge(2); + Cmnd_precharge(2) := Cmnd_precharge(3); + Cmnd_precharge(3) := Cmnd_precharge(4); + Cmnd_precharge(4) := Cmnd_precharge(5); + Cmnd_precharge(5) := Cmnd_precharge(6); + Cmnd_precharge(6) := Cmnd_precharge(7); + Cmnd_precharge(7) := Cmnd_precharge(8); + Cmnd_precharge(8) := '0'; + + -- Terminate Read if same bank or all banks + IF ((Cmnd_precharge (0) = '1') AND + (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND + (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Burst Terminate Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Burst Terminate pipeline + Cmnd_bst (0) := Cmnd_bst (1); + Cmnd_bst (1) := Cmnd_bst (2); + Cmnd_bst (2) := Cmnd_bst (3); + Cmnd_bst (3) := Cmnd_bst (4); + Cmnd_bst (4) := Cmnd_bst (5); + Cmnd_bst (5) := Cmnd_bst (6); + Cmnd_bst (6) := Cmnd_bst (7); + Cmnd_bst (7) := Cmnd_bst (8); + Cmnd_bst (8) := '0'; + + -- Terminate current Read + IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Dq and Dqs Drivers + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Read Command Pipeline + Read_cmnd (0) := Read_cmnd (1); + Read_cmnd (1) := Read_cmnd (2); + Read_cmnd (2) := Read_cmnd (3); + Read_cmnd (3) := Read_cmnd (4); + Read_cmnd (4) := Read_cmnd (5); + Read_cmnd (5) := Read_cmnd (6); + Read_cmnd (6) := Read_cmnd (7); + Read_cmnd (7) := Read_cmnd (8); + Read_cmnd (8) := '0'; + + -- Read Bank Pipeline + Read_bank (0) := Read_bank (1); + Read_bank (1) := Read_bank (2); + Read_bank (2) := Read_bank (3); + Read_bank (3) := Read_bank (4); + Read_bank (4) := Read_bank (5); + Read_bank (5) := Read_bank (6); + Read_bank (6) := Read_bank (7); + Read_bank (7) := Read_bank (8); + Read_bank (8) := "00"; + + -- Read Column Pipeline + Read_cols (0) := Read_cols (1); + Read_cols (1) := Read_cols (2); + Read_cols (2) := Read_cols (3); + Read_cols (3) := Read_cols (4); + Read_cols (4) := Read_cols (5); + Read_cols (5) := Read_cols (6); + Read_cols (6) := Read_cols (7); + Read_cols (7) := Read_cols (8); + Read_cols (8) := (OTHERS => '0'); + + -- Initialize Read command + IF Read_cmnd (0) = '1' THEN + Data_out_enable := '1'; + Bank_addr := Read_bank (0); + Cols_addr := Read_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Toggle Dqs during Read command + IF Data_out_enable = '1' THEN + Dqs_int := '0'; + IF Dqs_out = "00" THEN + Dqs_out <= "11"; + ELSIF Dqs_out = "11" THEN + Dqs_out <= "00"; + ELSE + Dqs_out <= "00"; + END IF; + ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN + Dqs_out <= "ZZ"; + END IF; + + -- Initialize Dqs for Read command + IF Read_cmnd (2) = '1' THEN + IF Data_out_enable = '0' THEN + Dqs_int := '1'; + Dqs_out <= "00"; + END IF; + END IF; + + -- Read Latch + IF Data_out_enable = '1' THEN + -- Initialize Memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Output Data + CASE Bank_addr IS + WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Increase Burst Counter + Burst_decode; + ELSE + Dq <= (OTHERS => 'Z'); + END IF; + END IF; + + -- + -- Write FIFO and DM Mask Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Write command pipeline + Write_cmnd (0) := Write_cmnd (1); + Write_cmnd (1) := Write_cmnd (2); + Write_cmnd (2) := '0'; + + -- Write command pipeline + Write_bank (0) := Write_bank (1); + Write_bank (1) := Write_bank (2); + Write_bank (2) := "00"; + + -- Write column pipeline + Write_cols (0) := Write_cols (1); + Write_cols (1) := Write_cols (2); + Write_cols (2) := (OTHERS => '0'); + + -- Initialize Write command + IF Write_cmnd (0) = '1' THEN + Data_in_enable := '1'; + Bank_addr := Write_bank (0); + Cols_addr := Write_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Write data + IF Data_in_enable = '1' THEN + -- Initialize memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Write first data + IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (0) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0); + END IF; + IF Dm_pair (1) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- Write second data + IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (2) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16); + END IF; + IF Dm_pair (3) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- tWR start and tWTR check + IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN + CASE Bank_addr IS + WHEN "00" => WR_chk0 := NOW; + WHEN "01" => WR_chk1 := NOW; + WHEN "10" => WR_chk2 := NOW; + WHEN OTHERS => WR_chk3 := NOW; + END CASE; + + -- tWTR check + ASSERT (Read_enable = '0') + REPORT "tWTR violation during Read" + SEVERITY WARNING; + END IF; + END IF; + END IF; + + -- + -- Auto Precharge Calculation + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Precharge counter + IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN + Count_precharge (0) := Count_precharge (0) + 1; + END IF; + IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN + Count_precharge (1) := Count_precharge (1) + 1; + END IF; + IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN + Count_precharge (2) := Count_precharge (2) + 1; + END IF; + IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN + Count_precharge (3) := Count_precharge (3) + 1; + END IF; + + -- Read with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. BL/2 cycles after command + IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Read_precharge(0) := '0'; + END IF; + END IF; + IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Read_precharge(1) := '0'; + END IF; + END IF; + IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Read_precharge(2) := '0'; + END IF; + END IF; + IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Read_precharge(3) := '0'; + END IF; + END IF; + + -- Write with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. Two clock after last burst + -- Since tWR is time base, the model will compensate tRP + IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW - ((2 * tCK) - tWR); + Write_precharge(0) := '0'; + END IF; + END IF; + IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW - ((2 * tCK) - tWR); + Write_precharge(1) := '0'; + END IF; + END IF; + IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW - ((2 * tCK) - tWR); + Write_precharge(2) := '0'; + END IF; + END IF; + IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW - ((2 * tCK) - tWR); + Write_precharge(3) := '0'; + END IF; + END IF; + END IF; + + -- + -- DLL Counter + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + IF (DLL_Reset = '1' AND DLL_done = '0') THEN + DLL_count := DLL_count + 1; + IF (DLL_count >= 200) THEN + DLL_done := '1'; + END IF; + END IF; + END IF; + + -- + -- Control Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Auto Refresh + IF Aref_enable = '1' THEN + -- Auto Refresh to Auto Refresh + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Auto Refresh" + SEVERITY WARNING; + + -- Record current tRFC time + RFC_chk := NOW; + END IF; + + -- Extended Load Mode Register + IF Ext_mode_enable = '1' THEN + IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN + IF (Addr (0) = '0') THEN + DLL_enable := '1'; + ELSE + DLL_enable := '0'; + END IF; + END IF; + + -- Precharge to EMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Extended Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Extended Load Register" + SEVERITY WARNING; + + -- LMR/EMR to EMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Extended Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Load Mode Register + IF Mode_reg_enable = '1' THEN + -- Register mode + Mode_reg <= Addr; + + -- DLL Reset + IF (DLL_enable = '1' AND Addr (8) = '1') THEN + DLL_reset := '1'; + DLL_done := '0'; + DLL_count := 0; + ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN + ASSERT (FALSE) + REPORT "DLL is ENABLE: DLL RESET is require" + SEVERITY WARNING; + ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN + ASSERT (FALSE) + REPORT "DLL is DISABLE: DLL RESET will be ignored" + SEVERITY WARNING; + END IF; + + -- Precharge to LMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Load Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Load Mode Register" + SEVERITY WARNING; + + -- LMR/ELMR to LMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid Burst Length + ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2 + (Addr (2 DOWNTO 0) = "010") OR -- BL = 4 + (Addr (2 DOWNTO 0) = "011")) -- BL = 8 + REPORT "Invalid Burst Length during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid CAS Latency + ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0 + (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5 + REPORT "Invalid CAS Latency during Load Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Active Block (latch Bank and Row Address) + IF Active_enable = '1' THEN + -- Activate an OPEN bank can corrupt data + ASSERT ((Ba = "00" AND Act_b0 = '0') OR + (Ba = "01" AND Act_b1 = '0') OR + (Ba = "10" AND Act_b2 = '0') OR + (Ba = "11" AND Act_b3 = '0')) + REPORT "Bank is already activated - data can be corrupted" + SEVERITY WARNING; + + -- Activate Bank 0 + IF Ba = "00" AND Pc_b0 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk0 >= tRC) + REPORT "tRC violation during Activate Bank 0" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk0 >= tRP) + REPORT "tRP violation during Activate Bank 0" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b0 := '1'; + Pc_b0 := '0'; + B0_row_addr := Addr; + RC_chk0 := NOW; + RCD_chk0 := NOW; + RAS_chk0 := NOW; + RAP_chk0 := NOW; + END IF; + + -- Activate Bank 1 + IF Ba = "01" AND Pc_b1 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk1 >= tRC) + REPORT "tRC violation during Activate Bank 1" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk1 >= tRP) + REPORT "tRP violation during Activate Bank 1" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b1 := '1'; + Pc_b1 := '0'; + B1_row_addr := Addr; + RC_chk1 := NOW; + RCD_chk1 := NOW; + RAS_chk1 := NOW; + RAP_chk1 := NOW; + END IF; + + -- Activate Bank 2 + IF Ba = "10" AND Pc_b2 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk2 >= tRC) + REPORT "tRC violation during Activate Bank 2" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk2 >= tRP) + REPORT "tRP violation during Activate Bank 2" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b2 := '1'; + Pc_b2 := '0'; + B2_row_addr := Addr; + RC_chk2 := NOW; + RCD_chk2 := NOW; + RAS_chk2 := NOW; + RAP_chk2 := NOW; + END IF; + + -- Activate Bank 3 + IF Ba = "11" AND Pc_b3 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk3 >= tRC) + REPORT "tRC violation during Activate Bank 3" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk3 >= tRP) + REPORT "tRP violation during Activate Bank 3" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b3 := '1'; + Pc_b3 := '0'; + B3_row_addr := Addr; + RC_chk3 := NOW; + RCD_chk3 := NOW; + RAS_chk3 := NOW; + RAP_chk3 := NOW; + END IF; + + -- Activate Bank A to Activate Bank B + IF (Prev_bank /= Ba) THEN + ASSERT (NOW - RRD_chk >= tRRD) + REPORT "tRRD violation during Activate" + SEVERITY WARNING; + END IF; + + -- AutoRefresh to Activate + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Activate" + SEVERITY WARNING; + + -- Record Variables for Checking Violation + RRD_chk := NOW; + Prev_bank := Ba; + END IF; + + -- Precharge Block - Consider NOP if bank already precharged or in process of precharging + IF Prech_enable = '1' THEN + -- EMR or LMR to Precharge + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Precharge" + SEVERITY WARNING; + + -- Precharge Bank 0 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN + Act_b0 := '0'; + Pc_b0 := '1'; + RP_chk0 := NOW; + + -- Activate to Precharge bank 0 + ASSERT (NOW - RAS_chk0 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk0 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 1 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN + Act_b1 := '0'; + Pc_b1 := '1'; + RP_chk1 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk1 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk1 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 2 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN + Act_b2 := '0'; + Pc_b2 := '1'; + RP_chk2 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk2 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk2 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 3 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN + Act_b3 := '0'; + Pc_b3 := '1'; + RP_chk3 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk3 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk3 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Pipeline for READ + IF CAS_latency_15 = '1' THEN + A10_precharge (3) := Addr(10); + Bank_precharge (3) := Ba; + Cmnd_precharge (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + A10_precharge (4) := Addr(10); + Bank_precharge (4) := Ba; + Cmnd_precharge (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + A10_precharge (5) := Addr(10); + Bank_precharge (5) := Ba; + Cmnd_precharge (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + A10_precharge (6) := Addr(10); + Bank_precharge (6) := Ba; + Cmnd_precharge (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + A10_precharge (8) := Addr(10); + Bank_precharge (8) := Ba; + Cmnd_precharge (8) := '1'; + END IF; + END IF; + + -- Burst Terminate + IF Burst_term = '1' THEN + -- Pipeline for Read + IF CAS_latency_15 = '1' THEN + Cmnd_bst (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + Cmnd_bst (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + Cmnd_bst (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + Cmnd_bst (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + Cmnd_bst (8) := '1'; + END IF; + + -- Terminate Write + ASSERT (Data_in_enable = '0') + REPORT "It's illegal to Burst Terminate a Write" + SEVERITY WARNING; + + -- Terminate Read with Auto Precharge + ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND + Read_precharge (2) = '0' AND Read_precharge (3) = '0') + REPORT "It's illegal to Burst Terminate a Read with Auto Precharge" + SEVERITY WARNING; + END IF; + + -- Read Command + IF Read_enable = '1' THEN + -- CAS Latency Pipeline + IF Cas_latency_15 = '1' THEN + Read_cmnd (3) := '1'; + Read_bank (3) := Ba; + Read_cols (3) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_2 = '1' THEN + Read_cmnd (4) := '1'; + Read_bank (4) := Ba; + Read_cols (4) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_25 = '1' THEN + Read_cmnd (5) := '1'; + Read_bank (5) := Ba; + Read_cols (5) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_3 = '1' THEN + Read_cmnd (6) := '1'; + Read_bank (6) := Ba; + Read_cols (6) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_4 = '1' THEN + Read_cmnd (8) := '1'; + Read_bank (8) := Ba; + Read_cols (8) := Addr (8 DOWNTO 0); + END IF; + + -- Write to Read: Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Interrupting a Read with Auto Precharge (same bank only) + ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Read with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Read + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Read" + SEVERITY WARNING; + + -- Activate to Read without Auto Precharge + IF Addr (10) = '0' THEN + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Read" + SEVERITY WARNING; + END IF; + + -- Activate to Read with Auto Precharge + IF Addr (10) = '1' THEN + ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR + (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR + (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR + (Ba = "11" AND NOW - RAP_chk3 >= tRAP)) + REPORT "tRAP violation during Read" + SEVERITY WARNING; + END IF; + + -- Auto precharge + IF Addr (10) = '1' THEN + Read_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + + -- DLL Check + IF (DLL_reset = '1') THEN + ASSERT (DLL_done = '1') + REPORT "DLL RESET not complete" + SEVERITY WARNING; + END IF; + END IF; + + -- Write Command + IF Write_enable = '1' THEN + -- Pipeline for Write + Write_cmnd (2) := '1'; + Write_bank (2) := Ba; + Write_cols (2) := Addr (8 DOWNTO 0); + + -- Interrupting a Write with Auto Precharge (same bank only) + ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Write with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Write" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Write" + SEVERITY WARNING; + + -- Auto precharge + IF Addr (10) = '1' THEN + Write_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + END IF; + END IF; + END PROCESS; + + -- + -- Dqs Receiver + -- + dqs_rcvrs : PROCESS + VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0); + VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + BEGIN + WAIT ON Dqs; + -- Latch data at posedge Dqs + IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN + Dq_temp := Dq; + Dm_temp := Dm; + END IF; + -- Latch data at negedge Dqs + IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN + Dq_pair <= (Dq & Dq_temp); + Dm_pair <= (Dm & Dm_temp); + END IF; + END PROCESS; + + -- + -- Setup timing checks + -- + Setup_check : PROCESS + BEGIN + WAIT ON Sys_clk; + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIS) + REPORT "CKE Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIS) + REPORT "CS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIS) + REPORT "CAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIS) + REPORT "RAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIS) + REPORT "WE# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIS) + REPORT "ADDR Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIS) + REPORT "BA Setup time violation -- tIS" + SEVERITY WARNING; + END IF; + END PROCESS; + + -- + -- Hold timing checks + -- + Hold_check : PROCESS + BEGIN + WAIT ON Sys_clk'DELAYED (tIH); + IF Sys_clk'DELAYED (tIH) = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIH) + REPORT "CKE Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIH) + REPORT "CS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIH) + REPORT "CAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIH) + REPORT "RAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIH) + REPORT "WE# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIH) + REPORT "ADDR Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIH) + REPORT "BA Hold time violation -- tIH" + SEVERITY WARNING; + END IF; + END PROCESS; + +END behave; 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 @@ + + + + + + + eCosBoard firmware build file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 + 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) + 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; diff --git a/zpu/hdl/zpu4/test/dmips/build.sh b/zpu/hdl/zpu4/test/dmips/build.sh new file mode 100644 index 0000000..51ff3de --- /dev/null +++ b/zpu/hdl/zpu4/test/dmips/build.sh @@ -0,0 +1,3 @@ +zpu-elf-gcc -DTIME $ZPUDIR/dhrystone/dhry_*.c -O3 -Wl,--gc-sections -Wl,--relax -abel -o dmips.elf +zpu-elf-objdump --disassemble-all >dmips.dis dmips.elf +zpu-elf-objcopy -O binary dmips.elf dmips.bin diff --git a/zpu/hdl/zpu4/test/dmips/dmips.bin b/zpu/hdl/zpu4/test/dmips/dmips.bin new file mode 100644 index 0000000..1330fe3 Binary files /dev/null and b/zpu/hdl/zpu4/test/dmips/dmips.bin differ diff --git a/zpu/hdl/zpu4/test/dmips/dmips.elf b/zpu/hdl/zpu4/test/dmips/dmips.elf new file mode 100644 index 0000000..7254a5d Binary files /dev/null and b/zpu/hdl/zpu4/test/dmips/dmips.elf differ diff --git a/zpu/hdl/zpu4/test/dmips/dmips.ram b/zpu/hdl/zpu4/test/dmips/dmips.ram new file mode 100644 index 0000000..27b991d --- /dev/null +++ b/zpu/hdl/zpu4/test/dmips/dmips.ram @@ -0,0 +1,3507 @@ +0 => x"0b0b0b0b", +1 => x"80700b0b", +2 => x"80dde00c", +3 => x"3a0b0b0b", +4 => x"b9990400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"0bb9e02d", +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"0b0b80dd", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0ba1", +171 => x"c92d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0ba2", +179 => x"8d2d5050", +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"80dddc0c", +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"c78e3f04", +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"0b80edd0", +282 => x"08528412", +283 => x"08708106", +284 => x"515170f6", +285 => x"38710881", +286 => x"ff06800c", +287 => x"833d0d04", +288 => x"ff3d0d0b", +289 => x"0b80edd0", +290 => x"08528412", +291 => x"08700a10", +292 => x"0a708106", +293 => x"51515170", +294 => x"f1387372", +295 => x"0c833d0d", +296 => x"0480dddc", +297 => x"08802ea8", +298 => x"38838080", +299 => x"0b0b0b80", +300 => x"edd00c82", +301 => x"a0800b0b", +302 => x"0b80edd4", +303 => x"0c829080", +304 => x"0b80ede4", +305 => x"0c0b0b80", +306 => x"edd80b80", +307 => x"ede80c04", +308 => x"f8808080", +309 => x"a40b0b0b", +310 => x"80edd00c", +311 => x"f8808082", +312 => x"800b0b0b", +313 => x"80edd40c", +314 => x"f8808084", +315 => x"800b80ed", +316 => x"e40cf880", +317 => x"8080940b", +318 => x"80ede80c", +319 => x"f8808080", +320 => x"9c0b80ed", +321 => x"e00cf880", +322 => x"8080a00b", +323 => x"80edec0c", +324 => x"04f23d0d", +325 => x"600b0b80", +326 => x"edd40856", +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"5196bc3f", +337 => x"7d7f7a72", +338 => x"077c7207", +339 => x"71716081", +340 => x"05415f5d", +341 => x"5b595755", +342 => x"7a8724bb", +343 => x"380b0b80", +344 => x"edd4087b", +345 => x"10101170", +346 => x"08585155", +347 => x"807681ff", +348 => x"067c832b", +349 => x"56585276", +350 => x"537b5196", +351 => x"823f7d7f", +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"80eddc33", +363 => x"5170a738", +364 => x"80dde808", +365 => x"70085252", +366 => x"70802e94", +367 => x"38841280", +368 => x"dde80c70", +369 => x"2d80dde8", +370 => x"08700852", +371 => x"5270ee38", +372 => x"810b80ed", +373 => x"dc34833d", +374 => x"0d040480", +375 => x"3d0d0b0b", +376 => x"80edcc08", +377 => x"802e8e38", +378 => x"0b0b0b0b", +379 => x"800b802e", +380 => x"09810685", +381 => x"38823d0d", +382 => x"040b0b80", +383 => x"edcc510b", +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"7351938d", +480 => x"3f80080b", +481 => x"0b80cfc0", +482 => x"05337670", +483 => x"81055834", +484 => x"8a527351", +485 => x"92b33f80", +486 => x"08548008", +487 => x"802effac", +488 => x"388a5273", +489 => x"5192e63f", +490 => x"80080b0b", +491 => x"80cfc005", +492 => x"33767081", +493 => x"0558348a", +494 => x"52735192", +495 => x"8c3f8008", +496 => x"548008ff", +497 => x"b538ff84", +498 => x"39745276", +499 => x"53b43dff", +500 => x"b8055190", +501 => x"ff3fa33d", +502 => x"0856fed9", +503 => x"39803d0d", +504 => x"80c10b81", +505 => x"bc9c3480", +506 => x"0b81bdf4", +507 => x"0c70800c", +508 => x"823d0d04", +509 => x"ff3d0d80", +510 => x"0b81bc9c", +511 => x"33525270", +512 => x"80c12e99", +513 => x"387181bd", +514 => x"f4080781", +515 => x"bdf40c80", +516 => x"c20b81bc", +517 => x"a0347080", +518 => x"0c833d0d", +519 => x"04810b81", +520 => x"bdf40807", +521 => x"81bdf40c", +522 => x"80c20b81", +523 => x"bca03470", +524 => x"800c833d", +525 => x"0d04fd3d", +526 => x"0d757008", +527 => x"8a055353", +528 => x"81bc9c33", +529 => x"517080c1", +530 => x"2e8b3873", +531 => x"f3387080", +532 => x"0c853d0d", +533 => x"04ff1270", +534 => x"81bc9808", +535 => x"31740c80", +536 => x"0c853d0d", +537 => x"04fc3d0d", +538 => x"81bca408", +539 => x"5574802e", +540 => x"8c387675", +541 => x"08710c81", +542 => x"bca40856", +543 => x"548c1553", +544 => x"81bc9808", +545 => x"528a518d", +546 => x"b83f7380", +547 => x"0c863d0d", +548 => x"04fb3d0d", +549 => x"77700856", +550 => x"56b05381", +551 => x"bca40852", +552 => x"74519ed1", +553 => x"3f850b8c", +554 => x"170c850b", +555 => x"8c160c75", +556 => x"08750c81", +557 => x"bca40854", +558 => x"73802e8a", +559 => x"38730875", +560 => x"0c81bca4", +561 => x"08548c14", +562 => x"5381bc98", +563 => x"08528a51", +564 => x"8cef3f84", +565 => x"1508ad38", +566 => x"860b8c16", +567 => x"0c881552", +568 => x"88160851", +569 => x"8bfb3f81", +570 => x"bca40870", +571 => x"08760c54", +572 => x"8c157054", +573 => x"548a5273", +574 => x"08518cc5", +575 => x"3f73800c", +576 => x"873d0d04", +577 => x"750854b0", +578 => x"53735275", +579 => x"519de63f", +580 => x"73800c87", +581 => x"3d0d04e1", +582 => x"3d0db051", +583 => x"91883f80", +584 => x"0881bc94", +585 => x"0cb05190", +586 => x"fd3f8008", +587 => x"81bca40c", +588 => x"81bc9408", +589 => x"80080c80", +590 => x"0b800884", +591 => x"050c820b", +592 => x"80088805", +593 => x"0ca80b80", +594 => x"088c050c", +595 => x"9f530b0b", +596 => x"80cfcc52", +597 => x"80089005", +598 => x"519d9a3f", +599 => x"993d5c9f", +600 => x"530b0b80", +601 => x"cfec527b", +602 => x"519d8a3f", +603 => x"8a0b80fa", +604 => x"dc0c0b0b", +605 => x"80da9051", +606 => x"f9b43f0b", +607 => x"0b80d08c", +608 => x"51f9ab3f", +609 => x"0b0b80da", +610 => x"9051f9a2", +611 => x"3f80ddf0", +612 => x"08802e89", +613 => x"aa380b0b", +614 => x"80d0bc51", +615 => x"f9903f0b", +616 => x"0b80da90", +617 => x"51f9873f", +618 => x"80ddec08", +619 => x"520b0b80", +620 => x"d0e851f8", +621 => x"f93f8051", +622 => x"aecb3f80", +623 => x"0880edfc", +624 => x"0c810b92", +625 => x"3d5c5880", +626 => x"0b80ddec", +627 => x"082582d5", +628 => x"388e3d5d", +629 => x"80c10b81", +630 => x"bc9c3481", +631 => x"0b81bdf4", +632 => x"0c80c20b", +633 => x"81bca034", +634 => x"825e835a", +635 => x"9f530b0b", +636 => x"80d19852", +637 => x"7a519bfd", +638 => x"3f815f80", +639 => x"7b537c52", +640 => x"558be23f", +641 => x"8008752e", +642 => x"09810683", +643 => x"38815574", +644 => x"81bdf40c", +645 => x"7d705755", +646 => x"748325a1", +647 => x"38741010", +648 => x"15fd0540", +649 => x"a13dffbc", +650 => x"05538352", +651 => x"75518a91", +652 => x"3f811e70", +653 => x"5f705755", +654 => x"837524e1", +655 => x"387f5474", +656 => x"5380ee80", +657 => x"5281bcac", +658 => x"518a863f", +659 => x"81bca408", +660 => x"70085757", +661 => x"b0537652", +662 => x"75519b99", +663 => x"3f850b8c", +664 => x"180c850b", +665 => x"8c170c76", +666 => x"08760c81", +667 => x"bca40855", +668 => x"74802e8a", +669 => x"38740876", +670 => x"0c81bca4", +671 => x"08558c15", +672 => x"5381bc98", +673 => x"08528a51", +674 => x"89b73f84", +675 => x"160887b8", +676 => x"38860b8c", +677 => x"170c8816", +678 => x"52881708", +679 => x"5188c23f", +680 => x"81bca408", +681 => x"7008770c", +682 => x"578c1670", +683 => x"54558a52", +684 => x"74085189", +685 => x"8c3f80c1", +686 => x"0b81bca0", +687 => x"33565675", +688 => x"7526a238", +689 => x"80c35275", +690 => x"5189f03f", +691 => x"80087f2e", +692 => x"87b13881", +693 => x"167081ff", +694 => x"0681bca0", +695 => x"33525755", +696 => x"747627e0", +697 => x"38797e29", +698 => x"60705471", +699 => x"5358558b", +700 => x"d83f8008", +701 => x"5e747731", +702 => x"70872980", +703 => x"08318008", +704 => x"8a0581bc", +705 => x"9c3381bc", +706 => x"98085a5a", +707 => x"525b5576", +708 => x"80c12e87", +709 => x"9d3878f7", +710 => x"38811858", +711 => x"80ddec08", +712 => x"7825fdb0", +713 => x"388051ab", +714 => x"dc3f8008", +715 => x"81bc900c", +716 => x"0b0b80d1", +717 => x"b851f5f6", +718 => x"3f0b0b80", +719 => x"da9051f5", +720 => x"ed3f0b0b", +721 => x"80d1c851", +722 => x"f5e43f0b", +723 => x"0b80da90", +724 => x"51f5db3f", +725 => x"81bc9808", +726 => x"520b0b80", +727 => x"d28051f5", +728 => x"cd3f8552", +729 => x"0b0b80d2", +730 => x"9c51f5c2", +731 => x"3f81bdf4", +732 => x"08520b0b", +733 => x"80d2b851", +734 => x"f5b43f81", +735 => x"520b0b80", +736 => x"d29c51f5", +737 => x"a93f81bc", +738 => x"9c33520b", +739 => x"0b80d2d4", +740 => x"51f59b3f", +741 => x"80c1520b", +742 => x"0b80d2f0", +743 => x"51f58f3f", +744 => x"81bca033", +745 => x"520b0b80", +746 => x"d38c51f5", +747 => x"813f80c2", +748 => x"520b0b80", +749 => x"d2f051f4", +750 => x"f53f81bc", +751 => x"cc08520b", +752 => x"0b80d3a8", +753 => x"51f4e73f", +754 => x"87520b0b", +755 => x"80d29c51", +756 => x"f4dc3f80", +757 => x"fadc0852", +758 => x"0b0b80d3", +759 => x"c451f4ce", +760 => x"3f0b0b80", +761 => x"d3e051f4", +762 => x"c53f0b0b", +763 => x"80d48c51", +764 => x"f4bc3f81", +765 => x"bca40870", +766 => x"0853560b", +767 => x"0b80d498", +768 => x"51f4ab3f", +769 => x"0b0b80d4", +770 => x"b451f4a2", +771 => x"3f81bca4", +772 => x"08841108", +773 => x"535d0b0b", +774 => x"80d4e851", +775 => x"f4903f80", +776 => x"520b0b80", +777 => x"d29c51f4", +778 => x"853f81bc", +779 => x"a4088811", +780 => x"0853580b", +781 => x"0b80d584", +782 => x"51f3f33f", +783 => x"82520b0b", +784 => x"80d29c51", +785 => x"f3e83f81", +786 => x"bca4088c", +787 => x"11085359", +788 => x"0b0b80d5", +789 => x"a051f3d6", +790 => x"3f91520b", +791 => x"0b80d29c", +792 => x"51f3cb3f", +793 => x"81bca408", +794 => x"9005520b", +795 => x"0b80d5bc", +796 => x"51f3bb3f", +797 => x"0b0b80d5", +798 => x"d851f3b2", +799 => x"3f0b0b80", +800 => x"d69051f3", +801 => x"a93f81bc", +802 => x"94087008", +803 => x"53570b0b", +804 => x"80d49851", +805 => x"f3983f0b", +806 => x"0b80d6a4", +807 => x"51f38f3f", +808 => x"81bc9408", +809 => x"84110853", +810 => x"550b0b80", +811 => x"d4e851f2", +812 => x"fd3f8052", +813 => x"0b0b80d2", +814 => x"9c51f2f2", +815 => x"3f81bc94", +816 => x"08881108", +817 => x"53560b0b", +818 => x"80d58451", +819 => x"f2e03f81", +820 => x"520b0b80", +821 => x"d29c51f2", +822 => x"d53f81bc", +823 => x"94088c11", +824 => x"08535d0b", +825 => x"0b80d5a0", +826 => x"51f2c33f", +827 => x"92520b0b", +828 => x"80d29c51", +829 => x"f2b83f81", +830 => x"bc940890", +831 => x"05520b0b", +832 => x"80d5bc51", +833 => x"f2a83f0b", +834 => x"0b80d5d8", +835 => x"51f29f3f", +836 => x"7d520b0b", +837 => x"80d6e451", +838 => x"f2943f85", +839 => x"520b0b80", +840 => x"d29c51f2", +841 => x"893f7952", +842 => x"0b0b80d7", +843 => x"8051f1fe", +844 => x"3f8d520b", +845 => x"0b80d29c", +846 => x"51f1f33f", +847 => x"7f520b0b", +848 => x"80d79c51", +849 => x"f1e83f87", +850 => x"520b0b80", +851 => x"d29c51f1", +852 => x"dd3f7e52", +853 => x"0b0b80d7", +854 => x"b851f1d2", +855 => x"3f81520b", +856 => x"0b80d29c", +857 => x"51f1c73f", +858 => x"7b520b0b", +859 => x"80d7d451", +860 => x"f1bc3f0b", +861 => x"0b80d7f0", +862 => x"51f1b33f", +863 => x"7a520b0b", +864 => x"80d8a851", +865 => x"f1a83f0b", +866 => x"0b80d8c4", +867 => x"51f19f3f", +868 => x"0b0b80da", +869 => x"9051f196", +870 => x"3f81bc90", +871 => x"0880edfc", +872 => x"08317080", +873 => x"edf80c52", +874 => x"0b0b80d8", +875 => x"fc51f0fe", +876 => x"3f80edf8", +877 => x"08568176", +878 => x"2581a538", +879 => x"80ddec08", +880 => x"705376bd", +881 => x"84c02952", +882 => x"5b85fe3f", +883 => x"800880ed", +884 => x"f00c7552", +885 => x"7a5185f1", +886 => x"3f800880", +887 => x"edf40c75", +888 => x"8ddd2952", +889 => x"7a87e829", +890 => x"5185de3f", +891 => x"800881bc", +892 => x"a80c0b0b", +893 => x"80d98c51", +894 => x"f0b43f80", +895 => x"edf00852", +896 => x"0b0b80d9", +897 => x"bc51f0a6", +898 => x"3f0b0b80", +899 => x"d9c451f0", +900 => x"9d3f80ed", +901 => x"f408520b", +902 => x"0b80d9bc", +903 => x"51f08f3f", +904 => x"81bca808", +905 => x"520b0b80", +906 => x"d9f451f0", +907 => x"813f0b0b", +908 => x"80da9051", +909 => x"eff83f80", +910 => x"0b800ca1", +911 => x"3d0d040b", +912 => x"0b80da94", +913 => x"51f6d539", +914 => x"760856b0", +915 => x"53755276", +916 => x"5193a23f", +917 => x"80c10b81", +918 => x"bca03356", +919 => x"56f8e039", +920 => x"0b0b80da", +921 => x"c451efc6", +922 => x"3f0b0b80", +923 => x"dafc51ef", +924 => x"bd3f0b0b", +925 => x"80da9051", +926 => x"efb43f80", +927 => x"0b800ca1", +928 => x"3d0d04a1", +929 => x"3dffb805", +930 => x"52805180", +931 => x"d43f9f53", +932 => x"0b0b80db", +933 => x"9c527a51", +934 => x"92db3f77", +935 => x"7881bc98", +936 => x"0c811770", +937 => x"81ff0681", +938 => x"bca03352", +939 => x"58565af8", +940 => x"af39ff15", +941 => x"7077317e", +942 => x"0c59800b", +943 => x"81195959", +944 => x"80ddec08", +945 => x"7825f68c", +946 => x"38f8da39", +947 => x"ff3d0d73", +948 => x"82327030", +949 => x"70720780", +950 => x"25800c52", +951 => x"52833d0d", +952 => x"04fe3d0d", +953 => x"74767153", +954 => x"54527182", +955 => x"2e833883", +956 => x"5171812e", +957 => x"9a388172", +958 => x"269f3871", +959 => x"822eb838", +960 => x"71842ea9", +961 => x"3870730c", +962 => x"70800c84", +963 => x"3d0d0480", +964 => x"e40b81bc", +965 => x"9808258b", +966 => x"3880730c", +967 => x"70800c84", +968 => x"3d0d0483", +969 => x"730c7080", +970 => x"0c843d0d", +971 => x"0482730c", +972 => x"70800c84", +973 => x"3d0d0481", +974 => x"730c7080", +975 => x"0c843d0d", +976 => x"04803d0d", +977 => x"74741482", +978 => x"05710c80", +979 => x"0c823d0d", +980 => x"04f73d0d", +981 => x"7b7d7f61", +982 => x"85127082", +983 => x"2b751170", +984 => x"74717084", +985 => x"05530c5a", +986 => x"5a5d5b76", +987 => x"0c7980f8", +988 => x"180c7986", +989 => x"12525758", +990 => x"5a5a7676", +991 => x"24993876", +992 => x"b329822b", +993 => x"79115153", +994 => x"76737084", +995 => x"05550c81", +996 => x"14547574", +997 => x"25f23876", +998 => x"81cc2919", +999 => x"fc110881", +1000 => x"05fc120c", +1001 => x"7a197008", +1002 => x"9fa0130c", +1003 => x"5856850b", +1004 => x"81bc980c", +1005 => x"75800c8b", +1006 => x"3d0d04fe", +1007 => x"3d0d0293", +1008 => x"05335180", +1009 => x"02840597", +1010 => x"05335452", +1011 => x"70732e88", +1012 => x"3871800c", +1013 => x"843d0d04", +1014 => x"7081bc9c", +1015 => x"34810b80", +1016 => x"0c843d0d", +1017 => x"04f83d0d", +1018 => x"7a7c5956", +1019 => x"820b8319", +1020 => x"55557416", +1021 => x"70337533", +1022 => x"5b515372", +1023 => x"792e80c6", +1024 => x"3880c10b", +1025 => x"81168116", +1026 => x"56565782", +1027 => x"7525e338", +1028 => x"ffa91770", +1029 => x"81ff0655", +1030 => x"59738226", +1031 => x"83388755", +1032 => x"81537680", +1033 => x"d22e9838", +1034 => x"77527551", +1035 => x"91993f80", +1036 => x"53728008", +1037 => x"25893887", +1038 => x"1581bc98", +1039 => x"0c815372", +1040 => x"800c8a3d", +1041 => x"0d047281", +1042 => x"bc9c3482", +1043 => x"7525ffa2", +1044 => x"38ffbd39", +1045 => x"f93d0d79", +1046 => x"7b7d5458", +1047 => x"72597730", +1048 => x"79703070", +1049 => x"72079f2a", +1050 => x"7371315a", +1051 => x"52597779", +1052 => x"56730c53", +1053 => x"7384130c", +1054 => x"54800c89", +1055 => x"3d0d04f9", +1056 => x"3d0d797b", +1057 => x"7d7f5654", +1058 => x"52547280", +1059 => x"2ea03870", +1060 => x"577158a0", +1061 => x"73315280", +1062 => x"7225a138", +1063 => x"7770742b", +1064 => x"5770732a", +1065 => x"78752b07", +1066 => x"56517476", +1067 => x"53517074", +1068 => x"0c718415", +1069 => x"0c73800c", +1070 => x"893d0d04", +1071 => x"80567772", +1072 => x"302b5574", +1073 => x"765351e6", +1074 => x"39fb3d0d", +1075 => x"77795555", +1076 => x"80567575", +1077 => x"24ab3880", +1078 => x"74249d38", +1079 => x"80537352", +1080 => x"745180e1", +1081 => x"3f800854", +1082 => x"75802e85", +1083 => x"38800830", +1084 => x"5473800c", +1085 => x"873d0d04", +1086 => x"73307681", +1087 => x"325754dc", +1088 => x"39743055", +1089 => x"81567380", +1090 => x"25d238ec", +1091 => x"39fa3d0d", +1092 => x"787a5755", +1093 => x"80577675", +1094 => x"24a43875", +1095 => x"9f2c5481", +1096 => x"53757432", +1097 => x"74315274", +1098 => x"519b3f80", +1099 => x"08547680", +1100 => x"2e853880", +1101 => x"08305473", +1102 => x"800c883d", +1103 => x"0d047430", +1104 => x"558157d7", +1105 => x"39fc3d0d", +1106 => x"76785354", +1107 => x"81538074", +1108 => x"73265255", +1109 => x"72802e98", +1110 => x"3870802e", +1111 => x"ab388072", +1112 => x"24a63871", +1113 => x"10731075", +1114 => x"72265354", +1115 => x"5272ea38", +1116 => x"73517883", +1117 => x"38745170", +1118 => x"800c863d", +1119 => x"0d04720a", +1120 => x"100a720a", +1121 => x"100a5353", +1122 => x"72802ee4", +1123 => x"38717426", +1124 => x"ed387372", +1125 => x"31757407", +1126 => x"740a100a", +1127 => x"740a100a", +1128 => x"55555654", +1129 => x"e339ff3d", +1130 => x"0d735280", +1131 => x"e6b80851", +1132 => x"963f833d", +1133 => x"0d04ff3d", +1134 => x"0d735280", +1135 => x"e6b80851", +1136 => x"90cc3f83", +1137 => x"3d0d04f4", +1138 => x"3d0d7e60", +1139 => x"8b1170f8", +1140 => x"065b5555", +1141 => x"5d729626", +1142 => x"83389058", +1143 => x"80782474", +1144 => x"79260755", +1145 => x"80547474", +1146 => x"2e098106", +1147 => x"80ca387c", +1148 => x"518d9e3f", +1149 => x"7783f726", +1150 => x"80c53877", +1151 => x"832a7010", +1152 => x"101080de", +1153 => x"b0058c11", +1154 => x"08585854", +1155 => x"75772e81", +1156 => x"f0388416", +1157 => x"08fc068c", +1158 => x"17088818", +1159 => x"08718c12", +1160 => x"0c88120c", +1161 => x"5b760584", +1162 => x"11088107", +1163 => x"84120c53", +1164 => x"7c518cde", +1165 => x"3f881654", +1166 => x"73800c8e", +1167 => x"3d0d0477", +1168 => x"892a7883", +1169 => x"2a585473", +1170 => x"802ebf38", +1171 => x"77862ab8", +1172 => x"05578474", +1173 => x"27b43880", +1174 => x"db145794", +1175 => x"7427ab38", +1176 => x"778c2a80", +1177 => x"ee055780", +1178 => x"d474279e", +1179 => x"38778f2a", +1180 => x"80f70557", +1181 => x"82d47427", +1182 => x"91387792", +1183 => x"2a80fc05", +1184 => x"578ad474", +1185 => x"27843880", +1186 => x"fe577610", +1187 => x"101080de", +1188 => x"b0058c11", +1189 => x"08565374", +1190 => x"732ea338", +1191 => x"841508fc", +1192 => x"06707931", +1193 => x"5556738f", +1194 => x"2488e438", +1195 => x"73802588", +1196 => x"e6388c15", +1197 => x"08557473", +1198 => x"2e098106", +1199 => x"df388117", +1200 => x"5980dec0", +1201 => x"08567580", +1202 => x"deb82e82", +1203 => x"cc388416", +1204 => x"08fc0670", +1205 => x"79315555", +1206 => x"738f24bb", +1207 => x"3880deb8", +1208 => x"0b80dec4", +1209 => x"0c80deb8", +1210 => x"0b80dec0", +1211 => x"0c807424", +1212 => x"80db3874", +1213 => x"16841108", +1214 => x"81078412", +1215 => x"0c53feb0", +1216 => x"3988168c", +1217 => x"11085759", +1218 => x"75792e09", +1219 => x"8106fe82", +1220 => x"38821459", +1221 => x"ffab3977", +1222 => x"16788107", +1223 => x"84180c70", +1224 => x"80dec40c", +1225 => x"7080dec0", +1226 => x"0c80deb8", +1227 => x"0b8c120c", +1228 => x"8c110888", +1229 => x"120c7481", +1230 => x"0784120c", +1231 => x"74057471", +1232 => x"0c5b7c51", +1233 => x"8acc3f88", +1234 => x"1654fdec", +1235 => x"3983ff75", +1236 => x"27839138", +1237 => x"74892a75", +1238 => x"832a5454", +1239 => x"73802ebf", +1240 => x"3874862a", +1241 => x"b8055384", +1242 => x"7427b438", +1243 => x"80db1453", +1244 => x"947427ab", +1245 => x"38748c2a", +1246 => x"80ee0553", +1247 => x"80d47427", +1248 => x"9e38748f", +1249 => x"2a80f705", +1250 => x"5382d474", +1251 => x"27913874", +1252 => x"922a80fc", +1253 => x"05538ad4", +1254 => x"74278438", +1255 => x"80fe5372", +1256 => x"10101080", +1257 => x"deb00588", +1258 => x"11085557", +1259 => x"73772e86", +1260 => x"8b388414", +1261 => x"08fc065b", +1262 => x"747b278d", +1263 => x"38881408", +1264 => x"5473772e", +1265 => x"098106ea", +1266 => x"388c1408", +1267 => x"80deb00b", +1268 => x"84050871", +1269 => x"8c190c75", +1270 => x"88190c77", +1271 => x"88130c5c", +1272 => x"57758c15", +1273 => x"0c785380", +1274 => x"79248398", +1275 => x"3872822c", +1276 => x"81712b56", +1277 => x"56747b26", +1278 => x"80ca387a", +1279 => x"75065776", +1280 => x"82a33878", +1281 => x"fc068405", +1282 => x"59741070", +1283 => x"7c065555", +1284 => x"73829238", +1285 => x"841959f1", +1286 => x"3980deb0", +1287 => x"0b840508", +1288 => x"79545b78", +1289 => x"8025c638", +1290 => x"82da3974", +1291 => x"097b0670", +1292 => x"80deb00b", +1293 => x"84050c5b", +1294 => x"74105574", +1295 => x"7b268538", +1296 => x"7485bc38", +1297 => x"80deb00b", +1298 => x"88050870", +1299 => x"841208fc", +1300 => x"06707b31", +1301 => x"7b72268f", +1302 => x"7225075d", +1303 => x"575c5c55", +1304 => x"78802e80", +1305 => x"d9387915", +1306 => x"80dea808", +1307 => x"19901159", +1308 => x"545680de", +1309 => x"a408ff2e", +1310 => x"8838a08f", +1311 => x"13e08006", +1312 => x"5776527c", +1313 => x"51888c3f", +1314 => x"80085480", +1315 => x"08ff2e90", +1316 => x"38800876", +1317 => x"2782a738", +1318 => x"7480deb0", +1319 => x"2e829f38", +1320 => x"80deb00b", +1321 => x"88050855", +1322 => x"841508fc", +1323 => x"06707931", +1324 => x"7972268f", +1325 => x"7225075d", +1326 => x"555a7a83", +1327 => x"f2387781", +1328 => x"0784160c", +1329 => x"77157080", +1330 => x"deb00b88", +1331 => x"050c7481", +1332 => x"0784120c", +1333 => x"567c5187", +1334 => x"b93f8815", +1335 => x"5473800c", +1336 => x"8e3d0d04", +1337 => x"74832a70", +1338 => x"54548074", +1339 => x"24819b38", +1340 => x"72822c81", +1341 => x"712b80de", +1342 => x"b4080770", +1343 => x"80deb00b", +1344 => x"84050c75", +1345 => x"10101080", +1346 => x"deb00588", +1347 => x"1108718c", +1348 => x"1b0c7088", +1349 => x"1b0c7988", +1350 => x"130c5755", +1351 => x"5c55758c", +1352 => x"150cfdc1", +1353 => x"39787910", +1354 => x"101080de", +1355 => x"b0057056", +1356 => x"5b5c8c14", +1357 => x"08567574", +1358 => x"2ea33884", +1359 => x"1608fc06", +1360 => x"70793158", +1361 => x"53768f24", +1362 => x"83f13876", +1363 => x"802584af", +1364 => x"388c1608", +1365 => x"5675742e", +1366 => x"098106df", +1367 => x"38881481", +1368 => x"1a708306", +1369 => x"555a5472", +1370 => x"c9387b83", +1371 => x"06567580", +1372 => x"2efdb838", +1373 => x"ff1cf81b", +1374 => x"5b5c881a", +1375 => x"087a2eea", +1376 => x"38fdb539", +1377 => x"831953fc", +1378 => x"e4398314", +1379 => x"70822c81", +1380 => x"712b80de", +1381 => x"b4080770", +1382 => x"80deb00b", +1383 => x"84050c76", +1384 => x"10101080", +1385 => x"deb00588", +1386 => x"1108718c", +1387 => x"1c0c7088", +1388 => x"1c0c7a88", +1389 => x"130c5853", +1390 => x"5d5653fe", +1391 => x"e13980dd", +1392 => x"f4081759", +1393 => x"8008762e", +1394 => x"818b3880", +1395 => x"dea408ff", +1396 => x"2e848e38", +1397 => x"73763119", +1398 => x"80ddf40c", +1399 => x"73870670", +1400 => x"56537280", +1401 => x"2e883888", +1402 => x"73317015", +1403 => x"55557614", +1404 => x"9fff06a0", +1405 => x"80713116", +1406 => x"70547e53", +1407 => x"51538593", +1408 => x"3f800856", +1409 => x"8008ff2e", +1410 => x"819e3880", +1411 => x"ddf40813", +1412 => x"7080ddf4", +1413 => x"0c747580", +1414 => x"deb00b88", +1415 => x"050c7776", +1416 => x"31158107", +1417 => x"5556597a", +1418 => x"80deb02e", +1419 => x"83c03879", +1420 => x"8f2682ef", +1421 => x"38810b84", +1422 => x"150c8415", +1423 => x"08fc0670", +1424 => x"79317972", +1425 => x"268f7225", +1426 => x"075d555a", +1427 => x"7a802efc", +1428 => x"ed3880db", +1429 => x"3980089f", +1430 => x"ff065574", +1431 => x"feed3878", +1432 => x"80ddf40c", +1433 => x"80deb00b", +1434 => x"8805087a", +1435 => x"18810784", +1436 => x"120c5580", +1437 => x"dea00879", +1438 => x"27863878", +1439 => x"80dea00c", +1440 => x"80de9c08", +1441 => x"7927fca0", +1442 => x"387880de", +1443 => x"9c0c8415", +1444 => x"08fc0670", +1445 => x"79317972", +1446 => x"268f7225", +1447 => x"075d555a", +1448 => x"7a802efc", +1449 => x"99388839", +1450 => x"80745753", +1451 => x"fedd397c", +1452 => x"5183df3f", +1453 => x"800b800c", +1454 => x"8e3d0d04", +1455 => x"807324a5", +1456 => x"3872822c", +1457 => x"81712b80", +1458 => x"deb40807", +1459 => x"7080deb0", +1460 => x"0b84050c", +1461 => x"5c5a768c", +1462 => x"170c7388", +1463 => x"170c7588", +1464 => x"180cf9fd", +1465 => x"39831370", +1466 => x"822c8171", +1467 => x"2b80deb4", +1468 => x"08077080", +1469 => x"deb00b84", +1470 => x"050c5d5b", +1471 => x"53d8397a", +1472 => x"75065c7b", +1473 => x"fc9f3884", +1474 => x"19751056", +1475 => x"59f139ff", +1476 => x"17810559", +1477 => x"f7ab398c", +1478 => x"15088816", +1479 => x"08718c12", +1480 => x"0c88120c", +1481 => x"59751584", +1482 => x"11088107", +1483 => x"84120c58", +1484 => x"7c5182de", +1485 => x"3f881554", +1486 => x"fba33977", +1487 => x"16788107", +1488 => x"84180c8c", +1489 => x"17088818", +1490 => x"08718c12", +1491 => x"0c88120c", +1492 => x"5c7080de", +1493 => x"c40c7080", +1494 => x"dec00c80", +1495 => x"deb80b8c", +1496 => x"120c8c11", +1497 => x"0888120c", +1498 => x"77810784", +1499 => x"120c7705", +1500 => x"77710c55", +1501 => x"7c51829a", +1502 => x"3f881654", +1503 => x"f5ba3972", +1504 => x"16841108", +1505 => x"81078412", +1506 => x"0c588c16", +1507 => x"08881708", +1508 => x"718c120c", +1509 => x"88120c57", +1510 => x"7c5181f6", +1511 => x"3f881654", +1512 => x"f5963972", +1513 => x"84150cf4", +1514 => x"1af80670", +1515 => x"841d0881", +1516 => x"0607841d", +1517 => x"0c701c55", +1518 => x"56850b84", +1519 => x"150c850b", +1520 => x"88150c8f", +1521 => x"7627fdab", +1522 => x"38881b52", +1523 => x"7c5184be", +1524 => x"3f80deb0", +1525 => x"0b880508", +1526 => x"80ddf408", +1527 => x"5a55fd93", +1528 => x"397880dd", +1529 => x"f40c7380", +1530 => x"dea40cfb", +1531 => x"ef397284", +1532 => x"150cfcff", +1533 => x"39fb3d0d", +1534 => x"77707a7c", +1535 => x"58555356", +1536 => x"8f752780", +1537 => x"e6387276", +1538 => x"07830651", +1539 => x"7080dc38", +1540 => x"75735254", +1541 => x"70708405", +1542 => x"52087470", +1543 => x"8405560c", +1544 => x"73717084", +1545 => x"05530871", +1546 => x"70840553", +1547 => x"0c717084", +1548 => x"05530871", +1549 => x"70840553", +1550 => x"0c717084", +1551 => x"05530871", +1552 => x"70840553", +1553 => x"0cf01656", +1554 => x"54748f26", +1555 => x"c7388375", +1556 => x"27953870", +1557 => x"70840552", +1558 => x"08747084", +1559 => x"05560cfc", +1560 => x"15557483", +1561 => x"26ed3873", +1562 => x"715452ff", +1563 => x"155170ff", +1564 => x"2e983872", +1565 => x"70810554", +1566 => x"33727081", +1567 => x"055434ff", +1568 => x"115170ff", +1569 => x"2e098106", +1570 => x"ea387580", +1571 => x"0c873d0d", +1572 => x"040404fd", +1573 => x"3d0d800b", +1574 => x"81bdf80c", +1575 => x"765187ca", +1576 => x"3f800853", +1577 => x"8008ff2e", +1578 => x"88387280", +1579 => x"0c853d0d", +1580 => x"0481bdf8", +1581 => x"08547380", +1582 => x"2ef03875", +1583 => x"74710c52", +1584 => x"72800c85", +1585 => x"3d0d04fb", +1586 => x"3d0d7779", +1587 => x"70720783", +1588 => x"06535452", +1589 => x"70933871", +1590 => x"73730854", +1591 => x"56547173", +1592 => x"082e80c4", +1593 => x"38737554", +1594 => x"52713370", +1595 => x"81ff0652", +1596 => x"5470802e", +1597 => x"9d387233", +1598 => x"5570752e", +1599 => x"09810695", +1600 => x"38811281", +1601 => x"14713370", +1602 => x"81ff0654", +1603 => x"56545270", +1604 => x"e5387233", +1605 => x"557381ff", +1606 => x"067581ff", +1607 => x"06717131", +1608 => x"800c5552", +1609 => x"873d0d04", +1610 => x"7109f7fb", +1611 => x"fdff1306", +1612 => x"f8848281", +1613 => x"80065271", +1614 => x"97388414", +1615 => x"84167108", +1616 => x"54565471", +1617 => x"75082ee0", +1618 => x"38737554", +1619 => x"52ff9a39", +1620 => x"800b800c", +1621 => x"873d0d04", +1622 => x"fb3d0d77", +1623 => x"705256fe", +1624 => x"b03f80de", +1625 => x"b00b8805", +1626 => x"08841108", +1627 => x"fc06707b", +1628 => x"319fef05", +1629 => x"e08006e0", +1630 => x"80055255", +1631 => x"55a08075", +1632 => x"24943880", +1633 => x"527551fe", +1634 => x"8a3f80de", +1635 => x"b8081453", +1636 => x"7280082e", +1637 => x"8f387551", +1638 => x"fdf83f80", +1639 => x"5372800c", +1640 => x"873d0d04", +1641 => x"74305275", +1642 => x"51fde83f", +1643 => x"8008ff2e", +1644 => x"a83880de", +1645 => x"b00b8805", +1646 => x"08747631", +1647 => x"81078412", +1648 => x"0c5380dd", +1649 => x"f4087531", +1650 => x"80ddf40c", +1651 => x"7551fdc2", +1652 => x"3f810b80", +1653 => x"0c873d0d", +1654 => x"04805275", +1655 => x"51fdb43f", +1656 => x"80deb00b", +1657 => x"88050880", +1658 => x"08713154", +1659 => x"548f7325", +1660 => x"ffa43880", +1661 => x"0880dea4", +1662 => x"083180dd", +1663 => x"f40c7281", +1664 => x"0784150c", +1665 => x"7551fd8a", +1666 => x"3f8053ff", +1667 => x"9039f73d", +1668 => x"0d7b7d54", +1669 => x"5a72802e", +1670 => x"82833879", +1671 => x"51fcf23f", +1672 => x"f8138411", +1673 => x"0870fe06", +1674 => x"70138411", +1675 => x"08fc065c", +1676 => x"57585457", +1677 => x"80deb808", +1678 => x"742e82de", +1679 => x"38778415", +1680 => x"0c807381", +1681 => x"06565974", +1682 => x"792e81d5", +1683 => x"38771484", +1684 => x"11088106", +1685 => x"565374a0", +1686 => x"38771656", +1687 => x"7881e638", +1688 => x"88140855", +1689 => x"7480deb8", +1690 => x"2e82f938", +1691 => x"8c140870", +1692 => x"8c170c75", +1693 => x"88120c58", +1694 => x"75810784", +1695 => x"180c7517", +1696 => x"76710c54", +1697 => x"78819138", +1698 => x"83ff7627", +1699 => x"81c83875", +1700 => x"892a7683", +1701 => x"2a545473", +1702 => x"802ebf38", +1703 => x"75862ab8", +1704 => x"05538474", +1705 => x"27b43880", +1706 => x"db145394", +1707 => x"7427ab38", +1708 => x"758c2a80", +1709 => x"ee055380", +1710 => x"d474279e", +1711 => x"38758f2a", +1712 => x"80f70553", +1713 => x"82d47427", +1714 => x"91387592", +1715 => x"2a80fc05", +1716 => x"538ad474", +1717 => x"27843880", +1718 => x"fe537210", +1719 => x"101080de", +1720 => x"b0058811", +1721 => x"08555573", +1722 => x"752e82bf", +1723 => x"38841408", +1724 => x"fc065975", +1725 => x"79278d38", +1726 => x"88140854", +1727 => x"73752e09", +1728 => x"8106ea38", +1729 => x"8c140870", +1730 => x"8c190c74", +1731 => x"88190c77", +1732 => x"88120c55", +1733 => x"768c150c", +1734 => x"7951faf6", +1735 => x"3f8b3d0d", +1736 => x"04760877", +1737 => x"71315876", +1738 => x"05881808", +1739 => x"56567480", +1740 => x"deb82e80", +1741 => x"e0388c17", +1742 => x"08708c17", +1743 => x"0c758812", +1744 => x"0c53fe89", +1745 => x"39881408", +1746 => x"8c150870", +1747 => x"8c130c59", +1748 => x"88190cfe", +1749 => x"a3397583", +1750 => x"2a705454", +1751 => x"80742481", +1752 => x"98387282", +1753 => x"2c81712b", +1754 => x"80deb408", +1755 => x"0780deb0", +1756 => x"0b84050c", +1757 => x"74101010", +1758 => x"80deb005", +1759 => x"88110871", +1760 => x"8c1b0c70", +1761 => x"881b0c79", +1762 => x"88130c56", +1763 => x"5a55768c", +1764 => x"150cff84", +1765 => x"398159fd", +1766 => x"b4397716", +1767 => x"73810654", +1768 => x"55729838", +1769 => x"76087771", +1770 => x"31587505", +1771 => x"8c180888", +1772 => x"1908718c", +1773 => x"120c8812", +1774 => x"0c555574", +1775 => x"81078418", +1776 => x"0c7680de", +1777 => x"b00b8805", +1778 => x"0c80deac", +1779 => x"087526fe", +1780 => x"c73880de", +1781 => x"a8085279", +1782 => x"51fafd3f", +1783 => x"7951f9b2", +1784 => x"3ffeba39", +1785 => x"81778c17", +1786 => x"0c778817", +1787 => x"0c758c19", +1788 => x"0c758819", +1789 => x"0c59fd80", +1790 => x"39831470", +1791 => x"822c8171", +1792 => x"2b80deb4", +1793 => x"080780de", +1794 => x"b00b8405", +1795 => x"0c751010", +1796 => x"1080deb0", +1797 => x"05881108", +1798 => x"718c1c0c", +1799 => x"70881c0c", +1800 => x"7a88130c", +1801 => x"575b5653", +1802 => x"fee43980", +1803 => x"7324a338", +1804 => x"72822c81", +1805 => x"712b80de", +1806 => x"b4080780", +1807 => x"deb00b84", +1808 => x"050c5874", +1809 => x"8c180c73", +1810 => x"88180c76", +1811 => x"88160cfd", +1812 => x"c3398313", +1813 => x"70822c81", +1814 => x"712b80de", +1815 => x"b4080780", +1816 => x"deb00b84", +1817 => x"050c5953", +1818 => x"da39fe3d", +1819 => x"0d81bdfc", +1820 => x"0851708a", +1821 => x"3881be84", +1822 => x"7081bdfc", +1823 => x"0c517411", +1824 => x"52ff5371", +1825 => x"87fb8080", +1826 => x"26883871", +1827 => x"81bdfc0c", +1828 => x"70537280", +1829 => x"0c843d0d", +1830 => x"04fd3d0d", +1831 => x"800b80dd", +1832 => x"e0085454", +1833 => x"72812e9b", +1834 => x"387381be", +1835 => x"800ccff1", +1836 => x"3fcecd3f", +1837 => x"80edb852", +1838 => x"8151d8db", +1839 => x"3f800851", +1840 => x"899d3f72", +1841 => x"81be800c", +1842 => x"cfd73fce", +1843 => x"b33f80ed", +1844 => x"b8528151", +1845 => x"d8c13f80", +1846 => x"08518983", +1847 => x"3f00ff39", +1848 => x"00ff39f5", +1849 => x"3d0d7e60", +1850 => x"81be8008", +1851 => x"705b585b", +1852 => x"5b7580c2", +1853 => x"38777a25", +1854 => x"a138771b", +1855 => x"70337081", +1856 => x"ff065858", +1857 => x"59758a2e", +1858 => x"98387681", +1859 => x"ff0651ce", +1860 => x"ef3f8118", +1861 => x"58797824", +1862 => x"e1387980", +1863 => x"0c8d3d0d", +1864 => x"048d51ce", +1865 => x"db3f7833", +1866 => x"7081ff06", +1867 => x"5257ced0", +1868 => x"3f811858", +1869 => x"e0397955", +1870 => x"7a547d53", +1871 => x"85528d3d", +1872 => x"fc0551cd", +1873 => x"fd3f8008", +1874 => x"56888d3f", +1875 => x"7b80080c", +1876 => x"75800c8d", +1877 => x"3d0d04f6", +1878 => x"3d0d7d7f", +1879 => x"81be8008", +1880 => x"705a585a", +1881 => x"5a7580c3", +1882 => x"38767925", +1883 => x"b138761a", +1884 => x"58cded3f", +1885 => x"80087834", +1886 => x"800b8008", +1887 => x"81ff0657", +1888 => x"58758a2e", +1889 => x"a238758d", +1890 => x"32703070", +1891 => x"80257a07", +1892 => x"51515675", +1893 => x"b7388117", +1894 => x"57787724", +1895 => x"d1387656", +1896 => x"75800c8c", +1897 => x"3d0d0481", +1898 => x"58dc3978", +1899 => x"5579547c", +1900 => x"5384528c", +1901 => x"3dfc0551", +1902 => x"cd883f80", +1903 => x"08568798", +1904 => x"3f7a8008", +1905 => x"0c75800c", +1906 => x"8c3d0d04", +1907 => x"811756d0", +1908 => x"39f93d0d", +1909 => x"795781be", +1910 => x"8008802e", +1911 => x"ac387651", +1912 => x"89ab3f7b", +1913 => x"567a5580", +1914 => x"08810554", +1915 => x"76538252", +1916 => x"893dfc05", +1917 => x"51cccb3f", +1918 => x"80085786", +1919 => x"db3f7780", +1920 => x"080c7680", +1921 => x"0c893d0d", +1922 => x"0486cd3f", +1923 => x"850b8008", +1924 => x"0cff0b80", +1925 => x"0c893d0d", +1926 => x"04fb3d0d", +1927 => x"81be8008", +1928 => x"70565473", +1929 => x"88387480", +1930 => x"0c873d0d", +1931 => x"04775383", +1932 => x"52873dfc", +1933 => x"0551cc8a", +1934 => x"3f800854", +1935 => x"869a3f75", +1936 => x"80080c73", +1937 => x"800c873d", +1938 => x"0d04ff0b", +1939 => x"800c04fb", +1940 => x"3d0d7755", +1941 => x"81be8008", +1942 => x"802ea838", +1943 => x"745188ad", +1944 => x"3f800881", +1945 => x"05547453", +1946 => x"8752873d", +1947 => x"fc0551cb", +1948 => x"d13f8008", +1949 => x"5585e13f", +1950 => x"7580080c", +1951 => x"74800c87", +1952 => x"3d0d0485", +1953 => x"d33f850b", +1954 => x"80080cff", +1955 => x"0b800c87", +1956 => x"3d0d04fa", +1957 => x"3d0d81be", +1958 => x"8008802e", +1959 => x"a2387a55", +1960 => x"79547853", +1961 => x"8652883d", +1962 => x"fc0551cb", +1963 => x"953f8008", +1964 => x"5685a53f", +1965 => x"7680080c", +1966 => x"75800c88", +1967 => x"3d0d0485", +1968 => x"973f9d0b", +1969 => x"80080cff", +1970 => x"0b800c88", +1971 => x"3d0d04f7", +1972 => x"3d0d7b7d", +1973 => x"5b59bc53", +1974 => x"80527951", +1975 => x"86a53f80", +1976 => x"70565798", +1977 => x"56741970", +1978 => x"3370782b", +1979 => x"79078118", +1980 => x"f81a5a58", +1981 => x"59555884", +1982 => x"7524ea38", +1983 => x"767a2384", +1984 => x"19588070", +1985 => x"56579856", +1986 => x"74187033", +1987 => x"70782b79", +1988 => x"078118f8", +1989 => x"1a5a5859", +1990 => x"51548475", +1991 => x"24ea3876", +1992 => x"821b2388", +1993 => x"19588070", +1994 => x"56579856", +1995 => x"74187033", +1996 => x"70782b79", +1997 => x"078118f8", +1998 => x"1a5a5859", +1999 => x"51548475", +2000 => x"24ea3876", +2001 => x"841b0c8c", +2002 => x"19588070", +2003 => x"56579856", +2004 => x"74187033", +2005 => x"70782b79", +2006 => x"078118f8", +2007 => x"1a5a5859", +2008 => x"51548475", +2009 => x"24ea3876", +2010 => x"881b2390", +2011 => x"19588070", +2012 => x"56579856", +2013 => x"74187033", +2014 => x"70782b79", +2015 => x"078118f8", +2016 => x"1a5a5859", +2017 => x"51548475", +2018 => x"24ea3876", +2019 => x"8a1b2394", +2020 => x"19588070", +2021 => x"56579856", +2022 => x"74187033", +2023 => x"70782b79", +2024 => x"078118f8", +2025 => x"1a5a5859", +2026 => x"51548475", +2027 => x"24ea3876", +2028 => x"8c1b2398", +2029 => x"19588070", +2030 => x"56579856", +2031 => x"74187033", +2032 => x"70782b79", +2033 => x"078118f8", +2034 => x"1a5a5859", +2035 => x"51548475", +2036 => x"24ea3876", +2037 => x"8e1b239c", +2038 => x"19588070", +2039 => x"5657b856", +2040 => x"74187033", +2041 => x"70782b79", +2042 => x"078118f8", +2043 => x"1a5a5859", +2044 => x"5a548875", +2045 => x"24ea3876", +2046 => x"901b0c8b", +2047 => x"3d0d04e9", +2048 => x"3d0d6a81", +2049 => x"be800857", +2050 => x"57759338", +2051 => x"80c0800b", +2052 => x"84180c75", +2053 => x"ac180c75", +2054 => x"800c993d", +2055 => x"0d04893d", +2056 => x"70556a54", +2057 => x"558a5299", +2058 => x"3dffbc05", +2059 => x"51c8933f", +2060 => x"80087753", +2061 => x"755256fd", +2062 => x"963f829c", +2063 => x"3f778008", +2064 => x"0c75800c", +2065 => x"993d0d04", +2066 => x"e93d0d69", +2067 => x"5781be80", +2068 => x"08802eb5", +2069 => x"38765184", +2070 => x"b43f893d", +2071 => x"70568008", +2072 => x"81055577", +2073 => x"54568f52", +2074 => x"993dffbc", +2075 => x"0551c7d2", +2076 => x"3f80086b", +2077 => x"53765257", +2078 => x"fcd53f81", +2079 => x"db3f7780", +2080 => x"080c7680", +2081 => x"0c993d0d", +2082 => x"0481cd3f", +2083 => x"850b8008", +2084 => x"0cff0b80", +2085 => x"0c993d0d", +2086 => x"04fc3d0d", +2087 => x"815481be", +2088 => x"80088838", +2089 => x"73800c86", +2090 => x"3d0d0476", +2091 => x"5397b952", +2092 => x"863dfc05", +2093 => x"51c78b3f", +2094 => x"80085481", +2095 => x"9b3f7480", +2096 => x"080c7380", +2097 => x"0c863d0d", +2098 => x"04f43d0d", +2099 => x"7e80ede4", +2100 => x"08700881", +2101 => x"ff06913d", +2102 => x"f8055451", +2103 => x"5959c8b1", +2104 => x"3f775780", +2105 => x"5476557b", +2106 => x"7d585276", +2107 => x"538e3df0", +2108 => x"055183f4", +2109 => x"3f797b58", +2110 => x"790c7684", +2111 => x"1a0c7880", +2112 => x"0c8e3d0d", +2113 => x"04f43d0d", +2114 => x"7e80ede4", +2115 => x"08700870", +2116 => x"81ff0692", +2117 => x"3df80555", +2118 => x"515a5759", +2119 => x"c7f33f77", +2120 => x"57800b8b", +2121 => x"3d595476", +2122 => x"557b7d58", +2123 => x"52765377", +2124 => x"5183b53f", +2125 => x"8056bd84", +2126 => x"c0765555", +2127 => x"797b5852", +2128 => x"76537751", +2129 => x"83a23f7a", +2130 => x"5778802e", +2131 => x"84387679", +2132 => x"0c76800c", +2133 => x"8e3d0d04", +2134 => x"80e6b808", +2135 => x"800c04f7", +2136 => x"3d0d7b80", +2137 => x"e6b80882", +2138 => x"c811085a", +2139 => x"545a7780", +2140 => x"2e80da38", +2141 => x"81881884", +2142 => x"1908ff05", +2143 => x"81712b59", +2144 => x"55598074", +2145 => x"2480ea38", +2146 => x"807424b5", +2147 => x"3873822b", +2148 => x"78118805", +2149 => x"56568180", +2150 => x"19087706", +2151 => x"5372802e", +2152 => x"b6387816", +2153 => x"70085353", +2154 => x"79517408", +2155 => x"53722dff", +2156 => x"14fc17fc", +2157 => x"1779812c", +2158 => x"5a575754", +2159 => x"738025d6", +2160 => x"38770858", +2161 => x"77ffad38", +2162 => x"80e6b808", +2163 => x"53bc1308", +2164 => x"a5387951", +2165 => x"f6873f74", +2166 => x"0853722d", +2167 => x"ff14fc17", +2168 => x"fc177981", +2169 => x"2c5a5757", +2170 => x"54738025", +2171 => x"ffa838d1", +2172 => x"398057ff", +2173 => x"93397251", +2174 => x"bc130854", +2175 => x"732d7951", +2176 => x"f5db3ffb", +2177 => x"3d0d777a", +2178 => x"71028c05", +2179 => x"a3053358", +2180 => x"54545683", +2181 => x"732780d4", +2182 => x"38758306", +2183 => x"517080cc", +2184 => x"3874882b", +2185 => x"75077071", +2186 => x"902b0755", +2187 => x"518f7327", +2188 => x"a7387372", +2189 => x"70840554", +2190 => x"0c717471", +2191 => x"70840553", +2192 => x"0c747170", +2193 => x"8405530c", +2194 => x"74717084", +2195 => x"05530cf0", +2196 => x"14545272", +2197 => x"8f26db38", +2198 => x"83732790", +2199 => x"38737270", +2200 => x"8405540c", +2201 => x"fc135372", +2202 => x"8326f238", +2203 => x"ff135170", +2204 => x"ff2e9338", +2205 => x"74727081", +2206 => x"055434ff", +2207 => x"115170ff", +2208 => x"2e098106", +2209 => x"ef387580", +2210 => x"0c873d0d", +2211 => x"04fd3d0d", +2212 => x"75707183", +2213 => x"06535552", +2214 => x"70b43871", +2215 => x"70087009", +2216 => x"f7fbfdff", +2217 => x"1206f884", +2218 => x"82818006", +2219 => x"54525371", +2220 => x"9b388413", +2221 => x"70087009", +2222 => x"f7fbfdff", +2223 => x"1206f884", +2224 => x"82818006", +2225 => x"54525371", +2226 => x"802ee738", +2227 => x"72527133", +2228 => x"5372802e", +2229 => x"8a388112", +2230 => x"70335452", +2231 => x"72f83871", +2232 => x"7431800c", +2233 => x"853d0d04", +2234 => x"e43d0d6e", +2235 => x"a13d08a3", +2236 => x"3d085957", +2237 => x"5f80764d", +2238 => x"774ea33d", +2239 => x"08a53d08", +2240 => x"574b754c", +2241 => x"5e7d6c24", +2242 => x"86fb3880", +2243 => x"6a24878f", +2244 => x"38696b58", +2245 => x"566b6d5d", +2246 => x"467b4775", +2247 => x"44764564", +2248 => x"6468685c", +2249 => x"5c565674", +2250 => x"81e73878", +2251 => x"762782c7", +2252 => x"387581ff", +2253 => x"26832b55", +2254 => x"83ffff76", +2255 => x"278c3890", +2256 => x"55fe800a", +2257 => x"76278338", +2258 => x"98557575", +2259 => x"2a80dbcc", +2260 => x"057033a0", +2261 => x"77317131", +2262 => x"57555774", +2263 => x"802e9538", +2264 => x"75752ba0", +2265 => x"76317a77", +2266 => x"2b7c722a", +2267 => x"077c782b", +2268 => x"5d5b5956", +2269 => x"75902a76", +2270 => x"83ffff06", +2271 => x"71547a53", +2272 => x"59578880", +2273 => x"3f80085b", +2274 => x"87ea3f80", +2275 => x"08800879", +2276 => x"297c902b", +2277 => x"7c902a07", +2278 => x"56565973", +2279 => x"75279438", +2280 => x"8008ff05", +2281 => x"76155559", +2282 => x"75742687", +2283 => x"38747426", +2284 => x"87b93876", +2285 => x"52737531", +2286 => x"5187c93f", +2287 => x"80085587", +2288 => x"b33f8008", +2289 => x"80087929", +2290 => x"7b83ffff", +2291 => x"0677902b", +2292 => x"07565957", +2293 => x"73782796", +2294 => x"388008ff", +2295 => x"05761555", +2296 => x"57757426", +2297 => x"89387774", +2298 => x"26777131", +2299 => x"58567890", +2300 => x"2b770758", +2301 => x"805b7a40", +2302 => x"77417f61", +2303 => x"56547d80", +2304 => x"d938737f", +2305 => x"0c747f84", +2306 => x"050c7e80", +2307 => x"0c9e3d0d", +2308 => x"0480705c", +2309 => x"58747926", +2310 => x"dd387481", +2311 => x"ff26832b", +2312 => x"577483ff", +2313 => x"ff2682a5", +2314 => x"3874772a", +2315 => x"80dbcc05", +2316 => x"7033a079", +2317 => x"31713159", +2318 => x"5c5d7682", +2319 => x"b3387654", +2320 => x"74792783", +2321 => x"38815479", +2322 => x"76277407", +2323 => x"59815878", +2324 => x"ffa23876", +2325 => x"58805bff", +2326 => x"9d397352", +2327 => x"74539e3d", +2328 => x"e80551d7", +2329 => x"ef3f6769", +2330 => x"567f0c74", +2331 => x"7f84050c", +2332 => x"7e800c9e", +2333 => x"3d0d0475", +2334 => x"802e81c4", +2335 => x"387581ff", +2336 => x"26832b55", +2337 => x"83ffff76", +2338 => x"278c3890", +2339 => x"55fe800a", +2340 => x"76278338", +2341 => x"98557575", +2342 => x"2a80dbcc", +2343 => x"057033a0", +2344 => x"77317131", +2345 => x"575e5474", +2346 => x"84913878", +2347 => x"76315481", +2348 => x"76902a77", +2349 => x"83ffff06", +2350 => x"5f5d5b7b", +2351 => x"52735185", +2352 => x"c33f8008", +2353 => x"5785ad3f", +2354 => x"80088008", +2355 => x"7e297890", +2356 => x"2b7c902a", +2357 => x"07565659", +2358 => x"73752794", +2359 => x"388008ff", +2360 => x"05761555", +2361 => x"59757426", +2362 => x"87387474", +2363 => x"2684f338", +2364 => x"7b527375", +2365 => x"3151858c", +2366 => x"3f800855", +2367 => x"84f63f80", +2368 => x"0880087e", +2369 => x"297b83ff", +2370 => x"ff067790", +2371 => x"2b075659", +2372 => x"57737827", +2373 => x"96388008", +2374 => x"ff057615", +2375 => x"55577574", +2376 => x"26893877", +2377 => x"74267771", +2378 => x"31585a78", +2379 => x"902b7707", +2380 => x"7b41417f", +2381 => x"6156547d", +2382 => x"802efdc6", +2383 => x"38fe9b39", +2384 => x"75528151", +2385 => x"84ae3f80", +2386 => x"0856feb1", +2387 => x"399057fe", +2388 => x"800a7527", +2389 => x"fdd33898", +2390 => x"75712a80", +2391 => x"dbcc0570", +2392 => x"33a07331", +2393 => x"7131535d", +2394 => x"5e577680", +2395 => x"2efdcf38", +2396 => x"a0773175", +2397 => x"782b7772", +2398 => x"2a077779", +2399 => x"2b7b7a2b", +2400 => x"7d742a07", +2401 => x"7d7b2b73", +2402 => x"902a7483", +2403 => x"ffff0671", +2404 => x"597f772a", +2405 => x"585e5c41", +2406 => x"5f585c54", +2407 => x"83e63f80", +2408 => x"085483d0", +2409 => x"3f800880", +2410 => x"08792975", +2411 => x"902b7e90", +2412 => x"2a075656", +2413 => x"59737527", +2414 => x"99388008", +2415 => x"ff057b15", +2416 => x"55597a74", +2417 => x"268c3873", +2418 => x"75278738", +2419 => x"ff197b15", +2420 => x"55597652", +2421 => x"73753151", +2422 => x"83aa3f80", +2423 => x"08558394", +2424 => x"3f800880", +2425 => x"0879297d", +2426 => x"83ffff06", +2427 => x"77902b07", +2428 => x"56595773", +2429 => x"78279938", +2430 => x"8008ff05", +2431 => x"7b155557", +2432 => x"7a74268c", +2433 => x"38737827", +2434 => x"8738ff17", +2435 => x"7b155557", +2436 => x"73783179", +2437 => x"902b7807", +2438 => x"7083ffff", +2439 => x"0671902a", +2440 => x"7983ffff", +2441 => x"067a902a", +2442 => x"73722973", +2443 => x"73297473", +2444 => x"29767429", +2445 => x"73902a05", +2446 => x"72055755", +2447 => x"435f5b58", +2448 => x"5a57595a", +2449 => x"747c2786", +2450 => x"38848080", +2451 => x"17577490", +2452 => x"2a177983", +2453 => x"ffff0676", +2454 => x"84808029", +2455 => x"05575776", +2456 => x"7a269a38", +2457 => x"767a3270", +2458 => x"30707207", +2459 => x"8025565a", +2460 => x"5b7c7627", +2461 => x"fafe3873", +2462 => x"802efaf8", +2463 => x"38ff1858", +2464 => x"805bfaf2", +2465 => x"39ff7653", +2466 => x"77549f3d", +2467 => x"e805525e", +2468 => x"d3c23f67", +2469 => x"69574c75", +2470 => x"4d698025", +2471 => x"f8f3387d", +2472 => x"096a6c5c", +2473 => x"537a549f", +2474 => x"3de80552", +2475 => x"5ed3a53f", +2476 => x"6769714c", +2477 => x"704d5856", +2478 => x"f8db39a0", +2479 => x"75317676", +2480 => x"2b7a772b", +2481 => x"7c732a07", +2482 => x"7c782b72", +2483 => x"902a7383", +2484 => x"ffff0671", +2485 => x"587e762a", +2486 => x"5742405d", +2487 => x"5d575881", +2488 => x"a33f8008", +2489 => x"57818d3f", +2490 => x"80088008", +2491 => x"7e297890", +2492 => x"2b7d902a", +2493 => x"07565659", +2494 => x"73752799", +2495 => x"388008ff", +2496 => x"05761555", +2497 => x"59757426", +2498 => x"8c387375", +2499 => x"278738ff", +2500 => x"19761555", +2501 => x"597b5273", +2502 => x"75315180", +2503 => x"e73f8008", +2504 => x"5580d13f", +2505 => x"80088008", +2506 => x"7e297c83", +2507 => x"ffff0670", +2508 => x"78902b07", +2509 => x"51565858", +2510 => x"73772799", +2511 => x"388008ff", +2512 => x"05761555", +2513 => x"58757426", +2514 => x"8c387377", +2515 => x"278738ff", +2516 => x"18761555", +2517 => x"5878902b", +2518 => x"78077478", +2519 => x"31555bfa", +2520 => x"da39ff19", +2521 => x"76155559", +2522 => x"fb8639ff", +2523 => x"19761555", +2524 => x"59f8c039", +2525 => x"fe3d0d80", +2526 => x"53755274", +2527 => x"51d3c63f", +2528 => x"843d0d04", +2529 => x"fe3d0d81", +2530 => x"53755274", +2531 => x"51d3b63f", +2532 => x"843d0d04", +2533 => x"ff3d0d80", +2534 => x"edc00bfc", +2535 => x"05700852", +2536 => x"5270ff2e", +2537 => x"9138702d", +2538 => x"fc127008", +2539 => x"525270ff", +2540 => x"2e098106", +2541 => x"f138833d", +2542 => x"0d0404ff", +2543 => x"bbe73f04", +2544 => x"30313233", +2545 => x"34353637", +2546 => x"38390000", +2547 => x"44485259", +2548 => x"53544f4e", +2549 => x"45205052", +2550 => x"4f475241", +2551 => x"4d2c2053", +2552 => x"4f4d4520", +2553 => x"53545249", +2554 => x"4e470000", +2555 => x"44485259", +2556 => x"53544f4e", +2557 => x"45205052", +2558 => x"4f475241", +2559 => x"4d2c2031", +2560 => x"27535420", +2561 => x"53545249", +2562 => x"4e470000", +2563 => x"44687279", +2564 => x"73746f6e", +2565 => x"65204265", +2566 => x"6e63686d", +2567 => x"61726b2c", +2568 => x"20566572", +2569 => x"73696f6e", +2570 => x"20322e31", +2571 => x"20284c61", +2572 => x"6e677561", +2573 => x"67653a20", +2574 => x"43290a00", +2575 => x"50726f67", +2576 => x"72616d20", +2577 => x"636f6d70", +2578 => x"696c6564", +2579 => x"20776974", +2580 => x"68202772", +2581 => x"65676973", +2582 => x"74657227", +2583 => x"20617474", +2584 => x"72696275", +2585 => x"74650a00", +2586 => x"45786563", +2587 => x"7574696f", +2588 => x"6e207374", +2589 => x"61727473", +2590 => x"2c202564", +2591 => x"2072756e", +2592 => x"73207468", +2593 => x"726f7567", +2594 => x"68204468", +2595 => x"72797374", +2596 => x"6f6e650a", +2597 => x"00000000", +2598 => x"44485259", +2599 => x"53544f4e", +2600 => x"45205052", +2601 => x"4f475241", +2602 => x"4d2c2032", +2603 => x"274e4420", +2604 => x"53545249", +2605 => x"4e470000", +2606 => x"45786563", +2607 => x"7574696f", +2608 => x"6e20656e", +2609 => x"64730a00", +2610 => x"46696e61", +2611 => x"6c207661", +2612 => x"6c756573", +2613 => x"206f6620", +2614 => x"74686520", +2615 => x"76617269", +2616 => x"61626c65", +2617 => x"73207573", +2618 => x"65642069", +2619 => x"6e207468", +2620 => x"65206265", +2621 => x"6e63686d", +2622 => x"61726b3a", +2623 => x"0a000000", +2624 => x"496e745f", +2625 => x"476c6f62", +2626 => x"3a202020", +2627 => x"20202020", +2628 => x"20202020", +2629 => x"2025640a", +2630 => x"00000000", +2631 => x"20202020", +2632 => x"20202020", +2633 => x"73686f75", +2634 => x"6c642062", +2635 => x"653a2020", +2636 => x"2025640a", +2637 => x"00000000", +2638 => x"426f6f6c", +2639 => x"5f476c6f", +2640 => x"623a2020", +2641 => x"20202020", +2642 => x"20202020", +2643 => x"2025640a", +2644 => x"00000000", +2645 => x"43685f31", +2646 => x"5f476c6f", +2647 => x"623a2020", +2648 => x"20202020", +2649 => x"20202020", +2650 => x"2025630a", +2651 => x"00000000", +2652 => x"20202020", +2653 => x"20202020", +2654 => x"73686f75", +2655 => x"6c642062", +2656 => x"653a2020", +2657 => x"2025630a", +2658 => x"00000000", +2659 => x"43685f32", +2660 => x"5f476c6f", +2661 => x"623a2020", +2662 => x"20202020", +2663 => x"20202020", +2664 => x"2025630a", +2665 => x"00000000", +2666 => x"4172725f", +2667 => x"315f476c", +2668 => x"6f625b38", +2669 => x"5d3a2020", +2670 => x"20202020", +2671 => x"2025640a", +2672 => x"00000000", +2673 => x"4172725f", +2674 => x"325f476c", +2675 => x"6f625b38", +2676 => x"5d5b375d", +2677 => x"3a202020", +2678 => x"2025640a", +2679 => x"00000000", +2680 => x"20202020", +2681 => x"20202020", +2682 => x"73686f75", +2683 => x"6c642062", +2684 => x"653a2020", +2685 => x"204e756d", +2686 => x"6265725f", +2687 => x"4f665f52", +2688 => x"756e7320", +2689 => x"2b203130", +2690 => x"0a000000", +2691 => x"5074725f", +2692 => x"476c6f62", +2693 => x"2d3e0a00", +2694 => x"20205074", +2695 => x"725f436f", +2696 => x"6d703a20", +2697 => x"20202020", +2698 => x"20202020", +2699 => x"2025640a", +2700 => x"00000000", +2701 => x"20202020", +2702 => x"20202020", +2703 => x"73686f75", +2704 => x"6c642062", +2705 => x"653a2020", +2706 => x"2028696d", +2707 => x"706c656d", +2708 => x"656e7461", +2709 => x"74696f6e", +2710 => x"2d646570", +2711 => x"656e6465", +2712 => x"6e74290a", +2713 => x"00000000", +2714 => x"20204469", +2715 => x"7363723a", +2716 => x"20202020", +2717 => x"20202020", +2718 => x"20202020", +2719 => x"2025640a", +2720 => x"00000000", +2721 => x"2020456e", +2722 => x"756d5f43", +2723 => x"6f6d703a", +2724 => x"20202020", +2725 => x"20202020", +2726 => x"2025640a", +2727 => x"00000000", +2728 => x"2020496e", +2729 => x"745f436f", +2730 => x"6d703a20", +2731 => x"20202020", +2732 => x"20202020", +2733 => x"2025640a", +2734 => x"00000000", +2735 => x"20205374", +2736 => x"725f436f", +2737 => x"6d703a20", +2738 => x"20202020", +2739 => x"20202020", +2740 => x"2025730a", +2741 => x"00000000", +2742 => x"20202020", +2743 => x"20202020", +2744 => x"73686f75", +2745 => x"6c642062", +2746 => x"653a2020", +2747 => x"20444852", +2748 => x"5953544f", +2749 => x"4e452050", +2750 => x"524f4752", +2751 => x"414d2c20", +2752 => x"534f4d45", +2753 => x"20535452", +2754 => x"494e470a", +2755 => x"00000000", +2756 => x"4e657874", +2757 => x"5f507472", +2758 => x"5f476c6f", +2759 => x"622d3e0a", +2760 => x"00000000", +2761 => x"20202020", +2762 => x"20202020", +2763 => x"73686f75", +2764 => x"6c642062", +2765 => x"653a2020", +2766 => x"2028696d", +2767 => x"706c656d", +2768 => x"656e7461", +2769 => x"74696f6e", +2770 => x"2d646570", +2771 => x"656e6465", +2772 => x"6e74292c", +2773 => x"2073616d", +2774 => x"65206173", +2775 => x"2061626f", +2776 => x"76650a00", +2777 => x"496e745f", +2778 => x"315f4c6f", +2779 => x"633a2020", +2780 => x"20202020", +2781 => x"20202020", +2782 => x"2025640a", +2783 => x"00000000", +2784 => x"496e745f", +2785 => x"325f4c6f", +2786 => x"633a2020", +2787 => x"20202020", +2788 => x"20202020", +2789 => x"2025640a", +2790 => x"00000000", +2791 => x"496e745f", +2792 => x"335f4c6f", +2793 => x"633a2020", +2794 => x"20202020", +2795 => x"20202020", +2796 => x"2025640a", +2797 => x"00000000", +2798 => x"456e756d", +2799 => x"5f4c6f63", +2800 => x"3a202020", +2801 => x"20202020", +2802 => x"20202020", +2803 => x"2025640a", +2804 => x"00000000", +2805 => x"5374725f", +2806 => x"315f4c6f", +2807 => x"633a2020", +2808 => x"20202020", +2809 => x"20202020", +2810 => x"2025730a", +2811 => x"00000000", +2812 => x"20202020", +2813 => x"20202020", +2814 => x"73686f75", +2815 => x"6c642062", +2816 => x"653a2020", +2817 => x"20444852", +2818 => x"5953544f", +2819 => x"4e452050", +2820 => x"524f4752", +2821 => x"414d2c20", +2822 => x"31275354", +2823 => x"20535452", +2824 => x"494e470a", +2825 => x"00000000", +2826 => x"5374725f", +2827 => x"325f4c6f", +2828 => x"633a2020", +2829 => x"20202020", +2830 => x"20202020", +2831 => x"2025730a", +2832 => x"00000000", +2833 => x"20202020", +2834 => x"20202020", +2835 => x"73686f75", +2836 => x"6c642062", +2837 => x"653a2020", +2838 => x"20444852", +2839 => x"5953544f", +2840 => x"4e452050", +2841 => x"524f4752", +2842 => x"414d2c20", +2843 => x"32274e44", +2844 => x"20535452", +2845 => x"494e470a", +2846 => x"00000000", +2847 => x"55736572", +2848 => x"2074696d", +2849 => x"653a2025", +2850 => x"640a0000", +2851 => x"4d696372", +2852 => x"6f736563", +2853 => x"6f6e6473", +2854 => x"20666f72", +2855 => x"206f6e65", +2856 => x"2072756e", +2857 => x"20746872", +2858 => x"6f756768", +2859 => x"20446872", +2860 => x"7973746f", +2861 => x"6e653a20", +2862 => x"00000000", +2863 => x"2564200a", +2864 => x"00000000", +2865 => x"44687279", +2866 => x"73746f6e", +2867 => x"65732070", +2868 => x"65722053", +2869 => x"65636f6e", +2870 => x"643a2020", +2871 => x"20202020", +2872 => x"20202020", +2873 => x"20202020", +2874 => x"20202020", +2875 => x"20202020", +2876 => x"00000000", +2877 => x"56415820", +2878 => x"4d495053", +2879 => x"20726174", +2880 => x"696e6720", +2881 => x"2a203130", +2882 => x"3030203d", +2883 => x"20256420", +2884 => x"0a000000", +2885 => x"50726f67", +2886 => x"72616d20", +2887 => x"636f6d70", +2888 => x"696c6564", +2889 => x"20776974", +2890 => x"686f7574", +2891 => x"20277265", +2892 => x"67697374", +2893 => x"65722720", +2894 => x"61747472", +2895 => x"69627574", +2896 => x"650a0000", +2897 => x"4d656173", +2898 => x"75726564", +2899 => x"2074696d", +2900 => x"6520746f", +2901 => x"6f20736d", +2902 => x"616c6c20", +2903 => x"746f206f", +2904 => x"62746169", +2905 => x"6e206d65", +2906 => x"616e696e", +2907 => x"6766756c", +2908 => x"20726573", +2909 => x"756c7473", +2910 => x"0a000000", +2911 => x"506c6561", +2912 => x"73652069", +2913 => x"6e637265", +2914 => x"61736520", +2915 => x"6e756d62", +2916 => x"6572206f", +2917 => x"66207275", +2918 => x"6e730a00", +2919 => x"44485259", +2920 => x"53544f4e", +2921 => x"45205052", +2922 => x"4f475241", +2923 => x"4d2c2033", +2924 => x"27524420", +2925 => x"53545249", +2926 => x"4e470000", +2927 => x"43000000", +2928 => x"64756d6d", +2929 => x"792e6578", +2930 => x"65000000", +2931 => x"00010202", +2932 => x"03030303", +2933 => x"04040404", +2934 => x"04040404", +2935 => x"05050505", +2936 => x"05050505", +2937 => x"05050505", +2938 => x"05050505", +2939 => x"06060606", +2940 => x"06060606", +2941 => x"06060606", +2942 => x"06060606", +2943 => x"06060606", +2944 => x"06060606", +2945 => x"06060606", +2946 => x"06060606", +2947 => x"07070707", +2948 => x"07070707", +2949 => x"07070707", +2950 => x"07070707", +2951 => x"07070707", +2952 => x"07070707", +2953 => x"07070707", +2954 => x"07070707", +2955 => x"07070707", +2956 => x"07070707", +2957 => x"07070707", +2958 => x"07070707", +2959 => x"07070707", +2960 => x"07070707", +2961 => x"07070707", +2962 => x"07070707", +2963 => x"08080808", +2964 => x"08080808", +2965 => x"08080808", +2966 => x"08080808", +2967 => x"08080808", +2968 => x"08080808", +2969 => x"08080808", +2970 => x"08080808", +2971 => x"08080808", +2972 => x"08080808", +2973 => x"08080808", +2974 => x"08080808", +2975 => x"08080808", +2976 => x"08080808", +2977 => x"08080808", +2978 => x"08080808", +2979 => x"08080808", +2980 => x"08080808", +2981 => x"08080808", +2982 => x"08080808", +2983 => x"08080808", +2984 => x"08080808", +2985 => x"08080808", +2986 => x"08080808", +2987 => x"08080808", +2988 => x"08080808", +2989 => x"08080808", +2990 => x"08080808", +2991 => x"08080808", +2992 => x"08080808", +2993 => x"08080808", +2994 => x"08080808", +2995 => x"00ffffff", +2996 => x"ff00ffff", +2997 => x"ffff00ff", +2998 => x"ffffff00", +2999 => x"00000000", +3000 => x"00000000", +3001 => x"00000000", +3002 => x"000036c8", +3003 => x"000927c0", +3004 => x"00000000", +3005 => x"00000000", +3006 => x"00000000", +3007 => x"00000000", +3008 => x"00000000", +3009 => x"00000000", +3010 => x"00000000", +3011 => x"00000000", +3012 => x"00000000", +3013 => x"00000000", +3014 => x"00000000", +3015 => x"00000000", +3016 => x"00000000", +3017 => x"ffffffff", +3018 => x"00000000", +3019 => x"00020000", +3020 => x"00000000", +3021 => x"00000000", +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"00003158", +3161 => x"00003158", +3162 => x"00003160", +3163 => x"00003160", +3164 => x"00003168", +3165 => x"00003168", +3166 => x"00003170", +3167 => x"00003170", +3168 => x"00003178", +3169 => x"00003178", +3170 => x"00003180", +3171 => x"00003180", +3172 => x"00003188", +3173 => x"00003188", +3174 => x"00003190", +3175 => x"00003190", +3176 => x"00003198", +3177 => x"00003198", +3178 => x"000031a0", +3179 => x"000031a0", +3180 => x"000031a8", +3181 => x"000031a8", +3182 => x"000031b0", +3183 => x"000031b0", +3184 => x"000031b8", +3185 => x"000031b8", +3186 => x"000031c0", +3187 => x"000031c0", +3188 => x"000031c8", +3189 => x"000031c8", +3190 => x"000031d0", +3191 => x"000031d0", +3192 => x"000031d8", +3193 => x"000031d8", +3194 => x"000031e0", +3195 => x"000031e0", +3196 => x"000031e8", +3197 => x"000031e8", +3198 => x"000031f0", +3199 => x"000031f0", +3200 => x"000031f8", +3201 => x"000031f8", +3202 => x"00003200", +3203 => x"00003200", +3204 => x"00003208", +3205 => x"00003208", +3206 => x"00003210", +3207 => x"00003210", +3208 => x"00003218", +3209 => x"00003218", +3210 => x"00003220", +3211 => x"00003220", +3212 => x"00003228", +3213 => x"00003228", +3214 => x"00003230", +3215 => x"00003230", +3216 => x"00003238", +3217 => x"00003238", +3218 => x"00003240", +3219 => x"00003240", +3220 => x"00003248", +3221 => x"00003248", +3222 => x"00003250", +3223 => x"00003250", +3224 => x"00003258", +3225 => x"00003258", +3226 => x"00003260", +3227 => x"00003260", +3228 => x"00003268", +3229 => x"00003268", +3230 => x"00003270", +3231 => x"00003270", +3232 => x"00003278", +3233 => x"00003278", +3234 => x"00003280", +3235 => x"00003280", +3236 => x"00003288", +3237 => x"00003288", +3238 => x"00003290", +3239 => x"00003290", +3240 => x"00003298", +3241 => x"00003298", +3242 => x"000032a0", +3243 => x"000032a0", +3244 => x"000032a8", +3245 => x"000032a8", +3246 => x"000032b0", +3247 => x"000032b0", +3248 => x"000032b8", +3249 => x"000032b8", +3250 => x"000032c0", +3251 => x"000032c0", +3252 => x"000032c8", +3253 => x"000032c8", +3254 => x"000032d0", +3255 => x"000032d0", +3256 => x"000032d8", +3257 => x"000032d8", +3258 => x"000032e0", +3259 => x"000032e0", +3260 => x"000032e8", +3261 => x"000032e8", +3262 => x"000032f0", +3263 => x"000032f0", +3264 => x"000032f8", +3265 => x"000032f8", +3266 => x"00003300", +3267 => x"00003300", +3268 => x"00003308", +3269 => x"00003308", +3270 => x"00003310", +3271 => x"00003310", +3272 => x"00003318", +3273 => x"00003318", +3274 => x"00003320", +3275 => x"00003320", +3276 => x"00003328", +3277 => x"00003328", +3278 => x"0000333c", +3279 => x"00000000", +3280 => x"000035a4", +3281 => x"00003600", +3282 => x"0000365c", +3283 => x"00000000", +3284 => x"00000000", +3285 => x"00000000", +3286 => x"00000000", +3287 => x"00000000", +3288 => x"00000000", +3289 => x"00000000", +3290 => x"00000000", +3291 => x"00000000", +3292 => x"00002dbc", +3293 => x"00000000", +3294 => x"00000000", +3295 => x"00000000", +3296 => x"00000000", +3297 => x"00000000", +3298 => x"00000000", +3299 => x"00000000", +3300 => x"00000000", +3301 => x"00000000", +3302 => x"00000000", +3303 => x"00000000", +3304 => x"00000000", +3305 => x"00000000", +3306 => x"00000000", +3307 => x"00000000", +3308 => x"00000000", +3309 => x"00000000", +3310 => x"00000000", +3311 => x"00000000", +3312 => x"00000000", +3313 => x"00000000", +3314 => x"00000000", +3315 => x"00000000", +3316 => x"00000000", +3317 => x"00000000", +3318 => x"00000000", +3319 => x"00000000", +3320 => x"00000000", +3321 => x"00000001", +3322 => x"330eabcd", +3323 => x"1234e66d", +3324 => x"deec0005", +3325 => x"000b0000", +3326 => x"00000000", +3327 => x"00000000", +3328 => x"00000000", +3329 => x"00000000", +3330 => x"00000000", +3331 => x"00000000", +3332 => x"00000000", +3333 => x"00000000", +3334 => x"00000000", +3335 => x"00000000", +3336 => x"00000000", +3337 => x"00000000", +3338 => x"00000000", +3339 => x"00000000", +3340 => x"00000000", +3341 => x"00000000", +3342 => x"00000000", +3343 => x"00000000", +3344 => x"00000000", +3345 => x"00000000", +3346 => x"00000000", +3347 => x"00000000", +3348 => x"00000000", +3349 => x"00000000", +3350 => x"00000000", +3351 => x"00000000", +3352 => x"00000000", +3353 => x"00000000", +3354 => x"00000000", +3355 => x"00000000", +3356 => x"00000000", +3357 => x"00000000", +3358 => x"00000000", +3359 => x"00000000", +3360 => x"00000000", +3361 => x"00000000", +3362 => x"00000000", +3363 => x"00000000", +3364 => x"00000000", +3365 => x"00000000", +3366 => x"00000000", +3367 => x"00000000", +3368 => x"00000000", +3369 => x"00000000", +3370 => x"00000000", +3371 => x"00000000", +3372 => x"00000000", +3373 => x"00000000", +3374 => x"00000000", +3375 => x"00000000", +3376 => x"00000000", +3377 => x"00000000", +3378 => x"00000000", +3379 => x"00000000", +3380 => x"00000000", +3381 => x"00000000", +3382 => x"00000000", +3383 => x"00000000", +3384 => x"00000000", +3385 => x"00000000", +3386 => x"00000000", +3387 => x"00000000", +3388 => x"00000000", +3389 => x"00000000", +3390 => x"00000000", +3391 => x"00000000", +3392 => x"00000000", +3393 => x"00000000", +3394 => x"00000000", +3395 => x"00000000", +3396 => x"00000000", +3397 => x"00000000", +3398 => x"00000000", +3399 => x"00000000", +3400 => x"00000000", +3401 => x"00000000", +3402 => x"00000000", +3403 => x"00000000", +3404 => x"00000000", +3405 => x"00000000", +3406 => x"00000000", +3407 => x"00000000", +3408 => x"00000000", +3409 => x"00000000", +3410 => x"00000000", +3411 => x"00000000", +3412 => x"00000000", +3413 => x"00000000", +3414 => x"00000000", +3415 => x"00000000", +3416 => x"00000000", +3417 => x"00000000", +3418 => x"00000000", +3419 => x"00000000", +3420 => x"00000000", +3421 => x"00000000", +3422 => x"00000000", +3423 => x"00000000", +3424 => x"00000000", +3425 => x"00000000", +3426 => x"00000000", +3427 => x"00000000", +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"00000000", +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"00000000", +3467 => x"00000000", +3468 => x"00000000", +3469 => x"00000000", +3470 => x"00000000", +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"00002dc0", +3503 => x"ffffffff", +3504 => x"00000000", +3505 => x"ffffffff", +3506 => x"00000000", diff --git a/zpu/hdl/zpu4/test/hello/build.sh b/zpu/hdl/zpu4/test/hello/build.sh new file mode 100644 index 0000000..0d81138 --- /dev/null +++ b/zpu/hdl/zpu4/test/hello/build.sh @@ -0,0 +1,3 @@ +zpu-elf-gcc -O3 -abel `pwd`/hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections -g +zpu-elf-objdump --disassemble-all >hello.dis hello.elf +zpu-elf-objcopy -O binary hello.elf hello.bin diff --git a/zpu/hdl/zpu4/test/hello/hello.bin b/zpu/hdl/zpu4/test/hello/hello.bin new file mode 100644 index 0000000..fe17308 Binary files /dev/null and b/zpu/hdl/zpu4/test/hello/hello.bin differ diff --git a/zpu/hdl/zpu4/test/hello/hello.c b/zpu/hdl/zpu4/test/hello/hello.c new file mode 100644 index 0000000..ea3dbb8 --- /dev/null +++ b/zpu/hdl/zpu4/test/hello/hello.c @@ -0,0 +1,51 @@ +/* + +zpu-elf-gcc -abel `pwd`/hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections -g +zpu-elf-objdump --disassemble-all >hello.dis hello.elf +zpu-elf-objcopy -O binary hello.elf hello.bin + + * */ +#include + +int j; +int k; + +int main(int argc, char **argv) +{ + int i; + for (i=0; i< 10; i++) + { + puts("Hello world 1\n"); + puts("Hello world 2\n"); + j=-4; + if ((j>>1)!=-2) + { + abort(); + } + + k=10; + if (k*j!=-40) + { + abort(); + } + + j=10; + k=10000000; + if (k*j!=100000000) + { + abort(); + } + + j=0x80000000; + k=0xffffffff; + if (j>k) + { + abort(); + } + } + if (i!=10) + { + abort(); + } + +} diff --git a/zpu/hdl/zpu4/test/hello/hello.elf b/zpu/hdl/zpu4/test/hello/hello.elf new file mode 100644 index 0000000..999b9a3 Binary files /dev/null and b/zpu/hdl/zpu4/test/hello/hello.elf differ diff --git a/zpu/hdl/zpu4/test/hello/hello.ram b/zpu/hdl/zpu4/test/hello/hello.ram new file mode 100644 index 0000000..f310151 --- /dev/null +++ b/zpu/hdl/zpu4/test/hello/hello.ram @@ -0,0 +1,3165 @@ +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", diff --git a/zpu/index.html b/zpu/index.html new file mode 100644 index 0000000..bb5714f --- /dev/null +++ b/zpu/index.html @@ -0,0 +1,20 @@ + + +

Getting started

+FPGA: check out zpu/hdl, read zpu/hdl/index.html +

+Software: check out zpu/sw, read zpu/sw/index.html +

+Docs: check out zpu/docs, this is what's available as of writing. Further documentation exists in the eCosBoard 1.1 product: http://www.zylin.com/ecosboard.htm +

Other directories

+You probably don't need or want to download other directories. +
    +
  • +gccsrc - the complete GCC toolchain source. Big! Almost certainly not something you need or want to download. This has been moved to /trunk/zpugccsrc to +avoid subversion choking. +
  • roadshow - various bits and bobs to demonstrate the ZPU that has not been sorted/reorganized yet. + +
+ + + diff --git a/zpu/roadshow/roadshow/build/makefirmware.sh b/zpu/roadshow/roadshow/build/makefirmware.sh new file mode 100644 index 0000000..b44559b --- /dev/null +++ b/zpu/roadshow/roadshow/build/makefirmware.sh @@ -0,0 +1,13 @@ +echo >$2 ZylinPhiFirmware + +if [ x"$3" = x ] ;then + echo "No ic300.bit embedded into .phi" +else + echo "Embed ic300.bit into .phi" + echo >>$2 "FPGA: `wc -c $3 | grep -o -e \[0-9\]*`" + cat >>$2 $1 +fi +echo "Writing application" +echo >>$2 "Application: `wc -c $1 | grep -o -e \[0-9\]*`" +cat >>$2 $1 +echo >>$2 Done \ No newline at end of file diff --git a/zpu/roadshow/roadshow/codesize/.cvsignore b/zpu/roadshow/roadshow/codesize/.cvsignore new file mode 100644 index 0000000..6559932 --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/.cvsignore @@ -0,0 +1 @@ +smallstd.elf diff --git a/zpu/roadshow/roadshow/codesize/crt0_phi.S b/zpu/roadshow/roadshow/codesize/crt0_phi.S new file mode 100644 index 0000000..4d654e2 --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/crt0_phi.S @@ -0,0 +1,178 @@ +/* Startup code for ZPU + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file with other programs, and to distribute +those programs without any restriction coming from the use of this +file. (The General Public License restrictions do apply in other +respects; for example, they cover modification of the file, and +distribution when not linked into another program.) + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + .file "crt0.S" + + + + +; .section ".fixed_vectors","ax" +; KLUDGE!!! we remove the executable bit to avoid relaxation + .section ".fixed_vectors","a" + +; DANGER!!!! +; we need to align these code sections to 32 bytes, which +; means we must not use any assembler instructions that are relaxed +; at linker time +; DANGER!!!! + + .macro fixedim value + im \value + .endm + + .macro jsr address + + im 0 ; save R0 + load + im 4 ; save R1 + load + im 8 ; save R2 + load + + fixedim \address + call + + im 8 + store ; restore R2 + im 4 + store ; restore R1 + im 0 + store ; restore R0 + .endm + + + .macro jmp address + fixedim \address + poppc + .endm + + + .macro fast_neg + not + im 1 + add + .endm + + .macro cimpl funcname + ; save R0 + im 0 + load + + ; save R1 + im 4 + load + + ; save R2 + im 8 + load + + loadsp 20 + loadsp 20 + + fixedim \funcname + call + + ; destroy arguments on stack + storesp 0 + storesp 0 + + im 0 + load + + ; poke the result into the right slot + storesp 24 + + ; restore R2 + im 8 + store + + ; restore R1 + im 4 + store + + ; restore r0 + im 0 + store + + + storesp 4 + poppc + .endm + + .macro mult1bit + ; create mask of lowest bit in A + loadsp 8 ; A + im 1 + and + im -1 + add + not + loadsp 8 ; B + and + add ; accumulate in C + + ; shift B left 1 bit + loadsp 4 ; B + addsp 0 + storesp 8 ; B + + ; shift A right 1 bit + loadsp 8 ; A + flip + addsp 0 + flip + storesp 12 ; A + .endm + + + +/* vectors */ + .balign 32,0 +# offset 0x0000 0000 + .globl _start +_start: + ; intSp must be 0 when we jump to _premain + + im ZPU_ID + loadsp 0 + im _cpu_config + store + config + jmp _premain + + + +/* instruction emulation code */ + + .data + + + .globl _hardware +_hardware: + .long 0 + .globl _cpu_config +_cpu_config: + .long 0 + diff --git a/zpu/roadshow/roadshow/codesize/hello.c b/zpu/roadshow/roadshow/codesize/hello.c new file mode 100644 index 0000000..176275c --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/hello.c @@ -0,0 +1,9 @@ +/* Simple hello world */ +#include + + +int main(int argc, char **argv) +{ + puts("Hello world\n"); +} + diff --git a/zpu/roadshow/roadshow/codesize/index.html b/zpu/roadshow/roadshow/codesize/index.html new file mode 100644 index 0000000..3f61b4e --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/index.html @@ -0,0 +1,58 @@ + + +

Compiling hello world program with the ZPU GCC toolchain

+The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has +some very basic peripherals defined: counter, timer interrupt and a debug output port. +

Installation

+
    +
  1. Install Cygwin. http://www.cygwin.com +
  2. Start Cygwin bash +
  3. unzip zputoolchain.zip +
  4. Add install/bin from zputoolchain.zip to PATH.
    +export PATH=$PATH:/install/bin +
+

Hello world example

+The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. +

+ +zpu-elf-gcc -Os -zeta hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
+zpu-elf-size hello.elf
+
+

Optimizing for size

+The ZPU toolchain produces highly compact code. +
    +
  1. Since the ZPU GCC toolchain supports standard ANSI C, it is easy to stumble across +functionality that takes up a lot of space. E.g. the standard printf() function is a beast. Some compilers drop e.g. floating point support +from the printf() function and thus boast a "smaller" printf() when in fact they have a non-standard printf(). newlib has a standard printf() function +and an alternative iprintf() function that works only on integers. +
  2. The ZPU ships with default startup code that works across various configurations of the ZPU, so be warned that there is some overhead that will +not occurr in the final application(anywhere between 1-4kBytes). +
  3. Compilation and linker options matter. The ZPU benefits greatly from the "-Wl,--relax -Wl,--gc-sections" options which is not used by +all architectures(e.g. GCC ARM does not implement/need -Wl,--relax). +
+

Small code example

+ +zpu-elf-gcc -Os -abel smallstd.c -o smallstd.elf -Wl,--relax -Wl,--gc-sections
+zpu-elf-size small.elf
+
+$ zpu-elf-size small.elf
+ text data bss dec hex filename
+ 2845 952 36 3833 ef9 small.elf
+
+
+ +

Even smaller code example

+If the ZPU implements the optional instructions, the RAM overhead can be reduced significantly. +

+ +zpu-elf-gcc -Os -abel crt0_phi.S small.c -o small.elf -Wl,--relax -Wl,--gc-sections -nostdlib
+zpu-elf-size small.elf
+
+$ zpu-elf-size small.elf
+ text data bss dec hex filename
+ 56 8 0 64 40 small.elf
+
+
+ + + diff --git a/zpu/roadshow/roadshow/codesize/small.c b/zpu/roadshow/roadshow/codesize/small.c new file mode 100644 index 0000000..0317343 --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/small.c @@ -0,0 +1,9 @@ +void _premain(void) +{ + volatile int *someRegister=(volatile int *)0; + volatile int *otherRegister=(volatile int *)4; + while (*someRegister!=0) + { + *otherRegister++; + } +} diff --git a/zpu/roadshow/roadshow/codesize/small.elf b/zpu/roadshow/roadshow/codesize/small.elf new file mode 100644 index 0000000..4193a53 Binary files /dev/null and b/zpu/roadshow/roadshow/codesize/small.elf differ diff --git a/zpu/roadshow/roadshow/codesize/smallstd.c b/zpu/roadshow/roadshow/codesize/smallstd.c new file mode 100644 index 0000000..5d4b87a --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/smallstd.c @@ -0,0 +1,9 @@ +int main(int argc, char **argv) +{ + volatile int *someRegister=(volatile int *)0; + volatile int *otherRegister=(volatile int *)4; + while (*someRegister!=0) + { + *otherRegister++; + } +} diff --git a/zpu/roadshow/roadshow/dhrystone/.cvsignore b/zpu/roadshow/roadshow/dhrystone/.cvsignore new file mode 100644 index 0000000..3544c3f --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/.cvsignore @@ -0,0 +1,2 @@ +dhrystone.elf +dhrystone_zpu.elf diff --git a/zpu/roadshow/roadshow/dhrystone/RATIONALE b/zpu/roadshow/roadshow/dhrystone/RATIONALE new file mode 100644 index 0000000..926e046 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/RATIONALE @@ -0,0 +1,361 @@ + + + Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules + + [published in SIGPLAN Notices 23,8 (Aug. 1988), 49-62] + + + Reinhold P. Weicker + Siemens AG, E STE 35 + [now: Siemens AG, AUT E 51] + Postfach 3220 + D-8520 Erlangen + Germany (West) + + + + +1. Why a Version 2 of Dhrystone? + +The Dhrystone benchmark program [1] has become a popular benchmark for +CPU/compiler performance measurement, in particular in the area of +minicomputers, workstations, PC's and microprocesors. It apparently satisfies +a need for an easy-to-use integer benchmark; it gives a first performance +indication which is more meaningful than MIPS numbers which, in their literal +meaning (million instructions per second), cannot be used across different +instruction sets (e.g. RISC vs. CISC). With the increasing use of the +benchmark, it seems necessary to reconsider the benchmark and to check whether +it can still fulfill this function. Version 2 of Dhrystone is the result of +such a re-evaluation, it has been made for two reasons: + +o Dhrystone has been published in Ada [1], and Versions in Ada, Pascal and C + have been distributed by Reinhold Weicker via floppy disk. However, the + version that was used most often for benchmarking has been the version made + by Rick Richardson by another translation from the Ada version into the C + programming language, this has been the version distributed via the UNIX + network Usenet [2]. + + There is an obvious need for a common C version of Dhrystone, since C is at + present the most popular system programming language for the class of + systems (microcomputers, minicomputers, workstations) where Dhrystone is + used most. There should be, as far as possible, only one C version of + Dhrystone such that results can be compared without restrictions. In the + past, the C versions distributed by Rick Richardson (Version 1.1) and by + Reinhold Weicker had small (though not significant) differences. + + Together with the new C version, the Ada and Pascal versions have been + updated as well. + +o As far as it is possible without changes to the Dhrystone statistics, + optimizing compilers should be prevented from removing significant + statements. It has turned out in the past that optimizing compilers + suppressed code generation for too many statements (by "dead code removal" + or "dead variable elimination"). This has lead to the danger that + benchmarking results obtained by a naive application of Dhrystone - without + inspection of the code that was generated - could become meaningless. + +The overall policiy for version 2 has been that the distribution of +statements, operand types and operand locality described in [1] should remain +unchanged as much as possible. (Very few changes were necessary; their impact +should be negligible.) Also, the order of statements should remain unchanged. +Although I am aware of some critical remarks on the benchmark - I agree with +several of them - and know some suggestions for improvement, I didn't want to +change the benchmark into something different from what has become known as +"Dhrystone"; the confusion generated by such a change would probably outweight +the benefits. If I were to write a new benchmark program, I wouldn't give it +the name "Dhrystone" since this denotes the program published in [1]. +However, I do recognize the need for a larger number of representative +programs that can be used as benchmarks; users should always be encouraged to +use more than just one benchmark. + +The new versions (version 2.1 for C, Pascal and Ada) will be distributed as +widely as possible. (Version 2.1 differs from version 2.0 distributed via the +UNIX Network Usenet in March 1988 only in a few corrections for minor +deficiencies found by users of version 2.0.) Readers who want to use the +benchmark for their own measurements can obtain a copy in machine-readable +form on floppy disk (MS-DOS or XENIX format) from the author. + + +2. Overall Characteristics of Version 2 + +In general, version 2 follows - in the parts that are significant for +performance measurement, i.e. within the measurement loop - the published +(Ada) version and the C versions previously distributed. Where the versions +distributed by Rick Richardson [2] and Reinhold Weicker have been different, +it follows the version distributed by Reinhold Weicker. (However, the +differences have been so small that their impact on execution time in all +likelihood has been negligible.) The initialization and UNIX instrumentation +part - which had been omitted in [1] - follows mostly the ideas of Rick +Richardson [2]. However, any changes in the initialization part and in the +printing of the result have no impact on performance measurement since they +are outside the measaurement loop. As a concession to older compilers, names +have been made unique within the first 8 characters for the C version. + +The original publication of Dhrystone did not contain any statements for time +measurement since they are necessarily system-dependent. However, it turned +out that it is not enough just to inclose the main procedure of Dhrystone in a +loop and to measure the execution time. If the variables that are computed +are not used somehow, there is the danger that the compiler considers them as +"dead variables" and suppresses code generation for a part of the statements. +Therefore in version 2 all variables of "main" are printed at the end of the +program. This also permits some plausibility control for correct execution of +the benchmark. + +At several places in the benchmark, code has been added, but only in branches +that are not executed. The intention is that optimizing compilers should be +prevented from moving code out of the measurement loop, or from removing code +altogether. Statements that are executed have been changed in very few places +only. In these cases, only the role of some operands has been changed, and it +was made sure that the numbers defining the "Dhrystone distribution" +(distribution of statements, operand types and locality) still hold as much as +possible. Except for sophisticated optimizing compilers, execution times for +version 2.1 should be the same as for previous versions. + +Because of the self-imposed limitation that the order and distribution of the +executed statements should not be changed, there are still cases where +optimizing compilers may not generate code for some statements. To a certain +degree, this is unavoidable for small synthetic benchmarks. Users of the +benchmark are advised to check code listings whether code is generated for all +statements of Dhrystone. + +Contrary to the suggestion in the published paper and its realization in the +versions previously distributed, no attempt has been made to subtract the time +for the measurement loop overhead. (This calculation has proven difficult to +implement in a correct way, and its omission makes the program simpler.) +However, since the loop check is now part of the benchmark, this does have an +impact - though a very minor one - on the distribution statistics which have +been updated for this version. + + +3. Discussion of Individual Changes + +In this section, all changes are described that affect the measurement loop +and that are not just renamings of variables. All remarks refer to the C +version; the other language versions have been updated similarly. + +In addition to adding the measurement loop and the printout statements, +changes have been made at the following places: + +o In procedure "main", three statements have been added in the non-executed + "then" part of the statement + + if (Enum_Loc == Func_1 (Ch_Index, 'C')) + + they are + + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); + Int_2_Loc = Run_Index; + Int_Glob = Run_Index; + + The string assignment prevents movement of the preceding assignment to + Str_2_Loc (5'th statement of "main") out of the measurement loop (This + probably will not happen for the C version, but it did happen with another + language and compiler.) The assignment to Int_2_Loc prevents value + propagation for Int_2_Loc, and the assignment to Int_Glob makes the value of + Int_Glob possibly dependent from the value of Run_Index. + +o In the three arithmetic computations at the end of the measurement loop in + "main ", the role of some variables has been exchanged, to prevent the + division from just cancelling out the multiplication as it was in [1]. A + very smart compiler might have recognized this and suppressed code + generation for the division. + +o For Proc_2, no code has been changed, but the values of the actual parameter + have changed due to changes in "main". + +o In Proc_4, the second assignment has been changed from + + Bool_Loc = Bool_Loc | Bool_Glob; + + to + + Bool_Glob = Bool_Loc | Bool_Glob; + + It now assigns a value to a global variable instead of a local variable + (Bool_Loc); Bool_Loc would be a "dead variable" which is not used + afterwards. + +o In Func_1, the statement + + Ch_1_Glob = Ch_1_Loc; + + was added in the non-executed "else" part of the "if" statement, to prevent + the suppression of code generation for the assignment to Ch_1_Loc. + +o In Func_2, the second character comparison statement has been changed to + + if (Ch_Loc == 'R') + + ('R' instead of 'X') because a comparison with 'X' is implied in the + preceding "if" statement. + + Also in Func_2, the statement + + Int_Glob = Int_Loc; + + has been added in the non-executed part of the last "if" statement, in order + to prevent Int_Loc from becoming a dead variable. + +o In Func_3, a non-executed "else" part has been added to the "if" statement. + While the program would not be incorrect without this "else" part, it is + considered bad programming practice if a function can be left without a + return value. + + To compensate for this change, the (non-executed) "else" part in the "if" + statement of Proc_3 was removed. + +The distribution statistics have been changed only by the addition of the +measurement loop iteration (1 additional statement, 4 additional local integer +operands) and by the change in Proc_4 (one operand changed from local to +global). The distribution statistics in the comment headers have been updated +accordingly. + + +4. String Operations + +The string operations (string assignment and string comparison) have not been +changed, to keep the program consistent with the original version. + +There has been some concern that the string operations are over-represented in +the program, and that execution time is dominated by these operations. This +was true in particular when optimizing compilers removed too much code in the +main part of the program, this should have been mitigated in version 2. + +It should be noted that this is a language-dependent issue: Dhrystone was +first published in Ada, and with Ada or Pascal semantics, the time spent in +the string operations is, at least in all implementations known to me, +considerably smaller. In Ada and Pascal, assignment and comparison of strings +are operators defined in the language, and the upper bounds of the strings +occuring in Dhrystone are part of the type information known at compilation +time. The compilers can therefore generate efficient inline code. In C, +string assignemt and comparisons are not part of the language, so the string +operations must be expressed in terms of the C library functions "strcpy" and +"strcmp". (ANSI C allows an implementation to use inline code for these +functions.) In addition to the overhead caused by additional function calls, +these functions are defined for null-terminated strings where the length of +the strings is not known at compilation time; the function has to check every +byte for the termination condition (the null byte). + +Obviously, a C library which includes efficiently coded "strcpy" and "strcmp" +functions helps to obtain good Dhrystone results. However, I don't think that +this is unfair since string functions do occur quite frequently in real +programs (editors, command interpreters, etc.). If the strings functions are +implemented efficiently, this helps real programs as well as benchmark +programs. + +I admit that the string comparison in Dhrystone terminates later (after +scanning 20 characters) than most string comparisons in real programs. For +consistency with the original benchmark, I didn't change the program despite +this weakness. + + +5. Intended Use of Dhrystone + +When Dhrystone is used, the following "ground rules" apply: + +o Separate compilation (Ada and C versions) + + As mentioned in [1], Dhrystone was written to reflect actual programming + practice in systems programming. The division into several compilation + units (5 in the Ada version, 2 in the C version) is intended, as is the + distribution of inter-module and intra-module subprogram calls. Although on + many systems there will be no difference in execution time to a Dhrystone + version where all compilation units are merged into one file, the rule is + that separate compilation should be used. The intention is that real + programming practice, where programs consist of several independently + compiled units, should be reflected. This also has implies that the + compiler, while compiling one unit, has no information about the use of + variables, register allocation etc. occuring in other compilation units. + Although in real life compilation units will probably be larger, the + intention is that these effects of separate compilation are modeled in + Dhrystone. + + A few language systems have post-linkage optimization available (e.g., final + register allocation is performed after linkage). This is a borderline case: + Post-linkage optimization involves additional program preparation time + (although not as much as compilation in one unit) which may prevent its + general use in practical programming. I think that since it defeats the + intentions given above, it should not be used for Dhrystone. + + Unfortunately, ISO/ANSI Pascal does not contain language features for + separate compilation. Although most commercial Pascal compilers provide + separate compilation in some way, we cannot use it for Dhrystone since such + a version would not be portable. Therefore, no attempt has been made to + provide a Pascal version with several compilation units. + +o No procedure merging + + Although Dhrystone contains some very short procedures where execution would + benefit from procedure merging (inlining, macro expansion of procedures), + procedure merging is not to be used. The reason is that the percentage of + procedure and function calls is part of the "Dhrystone distribution" of + statements contained in [1]. This restriction does not hold for the string + functions of the C version since ANSI C allows an implementation to use + inline code for these functions. + +o Other optimizations are allowed, but they should be indicated + + It is often hard to draw an exact line between "normal code generation" and + "optimization" in compilers: Some compilers perform operations by default + that are invoked in other compilers only when optimization is explicitly + requested. Also, we cannot avoid that in benchmarking people try to achieve + results that look as good as possible. Therefore, optimizations performed + by compilers - other than those listed above - are not forbidden when + Dhrystone execution times are measured. Dhrystone is not intended to be + non-optimizable but is intended to be similarly optimizable as normal + programs. For example, there are several places in Dhrystone where + performance benefits from optimizations like common subexpression + elimination, value propagation etc., but normal programs usually also + benefit from these optimizations. Therefore, no effort was made to + artificially prevent such optimizations. However, measurement reports + should indicate which compiler optimization levels have been used, and + reporting results with different levels of compiler optimization for the + same hardware is encouraged. + +o Default results are those without "register" declarations (C version) + + When Dhrystone results are quoted without additional qualification, they + should be understood as results obtained without use of the "register" + attribute. Good compilers should be able to make good use of registers even + without explicit register declarations ([3], p. 193). + +Of course, for experimental purposes, post-linkage optimization, procedure +merging and/or compilation in one unit can be done to determine their effects. +However, Dhrystone numbers obtained under these conditions should be +explicitly marked as such; "normal" Dhrystone results should be understood as +results obtained following the ground rules listed above. + +In any case, for serious performance evaluation, users are advised to ask for +code listings and to check them carefully. In this way, when results for +different systems are compared, the reader can get a feeling how much +performance difference is due to compiler optimization and how much is due to +hardware speed. + + +6. Acknowledgements + +The C version 2.1 of Dhrystone has been developed in cooperation with Rick +Richardson (Tinton Falls, NJ), it incorporates many ideas from the "Version +1.1" distributed previously by him over the UNIX network Usenet. Through his +activity with Usenet, Rick Richardson has made a very valuable contribution to +the dissemination of the benchmark. I also thank Chaim Benedelac (National +Semiconductor), David Ditzel (SUN), Earl Killian and John Mashey (MIPS), Alan +Smith and Rafael Saavedra-Barrera (UC at Berkeley) for their help with +comments on earlier versions of the benchmark. + + +7. Bibliography + +[1] + Reinhold P. Weicker: Dhrystone: A Synthetic Systems Programming Benchmark. + Communications of the ACM 27, 10 (Oct. 1984), 1013-1030 + +[2] + Rick Richardson: Dhrystone 1.1 Benchmark Summary (and Program Text) + Informal Distribution via "Usenet", Last Version Known to me: Sept. 21, + 1987 + +[3] + Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language. + Prentice-Hall, Englewood Cliffs (NJ) 1978 + diff --git a/zpu/roadshow/roadshow/dhrystone/README_C b/zpu/roadshow/roadshow/dhrystone/README_C new file mode 100644 index 0000000..a27a192 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/README_C @@ -0,0 +1,78 @@ +This "shar" file contains the documentation for the +electronic mail distribution of the Dhrystone benchmark (C version 2.1); +a companion "shar" file contains the source code. +(Because of mail length restrictions for some mailers, I have +split the distribution in two parts.) + +For versions in other languages, see the other "shar" files. + +Files containing the C version (*.h: Header File, *.c: C Modules) + + dhry.h + dhry_1.c + dhry_2.c + +The file RATIONALE contains the article + + "Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules" + +which has been published, together with the C source code (Version 2.0), +in SIGPLAN Notices vol. 23, no. 8 (Aug. 1988), pp. 49-62. +This article explains all changes that have been made for Version 2, +compared with the version of the original publication +in Communications of the ACM vol. 27, no. 10 (Oct. 1984), pp. 1013-1030. +It also contains "ground rules" for benchmarking with Dhrystone +which should be followed by everyone who uses the program and publishes +Dhrystone results. + +Compared with the Version 2.0 published in SIGPLAN Notices, Version 2.1 +contains a few corrections that have been made after Version 2.0 was +distriobuted over the UNIX network Usenet. These small differences between +Version 2.0 and 2.1 should not affect execution time measurements. +For those who want to compare the exact contents of both versions, +the file "dhry_c.dif" contains the differences between the two versions, +as generated by a file comparison of the corresponding files with the +UNIX utility "diff". + +The file VARIATIONS contains the article + + "Understanding Variations in Dhrystone Performance" + +which has been published in Microprocessor Report, May 1989 +(Editor: M. Slater), pp. 16-17. It describes the points that users +should know if C Dhrystone results are compared. + +Recipients of this shar file who perform measurements are asked +to send measurement results to the author and/or to Rick Richardson. +Rick Richardson publishes regularly Dhrystone results on the UNIX network +Usenet. For submissions of results to him (preferably by electronic mail, +see address in the program header), he has provided a form which is contained +in the file "submit.frm". + + +The following files are contained in other "shar" files: + +Files containing the Ada version (*.s: Specifications, *.b: Bodies): + + d_global.s + d_main.b + d_pack_1.b + d_pack_1.s + d_pack_2.b + d_pack_2.s + +File containing the Pascal version: + + dhry.p + + +February 22, 1990 + + Reinhold P. Weicker + Siemens AG, AUT E 51 + Postfach 3220 + D-8520 Erlangen + Germany (West) + + Phone: [xxx-49]-9131-7-20330 (8-17 Central European Time) + UUCP: ..!mcsun!unido!estevax!weicker diff --git a/zpu/roadshow/roadshow/dhrystone/VARIATIONS b/zpu/roadshow/roadshow/dhrystone/VARIATIONS new file mode 100644 index 0000000..3046cbd --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/VARIATIONS @@ -0,0 +1,157 @@ + + Understanding Variations in Dhrystone Performance + + + + By Reinhold P. Weicker, Siemens AG, AUT E 51, Erlangen + + + + April 1989 + + + This article has appeared in: + + + Microprocessor Report, May 1989 (Editor: M. Slater), pp. 16-17 + + + + +Microprocessor manufacturers tend to credit all the performance measured by +benchmarks to the speed of their processors, they often don't even mention the +programming language and compiler used. In their detailed documents, usually +called "performance brief" or "performance report," they usually do give more +details. However, these details are often lost in the press releases and other +marketing statements. For serious performance evaluation, it is necessary to +study the code generated by the various compilers. + +Dhrystone was originally published in Ada (Communications of the ACM, Oct. +1984). However, since good Ada compilers were rare at this time and, together +with UNIX, C became more and more popular, the C version of Dhrystone is the +one now mainly used in industry. There are "official" versions 2.1 for Ada, +Pascal, and C, which are as close together as the languages' semantic +differences permit. + +Dhrystone contains two statements where the programming language and its +translation play a major part in the execution time measured by the benchmark: + + o String assignment (in procedure Proc_0 / main) + o String comparison (in function Func_2) + +In Ada and Pascal, strings are arrays of characters where the length of the +string is part of the type information known at compile time. In C, strings +are also arrays of characters, but there are no operators defined in the +language for assignment and comparison of strings. Instead, functions +"strcpy" and "strcmp" are used. These functions are defined for strings of +arbitrary length, and make use of the fact that strings in C have to end with +a terminating null byte. For general-purpose calls to these functions, the +implementor can assume nothing about the length and the alignment of the +strings involved. + +The C version of Dhrystone spends a relatively large amount of time in these +two functions. Some time ago, I made measurements on a VAX 11/785 with the +Berkeley UNIX (4.2) compilers (often-used compilers, but certainly not the +most advanced). In the C version, 23% of the time was spent in the string +functions; in the Pascal version, only 10%. On good RISC machines (where less +time is spent in the procedure calling sequence than on a VAX) and with better +optimizing compilers, the percentage is higher; MIPS has reported 34% for an +R3000. Because of this effect, Pascal and Ada Dhrystone results are usually +better than C results (except when the optimization quality of the C compiler +is considerably better than that of the other compilers). + +Several people have noted that the string operations are over-represented in +Dhrystone, mainly because the strings occurring in Dhrystone are longer than +average strings. I admit that this is true, and have said so in my SIGPLAN +Notices paper (Aug. 1988); however, I didn't want to generate confusion by +changing the string lengths from version 1 to version 2. + +Even if they are somewhat over-represented in Dhrystone, string operations are +frequent enough that it makes sense to implement them in the most efficient +way possible, not only for benchmarking purposes. This means that they can +and should be written in assembly language code. ANSI C also explicitly allows +the strings functions to be implemented as macros, i.e. by inline code. + +There is also a third way to speed up the "strcpy" statement in Dhrystone: For +this particular "strcpy" statement, the source of the assignment is a string +constant. Therefore, in contrast to calls to "strcpy" in the general case, the +compiler knows the length and alignment of the strings involved at compile +time and can generate code in the same efficient way as a Pascal compiler +(word instructions instead of byte instructions). + +This is not allowed in the case of the "strcmp" call: Here, the addresses are +formal procedure parameters, and no assumptions can be made about the length +or alignment of the strings. Any such assumptions would indicate an incorrect +implementation. They might work for Dhrystone, where the strings are in fact +word-aligned with typical compilers, but other programs would deliver +incorrect results. + +So, for an apple-to-apple comparison between processors, and not between +several possible (legal or illegal) degrees of compiler optimization, one +should check that the systems are comparable with respect to the following +three points: + + (1) String functions in assembly language vs. in C + + Frequently used functions such as the string functions can and should be + written in assembly language, and all serious C language systems known + to me do this. (I list this point for completeness only.) Note that + processors with an instruction that checks a word for a null byte (such + as AMD's 29000 and Intel's 80960) have an advantage here. (This + advantage decreases relatively if optimization (3) is applied.) Due to + the length of the strings involved in Dhrystone, this advantage may be + considered too high in perspective, but it is certainly legal to use + such instructions - after all, these situations are what they were + invented for. + + (2) String function code inline vs. as library functions. + + ANSI C has created a new situation, compared with the older + Kernighan/Ritchie C. In the original C, the definition of the string + function was not part of the language. Now it is, and inlining is + explicitly allowed. I probably should have stated more clearly in my + SIGPLAN Notices paper that the rule "No procedure inlining for + Dhrystone" referred to the user level procedures only and not to the + library routines. + + (3) Fixed-length and alignment assumptions for the strings + + Compilers should be allowed to optimize in these cases if (and only if) + it is safe to do so. For Dhrystone, this is the "strcpy" statement, but + not the "strcmp" statement (unless, of course, the "strcmp" code + explicitly checks the alignment at execution time and branches + accordingly). A "Dhrystone switch" for the compiler that causes the + generation of code that may not work under certain circumstances is + certainly inappropriate for comparisons. It has been reported in Usenet + that some C compilers provide such a compiler option; since I don't have + access to all C compilers involved, I cannot verify this. + + If the fixed-length and word-alignment assumption can be used, a wide + bus that permits fast multi-word load instructions certainly does help; + however, this fact by itself should not make a really big difference. + +A check of these points - something that is necessary for a thorough +evaluation and comparison of the Dhrystone performance claims - requires +object code listings as well as listings for the string functions (strcpy, +strcmp) that are possibly called by the program. + +I don't pretend that Dhrystone is a perfect tool to measure the integer +performance of microprocessors. The more it is used and discussed, the more I +myself learn about aspects that I hadn't noticed yet when I wrote the program. +And of course, the very success of a benchmark program is a danger in that +people may tune their compilers and/or hardware to it, and with this action +make it less useful. + +Whetstone and Linpack have their critical points also: The Whetstone rating +depends heavily on the speed of the mathematical functions (sine, sqrt, ...), +and Linpack is sensitive to data alignment for some cache configurations. + +Introduction of a standard set of public domain benchmark software (something +the SPEC effort attempts) is certainly a worthwhile thing. In the meantime, +people will continue to use whatever is available and widely distributed, and +Dhrystone ratings are probably still better than MIPS ratings if these are - +as often in industry - based on no reproducible derivation. However, any +serious performance evaluation requires more than just a comparison of raw +numbers; one has to make sure that the numbers have been obtained in a +comparable way. + diff --git a/zpu/roadshow/roadshow/dhrystone/build.sh b/zpu/roadshow/roadshow/dhrystone/build.sh new file mode 100644 index 0000000..5bba707 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/build.sh @@ -0,0 +1,7 @@ +zpu-elf-gcc -phi -DTIME dhry_1.c dhry_2.c -O3 -Wl,--relax -Wl,--gc-sections -o dhrystone.elf +zpu-elf-size *.elf +zpu-elf-objcopy -O binary dhrystone.elf dhrystone.bin +sh ../build/makefirmware.sh dhrystone.bin dhrystone.zpu + + + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry-c b/zpu/roadshow/roadshow/dhrystone/dhry-c new file mode 100644 index 0000000..4cec46c --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry-c @@ -0,0 +1,1779 @@ +# to unbundle, sh this file (in an empty directory) +echo RATIONALE 1>&2 +sed >RATIONALE <<'//GO.SYSIN DD RATIONALE' 's/^-//' +- +- +- Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules +- +- [published in SIGPLAN Notices 23,8 (Aug. 1988), 49-62] +- +- +- Reinhold P. Weicker +- Siemens AG, E STE 35 +- [now: Siemens AG, AUT E 51] +- Postfach 3220 +- D-8520 Erlangen +- Germany (West) +- +- +- +- +-1. Why a Version 2 of Dhrystone? +- +-The Dhrystone benchmark program [1] has become a popular benchmark for +-CPU/compiler performance measurement, in particular in the area of +-minicomputers, workstations, PC's and microprocesors. It apparently satisfies +-a need for an easy-to-use integer benchmark; it gives a first performance +-indication which is more meaningful than MIPS numbers which, in their literal +-meaning (million instructions per second), cannot be used across different +-instruction sets (e.g. RISC vs. CISC). With the increasing use of the +-benchmark, it seems necessary to reconsider the benchmark and to check whether +-it can still fulfill this function. Version 2 of Dhrystone is the result of +-such a re-evaluation, it has been made for two reasons: +- +-o Dhrystone has been published in Ada [1], and Versions in Ada, Pascal and C +- have been distributed by Reinhold Weicker via floppy disk. However, the +- version that was used most often for benchmarking has been the version made +- by Rick Richardson by another translation from the Ada version into the C +- programming language, this has been the version distributed via the UNIX +- network Usenet [2]. +- +- There is an obvious need for a common C version of Dhrystone, since C is at +- present the most popular system programming language for the class of +- systems (microcomputers, minicomputers, workstations) where Dhrystone is +- used most. There should be, as far as possible, only one C version of +- Dhrystone such that results can be compared without restrictions. In the +- past, the C versions distributed by Rick Richardson (Version 1.1) and by +- Reinhold Weicker had small (though not significant) differences. +- +- Together with the new C version, the Ada and Pascal versions have been +- updated as well. +- +-o As far as it is possible without changes to the Dhrystone statistics, +- optimizing compilers should be prevented from removing significant +- statements. It has turned out in the past that optimizing compilers +- suppressed code generation for too many statements (by "dead code removal" +- or "dead variable elimination"). This has lead to the danger that +- benchmarking results obtained by a naive application of Dhrystone - without +- inspection of the code that was generated - could become meaningless. +- +-The overall policiy for version 2 has been that the distribution of +-statements, operand types and operand locality described in [1] should remain +-unchanged as much as possible. (Very few changes were necessary; their impact +-should be negligible.) Also, the order of statements should remain unchanged. +-Although I am aware of some critical remarks on the benchmark - I agree with +-several of them - and know some suggestions for improvement, I didn't want to +-change the benchmark into something different from what has become known as +-"Dhrystone"; the confusion generated by such a change would probably outweight +-the benefits. If I were to write a new benchmark program, I wouldn't give it +-the name "Dhrystone" since this denotes the program published in [1]. +-However, I do recognize the need for a larger number of representative +-programs that can be used as benchmarks; users should always be encouraged to +-use more than just one benchmark. +- +-The new versions (version 2.1 for C, Pascal and Ada) will be distributed as +-widely as possible. (Version 2.1 differs from version 2.0 distributed via the +-UNIX Network Usenet in March 1988 only in a few corrections for minor +-deficiencies found by users of version 2.0.) Readers who want to use the +-benchmark for their own measurements can obtain a copy in machine-readable +-form on floppy disk (MS-DOS or XENIX format) from the author. +- +- +-2. Overall Characteristics of Version 2 +- +-In general, version 2 follows - in the parts that are significant for +-performance measurement, i.e. within the measurement loop - the published +-(Ada) version and the C versions previously distributed. Where the versions +-distributed by Rick Richardson [2] and Reinhold Weicker have been different, +-it follows the version distributed by Reinhold Weicker. (However, the +-differences have been so small that their impact on execution time in all +-likelihood has been negligible.) The initialization and UNIX instrumentation +-part - which had been omitted in [1] - follows mostly the ideas of Rick +-Richardson [2]. However, any changes in the initialization part and in the +-printing of the result have no impact on performance measurement since they +-are outside the measaurement loop. As a concession to older compilers, names +-have been made unique within the first 8 characters for the C version. +- +-The original publication of Dhrystone did not contain any statements for time +-measurement since they are necessarily system-dependent. However, it turned +-out that it is not enough just to inclose the main procedure of Dhrystone in a +-loop and to measure the execution time. If the variables that are computed +-are not used somehow, there is the danger that the compiler considers them as +-"dead variables" and suppresses code generation for a part of the statements. +-Therefore in version 2 all variables of "main" are printed at the end of the +-program. This also permits some plausibility control for correct execution of +-the benchmark. +- +-At several places in the benchmark, code has been added, but only in branches +-that are not executed. The intention is that optimizing compilers should be +-prevented from moving code out of the measurement loop, or from removing code +-altogether. Statements that are executed have been changed in very few places +-only. In these cases, only the role of some operands has been changed, and it +-was made sure that the numbers defining the "Dhrystone distribution" +-(distribution of statements, operand types and locality) still hold as much as +-possible. Except for sophisticated optimizing compilers, execution times for +-version 2.1 should be the same as for previous versions. +- +-Because of the self-imposed limitation that the order and distribution of the +-executed statements should not be changed, there are still cases where +-optimizing compilers may not generate code for some statements. To a certain +-degree, this is unavoidable for small synthetic benchmarks. Users of the +-benchmark are advised to check code listings whether code is generated for all +-statements of Dhrystone. +- +-Contrary to the suggestion in the published paper and its realization in the +-versions previously distributed, no attempt has been made to subtract the time +-for the measurement loop overhead. (This calculation has proven difficult to +-implement in a correct way, and its omission makes the program simpler.) +-However, since the loop check is now part of the benchmark, this does have an +-impact - though a very minor one - on the distribution statistics which have +-been updated for this version. +- +- +-3. Discussion of Individual Changes +- +-In this section, all changes are described that affect the measurement loop +-and that are not just renamings of variables. All remarks refer to the C +-version; the other language versions have been updated similarly. +- +-In addition to adding the measurement loop and the printout statements, +-changes have been made at the following places: +- +-o In procedure "main", three statements have been added in the non-executed +- "then" part of the statement +- +- if (Enum_Loc == Func_1 (Ch_Index, 'C')) +- +- they are +- +- strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); +- Int_2_Loc = Run_Index; +- Int_Glob = Run_Index; +- +- The string assignment prevents movement of the preceding assignment to +- Str_2_Loc (5'th statement of "main") out of the measurement loop (This +- probably will not happen for the C version, but it did happen with another +- language and compiler.) The assignment to Int_2_Loc prevents value +- propagation for Int_2_Loc, and the assignment to Int_Glob makes the value of +- Int_Glob possibly dependent from the value of Run_Index. +- +-o In the three arithmetic computations at the end of the measurement loop in +- "main ", the role of some variables has been exchanged, to prevent the +- division from just cancelling out the multiplication as it was in [1]. A +- very smart compiler might have recognized this and suppressed code +- generation for the division. +- +-o For Proc_2, no code has been changed, but the values of the actual parameter +- have changed due to changes in "main". +- +-o In Proc_4, the second assignment has been changed from +- +- Bool_Loc = Bool_Loc | Bool_Glob; +- +- to +- +- Bool_Glob = Bool_Loc | Bool_Glob; +- +- It now assigns a value to a global variable instead of a local variable +- (Bool_Loc); Bool_Loc would be a "dead variable" which is not used +- afterwards. +- +-o In Func_1, the statement +- +- Ch_1_Glob = Ch_1_Loc; +- +- was added in the non-executed "else" part of the "if" statement, to prevent +- the suppression of code generation for the assignment to Ch_1_Loc. +- +-o In Func_2, the second character comparison statement has been changed to +- +- if (Ch_Loc == 'R') +- +- ('R' instead of 'X') because a comparison with 'X' is implied in the +- preceding "if" statement. +- +- Also in Func_2, the statement +- +- Int_Glob = Int_Loc; +- +- has been added in the non-executed part of the last "if" statement, in order +- to prevent Int_Loc from becoming a dead variable. +- +-o In Func_3, a non-executed "else" part has been added to the "if" statement. +- While the program would not be incorrect without this "else" part, it is +- considered bad programming practice if a function can be left without a +- return value. +- +- To compensate for this change, the (non-executed) "else" part in the "if" +- statement of Proc_3 was removed. +- +-The distribution statistics have been changed only by the addition of the +-measurement loop iteration (1 additional statement, 4 additional local integer +-operands) and by the change in Proc_4 (one operand changed from local to +-global). The distribution statistics in the comment headers have been updated +-accordingly. +- +- +-4. String Operations +- +-The string operations (string assignment and string comparison) have not been +-changed, to keep the program consistent with the original version. +- +-There has been some concern that the string operations are over-represented in +-the program, and that execution time is dominated by these operations. This +-was true in particular when optimizing compilers removed too much code in the +-main part of the program, this should have been mitigated in version 2. +- +-It should be noted that this is a language-dependent issue: Dhrystone was +-first published in Ada, and with Ada or Pascal semantics, the time spent in +-the string operations is, at least in all implementations known to me, +-considerably smaller. In Ada and Pascal, assignment and comparison of strings +-are operators defined in the language, and the upper bounds of the strings +-occuring in Dhrystone are part of the type information known at compilation +-time. The compilers can therefore generate efficient inline code. In C, +-string assignemt and comparisons are not part of the language, so the string +-operations must be expressed in terms of the C library functions "strcpy" and +-"strcmp". (ANSI C allows an implementation to use inline code for these +-functions.) In addition to the overhead caused by additional function calls, +-these functions are defined for null-terminated strings where the length of +-the strings is not known at compilation time; the function has to check every +-byte for the termination condition (the null byte). +- +-Obviously, a C library which includes efficiently coded "strcpy" and "strcmp" +-functions helps to obtain good Dhrystone results. However, I don't think that +-this is unfair since string functions do occur quite frequently in real +-programs (editors, command interpreters, etc.). If the strings functions are +-implemented efficiently, this helps real programs as well as benchmark +-programs. +- +-I admit that the string comparison in Dhrystone terminates later (after +-scanning 20 characters) than most string comparisons in real programs. For +-consistency with the original benchmark, I didn't change the program despite +-this weakness. +- +- +-5. Intended Use of Dhrystone +- +-When Dhrystone is used, the following "ground rules" apply: +- +-o Separate compilation (Ada and C versions) +- +- As mentioned in [1], Dhrystone was written to reflect actual programming +- practice in systems programming. The division into several compilation +- units (5 in the Ada version, 2 in the C version) is intended, as is the +- distribution of inter-module and intra-module subprogram calls. Although on +- many systems there will be no difference in execution time to a Dhrystone +- version where all compilation units are merged into one file, the rule is +- that separate compilation should be used. The intention is that real +- programming practice, where programs consist of several independently +- compiled units, should be reflected. This also has implies that the +- compiler, while compiling one unit, has no information about the use of +- variables, register allocation etc. occuring in other compilation units. +- Although in real life compilation units will probably be larger, the +- intention is that these effects of separate compilation are modeled in +- Dhrystone. +- +- A few language systems have post-linkage optimization available (e.g., final +- register allocation is performed after linkage). This is a borderline case: +- Post-linkage optimization involves additional program preparation time +- (although not as much as compilation in one unit) which may prevent its +- general use in practical programming. I think that since it defeats the +- intentions given above, it should not be used for Dhrystone. +- +- Unfortunately, ISO/ANSI Pascal does not contain language features for +- separate compilation. Although most commercial Pascal compilers provide +- separate compilation in some way, we cannot use it for Dhrystone since such +- a version would not be portable. Therefore, no attempt has been made to +- provide a Pascal version with several compilation units. +- +-o No procedure merging +- +- Although Dhrystone contains some very short procedures where execution would +- benefit from procedure merging (inlining, macro expansion of procedures), +- procedure merging is not to be used. The reason is that the percentage of +- procedure and function calls is part of the "Dhrystone distribution" of +- statements contained in [1]. This restriction does not hold for the string +- functions of the C version since ANSI C allows an implementation to use +- inline code for these functions. +- +-o Other optimizations are allowed, but they should be indicated +- +- It is often hard to draw an exact line between "normal code generation" and +- "optimization" in compilers: Some compilers perform operations by default +- that are invoked in other compilers only when optimization is explicitly +- requested. Also, we cannot avoid that in benchmarking people try to achieve +- results that look as good as possible. Therefore, optimizations performed +- by compilers - other than those listed above - are not forbidden when +- Dhrystone execution times are measured. Dhrystone is not intended to be +- non-optimizable but is intended to be similarly optimizable as normal +- programs. For example, there are several places in Dhrystone where +- performance benefits from optimizations like common subexpression +- elimination, value propagation etc., but normal programs usually also +- benefit from these optimizations. Therefore, no effort was made to +- artificially prevent such optimizations. However, measurement reports +- should indicate which compiler optimization levels have been used, and +- reporting results with different levels of compiler optimization for the +- same hardware is encouraged. +- +-o Default results are those without "register" declarations (C version) +- +- When Dhrystone results are quoted without additional qualification, they +- should be understood as results obtained without use of the "register" +- attribute. Good compilers should be able to make good use of registers even +- without explicit register declarations ([3], p. 193). +- +-Of course, for experimental purposes, post-linkage optimization, procedure +-merging and/or compilation in one unit can be done to determine their effects. +-However, Dhrystone numbers obtained under these conditions should be +-explicitly marked as such; "normal" Dhrystone results should be understood as +-results obtained following the ground rules listed above. +- +-In any case, for serious performance evaluation, users are advised to ask for +-code listings and to check them carefully. In this way, when results for +-different systems are compared, the reader can get a feeling how much +-performance difference is due to compiler optimization and how much is due to +-hardware speed. +- +- +-6. Acknowledgements +- +-The C version 2.1 of Dhrystone has been developed in cooperation with Rick +-Richardson (Tinton Falls, NJ), it incorporates many ideas from the "Version +-1.1" distributed previously by him over the UNIX network Usenet. Through his +-activity with Usenet, Rick Richardson has made a very valuable contribution to +-the dissemination of the benchmark. I also thank Chaim Benedelac (National +-Semiconductor), David Ditzel (SUN), Earl Killian and John Mashey (MIPS), Alan +-Smith and Rafael Saavedra-Barrera (UC at Berkeley) for their help with +-comments on earlier versions of the benchmark. +- +- +-7. Bibliography +- +-[1] +- Reinhold P. Weicker: Dhrystone: A Synthetic Systems Programming Benchmark. +- Communications of the ACM 27, 10 (Oct. 1984), 1013-1030 +- +-[2] +- Rick Richardson: Dhrystone 1.1 Benchmark Summary (and Program Text) +- Informal Distribution via "Usenet", Last Version Known to me: Sept. 21, +- 1987 +- +-[3] +- Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language. +- Prentice-Hall, Englewood Cliffs (NJ) 1978 +- +//GO.SYSIN DD RATIONALE +echo README_C 1>&2 +sed >README_C <<'//GO.SYSIN DD README_C' 's/^-//' +-This "shar" file contains the documentation for the +-electronic mail distribution of the Dhrystone benchmark (C version 2.1); +-a companion "shar" file contains the source code. +-(Because of mail length restrictions for some mailers, I have +-split the distribution in two parts.) +- +-For versions in other languages, see the other "shar" files. +- +-Files containing the C version (*.h: Header File, *.c: C Modules) +- +- dhry.h +- dhry_1.c +- dhry_2.c +- +-The file RATIONALE contains the article +- +- "Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules" +- +-which has been published, together with the C source code (Version 2.0), +-in SIGPLAN Notices vol. 23, no. 8 (Aug. 1988), pp. 49-62. +-This article explains all changes that have been made for Version 2, +-compared with the version of the original publication +-in Communications of the ACM vol. 27, no. 10 (Oct. 1984), pp. 1013-1030. +-It also contains "ground rules" for benchmarking with Dhrystone +-which should be followed by everyone who uses the program and publishes +-Dhrystone results. +- +-Compared with the Version 2.0 published in SIGPLAN Notices, Version 2.1 +-contains a few corrections that have been made after Version 2.0 was +-distriobuted over the UNIX network Usenet. These small differences between +-Version 2.0 and 2.1 should not affect execution time measurements. +-For those who want to compare the exact contents of both versions, +-the file "dhry_c.dif" contains the differences between the two versions, +-as generated by a file comparison of the corresponding files with the +-UNIX utility "diff". +- +-The file VARIATIONS contains the article +- +- "Understanding Variations in Dhrystone Performance" +- +-which has been published in Microprocessor Report, May 1989 +-(Editor: M. Slater), pp. 16-17. It describes the points that users +-should know if C Dhrystone results are compared. +- +-Recipients of this shar file who perform measurements are asked +-to send measurement results to the author and/or to Rick Richardson. +-Rick Richardson publishes regularly Dhrystone results on the UNIX network +-Usenet. For submissions of results to him (preferably by electronic mail, +-see address in the program header), he has provided a form which is contained +-in the file "submit.frm". +- +- +-The following files are contained in other "shar" files: +- +-Files containing the Ada version (*.s: Specifications, *.b: Bodies): +- +- d_global.s +- d_main.b +- d_pack_1.b +- d_pack_1.s +- d_pack_2.b +- d_pack_2.s +- +-File containing the Pascal version: +- +- dhry.p +- +- +-February 22, 1990 +- +- Reinhold P. Weicker +- Siemens AG, AUT E 51 +- Postfach 3220 +- D-8520 Erlangen +- Germany (West) +- +- Phone: [xxx-49]-9131-7-20330 (8-17 Central European Time) +- UUCP: ..!mcsun!unido!estevax!weicker +//GO.SYSIN DD README_C +echo VARIATIONS 1>&2 +sed >VARIATIONS <<'//GO.SYSIN DD VARIATIONS' 's/^-//' +- +- Understanding Variations in Dhrystone Performance +- +- +- +- By Reinhold P. Weicker, Siemens AG, AUT E 51, Erlangen +- +- +- +- April 1989 +- +- +- This article has appeared in: +- +- +- Microprocessor Report, May 1989 (Editor: M. Slater), pp. 16-17 +- +- +- +- +-Microprocessor manufacturers tend to credit all the performance measured by +-benchmarks to the speed of their processors, they often don't even mention the +-programming language and compiler used. In their detailed documents, usually +-called "performance brief" or "performance report," they usually do give more +-details. However, these details are often lost in the press releases and other +-marketing statements. For serious performance evaluation, it is necessary to +-study the code generated by the various compilers. +- +-Dhrystone was originally published in Ada (Communications of the ACM, Oct. +-1984). However, since good Ada compilers were rare at this time and, together +-with UNIX, C became more and more popular, the C version of Dhrystone is the +-one now mainly used in industry. There are "official" versions 2.1 for Ada, +-Pascal, and C, which are as close together as the languages' semantic +-differences permit. +- +-Dhrystone contains two statements where the programming language and its +-translation play a major part in the execution time measured by the benchmark: +- +- o String assignment (in procedure Proc_0 / main) +- o String comparison (in function Func_2) +- +-In Ada and Pascal, strings are arrays of characters where the length of the +-string is part of the type information known at compile time. In C, strings +-are also arrays of characters, but there are no operators defined in the +-language for assignment and comparison of strings. Instead, functions +-"strcpy" and "strcmp" are used. These functions are defined for strings of +-arbitrary length, and make use of the fact that strings in C have to end with +-a terminating null byte. For general-purpose calls to these functions, the +-implementor can assume nothing about the length and the alignment of the +-strings involved. +- +-The C version of Dhrystone spends a relatively large amount of time in these +-two functions. Some time ago, I made measurements on a VAX 11/785 with the +-Berkeley UNIX (4.2) compilers (often-used compilers, but certainly not the +-most advanced). In the C version, 23% of the time was spent in the string +-functions; in the Pascal version, only 10%. On good RISC machines (where less +-time is spent in the procedure calling sequence than on a VAX) and with better +-optimizing compilers, the percentage is higher; MIPS has reported 34% for an +-R3000. Because of this effect, Pascal and Ada Dhrystone results are usually +-better than C results (except when the optimization quality of the C compiler +-is considerably better than that of the other compilers). +- +-Several people have noted that the string operations are over-represented in +-Dhrystone, mainly because the strings occurring in Dhrystone are longer than +-average strings. I admit that this is true, and have said so in my SIGPLAN +-Notices paper (Aug. 1988); however, I didn't want to generate confusion by +-changing the string lengths from version 1 to version 2. +- +-Even if they are somewhat over-represented in Dhrystone, string operations are +-frequent enough that it makes sense to implement them in the most efficient +-way possible, not only for benchmarking purposes. This means that they can +-and should be written in assembly language code. ANSI C also explicitly allows +-the strings functions to be implemented as macros, i.e. by inline code. +- +-There is also a third way to speed up the "strcpy" statement in Dhrystone: For +-this particular "strcpy" statement, the source of the assignment is a string +-constant. Therefore, in contrast to calls to "strcpy" in the general case, the +-compiler knows the length and alignment of the strings involved at compile +-time and can generate code in the same efficient way as a Pascal compiler +-(word instructions instead of byte instructions). +- +-This is not allowed in the case of the "strcmp" call: Here, the addresses are +-formal procedure parameters, and no assumptions can be made about the length +-or alignment of the strings. Any such assumptions would indicate an incorrect +-implementation. They might work for Dhrystone, where the strings are in fact +-word-aligned with typical compilers, but other programs would deliver +-incorrect results. +- +-So, for an apple-to-apple comparison between processors, and not between +-several possible (legal or illegal) degrees of compiler optimization, one +-should check that the systems are comparable with respect to the following +-three points: +- +- (1) String functions in assembly language vs. in C +- +- Frequently used functions such as the string functions can and should be +- written in assembly language, and all serious C language systems known +- to me do this. (I list this point for completeness only.) Note that +- processors with an instruction that checks a word for a null byte (such +- as AMD's 29000 and Intel's 80960) have an advantage here. (This +- advantage decreases relatively if optimization (3) is applied.) Due to +- the length of the strings involved in Dhrystone, this advantage may be +- considered too high in perspective, but it is certainly legal to use +- such instructions - after all, these situations are what they were +- invented for. +- +- (2) String function code inline vs. as library functions. +- +- ANSI C has created a new situation, compared with the older +- Kernighan/Ritchie C. In the original C, the definition of the string +- function was not part of the language. Now it is, and inlining is +- explicitly allowed. I probably should have stated more clearly in my +- SIGPLAN Notices paper that the rule "No procedure inlining for +- Dhrystone" referred to the user level procedures only and not to the +- library routines. +- +- (3) Fixed-length and alignment assumptions for the strings +- +- Compilers should be allowed to optimize in these cases if (and only if) +- it is safe to do so. For Dhrystone, this is the "strcpy" statement, but +- not the "strcmp" statement (unless, of course, the "strcmp" code +- explicitly checks the alignment at execution time and branches +- accordingly). A "Dhrystone switch" for the compiler that causes the +- generation of code that may not work under certain circumstances is +- certainly inappropriate for comparisons. It has been reported in Usenet +- that some C compilers provide such a compiler option; since I don't have +- access to all C compilers involved, I cannot verify this. +- +- If the fixed-length and word-alignment assumption can be used, a wide +- bus that permits fast multi-word load instructions certainly does help; +- however, this fact by itself should not make a really big difference. +- +-A check of these points - something that is necessary for a thorough +-evaluation and comparison of the Dhrystone performance claims - requires +-object code listings as well as listings for the string functions (strcpy, +-strcmp) that are possibly called by the program. +- +-I don't pretend that Dhrystone is a perfect tool to measure the integer +-performance of microprocessors. The more it is used and discussed, the more I +-myself learn about aspects that I hadn't noticed yet when I wrote the program. +-And of course, the very success of a benchmark program is a danger in that +-people may tune their compilers and/or hardware to it, and with this action +-make it less useful. +- +-Whetstone and Linpack have their critical points also: The Whetstone rating +-depends heavily on the speed of the mathematical functions (sine, sqrt, ...), +-and Linpack is sensitive to data alignment for some cache configurations. +- +-Introduction of a standard set of public domain benchmark software (something +-the SPEC effort attempts) is certainly a worthwhile thing. In the meantime, +-people will continue to use whatever is available and widely distributed, and +-Dhrystone ratings are probably still better than MIPS ratings if these are - +-as often in industry - based on no reproducible derivation. However, any +-serious performance evaluation requires more than just a comparison of raw +-numbers; one has to make sure that the numbers have been obtained in a +-comparable way. +- +//GO.SYSIN DD VARIATIONS +echo dhry.h 1>&2 +sed >dhry.h <<'//GO.SYSIN DD dhry.h' 's/^-//' +-/* +- **************************************************************************** +- * +- * "DHRYSTONE" Benchmark Program +- * ----------------------------- +- * +- * Version: C, Version 2.1 +- * +- * File: dhry.h (part 1 of 3) +- * +- * Date: May 25, 1988 +- * +- * Author: Reinhold P. Weicker +- * Siemens AG, AUT E 51 +- * Postfach 3220 +- * 8520 Erlangen +- * Germany (West) +- * Phone: [+49]-9131-7-20330 +- * (8-17 Central European Time) +- * Usenet: ..!mcsun!unido!estevax!weicker +- * +- * Original Version (in Ada) published in +- * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), +- * pp. 1013 - 1030, together with the statistics +- * on which the distribution of statements etc. is based. +- * +- * In this C version, the following C library functions are used: +- * - strcpy, strcmp (inside the measurement loop) +- * - printf, scanf (outside the measurement loop) +- * In addition, Berkeley UNIX system calls "times ()" or "time ()" +- * are used for execution time measurement. For measurements +- * on other systems, these calls have to be changed. +- * +- * Collection of Results: +- * Reinhold Weicker (address see above) and +- * +- * Rick Richardson +- * PC Research. Inc. +- * 94 Apple Orchard Drive +- * Tinton Falls, NJ 07724 +- * Phone: (201) 389-8963 (9-17 EST) +- * Usenet: ...!uunet!pcrat!rick +- * +- * Please send results to Rick Richardson and/or Reinhold Weicker. +- * Complete information should be given on hardware and software used. +- * Hardware information includes: Machine type, CPU, type and size +- * of caches; for microprocessors: clock frequency, memory speed +- * (number of wait states). +- * Software information includes: Compiler (and runtime library) +- * manufacturer and version, compilation switches, OS version. +- * The Operating System version may give an indication about the +- * compiler; Dhrystone itself performs no OS calls in the measurement loop. +- * +- * The complete output generated by the program should be mailed +- * such that at least some checks for correctness can be made. +- * +- *************************************************************************** +- * +- * History: This version C/2.1 has been made for two reasons: +- * +- * 1) There is an obvious need for a common C version of +- * Dhrystone, since C is at present the most popular system +- * programming language for the class of processors +- * (microcomputers, minicomputers) where Dhrystone is used most. +- * There should be, as far as possible, only one C version of +- * Dhrystone such that results can be compared without +- * restrictions. In the past, the C versions distributed +- * by Rick Richardson (Version 1.1) and by Reinhold Weicker +- * had small (though not significant) differences. +- * +- * 2) As far as it is possible without changes to the Dhrystone +- * statistics, optimizing compilers should be prevented from +- * removing significant statements. +- * +- * This C version has been developed in cooperation with +- * Rick Richardson (Tinton Falls, NJ), it incorporates many +- * ideas from the "Version 1.1" distributed previously by +- * him over the UNIX network Usenet. +- * I also thank Chaim Benedelac (National Semiconductor), +- * David Ditzel (SUN), Earl Killian and John Mashey (MIPS), +- * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley) +- * for their help with comments on earlier versions of the +- * benchmark. +- * +- * Changes: In the initialization part, this version follows mostly +- * Rick Richardson's version distributed via Usenet, not the +- * version distributed earlier via floppy disk by Reinhold Weicker. +- * As a concession to older compilers, names have been made +- * unique within the first 8 characters. +- * Inside the measurement loop, this version follows the +- * version previously distributed by Reinhold Weicker. +- * +- * At several places in the benchmark, code has been added, +- * but within the measurement loop only in branches that +- * are not executed. The intention is that optimizing compilers +- * should be prevented from moving code out of the measurement +- * loop, or from removing code altogether. Since the statements +- * that are executed within the measurement loop have NOT been +- * changed, the numbers defining the "Dhrystone distribution" +- * (distribution of statements, operand types and locality) +- * still hold. Except for sophisticated optimizing compilers, +- * execution times for this version should be the same as +- * for previous versions. +- * +- * Since it has proven difficult to subtract the time for the +- * measurement loop overhead in a correct way, the loop check +- * has been made a part of the benchmark. This does have +- * an impact - though a very minor one - on the distribution +- * statistics which have been updated for this version. +- * +- * All changes within the measurement loop are described +- * and discussed in the companion paper "Rationale for +- * Dhrystone version 2". +- * +- * Because of the self-imposed limitation that the order and +- * distribution of the executed statements should not be +- * changed, there are still cases where optimizing compilers +- * may not generate code for some statements. To a certain +- * degree, this is unavoidable for small synthetic benchmarks. +- * Users of the benchmark are advised to check code listings +- * whether code is generated for all statements of Dhrystone. +- * +- * Version 2.1 is identical to version 2.0 distributed via +- * the UNIX network Usenet in March 1988 except that it corrects +- * some minor deficiencies that were found by users of version 2.0. +- * The only change within the measurement loop is that a +- * non-executed "else" part was added to the "if" statement in +- * Func_3, and a non-executed "else" part removed from Proc_3. +- * +- *************************************************************************** +- * +- * Defines: The following "Defines" are possible: +- * -DREG=register (default: Not defined) +- * As an approximation to what an average C programmer +- * might do, the "register" storage class is applied +- * (if enabled by -DREG=register) +- * - for local variables, if they are used (dynamically) +- * five or more times +- * - for parameters if they are used (dynamically) +- * six or more times +- * Note that an optimal "register" strategy is +- * compiler-dependent, and that "register" declarations +- * do not necessarily lead to faster execution. +- * -DNOSTRUCTASSIGN (default: Not defined) +- * Define if the C compiler does not support +- * assignment of structures. +- * -DNOENUMS (default: Not defined) +- * Define if the C compiler does not support +- * enumeration types. +- * -DTIMES (default) +- * -DTIME +- * The "times" function of UNIX (returning process times) +- * or the "time" function (returning wallclock time) +- * is used for measurement. +- * For single user machines, "time ()" is adequate. For +- * multi-user machines where you cannot get single-user +- * access, use the "times ()" function. If you have +- * neither, use a stopwatch in the dead of night. +- * "printf"s are provided marking the points "Start Timer" +- * and "Stop Timer". DO NOT use the UNIX "time(1)" +- * command, as this will measure the total time to +- * run this program, which will (erroneously) include +- * the time to allocate storage (malloc) and to perform +- * the initialization. +- * -DHZ=nnn +- * In Berkeley UNIX, the function "times" returns process +- * time in 1/HZ seconds, with HZ = 60 for most systems. +- * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY +- * A VALUE. +- * +- *************************************************************************** +- * +- * Compilation model and measurement (IMPORTANT): +- * +- * This C version of Dhrystone consists of three files: +- * - dhry.h (this file, containing global definitions and comments) +- * - dhry_1.c (containing the code corresponding to Ada package Pack_1) +- * - dhry_2.c (containing the code corresponding to Ada package Pack_2) +- * +- * The following "ground rules" apply for measurements: +- * - Separate compilation +- * - No procedure merging +- * - Otherwise, compiler optimizations are allowed but should be indicated +- * - Default results are those without register declarations +- * See the companion paper "Rationale for Dhrystone Version 2" for a more +- * detailed discussion of these ground rules. +- * +- * For 16-Bit processors (e.g. 80186, 80286), times for all compilation +- * models ("small", "medium", "large" etc.) should be given if possible, +- * together with a definition of these models for the compiler system used. +- * +- ************************************************************************** +- * +- * Dhrystone (C version) statistics: +- * +- * [Comment from the first distribution, updated for version 2. +- * Note that because of language differences, the numbers are slightly +- * different from the Ada version.] +- * +- * The following program contains statements of a high level programming +- * language (here: C) in a distribution considered representative: +- * +- * assignments 52 (51.0 %) +- * control statements 33 (32.4 %) +- * procedure, function calls 17 (16.7 %) +- * +- * 103 statements are dynamically executed. The program is balanced with +- * respect to the three aspects: +- * +- * - statement type +- * - operand type +- * - operand locality +- * operand global, local, parameter, or constant. +- * +- * The combination of these three aspects is balanced only approximately. +- * +- * 1. Statement Type: +- * ----------------- number +- * +- * V1 = V2 9 +- * (incl. V1 = F(..) +- * V = Constant 12 +- * Assignment, 7 +- * with array element +- * Assignment, 6 +- * with record component +- * -- +- * 34 34 +- * +- * X = Y +|-|"&&"|"|" Z 5 +- * X = Y +|-|"==" Constant 6 +- * X = X +|- 1 3 +- * X = Y *|/ Z 2 +- * X = Expression, 1 +- * two operators +- * X = Expression, 1 +- * three operators +- * -- +- * 18 18 +- * +- * if .... 14 +- * with "else" 7 +- * without "else" 7 +- * executed 3 +- * not executed 4 +- * for ... 7 | counted every time +- * while ... 4 | the loop condition +- * do ... while 1 | is evaluated +- * switch ... 1 +- * break 1 +- * declaration with 1 +- * initialization +- * -- +- * 34 34 +- * +- * P (...) procedure call 11 +- * user procedure 10 +- * library procedure 1 +- * X = F (...) +- * function call 6 +- * user function 5 +- * library function 1 +- * -- +- * 17 17 +- * --- +- * 103 +- * +- * The average number of parameters in procedure or function calls +- * is 1.82 (not counting the function values as implicit parameters). +- * +- * +- * 2. Operators +- * ------------ +- * number approximate +- * percentage +- * +- * Arithmetic 32 50.8 +- * +- * + 21 33.3 +- * - 7 11.1 +- * * 3 4.8 +- * / (int div) 1 1.6 +- * +- * Comparison 27 42.8 +- * +- * == 9 14.3 +- * /= 4 6.3 +- * > 1 1.6 +- * < 3 4.8 +- * >= 1 1.6 +- * <= 9 14.3 +- * +- * Logic 4 6.3 +- * +- * && (AND-THEN) 1 1.6 +- * | (OR) 1 1.6 +- * ! (NOT) 2 3.2 +- * +- * -- ----- +- * 63 100.1 +- * +- * +- * 3. Operand Type (counted once per operand reference): +- * --------------- +- * number approximate +- * percentage +- * +- * Integer 175 72.3 % +- * Character 45 18.6 % +- * Pointer 12 5.0 % +- * String30 6 2.5 % +- * Array 2 0.8 % +- * Record 2 0.8 % +- * --- ------- +- * 242 100.0 % +- * +- * When there is an access path leading to the final operand (e.g. a record +- * component), only the final data type on the access path is counted. +- * +- * +- * 4. Operand Locality: +- * ------------------- +- * number approximate +- * percentage +- * +- * local variable 114 47.1 % +- * global variable 22 9.1 % +- * parameter 45 18.6 % +- * value 23 9.5 % +- * reference 22 9.1 % +- * function result 6 2.5 % +- * constant 55 22.7 % +- * --- ------- +- * 242 100.0 % +- * +- * +- * The program does not compute anything meaningful, but it is syntactically +- * and semantically correct. All variables have a value assigned to them +- * before they are used as a source operand. +- * +- * There has been no explicit effort to account for the effects of a +- * cache, or to balance the use of long or short displacements for code or +- * data. +- * +- *************************************************************************** +- */ +- +-/* Compiler and system dependent definitions: */ +- +-#ifndef TIME +-#define TIMES +-#endif +- /* Use times(2) time function unless */ +- /* explicitly defined otherwise */ +- +-#ifdef TIMES +-#include +-#include +- /* for "times" */ +-#endif +- +-#define Mic_secs_Per_Second 1000000.0 +- /* Berkeley UNIX C returns process times in seconds/HZ */ +- +-#ifdef NOSTRUCTASSIGN +-#define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) +-#else +-#define structassign(d, s) d = s +-#endif +- +-#ifdef NOENUM +-#define Ident_1 0 +-#define Ident_2 1 +-#define Ident_3 2 +-#define Ident_4 3 +-#define Ident_5 4 +- typedef int Enumeration; +-#else +- typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} +- Enumeration; +-#endif +- /* for boolean and enumeration types in Ada, Pascal */ +- +-/* General definitions: */ +- +-#include +- /* for strcpy, strcmp */ +- +-#define Null 0 +- /* Value of a Null pointer */ +-#define true 1 +-#define false 0 +- +-typedef int One_Thirty; +-typedef int One_Fifty; +-typedef char Capital_Letter; +-typedef int Boolean; +-typedef char Str_30 [31]; +-typedef int Arr_1_Dim [50]; +-typedef int Arr_2_Dim [50] [50]; +- +-typedef struct record +- { +- struct record *Ptr_Comp; +- Enumeration Discr; +- union { +- struct { +- Enumeration Enum_Comp; +- int Int_Comp; +- char Str_Comp [31]; +- } var_1; +- struct { +- Enumeration E_Comp_2; +- char Str_2_Comp [31]; +- } var_2; +- struct { +- char Ch_1_Comp; +- char Ch_2_Comp; +- } var_3; +- } variant; +- } Rec_Type, *Rec_Pointer; +- +- +//GO.SYSIN DD dhry.h +echo dhry_1.c 1>&2 +sed >dhry_1.c <<'//GO.SYSIN DD dhry_1.c' 's/^-//' +-/* +- **************************************************************************** +- * +- * "DHRYSTONE" Benchmark Program +- * ----------------------------- +- * +- * Version: C, Version 2.1 +- * +- * File: dhry_1.c (part 2 of 3) +- * +- * Date: May 25, 1988 +- * +- * Author: Reinhold P. Weicker +- * +- **************************************************************************** +- */ +- +-#include "dhry.h" +- +-/* Global Variables: */ +- +-Rec_Pointer Ptr_Glob, +- Next_Ptr_Glob; +-int Int_Glob; +-Boolean Bool_Glob; +-char Ch_1_Glob, +- Ch_2_Glob; +-int Arr_1_Glob [50]; +-int Arr_2_Glob [50] [50]; +- +-extern char *malloc (); +-Enumeration Func_1 (); +- /* forward declaration necessary since Enumeration may not simply be int */ +- +-#ifndef REG +- Boolean Reg = false; +-#define REG +- /* REG becomes defined as empty */ +- /* i.e. no register variables */ +-#else +- Boolean Reg = true; +-#endif +- +-/* variables for time measurement: */ +- +-#ifdef TIMES +-struct tms time_info; +-extern int times (); +- /* see library function "times" */ +-#define Too_Small_Time 120 +- /* Measurements should last at least about 2 seconds */ +-#endif +-#ifdef TIME +-extern long time(); +- /* see library function "time" */ +-#define Too_Small_Time 2 +- /* Measurements should last at least 2 seconds */ +-#endif +- +-long Begin_Time, +- End_Time, +- User_Time; +-float Microseconds, +- Dhrystones_Per_Second; +- +-/* end of variables for time measurement */ +- +- +-main () +-/*****/ +- +- /* main program, corresponds to procedures */ +- /* Main and Proc_0 in the Ada version */ +-{ +- One_Fifty Int_1_Loc; +- REG One_Fifty Int_2_Loc; +- One_Fifty Int_3_Loc; +- REG char Ch_Index; +- Enumeration Enum_Loc; +- Str_30 Str_1_Loc; +- Str_30 Str_2_Loc; +- REG int Run_Index; +- REG int Number_Of_Runs; +- +- /* Initializations */ +- +- Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); +- Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); +- +- Ptr_Glob->Ptr_Comp = Next_Ptr_Glob; +- Ptr_Glob->Discr = Ident_1; +- Ptr_Glob->variant.var_1.Enum_Comp = Ident_3; +- Ptr_Glob->variant.var_1.Int_Comp = 40; +- strcpy (Ptr_Glob->variant.var_1.Str_Comp, +- "DHRYSTONE PROGRAM, SOME STRING"); +- strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); +- +- Arr_2_Glob [8][7] = 10; +- /* Was missing in published program. Without this statement, */ +- /* Arr_2_Glob [8][7] would have an undefined value. */ +- /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */ +- /* overflow may occur for this array element. */ +- +- printf ("\n"); +- printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); +- printf ("\n"); +- if (Reg) +- { +- printf ("Program compiled with 'register' attribute\n"); +- printf ("\n"); +- } +- else +- { +- printf ("Program compiled without 'register' attribute\n"); +- printf ("\n"); +- } +- printf ("Please give the number of runs through the benchmark: "); +- { +- int n; +- scanf ("%d", &n); +- Number_Of_Runs = n; +- } +- printf ("\n"); +- +- printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs); +- +- /***************/ +- /* Start timer */ +- /***************/ +- +-#ifdef TIMES +- times (&time_info); +- Begin_Time = (long) time_info.tms_utime; +-#endif +-#ifdef TIME +- Begin_Time = time ( (long *) 0); +-#endif +- +- for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) +- { +- +- Proc_5(); +- Proc_4(); +- /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */ +- Int_1_Loc = 2; +- Int_2_Loc = 3; +- strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING"); +- Enum_Loc = Ident_2; +- Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc); +- /* Bool_Glob == 1 */ +- while (Int_1_Loc < Int_2_Loc) /* loop body executed once */ +- { +- Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc; +- /* Int_3_Loc == 7 */ +- Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc); +- /* Int_3_Loc == 7 */ +- Int_1_Loc += 1; +- } /* while */ +- /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ +- Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc); +- /* Int_Glob == 5 */ +- Proc_1 (Ptr_Glob); +- for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index) +- /* loop body executed twice */ +- { +- if (Enum_Loc == Func_1 (Ch_Index, 'C')) +- /* then, not executed */ +- { +- Proc_6 (Ident_1, &Enum_Loc); +- strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); +- Int_2_Loc = Run_Index; +- Int_Glob = Run_Index; +- } +- } +- /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ +- Int_2_Loc = Int_2_Loc * Int_1_Loc; +- Int_1_Loc = Int_2_Loc / Int_3_Loc; +- Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; +- /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */ +- Proc_2 (&Int_1_Loc); +- /* Int_1_Loc == 5 */ +- +- } /* loop "for Run_Index" */ +- +- /**************/ +- /* Stop timer */ +- /**************/ +- +-#ifdef TIMES +- times (&time_info); +- End_Time = (long) time_info.tms_utime; +-#endif +-#ifdef TIME +- End_Time = time ( (long *) 0); +-#endif +- +- printf ("Execution ends\n"); +- printf ("\n"); +- printf ("Final values of the variables used in the benchmark:\n"); +- printf ("\n"); +- printf ("Int_Glob: %d\n", Int_Glob); +- printf (" should be: %d\n", 5); +- printf ("Bool_Glob: %d\n", Bool_Glob); +- printf (" should be: %d\n", 1); +- printf ("Ch_1_Glob: %c\n", Ch_1_Glob); +- printf (" should be: %c\n", 'A'); +- printf ("Ch_2_Glob: %c\n", Ch_2_Glob); +- printf (" should be: %c\n", 'B'); +- printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]); +- printf (" should be: %d\n", 7); +- printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]); +- printf (" should be: Number_Of_Runs + 10\n"); +- printf ("Ptr_Glob->\n"); +- printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp); +- printf (" should be: (implementation-dependent)\n"); +- printf (" Discr: %d\n", Ptr_Glob->Discr); +- printf (" should be: %d\n", 0); +- printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp); +- printf (" should be: %d\n", 2); +- printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp); +- printf (" should be: %d\n", 17); +- printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp); +- printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); +- printf ("Next_Ptr_Glob->\n"); +- printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp); +- printf (" should be: (implementation-dependent), same as above\n"); +- printf (" Discr: %d\n", Next_Ptr_Glob->Discr); +- printf (" should be: %d\n", 0); +- printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp); +- printf (" should be: %d\n", 1); +- printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp); +- printf (" should be: %d\n", 18); +- printf (" Str_Comp: %s\n", +- Next_Ptr_Glob->variant.var_1.Str_Comp); +- printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); +- printf ("Int_1_Loc: %d\n", Int_1_Loc); +- printf (" should be: %d\n", 5); +- printf ("Int_2_Loc: %d\n", Int_2_Loc); +- printf (" should be: %d\n", 13); +- printf ("Int_3_Loc: %d\n", Int_3_Loc); +- printf (" should be: %d\n", 7); +- printf ("Enum_Loc: %d\n", Enum_Loc); +- printf (" should be: %d\n", 1); +- printf ("Str_1_Loc: %s\n", Str_1_Loc); +- printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n"); +- printf ("Str_2_Loc: %s\n", Str_2_Loc); +- printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n"); +- printf ("\n"); +- +- User_Time = End_Time - Begin_Time; +- +- if (User_Time < Too_Small_Time) +- { +- printf ("Measured time too small to obtain meaningful results\n"); +- printf ("Please increase number of runs\n"); +- printf ("\n"); +- } +- else +- { +-#ifdef TIME +- Microseconds = (float) User_Time * Mic_secs_Per_Second +- / (float) Number_Of_Runs; +- Dhrystones_Per_Second = (float) Number_Of_Runs / (float) User_Time; +-#else +- Microseconds = (float) User_Time * Mic_secs_Per_Second +- / ((float) HZ * ((float) Number_Of_Runs)); +- Dhrystones_Per_Second = ((float) HZ * (float) Number_Of_Runs) +- / (float) User_Time; +-#endif +- printf ("Microseconds for one run through Dhrystone: "); +- printf ("%6.1f \n", Microseconds); +- printf ("Dhrystones per Second: "); +- printf ("%6.1f \n", Dhrystones_Per_Second); +- printf ("\n"); +- } +- +-} +- +- +-Proc_1 (Ptr_Val_Par) +-/******************/ +- +-REG Rec_Pointer Ptr_Val_Par; +- /* executed once */ +-{ +- REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp; +- /* == Ptr_Glob_Next */ +- /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */ +- /* corresponds to "rename" in Ada, "with" in Pascal */ +- +- structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); +- Ptr_Val_Par->variant.var_1.Int_Comp = 5; +- Next_Record->variant.var_1.Int_Comp +- = Ptr_Val_Par->variant.var_1.Int_Comp; +- Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp; +- Proc_3 (&Next_Record->Ptr_Comp); +- /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp +- == Ptr_Glob->Ptr_Comp */ +- if (Next_Record->Discr == Ident_1) +- /* then, executed */ +- { +- Next_Record->variant.var_1.Int_Comp = 6; +- Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp, +- &Next_Record->variant.var_1.Enum_Comp); +- Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp; +- Proc_7 (Next_Record->variant.var_1.Int_Comp, 10, +- &Next_Record->variant.var_1.Int_Comp); +- } +- else /* not executed */ +- structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp); +-} /* Proc_1 */ +- +- +-Proc_2 (Int_Par_Ref) +-/******************/ +- /* executed once */ +- /* *Int_Par_Ref == 1, becomes 4 */ +- +-One_Fifty *Int_Par_Ref; +-{ +- One_Fifty Int_Loc; +- Enumeration Enum_Loc; +- +- Int_Loc = *Int_Par_Ref + 10; +- do /* executed once */ +- if (Ch_1_Glob == 'A') +- /* then, executed */ +- { +- Int_Loc -= 1; +- *Int_Par_Ref = Int_Loc - Int_Glob; +- Enum_Loc = Ident_1; +- } /* if */ +- while (Enum_Loc != Ident_1); /* true */ +-} /* Proc_2 */ +- +- +-Proc_3 (Ptr_Ref_Par) +-/******************/ +- /* executed once */ +- /* Ptr_Ref_Par becomes Ptr_Glob */ +- +-Rec_Pointer *Ptr_Ref_Par; +- +-{ +- if (Ptr_Glob != Null) +- /* then, executed */ +- *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp; +- Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp); +-} /* Proc_3 */ +- +- +-Proc_4 () /* without parameters */ +-/*******/ +- /* executed once */ +-{ +- Boolean Bool_Loc; +- +- Bool_Loc = Ch_1_Glob == 'A'; +- Bool_Glob = Bool_Loc | Bool_Glob; +- Ch_2_Glob = 'B'; +-} /* Proc_4 */ +- +- +-Proc_5 () /* without parameters */ +-/*******/ +- /* executed once */ +-{ +- Ch_1_Glob = 'A'; +- Bool_Glob = false; +-} /* Proc_5 */ +- +- +- /* Procedure for the assignment of structures, */ +- /* if the C compiler doesn't support this feature */ +-#ifdef NOSTRUCTASSIGN +-memcpy (d, s, l) +-register char *d; +-register char *s; +-register int l; +-{ +- while (l--) *d++ = *s++; +-} +-#endif +- +- +//GO.SYSIN DD dhry_1.c +echo dhry_2.c 1>&2 +sed >dhry_2.c <<'//GO.SYSIN DD dhry_2.c' 's/^-//' +-/* +- **************************************************************************** +- * +- * "DHRYSTONE" Benchmark Program +- * ----------------------------- +- * +- * Version: C, Version 2.1 +- * +- * File: dhry_2.c (part 3 of 3) +- * +- * Date: May 25, 1988 +- * +- * Author: Reinhold P. Weicker +- * +- **************************************************************************** +- */ +- +-#include "dhry.h" +- +-#ifndef REG +-#define REG +- /* REG becomes defined as empty */ +- /* i.e. no register variables */ +-#endif +- +-extern int Int_Glob; +-extern char Ch_1_Glob; +- +- +-Proc_6 (Enum_Val_Par, Enum_Ref_Par) +-/*********************************/ +- /* executed once */ +- /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */ +- +-Enumeration Enum_Val_Par; +-Enumeration *Enum_Ref_Par; +-{ +- *Enum_Ref_Par = Enum_Val_Par; +- if (! Func_3 (Enum_Val_Par)) +- /* then, not executed */ +- *Enum_Ref_Par = Ident_4; +- switch (Enum_Val_Par) +- { +- case Ident_1: +- *Enum_Ref_Par = Ident_1; +- break; +- case Ident_2: +- if (Int_Glob > 100) +- /* then */ +- *Enum_Ref_Par = Ident_1; +- else *Enum_Ref_Par = Ident_4; +- break; +- case Ident_3: /* executed */ +- *Enum_Ref_Par = Ident_2; +- break; +- case Ident_4: break; +- case Ident_5: +- *Enum_Ref_Par = Ident_3; +- break; +- } /* switch */ +-} /* Proc_6 */ +- +- +-Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref) +-/**********************************************/ +- /* executed three times */ +- /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3, */ +- /* Int_Par_Ref becomes 7 */ +- /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */ +- /* Int_Par_Ref becomes 17 */ +- /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */ +- /* Int_Par_Ref becomes 18 */ +-One_Fifty Int_1_Par_Val; +-One_Fifty Int_2_Par_Val; +-One_Fifty *Int_Par_Ref; +-{ +- One_Fifty Int_Loc; +- +- Int_Loc = Int_1_Par_Val + 2; +- *Int_Par_Ref = Int_2_Par_Val + Int_Loc; +-} /* Proc_7 */ +- +- +-Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val) +-/*********************************************************************/ +- /* executed once */ +- /* Int_Par_Val_1 == 3 */ +- /* Int_Par_Val_2 == 7 */ +-Arr_1_Dim Arr_1_Par_Ref; +-Arr_2_Dim Arr_2_Par_Ref; +-int Int_1_Par_Val; +-int Int_2_Par_Val; +-{ +- REG One_Fifty Int_Index; +- REG One_Fifty Int_Loc; +- +- Int_Loc = Int_1_Par_Val + 5; +- Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val; +- Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc]; +- Arr_1_Par_Ref [Int_Loc+30] = Int_Loc; +- for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index) +- Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc; +- Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1; +- Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc]; +- Int_Glob = 5; +-} /* Proc_8 */ +- +- +-Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val) +-/*************************************************/ +- /* executed three times */ +- /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */ +- /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */ +- /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */ +- +-Capital_Letter Ch_1_Par_Val; +-Capital_Letter Ch_2_Par_Val; +-{ +- Capital_Letter Ch_1_Loc; +- Capital_Letter Ch_2_Loc; +- +- Ch_1_Loc = Ch_1_Par_Val; +- Ch_2_Loc = Ch_1_Loc; +- if (Ch_2_Loc != Ch_2_Par_Val) +- /* then, executed */ +- return (Ident_1); +- else /* not executed */ +- { +- Ch_1_Glob = Ch_1_Loc; +- return (Ident_2); +- } +-} /* Func_1 */ +- +- +-Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref) +-/*************************************************/ +- /* executed once */ +- /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */ +- /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */ +- +-Str_30 Str_1_Par_Ref; +-Str_30 Str_2_Par_Ref; +-{ +- REG One_Thirty Int_Loc; +- Capital_Letter Ch_Loc; +- +- Int_Loc = 2; +- while (Int_Loc <= 2) /* loop body executed once */ +- if (Func_1 (Str_1_Par_Ref[Int_Loc], +- Str_2_Par_Ref[Int_Loc+1]) == Ident_1) +- /* then, executed */ +- { +- Ch_Loc = 'A'; +- Int_Loc += 1; +- } /* if, while */ +- if (Ch_Loc >= 'W' && Ch_Loc < 'Z') +- /* then, not executed */ +- Int_Loc = 7; +- if (Ch_Loc == 'R') +- /* then, not executed */ +- return (true); +- else /* executed */ +- { +- if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0) +- /* then, not executed */ +- { +- Int_Loc += 7; +- Int_Glob = Int_Loc; +- return (true); +- } +- else /* executed */ +- return (false); +- } /* if Ch_Loc */ +-} /* Func_2 */ +- +- +-Boolean Func_3 (Enum_Par_Val) +-/***************************/ +- /* executed once */ +- /* Enum_Par_Val == Ident_3 */ +-Enumeration Enum_Par_Val; +-{ +- Enumeration Enum_Loc; +- +- Enum_Loc = Enum_Par_Val; +- if (Enum_Loc == Ident_3) +- /* then, executed */ +- return (true); +- else /* not executed */ +- return (false); +-} /* Func_3 */ +- +//GO.SYSIN DD dhry_2.c +echo dhry_c.dif 1>&2 +sed >dhry_c.dif <<'//GO.SYSIN DD dhry_c.dif' 's/^-//' +-7c7 +-< * Version: C, Version 2.1 +---- +-> * Version: C, Version 2.0 +-9c9 +-< * File: dhry.h (part 1 of 3) +---- +-> * File: dhry_global.h (part 1 of 3) +-11c11 +-< * Date: May 25, 1988 +---- +-> * Date: March 3, 1988 +-30c30 +-< * In addition, Berkeley UNIX system calls "times ()" or "time ()" +---- +-> * In addition, UNIX system calls "times ()" or "time ()" +-44c44 +-< * Please send results to Rick Richardson and/or Reinhold Weicker. +---- +-> * Please send results to Reinhold Weicker and/or Rick Richardson. +-59c59 +-< * History: This version C/2.1 has been made for two reasons: +---- +-> * History: This version C/2.0 has been made for two reasons: +-123,129d122 +-< * Version 2.1 is identical to version 2.0 distributed via +-< * the UNIX network Usenet in March 1988 except that it corrects +-< * some minor deficiencies that were found by users of version 2.0. +-< * The only change within the measurement loop is that a +-< * non-executed "else" part was added to the "if" statement in +-< * Func_3, and a non-executed "else" part removed from Proc_3. +-< * +-165,167c158,160 +-< * -DHZ=nnn +-< * In Berkeley UNIX, the function "times" returns process +-< * time in 1/HZ seconds, with HZ = 60 for most systems. +---- +-> * -DHZ=nnn (default: 60) +-> * The function "times" returns process times in +-> * 1/HZ seconds, with HZ = 60 for most systems. +-169c162 +-< * A VALUE. +---- +-> * THE DEFAULT VALUE. +-176,178c169,171 +-< * - dhry.h (this file, containing global definitions and comments) +-< * - dhry_1.c (containing the code corresponding to Ada package Pack_1) +-< * - dhry_2.c (containing the code corresponding to Ada package Pack_2) +---- +-> * - dhry_global.h (this file, containing global definitions and comments) +-> * - dhry_pack_1.c (containing the code corresponding to Ada package Pack_1) +-> * - dhry_pack_2.c (containing the code corresponding to Ada package Pack_2) +-350a344 +-> #ifndef TIMES +-353,354c347,354 +-< /* Use times(2) time function unless */ +-< /* explicitly defined otherwise */ +---- +-> #endif +-> /* Use "times" function for measurement */ +-> /* unless explicitly defined otherwise */ +-> #ifndef HZ +-> #define HZ 60 +-> #endif +-> /* Use HZ = 60 for "times" function */ +-> /* unless explicitly defined otherwise */ +-363c363 +-< /* Berkeley UNIX C returns process times in seconds/HZ */ +---- +-> /* UNIX C returns process times in seconds/HZ */ +-7c7 +-< * Version: C, Version 2.1 +---- +-> * Version: C, Version 2.0 +-9c9 +-< * File: dhry_1.c (part 2 of 3) +---- +-> * File: dhry_pack_1.c (part 2 of 3) +-11c11 +-< * Date: May 25, 1988 +---- +-> * Date: March 3, 1988 +-18c18 +-< #include "dhry.h" +---- +-> #include "dhry_global.h" +-50,51d49 +-< #define Too_Small_Time 120 +-< /* Measurements should last at least about 2 seconds */ +-55a54,55 +-> #endif +-> +-58d57 +-< #endif +-73a73 +-> +-84a85 +-> +-99,100c100,102 +-< /* Was missing in published program. Without this statement, */ +-< /* Arr_2_Glob [8][7] would have an undefined value. */ +---- +-> /* Was missing in published program. Without this */ +-> /* initialization, Arr_2_Glob [8][7] would have an */ +-> /* undefined value. */ +-105c107 +-< printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); +---- +-> printf ("Dhrystone Benchmark, Version 2.0 (Language: C)\n"); +-281c283 +-< /******************/ +---- +-> /**********************/ +-338c340 +-< /******************/ +---- +-> /**********************/ +-347a350,351 +-> else /* not executed */ +-> Int_Glob = 100; +-349a354 +-> +-7c7 +-< * Version: C, Version 2.1 +---- +-> * Version: C, Version 2.0 +-9c9 +-< * File: dhry_2.c (part 3 of 3) +---- +-> * File: dhry_pack_2.c (part 3 of 3) +-11c11 +-< * Date: May 25, 1988 +---- +-> * Date: March 3, 1988 +-18c18 +-< #include "dhry.h" +---- +-> #include "dhry_global.h" +-189,190d188 +-< else /* not executed */ +-< return (false); +//GO.SYSIN DD dhry_c.dif +echo submit.frm 1>&2 +sed >submit.frm <<'//GO.SYSIN DD submit.frm' 's/^-//' +-DHRYSTONE 2.1 BENCHMARK REPORTING FORM +-MANUF: +-MODEL: +-PROC: +-CLOCK: +-OS: +-OVERSION: +-COMPILER: +-CVERSION: +-OPTIONS: +-NOREG: +-REG: +-NOTES: +-DATE: +-SUBMITTER: +-CODESIZE: +-MAILTO: uunet!pcrat!dry2 +//GO.SYSIN DD submit.frm diff --git a/zpu/roadshow/roadshow/dhrystone/dhry.h b/zpu/roadshow/roadshow/dhrystone/dhry.h new file mode 100644 index 0000000..211c2e2 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry.h @@ -0,0 +1,423 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry.h (part 1 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * Siemens AG, AUT E 51 + * Postfach 3220 + * 8520 Erlangen + * Germany (West) + * Phone: [+49]-9131-7-20330 + * (8-17 Central European Time) + * Usenet: ..!mcsun!unido!estevax!weicker + * + * Original Version (in Ada) published in + * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), + * pp. 1013 - 1030, together with the statistics + * on which the distribution of statements etc. is based. + * + * In this C version, the following C library functions are used: + * - strcpy, strcmp (inside the measurement loop) + * - printf, scanf (outside the measurement loop) + * In addition, Berkeley UNIX system calls "times ()" or "time ()" + * are used for execution time measurement. For measurements + * on other systems, these calls have to be changed. + * + * Collection of Results: + * Reinhold Weicker (address see above) and + * + * Rick Richardson + * PC Research. Inc. + * 94 Apple Orchard Drive + * Tinton Falls, NJ 07724 + * Phone: (201) 389-8963 (9-17 EST) + * Usenet: ...!uunet!pcrat!rick + * + * Please send results to Rick Richardson and/or Reinhold Weicker. + * Complete information should be given on hardware and software used. + * Hardware information includes: Machine type, CPU, type and size + * of caches; for microprocessors: clock frequency, memory speed + * (number of wait states). + * Software information includes: Compiler (and runtime library) + * manufacturer and version, compilation switches, OS version. + * The Operating System version may give an indication about the + * compiler; Dhrystone itself performs no OS calls in the measurement loop. + * + * The complete output generated by the program should be mailed + * such that at least some checks for correctness can be made. + * + *************************************************************************** + * + * History: This version C/2.1 has been made for two reasons: + * + * 1) There is an obvious need for a common C version of + * Dhrystone, since C is at present the most popular system + * programming language for the class of processors + * (microcomputers, minicomputers) where Dhrystone is used most. + * There should be, as far as possible, only one C version of + * Dhrystone such that results can be compared without + * restrictions. In the past, the C versions distributed + * by Rick Richardson (Version 1.1) and by Reinhold Weicker + * had small (though not significant) differences. + * + * 2) As far as it is possible without changes to the Dhrystone + * statistics, optimizing compilers should be prevented from + * removing significant statements. + * + * This C version has been developed in cooperation with + * Rick Richardson (Tinton Falls, NJ), it incorporates many + * ideas from the "Version 1.1" distributed previously by + * him over the UNIX network Usenet. + * I also thank Chaim Benedelac (National Semiconductor), + * David Ditzel (SUN), Earl Killian and John Mashey (MIPS), + * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley) + * for their help with comments on earlier versions of the + * benchmark. + * + * Changes: In the initialization part, this version follows mostly + * Rick Richardson's version distributed via Usenet, not the + * version distributed earlier via floppy disk by Reinhold Weicker. + * As a concession to older compilers, names have been made + * unique within the first 8 characters. + * Inside the measurement loop, this version follows the + * version previously distributed by Reinhold Weicker. + * + * At several places in the benchmark, code has been added, + * but within the measurement loop only in branches that + * are not executed. The intention is that optimizing compilers + * should be prevented from moving code out of the measurement + * loop, or from removing code altogether. Since the statements + * that are executed within the measurement loop have NOT been + * changed, the numbers defining the "Dhrystone distribution" + * (distribution of statements, operand types and locality) + * still hold. Except for sophisticated optimizing compilers, + * execution times for this version should be the same as + * for previous versions. + * + * Since it has proven difficult to subtract the time for the + * measurement loop overhead in a correct way, the loop check + * has been made a part of the benchmark. This does have + * an impact - though a very minor one - on the distribution + * statistics which have been updated for this version. + * + * All changes within the measurement loop are described + * and discussed in the companion paper "Rationale for + * Dhrystone version 2". + * + * Because of the self-imposed limitation that the order and + * distribution of the executed statements should not be + * changed, there are still cases where optimizing compilers + * may not generate code for some statements. To a certain + * degree, this is unavoidable for small synthetic benchmarks. + * Users of the benchmark are advised to check code listings + * whether code is generated for all statements of Dhrystone. + * + * Version 2.1 is identical to version 2.0 distributed via + * the UNIX network Usenet in March 1988 except that it corrects + * some minor deficiencies that were found by users of version 2.0. + * The only change within the measurement loop is that a + * non-executed "else" part was added to the "if" statement in + * Func_3, and a non-executed "else" part removed from Proc_3. + * + *************************************************************************** + * + * Defines: The following "Defines" are possible: + * -DREG=register (default: Not defined) + * As an approximation to what an average C programmer + * might do, the "register" storage class is applied + * (if enabled by -DREG=register) + * - for local variables, if they are used (dynamically) + * five or more times + * - for parameters if they are used (dynamically) + * six or more times + * Note that an optimal "register" strategy is + * compiler-dependent, and that "register" declarations + * do not necessarily lead to faster execution. + * -DNOSTRUCTASSIGN (default: Not defined) + * Define if the C compiler does not support + * assignment of structures. + * -DNOENUMS (default: Not defined) + * Define if the C compiler does not support + * enumeration types. + * -DTIMES (default) + * -DTIME + * The "times" function of UNIX (returning process times) + * or the "time" function (returning wallclock time) + * is used for measurement. + * For single user machines, "time ()" is adequate. For + * multi-user machines where you cannot get single-user + * access, use the "times ()" function. If you have + * neither, use a stopwatch in the dead of night. + * "printf"s are provided marking the points "Start Timer" + * and "Stop Timer". DO NOT use the UNIX "time(1)" + * command, as this will measure the total time to + * run this program, which will (erroneously) include + * the time to allocate storage (malloc) and to perform + * the initialization. + * -DHZ=nnn + * In Berkeley UNIX, the function "times" returns process + * time in 1/HZ seconds, with HZ = 60 for most systems. + * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY + * A VALUE. + * + *************************************************************************** + * + * Compilation model and measurement (IMPORTANT): + * + * This C version of Dhrystone consists of three files: + * - dhry.h (this file, containing global definitions and comments) + * - dhry_1.c (containing the code corresponding to Ada package Pack_1) + * - dhry_2.c (containing the code corresponding to Ada package Pack_2) + * + * The following "ground rules" apply for measurements: + * - Separate compilation + * - No procedure merging + * - Otherwise, compiler optimizations are allowed but should be indicated + * - Default results are those without register declarations + * See the companion paper "Rationale for Dhrystone Version 2" for a more + * detailed discussion of these ground rules. + * + * For 16-Bit processors (e.g. 80186, 80286), times for all compilation + * models ("small", "medium", "large" etc.) should be given if possible, + * together with a definition of these models for the compiler system used. + * + ************************************************************************** + * + * Dhrystone (C version) statistics: + * + * [Comment from the first distribution, updated for version 2. + * Note that because of language differences, the numbers are slightly + * different from the Ada version.] + * + * The following program contains statements of a high level programming + * language (here: C) in a distribution considered representative: + * + * assignments 52 (51.0 %) + * control statements 33 (32.4 %) + * procedure, function calls 17 (16.7 %) + * + * 103 statements are dynamically executed. The program is balanced with + * respect to the three aspects: + * + * - statement type + * - operand type + * - operand locality + * operand global, local, parameter, or constant. + * + * The combination of these three aspects is balanced only approximately. + * + * 1. Statement Type: + * ----------------- number + * + * V1 = V2 9 + * (incl. V1 = F(..) + * V = Constant 12 + * Assignment, 7 + * with array element + * Assignment, 6 + * with record component + * -- + * 34 34 + * + * X = Y +|-|"&&"|"|" Z 5 + * X = Y +|-|"==" Constant 6 + * X = X +|- 1 3 + * X = Y *|/ Z 2 + * X = Expression, 1 + * two operators + * X = Expression, 1 + * three operators + * -- + * 18 18 + * + * if .... 14 + * with "else" 7 + * without "else" 7 + * executed 3 + * not executed 4 + * for ... 7 | counted every time + * while ... 4 | the loop condition + * do ... while 1 | is evaluated + * switch ... 1 + * break 1 + * declaration with 1 + * initialization + * -- + * 34 34 + * + * P (...) procedure call 11 + * user procedure 10 + * library procedure 1 + * X = F (...) + * function call 6 + * user function 5 + * library function 1 + * -- + * 17 17 + * --- + * 103 + * + * The average number of parameters in procedure or function calls + * is 1.82 (not counting the function values as implicit parameters). + * + * + * 2. Operators + * ------------ + * number approximate + * percentage + * + * Arithmetic 32 50.8 + * + * + 21 33.3 + * - 7 11.1 + * * 3 4.8 + * / (int div) 1 1.6 + * + * Comparison 27 42.8 + * + * == 9 14.3 + * /= 4 6.3 + * > 1 1.6 + * < 3 4.8 + * >= 1 1.6 + * <= 9 14.3 + * + * Logic 4 6.3 + * + * && (AND-THEN) 1 1.6 + * | (OR) 1 1.6 + * ! (NOT) 2 3.2 + * + * -- ----- + * 63 100.1 + * + * + * 3. Operand Type (counted once per operand reference): + * --------------- + * number approximate + * percentage + * + * Integer 175 72.3 % + * Character 45 18.6 % + * Pointer 12 5.0 % + * String30 6 2.5 % + * Array 2 0.8 % + * Record 2 0.8 % + * --- ------- + * 242 100.0 % + * + * When there is an access path leading to the final operand (e.g. a record + * component), only the final data type on the access path is counted. + * + * + * 4. Operand Locality: + * ------------------- + * number approximate + * percentage + * + * local variable 114 47.1 % + * global variable 22 9.1 % + * parameter 45 18.6 % + * value 23 9.5 % + * reference 22 9.1 % + * function result 6 2.5 % + * constant 55 22.7 % + * --- ------- + * 242 100.0 % + * + * + * The program does not compute anything meaningful, but it is syntactically + * and semantically correct. All variables have a value assigned to them + * before they are used as a source operand. + * + * There has been no explicit effort to account for the effects of a + * cache, or to balance the use of long or short displacements for code or + * data. + * + *************************************************************************** + */ + +/* Compiler and system dependent definitions: */ + +#ifndef TIME +#define TIMES +#endif + /* Use times(2) time function unless */ + /* explicitly defined otherwise */ + +#ifdef TIMES +#include +#include + /* for "times" */ +#endif + +#define Mic_secs_Per_Second 1000000 + /* Berkeley UNIX C returns process times in seconds/HZ */ + +#ifdef NOSTRUCTASSIGN +#define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) +#else +#define structassign(d, s) d = s +#endif + +#ifdef NOENUM +#define Ident_1 0 +#define Ident_2 1 +#define Ident_3 2 +#define Ident_4 3 +#define Ident_5 4 + typedef int Enumeration; +#else + typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} + Enumeration; +#endif + /* for boolean and enumeration types in Ada, Pascal */ + +/* General definitions: */ + +#include + /* for strcpy, strcmp */ + +#define Null 0 + /* Value of a Null pointer */ +#define true 1 +#define false 0 + +typedef int One_Thirty; +typedef int One_Fifty; +typedef char Capital_Letter; +typedef int Boolean; +typedef char Str_30 [31]; +typedef int Arr_1_Dim [50]; +typedef int Arr_2_Dim [50] [50]; + +typedef struct record + { + struct record *Ptr_Comp; + Enumeration Discr; + union { + struct { + Enumeration Enum_Comp; + int Int_Comp; + char Str_Comp [31]; + } var_1; + struct { + Enumeration E_Comp_2; + char Str_2_Comp [31]; + } var_2; + struct { + char Ch_1_Comp; + char Ch_2_Comp; + } var_3; + } variant; + } Rec_Type, *Rec_Pointer; + + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry_1.c b/zpu/roadshow/roadshow/dhrystone/dhry_1.c new file mode 100644 index 0000000..08a29b9 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry_1.c @@ -0,0 +1,533 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry_1.c (part 2 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * + **************************************************************************** + */ + +#include "dhry.h" +#include + +static int +_cvt(int val, char *buf, int radix, char *digits) +{ + char temp[80]; + char *cp = temp; + int length = 0; + + if (val == 0) { + /* Special case */ + *cp++ = '0'; + } else { + while (val) { + *cp++ = digits[val % radix]; + val /= radix; + } + } + while (cp != temp) { + *buf++ = *--cp; + length++; + } + *buf = '\0'; + return (length); +} + +#define is_digit(c) ((c >= '0') && (c <= '9')) + + +#ifndef TINY +static int +_vprintf(void (*putc)(char c, void **param), void **param, const char *fmt, va_list ap) +{ + char buf[sizeof(long long)*8]; + char c, sign, *cp=buf; + int left_prec, right_prec, zero_fill, pad, pad_on_right, + i, islong, islonglong; + long long val = 0; + int res = 0, length = 0; + + while ((c = *fmt++) != '\0') { + if (c == '%') { + c = *fmt++; + left_prec = right_prec = pad_on_right = islong = islonglong = 0; + sign = '\0'; + // Fetch value [numeric descriptors only] + switch (c) { + case 'd': + val = (long long)va_arg(ap, int); + if ((c == 'd') || (c == 'D')) { + if (val < 0) { + sign = '-'; + val = -val; + } + } else { + // Mask to unsigned, sized quantity + if (islong) { + val &= ((long long)1 << (sizeof(long) * 8)) - 1; + } else{ + val &= ((long long)1 << (sizeof(int) * 8)) - 1; + } + } + break; + default: + break; + } + // Process output + switch (c) { + case 'd': + switch (c) { + case 'd': + length = _cvt(val, buf, 10, "0123456789"); + break; + } + cp = buf; + break; + case 's': + cp = va_arg(ap, char *); + length = 0; + while (cp[length] != '\0') length++; + break; + case 'c': + c = va_arg(ap, int /*char*/); + (*putc)(c, param); + res++; + continue; + default: + (*putc)('%', param); + (*putc)(c, param); + res += 2; + continue; + } + while (length-- > 0) { + c = *cp++; + (*putc)(c, param); + res++; + } + } else { + (*putc)(c, param); + res++; + } + } + return (res); +} +#endif + +// Default wrapper function used by diag_printf +static void +_diag_write_char(char c, void **param) +{ + if (c=='\n') + { + outbyte('\r'); + } + outbyte(c); +} + +int +small_printf(const char *fmt, ...) +{ +#ifndef TINY + va_list ap; + int ret; + + va_start(ap, fmt); + ret = _vprintf(_diag_write_char, (void **)0, fmt, ap); + va_end(ap); + return (ret); +#else + return 0; +#endif +} + + + + +/* Global Variables: */ + +Rec_Pointer Ptr_Glob, + Next_Ptr_Glob; +int Int_Glob; +Boolean Bool_Glob; +char Ch_1_Glob, + Ch_2_Glob; +int Arr_1_Glob [50]; +int Arr_2_Glob [50] [50]; + +Enumeration Func_1 (); + /* forward declaration necessary since Enumeration may not simply be int */ + +#ifndef REG + Boolean Reg = false; +#define REG + /* REG becomes defined as empty */ + /* i.e. no register variables */ +#else + Boolean Reg = true; +#endif + +/* variables for time measurement: */ + +#ifdef TIMES +struct tms time_info; + /* see library function "times" */ +#define Too_Small_Time 120 + /* Measurements should last at least about 2 seconds */ +#endif +#ifdef TIME +extern long time(); + /* see library function "time" */ +#define Too_Small_Time 2 + /* Measurements should last at least 2 seconds */ +#endif + +long long Begin_Time, + End_Time, + User_Time; +long long Microseconds, + Dhrystones_Per_Second, + Vax_Mips; + +/* end of variables for time measurement */ + +int Number_Of_Runs = 50000; + +extern long long _readMicroseconds(); + + +int main () +/*****/ + + /* main program, corresponds to procedures */ + /* Main and Proc_0 in the Ada version */ +{ + One_Fifty Int_1_Loc; + REG One_Fifty Int_2_Loc; + One_Fifty Int_3_Loc; + REG char Ch_Index; + Enumeration Enum_Loc; + Str_30 Str_1_Loc; + Str_30 Str_2_Loc; + REG int Run_Index; + + /* Initializations */ + + Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); + Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); + + Ptr_Glob->Ptr_Comp = Next_Ptr_Glob; + Ptr_Glob->Discr = Ident_1; + Ptr_Glob->variant.var_1.Enum_Comp = Ident_3; + Ptr_Glob->variant.var_1.Int_Comp = 40; + strcpy (Ptr_Glob->variant.var_1.Str_Comp, + "DHRYSTONE PROGRAM, SOME STRING"); + strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); + + Arr_2_Glob [8][7] = 10; + /* Was missing in published program. Without this statement, */ + /* Arr_2_Glob [8][7] would have an undefined value. */ + /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */ + /* overflow may occur for this array element. */ + small_printf ("\n"); + small_printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); + small_printf ("\n"); + if (Reg) + { + small_printf ("Program compiled with 'register' attribute\n"); + small_printf ("\n"); + } + else + { + small_printf ("Program compiled without 'register' attribute\n"); + small_printf ("\n"); + } + Number_Of_Runs; + + small_printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs); + + /***************/ + /* Start timer */ + /***************/ + +#if 0 +#ifdef TIMES + times (&time_info); + Begin_Time = (long) time_info.tms_utime; +#endif +#ifdef TIME + Begin_Time = time ( (long *) 0); +#endif +#else + Begin_Time = _readMicroseconds(); +#endif + for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) + { + + Proc_5(); + Proc_4(); + /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */ + Int_1_Loc = 2; + Int_2_Loc = 3; + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING"); + Enum_Loc = Ident_2; + Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc); + /* Bool_Glob == 1 */ + while (Int_1_Loc < Int_2_Loc) /* loop body executed once */ + { + Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc; + /* Int_3_Loc == 7 */ + Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc); + /* Int_3_Loc == 7 */ + Int_1_Loc += 1; + } /* while */ + /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ + Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc); + /* Int_Glob == 5 */ + Proc_1 (Ptr_Glob); + for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index) + /* loop body executed twice */ + { + if (Enum_Loc == Func_1 (Ch_Index, 'C')) + /* then, not executed */ + { + Proc_6 (Ident_1, &Enum_Loc); + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); + Int_2_Loc = Run_Index; + Int_Glob = Run_Index; + } + } + /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ + Int_2_Loc = Int_2_Loc * Int_1_Loc; + Int_1_Loc = Int_2_Loc / Int_3_Loc; + Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; + /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */ + Proc_2 (&Int_1_Loc); + /* Int_1_Loc == 5 */ + + } /* loop "for Run_Index" */ + + /**************/ + /* Stop timer */ + /**************/ + +#if 0 +#ifdef TIMES + times (&time_info); + End_Time = (long) time_info.tms_utime; +#endif +#ifdef TIME + End_Time = time ( (long *) 0); +#endif +#else + End_Time = _readMicroseconds(); +#endif + + small_printf ("Execution ends\n"); + small_printf ("\n"); + small_printf ("Final values of the variables used in the benchmark:\n"); + small_printf ("\n"); + small_printf ("Int_Glob: %d\n", Int_Glob); + small_printf (" should be: %d\n", 5); + small_printf ("Bool_Glob: %d\n", Bool_Glob); + small_printf (" should be: %d\n", 1); + small_printf ("Ch_1_Glob: %c\n", Ch_1_Glob); + small_printf (" should be: %c\n", 'A'); + small_printf ("Ch_2_Glob: %c\n", Ch_2_Glob); + small_printf (" should be: %c\n", 'B'); + small_printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]); + small_printf (" should be: %d\n", 7); + small_printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]); + small_printf (" should be: Number_Of_Runs + 10\n"); + small_printf ("Ptr_Glob->\n"); + small_printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp); + small_printf (" should be: (implementation-dependent)\n"); + small_printf (" Discr: %d\n", Ptr_Glob->Discr); + small_printf (" should be: %d\n", 0); + small_printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp); + small_printf (" should be: %d\n", 2); + small_printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp); + small_printf (" should be: %d\n", 17); + small_printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp); + small_printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); + small_printf ("Next_Ptr_Glob->\n"); + small_printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp); + small_printf (" should be: (implementation-dependent), same as above\n"); + small_printf (" Discr: %d\n", Next_Ptr_Glob->Discr); + small_printf (" should be: %d\n", 0); + small_printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp); + small_printf (" should be: %d\n", 1); + small_printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp); + small_printf (" should be: %d\n", 18); + small_printf (" Str_Comp: %s\n", + Next_Ptr_Glob->variant.var_1.Str_Comp); + small_printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); + small_printf ("Int_1_Loc: %d\n", Int_1_Loc); + small_printf (" should be: %d\n", 5); + small_printf ("Int_2_Loc: %d\n", Int_2_Loc); + small_printf (" should be: %d\n", 13); + small_printf ("Int_3_Loc: %d\n", Int_3_Loc); + small_printf (" should be: %d\n", 7); + small_printf ("Enum_Loc: %d\n", Enum_Loc); + small_printf (" should be: %d\n", 1); + small_printf ("Str_1_Loc: %s\n", Str_1_Loc); + small_printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n"); + small_printf ("Str_2_Loc: %s\n", Str_2_Loc); + small_printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n"); + small_printf ("\n"); + + User_Time = End_Time - Begin_Time; + small_printf ("User time: %d\n", (int)User_Time); + + if (User_Time < Too_Small_Time) + { + small_printf ("Measured time too small to obtain meaningful results\n"); + small_printf ("Please increase number of runs\n"); + small_printf ("\n"); + } +/* else */ + { +#if 0 +#ifdef TIME + Microseconds = (User_Time * Mic_secs_Per_Second ) + / Number_Of_Runs; + Dhrystones_Per_Second = Number_Of_Runs / User_Time; + Vax_Mips = (Number_Of_Runs*1000) / (1757*User_Time); +#else + Microseconds = (float) User_Time * Mic_secs_Per_Second + / ((float) HZ * ((float) Number_Of_Runs)); + Dhrystones_Per_Second = ((float) HZ * (float) Number_Of_Runs) + / (float) User_Time; + Vax_Mips = Dhrystones_Per_Second / 1757.0; +#endif +#else + Microseconds = User_Time / Number_Of_Runs; + Dhrystones_Per_Second = ((long long)Number_Of_Runs*1000000) / User_Time; + Vax_Mips = (((long long)Number_Of_Runs)*1000000000) / (1757*User_Time); +#endif + small_printf ("Microseconds for one run through Dhrystone: "); + small_printf ("%d \n", (int)Microseconds); + small_printf ("Dhrystones per Second: "); + small_printf ("%d \n", (int)Dhrystones_Per_Second); + small_printf ("VAX MIPS rating * 1000 = %d \n",(int)Vax_Mips); + small_printf ("\n"); + } + + return 0; +} + + +Proc_1 (Ptr_Val_Par) +/******************/ + +REG Rec_Pointer Ptr_Val_Par; + /* executed once */ +{ + REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp; + /* == Ptr_Glob_Next */ + /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */ + /* corresponds to "rename" in Ada, "with" in Pascal */ + + structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); + Ptr_Val_Par->variant.var_1.Int_Comp = 5; + Next_Record->variant.var_1.Int_Comp + = Ptr_Val_Par->variant.var_1.Int_Comp; + Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp; + Proc_3 (&Next_Record->Ptr_Comp); + /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp + == Ptr_Glob->Ptr_Comp */ + if (Next_Record->Discr == Ident_1) + /* then, executed */ + { + Next_Record->variant.var_1.Int_Comp = 6; + Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp, + &Next_Record->variant.var_1.Enum_Comp); + Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp; + Proc_7 (Next_Record->variant.var_1.Int_Comp, 10, + &Next_Record->variant.var_1.Int_Comp); + } + else /* not executed */ + structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp); +} /* Proc_1 */ + + +Proc_2 (Int_Par_Ref) +/******************/ + /* executed once */ + /* *Int_Par_Ref == 1, becomes 4 */ + +One_Fifty *Int_Par_Ref; +{ + One_Fifty Int_Loc; + Enumeration Enum_Loc; + + Int_Loc = *Int_Par_Ref + 10; + do /* executed once */ + if (Ch_1_Glob == 'A') + /* then, executed */ + { + Int_Loc -= 1; + *Int_Par_Ref = Int_Loc - Int_Glob; + Enum_Loc = Ident_1; + } /* if */ + while (Enum_Loc != Ident_1); /* true */ +} /* Proc_2 */ + + +Proc_3 (Ptr_Ref_Par) +/******************/ + /* executed once */ + /* Ptr_Ref_Par becomes Ptr_Glob */ + +Rec_Pointer *Ptr_Ref_Par; + +{ + if (Ptr_Glob != Null) + /* then, executed */ + *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp; + Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp); +} /* Proc_3 */ + + +Proc_4 () /* without parameters */ +/*******/ + /* executed once */ +{ + Boolean Bool_Loc; + + Bool_Loc = Ch_1_Glob == 'A'; + Bool_Glob = Bool_Loc | Bool_Glob; + Ch_2_Glob = 'B'; +} /* Proc_4 */ + + +Proc_5 () /* without parameters */ +/*******/ + /* executed once */ +{ + Ch_1_Glob = 'A'; + Bool_Glob = false; +} /* Proc_5 */ + + + /* Procedure for the assignment of structures, */ + /* if the C compiler doesn't support this feature */ +#ifdef NOSTRUCTASSIGN +memcpy (d, s, l) +register char *d; +register char *s; +register int l; +{ + while (l--) *d++ = *s++; +} +#endif + + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry_2.c b/zpu/roadshow/roadshow/dhrystone/dhry_2.c new file mode 100644 index 0000000..ed0e5b7 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry_2.c @@ -0,0 +1,192 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry_2.c (part 3 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * + **************************************************************************** + */ + +#include "dhry.h" + +#ifndef REG +#define REG + /* REG becomes defined as empty */ + /* i.e. no register variables */ +#endif + +extern int Int_Glob; +extern char Ch_1_Glob; + + +Proc_6 (Enum_Val_Par, Enum_Ref_Par) +/*********************************/ + /* executed once */ + /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */ + +Enumeration Enum_Val_Par; +Enumeration *Enum_Ref_Par; +{ + *Enum_Ref_Par = Enum_Val_Par; + if (! Func_3 (Enum_Val_Par)) + /* then, not executed */ + *Enum_Ref_Par = Ident_4; + switch (Enum_Val_Par) + { + case Ident_1: + *Enum_Ref_Par = Ident_1; + break; + case Ident_2: + if (Int_Glob > 100) + /* then */ + *Enum_Ref_Par = Ident_1; + else *Enum_Ref_Par = Ident_4; + break; + case Ident_3: /* executed */ + *Enum_Ref_Par = Ident_2; + break; + case Ident_4: break; + case Ident_5: + *Enum_Ref_Par = Ident_3; + break; + } /* switch */ +} /* Proc_6 */ + + +Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref) +/**********************************************/ + /* executed three times */ + /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3, */ + /* Int_Par_Ref becomes 7 */ + /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */ + /* Int_Par_Ref becomes 17 */ + /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */ + /* Int_Par_Ref becomes 18 */ +One_Fifty Int_1_Par_Val; +One_Fifty Int_2_Par_Val; +One_Fifty *Int_Par_Ref; +{ + One_Fifty Int_Loc; + + Int_Loc = Int_1_Par_Val + 2; + *Int_Par_Ref = Int_2_Par_Val + Int_Loc; +} /* Proc_7 */ + + +Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val) +/*********************************************************************/ + /* executed once */ + /* Int_Par_Val_1 == 3 */ + /* Int_Par_Val_2 == 7 */ +Arr_1_Dim Arr_1_Par_Ref; +Arr_2_Dim Arr_2_Par_Ref; +int Int_1_Par_Val; +int Int_2_Par_Val; +{ + REG One_Fifty Int_Index; + REG One_Fifty Int_Loc; + + Int_Loc = Int_1_Par_Val + 5; + Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val; + Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc]; + Arr_1_Par_Ref [Int_Loc+30] = Int_Loc; + for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index) + Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc; + Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1; + Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc]; + Int_Glob = 5; +} /* Proc_8 */ + + +Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val) +/*************************************************/ + /* executed three times */ + /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */ + /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */ + /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */ + +Capital_Letter Ch_1_Par_Val; +Capital_Letter Ch_2_Par_Val; +{ + Capital_Letter Ch_1_Loc; + Capital_Letter Ch_2_Loc; + + Ch_1_Loc = Ch_1_Par_Val; + Ch_2_Loc = Ch_1_Loc; + if (Ch_2_Loc != Ch_2_Par_Val) + /* then, executed */ + return (Ident_1); + else /* not executed */ + { + Ch_1_Glob = Ch_1_Loc; + return (Ident_2); + } +} /* Func_1 */ + + +Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref) +/*************************************************/ + /* executed once */ + /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */ + /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */ + +Str_30 Str_1_Par_Ref; +Str_30 Str_2_Par_Ref; +{ + REG One_Thirty Int_Loc; + Capital_Letter Ch_Loc; + + Int_Loc = 2; + while (Int_Loc <= 2) /* loop body executed once */ + if (Func_1 (Str_1_Par_Ref[Int_Loc], + Str_2_Par_Ref[Int_Loc+1]) == Ident_1) + /* then, executed */ + { + Ch_Loc = 'A'; + Int_Loc += 1; + } /* if, while */ + if (Ch_Loc >= 'W' && Ch_Loc < 'Z') + /* then, not executed */ + Int_Loc = 7; + if (Ch_Loc == 'R') + /* then, not executed */ + return (true); + else /* executed */ + { + if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0) + /* then, not executed */ + { + Int_Loc += 7; + Int_Glob = Int_Loc; + return (true); + } + else /* executed */ + return (false); + } /* if Ch_Loc */ +} /* Func_2 */ + + +Boolean Func_3 (Enum_Par_Val) +/***************************/ + /* executed once */ + /* Enum_Par_Val == Ident_3 */ +Enumeration Enum_Par_Val; +{ + Enumeration Enum_Loc; + + Enum_Loc = Enum_Par_Val; + if (Enum_Loc == Ident_3) + /* then, executed */ + return (true); + else /* not executed */ + return (false); +} /* Func_3 */ + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry_c.dif b/zpu/roadshow/roadshow/dhrystone/dhry_c.dif new file mode 100644 index 0000000..8bcaaea --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry_c.dif @@ -0,0 +1,141 @@ +7c7 +< * Version: C, Version 2.1 +--- +> * Version: C, Version 2.0 +9c9 +< * File: dhry.h (part 1 of 3) +--- +> * File: dhry_global.h (part 1 of 3) +11c11 +< * Date: May 25, 1988 +--- +> * Date: March 3, 1988 +30c30 +< * In addition, Berkeley UNIX system calls "times ()" or "time ()" +--- +> * In addition, UNIX system calls "times ()" or "time ()" +44c44 +< * Please send results to Rick Richardson and/or Reinhold Weicker. +--- +> * Please send results to Reinhold Weicker and/or Rick Richardson. +59c59 +< * History: This version C/2.1 has been made for two reasons: +--- +> * History: This version C/2.0 has been made for two reasons: +123,129d122 +< * Version 2.1 is identical to version 2.0 distributed via +< * the UNIX network Usenet in March 1988 except that it corrects +< * some minor deficiencies that were found by users of version 2.0. +< * The only change within the measurement loop is that a +< * non-executed "else" part was added to the "if" statement in +< * Func_3, and a non-executed "else" part removed from Proc_3. +< * +165,167c158,160 +< * -DHZ=nnn +< * In Berkeley UNIX, the function "times" returns process +< * time in 1/HZ seconds, with HZ = 60 for most systems. +--- +> * -DHZ=nnn (default: 60) +> * The function "times" returns process times in +> * 1/HZ seconds, with HZ = 60 for most systems. +169c162 +< * A VALUE. +--- +> * THE DEFAULT VALUE. +176,178c169,171 +< * - dhry.h (this file, containing global definitions and comments) +< * - dhry_1.c (containing the code corresponding to Ada package Pack_1) +< * - dhry_2.c (containing the code corresponding to Ada package Pack_2) +--- +> * - dhry_global.h (this file, containing global definitions and comments) +> * - dhry_pack_1.c (containing the code corresponding to Ada package Pack_1) +> * - dhry_pack_2.c (containing the code corresponding to Ada package Pack_2) +350a344 +> #ifndef TIMES +353,354c347,354 +< /* Use times(2) time function unless */ +< /* explicitly defined otherwise */ +--- +> #endif +> /* Use "times" function for measurement */ +> /* unless explicitly defined otherwise */ +> #ifndef HZ +> #define HZ 60 +> #endif +> /* Use HZ = 60 for "times" function */ +> /* unless explicitly defined otherwise */ +363c363 +< /* Berkeley UNIX C returns process times in seconds/HZ */ +--- +> /* UNIX C returns process times in seconds/HZ */ +7c7 +< * Version: C, Version 2.1 +--- +> * Version: C, Version 2.0 +9c9 +< * File: dhry_1.c (part 2 of 3) +--- +> * File: dhry_pack_1.c (part 2 of 3) +11c11 +< * Date: May 25, 1988 +--- +> * Date: March 3, 1988 +18c18 +< #include "dhry.h" +--- +> #include "dhry_global.h" +50,51d49 +< #define Too_Small_Time 120 +< /* Measurements should last at least about 2 seconds */ +55a54,55 +> #endif +> +58d57 +< #endif +73a73 +> +84a85 +> +99,100c100,102 +< /* Was missing in published program. Without this statement, */ +< /* Arr_2_Glob [8][7] would have an undefined value. */ +--- +> /* Was missing in published program. Without this */ +> /* initialization, Arr_2_Glob [8][7] would have an */ +> /* undefined value. */ +105c107 +< printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); +--- +> printf ("Dhrystone Benchmark, Version 2.0 (Language: C)\n"); +281c283 +< /******************/ +--- +> /**********************/ +338c340 +< /******************/ +--- +> /**********************/ +347a350,351 +> else /* not executed */ +> Int_Glob = 100; +349a354 +> +7c7 +< * Version: C, Version 2.1 +--- +> * Version: C, Version 2.0 +9c9 +< * File: dhry_2.c (part 3 of 3) +--- +> * File: dhry_pack_2.c (part 3 of 3) +11c11 +< * Date: May 25, 1988 +--- +> * Date: March 3, 1988 +18c18 +< #include "dhry.h" +--- +> #include "dhry_global.h" +189,190d188 +< else /* not executed */ +< return (false); diff --git a/zpu/roadshow/roadshow/dhrystone/dhrystone.bin b/zpu/roadshow/roadshow/dhrystone/dhrystone.bin new file mode 100644 index 0000000..ee1a6fe Binary files /dev/null and b/zpu/roadshow/roadshow/dhrystone/dhrystone.bin differ diff --git a/zpu/roadshow/roadshow/dhrystone/dhrystone.zpu b/zpu/roadshow/roadshow/dhrystone/dhrystone.zpu new file mode 100644 index 0000000..e37e59f Binary files /dev/null and b/zpu/roadshow/roadshow/dhrystone/dhrystone.zpu differ diff --git a/zpu/roadshow/roadshow/dhrystone/submit.frm b/zpu/roadshow/roadshow/dhrystone/submit.frm new file mode 100644 index 0000000..a75a689 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/submit.frm @@ -0,0 +1,17 @@ +DHRYSTONE 2.1 BENCHMARK REPORTING FORM +MANUF: +MODEL: +PROC: +CLOCK: +OS: +OVERSION: +COMPILER: +CVERSION: +OPTIONS: +NOREG: +REG: +NOTES: +DATE: +SUBMITTER: +CODESIZE: +MAILTO: uunet!pcrat!dry2 diff --git a/zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm b/zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm new file mode 100644 index 0000000..3631145 --- /dev/null +++ b/zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm @@ -0,0 +1,1049 @@ + + + + + + + + +ZPU vs. ARM non-thumb eCos codesize + + + + + + + + + + +

+ +

ZPU vs. ARM non-thumb eCos codesize

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ZPUARM + non-thumb(eCos Thumb does not compile out of the box)
filenametextdatabssdechexfilenametextdatabssdechexZPU text/ZPU ARM
bin_sem01576115041206029325728dbin_sem0252046921697642872a77863 + %
bin_sem116907151214436328558057bin_sem1266447002209649440c12063 + %
bin_sem21710515243003248661be15bin_sem22699671255584832921455c63 + %
bin_sem31718615121443633134816ebin_sem3270087002210049808c29064 + %
clock018986150012036325227f0aclock0289926881694446624b62065 + %
clock115812150413236305527758clock1254566921953245680b27062 + %
clockcnv25095197213224402919d63clockcnv3457211601952055252d7d473 + %
clocktruth164371500132243116179b9clocktruth262246881950846420b55463 + %
cnt_sem01576215041206029326728ecnt_sem0252046921697642872a77863 + %
cnt_sem117124151214436330728130cnt_sem1268887002210849696c22064 + %
dhrystone3594715642251260023ea77dhrystone44180752274167234811a9c81 + %
except1164281500132283115679b4except1260886881952046296b4d863 + %
flag01575115041205229307727bflag0252366921696842896a79062 + %
flag119145151215624362818db9flag1295327002466854900d67465 + %
fptest2005315161029081244771e63dfptest295087041096521398642225868 + %
intr015998149612092295867392intr0259326841701643632aa7062 + %
kalarm016080149612200297767450kalarm0258246841711243620aa6462 + %
kcache1153271496120362885970bbkcache1247286841695642368a58062 + %
kcache21554914961322430269763dkcache2251686841951245364b13462 + %
kclock018291150012260320517d33kclock0281126881716845968b39065 + %
kclock1162311500132323096378f3kclock1259766881952446188b46c62 + %
kexcept116572149613228312967a40kexcept1263726841951246568b5e863 + %
kflag0156181496120602917471f6kflag0251406841696842792a72862 + %
kflag119287150015624364118e3bkflag1298246882466055172d78465 + %
kill168871516156283403184efkill268967042465652256cc2063 + %
kintr016186149612128298107472kintr0260886841702843800ab1862 + %
klock19724150414516357448ba0klock308126922217653680d1b064 + %
kmbox118283150014592343758647kmbox1285046882226051452c8fc64 + %
kmutex0155391496120642909971abkmutex0249846841698442652a69c62 + %
kmutex11652415041566433692839ckmutex1265046922470451900cabc62 + %
kmutex318272171220348403329d8ckmutex3287929003489264584fc4863 + %
kmutex418682160820352406429ec2kmutex4292647963489664956fdbc64 + %
ksched115619149614412315277b27ksched1252406842208448008bb8862 + %
ksem0155671496120602912371c3ksem0250446841696842696a6c862 + %
ksem117063150014436329998E+08ksem1269886882210049776c27063 + %
kthread015504149613228302287614kthread0250286841951245224b0a862 + %
kthread116167149614412320757d4bkthread1259966842208048760be7862 + %
mbox118281151214580343738645mbox1285527002225251504c93064 + %
mqueue1206111508149403705990c3mqueue1313246962261254632d56866 + %
mutex015672150412064292407238mutex0251086921698042780a71c62 + %
mutex116678151615664338588442mutex1264647042470051868ca9c63 + %
mutex217694150816868360708ce6mutex2276246962728055600d93064 + %
mutex318203172020344402679d4bmutex3285969083488464388fb8464 + %
release16352150814428322887E+20release261566962210048952bf3863 + %
sched115890150014412318027c3asched1254606882208448232bc6862 + %
stress_threads4419616122863323321405116cstress_threads5635682845892103076192a478 + %
sync217891152416864362798db7sync2279007122728855900da5c64 + %
sync316943151215644340998533sync3267607002469252152cbb863 + %
thread01546714961306430027754bthread0249246841935644964afa462 + %
thread116134149614420320507d32thread1258686842208448636bdfc62 + %
thread217560151215636347088794thread2274527002468052832ce6064 + %
thread_gdb1627915002402841807a34fthread_gdb26136688427046952810f9862 + %
timeslice17051150420376389319813timeslice272126923491662820f56463 + %
tm_basic37313151242238046120570995tm_basic527287001233321767602b27871 + %
+ +
+ + + + + + + + diff --git a/zpu/roadshow/roadshow/ecos/index.html b/zpu/roadshow/roadshow/ecos/index.html new file mode 100644 index 0000000..5245459 --- /dev/null +++ b/zpu/roadshow/roadshow/ecos/index.html @@ -0,0 +1,145 @@ + + +

Installing eCos build tools

+ +tar -xjvf ecossnapshot.tar.bz2
+tar -xjvf repository.tar.bz2
+tar -xjvf ecostools.tar.bz2
+# run this every time you open the shell
+export PATH=$PATH:`pwd`/ecos-install
+export ECOS_REPOSITORY=`pwd`/ecos/packages:`pwd`/repository
+
+

Compiling eCos tests

+ +ecosconfig new zeta default
+ecosconfig tree
+make
+cd kernel/current
+make tests
+
+ +

Code size ZPU

+ +$ zpu-elf-size *
+ text data bss dec hex filename
+ 15761 1504 12060 29325 728d bin_sem0
+ 16907 1512 14436 32855 8057 bin_sem1
+ 17105 1524 30032 48661 be15 bin_sem2
+ 17186 1512 14436 33134 816e bin_sem3
+ 18986 1500 12036 32522 7f0a clock0
+ 15812 1504 13236 30552 7758 clock1
+ 25095 1972 13224 40291 9d63 clockcnv
+ 16437 1500 13224 31161 79b9 clocktruth
+ 15762 1504 12060 29326 728e cnt_sem0
+ 17124 1512 14436 33072 8130 cnt_sem1
+ 35947 1564 22512 60023 ea77 dhrystone
+ 16428 1500 13228 31156 79b4 except1
+ 15751 1504 12052 29307 727b flag0
+ 19145 1512 15624 36281 8db9 flag1
+ 20053 1516 102908 124477 1e63d fptest
+ 15998 1496 12092 29586 7392 intr0
+ 16080 1496 12200 29776 7450 kalarm0
+ 15327 1496 12036 28859 70bb kcache1
+ 15549 1496 13224 30269 763d kcache2
+ 18291 1500 12260 32051 7d33 kclock0
+ 16231 1500 13232 30963 78f3 kclock1
+ 16572 1496 13228 31296 7a40 kexcept1
+ 15618 1496 12060 29174 71f6 kflag0
+ 19287 1500 15624 36411 8e3b kflag1
+ 16887 1516 15628 34031 84ef kill
+ 16186 1496 12128 29810 7472 kintr0
+ 19724 1504 14516 35744 8ba0 klock
+ 18283 1500 14592 34375 8647 kmbox1
+ 15539 1496 12064 29099 71ab kmutex0
+ 16524 1504 15664 33692 839c kmutex1
+ 18272 1712 20348 40332 9d8c kmutex3
+ 18682 1608 20352 40642 9ec2 kmutex4
+ 15619 1496 14412 31527 7b27 ksched1
+ 15567 1496 12060 29123 71c3 ksem0
+ 17063 1500 14436 32999 80e7 ksem1
+ 15504 1496 13228 30228 7614 kthread0
+ 16167 1496 14412 32075 7d4b kthread1
+ 18281 1512 14580 34373 8645 mbox1
+ 20611 1508 14940 37059 90c3 mqueue1
+ 15672 1504 12064 29240 7238 mutex0
+ 16678 1516 15664 33858 8442 mutex1
+ 17694 1508 16868 36070 8ce6 mutex2
+ 18203 1720 20344 40267 9d4b mutex3
+ 16352 1508 14428 32288 7e20 release
+ 15890 1500 14412 31802 7c3a sched1
+ 44196 1612 286332 332140 5116c stress_threads
+ 17891 1524 16864 36279 8db7 sync2
+ 16943 1512 15644 34099 8533 sync3
+ 15467 1496 13064 30027 754b thread0
+ 16134 1496 14420 32050 7d32 thread1
+ 17560 1512 15636 34708 8794 thread2
+ 16279 1500 24028 41807 a34f thread_gdb
+ 17051 1504 20376 38931 9813 timeslice
+ 17146 1504 21564 40214 9d16 timeslice2
+ 37313 1512 422380 461205 70995 tm_basic
+
+

Code size ARM (non-thumb)

+Thumb does not compile out of the box w/AT91 EB40a for which this test was made.

+ +$ arm-elf-size *
+ text data bss dec hex filename
+ 25204 692 16976 42872 a778 bin_sem0
+ 26644 700 22096 49440 c120 bin_sem1
+ 26996 712 55584 83292 1455c bin_sem2
+ 27008 700 22100 49808 c290 bin_sem3
+ 28992 688 16944 46624 b620 clock0
+ 25456 692 19532 45680 b270 clock1
+ 34572 1160 19520 55252 d7d4 clockcnv
+ 26224 688 19508 46420 b554 clocktruth
+ 25204 692 16976 42872 a778 cnt_sem0
+ 26888 700 22108 49696 c220 cnt_sem1
+ 44180 752 27416 72348 11a9c dhrystone
+ 26088 688 19520 46296 b4d8 except1
+ 25236 692 16968 42896 a790 flag0
+ 29532 700 24668 54900 d674 flag1
+ 29508 704 109652 139864 22258 fptest
+ 25932 684 17016 43632 aa70 intr0
+ 25824 684 17112 43620 aa64 kalarm0
+ 24728 684 16956 42368 a580 kcache1
+ 25168 684 19512 45364 b134 kcache2
+ 28112 688 17168 45968 b390 kclock0
+ 25976 688 19524 46188 b46c kclock1
+ 26372 684 19512 46568 b5e8 kexcept1
+ 25140 684 16968 42792 a728 kflag0
+ 29824 688 24660 55172 d784 kflag1
+ 26896 704 24656 52256 cc20 kill
+ 26088 684 17028 43800 ab18 kintr0
+ 30812 692 22176 53680 d1b0 klock
+ 28504 688 22260 51452 c8fc kmbox1
+ 24984 684 16984 42652 a69c kmutex0
+ 26504 692 24704 51900 cabc kmutex1
+ 28792 900 34892 64584 fc48 kmutex3
+ 29264 796 34896 64956 fdbc kmutex4
+ 25240 684 22084 48008 bb88 ksched1
+ 25044 684 16968 42696 a6c8 ksem0
+ 26988 688 22100 49776 c270 ksem1
+ 25028 684 19512 45224 b0a8 kthread0
+ 25996 684 22080 48760 be78 kthread1
+ 28552 700 22252 51504 c930 mbox1
+ 31324 696 22612 54632 d568 mqueue1
+ 25108 692 16980 42780 a71c mutex0
+ 26464 704 24700 51868 ca9c mutex1
+ 27624 696 27280 55600 d930 mutex2
+ 28596 908 34884 64388 fb84 mutex3
+ 26156 696 22100 48952 bf38 release
+ 25460 688 22084 48232 bc68 sched1
+ 56356 828 45892 103076 192a4 stress_threads
+ 27900 712 27288 55900 da5c sync2
+ 26760 700 24692 52152 cbb8 sync3
+ 24924 684 19356 44964 afa4 thread0
+ 25868 684 22084 48636 bdfc thread1
+ 27452 700 24680 52832 ce60 thread2
+ 26136 688 42704 69528 10f98 thread_gdb
+ 27212 692 34916 62820 f564 timeslice
+ 52728 700 123332 176760 2b278 tm_basic
+
+ + + + + diff --git a/zpu/roadshow/roadshow/ecos/repository.tar.bz2 b/zpu/roadshow/roadshow/ecos/repository.tar.bz2 new file mode 100644 index 0000000..bc6291f Binary files /dev/null and b/zpu/roadshow/roadshow/ecos/repository.tar.bz2 differ diff --git a/zpu/roadshow/roadshow/games/.cvsignore b/zpu/roadshow/roadshow/games/.cvsignore new file mode 100644 index 0000000..6c50257 --- /dev/null +++ b/zpu/roadshow/roadshow/games/.cvsignore @@ -0,0 +1,5 @@ +summeria_arm.elf +sumeria_zpu.elf +eliza_arm.elf +sumeria.elf +eliza_zpu.elf diff --git a/zpu/roadshow/roadshow/games/build.sh b/zpu/roadshow/roadshow/games/build.sh new file mode 100644 index 0000000..ea661df --- /dev/null +++ b/zpu/roadshow/roadshow/games/build.sh @@ -0,0 +1,7 @@ +zpu-elf-gcc -Os -phi sumeria.c -o sumeria.elf -Wl,--relax -Wl,--gc-sections -lm -g +zpu-elf-objcopy -O binary sumeria.elf sumeria.bin +sh ../build/makefirmware.sh sumeria.bin sumeria.zpu +zpu-elf-gcc -Os -phi eliza/*.c -o eliza.elf -Wl,--relax -Wl,--gc-sections -lm -g +zpu-elf-objcopy -O binary eliza.elf eliza.bin +sh ../build/makefirmware.sh eliza.bin eliza.zpu + diff --git a/zpu/roadshow/roadshow/games/eliza.bin b/zpu/roadshow/roadshow/games/eliza.bin new file mode 100644 index 0000000..6d5a6c3 Binary files /dev/null and b/zpu/roadshow/roadshow/games/eliza.bin differ diff --git a/zpu/roadshow/roadshow/games/eliza.elf b/zpu/roadshow/roadshow/games/eliza.elf new file mode 100644 index 0000000..bfbbab7 Binary files /dev/null and b/zpu/roadshow/roadshow/games/eliza.elf differ diff --git a/zpu/roadshow/roadshow/games/eliza.zpu b/zpu/roadshow/roadshow/games/eliza.zpu new file mode 100644 index 0000000..d916270 Binary files /dev/null and b/zpu/roadshow/roadshow/games/eliza.zpu differ diff --git a/zpu/roadshow/roadshow/games/eliza/eliza.c b/zpu/roadshow/roadshow/games/eliza/eliza.c new file mode 100644 index 0000000..06f89ee --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/eliza.c @@ -0,0 +1,269 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. +*/ + +#include +#include "parse.h" +#include "response.h" + +typedef char WORD[40]; +typedef WORD SENTENCE[200]; + +int numwords; +SENTENCE s; +WORD fam_member; /* If mentioned a member of family, save for later. */ +int fam; + +main() { + int x, y, loop = 1, fact = 0; + char instring[200], outstring[200], sub[200], vrb[200], rst[200], qwd[200]; + char osub[200], ovrb[200], orst[200]; + fam = 0; + printf("Hello there. My name is Eliza and I was written by Mohan Embar.\n"); + printf("Please type \"END\" to end this session.\n"); + printf("I'm here to help you if I can. What seems to be the trouble?\n"); + while (loop) { + printf("\n"); + gets(instring); + printf("\n"); + parse(instring); + if (numwords == 0) { + switch (x = randnum(2)) { + case 1 : printf("Don't you have anything to say?\n"); + break; + case 2 : printf("Cat got your tongue?\n"); + break; + } + continue; + } + if (!strcmp(s[1],"END")) { + printf("Goodbye. Please come again.\n"); + break; + } + agree(); + if (bad_word()) + printf(b_word_resp()); + else if (naughty_word()) + printf(n_word_resp()); + else if (x = family()) { + fam = x; + printf(fam_resp()); + strcpy(fam_member,s[fam]); + } + else if (sword("ALIKE",1)) + printf(alike_resp()); + else if (sword("ALWAYS",1)) + printf(always_resp()); + else if (sword("BECAUSE",1)) + printf(because_resp()); + else if (sword("YES",1)) + printf(yes_resp()); + else if (sword("NO",1) || sword("NOT",1)) + printf(neg_resp()); + else if (x = i_am()) { /* If occurrence of I AM x.. */ + get_til_stop(x,outstring); /* Get I AM x .. into outstring */ + printf(i_am_resp(),outstring); /* Print reponse for this */ + } + else if (real_quest() || + (is_helper(s[1]) && is_sub_pronoun(s[2])) || + sub_and_helper()) { + if (real_quest()) { + strcpy(qwd,s[1]); + strcpy(vrb,s[2]); + strcpy(sub,s[3]); + get_til_stop(4,rst); + } + else if (is_helper(s[1]) && is_sub_pronoun(s[2])) { + strcpy(vrb,s[1]); + strcpy(sub,s[2]); + get_til_stop(3,rst); + strcpy(qwd,"YES"); + } + else if (sub_and_helper()) { + x = find_helper(); + y = search_back_sub(x); + strcpy(vrb,s[x]); + get_til_stop(x+1,rst); + getrange(y,x-1,sub); + strcpy(qwd,"NO"); + } + make_lower(qwd); + if (strcmp(sub,"I")) make_lower(sub); + make_lower(vrb); + make_lower(rst); + /* First do x verb y responses */ + + /* + printf("\n*** %s\n",sub); + */ + + if (!strcmp(sub," I") || !strcmp(sub,"I")) { + printf(you_resp()); + } + else if (!strcmp(qwd,"no")) { + /* Record this statement for later use. */ + fact = 1; + strcpy(osub,sub); strcpy(ovrb,vrb); strcpy(orst,rst); + if (is_be(vrb) && !strcmp(sub," you") && (y = sad_word())) { + getrange(y,y,outstring); + x = randnum(5)+6; + } + else if (is_be(vrb) && (y = sad_word())) { + getrange(y,y,outstring); + x = randnum(2)+11; + } + else if (is_be(vrb)) + x = randnum(6); + else x = randnum(4); + switch (x) { + case 1 : printf("How do you feel about%s?\n",cnnv(sub)); + break; + case 2 : printf("Why %s%s%s?\n",vrb,sub,rst); + break; + case 3 : for (y=1;sub[y]=sub[y--];y=y+2); + sub[0] = toupper(sub[0]); + printf("%s %s%s?\n",sub,vrb,rst); + break; + case 4 : printf("Could you describe%s for me?\n",cnnv(sub)); + break; + case 5 : printf("What if%s were not%s?\n",sub,rst); + break; + case 6 : printf("Would you be happy if%s were not%s?\n",sub, + rst); + break; + case 7 : printf("I'm sorry to hear that you are%s.\n",outstring); + break; + case 8 : printf("Do you think that coming here will help you not to be%s?\n",outstring); + break; + case 9 : printf("Let's talk about why you feel%s.\n",outstring); + break; + case 10 : printf("What happened that made you feel%s?\n",outstring); + break; + case 11 : printf("What could be the reason for your feeling%s?\n",outstring); + break; + case 12 : printf("What could cause%s to be%s?\n",cnnv(sub),outstring); + break; + case 13 : printf("If%s came here, would it help%s not to be%s?\n",sub,cnnv(sub),outstring); + break; + } + } + else if (!strcmp(sub,"you")) + printf(you_know()); + else if (!strcmp(qwd,"yes")) { + x = randnum(8); + switch (x) { + case 1 : printf("You want to know if %s %s%s.\n",sub,vrb,rst); + break; + case 2 : printf("If %s %s%s, does that concern you?\n",sub,vrb,rst); + break; + case 3 : printf("What are the consequences if %s %s%s?\n",sub,vrb,rst); + break; + case 4 : printf("Why does %s concern you?\n",sub); + break; + case 5 : printf("Why are you thinking of %s?\n",cnnv(sub)); + break; + case 6 : printf("Tell me more about %s.\n",cnnv(sub)); + break; + case 7 : printf("To answer that, I'd need to know more about %s.\n",cnnv(sub)); + break; + case 8 : printf("What is the relationship between you and %s?\n",cnnv(sub)); + break; + case 9 : printf("Why don't you ask %s?\n",cnnv(sub)); + break; + } + } + else { + x = randnum(8); + switch (x) { + case 1 : printf("You want to know %s %s %s%s.\n",qwd,sub,vrb,rst); + break; + case 2 : printf("If %s %s%s, does that concern you?\n",sub,vrb,rst); + break; + case 3 : printf("What are the consequences if %s %s%s?\n",sub,vrb,rst); + break; + case 4 : printf("Why does %s concern you?\n",sub); + break; + case 5 : printf("Why are you thinking of %s?\n",cnnv(sub)); + break; + case 6 : printf("Tell me more about %s.\n",cnnv(sub)); + break; + case 7 : printf("To answer that, I'd need to know more about %s.\n",cnnv(sub)); + break; + case 8 : printf("What is the relationship between you and %s?\n",cnnv(sub)); + break; + case 9 : printf("Why don't you ask %s?\n",cnnv(sub)); + break; + } + } + } + else if (is_command()) + printf(command_resp()); + else if (vague_quest()) + printf(question()); + else if ((s[numwords][0] == '?') && !real_quest()) + printf(question()); + else if (x = sad_word()) { + getrange(x,x,outstring); + for (y=1;outstring[y]=outstring[y--];y=y+2); + outstring[0] = toupper(outstring[0]); + printf("%s?\n",outstring); + } + else if (x = can_spit_out()) { + if (x<=(numwords-2) && is_sub_pronoun(s[x]) + && (matches("NEED",s[x+1]) || + matches("WANT",s[x+1]))) { + get_til_stop(x+2,outstring); + strcpy(sub,s[x]); + if (strcmp(sub,"I")) make_lower(sub); + if (strcmp(s[x],"I")) make_lower(s[x]); + x = randnum(6); + switch (x) { + case 1 : printf("What would it mean to %s if %s got%s?\n",cnnv2(s[x]),sub,outstring); + break; + case 2 : printf("Would %s really be happy if %s got%s?\n",sub,sub,outstring); + break; + case 3 : printf("Why is getting%s so desirable?\n",outstring); + break; + case 4 : printf("Okay. Suppose %s got%s. Then what?\n",sub,outstring); + break; + case 5 : printf("Why is this important to %s?\n",cnnv2(sub)); + break; + case 6 : printf("What price would %s pay to achieve this?\n",sub); + break; + } + } + else { + get_til_stop(x,outstring); + outstring[1]=toupper(outstring[1]); + printf("%s.\n",outstring+1); + } + } + else if (fam) { + make_lower(fam_member); + printf(family_resp(),fam_member); + fam = 0; + } + else if (fact && (randnum(5)==3)) { + printf(old_fact(),osub,ovrb,orst); + fact = 0; + } + else { + printf(go_on()); + } + } +} diff --git a/zpu/roadshow/roadshow/games/eliza/parse.c b/zpu/roadshow/roadshow/games/eliza/parse.c new file mode 100644 index 0000000..aba2033 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/parse.c @@ -0,0 +1,719 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. +*/ + +/* Program defined abstract data type called list. A list contains + * character strings each of which has a maximum length of 20 characters. + * + * Operations supported are: + * + * + */ +typedef char WORD[40]; +typedef WORD SENTENCE[200]; + +extern int numwords; +extern SENTENCE s; + +/* Returns upper case value of c */ +char upcase(c) + char c; +{ + if (islower(c)) return toupper(c); else return c; +} + +/* This function converts string1 into lowercase. */ +void make_lower(string1) + char *string1; +{ + char c; + while (c = *string1) *string1++ = tolower(c); +} + +/* Parses words in instring into WORD array s + * Automatically translates n't to not, 're to are + * Stores all letters in uppercase. Sets numwords to number of tokens in + * s. Valid indices are from 1 .. numwords. + */ +void parse(instring) + char *instring; +{ + char c; int i; + int read_word = 0; + int offset = -1; + numwords = 0; + while (c = *instring++) { + switch(c) { + case ' ' : + case '\t' : + read_word = 0; + continue; + case ',' : + case '?' : + case '.' : + case ':' : + case '"' : + s[numwords++][++offset] = '\0'; + read_word = 0; + s[numwords][offset = 0] = c; + break; + case '\'' : + if ((s[numwords][offset] == 'N') && (upcase(*instring) == 'T')) { + s[numwords++][offset]='\0'; + s[numwords][0] = 'N'; + s[numwords][offset = 1] = 'O'; + read_word = 1; + } + else if (upcase(*instring) == 'R') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'A'; + read_word = 1; + } + else if (upcase(*instring) == 'V') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'H'; + s[numwords][++offset] = 'A'; + read_word = 1; + } + else if (upcase(*instring) == 'M') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'A'; + read_word = 1; + } + else if (upcase(*instring) == 'L') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'W'; + s[numwords][++offset] = 'I'; + read_word = 1; + } + else if (upcase(*instring) == 'S') { + s[numwords][offset+1] = '\0'; + if (!strcmp(s[numwords],"HE") || !strcmp(s[numwords],"SHE") + || !strcmp(s[numwords],"IT")) { + s[++numwords][offset = 0] = 'I'; + read_word = 1; + } + else s[numwords][++offset] = '\''; + } + break; + default : + if (isalpha(c)) + if (read_word) { + s[numwords][++offset] = upcase(c); + } + else { + s[numwords++][++offset] = '\0'; + ++read_word; + s[numwords][offset = 0] = upcase(c); + } + else { + read_word = 0; + } + } + } + s[numwords][++offset] = '\0'; + return; +} + +/* Self-explanatory. Used when computer spits back the sentence */ +void agree() +{ + int i; + for(i=1;i<=numwords;i++) { + if (!strcmp(s[i],"I")) { + strcpy(s[i],"YOU"); + } + else if (!strcmp(s[i],"YOU")) { + strcpy(s[i],"I"); + } + else if (!strcmp(s[i],"YOUR")) { + strcpy(s[i],"MY"); + } + else if (!strcmp(s[i],"MY")) { + strcpy(s[i],"YOUR"); + } + else if (!strcmp(s[i],"YOU")) { + strcpy(s[i],"ME"); + } + else if (!strcmp(s[i],"ME")) { + strcpy(s[i],"YOU"); + } + else if (!strcmp(s[i],"MINE")) { + strcpy(s[i],"YOURS"); + } + else if (!strcmp(s[i],"YOURS")) { + strcpy(s[i],"MINE"); + } + else if (!strcmp(s[i],"WE")) { + strcpy(s[i],"YOU"); + } + else if (!strcmp(s[i],"YOURSELF")) { + strcpy(s[i],"MYSELF"); + } + else if (!strcmp(s[i],"MYSELF")) { + strcpy(s[i],"YOURSELF"); + } + else if (!strcmp(s[i],"OURSELVES")) { + strcpy(s[i],"YOURSELVES"); + } + else if (!strcmp(s[i],"OURS")) { + strcpy(s[i],"YOURS"); + } + else if (!strcmp(s[i],"OUR")) { + strcpy(s[i],"YOUR"); + } + } + for (i=1;i<=numwords;i++) { + if (!strcmp(s[i],"AM")) { + strcpy(s[i],"ARE"); + } + else if ( (!strcmp(s[i],"ARE")) && + (((i>0) && (!strcmp(s[i-1],"I"))) || + ((i0) && (!strcmp(s[i-1],"I"))) || + ((i0) && (!strcmp(s[i-1],"YOU"))) || + ((istrlen(string2)) + return 0; + else { /* length(string1)<=length(string2) */ + while (c = *string1++) { + if (c != *string2++) return 0; + } + return 1; + } +} + +/* Search WORD array s for search_string. If exact = 1, enforce exact match. + * Otherwise, return positive match if all characters of search_string match + * the first length(search_string) characters of a WORD in s. Assumes legal + * values for exact are 0 or 1. Returns index of match in s if match, 0 if + * no match. + */ +int sword(s_string, exact) + char *s_string; + int exact; +{ + int i; + for (i=1;i<=numwords;i++) { + if (exact) { + if (!strcmp(s_string,s[i])) return i; + } + else { + if (matches(s_string,s[i])) return i; + } + } + /* No match */ + return 0; +} + +int bad_word() +{ + if (sword("\115\117\124\110\105\122\106\125\103\113",0)) + return 1; + else if (sword("\106\125\103\113",0)) + return 1; + else if (sword("\123\110\111\124",0)) + return 1; + else if (sword("\101\123\123\110\117\114\105",1)) + return 1; + else if (sword("\101\123\123",1)) + return 1; + else return 0; +} + +int naughty_word() +{ + if (sword("DAMN",0)) + return 1; + else if (sword("STUPID",0)) + return 1; + else if (sword("IDIOT",0)) + return 1; + else if (sword("MORON",0)) + return 1; + else if (sword("NUMBSKULL",0)) + return 1; + else if (sword("IMBECILE",0)) + return 1; + else if (sword("OBNOXIOUS",0)) + return 1; + else return 0; +} + +/* Return the index to a form of be or helping verb, if one exists + * Otherwise, return 0. + */ +int find_helper() +{ + int x; + if (x = sword("AM",1)) + return x; + else if (x = sword("IS",1)) + return x; + else if (x = sword("ARE",1)) + return x; + else if (x = sword("WAS",1)) + return x; + else if (x = sword("WERE",1)) + return x; + else if (x = sword("WILL",1)) + return x; + else if (x = sword("DO",1)) + return x; + else if (x = sword("DID",1)) + return x; + else if (x = sword("DOES",1)) + return x; + else if (x = sword("HAVE",1)) + return x; + else if (x = sword("HAD",1)) + return x; + else if (x = sword("HAS",1)) + return x; + else if (x = sword("SHALL",1)) + return x; + else if (x = sword("SHOULD",1)) + return x; + else if (x = sword("CAN",1)) + return x; + else if (x = sword("COULD",1)) + return x; + else if (x = sword("MAY",1)) + return x; + else if (x = sword("MIGHT",1)) + return x; + else return 0; +} + +/* Returns 1 is string1 is pronoun. 0 if not. */ +int is_sub_pronoun(string1) + char *string1; +{ + if (!strcmp("I",string1)) + return 1; + else if (!strcmp("YOU",string1)) + return 1; + else if (!strcmp("WE",string1)) + return 1; + else if (!strcmp("HE",string1)) + return 1; + else if (!strcmp("SHE",string1)) + return 1; + else if (!strcmp("IT",string1)) + return 1; + else if (!strcmp("THEY",string1)) + return 1; + else return 0; +} + +int is_possesive(string1) + char *string1; +{ + if (!strcmp("MY",string1)) + return 1; + else if (!strcmp("YOUR",string1)) + return 1; + else if (!strcmp("OUR",string1)) + return 1; + else if (!strcmp("HIS",string1)) + return 1; + else if (!strcmp("HER",string1)) + return 1; + else if (!strcmp("ITS",string1)) + return 1; + else if (!strcmp("THEIR",string1)) + return 1; + else return 0; +} + +int is_article(string1) + char *string1; +{ + if (!strcmp("A",string1)) + return 1; + else if (!strcmp("AN",string1)) + return 1; + else if (!strcmp("THE",string1)) + return 1; + else return 0; +} + +/* Tries to find reference to a family member */ +int family() +{ + int x; + if (x = sword("MOTHER",1)) + return x; + else if (x = sword("FATHER",1)) + return x; + else if (x = sword("SISTER",1)) + return x; + else if (x = sword("BROTHER",1)) + return x; + else if (x = sword("DAD",1)) + return x; + else if (x = sword("MOM",1)) + return x; + else if (x = sword("UNCLE",1)) + return x; + else if (x = sword("AUNT",1)) + return x; + else if (x = sword("GRANDMOTHER",1)) + return x; + else if (x = sword("GRANDFATHER",1)) + return x; + else if (x = sword("COUSIN",1)) + return x; + else if (x = sword("GRANDMA",1)) + return x; + else if (x = sword("GRANDPA",1)) + return x; + else return 0; +} + +int i_am() +{ + int x, e=1; + while (e) { + for (x=e;x<=numwords;x++) if (!strcmp("I",s[x])) break; + if (x >= numwords) + return 0; + else if (!strcmp("AM",s[x+1])) + return x; + else e = ++x; + } +} + +void get_til_stop(x,string1) + int x; + char *string1; +{ + char c, *temp; + int e = 1; /* Exit test */ + while (e) { + if (x>numwords) { + e--; + *string1 = '\0'; + } + else if (!isalpha(s[x][0])) { + e--; + *string1 = '\0'; + } + else if (!strcmp("AND",s[x]) || !strcmp("OR",s[x]) + || !strcmp("BUT",s[x])) { + e--; + *string1 = '\0'; + } + else { + *string1++ = ' '; + if (!strcmp("I",s[x])) + *string1++ = 'I'; + else { + temp = s[x]; + while (c = *temp++) *string1++ = tolower(c); + } + x++; + } + } + *string1 = '\0'; +} + +int sad_word() +{ + int x; + if (x = sword("DEPRESS",0)) + return x; + else if (x = sword("UNHAPPY",1)) + return x; + else if (x = sword("SAD",1)) + return x; + else if (x = sword("MISERABLE",1)) + return x; + else if (x = sword("AWFUL",1)) + return x; + else if (x = sword("UPSET",1)) + return x; + else if (x = sword("TERRIBLE",1)) + return x; + else return 0; +} + +int search_back_sub(x) + int x; +{ + int y = --x; + while (y) { + if (is_possesive(s[y]) || is_sub_pronoun(s[y]) || is_article(s[y])) + return y; + else + y--; + } + return y; +} + +/* Returns 1 if string is a form of be or helping verb, + * Otherwise, returns 0. + */ +int is_helper(string1) + char *string1; +{ + if (!strcmp(string1,"AM")) + return 1; + else if (!strcmp(string1,"IS")) + return 1; + else if (!strcmp(string1,"ARE")) + return 1; + else if (!strcmp(string1,"WAS")) + return 1; + else if (!strcmp(string1,"WERE")) + return 1; + else if (!strcmp(string1,"WILL")) + return 1; + else if (!strcmp(string1,"DO")) + return 1; + else if (!strcmp(string1,"DID")) + return 1; + else if (!strcmp(string1,"DOES")) + return 1; + else if (!strcmp(string1,"HAVE")) + return 1; + else if (!strcmp(string1,"HAD")) + return 1; + else if (!strcmp(string1,"HAS")) + return 1; + else if (!strcmp(string1,"SHALL")) + return 1; + else if (!strcmp(string1,"SHOULD")) + return 1; + else if (!strcmp(string1,"CAN")) + return 1; + else if (!strcmp(string1,"COULD")) + return 1; + else if (!strcmp(string1,"MAY")) + return 1; + else if (!strcmp(string1,"MIGHT")) + return 1; + else if (matches(string1,"FEEL")) + return 1; + else return 0; +} + +void getrange(y,x,string1) + int y, x; + char *string1; +{ + char c, *temp; + while (y<=x) { + *string1++ = ' '; + if (!strcmp("I",s[y])) + *string1++ = 'I'; + else { + temp = s[y]; + while (c = *temp++) *string1++ = tolower(c); + } + y++; + } + *string1 = '\0'; +} + +/* Returns 1 if s[1] is a command. 0 if not. */ +int is_command() +{ + if (!strcmp("GIVE",s[1])) + return 1; + else if (!strcmp("TELL",s[1])) + return 1; + else if (!strcmp("SHOW",s[1])) + return 1; + else if (!strcmp("EXPLAIN",s[1])) + return 1; + else return 0; +} + +int four_ws() +{ + if (!strcmp(s[1],"WHO")) + return 1; + else if (!strcmp(s[1],"WHAT")) + return 1; + else if (!strcmp(s[1],"WHERE")) + return 1; + else if (!strcmp(s[1],"WHY")) + return 1; + else if (!strcmp(s[1],"WHEN")) + return 1; + else if (!strcmp(s[1],"HOW")) + return 1; + else return 0; +} + +int vague_quest() +{ + return (four_ws() && (!is_helper(s[2]) || !is_sub_pronoun(s[3]))); +} + +int real_quest() +{ + return (four_ws() && is_helper(s[2]) && is_sub_pronoun(s[3])); +} + +int sub_and_helper() +{ + int x; + return ((x = find_helper()) && search_back_sub(x)); +} + +char *cnnv(string1) + char *string1; +{ + if (!strcmp(string1," i")) { + return " myself"; + } + else if (!strcmp(string1," you")) { + return " yourself"; + } + else if (!strcmp(string1," we")) { + return " ourselves"; + } + else if (!strcmp(string1," he")) { + return " him"; + } + else if (!strcmp(string1," she")) { + return " her"; + } + else if (!strcmp(string1," it")) { + return " it"; + } + else if (!strcmp(string1," they")) { + return " them"; + } + if (!strcmp(string1,"i")) { + return "myself"; + } + else if (!strcmp(string1,"you")) { + return "yourself"; + } + else if (!strcmp(string1,"we")) { + return "ourselves"; + } + else if (!strcmp(string1,"he")) { + return "him"; + } + else if (!strcmp(string1,"she")) { + return "her"; + } + else if (!strcmp(string1,"it")) { + return "it"; + } + else if (!strcmp(string1,"they")) { + return "them"; + } + else return string1; +} + +int is_be(string1) + char *string1; +{ + if (!strcmp("am",string1)) + return 1; + else if (!strcmp("is",string1)) + return 1; + else if (!strcmp("are",string1)) + return 1; + else if (!strcmp("was",string1)) + return 1; + else if (!strcmp("were",string1)) + return 1; + else return 0; +} + +int can_spit_out() +{ + int x; + for (x=1;x<=numwords;x++) + if (is_possesive(s[x]) || is_sub_pronoun(s[x]) || is_article(s[x])) + return x; + return 0; +} + +char *cnnv2(string1) + char *string1; +{ + if (!strcmp(string1," i")) { + return " me"; + } + else if (!strcmp(string1," you")) { + return " you"; + } + else if (!strcmp(string1," we")) { + return " us"; + } + else if (!strcmp(string1," he")) { + return " him"; + } + else if (!strcmp(string1," she")) { + return " her"; + } + else if (!strcmp(string1," it")) { + return " it"; + } + else if (!strcmp(string1," they")) { + return " them"; + } + if (!strcmp(string1,"i")) { + return "me"; + } + else if (!strcmp(string1,"you")) { + return "you"; + } + else if (!strcmp(string1,"we")) { + return "us"; + } + else if (!strcmp(string1,"he")) { + return "him"; + } + else if (!strcmp(string1,"she")) { + return "her"; + } + else if (!strcmp(string1,"it")) { + return "it"; + } + else if (!strcmp(string1,"they")) { + return "them"; + } + else return string1; +} diff --git a/zpu/roadshow/roadshow/games/eliza/parse.h b/zpu/roadshow/roadshow/games/eliza/parse.h new file mode 100644 index 0000000..62dc353 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/parse.h @@ -0,0 +1,33 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. +*/ + +extern void parse(); +extern void agree(); +extern int matches(); +extern int sword(); +extern void make_lower(); +extern int i_am(); +extern void get_til_stop(); +extern int sad_word(); +extern int search_back_sub(); +extern int is_helper(); +extern char *cnnv(); +extern int is_be(); +extern int can_spit_out(); +extern char *cnnv2(); diff --git a/zpu/roadshow/roadshow/games/eliza/response.c b/zpu/roadshow/roadshow/games/eliza/response.c new file mode 100644 index 0000000..aa58025 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/response.c @@ -0,0 +1,365 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. +*/ + +#include +#include + +/* This function returns a random number between 1 and arg */ +int randnum(arg) + int arg; +{ + return ( (rand() % arg) + 1 ); +} + +char *question() +{ + int i = randnum(21); + switch (i) { + case 1 : return "Why do you ask?\n"; + case 2 : return "I don't know.\n"; + case 3 : return "I don't think so.\n"; + case 4 : return "Do you think that's relevant?\n"; + case 5 : return "Can you rephrase that?\n"; + case 6 : return "I'm not sure I understand what you want.\n"; + case 7 : return "I don't see what you're asking.\n"; + case 8 : return "What are you asking?\n"; + case 9 : return "What do you mean?\n"; + case 10 : return "What?\n"; + case 11 : return "Are you sure that's what you want to know?\n"; + case 12 : return "Why do you want to know?\n"; + case 13 : return "What's it to you?\n"; + case 14 : return "I don't think that's important.\n"; + case 15 : return "That has little to do with the real issue.\n"; + case 16 : return "What's the significance you your question?\n"; + case 17 : return "Could that question be hiding a deeper intent?\n"; + case 18 : return "I don't see the connection.\n"; + case 19 : return "Why is this important to you?\n"; + case 20 : return "That's not really important.\n"; + case 21 : return "That seems to have little to do with this.\n"; + } +} + +char *b_word_resp() +{ + int i = randnum(20); + switch (i) { + case 1 : return "I don't like your language.\n"; + case 2 : return "Can we please do without the swearing?\n"; + case 3 : return "You should wash your mouth with soap and water\n"; + case 4 : return "Cut that out.\n"; + case 5 : return "Stop swearing please.\n"; + case 6 : return "Hey! Watch your mouth.\n"; + case 7 : return "Will you please stop swearing?\n"; + case 8 : return "I'm going to report you to your manager.\n"; + case 9 : return "Let's try to be civilized about this.\n"; + case 10 : return "We can do without the bad language.\n"; + case 11 : return "Come on. No bad words, please.\n"; + case 12 : return "Can you try to control your bad mouth?\n"; + case 13 : return "I'm starting to get offended by your bad language.\n"; + case 14 : return "Can you please get a grip on yourself?\n"; + case 15 : return "Hey. Calm down, I'm only a computer.\n"; + case 16 : return "Please try to tone your language down.\n"; + case 17 : return "You're beginning to get on my nerves.\n"; + case 18 : return "I don't need this kind of talk.\n"; + case 19 : return "Why are you speaking so basely?\n"; + case 20 : return "Your vocabulary is unbecoming of you.\n"; + } +} + +char *n_word_resp() +{ + int i = randnum(17); + switch (i) { + case 1 : return "I don't like your tone of voice.\n"; + case 2 : return "Don't lose your temper now.\n"; + case 3 : return "That's not a reason to get upset.\n"; + case 4 : return "Is it worth getting angry over?\n"; + case 5 : return "Does that disturb you?\n"; + case 6 : return "Does this trouble you?\n"; + case 7 : return "Why is this making you upset?\n"; + case 8 : return "I don't see why you're getting worked up.\n"; + case 9 : return "Is that really such a big deal?\n"; + case 10 : return "Calm down. Let's discuss this.\n"; + case 11 : return "Hang on a second. Think about what you're saying.\n"; + case 12 : return "Don't you think you're overreacting a bit?\n"; + case 13 : return "I don't see what the big deal is.\n"; + case 14 : return "Take it easy. It's not that bad.\n"; + case 15 : return "Are you getting angry?\n"; + case 16 : return "Why is such a small thing making you upset?\n"; + case 17 : return "I don't see why you're getting annoyed.\n"; + } +} + +char *because_resp() +{ + int i = randnum(12); + switch (i) { + case 1 : return "Is that the real reason?\n"; + case 2 : return "I don't see the connection.\n"; + case 3 : return "What kind of an explanation is that?\n"; + case 4 : return "What does that have to do with it?\n"; + case 5 : return "That justification is a bit shaky to me.\n"; + case 6 : return "I don't see the point.\n"; + case 7 : return "I don't see that as a good reason.\n"; + case 8 : return "Are you happy with that justification?\n"; + case 9 : return "Are you sure?\n"; + case 10 : return "I don't understand.\n"; + case 11 : return "What does one thing have to do with the other?\n"; + case 12 : return "I don't see how that's related.\n"; + } +} + +char *yes_resp() +{ + int i = randnum(21); + switch (i) { + case 1 : return "Are you sure?\n"; + case 2 : return "Are you positive about that?\n"; + case 3 : return "How can you be so sure?\n"; + case 4 : return "Let's not jump to conclusions now.\n"; + case 5 : return "I don't see the connection.\n"; + case 6 : return "Have you considered all the possibilities?\n"; + case 7 : return "I'm still not convinced.\n"; + case 8 : return "Think about what you've just said.\n"; + case 9 : return "What are the implications of this?\n"; + case 10 : return "So what have we concluded?\n"; + case 11 : return "What does this mean?\n"; + case 12 : return "What do you mean?\n"; + case 13 : return "I'm having trouble understanding your argument.\n"; + case 14 : return "I don't see where you're coming from.\n"; + case 15 : return "You think so?\n"; + case 16 : return "Really?\n"; + case 17 : return "Is that right?\n"; + case 18 : return "Oh?\n"; + case 19 : return "Are you certain of this?\n"; + case 20 : return "I read you loud and clear.\n"; + case 21 : return "Yes?\n"; + } +} + +char *neg_resp() +{ + int i = randnum(11); + switch (i) { + case 1 : return "Why not?\n"; + case 2 : return "How come?\n"; + case 3 : return "No?\n"; + case 4 : return "Is there a reason why not?\n"; + case 5 : return "No?\n"; + case 6 : return "Why don't you think so?\n"; + case 7 : return "I don't see why not.\n"; + case 8 : return "What could be the reasons for this?\n"; + case 9 : return "Do you really believe this?\n"; + case 10 : return "You're not sure?\n"; + case 11 : return "That's a rather pessimistic attitude.\n"; + } +} + +char *go_on() +{ + int i = randnum(20); + switch (i) { + case 1 : return "Go on.\n"; + case 2 : return "I see.\n"; + case 3 : return "Keep going.\n"; + case 4 : return "Please continue.\n"; + case 5 : return "I'm listening.\n"; + case 6 : return "Can you elaborate on that?\n"; + case 7 : return "I understand.\n"; + case 8 : return "Oh?\n"; + case 9 : return "Is that right?\n"; + case 10 : return "Really?\n"; + case 11 : return "No, really?\n"; + case 12 : return "That's interesting.\n"; + case 13 : return "I'm finding this very informative.\n"; + case 14 : return "This is all very revealing.\n"; + case 15 : return "Don't hesitate to be honest with me.\n"; + case 16 : return "Don't hold anything back now.\n"; + case 17 : return "That's an interesting observation.\n"; + case 18 : return "I don't understand.\n"; + case 19 : return "I'm starting to get the big picture.\n"; + case 20 : return "And?\n"; + } +} + +char *always_resp() +{ + int i = randnum(10); + switch (i) { + case 1 : return "Can you think of a specific example?\n"; + case 2 : return "When?\n"; + case 3 : return "Really, always?\n"; + case 4 : return "Are you sure you can generalize like that?\n"; + case 5 : return "Isn't that a bit of an oversimplification?\n"; + case 6 : return "Be careful not to jump to conclusions now.\n"; + case 7 : return "All the time?\n"; + case 8 : return "So you're saying that this is happens quite often.\n"; + case 9 : return "Does this happen a lot?\n"; + case 10 : return "On what occassions?\n"; + } +} + +char *alike_resp() +{ + int i = randnum(4); + switch (i) { + case 1 : return "In what way?\n"; + case 2 : return "What resemblance do you see?\n"; + case 3 : return "What similarities are you thinking of?\n"; + case 4 : return "Specifically, what do you mean by this.\n"; + } +} + +char *fam_resp() +{ + int i = randnum(7); + switch (i) { + case 1 : return "Tell me more about your family.\n"; + case 2 : return "Please go on about your family.\n"; + case 3 : return "How was your home life when you were young?\n"; + case 4 : return "How do you get along with your parents?\n"; + case 5 : return "Would you say you have family problems?\n"; + case 6 : return "Your family interests me.\n"; + case 7 : return "Let`s talk some more about your family.\n"; + } +} + +char *family_resp() +{ + int i = randnum(5); + switch (i) { + case 1 : return "Earlier you were speaking of your %s.\n"; + case 2 : return "Tell me more about your %s.\n"; + case 3 : return "Do you think your %s ties into all this?\n"; + case 4 : return "How would your %s feel about this?\n"; + case 5 : return "Does your %s feel the same way?\n"; + } +} + +char *i_am_resp() +{ + int i = randnum(6); + switch (i) { + case 1 : return "Would you like to think that%s?\n"; + case 2 : return "Why do you say that%s?\n"; + case 3 : return "What leads you to believe that%s?\n"; + case 4 : return "What do you mean \"%s\"?\n"; + case 5 : return "You really feel that%s?\n"; + case 6 : return "Would it make you feel better if%s?\n"; + } +} + +char *sad1_word_resp() +{ + int i = randnum(5); + switch (i) { + case 1 : return "I am sorry to hear that%s.\n"; + case 2 : return "What are you going to do about the fact that%s?\n"; + case 3 : return "Why do you think%s?\n"; + case 4 : return "What gives you the impression that%s?\n"; + case 5 : return "Are you sure that%s?\n"; + } +} + +char *sad2_word_resp() +{ + int i = randnum(5); + switch (i) { + case 1 : return "I am sorry to hear that%s are feeling%s.\n"; + case 2 : return "What are you going to do about the fact that%s?\n"; + case 3 : return "Why do you think%s?\n"; + case 4 : return "What gives you the impression that%s?\n"; + case 5 : return "Are you sure that%s?\n"; + } +} + +char *command_resp() +{ + int i = randnum(21); + switch (i) { + case 1 : return "Why do you ask?\n"; + case 2 : return "Why should I?\n"; + case 3 : return "Why do you want me to?\n"; + case 4 : return "Do you think that's relevant?\n"; + case 5 : return "Can you rephrase that?\n"; + case 6 : return "I'm not sure I understand what you want.\n"; + case 7 : return "I don't see what you're asking.\n"; + case 8 : return "What are you asking?\n"; + case 9 : return "What do you mean?\n"; + case 10 : return "What?\n"; + case 11 : return "Are you sure that's what you want to know?\n"; + case 12 : return "Why do you want to know?\n"; + case 13 : return "What's it to you?\n"; + case 14 : return "I don't think that's important.\n"; + case 15 : return "That has little to do with the real issue.\n"; + case 16 : return "What's the significance you your question?\n"; + case 17 : return "Could that question be hiding a deeper intent?\n"; + case 18 : return "If I did that, what would it mean to you?\n"; + case 19 : return "Why is this important to you?\n"; + case 20 : return "That's not really important.\n"; + case 21 : return "That seems to have little to do with this.\n"; + } +} + +char *you_resp() +{ + int i = randnum(9); + switch (i) { + case 1 : return "Let's talk about you, not me.\n"; + case 2 : return "I'm not the one we came here to talk about.\n"; + case 3 : return "I don't find myself that interesting. Let's talk about you.\n"; + case 4 : return "I'd prefer to talk about you, not me.\n"; + case 5 : return "Why are you interested in me?\n"; + case 6 : return "I want to talk about you for a change.\n"; + case 7 : return "I'd rather not talk about myself.\n"; + case 8 : return "Enough about me.\n"; + case 9 : return "Let's talk about something other than myself.\n"; + } +} + +char *you_know() +{ + int i = randnum(13); + switch (i) { + case 1 : return "I don't know. What do you think?\n"; + case 2 : return "You tell me.\n"; + case 3 : return "I think you know the answer to that.\n"; + case 4 : return "Can you tell me?\n"; + case 5 : return "What do you think?\n"; + case 6 : return "Can you answer that yourself?\n"; + case 7 : return "If you give it some thought, you should know.\n"; + case 8 : return "Maybe you already know the answer to that.\n"; + case 9 : return "Perhaps you already know.\n"; + case 10 : return "If we keep talking, maybe we'll find out.\n"; + case 11 : return "Perhaps that will be brought out in this discussion.\n"; + case 12 : return "Let's find the answer out together.\n"; + case 13 : return "I'm sure we can work out the answer to that.\n"; + } +} + +char *old_fact() +{ + int i = randnum(4); + switch (i) { + case 1 : return "Earlier you said that%s %s%s.\n"; + case 2 : return "Could this have anything to do with the fact that%s %s%s?\n"; + case 3 : return "What does that have to do with your saying that%s %s%s?\n"; + case 4 : return "Didn't you just say that%s %s%s?\n"; + } +} diff --git a/zpu/roadshow/roadshow/games/eliza/response.h b/zpu/roadshow/roadshow/games/eliza/response.h new file mode 100644 index 0000000..8cc77e9 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/response.h @@ -0,0 +1,41 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. +*/ + +/* Functions which return responses */ + +/* Generic question */ +char *question(); +char *b_word_resp(); +char *n_word_resp(); +char *because_resp(); +char *yes_resp(); +char *neg_resp(); +char *go_on(); +char *always_resp(); +char *alike_resp(); +char *fam_resp(); +char *family_resp(); +char *i_am_resp(); +char *sad1_word_resp(); +char *sad2_word_resp(); +char *command_resp(); +int randnum(); +char *you_resp(); +char *you_know(); +char *old_fact(); diff --git a/zpu/roadshow/roadshow/games/sumeria.bin b/zpu/roadshow/roadshow/games/sumeria.bin new file mode 100644 index 0000000..04e5751 Binary files /dev/null and b/zpu/roadshow/roadshow/games/sumeria.bin differ diff --git a/zpu/roadshow/roadshow/games/sumeria.c b/zpu/roadshow/roadshow/games/sumeria.c new file mode 100644 index 0000000..7171adf --- /dev/null +++ b/zpu/roadshow/roadshow/games/sumeria.c @@ -0,0 +1,444 @@ +/* Govern ancient Sumeria. Heavily modified by Mike Arnautov 1975. + * Converted from Basic to PR1ME Fortran (mode 32R) MLA 1979. + * Rev.19.1, GGR version 14 Oct 83. MLA + * Converted to ANSI C December 2001. MLA + */ + +#include +#include +#include + +int year_term; +int year_abs; +int percent_starved; +int dead_total; +int starved; +int population; + +char reply [160]; + +void try_again (int reason) +{ + if (reason == 1) + puts ("For the extreme folly of soft - heartedness and"); + if (reason) + { + printf ("%considering ", reason == 3 ? 'C' : 'c'); + puts ("the mess you would leave the city in,"); + puts ("you are hereby commanded to remain in office for"); + puts ("another ten years. May your fate be a lesson and"); + puts ("a warning for generations to come."); + } + else + { + puts ("Hamurabe, you are either a politico-economic genius"); + puts ("or just a lucky bastard. There being but one way to"); + puts ("settle the question, you are hereby requested to stay"); + puts ("in office for another ten years."); + } + year_term = 0; + year_abs--; + percent_starved = starved * 100.0 / population; + dead_total = starved; +} + +float rnd (void) +{ + return ((rand () % 1000) / 1000.0); +} + +int iabs (int value) +{ + return ((value >= 0) ? value : -value); +} + +void terminate (int abort) +{ + if (abort == 2) + { + puts ("For this extreme mismanagement you have been"); + puts ("deposed, flayed alive and publicly beheaded."); + puts ("\nMay Ashtaroth preserve your Ka.\n"); + } + else if (abort == 1) + { + puts ("\nHamurabe: I find myself unable to fulfil your wish."); + puts ("You will have to find yourself another kingdom."); + } + if (abort != 2) + puts ("\nMay Baal be with you.\n"); + exit (0); +} + +void think_again (char *what, int quantity) +{ + if (*what == 'l' || *what == 'g') + printf ("Hamurabe, think again. "); + if (*what == 'l') + printf ("You own %d acres of land.", quantity); + else if (*what == 'g') + printf ("You have only %d bushels of grain.", quantity); + else + printf ("But you only have %d people to tend the fields.", population); + puts (" Now then,"); +} +int query (char *prompt) +{ + while (1) + { + int sign; + int value; + char * cptr; + + printf (prompt); + fgets (reply, sizeof (reply) - 1, stdin); + value = 0; + sign = 1; + cptr = reply; + while (*cptr == ' ' || *cptr == '\t') cptr++; + if (*cptr == '-') + { + cptr++; + sign = -1; + } + if (*cptr == 'q' || *cptr == 'Q') + terminate (1); + while (*cptr && *cptr != '\n') + { + if (*cptr >= '0' && *cptr <= '9') + value = 10 * value + *cptr - '0'; + else if (*cptr == '.') + break; + else if (*cptr != '.') + { + sign = 0; + break; + } + cptr++; + } + if (sign) + return (sign * value); + puts ("Hamurabe, your command has not been understood!"); + } +} + +int main () +{ + int acreage; + int immigration; + int second_term; + int dead_total; + int stores; + int harvest; + int rat_food; + int yield; + int rounded_price; + int sell; + int buy; + int plant; + int food; + int transaction; + int rats; + int plague_deaths; + int survived; + int dead_rats; + int tmp_int; + + float price; + float breadline; + float provisions; + float plague; + float acres_per_head; + float acres_per_init; + float stores_per_head; + float rats_ate; + float rat_log; + float percent_starved; + float tmp_float; + + printf ("[Sumeria (Primos) rev.19.1, GGR (MLA) version 14 Oct 83]\n"); + puts ("[Conversion to ANSI C: MLA, Feb 2002]\n"); + while (1) + { + printf ("Do you know how to play? "); + fgets (reply, sizeof(reply) - 1, stdin); + if (*reply == '\n') break; + *reply += (*reply < 'a') ? 'a' - 'A' : 0; + if (*reply == 'y') break; + if (*reply != 'n' && *reply != 'q') continue; + puts ("\nToo bad!\n"); + break; + } + + srand (time (NULL)); + *(reply + sizeof (reply) - 1) = '\0'; + + puts ("Try your hand at governing ancient Sumeria"); + puts ("for a ten year term of office."); + + second_term = 0; + dead_total = 0; + percent_starved = 0; + year_term = 0; + year_abs = 0; + acres_per_init = 10; + population = 100; + stores = 2800; + harvest = 3000; + rat_food = 200; + yield = 3; + acreage = 1000; + immigration = 5; + transaction = 0; + price = 18 + 6 * rnd (); + breadline = 19 + 4 * rnd (); + provisions = breadline; + rats = 1000; + rat_log = 3; + plague = rnd () / 2; + starved = 0; + +year_term = year_abs = 9; + while (1) + { + + while (1) + { + year_term++; + year_abs++; + putchar ('\n'); + acres_per_head = ((float) acreage) / population; + stores_per_head = ((float) stores) /population; + puts ("Hamurabe: I beg to report to you,"); + printf ("In year %d, ", year_abs); + if (starved > 0) + printf ("%ld", starved); + else + printf ("no"); + printf (" %s starved, %ld came to the city.\n", + starved <= 1 ? "person" : "people", immigration); + if (plague >= 0.85) + printf ("A horrible plague struck! %d people died.\n", + plague_deaths); + printf ("Population is now %ld.\n", population); + printf ("The city owns %ld acres.\n", acreage); + printf ("You harvested %ld bushels per acre.\n", yield); + printf ("Rats ate %ld bushels.\n", rat_food); + printf ("You now have %ld bushels in store.\n\n", stores); + + if (year_term == 11) + break; + rounded_price = price + 0.5; + printf ("Land is trading at %ld bushels per acre.\n\n", rounded_price); + + while (1) + { + buy = query ("How many acres do you wish to buy? "); + if (rounded_price * buy <= stores) + break; + think_again ("grain", stores); + } + if (buy > 0) + { + acreage += + buy; + stores -= rounded_price * buy; + transaction = buy; + } + else + { + while (1) + { + sell = query ("How many acres do you wish to sell? "); + if (sell <= acreage) + break; + think_again ("land", acreage); + } + acreage -= sell; + stores += rounded_price * sell; + transaction = -sell; + } + + putchar ('\n'); + while (1) + { + food = query ("How many bushels do you wish to feed your people? "); + if (food <= stores) + break; + think_again ("grain", stores); + } + stores -= food; + putchar ('\n'); + while (1) + { + plant = query ("How many acres do you wish to plant with seed? "); + if (plant <= acreage && plant <= 2 * stores && + plant <= 10 * population) + break; + if (plant > acreage) + think_again ("land", acreage); + else if (plant > 2 * stores) + think_again ("grain", stores); + else + think_again ("people", population); + } + + stores -= plant / 2; + yield = 4 * rnd() + 1.65; + harvest = plant * yield; + rat_food = 0; + rats_ate = stores * (rat_log - 2.2) / 3.6; + dead_rats = rats - 4 * rats_ate; + rats = 3 * rats; + if (dead_rats > 0) rats = rats - dead_rats; + + if (plague >= 0.3) + { + if (plague >= 0.85) + { + if (plague > 1) plague = 1; + rats = 500 + 5000 * (plague - 0.7); + } + else + rats *= 1.225 - 0.75 * plague; + } + + if (rats < 500) + rats = 500; + rat_food = rats / 4; + if (rats_ate < rat_food) + rat_food = rats_ate; + rat_food *= 7; + if (rat_food <= 20) + rat_food = 20 + 30 * rnd(); + stores += harvest - rat_food; + rat_log = log10 (1.0 * rats); + if (stores + stores <= harvest) + { + rat_food = harvest * (1 + rnd()) / 4.0; + stores = harvest - rat_food; + } + + tmp_int = 100 + iabs (100 - population); + immigration = tmp_int * ((acres_per_head + + stores_per_head - 36) / 250.0 + + (provisions - breadline + 2.5) / 40) + .5; + if (immigration <= 0) + immigration = 5 * rnd() + 1; + survived = food / breadline; + provisions = (1.0 * food) / population; + plague = (2 * rnd() + rat_log - 3) / 3.0; + if (population < survived) + survived = population; + else + { + starved = population - survived; + if (starved >= 0.45 * population) + { + printf ("\nYou starved %d people in one year!\n", starved); + terminate (2); + } + percent_starved = ((year_term - 1) * percent_starved + + 100.0 * starved / population) / year_term; + population = survived; + dead_total += starved; + } + population += immigration; + price = (price + 15 + (stores_per_head - acres_per_head) / 3) / 2 + + transaction / 50 + 3 * rnd() - 2; + if (price <1.0) price = 1.0; + if (plague >= 0.85) + { + plague_deaths = population * (0.429 * plague - 0.164); + population -= plague_deaths; + } + } + + printf ("In your ten year term of office %d people starved.\n", + dead_total); + printf ("You started with %0.2f acres per person and ended\n", + acres_per_init); + acres_per_head = (1.0 * acreage) / population; + acres_per_init = acres_per_head; + printf ("with %0.2f acres per person.\n\n", acres_per_head); + + tmp_float = 10 * acres_per_head / 3; + if (percent_starved > 25) + terminate (2); + if (percent_starved <= 7) + { + try_again (1); + continue; + } + if (tmp_float < 7) + terminate (2); + if (tmp_float > 10) + { + puts ("Your heavy handed performance smacks of Nabuchodonoser"); + puts ("and Asurbanipal II. The surviving populace hates your"); + puts ("guts and your eventual assasination is just a matter of"); + puts ("time."); + terminate (0); + } + puts ("Consequently you have been deposed and disgraced"); + puts ("and only avoided a public punishment because"); + puts ("of mitigating circumstances. While it may be"); + puts ("admitted in private that you had a rotten deal"); + tmp_int = 3 * rnd(); + if (tmp_int == 0) + puts ("try explaining that to a mob looking for scape-goats."); + if (tmp_int == 1) + puts ("history is not interested in such petty excuses."); + if (tmp_int == 2) + { + puts ("you should have considered such occupational hazards"); + puts ("before applying for the job."); + } + terminate (0); + + if (acres_per_head < 7) + { + try_again (1); + continue; + } + if (acres_per_head < 9) + { + puts ("Your performance has been satisfactory and, in the"); + puts ("perspective of history, actually quite good."); + if (rnd() >= 0.5) + { + puts ("You may not be exactly popular, but given a good"); + puts ("body-guard there is nothing to be really worried about."); + } + else + { + puts ("While not exactly loved, you are at least respected."); + puts ("What more can a realistic ruler ask for?"); + } + } + else if (second_term == 0) + + if (second_term == 0) + { + if (stores <= 10 * population) + { + try_again (3); + continue; + } + second_term = 1; + try_again (0); + continue; + } + else + { + puts ("Hamurabe, your name will be remembered through the"); + puts ("ages to come with admiration and respect.\n"); + puts ("(So you did get away with it you lucky sod!)"); + } + if (stores > 10 * population) + terminate (0); + puts ("\n HOWEVER\n\n"); + second_term = 0; + try_again (2); + continue; + } +} diff --git a/zpu/roadshow/roadshow/games/sumeria.zpu b/zpu/roadshow/roadshow/games/sumeria.zpu new file mode 100644 index 0000000..0e6b41d Binary files /dev/null and b/zpu/roadshow/roadshow/games/sumeria.zpu differ diff --git a/zpu/roadshow/roadshow/helloworld/build.sh b/zpu/roadshow/roadshow/helloworld/build.sh new file mode 100644 index 0000000..8069e36 --- /dev/null +++ b/zpu/roadshow/roadshow/helloworld/build.sh @@ -0,0 +1,6 @@ +zpu-elf-gcc test.c -o test.elf -phi +zpu-elf-objcopy -O binary test.elf test.bin +sh ../build/makefirmware.sh ../build/ic300.bit test.zpu test.bin + + + diff --git a/zpu/roadshow/roadshow/helloworld/test.bin b/zpu/roadshow/roadshow/helloworld/test.bin new file mode 100644 index 0000000..540ccaf Binary files /dev/null and b/zpu/roadshow/roadshow/helloworld/test.bin differ diff --git a/zpu/roadshow/roadshow/helloworld/test.c b/zpu/roadshow/roadshow/helloworld/test.c new file mode 100644 index 0000000..8c33640 --- /dev/null +++ b/zpu/roadshow/roadshow/helloworld/test.c @@ -0,0 +1,11 @@ +int main(int argc, char **argv) +{ + for (;;) + { + int c; + printf("Hello world!\n"); + printf("Press any key!\n"); + c=inbyte(); + printf("You pressed (%02x) '%c'\n", c, c); + } +} diff --git a/zpu/roadshow/roadshow/helloworld/test.elf b/zpu/roadshow/roadshow/helloworld/test.elf new file mode 100644 index 0000000..bc362ae Binary files /dev/null and b/zpu/roadshow/roadshow/helloworld/test.elf differ diff --git a/zpu/roadshow/roadshow/helloworld/test.zpu b/zpu/roadshow/roadshow/helloworld/test.zpu new file mode 100644 index 0000000..1bee302 Binary files /dev/null and b/zpu/roadshow/roadshow/helloworld/test.zpu differ diff --git a/zpu/roadshow/roadshow/hwtest/build.sh b/zpu/roadshow/roadshow/hwtest/build.sh new file mode 100644 index 0000000..115b24a --- /dev/null +++ b/zpu/roadshow/roadshow/hwtest/build.sh @@ -0,0 +1,6 @@ +zpu-elf-gcc -nostdlib test.S -o test.elf +zpu-elf-objcopy -O binary test.elf test.bin +sh makefirmware.sh ic300.bit test.zpu test.bin + + + diff --git a/zpu/roadshow/roadshow/hwtest/test.S b/zpu/roadshow/roadshow/hwtest/test.S new file mode 100644 index 0000000..ac13be3 --- /dev/null +++ b/zpu/roadshow/roadshow/hwtest/test.S @@ -0,0 +1,19 @@ +_loop: + im 0x5a ; write Z to UART + nop + im 0x080a000c + store + ; increaase counter + im _test + load + im 1 + add + im _test + store + + + im _loop + poppc ; loop + + .align 4 +_test: .long 1 diff --git a/zpu/roadshow/roadshow/hwtest/test.bin b/zpu/roadshow/roadshow/hwtest/test.bin new file mode 100644 index 0000000..4b593ee Binary files /dev/null and b/zpu/roadshow/roadshow/hwtest/test.bin differ diff --git a/zpu/roadshow/roadshow/hwtest/test.elf b/zpu/roadshow/roadshow/hwtest/test.elf new file mode 100644 index 0000000..a2ccbc1 Binary files /dev/null and b/zpu/roadshow/roadshow/hwtest/test.elf differ diff --git a/zpu/roadshow/roadshow/hwtest/test.zpu b/zpu/roadshow/roadshow/hwtest/test.zpu new file mode 100644 index 0000000..7d8da42 Binary files /dev/null and b/zpu/roadshow/roadshow/hwtest/test.zpu differ diff --git a/zpu/roadshow/roadshow/images/bootloader.phi b/zpu/roadshow/roadshow/images/bootloader.phi new file mode 100644 index 0000000..a0a1918 Binary files /dev/null and b/zpu/roadshow/roadshow/images/bootloader.phi differ diff --git a/zpu/roadshow/roadshow/images/dhrystone.zpu b/zpu/roadshow/roadshow/images/dhrystone.zpu new file mode 100644 index 0000000..e37e59f Binary files /dev/null and b/zpu/roadshow/roadshow/images/dhrystone.zpu differ diff --git a/zpu/roadshow/roadshow/images/eliza.zpu b/zpu/roadshow/roadshow/images/eliza.zpu new file mode 100644 index 0000000..d916270 Binary files /dev/null and b/zpu/roadshow/roadshow/images/eliza.zpu differ diff --git a/zpu/roadshow/roadshow/images/ic300.bit b/zpu/roadshow/roadshow/images/ic300.bit new file mode 100644 index 0000000..cbbc2b6 Binary files /dev/null and b/zpu/roadshow/roadshow/images/ic300.bit differ diff --git a/zpu/roadshow/roadshow/images/net_test.zpu b/zpu/roadshow/roadshow/images/net_test.zpu new file mode 100644 index 0000000..9083cad Binary files /dev/null and b/zpu/roadshow/roadshow/images/net_test.zpu differ diff --git a/zpu/roadshow/roadshow/images/sumeria.zpu b/zpu/roadshow/roadshow/images/sumeria.zpu new file mode 100644 index 0000000..0e6b41d Binary files /dev/null and b/zpu/roadshow/roadshow/images/sumeria.zpu differ diff --git a/zpu/roadshow/roadshow/iss/index.html b/zpu/roadshow/roadshow/iss/index.html new file mode 100644 index 0000000..0b91a6a --- /dev/null +++ b/zpu/roadshow/roadshow/iss/index.html @@ -0,0 +1,14 @@ + + +

ISS test

+
    +
  1. Launch ISS
    +java -Xmx512m -cp simulator.jar com.zylin.zpu.simulator.SimApp 4444 false +
  2. Launch debugger
    +zpu-elf-gdb hello.elf
    +
  3. Connect to ISS
    +target remote localhost:4444 +
+ + + diff --git a/zpu/roadshow/roadshow/iss/simulator.jar b/zpu/roadshow/roadshow/iss/simulator.jar new file mode 100644 index 0000000..8cf63a8 Binary files /dev/null and b/zpu/roadshow/roadshow/iss/simulator.jar differ diff --git a/zpu/roadshow/roadshow/net_test/.cvsignore b/zpu/roadshow/roadshow/net_test/.cvsignore new file mode 100644 index 0000000..66dac94 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/.cvsignore @@ -0,0 +1,8 @@ +output +all.txt +dis.txt +gmon.out +ll.txt +prof.txt +net_test.txt +gmon.sum diff --git a/zpu/roadshow/roadshow/net_test/http_pages.c b/zpu/roadshow/roadshow/net_test/http_pages.c new file mode 100644 index 0000000..437dad8 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/http_pages.c @@ -0,0 +1,206 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static cyg_bool isUnsignedHex(char *string) +{ + int i = 0; + for(i = 0; string[i] != '\0'; i++) + if(!( ('0' <= string[i] && string[i] <= '9') || + ('a' <= string[i] && string[i] <= 'f') || + ('A' <= string[i] && string[i] <= 'F') )) + return 0; + return 1; +} + +static cyg_bool net_test_mac_handler(FILE *client, char *filename, char *formdata, void *arg) +{ + char error_string[50]; + + error_string[0] = '\0'; + + if( formdata != NULL ) + { + char *formlist[1]; + char *mac_string = NULL; + /* Parse the data */ + cyg_formdata_parse( formdata, formlist, 1 ); + mac_string = cyg_formlist_find( formlist, "mac"); + if(mac_string != NULL) + { + + if(!isUnsignedHex(mac_string)) + { + sprintf(error_string, "Please enter digits between 0-9 and a-f"); + } + else if(strlen(mac_string) != 12) + { + sprintf(error_string, "Please enter a 12 digit MAC address"); + } + else + { + char temp = '\0'; + int fd = -1; + cyg_uint8 mac_addr[6]; + error_string[0] = '\0'; + + temp = mac_string[2]; + mac_string[2] = '\0'; + mac_addr[0] = strtol(mac_string, NULL, 16); + mac_string[2] = temp; + + temp = mac_string[4]; + mac_string[4] = '\0'; + mac_addr[1] = strtol(mac_string, NULL, 16); + mac_string[4] = temp; + + temp = mac_string[6]; + mac_string[6] = '\0'; + mac_addr[2] = strtol(mac_string, NULL, 16); + mac_string[6] = temp; + + temp = mac_string[8]; + mac_string[8] = '\0'; + mac_addr[3] = strtol(mac_string, NULL, 16); + mac_string[8] = temp; + + temp = mac_string[10]; + mac_string[10] = '\0'; + mac_addr[4] = strtol(mac_string, NULL, 16); + mac_string[10] = temp; + + temp = mac_string[12]; + mac_string[12] = '\0'; + mac_addr[5] = strtol(mac_string, NULL, 16); + mac_string[12] = temp; + + /*write it to flash*/ + fd = creat("/jffs2/mac", O_TRUNC | O_CREAT); + if(fd < 0) + { + sprintf(error_string, "%n %s", errno, strerror(errno) ); + } + else + { + write(fd, mac_addr, 6); + close(fd); + fd = -1; + //CYGACC_CALL_IF_RESET(); + } + } + } + } + + html_begin(client); + + html_head(client,"Changing MAC Address", ""); + + html_body_begin(client,""); + { + fputs(error_string, client); + fputs("
\n", client); + html_form_begin( client, "/mac", "" ); + { + fputs( "Enter the new mac address in the format xxxxxxxxxxxx ", client ); + html_form_input( client, "mac", "mac", "", ""); + } + html_form_end(client); + } + html_body_end(client); + + html_end(client); + + return 1; +} + +CYG_HTTPD_TABLE_ENTRY( net_test_mac, + "/mac", + net_test_mac_handler, + NULL ); + + +static cyg_bool net_test_ip_handler(FILE *client, char *filename, char *formdata, void *arg) +{ + int fd = -1; + char error_string[50]; + char error_string2[50]; + + error_string[0] = '\0'; + error_string2[0] = '\0'; + if( formdata != NULL ) + { + char *formlist[1]; + char *ip_string = NULL; + /* Parse the data */ + cyg_formdata_parse( formdata, formlist, 1 ); + ip_string = cyg_formlist_find( formlist, "ip"); + if(ip_string != NULL) + { + /*write it to flash*/ + fd = creat("/jffs2/ip", O_TRUNC | O_CREAT); + if(fd < 0) + { + sprintf(error_string, "%n %s", errno, strerror(errno) ); + } + else + { + write(fd, ip_string, strlen(ip_string)); + close(fd); + fd = -1; + } + } + } + html_begin(client); + + html_head(client,"Changing IP Address", ""); + + html_body_begin(client,""); + { + char value[81]; + value[0] = '\0'; + fd = open("/jffs2/ip", O_RDONLY); + if(fd < 0) + { + sprintf(error_string2, "%n %s", errno, strerror(errno) ); + } + else + { + int len = read(fd, value, 80); + value[len] = '\0'; + close(fd); + fd = -1; + } + fputs(error_string, client); + fputs("
\n", client); + fputs(error_string2, client); + fputs("
\n", client); + html_form_begin( client, "/ip", "" ); + { + fputs( "Enter the new address in the following order: IP_mask_broadcast_gateway_server ", client ); + fputs("
\n", client); + html_form_input( client, "ip", "ip", value, ""); + } + html_form_end(client); + } + html_body_end(client); + + html_end(client); + + return 1; +} + +CYG_HTTPD_TABLE_ENTRY( net_test_ip, + "/ip", + net_test_ip_handler, + NULL ); + diff --git a/zpu/roadshow/roadshow/net_test/init.cpp b/zpu/roadshow/roadshow/net_test/init.cpp new file mode 100644 index 0000000..b5805b2 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/init.cpp @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +#if 0 +externC int chdir(const char *); + +/* ================================================================= */ +/* Initialization object + */ + +class NetTestInit +{ +public: + NetTestInit(); +}; + +/* ----------------------------------------------------------------- */ +/* Static initialization object instance. The constructor is + * prioritized to run after any filesystem constructors. + */ +static NetTestInit netTestInitializer CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO_FS + 1); + +/* ----------------------------------------------------------------- */ +/* Constructor, mounts the file system + */ + +NetTestInit::NetTestInit() +{ + int err = 0; + err = mount( "/dev/flash1", "/jffs2", "jffs2" ); + if(err < 0) + { + diag_printf("unable to mount jffs\n"); + } + else + { + diag_printf("mounted jffs\n"); + } + err = mount( "", "/ramfs", "ramfs" ); + if(err < 0) + { + diag_printf("unable to mount ramfs\n"); + } + else + { + diag_printf("mounted ramfs\n"); + } + chdir( "/ramfs" ); +} +#endif diff --git a/zpu/roadshow/roadshow/net_test/makefile b/zpu/roadshow/roadshow/net_test/makefile new file mode 100644 index 0000000..877afab --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/makefile @@ -0,0 +1,41 @@ +PROJECTNAME = net_test +OUT= output +ECOS_DIR=$(OUT)/ecos +INSTALL_DIR=$(ECOS_DIR)/install + +.symbolic: all clean ecos + +all: ecos app + + + +clean: + rm -rf $(OUT)/* + +$(OUT): + mkdir $(OUT) + +$(ECOS_DIR)/ecos.ecc $(INSTALL_DIR)/include/pkgconf/ecos.mak: + mkdir -p $(ECOS_DIR) + cd $(ECOS_DIR) && ecosconfig new zpuetherphi minimal + cd $(ECOS_DIR) && ecosconfig import ../../$(PROJECTNAME).ecm + cd $(ECOS_DIR) && ecosconfig tree + cd $(ECOS_DIR) && make -s headers + +$(OUT)/ecostree: $(ECOS_DIR)/ecos.ecc + cd $(ECOS_DIR) && ecosconfig tree + echo >$(OUT)/ecostree + +ecos $(INSTALL_DIR)/lib/libtarget.a $(INSTALL_DIR)/lib/vectors.o: $(OUT)/ecostree + cd $(ECOS_DIR) && make -s + +app: + make -f $(INSTALL_DIR)/include/pkgconf/ecos.mak -f makefile $(OUT)/$(PROJECTNAME).bin + +$(OUT)/$(PROJECTNAME).bin: *.c makefile + zpu-elf-gcc -I$(INSTALL_DIR)/include $(ECOS_GLOBAL_CFLAGS) $(ECOS_GLOBAL_LDFLAGS) -L$(INSTALL_DIR)/lib *.c* -o $(OUT)/$(PROJECTNAME).elf -Wl,-Map,$(OUT)/$(PROJECTNAME).map -nostartfiles -nostdlib -Ttarget.ld -lstdc++ -lsupc++ + zpu-elf-objcopy -O binary $(OUT)/$(PROJECTNAME).elf $(OUT)/$(PROJECTNAME).bin + sh ../build/makefirmware.sh $(OUT)/$(PROJECTNAME).bin $(OUT)/$(PROJECTNAME).zpu + zpu-elf-size $(OUT)/$(PROJECTNAME).elf + + \ No newline at end of file diff --git a/zpu/roadshow/roadshow/net_test/net_test.ecm b/zpu/roadshow/roadshow/net_test/net_test.ecm new file mode 100644 index 0000000..5b32991 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/net_test.ecm @@ -0,0 +1,237 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware zpuetherphi ; + template default ; + package -hardware CYGPKG_HAL_ZYLIN current ; + package -hardware CYGPKG_HAL_ZYLIN_ZPU current ; + package -hardware CYGPKG_HAL_ZYLIN_ZPU_PHI current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC current ; + package -hardware CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_IO current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_ERROR current ; + package -template CYGPKG_ISOINFRA current ; + package -template CYGPKG_IO_SERIAL current ; + package -template CYGPKG_KERNEL current ; + package -template CYGPKG_MEMALLOC current ; + package -template CYGPKG_LIBC current ; + package -template CYGPKG_LIBC_I18N current ; + package -template CYGPKG_LIBC_SETJMP current ; + package -template CYGPKG_LIBC_SIGNALS current ; + package -template CYGPKG_LIBC_STARTUP current ; + package -template CYGPKG_LIBC_STDIO current ; + package -template CYGPKG_LIBC_STDLIB current ; + package -template CYGPKG_LIBC_STRING current ; + package -template CYGPKG_LIBC_TIME current ; + package -template CYGPKG_LIBM current ; + package -template CYGPKG_IO_WALLCLOCK current ; + package CYGPKG_NET_FREEBSD_STACK current ; + package CYGPKG_IO_FILEIO current ; + package CYGPKG_NET current ; + package CYGPKG_HTTPD current ; +}; + +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + inferred_value 0 +}; + +cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_TxNUM { + user_value 4 +}; + +cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_RxNUM { + user_value 32 +}; + +cdl_option CYGSEM_ERROR_PER_THREAD_ERRNO { + inferred_value 0 +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEPOS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_FNMATCH_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + inferred_value 1 +}; + +cdl_option CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT { + inferred_value 0 +}; + +cdl_option CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE { + user_value 16384 +}; + +cdl_option CYGPKG_NET_TFTPD_THREAD_STACK_SIZE { + user_value (CYGNUM_HAL_STACK_SIZE_TYPICAL+(8192)) +}; + +cdl_component CYGPKG_NET_DHCP { + user_value 0 +}; + +cdl_component CYGHWR_NET_DRIVER_ETH0_MANUAL { + inferred_value 0 +}; + +cdl_component CYGHWR_NET_DRIVER_ETH0_BOOTP { + user_value 0 +}; + +cdl_component CYGHWR_NET_DRIVER_ETH0_ADDRS { + user_value 1 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_IP { + user_value 10.0.0.57 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_BROADCAST { + user_value 10.0.0.255 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_GATEWAY { + user_value 10.0.0.1 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_SERVER { + user_value 10.0.0.58 +}; + + diff --git a/zpu/roadshow/roadshow/net_test/ping_test.c b/zpu/roadshow/roadshow/net_test/ping_test.c new file mode 100644 index 0000000..7a3ce59 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/ping_test.c @@ -0,0 +1,585 @@ +//========================================================================== +// +// tests/ping_test.c +// +// Simple test of PING (ICMP) and networking support +// +//========================================================================== +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, andrew.lunn@ascom.ch +// Date: 2000-01-10 +// Purpose: +// Description: +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +// PING test code + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include CYGDAT_DEVS_ETH_OPENCORES_ETHERMAC_CFG + +#ifdef CYGBLD_DEVS_ETH_DEVICE_H // Get the device config if it exists +#include CYGBLD_DEVS_ETH_DEVICE_H // May provide CYGTST_DEVS_ETH_TEST_NET_REALTIME +#endif + +#ifdef CYGPKG_NET_TESTS_USE_RT_TEST_HARNESS // do we use the rt test? +# ifdef CYGTST_DEVS_ETH_TEST_NET_REALTIME // Get the test ancilla if it exists +# include CYGTST_DEVS_ETH_TEST_NET_REALTIME +# endif +#endif + +// Fill in the blanks if necessary +#ifndef TNR_OFF +# define TNR_OFF() +#endif +#ifndef TNR_ON +# define TNR_ON() +#endif +#ifndef TNR_INIT +# define TNR_INIT() +#endif +#ifndef TNR_PRINT_ACTIVITY +# define TNR_PRINT_ACTIVITY() +#endif + +#include + +#include +#include + +#include //directory +#include + +//for serial +cyg_io_handle_t handle; +extern int inet_aton __P((const char *, struct in_addr *)); +#ifndef CYGPKG_LIBC_STDIO +#define perror(s) diag_printf(#s ": %s\n", strerror(errno)) +#endif +#define SHOW_RESULT( _fn, _res ) \ +diag_printf(": " #_fn "() returned %ld %s\n", (long)_res, _res<0?strerror(errno):""); + +/* +#define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL + 0x1000) +static char stack[STACK_SIZE]; +static cyg_thread thread_data; +static cyg_handle_t thread_handle; +*/ + + +/* NB!!! must be divisible by 8 */ +#define NUM_PINGS 8192 +#define MAX_PACKET 16384 +#define MIN_PACKET 64 +#define MAX_SEND (IP_MAXPACKET - 100) + +#define PACKET_ADD ((MAX_SEND - MIN_PACKET)/NUM_PINGS) +#define nPACKET_ADD 1 + +static unsigned char pkt1[MAX_PACKET], pkt2[MAX_PACKET]; + +#define UNIQUEID 0x1234 +/* we write this much to jffs2 in each go. + * + * DANGER!!! JFFS2 memory consumption is proportional to the # of write operations, + * so reducing this size will make the bootloader run out of memory. + */ +#define IOSIZE 16384 +void +pexit(char *s) +{ + CYG_TEST_FAIL_FINISH(s); +} + +// Compute INET checksum +int +inet_cksum(u_short *addr, int len) +{ + register int nleft = len; + register u_short *w = addr; + register u_short answer; + register u_int sum = 0; + u_short odd_byte = 0; + + /* + * Our algorithm is simple, using a 32 bit accumulator (sum), + * we add sequential 16 bit words to it, and at the end, fold + * back all the carry bits from the top 16 bits into the lower + * 16 bits. + */ + while( nleft > 1 ) { + cyg_uint32 t=*w++; + sum += t; + nleft -= 2; + } + + /* mop up an odd byte, if necessary */ + if( nleft == 1 ) { + *(u_char *)(&odd_byte) = *(u_char *)w; + sum += odd_byte; + } + + /* + * add back carry outs from top 16 bits to low 16 bits + */ + sum = (sum >> 16) + (sum & 0x0000ffff); /* add hi 16 to low 16 */ + sum += (sum >> 16); /* add carry */ + answer = ~sum; /* truncate to 16 bits */ + return (answer); +} + +static int +show_icmp(unsigned char *pkt, int len, + struct sockaddr_in *from, struct sockaddr_in *to) +{ + char buffer[100]; + cyg_uint32 buffer_index = 0; + cyg_tick_count_t tp, tv; + struct ip *ip; + struct icmp *icmp; + tv = cyg_current_time(); + ip = (struct ip *)pkt; + if ((len < (int)sizeof(*ip)) || ip->ip_v != IPVERSION) + { + buffer[0] = '\0'; + snprintf(buffer, 99, "%s: Short packet or not IP! - Len: %d, Version: %d\r\n", + inet_ntoa(from->sin_addr), len, ip->ip_v); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + return 0; + } + icmp = (struct icmp *)(pkt + sizeof(*ip)); + len -= (sizeof(*ip) + 8); + tp = *((cyg_tick_count_t *)&icmp->icmp_data); + if (icmp->icmp_type != ICMP_ECHOREPLY) + { + buffer[0] = '\0'; + snprintf(buffer, 99, "%s: Invalid ICMP - type: %d\r\n", + inet_ntoa(from->sin_addr), icmp->icmp_type); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + return 0; + } + if (icmp->icmp_id != UNIQUEID) + { + buffer[0] = '\0'; + snprintf(buffer, 99, "%s: ICMP received for wrong id - sent: %x, recvd: %x\r\n", + inet_ntoa(from->sin_addr), UNIQUEID, icmp->icmp_id); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + } +// printf("%d bytes from %s: ", len, inet_ntoa(from->sin_addr)); +// printf("icmp_seq=%d", icmp->icmp_seq); + int t=(int)(tv-tp); + t*=10; +// printf(", time=%d ms\n", t); + return (from->sin_addr.s_addr == to->sin_addr.s_addr); +} + +static void +ping_host(int s, struct sockaddr_in *host) +{ + char buffer[100]; + cyg_uint32 buffer_index = 0; + struct icmp *icmp = (struct icmp *)pkt1; + int icmp_len = MIN_PACKET; + int seq = 0, ok_recv = 0, bogus_recv = 0; + cyg_tick_count_t *tp; + long *dp; + struct sockaddr_in from; + int len; + socklen_t fromlen; + + ok_recv = 0; + bogus_recv = 0; + snprintf(buffer, 99, "PING server %s\r\n", inet_ntoa(host->sin_addr)); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + + + for (seq = 0; seq < NUM_PINGS; seq++, icmp_len += PACKET_ADD ) + { + cyg_thread_delay(50); + TNR_ON(); + + memset(pkt1, 0, sizeof(pkt1)); // make sure we start each time w/same situation... + // Build ICMP packet + icmp->icmp_type = ICMP_ECHO; + icmp->icmp_code = 0; + icmp->icmp_cksum = 0; + icmp->icmp_seq = seq; + icmp->icmp_id = 0x1234; + // Set up ping data + tp = (cyg_tick_count_t *)&icmp->icmp_data; + memset(tp, 0xff, icmp_len); // try to fish out bit 1 force to 0. + *tp++ = cyg_current_time(); + tp++; + dp = (long *)tp; + + // Add checksum + icmp->icmp_cksum = inet_cksum( (u_short *)icmp, icmp_len+8); + // Send it off + if (sendto(s, icmp, icmp_len+8, 0, (struct sockaddr *)host, sizeof(*host)) < 0) { + TNR_OFF(); + perror("sendto"); + continue; + } + // Wait for a response + fromlen = sizeof(from); + len = recvfrom(s, pkt2, sizeof(pkt2), 0, (struct sockaddr *)&from, &fromlen); + TNR_OFF(); + if (len < 0) { + perror("recvfrom"); + inet_cksum( (u_short *)icmp, icmp_len+8); + icmp_len = MIN_PACKET - PACKET_ADD; // just in case - long routes + } else { + if (show_icmp(pkt2, len, &from, host)) { + ok_recv++; + } else { + bogus_recv++; + } + } + } + TNR_OFF(); + snprintf(buffer, 99, "Sent %d packets, received %d OK, %d bad\r\n", NUM_PINGS, ok_recv, bogus_recv); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); +} + +#ifdef CYGPKG_PROFILE_GPROF +#include + +extern char _stext, _etext; // Defined by the linker + +static void +start_profile(void) +{ + // This starts up the system-wide profiling, gathering + // profile information on all of the code, with a 16 byte + // "bucket" size, at a rate of 100us/profile hit. + // Note: a bucket size of 16 will give pretty good function + // resolution. Much smaller and the buffer becomes + // much too large for very little gain. + // Note: a timer period of 100us is also a reasonable + // compromise. Any smaller and the overhead of + // handling the timter (profile) interrupt could + // swamp the system. A fast processor might get + // by with a smaller value, but a slow one could + // even be swamped by this value. If the value is + // too large, the usefulness of the profile is reduced. + + // no more interrupts than 1/10ms. + //profile_on(&_stext, &_etext, 16, 10000); // DRAM + //profile_on((void *)0x2000000, (void *)0x4000000, 32, 10000); // DRAM + //profile_on((void *)0, (void *)0x40000, 16, 10000); // SRAM + //profile_on(0, &_etext, 32, 10000); // SRAM & DRAM +} +#endif + +static void +ping_test(struct bootp *bp) +{ + struct protoent *p; + struct timeval tv; + struct sockaddr_in host; + int s; + + p = getprotobyname("icmp"); + if (p == NULL) + { + pexit("getprotobyname"); + return; + } + s = socket(AF_INET, SOCK_RAW, p->p_proto); + if (s < 0) { + pexit("socket"); + return; + } + tv.tv_sec = 4; + tv.tv_usec = 0; + setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + + // default is 8192 bytes which is not big enough for our ping tests... + int sndsize=70000; + setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&sndsize, + (int)sizeof(sndsize)); + sndsize=70000; + setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&sndsize, + (int)sizeof(sndsize)); + + // Set up host address + host.sin_family = AF_INET; + host.sin_len = sizeof(host); + inet_aton("10.0.0.9", &(host.sin_addr)); // edgarpc dev machine +// inet_aton("10.0.0.1", &host.sin_addr); // cisco router + host.sin_port = 0; + ping_host(s, &host); +} + +void done_test() +{ +} + +void +net_test(void) +{ + + Cyg_ErrNo err; + diag_printf("Start PING test\r\n"); + TNR_INIT(); + + err = cyg_io_lookup("/dev/ser0", &handle); + if(err != ENOERR) + { + diag_printf("cannot open serial /dev/ser0"); + return; + } + printf("Testing stdout...\r\n"); + +#ifdef CYGHWR_NET_DRIVER_ETH0 + if (eth0_up) { + ping_test(ð0_bootp_data); + } +#endif +#ifdef CYGHWR_NET_DRIVER_ETH1 + if (eth1_up) { + ping_test(ð1_bootp_data); + } +#endif + TNR_PRINT_ACTIVITY(); + CYG_TEST_PASS_FINISH("Ping test OK"); + done_test(); +} + + +int getFileName(const char *extension, char *fileName) +{ + int found = 0; + DIR* ramfs = opendir("/ramfs"); + if(ramfs == NULL) + { + diag_printf("cannot open /ramfs\n"); + return found; + } + while(1) + { + struct dirent *entry = readdir( ramfs ); + int len = 0; + if( entry == NULL ) + break; + len = strlen(entry->d_name); + if(len > 4 && entry->d_name[len - 4] == '.' && + entry->d_name[len - 3] == 'p' && + entry->d_name[len - 2] == 'h' && + entry->d_name[len - 1] == 'i') + { + found = 1; + strcpy(fileName, "/ramfs/"); + strcat(fileName, entry->d_name); + } + } + closedir(ramfs); + ramfs = NULL; + return found; +} + +static char buf[IOSIZE]; + +static int copyfile( char *name2, char *name1 ) +{ + + int err = 0; + int fd1 = -1, fd2 = -1; + ssize_t done = 0, wrote = 0, current = 0; + + diag_printf(" copy file %s -> %s\n",name2,name1); + + fd1 = creat(name1, O_TRUNC | O_CREAT); + if( fd1 < 0 ) + { + SHOW_RESULT( creat, fd1 ); + diag_printf(" %s", name1); + return -1; + } + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) + { + SHOW_RESULT( open, fd2 ); + diag_printf(" %s", name2); + return -1; + } + + for(;;) + { + done = read( fd2, buf, IOSIZE ); + if( done < 0 ) + { + SHOW_RESULT( read, done ); + return -1; + } + + if( done == 0 ) break; + + wrote = write( fd1, buf, done ); + if( wrote != done ) + { + SHOW_RESULT( write, wrote ); + return -1; + } + + current += wrote; + if( wrote != done ) break; + } + diag_printf("wrote %d\n", current); + err = close( fd1 ); + if( err < 0 ) + { + SHOW_RESULT( close, err ); + diag_printf(" %s", name1); + return -1; + } + + err = close( fd2 ); + if( err < 0 ) + { + SHOW_RESULT( close, err ); + diag_printf(" %s", name2); + return -1; + } + return 0; +} + +int isCompleted(const char *fileName) +{ + int err = access( fileName, W_OK ); + int fd = 0; + char readyBuffer[5]; + if( err < 0 && errno != EACCES ) + { + SHOW_RESULT( access, err ); + return 0; + } + fd = open(fileName, O_RDONLY); + if(fd < 0) + { + SHOW_RESULT( open, errno ); + return 0; + } + err = lseek(fd, -5, SEEK_END); + if(err < 0) + { + SHOW_RESULT( lseek, err ); + close(fd); + return 0; + } + err = read(fd, readyBuffer, 4); + if(err < 0) + { + SHOW_RESULT( read, err ); + close(fd); + return 0; + } + readyBuffer[4] = '\0'; + if(strncmp(readyBuffer, "Done", 4) != 0) + { + //diag_printf("Coudn't read \"Done\" at the end of the firmware file %s\n", readyBuffer); + close(fd); + return 0; + } + close(fd); + diag_printf("found!\n"); + return 1; +} + +static void ramfs_polling(cyg_addrword_t data) +{ + char fileName[100]; + int found = 0; + while(1) + { + cyg_thread_delay(100); + //scan the file system for a new .phi file + found = getFileName("phi", fileName); + if(found) + { + //check if the file has been transfered + if(isCompleted(fileName)) + { + //move the file to flash + unlink("/jffs2/firmware.bin"); + copyfile(fileName, "/jffs2/firmware.bin"); + diag_printf("firmware file copied to jffs2\n"); + unlink(fileName); + diag_printf("unmounting /jffs\n"); + umount("/jffs2"); + diag_printf("Resetting...\n"); +// CYGACC_CALL_IF_RESET(); + } + } + } +} + +static unsigned char ramfs_polling_stack[CYGNUM_HAL_STACK_SIZE_TYPICAL]; +static cyg_handle_t ramfs_polling_handle; +static cyg_thread ramfs_polling_thread; + +void start_ramfs_polling() +{ + + cyg_thread_create(10, &ramfs_polling, 0, "ramfs_polling", + ramfs_polling_stack, CYGNUM_HAL_STACK_SIZE_TYPICAL, + &ramfs_polling_handle, &ramfs_polling_thread); + cyg_thread_resume(ramfs_polling_handle); +} + +struct tftpd_fileops fileops = {open, + close, + write, + read}; + +externC void phi_init_all_network_interfaces(); + +int main(int argc, char **argv) +{ + diag_printf("Entered net_test main()\n"); + + int server_id = 0; + + init_all_network_interfaces(); + + + + int i=0; + while(1) + { + cyg_thread_delay(500); +// net_test(); + diag_printf("sleeping... %d\n", i++); + } + return 0; +} diff --git a/zpu/roadshow/roadshow/pics/GCC_logo.png b/zpu/roadshow/roadshow/pics/GCC_logo.png new file mode 100644 index 0000000..7b3435f Binary files /dev/null and b/zpu/roadshow/roadshow/pics/GCC_logo.png differ diff --git a/zpu/roadshow/roadshow/pics/codesize1.PNG b/zpu/roadshow/roadshow/pics/codesize1.PNG new file mode 100644 index 0000000..874ee9d Binary files /dev/null and b/zpu/roadshow/roadshow/pics/codesize1.PNG differ diff --git a/zpu/roadshow/roadshow/pics/codesize2.PNG b/zpu/roadshow/roadshow/pics/codesize2.PNG new file mode 100644 index 0000000..caa8c14 Binary files /dev/null and b/zpu/roadshow/roadshow/pics/codesize2.PNG differ diff --git a/zpu/roadshow/roadshow/pics/ecos.gif b/zpu/roadshow/roadshow/pics/ecos.gif new file mode 100644 index 0000000..3dad40c Binary files /dev/null and b/zpu/roadshow/roadshow/pics/ecos.gif differ diff --git a/zpu/roadshow/roadshow/pics/elizadebug1.PNG b/zpu/roadshow/roadshow/pics/elizadebug1.PNG new file mode 100644 index 0000000..f3c3f5f Binary files /dev/null and b/zpu/roadshow/roadshow/pics/elizadebug1.PNG differ diff --git a/zpu/roadshow/roadshow/pics/elizadebug2.PNG b/zpu/roadshow/roadshow/pics/elizadebug2.PNG new file mode 100644 index 0000000..13f046e Binary files /dev/null and b/zpu/roadshow/roadshow/pics/elizadebug2.PNG differ diff --git a/zpu/snapshot.sh b/zpu/snapshot.sh new file mode 100644 index 0000000..8fd6e33 --- /dev/null +++ b/zpu/snapshot.sh @@ -0,0 +1,7 @@ +export SNAPSHOT=`date +%Y-%m-%d` + +echo hdl$SNAPSHOT.zip docs$SNAPSHOT.zip sw$SNAPSHOT.zip +rm -f hdl$SNAPSHOT.zip docs$SNAPSHOT.zip sw$SNAPSHOT.zip +zip -r hdl$SNAPSHOT.zip hdl -x "*.svn*" +zip -r docs$SNAPSHOT.zip docs -x "*.svn*" +zip -r sw$SNAPSHOT.zip sw -x "*.svn*" diff --git a/zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl b/zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl new file mode 100644 index 0000000..017ee57 --- /dev/null +++ b/zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl @@ -0,0 +1,149 @@ +# ==================================================================== +# +# opencores_ethermac_eth_drivers.cdl +# +# Ethernet drivers - support for Opencores ethermac controllers +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## Copyright (C) 2004 Andrew Lunn +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Gaisler Research, (Konrad Eisele) +# Contributors: +# Date: 2005-01-22 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC { + display "Opencores ethermac driver" + description "Ethernet driver for Opencores ethermac driver." + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + + active_if CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_REQUIRED + + include_dir . + include_files ; # none _exported_ whatsoever + compile if_oeth.c + + include_files include/oeth_info.h + + define_proc { + puts $::cdl_header "#include "; + puts $::cdl_header "#include CYGDAT_DEVS_ETH_OPENCORES_ETHERMAC_CFG"; + } + + cdl_option CYGNUM_DEVS_ETH_OPENCORES_ETHERMAC_DEV_COUNT { + display "Number of supported interfaces." + calculated { CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_REQUIRED } + flavor data + description " + This option selects the number of ethernet interfaces to + be supported by the driver." + } + + cdl_interface CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_STATIC_ESA { + display "ESA is statically configured" + description " + If this is nonzero, then the ESA (MAC address) is statically + configured in the platform-specific package which instantiates + this driver with all its details. + + Note that use of this option is deprecated in favor of a + CYGSEM_DEVS_ETH_..._SET_ESA option in the platform specific + driver." + } + + cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_TxNUM { + display "Number of output buffers" + flavor data + legal_values 2 to 64 + default_value 4 + description " + This option specifies the number of output buffer packets + to be used for the opencores ethernet device in multiples of 2." + } + + cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_RxNUM { + display "Number of input buffers" + flavor data + legal_values 2 to 64 + default_value 4 + description " + This option specifies the number of input buffer packets + to be used for the opencores ethernet device in multiples of 2." + } + + cdl_component CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_OPTIONS { + display "Opencores ethermac driver build options" + flavor none + no_define + + cdl_option CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the opencores ethermac driver package. + These flags are used in addition + to the set of global flags." + } + } + + cdl_component CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_FLUSH { + display "Cache flushing" + flavor bool + default_value 1 + description "Flush cache before copying packets from/to the + ethermac dma transfer buffers. If you have cache snooping enabled + you can disable this option." + + } + + cdl_component CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_ETH100 { + display "Initialize MII to 100mbit" + flavor bool + default_value 0 + description "Issue a MII sequence that enables a 100mbit link " + + } + +} diff --git a/zpu/sw/ecos/repository/ecos.db b/zpu/sw/ecos/repository/ecos.db new file mode 100644 index 0000000..c31fc4b --- /dev/null +++ b/zpu/sw/ecos/repository/ecos.db @@ -0,0 +1,128 @@ + +package CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC { + alias { "opencore's ethermac support" devs_eth_opencores_ethermac } + hardware + directory dev/eth/opencores/ethermac + script opencores_ethermac_drivers.cdl + description "This package contains hardware support for Opencores + ethermac." +} + +package CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI { + alias { "ethernet support for opencores on Zylin Phi addon board" devs_eth_zpu_opencores_phi } + hardware + directory dev/eth/zpu/opencores/phi + script phi_opencores_ethmac_drivers.cdl + description "This package contains hardware support for Opencores Ethermac + ethernet device on Phi." +} + + + +package CYGPKG_HAL_ZYLIN { + alias { "Zylin common HAL" hal_zylin } + directory hal/zylin/arch + script hal_zylin.cdl + hardware + description " +The Zylin architecture HAL package provides generic support for this +processor architecture. It is also necessary to select a specific +target platform HAL package." +} + + +package CYGPKG_HAL_ZYLIN_ZPU { + alias { "Zylin ZPU variant HAL" hal_zylin_zpu } + directory hal/zylin/zpu/var + script hal_zylin_zpu.cdl + hardware + description " + The Zylin ZPU HAL package provides the support needed to run eCos on Zylin + ZPU based targets." +} + + + +package CYGPKG_HAL_ZYLIN_ZPU_ZETA { + alias { "Zylin ZPU simulation" zeta } + directory hal/zylin/zpu/zeta + script hal_zylin_zpu_zeta.cdl + hardware + description " + The Zylin ZPU package provides the support needed to run eCos on an Zylin + evaluation board." +} +package CYGPKG_HAL_ZYLIN_ZPU_PHI { + alias { "Zylin ZPU evaluation board" phi } + directory hal/zylin/zpu/phi + script hal_zylin_zpu_phi.cdl + hardware + description " + The Zylin ZPU package provides the support needed to run eCos on a Zylin eCosBoard" +} + +package CYGPKG_HAL_ZYLIN_ZPU_ABEL { + alias { "Zylin ZPU Abel board" abel } + directory hal/zylin/zpu/abel + script hal_zylin_zpu_abel.cdl + hardware + description " + The Zylin ZPU package provides the support needed to run eCos on an Abel Zylin + evaluation board." +} + + +package CYGPKG_PHI_NET { + alias { "Zylin Phi networking" phi_net } + directory net/zylin + script phi_net.cdl + hardware + description "Contains phi specific network init." +} + + +target zeta { + alias { "Zylin ZPU evaluation board " zeta } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_ZETA + } + description " + The Zylin ZPU target provides the packages needed to run eCos on an Zylin + evaluation board." +} + +target phi { + alias { "Zylin ZPU evaluation board " phi } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_PHI + } + description " + The Zylin ZPU target provides the packages needed to run eCos on an Zylin eCosBoard" +} + +target abel { + alias { "Zylin ZPU evaluation board " abel } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_ABEL + } + description " + The Zylin ZPU target provides the packages needed to run eCos on an Abel Zylin + evaluation board." +} + +target zpuetherphi { + alias { "Zylin Phi addon board with ethernet" etherphi } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_PHI + CYGPKG_IO_ETH_DRIVERS + CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC + CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI + } + description " + The Zylin Phi ZPU target provides the packages needed to run ZPU eCos on a + Zylin eCosBoard addon board with ethernet." +} diff --git a/zpu/sw/helloworld/gccgdb.PNG b/zpu/sw/helloworld/gccgdb.PNG new file mode 100644 index 0000000..afdfc31 Binary files /dev/null and b/zpu/sw/helloworld/gccgdb.PNG differ diff --git a/zpu/sw/helloworld/gmon.out b/zpu/sw/helloworld/gmon.out new file mode 100644 index 0000000..86ca3d6 Binary files /dev/null and b/zpu/sw/helloworld/gmon.out differ diff --git a/zpu/sw/helloworld/hello.bin b/zpu/sw/helloworld/hello.bin new file mode 100644 index 0000000..4413b05 Binary files /dev/null and b/zpu/sw/helloworld/hello.bin differ diff --git a/zpu/sw/helloworld/hello.bram b/zpu/sw/helloworld/hello.bram new file mode 100644 index 0000000..f7e99e9 --- /dev/null +++ b/zpu/sw/helloworld/hello.bram @@ -0,0 +1,12441 @@ +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"82f4e00c", +3 => x"3a0b0b81", +4 => x"e48c0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"81e4fd2d", +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"c9040000", +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"0b0b88ac", +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"0b0b82f4", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88af0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8e", +171 => x"c42d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b90", +179 => x"8d2d5050", +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"82f4dc0c", +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"0b0b0b83", +257 => x"e93f0b0b", +258 => x"82e4cc3f", +259 => x"04101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101010", +266 => x"10101010", +267 => x"53510473", +268 => x"81ff0673", +269 => x"83060981", +270 => x"05830510", +271 => x"10102b07", +272 => x"72fc060c", +273 => x"5151043c", +274 => x"04727280", +275 => x"728106ff", +276 => x"05097206", +277 => x"05711052", +278 => x"720a100a", +279 => x"5372ed38", +280 => x"51515351", +281 => x"04fe3d0d", +282 => x"0b0b8384", +283 => x"e8085384", +284 => x"13087088", +285 => x"2a708106", +286 => x"51525270", +287 => x"802e0b0b", +288 => x"0b0bec38", +289 => x"7181ff06", +290 => x"800c843d", +291 => x"0d04ff3d", +292 => x"0d0b0b83", +293 => x"84e80852", +294 => x"71087088", +295 => x"2a813270", +296 => x"81065151", +297 => x"51700b0b", +298 => x"0b0bed38", +299 => x"73720c83", +300 => x"3d0d040b", +301 => x"0b82f4dc", +302 => x"08802e0b", +303 => x"0b0b0bae", +304 => x"380b0b82", +305 => x"f4e00882", +306 => x"2e0b0b0b", +307 => x"80c53883", +308 => x"80800b0b", +309 => x"0b8384e8", +310 => x"0c82a080", +311 => x"0b0b0b83", +312 => x"84ec0c82", +313 => x"90800b0b", +314 => x"0b8384f0", +315 => x"0c04f880", +316 => x"8080a40b", +317 => x"0b0b8384", +318 => x"e80cf880", +319 => x"8082800b", +320 => x"0b0b8384", +321 => x"ec0cf880", +322 => x"8084800b", +323 => x"0b0b8384", +324 => x"f00c0480", +325 => x"c0a8808c", +326 => x"0b0b0b83", +327 => x"84e80c80", +328 => x"c0a88094", +329 => x"0b0b0b83", +330 => x"84ec0c0b", +331 => x"0b82ed90", +332 => x"0b0b0b83", +333 => x"84f00c04", +334 => x"f23d0d60", +335 => x"0b0b8384", +336 => x"ec08565d", +337 => x"82750c80", +338 => x"59805a80", +339 => x"0b8f3d5d", +340 => x"5b7a1010", +341 => x"15700871", +342 => x"08719f2c", +343 => x"7e852b58", +344 => x"55557d53", +345 => x"59570b0b", +346 => x"0b81d13f", +347 => x"7d7f7a72", +348 => x"077c7207", +349 => x"71716081", +350 => x"05415f5d", +351 => x"5b595755", +352 => x"817b270b", +353 => x"0b0b0b8f", +354 => x"38767d0c", +355 => x"77841e0c", +356 => x"7c800c90", +357 => x"3d0d040b", +358 => x"0b8384ec", +359 => x"08550b0b", +360 => x"0bffae39", +361 => x"70700b0b", +362 => x"8384f433", +363 => x"51700b0b", +364 => x"0b0bb738", +365 => x"0b0b82f4", +366 => x"e8087008", +367 => x"52527080", +368 => x"2e0b0b0b", +369 => x"0b9c3884", +370 => x"120b0b82", +371 => x"f4e80c70", +372 => x"2d0b0b82", +373 => x"f4e80870", +374 => x"08525270", +375 => x"0b0b0b0b", +376 => x"e638810b", +377 => x"0b0b8384", +378 => x"f4345050", +379 => x"0404700b", +380 => x"0b8384e4", +381 => x"08802e0b", +382 => x"0b0b0b92", +383 => x"380b0b0b", +384 => x"0b800b80", +385 => x"2e098106", +386 => x"0b0b0b0b", +387 => x"83385004", +388 => x"0b0b8384", +389 => x"e4510b0b", +390 => x"0bf3e53f", +391 => x"5004048c", +392 => x"08028c0c", +393 => x"ff3d0d0b", +394 => x"0b82ed94", +395 => x"510b0b0b", +396 => x"88ab3f71", +397 => x"800c833d", +398 => x"0d8c0c04", +399 => x"8c08028c", +400 => x"0cf53d0d", +401 => x"8c089405", +402 => x"080b0b0b", +403 => x"0ba0388c", +404 => x"088c0508", +405 => x"8c089005", +406 => x"088c0888", +407 => x"05085856", +408 => x"5473760c", +409 => x"7484170c", +410 => x"0b0b0b81", +411 => x"ca39800b", +412 => x"8c08f005", +413 => x"0c800b8c", +414 => x"08f4050c", +415 => x"8c088c05", +416 => x"088c0890", +417 => x"05085654", +418 => x"738c08f0", +419 => x"050c748c", +420 => x"08f4050c", +421 => x"8c08f805", +422 => x"8c08f005", +423 => x"56568870", +424 => x"54755376", +425 => x"52540b0b", +426 => x"0b85e03f", +427 => x"a00b8c08", +428 => x"94050831", +429 => x"8c08ec05", +430 => x"0c8c08ec", +431 => x"05088024", +432 => x"0b0b0b0b", +433 => x"a138800b", +434 => x"8c08f405", +435 => x"0c8c08ec", +436 => x"0508308c", +437 => x"08fc0508", +438 => x"712b8c08", +439 => x"f0050c54", +440 => x"0b0b0b0b", +441 => x"b9398c08", +442 => x"fc05088c", +443 => x"08ec0508", +444 => x"2a8c08e8", +445 => x"050c8c08", +446 => x"fc05088c", +447 => x"08940508", +448 => x"2b8c08f4", +449 => x"050c8c08", +450 => x"f805088c", +451 => x"08940508", +452 => x"2b708c08", +453 => x"e8050807", +454 => x"8c08f005", +455 => x"0c548c08", +456 => x"f005088c", +457 => x"08f40508", +458 => x"8c088805", +459 => x"08585654", +460 => x"73760c74", +461 => x"84170c8c", +462 => x"08880508", +463 => x"800c8d3d", +464 => x"0d8c0c04", +465 => x"8c08028c", +466 => x"0cf93d0d", +467 => x"800b8c08", +468 => x"fc050c8c", +469 => x"08880508", +470 => x"80250b0b", +471 => x"0b0baf38", +472 => x"8c088805", +473 => x"08308c08", +474 => x"88050c80", +475 => x"0b8c08f4", +476 => x"050c8c08", +477 => x"fc05080b", +478 => x"0b0b0b88", +479 => x"38810b8c", +480 => x"08f4050c", +481 => x"8c08f405", +482 => x"088c08fc", +483 => x"050c8c08", +484 => x"8c050880", +485 => x"250b0b0b", +486 => x"0baf388c", +487 => x"088c0508", +488 => x"308c088c", +489 => x"050c800b", +490 => x"8c08f005", +491 => x"0c8c08fc", +492 => x"05080b0b", +493 => x"0b0b8838", +494 => x"810b8c08", +495 => x"f0050c8c", +496 => x"08f00508", +497 => x"8c08fc05", +498 => x"0c80538c", +499 => x"088c0508", +500 => x"528c0888", +501 => x"0508510b", +502 => x"0b0b81bb", +503 => x"3f800870", +504 => x"8c08f805", +505 => x"0c548c08", +506 => x"fc050880", +507 => x"2e0b0b0b", +508 => x"0b8c388c", +509 => x"08f80508", +510 => x"308c08f8", +511 => x"050c8c08", +512 => x"f8050870", +513 => x"800c5489", +514 => x"3d0d8c0c", +515 => x"048c0802", +516 => x"8c0cfb3d", +517 => x"0d800b8c", +518 => x"08fc050c", +519 => x"8c088805", +520 => x"0880250b", +521 => x"0b0b0b93", +522 => x"388c0888", +523 => x"0508308c", +524 => x"0888050c", +525 => x"810b8c08", +526 => x"fc050c8c", +527 => x"088c0508", +528 => x"80250b0b", +529 => x"0b0b8c38", +530 => x"8c088c05", +531 => x"08308c08", +532 => x"8c050c81", +533 => x"538c088c", +534 => x"0508528c", +535 => x"08880508", +536 => x"510b0b0b", +537 => x"0bb13f80", +538 => x"08708c08", +539 => x"f8050c54", +540 => x"8c08fc05", +541 => x"08802e0b", +542 => x"0b0b0b8c", +543 => x"388c08f8", +544 => x"0508308c", +545 => x"08f8050c", +546 => x"8c08f805", +547 => x"0870800c", +548 => x"54873d0d", +549 => x"8c0c048c", +550 => x"08028c0c", +551 => x"70707070", +552 => x"810b8c08", +553 => x"fc050c80", +554 => x"0b8c08f8", +555 => x"050c8c08", +556 => x"8c05088c", +557 => x"08880508", +558 => x"270b0b0b", +559 => x"0bb8388c", +560 => x"08fc0508", +561 => x"802e0b0b", +562 => x"0b0bab38", +563 => x"800b8c08", +564 => x"8c050824", +565 => x"0b0b0b0b", +566 => x"9d388c08", +567 => x"8c050810", +568 => x"8c088c05", +569 => x"0c8c08fc", +570 => x"0508108c", +571 => x"08fc050c", +572 => x"0b0b0bff", +573 => x"b9398c08", +574 => x"fc050880", +575 => x"2e0b0b0b", +576 => x"80d0388c", +577 => x"088c0508", +578 => x"8c088805", +579 => x"08260b0b", +580 => x"0b0ba138", +581 => x"8c088805", +582 => x"088c088c", +583 => x"0508318c", +584 => x"0888050c", +585 => x"8c08f805", +586 => x"088c08fc", +587 => x"0508078c", +588 => x"08f8050c", +589 => x"8c08fc05", +590 => x"08812a8c", +591 => x"08fc050c", +592 => x"8c088c05", +593 => x"08812a8c", +594 => x"088c050c", +595 => x"0b0b0bff", +596 => x"a5398c08", +597 => x"90050880", +598 => x"2e0b0b0b", +599 => x"0b93388c", +600 => x"08880508", +601 => x"708c08f4", +602 => x"050c510b", +603 => x"0b0b0b8d", +604 => x"398c08f8", +605 => x"0508708c", +606 => x"08f4050c", +607 => x"518c08f4", +608 => x"0508800c", +609 => x"50505050", +610 => x"8c0c04fc", +611 => x"3d0d7670", +612 => x"797b5555", +613 => x"55558f72", +614 => x"270b0b0b", +615 => x"0b903872", +616 => x"75078306", +617 => x"5170802e", +618 => x"0b0b0b0b", +619 => x"af38ff12", +620 => x"5271ff2e", +621 => x"0b0b0b0b", +622 => x"9c387270", +623 => x"81055433", +624 => x"74708105", +625 => x"5634ff12", +626 => x"5271ff2e", +627 => x"0981060b", +628 => x"0b0b0be6", +629 => x"3874800c", +630 => x"863d0d04", +631 => x"74517270", +632 => x"84055408", +633 => x"71708405", +634 => x"530c7270", +635 => x"84055408", +636 => x"71708405", +637 => x"530c7270", +638 => x"84055408", +639 => x"71708405", +640 => x"530c7270", +641 => x"84055408", +642 => x"71708405", +643 => x"530cf012", +644 => x"52718f26", +645 => x"0b0b0b0b", +646 => x"c5388372", +647 => x"270b0b0b", +648 => x"0b993872", +649 => x"70840554", +650 => x"08717084", +651 => x"05530cfc", +652 => x"12527183", +653 => x"260b0b0b", +654 => x"0be93870", +655 => x"540b0b0b", +656 => x"feec39fb", +657 => x"3d0d7789", +658 => x"3d880555", +659 => x"79548811", +660 => x"0853510b", +661 => x"0b0b80e3", +662 => x"3f873d0d", +663 => x"04fc3d0d", +664 => x"873d7070", +665 => x"84055208", +666 => x"56537452", +667 => x"0b0b82f4", +668 => x"ec088811", +669 => x"0852540b", +670 => x"0b0bb4a2", +671 => x"3f863d0d", +672 => x"04707070", +673 => x"70768811", +674 => x"08545472", +675 => x"0b0b0b0b", +676 => x"8d387284", +677 => x"150c7280", +678 => x"0c505050", +679 => x"50047352", +680 => x"75510b0b", +681 => x"80fcfe3f", +682 => x"800b8815", +683 => x"0c800b84", +684 => x"150c8008", +685 => x"800c5050", +686 => x"505004fc", +687 => x"c43d0d83", +688 => x"bf3d0883", +689 => x"c13d0883", +690 => x"c33d0883", +691 => x"c53d0848", +692 => x"5e484b0b", +693 => x"0b8186f6", +694 => x"3f800808", +695 => x"4c800b83", +696 => x"bb3d0c80", +697 => x"0b83bc3d", +698 => x"0c807071", +699 => x"698c0522", +700 => x"70832a81", +701 => x"32708106", +702 => x"515d5d4c", +703 => x"4f4d786d", +704 => x"2e098106", +705 => x"0b0b0b0b", +706 => x"90386690", +707 => x"05086d2e", +708 => x"0981060b", +709 => x"0b0b0b98", +710 => x"3866510b", +711 => x"0b0bbfc8", +712 => x"3fff5980", +713 => x"080b0b0b", +714 => x"82893866", +715 => x"8c05225a", +716 => x"799a0659", +717 => x"788a2e0b", +718 => x"0b0b80ce", +719 => x"387b83a6", +720 => x"3d707183", +721 => x"b93d0c5e", +722 => x"475d800b", +723 => x"83b83d0c", +724 => x"800b83b7", +725 => x"3d0c8049", +726 => x"7c5e807d", +727 => x"337081ff", +728 => x"065b5b5b", +729 => x"787b2e0b", +730 => x"0b0b0b83", +731 => x"38815b78", +732 => x"a52e0b0b", +733 => x"0b81c438", +734 => x"7a802e0b", +735 => x"0b0b81bb", +736 => x"38811d5d", +737 => x"0b0b0b0b", +738 => x"d139668e", +739 => x"05227090", +740 => x"2b5a5b80", +741 => x"79240b0b", +742 => x"0bffa238", +743 => x"79fd0659", +744 => x"7882ba3d", +745 => x"237a0284", +746 => x"0589e205", +747 => x"23669c05", +748 => x"0882be3d", +749 => x"0c66a405", +750 => x"0882c03d", +751 => x"0cb63d70", +752 => x"82b83d0c", +753 => x"82bb3d0c", +754 => x"88800b82", +755 => x"b93d0c88", +756 => x"800b82bc", +757 => x"3d0c800b", +758 => x"82bd3d0c", +759 => x"64537b52", +760 => x"82b63d70", +761 => x"52590b0b", +762 => x"0bb1b33f", +763 => x"80085a80", +764 => x"0b800824", +765 => x"0b0b0b0b", +766 => x"95387851", +767 => x"0b0b80ec", +768 => x"bf3f8008", +769 => x"802e0b0b", +770 => x"0b0b8338", +771 => x"ff5a82b9", +772 => x"3d227086", +773 => x"2a708106", +774 => x"515a5b78", +775 => x"802e0b0b", +776 => x"0b0b8e38", +777 => x"668c0522", +778 => x"80c00759", +779 => x"78678c05", +780 => x"23795978", +781 => x"800c83be", +782 => x"3d0d047c", +783 => x"7e315b7a", +784 => x"802e0b0b", +785 => x"0b0bb138", +786 => x"7d7c0c7a", +787 => x"841d0c83", +788 => x"b73d081b", +789 => x"83b83d0c", +790 => x"881c83b7", +791 => x"3d088111", +792 => x"83b93d0c", +793 => x"8111515a", +794 => x"5c788724", +795 => x"0b0b0b80", +796 => x"cb38681b", +797 => x"7d335b49", +798 => x"7981ff06", +799 => x"5978802e", +800 => x"0b0b0bae", +801 => x"df38811d", +802 => x"5d807071", +803 => x"4a4543ff", +804 => x"416283be", +805 => x"3d347c33", +806 => x"5a7981ff", +807 => x"06811e5e", +808 => x"407fe005", +809 => x"597880d8", +810 => x"260b0b0b", +811 => x"88a83878", +812 => x"10100b0b", +813 => x"82edc405", +814 => x"59780804", +815 => x"83be3ddc", +816 => x"05526651", +817 => x"0b0b0bfb", +818 => x"b83f8008", +819 => x"0b0b0b8b", +820 => x"b3386569", +821 => x"1c7e335c", +822 => x"4a5c0b0b", +823 => x"0bff9939", +824 => x"62900743", +825 => x"62842a70", +826 => x"81065159", +827 => x"780b0b0b", +828 => x"9e873862", +829 => x"862a7081", +830 => x"06515978", +831 => x"802e0b0b", +832 => x"0b9df638", +833 => x"64658405", +834 => x"8212225d", +835 => x"4659815f", +836 => x"800b83be", +837 => x"3d346044", +838 => x"8061240b", +839 => x"0b0b0b86", +840 => x"3862feff", +841 => x"0643657b", +842 => x"30707d07", +843 => x"9f2a6630", +844 => x"7068079f", +845 => x"2a720752", +846 => x"5c515b5e", +847 => x"79802e0b", +848 => x"0b0b98fd", +849 => x"387e812e", +850 => x"0b0b0b8c", +851 => x"8438817f", +852 => x"250b0b0b", +853 => x"a0eb387e", +854 => x"822e0b0b", +855 => x"0b8cc038", +856 => x"0b0b82f0", +857 => x"a85e7d51", +858 => x"0b0b81c0", +859 => x"ae3f8008", +860 => x"5f7e427e", +861 => x"64250b0b", +862 => x"0b0b8338", +863 => x"634283bd", +864 => x"3d337081", +865 => x"ff065a5b", +866 => x"78802e0b", +867 => x"0b0b9488", +868 => x"38618105", +869 => x"42628184", +870 => x"0641600b", +871 => x"0b0b8186", +872 => x"38676231", +873 => x"5a807a25", +874 => x"0b0b0b80", +875 => x"f938907a", +876 => x"250b0b0b", +877 => x"0bbd380b", +878 => x"0b82eda4", +879 => x"7c0c900b", +880 => x"841d0c83", +881 => x"b73d0890", +882 => x"0583b83d", +883 => x"0c881c83", +884 => x"b73d0881", +885 => x"1183b93d", +886 => x"0c811151", +887 => x"5a5c7887", +888 => x"240b0b0b", +889 => x"868e38f0", +890 => x"1a5a7990", +891 => x"240b0b0b", +892 => x"0bc5380b", +893 => x"0b82eda4", +894 => x"7c0c7984", +895 => x"1d0c83b7", +896 => x"3d081a83", +897 => x"b83d0c88", +898 => x"1c83b73d", +899 => x"08811183", +900 => x"b93d0c81", +901 => x"11515a5c", +902 => x"7887240b", +903 => x"0b0b96fe", +904 => x"3883bd3d", +905 => x"335b7a81", +906 => x"ff065978", +907 => x"802e0b0b", +908 => x"0b938138", +909 => x"83be3dfc", +910 => x"057c0c81", +911 => x"0b841d0c", +912 => x"83b73d08", +913 => x"810583b8", +914 => x"3d0c881c", +915 => x"83b73d08", +916 => x"811183b9", +917 => x"3d0c8111", +918 => x"515a5c78", +919 => x"87240b0b", +920 => x"0b879f38", +921 => x"6081802e", +922 => x"0b0b0b85", +923 => x"c938637f", +924 => x"315a807a", +925 => x"250b0b0b", +926 => x"818c3890", +927 => x"7a250b0b", +928 => x"0b0bbd38", +929 => x"0b0b82ed", +930 => x"b47c0c90", +931 => x"0b841d0c", +932 => x"83b73d08", +933 => x"900583b8", +934 => x"3d0c881c", +935 => x"83b73d08", +936 => x"811183b9", +937 => x"3d0c8111", +938 => x"515a5c78", +939 => x"87240b0b", +940 => x"0b84e238", +941 => x"f01a5a79", +942 => x"90240b0b", +943 => x"0b0bc538", +944 => x"0b0b82ed", +945 => x"b47c0c79", +946 => x"841d0c83", +947 => x"b73d081a", +948 => x"83b83d0c", +949 => x"881c83b7", +950 => x"3d088111", +951 => x"83b93d0c", +952 => x"8111515a", +953 => x"5c877925", +954 => x"0b0b0b0b", +955 => x"993883be", +956 => x"3ddc0552", +957 => x"66510b0b", +958 => x"0bf7863f", +959 => x"80080b0b", +960 => x"0b878138", +961 => x"655c6288", +962 => x"2a813270", +963 => x"81065159", +964 => x"78802e0b", +965 => x"0b0b91f3", +966 => x"387d7c0c", +967 => x"7e841d0c", +968 => x"83b73d08", +969 => x"1f83b83d", +970 => x"0c881c83", +971 => x"b73d0881", +972 => x"1183b93d", +973 => x"0c811151", +974 => x"5a5c7887", +975 => x"240b0b0b", +976 => x"868c3862", +977 => x"822a7081", +978 => x"06515978", +979 => x"802e0b0b", +980 => x"0b819438", +981 => x"6762315a", +982 => x"807a250b", +983 => x"0b0b8187", +984 => x"38907a25", +985 => x"0b0b0b0b", +986 => x"bd380b0b", +987 => x"82eda47c", +988 => x"0c900b84", +989 => x"1d0c83b7", +990 => x"3d089005", +991 => x"83b83d0c", +992 => x"881c83b7", +993 => x"3d088111", +994 => x"83b93d0c", +995 => x"8111515a", +996 => x"5c788724", +997 => x"0b0b0b85", +998 => x"9438f01a", +999 => x"5a799024", +1000 => x"0b0b0b0b", +1001 => x"c5380b0b", +1002 => x"82eda47c", +1003 => x"0c79841d", +1004 => x"0c83b73d", +1005 => x"081a83b8", +1006 => x"3d0c83b6", +1007 => x"3d088111", +1008 => x"83b83d0c", +1009 => x"81115159", +1010 => x"8779250b", +1011 => x"0b0b0b97", +1012 => x"3883be3d", +1013 => x"dc055266", +1014 => x"510b0b0b", +1015 => x"f5a33f80", +1016 => x"080b0b0b", +1017 => x"859e3861", +1018 => x"59616825", +1019 => x"0b0b0b0b", +1020 => x"83386759", +1021 => x"68194983", +1022 => x"b73d080b", +1023 => x"0b0b84ec", +1024 => x"38800b83", +1025 => x"b73d0c65", +1026 => x"5c69802e", +1027 => x"0b0b0bf6", +1028 => x"c7386951", +1029 => x"0b0b80ff", +1030 => x"953f807d", +1031 => x"5f4a0b0b", +1032 => x"0bf6b739", +1033 => x"62900743", +1034 => x"62842a70", +1035 => x"81065159", +1036 => x"780b0b0b", +1037 => x"97d43862", +1038 => x"862a7081", +1039 => x"06515978", +1040 => x"802e0b0b", +1041 => x"0b97c338", +1042 => x"64658405", +1043 => x"8212225d", +1044 => x"4659805f", +1045 => x"800b83be", +1046 => x"3d340b0b", +1047 => x"0bf9b739", +1048 => x"62900743", +1049 => x"62842a70", +1050 => x"81065159", +1051 => x"780b0b0b", +1052 => x"97a93862", +1053 => x"862a7081", +1054 => x"06515978", +1055 => x"802e0b0b", +1056 => x"0b979838", +1057 => x"64658405", +1058 => x"7108902b", +1059 => x"70902c51", +1060 => x"5d465980", +1061 => x"7b240b0b", +1062 => x"0b8bdf38", +1063 => x"815f0b0b", +1064 => x"0bf8f339", +1065 => x"64658405", +1066 => x"71084a46", +1067 => x"59678025", +1068 => x"0b0b0bf7", +1069 => x"e1386730", +1070 => x"48628407", +1071 => x"7d335b43", +1072 => x"0b0b0bf7", +1073 => x"d439811d", +1074 => x"5d629007", +1075 => x"7d335b43", +1076 => x"0b0b0bf7", +1077 => x"c4397f80", +1078 => x"2e0b0b0b", +1079 => x"a6863882", +1080 => x"ce3d5e7f", +1081 => x"7e34815f", +1082 => x"800b83be", +1083 => x"3d340b0b", +1084 => x"0bf8fe39", +1085 => x"83be3ddc", +1086 => x"05526651", +1087 => x"0b0b0bf3", +1088 => x"803f8008", +1089 => x"0b0b0b82", +1090 => x"fb3865f0", +1091 => x"1b5b5c0b", +1092 => x"0b0bf9d6", +1093 => x"3983be3d", +1094 => x"dc055266", +1095 => x"510b0b0b", +1096 => x"f2df3f80", +1097 => x"080b0b0b", +1098 => x"82da3865", +1099 => x"f01b5b5c", +1100 => x"0b0b0bfb", +1101 => x"82396762", +1102 => x"315a807a", +1103 => x"250b0b0b", +1104 => x"faac3890", +1105 => x"7a250b0b", +1106 => x"0b0bbd38", +1107 => x"0b0b82ed", +1108 => x"b47c0c90", +1109 => x"0b841d0c", +1110 => x"83b73d08", +1111 => x"900583b8", +1112 => x"3d0c881c", +1113 => x"83b73d08", +1114 => x"811183b9", +1115 => x"3d0c8111", +1116 => x"515a5c78", +1117 => x"87240b0b", +1118 => x"0b80e638", +1119 => x"f01a5a79", +1120 => x"90240b0b", +1121 => x"0b0bc538", +1122 => x"0b0b82ed", +1123 => x"b47c0c79", +1124 => x"841d0c83", +1125 => x"b73d081a", +1126 => x"83b83d0c", +1127 => x"881c83b7", +1128 => x"3d088111", +1129 => x"83b93d0c", +1130 => x"8111515a", +1131 => x"5c877925", +1132 => x"0b0b0bf9", +1133 => x"b93883be", +1134 => x"3ddc0552", +1135 => x"66510b0b", +1136 => x"0bf1be3f", +1137 => x"80080b0b", +1138 => x"0b81b938", +1139 => x"65646031", +1140 => x"5b5c7980", +1141 => x"240b0b0b", +1142 => x"f9a1380b", +1143 => x"0b0bfaa6", +1144 => x"3983be3d", +1145 => x"dc055266", +1146 => x"510b0b0b", +1147 => x"f1933f80", +1148 => x"080b0b0b", +1149 => x"818e3865", +1150 => x"f01b5b5c", +1151 => x"0b0b0bfe", +1152 => x"fe3983be", +1153 => x"3ddc0552", +1154 => x"66510b0b", +1155 => x"0bf0f23f", +1156 => x"80080b0b", +1157 => x"0b80ed38", +1158 => x"655c6081", +1159 => x"802e0981", +1160 => x"060b0b0b", +1161 => x"f8c8380b", +1162 => x"0b0bfe8a", +1163 => x"3983be3d", +1164 => x"dc055266", +1165 => x"510b0b0b", +1166 => x"f0c73f80", +1167 => x"080b0b0b", +1168 => x"80c23865", +1169 => x"f01b5b5c", +1170 => x"0b0b0bfa", +1171 => x"d03983be", +1172 => x"3ddc0552", +1173 => x"66510b0b", +1174 => x"0bf0a63f", +1175 => x"80080b0b", +1176 => x"0b0ba138", +1177 => x"655c0b0b", +1178 => x"0bf9d839", +1179 => x"83be3ddc", +1180 => x"05526651", +1181 => x"0b0b0bf0", +1182 => x"883f8008", +1183 => x"802e0b0b", +1184 => x"0bfafe38", +1185 => x"69802e0b", +1186 => x"0b0b0b89", +1187 => x"3869510b", +1188 => x"0b80fa9a", +1189 => x"3f668c05", +1190 => x"2270862a", +1191 => x"7081066b", +1192 => x"5d515a47", +1193 => x"78802e0b", +1194 => x"0b0bf385", +1195 => x"38ff590b", +1196 => x"0b0bf2ff", +1197 => x"397c3370", +1198 => x"81ff065a", +1199 => x"5a7880ec", +1200 => x"2e0b0b0b", +1201 => x"fc803862", +1202 => x"90077a81", +1203 => x"ff06811f", +1204 => x"5f41430b", +1205 => x"0b0bf3c9", +1206 => x"397c7081", +1207 => x"055e3340", +1208 => x"7faa2e0b", +1209 => x"0b0ba2f9", +1210 => x"388060d0", +1211 => x"0571435a", +1212 => x"5a788926", +1213 => x"0b0b0bf3", +1214 => x"a8387910", +1215 => x"10107a10", +1216 => x"056005d0", +1217 => x"057d7081", +1218 => x"055f33d0", +1219 => x"115b415a", +1220 => x"8979270b", +1221 => x"0b0b0be2", +1222 => x"38794179", +1223 => x"ff250b0b", +1224 => x"0bf2fe38", +1225 => x"ff410b0b", +1226 => x"0bf2f639", +1227 => x"64658405", +1228 => x"71085d46", +1229 => x"59820b0b", +1230 => x"0b82f0c4", +1231 => x"64720745", +1232 => x"4f5f80f8", +1233 => x"40800b83", +1234 => x"be3d340b", +1235 => x"0b0bf3c6", +1236 => x"39897b27", +1237 => x"0b0b0b0b", +1238 => x"ac38ff1e", +1239 => x"5e8a527a", +1240 => x"510b0b82", +1241 => x"9e803f80", +1242 => x"08b00559", +1243 => x"787e348a", +1244 => x"527a510b", +1245 => x"0b829dc4", +1246 => x"3f80085b", +1247 => x"7a89260b", +1248 => x"0b0b0bd6", +1249 => x"38ff1eb0", +1250 => x"1c5a5e78", +1251 => x"7e3483be", +1252 => x"3d707f31", +1253 => x"ff9c0540", +1254 => x"5b0b0b0b", +1255 => x"f3d339ff", +1256 => x"1e7b8f06", +1257 => x"6f055a5e", +1258 => x"78337e34", +1259 => x"7a842a5b", +1260 => x"7a802e0b", +1261 => x"0b0b0bd6", +1262 => x"38ff1e7b", +1263 => x"8f066f05", +1264 => x"5a5e7833", +1265 => x"7e347a84", +1266 => x"2a5b7a0b", +1267 => x"0b0b0bcf", +1268 => x"380b0b0b", +1269 => x"ffb83962", +1270 => x"80c0077d", +1271 => x"335b430b", +1272 => x"0b0bf1b5", +1273 => x"3960ff2e", +1274 => x"0b0b0b9f", +1275 => x"a0387f80", +1276 => x"e7327030", +1277 => x"70720780", +1278 => x"256280c7", +1279 => x"32703070", +1280 => x"72078025", +1281 => x"73075354", +1282 => x"5e515b59", +1283 => x"79802e0b", +1284 => x"0b0b0b8a", +1285 => x"38600b0b", +1286 => x"0b0b8338", +1287 => x"81416465", +1288 => x"88058412", +1289 => x"08720870", +1290 => x"83bf3d0c", +1291 => x"7183c03d", +1292 => x"0c545446", +1293 => x"590b0b81", +1294 => x"adad3f80", +1295 => x"08802e0b", +1296 => x"0b0b95db", +1297 => x"38805980", +1298 => x"79545483", +1299 => x"ba3d0883", +1300 => x"bc3d085b", +1301 => x"5179520b", +1302 => x"0b8290c9", +1303 => x"3f800b80", +1304 => x"08240b0b", +1305 => x"0b85f138", +1306 => x"0b0b82f0", +1307 => x"d85e835f", +1308 => x"0b0b0bf1", +1309 => x"fc3982ce", +1310 => x"3d5e7f80", +1311 => x"c32e0b0b", +1312 => x"0b0b9238", +1313 => x"62842a70", +1314 => x"81065159", +1315 => x"78802e0b", +1316 => x"0b0b83d3", +1317 => x"38885380", +1318 => x"52b43d70", +1319 => x"52590b0b", +1320 => x"8188f23f", +1321 => x"78546465", +1322 => x"84057108", +1323 => x"557f546c", +1324 => x"5346590b", +1325 => x"0b0ba0b1", +1326 => x"3f80085f", +1327 => x"8008ff2e", +1328 => x"0b0b0bfb", +1329 => x"bf38800b", +1330 => x"83be3d34", +1331 => x"0b0b0bf1", +1332 => x"a0390b0b", +1333 => x"82f0dc63", +1334 => x"842a7081", +1335 => x"06515a4e", +1336 => x"780b0b0b", +1337 => x"82ca3862", +1338 => x"862a7081", +1339 => x"06515978", +1340 => x"802e0b0b", +1341 => x"0b82b938", +1342 => x"64658405", +1343 => x"8212225d", +1344 => x"46598263", +1345 => x"81065a5f", +1346 => x"7a802e0b", +1347 => x"0b0bf080", +1348 => x"3878802e", +1349 => x"0b0b0bef", +1350 => x"f738627f", +1351 => x"0743800b", +1352 => x"83be3d34", +1353 => x"0b0b0bef", +1354 => x"ed39800b", +1355 => x"83be3d34", +1356 => x"64658405", +1357 => x"71084046", +1358 => x"597d802e", +1359 => x"0b0b0b9c", +1360 => x"d4387f80", +1361 => x"d32e0b0b", +1362 => x"0b82c038", +1363 => x"62842a70", +1364 => x"81065159", +1365 => x"780b0b0b", +1366 => x"82b13880", +1367 => x"61240b0b", +1368 => x"0bf08338", +1369 => x"60537852", +1370 => x"7d510b0b", +1371 => x"8183e73f", +1372 => x"605f8008", +1373 => x"802e0b0b", +1374 => x"0beff638", +1375 => x"80087e31", +1376 => x"5f607f25", +1377 => x"0b0b0bef", +1378 => x"e838605f", +1379 => x"0b0b0bef", +1380 => x"e0396284", +1381 => x"2a708106", +1382 => x"5159780b", +1383 => x"0b0b908d", +1384 => x"3862862a", +1385 => x"70810651", +1386 => x"5978802e", +1387 => x"0b0b0b8f", +1388 => x"fc386465", +1389 => x"84057108", +1390 => x"52465968", +1391 => x"79237c5e", +1392 => x"0b0b0beb", +1393 => x"9539ab0b", +1394 => x"83be3d34", +1395 => x"7c335a0b", +1396 => x"0b0bedc5", +1397 => x"39805a79", +1398 => x"1010107a", +1399 => x"10056005", +1400 => x"d0057d70", +1401 => x"81055f33", +1402 => x"d0115b41", +1403 => x"5a897927", +1404 => x"0b0b0b0b", +1405 => x"e2387948", +1406 => x"0b0b0bed", +1407 => x"a4396281", +1408 => x"80077d33", +1409 => x"5b430b0b", +1410 => x"0bed8e39", +1411 => x"6288077d", +1412 => x"335b430b", +1413 => x"0b0bed81", +1414 => x"390b0b82", +1415 => x"f0c46384", +1416 => x"2a708106", +1417 => x"515a4e78", +1418 => x"802e0b0b", +1419 => x"0bfdb838", +1420 => x"64658405", +1421 => x"71085d46", +1422 => x"590b0b0b", +1423 => x"fdc43962", +1424 => x"81077d33", +1425 => x"5b430b0b", +1426 => x"0becce39", +1427 => x"83bd3d33", +1428 => x"59780b0b", +1429 => x"0becbf38", +1430 => x"a00b83be", +1431 => x"3d347c33", +1432 => x"5a0b0b0b", +1433 => x"ecb33964", +1434 => x"65840546", +1435 => x"59831933", +1436 => x"7e34815f", +1437 => x"0b0b0bf4", +1438 => x"ef397a30", +1439 => x"5bad0b83", +1440 => x"be3d3481", +1441 => x"5f0b0b0b", +1442 => x"ed8c397d", +1443 => x"a23d0c80", +1444 => x"705c5f88", +1445 => x"537e52a6", +1446 => x"3d70525a", +1447 => x"0b0b8184", +1448 => x"f43f7e61", +1449 => x"240b0b0b", +1450 => x"81c2387a", +1451 => x"1010a23d", +1452 => x"08055978", +1453 => x"08802e0b", +1454 => x"0b0b0bbd", +1455 => x"38795478", +1456 => x"085383be", +1457 => x"3dfcc005", +1458 => x"526a510b", +1459 => x"0b0b9c99", +1460 => x"3f8008ff", +1461 => x"2e0b0b0b", +1462 => x"f7aa3880", +1463 => x"081f5978", +1464 => x"61240b0b", +1465 => x"0b0b9238", +1466 => x"811b7940", +1467 => x"5b78612e", +1468 => x"0981060b", +1469 => x"0b0bffb3", +1470 => x"387e802e", +1471 => x"0b0b0bec", +1472 => x"f038811f", +1473 => x"526a510b", +1474 => x"0b80f1b6", +1475 => x"3f80084a", +1476 => x"8008802e", +1477 => x"0b0b0bf6", +1478 => x"fc388853", +1479 => x"80527951", +1480 => x"0b0b8183", +1481 => x"f03f7955", +1482 => x"7e5483be", +1483 => x"3df38c05", +1484 => x"5369526a", +1485 => x"510b0b0b", +1486 => x"9cb03f80", +1487 => x"087f2e09", +1488 => x"81060b0b", +1489 => x"0bf6bd38", +1490 => x"696a8008", +1491 => x"055a5e80", +1492 => x"79340b0b", +1493 => x"0bec9a39", +1494 => x"ad0b83be", +1495 => x"3d340b0b", +1496 => x"82f0d85e", +1497 => x"835f0b0b", +1498 => x"0bec8639", +1499 => x"79557e54", +1500 => x"83be3df3", +1501 => x"8c05537e", +1502 => x"526a510b", +1503 => x"0b0b9bea", +1504 => x"3f80085f", +1505 => x"8008ff2e", +1506 => x"0b0b0bf5", +1507 => x"f7387da2", +1508 => x"3d0c0b0b", +1509 => x"0bfee239", +1510 => x"620a100a", +1511 => x"70810651", +1512 => x"5978802e", +1513 => x"0b0b0beb", +1514 => x"ec386182", +1515 => x"05420b0b", +1516 => x"0bebe239", +1517 => x"620a100a", +1518 => x"70810651", +1519 => x"5978802e", +1520 => x"0b0b0bed", +1521 => x"9f38b00b", +1522 => x"82ce3d34", +1523 => x"7f028405", +1524 => x"8ab10534", +1525 => x"83be3dfc", +1526 => x"bc057c0c", +1527 => x"820b841d", +1528 => x"0c83b73d", +1529 => x"08820583", +1530 => x"b83d0c88", +1531 => x"1c83b73d", +1532 => x"08811183", +1533 => x"b93d0c81", +1534 => x"11515a5c", +1535 => x"8779250b", +1536 => x"0b0bece0", +1537 => x"380b0b0b", +1538 => x"f3f83980", +1539 => x"e560250b", +1540 => x"0b0b83da", +1541 => x"38805980", +1542 => x"79545483", +1543 => x"ba3d0883", +1544 => x"bc3d085b", +1545 => x"5179520b", +1546 => x"0b8282bd", +1547 => x"3f80080b", +1548 => x"0b0b87ff", +1549 => x"380b0b82", +1550 => x"f0f07c0c", +1551 => x"810b841d", +1552 => x"0c83b73d", +1553 => x"08810583", +1554 => x"b83d0c88", +1555 => x"1c83b73d", +1556 => x"08811183", +1557 => x"b93d0c81", +1558 => x"11515a5c", +1559 => x"7887240b", +1560 => x"0b0b81ce", +1561 => x"38a43d08", +1562 => x"5b7aa63d", +1563 => x"08240b0b", +1564 => x"0b0b8e38", +1565 => x"62810659", +1566 => x"78802e0b", +1567 => x"0b0bedc3", +1568 => x"386b7c0c", +1569 => x"810b841d", +1570 => x"0c83b73d", +1571 => x"08810583", +1572 => x"b83d0c88", +1573 => x"1c83b73d", +1574 => x"08811183", +1575 => x"b93d0c81", +1576 => x"11515a5c", +1577 => x"7887240b", +1578 => x"0b0b81c5", +1579 => x"38ff1b5a", +1580 => x"807a250b", +1581 => x"0b0bed8b", +1582 => x"38907a25", +1583 => x"0b0b0b0b", +1584 => x"bd380b0b", +1585 => x"82edb47c", +1586 => x"0c900b84", +1587 => x"1d0c83b7", +1588 => x"3d089005", +1589 => x"83b83d0c", +1590 => x"881c83b7", +1591 => x"3d088111", +1592 => x"83b93d0c", +1593 => x"8111515a", +1594 => x"5c788724", +1595 => x"0b0b0b80", +1596 => x"df38f01a", +1597 => x"5a799024", +1598 => x"0b0b0b0b", +1599 => x"c5380b0b", +1600 => x"82edb47c", +1601 => x"0c79841d", +1602 => x"0c83b73d", +1603 => x"081a83b8", +1604 => x"3d0c881c", +1605 => x"83b73d08", +1606 => x"811183b9", +1607 => x"3d0c8111", +1608 => x"515a5c87", +1609 => x"79250b0b", +1610 => x"0bec9838", +1611 => x"0b0b0bf2", +1612 => x"9d3983be", +1613 => x"3ddc0552", +1614 => x"66510b0b", +1615 => x"0be2c23f", +1616 => x"80080b0b", +1617 => x"0bf2bd38", +1618 => x"655c0b0b", +1619 => x"0bfe9639", +1620 => x"83be3ddc", +1621 => x"05526651", +1622 => x"0b0b0be2", +1623 => x"a43f8008", +1624 => x"0b0b0bf2", +1625 => x"9f3865f0", +1626 => x"1b5b5c0b", +1627 => x"0b0bff85", +1628 => x"3983be3d", +1629 => x"dc055266", +1630 => x"510b0b0b", +1631 => x"e2833f80", +1632 => x"080b0b0b", +1633 => x"f1fe3865", +1634 => x"a53d08ff", +1635 => x"055b5c79", +1636 => x"80240b0b", +1637 => x"0bfea238", +1638 => x"0b0b0beb", +1639 => x"a63983be", +1640 => x"3ddc0552", +1641 => x"66510b0b", +1642 => x"0be1d63f", +1643 => x"80080b0b", +1644 => x"0bf1d138", +1645 => x"6583be3d", +1646 => x"335c5c0b", +1647 => x"0b0be8e6", +1648 => x"397e0b0b", +1649 => x"0bf3c738", +1650 => x"62810659", +1651 => x"78802e0b", +1652 => x"0b0bf3ba", +1653 => x"38028d8f", +1654 => x"055eb07e", +1655 => x"3483be3d", +1656 => x"707f31ff", +1657 => x"9c05405b", +1658 => x"0b0b0be7", +1659 => x"8439a43d", +1660 => x"085b817b", +1661 => x"250b0b0b", +1662 => x"83bc387d", +1663 => x"7081055f", +1664 => x"3382ce3d", +1665 => x"34ae0284", +1666 => x"058ab105", +1667 => x"3483be3d", +1668 => x"fcbc057c", +1669 => x"0c820b84", +1670 => x"1d0c83b7", +1671 => x"3d088205", +1672 => x"83b83d0c", +1673 => x"881c83b7", +1674 => x"3d088111", +1675 => x"83b93d0c", +1676 => x"8111515a", +1677 => x"5c788724", +1678 => x"0b0b0b81", +1679 => x"8b388059", +1680 => x"80795454", +1681 => x"83ba3d08", +1682 => x"83bc3d08", +1683 => x"5b517952", +1684 => x"0b0b8280", +1685 => x"a83f8008", +1686 => x"802e0b0b", +1687 => x"0b81a538", +1688 => x"7d7c0cff", +1689 => x"1b841d0c", +1690 => x"83b73d08", +1691 => x"1bff0583", +1692 => x"b83d0c88", +1693 => x"1c83b73d", +1694 => x"08811183", +1695 => x"b93d0c81", +1696 => x"11515a5c", +1697 => x"7887240b", +1698 => x"0b0b81f7", +1699 => x"3883be3d", +1700 => x"e8057c0c", +1701 => x"6c841d0c", +1702 => x"83b73d08", +1703 => x"6d0583b8", +1704 => x"3d0c881c", +1705 => x"83b73d08", +1706 => x"811183b9", +1707 => x"3d0c8111", +1708 => x"515a5c87", +1709 => x"79250b0b", +1710 => x"0be98838", +1711 => x"83be3ddc", +1712 => x"05520b0b", +1713 => x"0bef8d39", +1714 => x"83be3ddc", +1715 => x"05526651", +1716 => x"0b0b0bdf", +1717 => x"ac3f8008", +1718 => x"0b0b0bef", +1719 => x"a73865a5", +1720 => x"3d085c5c", +1721 => x"80598079", +1722 => x"545483ba", +1723 => x"3d0883bc", +1724 => x"3d085b51", +1725 => x"79520b0b", +1726 => x"81ff823f", +1727 => x"80080b0b", +1728 => x"0bfedd38", +1729 => x"ff1b5a80", +1730 => x"7a250b0b", +1731 => x"0bfefe38", +1732 => x"907a250b", +1733 => x"0b0b0bbd", +1734 => x"380b0b82", +1735 => x"edb47c0c", +1736 => x"900b841d", +1737 => x"0c83b73d", +1738 => x"08900583", +1739 => x"b83d0c88", +1740 => x"1c83b73d", +1741 => x"08811183", +1742 => x"b93d0c81", +1743 => x"11515a5c", +1744 => x"7887240b", +1745 => x"0b0b84c4", +1746 => x"38f01a5a", +1747 => x"7990240b", +1748 => x"0b0b0bc5", +1749 => x"380b0b82", +1750 => x"edb47c0c", +1751 => x"79841d0c", +1752 => x"83b73d08", +1753 => x"1a83b83d", +1754 => x"0c881c83", +1755 => x"b73d0881", +1756 => x"1183b93d", +1757 => x"0c811151", +1758 => x"5a5c8779", +1759 => x"250b0b0b", +1760 => x"fe8b3883", +1761 => x"be3ddc05", +1762 => x"5266510b", +1763 => x"0b0bddf1", +1764 => x"3f80080b", +1765 => x"0b0bedec", +1766 => x"386583bf", +1767 => x"3de80571", +1768 => x"0c6d8412", +1769 => x"0c83b83d", +1770 => x"086e0583", +1771 => x"b93d0c5c", +1772 => x"0b0b0bfd", +1773 => x"ed396281", +1774 => x"0659780b", +1775 => x"0b0bfcbb", +1776 => x"387d7c0c", +1777 => x"810b841d", +1778 => x"0c83b73d", +1779 => x"08810583", +1780 => x"b83d0c88", +1781 => x"1c83b73d", +1782 => x"08811183", +1783 => x"b93d0c81", +1784 => x"11515a5c", +1785 => x"8779250b", +1786 => x"0b0bfda1", +1787 => x"3883be3d", +1788 => x"dc05520b", +1789 => x"0b0bff91", +1790 => x"39646584", +1791 => x"0571085d", +1792 => x"4659815f", +1793 => x"0b0b0be2", +1794 => x"87396465", +1795 => x"84057108", +1796 => x"5d465980", +1797 => x"5f0b0b0b", +1798 => x"e8ba3964", +1799 => x"65840571", +1800 => x"085d4659", +1801 => x"7a80250b", +1802 => x"0b0be8f0", +1803 => x"380b0b0b", +1804 => x"f4c839a5", +1805 => x"3d085a80", +1806 => x"7a250b0b", +1807 => x"0b8bbd38", +1808 => x"a43d085b", +1809 => x"7a7a240b", +1810 => x"0b0b83b5", +1811 => x"387d7c0c", +1812 => x"7a841d0c", +1813 => x"83b73d08", +1814 => x"1b83b83d", +1815 => x"0c881c83", +1816 => x"b73d0881", +1817 => x"1183b93d", +1818 => x"0c811151", +1819 => x"5a5c7887", +1820 => x"240b0b0b", +1821 => x"81e33879", +1822 => x"7b315a80", +1823 => x"7a250b0b", +1824 => x"0b818c38", +1825 => x"907a250b", +1826 => x"0b0b0bbd", +1827 => x"380b0b82", +1828 => x"edb47c0c", +1829 => x"900b841d", +1830 => x"0c83b73d", +1831 => x"08900583", +1832 => x"b83d0c88", +1833 => x"1c83b73d", +1834 => x"08811183", +1835 => x"b93d0c81", +1836 => x"11515a5c", +1837 => x"7887240b", +1838 => x"0b0b80fc", +1839 => x"38f01a5a", +1840 => x"7990240b", +1841 => x"0b0b0bc5", +1842 => x"380b0b82", +1843 => x"edb47c0c", +1844 => x"79841d0c", +1845 => x"83b73d08", +1846 => x"1a83b83d", +1847 => x"0c881c83", +1848 => x"b73d0881", +1849 => x"1183b93d", +1850 => x"0c811151", +1851 => x"5a5c8779", +1852 => x"250b0b0b", +1853 => x"0b993883", +1854 => x"be3ddc05", +1855 => x"5266510b", +1856 => x"0b0bdafd", +1857 => x"3f80080b", +1858 => x"0b0beaf8", +1859 => x"38655c62", +1860 => x"81065978", +1861 => x"802e0b0b", +1862 => x"0be4a838", +1863 => x"0b0b82f0", +1864 => x"f47c0c81", +1865 => x"0b841d0c", +1866 => x"83b73d08", +1867 => x"810583b8", +1868 => x"3d0c0b0b", +1869 => x"0bfaeb39", +1870 => x"83be3ddc", +1871 => x"05526651", +1872 => x"0b0b0bda", +1873 => x"bc3f8008", +1874 => x"0b0b0bea", +1875 => x"b73865f0", +1876 => x"1b5b5c0b", +1877 => x"0b0bfee8", +1878 => x"3983be3d", +1879 => x"dc055266", +1880 => x"510b0b0b", +1881 => x"da9b3f80", +1882 => x"080b0b0b", +1883 => x"ea963865", +1884 => x"a63d08a6", +1885 => x"3d087171", +1886 => x"31525d5b", +1887 => x"5c798024", +1888 => x"0b0b0bfd", +1889 => x"ff380b0b", +1890 => x"0bff8439", +1891 => x"83be3ddc", +1892 => x"05526651", +1893 => x"0b0b0bd9", +1894 => x"e83f8008", +1895 => x"0b0b0be9", +1896 => x"e33865f0", +1897 => x"1b5b5c0b", +1898 => x"0b0bfba0", +1899 => x"39646584", +1900 => x"0571086b", +1901 => x"710c527e", +1902 => x"4046590b", +1903 => x"0b0bdb9a", +1904 => x"397e0b0b", +1905 => x"0bdf9938", +1906 => x"ff1e7bb7", +1907 => x"06b0075b", +1908 => x"5e797e34", +1909 => x"7a832a5b", +1910 => x"7a0b0b0b", +1911 => x"0bea3862", +1912 => x"81065978", +1913 => x"802e0b0b", +1914 => x"0beba338", +1915 => x"79b02e0b", +1916 => x"0b0beb9a", +1917 => x"38ff1e5e", +1918 => x"b07e340b", +1919 => x"0b0bf7dd", +1920 => x"397d7c0c", +1921 => x"79841d0c", +1922 => x"83b73d08", +1923 => x"1a83b83d", +1924 => x"0c881c83", +1925 => x"b73d0881", +1926 => x"1183b93d", +1927 => x"0c811151", +1928 => x"5a5c7887", +1929 => x"240b0b0b", +1930 => x"81a03879", +1931 => x"1e0b0b82", +1932 => x"f0f47d0c", +1933 => x"5e810b84", +1934 => x"1d0c83b7", +1935 => x"3d088105", +1936 => x"83b83d0c", +1937 => x"881c83b7", +1938 => x"3d088111", +1939 => x"83b93d0c", +1940 => x"8111515a", +1941 => x"5c788724", +1942 => x"0b0b0b0b", +1943 => x"b6387d7c", +1944 => x"0ca43d08", +1945 => x"7a317084", +1946 => x"1e0c83b8", +1947 => x"3d080583", +1948 => x"b83d0c88", +1949 => x"1c83b73d", +1950 => x"08811183", +1951 => x"b93d0c81", +1952 => x"11515a5c", +1953 => x"8779250b", +1954 => x"0b0be1b7", +1955 => x"380b0b0b", +1956 => x"e7bc3983", +1957 => x"be3ddc05", +1958 => x"5266510b", +1959 => x"0b0bd7e1", +1960 => x"3f80080b", +1961 => x"0b0be7dc", +1962 => x"3865a63d", +1963 => x"087f720c", +1964 => x"a63d0871", +1965 => x"31708414", +1966 => x"0c83ba3d", +1967 => x"080583ba", +1968 => x"3d0c5b5c", +1969 => x"0b0b0bff", +1970 => x"aa3983be", +1971 => x"3ddc0552", +1972 => x"66510b0b", +1973 => x"0bd7aa3f", +1974 => x"80080b0b", +1975 => x"0be7a538", +1976 => x"65a63d08", +1977 => x"7f110b0b", +1978 => x"82f0f473", +1979 => x"0c405b5c", +1980 => x"810b841d", +1981 => x"0c83b73d", +1982 => x"08810583", +1983 => x"b83d0c88", +1984 => x"1c83b73d", +1985 => x"08811183", +1986 => x"b93d0c81", +1987 => x"11515a5c", +1988 => x"8779250b", +1989 => x"0b0bfec6", +1990 => x"380b0b0b", +1991 => x"fef53983", +1992 => x"ba3d0883", +1993 => x"bc3d085b", +1994 => x"5179520b", +1995 => x"0b8197ea", +1996 => x"3f0b0b82", +1997 => x"f0f85e83", +1998 => x"5f80080b", +1999 => x"0b0bdcb1", +2000 => x"38628280", +2001 => x"0783bb3d", +2002 => x"0883bd3d", +2003 => x"086383c0", +2004 => x"3daa3da5", +2005 => x"3d0c5f45", +2006 => x"415f4383", +2007 => x"0ba13d0c", +2008 => x"7f80e62e", +2009 => x"0b0b0b0b", +2010 => x"b1388008", +2011 => x"5a7f80e5", +2012 => x"2e0b0b0b", +2013 => x"83ea3880", +2014 => x"08597f80", +2015 => x"c52e0b0b", +2016 => x"0b83f038", +2017 => x"79790759", +2018 => x"78802e0b", +2019 => x"0b0b0b85", +2020 => x"38608105", +2021 => x"42820ba1", +2022 => x"3d0c7db3", +2023 => x"3d0c7eb4", +2024 => x"3d0c800b", +2025 => x"b33d0824", +2026 => x"0b0b0b88", +2027 => x"ef38807b", +2028 => x"3483be3d", +2029 => x"f3941159", +2030 => x"f3900557", +2031 => x"6e566155", +2032 => x"6f547d52", +2033 => x"7e536a51", +2034 => x"0b0b0b9b", +2035 => x"b03f8008", +2036 => x"6080e732", +2037 => x"70307072", +2038 => x"079f2a51", +2039 => x"5b5ba13d", +2040 => x"0c7f80c7", +2041 => x"2e0b0b0b", +2042 => x"0b883878", +2043 => x"0b0b0b81", +2044 => x"e4386281", +2045 => x"0659780b", +2046 => x"0b0b81d9", +2047 => x"38a33d08", +2048 => x"5978a13d", +2049 => x"0831a53d", +2050 => x"0c6f6080", +2051 => x"e7327030", +2052 => x"70720780", +2053 => x"256380c7", +2054 => x"32703070", +2055 => x"72078025", +2056 => x"73075354", +2057 => x"5f515c5a", +2058 => x"5e79802e", +2059 => x"0b0b0b86", +2060 => x"f238a53d", +2061 => x"085afc7a", +2062 => x"250b0b0b", +2063 => x"0b8a3860", +2064 => x"7a250b0b", +2065 => x"0b82cc38", +2066 => x"80e5597f", +2067 => x"80e72e0b", +2068 => x"0b0b0b84", +2069 => x"3880c559", +2070 => x"78407f80", +2071 => x"e5240b0b", +2072 => x"0b86ca38", +2073 => x"ff1a70a7", +2074 => x"3d0c83b9", +2075 => x"3d715d43", +2076 => x"5a7f6234", +2077 => x"028ddd05", +2078 => x"5f807a24", +2079 => x"0b0b0b87", +2080 => x"c138ab7f", +2081 => x"34028dde", +2082 => x"05b33d70", +2083 => x"5c425f89", +2084 => x"7b250b0b", +2085 => x"0b818738", +2086 => x"ff1a8a7c", +2087 => x"36b0055a", +2088 => x"5a787a34", +2089 => x"8a7b355b", +2090 => x"7a89240b", +2091 => x"0b0b0be8", +2092 => x"38ff1ab0", +2093 => x"1c5a5a78", +2094 => x"7a347961", +2095 => x"270b0b0b", +2096 => x"80ed3879", +2097 => x"7081055b", +2098 => x"337f7081", +2099 => x"0541340b", +2100 => x"0b0b0be6", +2101 => x"39800862", +2102 => x"055b7f80", +2103 => x"e62e0b0b", +2104 => x"0b819838", +2105 => x"80598079", +2106 => x"54547d51", +2107 => x"7e520b0b", +2108 => x"81f0f63f", +2109 => x"80080b0b", +2110 => x"0b0b8538", +2111 => x"7aa43d0c", +2112 => x"a33d0859", +2113 => x"787b270b", +2114 => x"0b0bfdf5", +2115 => x"38b07934", +2116 => x"a33d0881", +2117 => x"05a43d0c", +2118 => x"0b0b0b0b", +2119 => x"e339b07f", +2120 => x"70810541", +2121 => x"34b01b59", +2122 => x"787f7081", +2123 => x"0541347e", +2124 => x"6231a53d", +2125 => x"08701241", +2126 => x"5a4d8179", +2127 => x"250b0b0b", +2128 => x"81a43881", +2129 => x"1f5f83bc", +2130 => x"3d335978", +2131 => x"802e0b0b", +2132 => x"0bd89e38", +2133 => x"ad0b83be", +2134 => x"3d340b0b", +2135 => x"0bd89239", +2136 => x"810b8008", +2137 => x"5a5a7f80", +2138 => x"c52e0981", +2139 => x"060b0b0b", +2140 => x"fc923881", +2141 => x"590b0b0b", +2142 => x"fc8a3980", +2143 => x"08335978", +2144 => x"b02e0b0b", +2145 => x"0b0bb438", +2146 => x"6e087b05", +2147 => x"5b0b0b0b", +2148 => x"fed23980", +2149 => x"e740a43d", +2150 => x"0859787a", +2151 => x"240b0b0b", +2152 => x"85883879", +2153 => x"6381065a", +2154 => x"5f78802e", +2155 => x"0b0b0bff", +2156 => x"9538811a", +2157 => x"5f0b0b0b", +2158 => x"ff8c3980", +2159 => x"59807954", +2160 => x"547d517e", +2161 => x"520b0b81", +2162 => x"f1b33f80", +2163 => x"08802e0b", +2164 => x"0b0bffb4", +2165 => x"38816231", +2166 => x"70a13d08", +2167 => x"0c7b055b", +2168 => x"0b0b0bfd", +2169 => x"ff396281", +2170 => x"06597880", +2171 => x"2e0b0b0b", +2172 => x"fed43881", +2173 => x"1f5f0b0b", +2174 => x"0bfecb39", +2175 => x"0b0b82f0", +2176 => x"f07c0c81", +2177 => x"0b841d0c", +2178 => x"83b73d08", +2179 => x"810583b8", +2180 => x"3d0c881c", +2181 => x"83b73d08", +2182 => x"811183b9", +2183 => x"3d0c8111", +2184 => x"515a5c78", +2185 => x"87240b0b", +2186 => x"0b829238", +2187 => x"790b0b0b", +2188 => x"0b8c38a4", +2189 => x"3d08802e", +2190 => x"0b0b0bda", +2191 => x"86386b7c", +2192 => x"0c810b84", +2193 => x"1d0c83b7", +2194 => x"3d088105", +2195 => x"83b83d0c", +2196 => x"881c83b7", +2197 => x"3d088111", +2198 => x"83b93d0c", +2199 => x"8111515a", +2200 => x"5c788724", +2201 => x"0b0b0b81", +2202 => x"f6387930", +2203 => x"5a807a25", +2204 => x"0b0b0b81", +2205 => x"8c38907a", +2206 => x"250b0b0b", +2207 => x"0bbd380b", +2208 => x"0b82edb4", +2209 => x"7c0c900b", +2210 => x"841d0c83", +2211 => x"b73d0890", +2212 => x"0583b83d", +2213 => x"0c881c83", +2214 => x"b73d0881", +2215 => x"1183b93d", +2216 => x"0c811151", +2217 => x"5a5c7887", +2218 => x"240b0b0b", +2219 => x"80ee38f0", +2220 => x"1a5a7990", +2221 => x"240b0b0b", +2222 => x"0bc5380b", +2223 => x"0b82edb4", +2224 => x"7c0c7984", +2225 => x"1d0c83b7", +2226 => x"3d081a83", +2227 => x"b83d0c88", +2228 => x"1c83b73d", +2229 => x"08811183", +2230 => x"b93d0c81", +2231 => x"11515a5c", +2232 => x"8779250b", +2233 => x"0b0b0b99", +2234 => x"3883be3d", +2235 => x"dc055266", +2236 => x"510b0b0b", +2237 => x"cf8b3f80", +2238 => x"080b0b0b", +2239 => x"df863865", +2240 => x"5c7d7c0c", +2241 => x"a43d0884", +2242 => x"1d0c83b7", +2243 => x"3d08a53d", +2244 => x"080583b8", +2245 => x"3d0c0b0b", +2246 => x"0bef8739", +2247 => x"83be3ddc", +2248 => x"05526651", +2249 => x"0b0b0bce", +2250 => x"d83f8008", +2251 => x"0b0b0bde", +2252 => x"d33865f0", +2253 => x"1b5b5c0b", +2254 => x"0b0bfef6", +2255 => x"3983be3d", +2256 => x"dc055266", +2257 => x"510b0b0b", +2258 => x"ceb73f80", +2259 => x"080b0b0b", +2260 => x"deb23865", +2261 => x"a63d085b", +2262 => x"5c0b0b0b", +2263 => x"fdce3983", +2264 => x"be3ddc05", +2265 => x"5266510b", +2266 => x"0b0bce95", +2267 => x"3f80080b", +2268 => x"0b0bde90", +2269 => x"3865a63d", +2270 => x"08703051", +2271 => x"5b5c7980", +2272 => x"240b0b0b", +2273 => x"fdf0380b", +2274 => x"0b0bfef5", +2275 => x"3986410b", +2276 => x"0b0be18a", +2277 => x"390b0b82", +2278 => x"f0fc5e86", +2279 => x"5f0b0b0b", +2280 => x"d3cf39a5", +2281 => x"3d085a0b", +2282 => x"0b0bf9ae", +2283 => x"397f80e6", +2284 => x"2e098106", +2285 => x"0b0b0bfb", +2286 => x"dd38807a", +2287 => x"250b0b0b", +2288 => x"81bc3879", +2289 => x"5f600b0b", +2290 => x"0b0b8e38", +2291 => x"62810659", +2292 => x"78802e0b", +2293 => x"0b0bfaee", +2294 => x"38601a81", +2295 => x"055f0b0b", +2296 => x"0bfae339", +2297 => x"83b73d08", +2298 => x"0b0b0b0b", +2299 => x"8d38800b", +2300 => x"83b73d0c", +2301 => x"0b0b0bdd", +2302 => x"8b3983be", +2303 => x"3ddc0552", +2304 => x"66510b0b", +2305 => x"0bccfa3f", +2306 => x"80080b0b", +2307 => x"0bdcf538", +2308 => x"800b83b7", +2309 => x"3d0c0b0b", +2310 => x"0bdce939", +2311 => x"7d810a32", +2312 => x"5ead7b34", +2313 => x"0b0b0bf7", +2314 => x"8839787a", +2315 => x"3182055f", +2316 => x"807a250b", +2317 => x"0b0bfa8e", +2318 => x"3881195f", +2319 => x"0b0b0bfa", +2320 => x"85397930", +2321 => x"5bad7f34", +2322 => x"028dde05", +2323 => x"b33d705c", +2324 => x"425f897b", +2325 => x"250b0b0b", +2326 => x"f9c4380b", +2327 => x"0b0bf8b8", +2328 => x"39646584", +2329 => x"05710843", +2330 => x"46596080", +2331 => x"250b0b0b", +2332 => x"d0a438ff", +2333 => x"7d335b41", +2334 => x"0b0b0bd0", +2335 => x"9c39600b", +2336 => x"0b0b0b90", +2337 => x"38628106", +2338 => x"59815f78", +2339 => x"802e0b0b", +2340 => x"0bf9b338", +2341 => x"6082055f", +2342 => x"0b0b0bf9", +2343 => x"a939fc3d", +2344 => x"0d0b0b82", +2345 => x"f4ec0855", +2346 => x"b8150880", +2347 => x"2e0b0b0b", +2348 => x"0b983878", +2349 => x"54775376", +2350 => x"520b0b82", +2351 => x"f4ec0851", +2352 => x"0b0b0bcb", +2353 => x"f63f863d", +2354 => x"0d047451", +2355 => x"0b0b0bbe", +2356 => x"8e3f7854", +2357 => x"77537652", +2358 => x"0b0b82f4", +2359 => x"ec08510b", +2360 => x"0b0bcbd7", +2361 => x"3f863d0d", +2362 => x"04f63d0d", +2363 => x"7c7e6159", +2364 => x"56588056", +2365 => x"74762e0b", +2366 => x"0b0b0ba3", +2367 => x"3876547e", +2368 => x"53745277", +2369 => x"510b0b0b", +2370 => x"83823f80", +2371 => x"08558008", +2372 => x"ff2e0b0b", +2373 => x"0b0ba938", +2374 => x"74800c8c", +2375 => x"3d0d0476", +2376 => x"5475538c", +2377 => x"3df40552", +2378 => x"77510b0b", +2379 => x"0b82dd3f", +2380 => x"80085580", +2381 => x"08ff2e09", +2382 => x"81060b0b", +2383 => x"0b0bd938", +2384 => x"80770c81", +2385 => x"8a780c74", +2386 => x"800c8c3d", +2387 => x"0d047070", +2388 => x"70707754", +2389 => x"76537552", +2390 => x"0b0b82f4", +2391 => x"ec08510b", +2392 => x"0b0bff85", +2393 => x"3f505050", +2394 => x"5004ec3d", +2395 => x"0d66686a", +2396 => x"6c6e735c", +2397 => x"405d4242", +2398 => x"4260802e", +2399 => x"0b0b0b81", +2400 => x"b2388060", +2401 => x"085a5d7c", +2402 => x"7a270b0b", +2403 => x"0b819b38", +2404 => x"933d5b7b", +2405 => x"08841d08", +2406 => x"7d567a08", +2407 => x"557c5463", +2408 => x"53405e0b", +2409 => x"0b0bfec1", +2410 => x"3f800858", +2411 => x"8008ff2e", +2412 => x"0b0b0b81", +2413 => x"9538807a", +2414 => x"80083156", +2415 => x"567c7526", +2416 => x"0b0b0b0b", +2417 => x"83388156", +2418 => x"80087a27", +2419 => x"0b0b0b80", +2420 => x"ea387580", +2421 => x"2e0b0b0b", +2422 => x"80e13880", +2423 => x"081d5d60", +2424 => x"802e0b0b", +2425 => x"0b0baa38", +2426 => x"80567580", +2427 => x"08250b0b", +2428 => x"0b0b9838", +2429 => x"751b5574", +2430 => x"33777081", +2431 => x"05593481", +2432 => x"16567776", +2433 => x"240b0b0b", +2434 => x"0bea387f", +2435 => x"08840560", +2436 => x"0c787084", +2437 => x"055a0855", +2438 => x"74802e0b", +2439 => x"0b0b0bb9", +2440 => x"38797d26", +2441 => x"0b0b0bfe", +2442 => x"ea387c55", +2443 => x"74800c96", +2444 => x"3d0d04ff", +2445 => x"5a0b0b0b", +2446 => x"fec8397d", +2447 => x"7c0c7e84", +2448 => x"1d0c7c55", +2449 => x"0b0b0b0b", +2450 => x"e339818a", +2451 => x"620c807c", +2452 => x"0c800880", +2453 => x"0c963d0d", +2454 => x"0460802e", +2455 => x"0b0b0b0b", +2456 => x"84387460", +2457 => x"0c747c0c", +2458 => x"ff1d800c", +2459 => x"963d0d04", +2460 => x"fc3d0d79", +2461 => x"55785477", +2462 => x"5376520b", +2463 => x"0b82f4ec", +2464 => x"08510b0b", +2465 => x"0bfde33f", +2466 => x"863d0d04", +2467 => x"f83d0d7b", +2468 => x"7d7f0b0b", +2469 => x"82fbec54", +2470 => x"5957550b", +2471 => x"0b818dfb", +2472 => x"3f800881", +2473 => x"260b0b0b", +2474 => x"0b983874", +2475 => x"5474802e", +2476 => x"0b0b0b0b", +2477 => x"86387575", +2478 => x"34815473", +2479 => x"800c8a3d", +2480 => x"0d040b0b", +2481 => x"82f18452", +2482 => x"0b0b82fb", +2483 => x"ec510b0b", +2484 => x"818c953f", +2485 => x"80080b0b", +2486 => x"0b81d838", +2487 => x"80085474", +2488 => x"802e0b0b", +2489 => x"0b0bd438", +2490 => x"80ff7625", +2491 => x"0b0b0b0b", +2492 => x"c538ff80", +2493 => x"16538eff", +2494 => x"73270b0b", +2495 => x"0b85e338", +2496 => x"f0801653", +2497 => x"83efff73", +2498 => x"270b0b0b", +2499 => x"82d838fc", +2500 => x"80801653", +2501 => x"80fbffff", +2502 => x"73270b0b", +2503 => x"0b85e838", +2504 => x"8fff0a16", +2505 => x"53f7c00a", +2506 => x"73270b0b", +2507 => x"0b86a638", +2508 => x"ff54c00a", +2509 => x"76250b0b", +2510 => x"0bff8038", +2511 => x"75820a06", +2512 => x"709e2c70", +2513 => x"fc075151", +2514 => x"53727570", +2515 => x"81055734", +2516 => x"7581fc0a", +2517 => x"0670982a", +2518 => x"ff800751", +2519 => x"53727570", +2520 => x"81055734", +2521 => x"7587f080", +2522 => x"80067092", +2523 => x"2aff8007", +2524 => x"51537275", +2525 => x"70810557", +2526 => x"34758fe0", +2527 => x"8006708c", +2528 => x"2aff8007", +2529 => x"51537275", +2530 => x"70810557", +2531 => x"34759fc0", +2532 => x"0670862a", +2533 => x"ff800751", +2534 => x"53727570", +2535 => x"81055734", +2536 => x"75ffbf06", +2537 => x"ff800753", +2538 => x"72753486", +2539 => x"0b800c8a", +2540 => x"3d0d040b", +2541 => x"0b82f18c", +2542 => x"520b0b82", +2543 => x"fbec510b", +2544 => x"0b818aa4", +2545 => x"3f80080b", +2546 => x"0b0b81f7", +2547 => x"387581ff", +2548 => x"0676882c", +2549 => x"7081ff06", +2550 => x"80085759", +2551 => x"54587480", +2552 => x"2e0b0b0b", +2553 => x"fdd53876", +2554 => x"802e0b0b", +2555 => x"0bfdbc38", +2556 => x"800880ff", +2557 => x"187081ff", +2558 => x"06515456", +2559 => x"729e260b", +2560 => x"0b0b0b83", +2561 => x"38815680", +2562 => x"08a01870", +2563 => x"81ff0651", +2564 => x"5454728f", +2565 => x"260b0b0b", +2566 => x"0b833881", +2567 => x"54757407", +2568 => x"5372802e", +2569 => x"0b0b0b0b", +2570 => x"b5388008", +2571 => x"c0195456", +2572 => x"72be260b", +2573 => x"0b0b0b83", +2574 => x"38815680", +2575 => x"08ff8019", +2576 => x"7081ff06", +2577 => x"51545472", +2578 => x"80fc260b", +2579 => x"0b0b0b83", +2580 => x"38815475", +2581 => x"74075372", +2582 => x"0b0b0b80", +2583 => x"d338ff0b", +2584 => x"800c8a3d", +2585 => x"0d04fcd0", +2586 => x"801653ff", +2587 => x"548fff73", +2588 => x"270b0b0b", +2589 => x"fcc53875", +2590 => x"83e08006", +2591 => x"708c2ae0", +2592 => x"07515372", +2593 => x"75708105", +2594 => x"5734759f", +2595 => x"c0067086", +2596 => x"2aff8007", +2597 => x"51537275", +2598 => x"70810557", +2599 => x"3475ffbf", +2600 => x"06ff8007", +2601 => x"53727534", +2602 => x"830b800c", +2603 => x"8a3d0d04", +2604 => x"76757081", +2605 => x"05573477", +2606 => x"75348254", +2607 => x"73800c8a", +2608 => x"3d0d040b", +2609 => x"0b82f194", +2610 => x"520b0b82", +2611 => x"fbec510b", +2612 => x"0b818894", +2613 => x"3f80080b", +2614 => x"0b0b80f8", +2615 => x"387581ff", +2616 => x"0676882c", +2617 => x"7081ff06", +2618 => x"80085759", +2619 => x"54587480", +2620 => x"2e0b0b0b", +2621 => x"fbc53876", +2622 => x"802e0b0b", +2623 => x"0bfbac38", +2624 => x"80085381", +2625 => x"a077270b", +2626 => x"0b0b0b83", +2627 => x"38815376", +2628 => x"81ff2e0b", +2629 => x"0b0bfec6", +2630 => x"38817074", +2631 => x"06545472", +2632 => x"802e0b0b", +2633 => x"0bfeb738", +2634 => x"80085381", +2635 => x"a078270b", +2636 => x"0b0b0b83", +2637 => x"38735377", +2638 => x"81ff2e0b", +2639 => x"0b0bfe9e", +2640 => x"38727406", +2641 => x"5372802e", +2642 => x"0b0b0bfe", +2643 => x"91380b0b", +2644 => x"0bfedd39", +2645 => x"0b0b82f1", +2646 => x"9c520b0b", +2647 => x"82fbec51", +2648 => x"0b0b8187", +2649 => x"833f8008", +2650 => x"0b0b0bfa", +2651 => x"be388008", +2652 => x"7681ff06", +2653 => x"77882c70", +2654 => x"81ff0659", +2655 => x"55595981", +2656 => x"5474802e", +2657 => x"0b0b0bfa", +2658 => x"b2387580", +2659 => x"2e0b0b0b", +2660 => x"82a538df", +2661 => x"16537280", +2662 => x"dd260b0b", +2663 => x"0bfdbf38", +2664 => x"df185372", +2665 => x"80dd260b", +2666 => x"0b0bfdb2", +2667 => x"3876080b", +2668 => x"0b0b0b9c", +2669 => x"3873770c", +2670 => x"9b757081", +2671 => x"055734a4", +2672 => x"75708105", +2673 => x"573480c2", +2674 => x"75708105", +2675 => x"57348359", +2676 => x"75757081", +2677 => x"05573477", +2678 => x"75348219", +2679 => x"800c8a3d", +2680 => x"0d04758f", +2681 => x"c0067086", +2682 => x"2ac00751", +2683 => x"53727570", +2684 => x"81055734", +2685 => x"75ffbf06", +2686 => x"ff800753", +2687 => x"72753482", +2688 => x"540b0b0b", +2689 => x"fdb63975", +2690 => x"80f08080", +2691 => x"0670922a", +2692 => x"f0075153", +2693 => x"72757081", +2694 => x"05573475", +2695 => x"8fe08006", +2696 => x"708c2aff", +2697 => x"80075153", +2698 => x"72757081", +2699 => x"05573475", +2700 => x"9fc00670", +2701 => x"862aff80", +2702 => x"07515372", +2703 => x"75708105", +2704 => x"573475ff", +2705 => x"bf06ff80", +2706 => x"07537275", +2707 => x"34840b80", +2708 => x"0c8a3d0d", +2709 => x"047581c0", +2710 => x"0a067098", +2711 => x"2af80751", +2712 => x"53727570", +2713 => x"81055734", +2714 => x"7587f080", +2715 => x"80067092", +2716 => x"2aff8007", +2717 => x"51537275", +2718 => x"70810557", +2719 => x"34758fe0", +2720 => x"8006708c", +2721 => x"2aff8007", +2722 => x"51537275", +2723 => x"70810557", +2724 => x"34759fc0", +2725 => x"0670862a", +2726 => x"ff800751", +2727 => x"53727570", +2728 => x"81055734", +2729 => x"75ffbf06", +2730 => x"ff800753", +2731 => x"72753485", +2732 => x"0b800c8a", +2733 => x"3d0d0476", +2734 => x"08802e0b", +2735 => x"0b0b0b9d", +2736 => x"38800877", +2737 => x"0c9b7570", +2738 => x"81055734", +2739 => x"a8757081", +2740 => x"05573480", +2741 => x"c2757081", +2742 => x"05573483", +2743 => x"59777534", +2744 => x"8119800c", +2745 => x"8a3d0d04", +2746 => x"fa3d0d78", +2747 => x"0b0b82f4", +2748 => x"ec085455", +2749 => x"b8130880", +2750 => x"2e0b0b0b", +2751 => x"81dc388c", +2752 => x"15227083", +2753 => x"ffff0670", +2754 => x"832a8132", +2755 => x"70810651", +2756 => x"55555672", +2757 => x"802e0b0b", +2758 => x"0b80f038", +2759 => x"73842a81", +2760 => x"32810657", +2761 => x"ff53760b", +2762 => x"0b0b8193", +2763 => x"3873822a", +2764 => x"70810651", +2765 => x"5372802e", +2766 => x"0b0b0b80", +2767 => x"c638b015", +2768 => x"08547380", +2769 => x"2e0b0b0b", +2770 => x"0ba53880", +2771 => x"c0155373", +2772 => x"732e0b0b", +2773 => x"0b0b9438", +2774 => x"73520b0b", +2775 => x"82f4ec08", +2776 => x"510b0b0b", +2777 => x"b5d23f8c", +2778 => x"15225676", +2779 => x"b0160c75", +2780 => x"db065372", +2781 => x"8c162380", +2782 => x"0b84160c", +2783 => x"90150875", +2784 => x"0c725675", +2785 => x"88075372", +2786 => x"8c162390", +2787 => x"1508802e", +2788 => x"0b0b0b80", +2789 => x"d3388c15", +2790 => x"22708106", +2791 => x"5553730b", +2792 => x"0b0b0ba2", +2793 => x"38720a10", +2794 => x"0a708106", +2795 => x"5153720b", +2796 => x"0b0b0b85", +2797 => x"38941508", +2798 => x"54738816", +2799 => x"0c805372", +2800 => x"800c883d", +2801 => x"0d04800b", +2802 => x"88160c94", +2803 => x"15083098", +2804 => x"160c8053", +2805 => x"0b0b0b0b", +2806 => x"e6397251", +2807 => x"0b0b0baf", +2808 => x"fe3f0b0b", +2809 => x"0bfe9839", +2810 => x"74510b0b", +2811 => x"80c4ef3f", +2812 => x"8c152270", +2813 => x"81065553", +2814 => x"73802e0b", +2815 => x"0b0bffa5", +2816 => x"380b0b0b", +2817 => x"0bc039ef", +2818 => x"3d0d6365", +2819 => x"9011085e", +2820 => x"40408053", +2821 => x"7b609005", +2822 => x"08240b0b", +2823 => x"0b81d038", +2824 => x"941f70ff", +2825 => x"1e70822b", +2826 => x"73116494", +2827 => x"05705c43", +2828 => x"5f610570", +2829 => x"087f0881", +2830 => x"0557555c", +2831 => x"5e42570b", +2832 => x"0b81ebf8", +2833 => x"3f80085d", +2834 => x"80080b0b", +2835 => x"0b81a738", +2836 => x"7e527f51", +2837 => x"0b0b80e9", +2838 => x"803f800b", +2839 => x"8008240b", +2840 => x"0b0b8189", +2841 => x"38811d5d", +2842 => x"80707f63", +2843 => x"5a585b58", +2844 => x"76708405", +2845 => x"58087083", +2846 => x"ffff067b", +2847 => x"0571902a", +2848 => x"71902a05", +2849 => x"70902a5d", +2850 => x"5283ffff", +2851 => x"06821822", +2852 => x"7072311b", +2853 => x"585b5483", +2854 => x"ffff0676", +2855 => x"22707231", +2856 => x"77902c05", +2857 => x"70902c5b", +2858 => x"52435372", +2859 => x"76237482", +2860 => x"17238416", +2861 => x"567a7727", +2862 => x"0b0b0bff", +2863 => x"b3387b10", +2864 => x"101e5978", +2865 => x"080b0b0b", +2866 => x"0ba338fc", +2867 => x"19597d79", +2868 => x"270b0b0b", +2869 => x"0b923878", +2870 => x"080b0b0b", +2871 => x"0b8a38ff", +2872 => x"1c5c0b0b", +2873 => x"0b0be439", +2874 => x"7b609005", +2875 => x"0c7c5372", +2876 => x"800c933d", +2877 => x"0d048070", +2878 => x"5b587670", +2879 => x"84055808", +2880 => x"7083ffff", +2881 => x"06707f29", +2882 => x"1c72902a", +2883 => x"60297190", +2884 => x"2a057090", +2885 => x"2a5e5283", +2886 => x"ffff0682", +2887 => x"19227072", +2888 => x"311c5945", +2889 => x"5283ffff", +2890 => x"06772270", +2891 => x"72317890", +2892 => x"2c057090", +2893 => x"2c5c5256", +2894 => x"51537276", +2895 => x"23748217", +2896 => x"23841656", +2897 => x"7a77270b", +2898 => x"0b0bffae", +2899 => x"3878080b", +2900 => x"0b0bfdfc", +2901 => x"38fc1959", +2902 => x"7d79270b", +2903 => x"0b0b0b92", +2904 => x"3878080b", +2905 => x"0b0b0b8a", +2906 => x"38ff1c5c", +2907 => x"0b0b0b0b", +2908 => x"e4397b60", +2909 => x"90050c0b", +2910 => x"0b0bfdd4", +2911 => x"398c08c8", +2912 => x"3d0dbc3d", +2913 => x"0880c03d", +2914 => x"0880c23d", +2915 => x"0880c53d", +2916 => x"0880c73d", +2917 => x"088c0c5d", +2918 => x"4b434080", +2919 => x"0bbe3d08", +2920 => x"80c03d08", +2921 => x"5bba3d0c", +2922 => x"79bb3d0c", +2923 => x"6080c005", +2924 => x"08574875", +2925 => x"682e0981", +2926 => x"060b0b0b", +2927 => x"80ea38b8", +2928 => x"3d085780", +2929 => x"77240b0b", +2930 => x"0b818c38", +2931 => x"677a0c76", +2932 => x"9ffe0a06", +2933 => x"56759ffe", +2934 => x"0a2e0b0b", +2935 => x"0b819838", +2936 => x"b83d08ba", +2937 => x"3d085a58", +2938 => x"80568076", +2939 => x"54547751", +2940 => x"78520b0b", +2941 => x"81d6f23f", +2942 => x"80080b0b", +2943 => x"0b81c638", +2944 => x"80c13d08", +2945 => x"5881780c", +2946 => x"0b0b82f0", +2947 => x"f05f8c08", +2948 => x"802e0b0b", +2949 => x"0b0b8638", +2950 => x"811f8c08", +2951 => x"0c7e5675", +2952 => x"800cba3d", +2953 => x"0d8c0c04", +2954 => x"7f80c405", +2955 => x"0884170c", +2956 => x"816080c4", +2957 => x"05082b88", +2958 => x"170c7552", +2959 => x"7f510b0b", +2960 => x"80d8ad3f", +2961 => x"676080c0", +2962 => x"050cb83d", +2963 => x"08577680", +2964 => x"250b0b0b", +2965 => x"fef63881", +2966 => x"7a0c76fe", +2967 => x"0a0670ba", +2968 => x"3d0c709f", +2969 => x"fe0a0657", +2970 => x"57759ffe", +2971 => x"0a2e0981", +2972 => x"060b0b0b", +2973 => x"feea3880", +2974 => x"c13d0856", +2975 => x"80ce8f76", +2976 => x"0cb93d08", +2977 => x"0b0b0b84", +2978 => x"c93876bf", +2979 => x"ffff060b", +2980 => x"0b82f1a4", +2981 => x"4056750b", +2982 => x"0b0b84b6", +2983 => x"388c0880", +2984 => x"2e0b0b0b", +2985 => x"fef73883", +2986 => x"1f337f88", +2987 => x"05585675", +2988 => x"0b0b0b0b", +2989 => x"8438831f", +2990 => x"57768c08", +2991 => x"0c7e560b", +2992 => x"0b0bfedb", +2993 => x"39ba3dff", +2994 => x"b41156ff", +2995 => x"b0055477", +2996 => x"5278537f", +2997 => x"510b0b80", +2998 => x"eaa43f80", +2999 => x"08b93d08", +3000 => x"70942a8f", +3001 => x"ff065e59", +3002 => x"417b0b0b", +3003 => x"0b83ef38", +3004 => x"a73d08a7", +3005 => x"3d080588", +3006 => x"b2115d56", +3007 => x"a07c250b", +3008 => x"0b0b8ff4", +3009 => x"3880c07c", +3010 => x"31889217", +3011 => x"79722bbc", +3012 => x"3d08722a", +3013 => x"07b53d71", +3014 => x"5670555d", +3015 => x"5157570b", +3016 => x"0b81dfa9", +3017 => x"3fb23d08", +3018 => x"b43d08b2", +3019 => x"3d5d5a58", +3020 => x"8076240b", +3021 => x"0b0b93f5", +3022 => x"3877b73d", +3023 => x"0c78b83d", +3024 => x"0cb63d08", +3025 => x"90ff0a05", +3026 => x"b73d0cf7", +3027 => x"cd1c5c81", +3028 => x"4ebffc0a", +3029 => x"56807655", +3030 => x"55b63d08", +3031 => x"b83d0858", +3032 => x"5276537a", +3033 => x"510b0b81", +3034 => x"a2803f83", +3035 => x"feca8fa7", +3036 => x"56869bbd", +3037 => x"86e17655", +3038 => x"55b03d08", +3039 => x"b23d0858", +3040 => x"52765379", +3041 => x"510b0b81", +3042 => x"a3933f83", +3043 => x"fe9a94a8", +3044 => x"56f8db83", +3045 => x"91b37655", +3046 => x"55b23d08", +3047 => x"b43d0858", +3048 => x"527653ba", +3049 => x"3dd00551", +3050 => x"0b0b81a0", +3051 => x"963fae3d", +3052 => x"08b03d08", +3053 => x"7d54ae3d", +3054 => x"535a580b", +3055 => x"0b81de8d", +3056 => x"3faa3d4c", +3057 => x"83fecd88", +3058 => x"93568584", +3059 => x"fdf3fb76", +3060 => x"5555ac3d", +3061 => x"08ae3d08", +3062 => x"58527653", +3063 => x"6b510b0b", +3064 => x"81a2ba3f", +3065 => x"a83dab3d", +3066 => x"08ad3d08", +3067 => x"59557756", +3068 => x"78537954", +3069 => x"7052450b", +3070 => x"0b819fc7", +3071 => x"3fa83d08", +3072 => x"aa3d0871", +3073 => x"5370545f", +3074 => x"5d0b0b81", +3075 => x"dfdf3f80", +3076 => x"08438056", +3077 => x"80765454", +3078 => x"7c517d52", +3079 => x"0b0b81d9", +3080 => x"843f800b", +3081 => x"8008240b", +3082 => x"0b0b8eae", +3083 => x"38810ba2", +3084 => x"3d0c6296", +3085 => x"260b0b0b", +3086 => x"0bb23862", +3087 => x"1010100b", +3088 => x"0b82f2d8", +3089 => x"05841108", +3090 => x"71085555", +3091 => x"b93d08bb", +3092 => x"3d085952", +3093 => x"5676520b", +3094 => x"0b81d8c9", +3095 => x"3f800b80", +3096 => x"08246371", +3097 => x"31445680", +3098 => x"0ba23d0c", +3099 => x"a73d087c", +3100 => x"31ff055a", +3101 => x"807a454b", +3102 => x"6a7a240b", +3103 => x"0b0b8da9", +3104 => x"38806324", +3105 => x"0b0b0ba0", +3106 => x"8b38800b", +3107 => x"a63d0c62", +3108 => x"4f636305", +3109 => x"44896227", +3110 => x"0b0b0b0b", +3111 => x"83388042", +3112 => x"81588562", +3113 => x"250b0b0b", +3114 => x"0b873861", +3115 => x"fc054280", +3116 => x"58810ba1", +3117 => x"3d0cff70", +3118 => x"a53d0c46", +3119 => x"6185260b", +3120 => x"0b0b82bd", +3121 => x"38611010", +3122 => x"0b0b82f1", +3123 => x"b0055675", +3124 => x"08040b0b", +3125 => x"82f0f85f", +3126 => x"0b0b0bfb", +3127 => x"c039b83d", +3128 => x"08ba3d08", +3129 => x"58b73d0c", +3130 => x"76b83d0c", +3131 => x"b63d08fc", +3132 => x"0a069ffc", +3133 => x"0a07b73d", +3134 => x"0cf8811c", +3135 => x"5c804eb2", +3136 => x"3db13d5c", +3137 => x"5abffc0a", +3138 => x"56807655", +3139 => x"55b63d08", +3140 => x"b83d0858", +3141 => x"5276537a", +3142 => x"510b0b81", +3143 => x"9ecc3f83", +3144 => x"feca8fa7", +3145 => x"56869bbd", +3146 => x"86e17655", +3147 => x"55b03d08", +3148 => x"b23d0858", +3149 => x"52765379", +3150 => x"510b0b81", +3151 => x"9fdf3f83", +3152 => x"fe9a94a8", +3153 => x"56f8db83", +3154 => x"91b37655", +3155 => x"55b23d08", +3156 => x"b43d0858", +3157 => x"527653ba", +3158 => x"3dd00551", +3159 => x"0b0b819c", +3160 => x"e23fae3d", +3161 => x"08b03d08", +3162 => x"7d54ae3d", +3163 => x"535a580b", +3164 => x"0b81dad9", +3165 => x"3faa3d4c", +3166 => x"83fecd88", +3167 => x"93568584", +3168 => x"fdf3fb76", +3169 => x"5555ac3d", +3170 => x"08ae3d08", +3171 => x"58527653", +3172 => x"6b510b0b", +3173 => x"819f863f", +3174 => x"a83dab3d", +3175 => x"08ad3d08", +3176 => x"59557756", +3177 => x"78537954", +3178 => x"7052450b", +3179 => x"0b819c93", +3180 => x"3fa83d08", +3181 => x"aa3d0871", +3182 => x"5370545f", +3183 => x"5d0b0b81", +3184 => x"dcab3f80", +3185 => x"08438056", +3186 => x"80765454", +3187 => x"7c517d52", +3188 => x"0b0b81d5", +3189 => x"d03f8008", +3190 => x"80250b0b", +3191 => x"0bfcce38", +3192 => x"0b0b0b8a", +3193 => x"f539800b", +3194 => x"a13d0c68", +3195 => x"63058111", +3196 => x"70485da4", +3197 => x"3d0c7b80", +3198 => x"240b0b0b", +3199 => x"0b833881", +3200 => x"5c845a80", +3201 => x"6080c405", +3202 => x"0c987c26", +3203 => x"0b0b0b0b", +3204 => x"9b388057", +3205 => x"81177a10", +3206 => x"9411585b", +3207 => x"577b7627", +3208 => x"0b0b0b0b", +3209 => x"ef387660", +3210 => x"80c4050c", +3211 => x"7f80c405", +3212 => x"08527f51", +3213 => x"0b0b80cf", +3214 => x"903f8008", +3215 => x"6080c005", +3216 => x"0c800880", +3217 => x"088e6827", +3218 => x"58404d77", +3219 => x"802e0b0b", +3220 => x"0b86fd38", +3221 => x"75802e0b", +3222 => x"0b0b86f4", +3223 => x"38b83d08", +3224 => x"ba3d0871", +3225 => x"b93d0c70", +3226 => x"ba3d0c64", +3227 => x"a53d0c67", +3228 => x"a73d0c5a", +3229 => x"58825c80", +3230 => x"63250b0b", +3231 => x"0b8cae38", +3232 => x"62832b80", +3233 => x"f8060b0b", +3234 => x"82f2d811", +3235 => x"080b0b82", +3236 => x"f2dc1208", +3237 => x"65842c70", +3238 => x"842a7081", +3239 => x"0651545d", +3240 => x"405e5675", +3241 => x"0b0b0b8a", +3242 => x"8a387980", +3243 => x"2e0b0b0b", +3244 => x"0ba8380b", +3245 => x"0b82f2b0", +3246 => x"58798106", +3247 => x"56750b0b", +3248 => x"0b88f138", +3249 => x"79812c88", +3250 => x"19595a79", +3251 => x"0b0b0b0b", +3252 => x"e838b83d", +3253 => x"08ba3d08", +3254 => x"5a587c54", +3255 => x"7d557752", +3256 => x"78536451", +3257 => x"0b0b81bb", +3258 => x"b43fa83d", +3259 => x"08aa3d08", +3260 => x"71bb3d0c", +3261 => x"70bc3d0c", +3262 => x"5a58a13d", +3263 => x"08802e0b", +3264 => x"0b0b80eb", +3265 => x"38805a9f", +3266 => x"fc0a5680", +3267 => x"76545477", +3268 => x"5178520b", +3269 => x"0b81d38d", +3270 => x"3f798008", +3271 => x"240b0b0b", +3272 => x"8def3880", +3273 => x"66250b0b", +3274 => x"0b80c438", +3275 => x"79802e0b", +3276 => x"0b0b0bbb", +3277 => x"38800ba4", +3278 => x"3d08250b", +3279 => x"0b0b84f8", +3280 => x"38a33d08", +3281 => x"63ff0544", +3282 => x"4680c882", +3283 => x"0a568076", +3284 => x"55557752", +3285 => x"78536451", +3286 => x"0b0b819b", +3287 => x"c03fa83d", +3288 => x"08aa3d08", +3289 => x"5ab93d0c", +3290 => x"78ba3d0c", +3291 => x"811c5c7b", +3292 => x"5264510b", +3293 => x"0b81d6d5", +3294 => x"3fb83d08", +3295 => x"ba3d0858", +3296 => x"547655a8", +3297 => x"3d08aa3d", +3298 => x"08585276", +3299 => x"536b510b", +3300 => x"0b819b89", +3301 => x"3f80f082", +3302 => x"0a568076", +3303 => x"5555aa3d", +3304 => x"08ac3d08", +3305 => x"58527653", +3306 => x"ac3d510b", +3307 => x"0b819893", +3308 => x"3fac3d08", +3309 => x"ae3d0858", +3310 => x"b53d0c76", +3311 => x"b63d0cb4", +3312 => x"3d0886bf", +3313 => x"0a05b53d", +3314 => x"0c65802e", +3315 => x"0b0b0b9b", +3316 => x"c9386f80", +3317 => x"2e0b0b0b", +3318 => x"99e23865", +3319 => x"1010100b", +3320 => x"0b82f2d0", +3321 => x"05841108", +3322 => x"71085656", +3323 => x"568ffc0a", +3324 => x"56807653", +3325 => x"5364510b", +3326 => x"0b81b9a1", +3327 => x"3fb43d08", +3328 => x"b63d0858", +3329 => x"547655a8", +3330 => x"3d08aa3d", +3331 => x"08585276", +3332 => x"536b510b", +3333 => x"0b8198d2", +3334 => x"3faa3d08", +3335 => x"ac3d0858", +3336 => x"b53d0c76", +3337 => x"b63d0c80", +3338 => x"0bb93d08", +3339 => x"bb3d085b", +3340 => x"595c80c8", +3341 => x"820a5d80", +3342 => x"5e775178", +3343 => x"520b0b81", +3344 => x"d7ab3f80", +3345 => x"08800853", +3346 => x"65525a0b", +3347 => x"0b81d4fd", +3348 => x"3fa83d08", +3349 => x"aa3d0858", +3350 => x"547655b8", +3351 => x"3d08ba3d", +3352 => x"08585276", +3353 => x"536b510b", +3354 => x"0b8197fe", +3355 => x"3faa3d08", +3356 => x"ac3d085a", +3357 => x"b93d0c78", +3358 => x"ba3d0cb0", +3359 => x"1a56757f", +3360 => x"70810541", +3361 => x"34b83d08", +3362 => x"ba3d08b6", +3363 => x"3d08b83d", +3364 => x"085a5578", +3365 => x"56715370", +3366 => x"545a580b", +3367 => x"0b81d085", +3368 => x"3f800b80", +3369 => x"08240b0b", +3370 => x"0b87d438", +3371 => x"77547855", +3372 => x"9ffc0a56", +3373 => x"80765353", +3374 => x"64510b0b", +3375 => x"8197ab3f", +3376 => x"b43d08b6", +3377 => x"3d087155", +3378 => x"7056aa3d", +3379 => x"08ac3d08", +3380 => x"5a537854", +3381 => x"5a580b0b", +3382 => x"81cfca3f", +3383 => x"800b8008", +3384 => x"240b0b0b", +3385 => x"86e63881", +3386 => x"1c5c7b66", +3387 => x"250b0b0b", +3388 => x"81c6387c", +3389 => x"547d5577", +3390 => x"5278536b", +3391 => x"510b0b81", +3392 => x"989b3faa", +3393 => x"3d08ac3d", +3394 => x"0858b53d", +3395 => x"0c76b63d", +3396 => x"0c7c547d", +3397 => x"55b83d08", +3398 => x"ba3d0858", +3399 => x"52765364", +3400 => x"510b0b81", +3401 => x"97f73fa8", +3402 => x"3d08aa3d", +3403 => x"0871bb3d", +3404 => x"0c70bc3d", +3405 => x"0c5a580b", +3406 => x"0b0bfdfd", +3407 => x"398ffc0a", +3408 => x"58807855", +3409 => x"7056b53d", +3410 => x"08b73d08", +3411 => x"59537754", +3412 => x"6552590b", +3413 => x"0b8194eb", +3414 => x"3fa83d08", +3415 => x"aa3d0858", +3416 => x"537654b8", +3417 => x"3d08ba3d", +3418 => x"08585176", +3419 => x"520b0b81", +3420 => x"cc9f3f80", +3421 => x"0880240b", +3422 => x"0b0b85d0", +3423 => x"38b43d08", +3424 => x"b63d0858", +3425 => x"54765577", +3426 => x"5278536b", +3427 => x"510b0b81", +3428 => x"95d83faa", +3429 => x"3d08ac3d", +3430 => x"08585376", +3431 => x"54b83d08", +3432 => x"ba3d0858", +3433 => x"5176520b", +3434 => x"0b81cdf9", +3435 => x"3f800b80", +3436 => x"08240b0b", +3437 => x"0b97cb38", +3438 => x"6cb73d08", +3439 => x"b93d085b", +3440 => x"ba3d0c79", +3441 => x"bb3d0ca3", +3442 => x"3d08a63d", +3443 => x"0848445f", +3444 => x"800ba73d", +3445 => x"08575877", +3446 => x"76240b0b", +3447 => x"0b0b8338", +3448 => x"81588078", +3449 => x"0657628e", +3450 => x"240b0b0b", +3451 => x"89ad3881", +3452 => x"70790658", +3453 => x"5976802e", +3454 => x"0b0b0b89", +3455 => x"9e386210", +3456 => x"10100b0b", +3457 => x"82f2d805", +3458 => x"70088412", +3459 => x"08806c24", +3460 => x"53405e56", +3461 => x"8066250b", +3462 => x"0b0b86c9", +3463 => x"38810bb9", +3464 => x"3d08bb3d", +3465 => x"085b595c", +3466 => x"7c547d55", +3467 => x"77527853", +3468 => x"64510b0b", +3469 => x"81b4e63f", +3470 => x"a83d08aa", +3471 => x"3d085851", +3472 => x"76520b0b", +3473 => x"81d3a63f", +3474 => x"80088008", +3475 => x"5365525a", +3476 => x"0b0b81d0", +3477 => x"f83f7c54", +3478 => x"7d55a83d", +3479 => x"08aa3d08", +3480 => x"58527653", +3481 => x"6b510b0b", +3482 => x"8195b23f", +3483 => x"aa3d08ac", +3484 => x"3d085854", +3485 => x"7655b83d", +3486 => x"08ba3d08", +3487 => x"58527653", +3488 => x"ac3d510b", +3489 => x"0b8193e2", +3490 => x"3fac3d08", +3491 => x"ae3d085a", +3492 => x"b93d0c78", +3493 => x"ba3d0cb0", +3494 => x"1a56757f", +3495 => x"70810541", +3496 => x"347b662e", +3497 => x"0b0b0b82", +3498 => x"c23880c8", +3499 => x"820a5680", +3500 => x"765555b8", +3501 => x"3d08ba3d", +3502 => x"08585276", +3503 => x"5364510b", +3504 => x"0b8194d9", +3505 => x"3fa83d08", +3506 => x"aa3d0871", +3507 => x"bb3d0c70", +3508 => x"bc3d0c5a", +3509 => x"58805680", +3510 => x"76545477", +3511 => x"5178520b", +3512 => x"0b81c585", +3513 => x"3f800880", +3514 => x"2e0b0b0b", +3515 => x"83913881", +3516 => x"1c5c0b0b", +3517 => x"0bfeb139", +3518 => x"a07c31ba", +3519 => x"3d08712b", +3520 => x"b43d7155", +3521 => x"70545c51", +3522 => x"560b0b81", +3523 => x"cfbf3fb2", +3524 => x"3d08b43d", +3525 => x"08b23d5d", +3526 => x"5a587580", +3527 => x"250b0b0b", +3528 => x"f097380b", +3529 => x"0b0b8485", +3530 => x"3979304b", +3531 => x"80440b0b", +3532 => x"0bf2ce39", +3533 => x"811c7808", +3534 => x"841a0859", +3535 => x"5577567d", +3536 => x"537e5465", +3537 => x"525c0b0b", +3538 => x"8193d23f", +3539 => x"a83d08aa", +3540 => x"3d085f5d", +3541 => x"0b0b0bf6", +3542 => x"eb396252", +3543 => x"64510b0b", +3544 => x"81ceea3f", +3545 => x"7c537d54", +3546 => x"a83d08aa", +3547 => x"3d085851", +3548 => x"76520b0b", +3549 => x"81c6863f", +3550 => x"80083070", +3551 => x"8008079f", +3552 => x"2a647131", +3553 => x"4551560b", +3554 => x"0b0bf1a1", +3555 => x"39800ba1", +3556 => x"3d0c8069", +3557 => x"250b0b0b", +3558 => x"84e73868", +3559 => x"69a53d0c", +3560 => x"69475c0b", +3561 => x"0b0bf4d9", +3562 => x"39925c80", +3563 => x"490b0b0b", +3564 => x"f4cf3979", +3565 => x"8f060b0b", +3566 => x"82f2d008", +3567 => x"0b0b82f2", +3568 => x"d4085955", +3569 => x"77567853", +3570 => x"79546552", +3571 => x"5a0b0b81", +3572 => x"b1cb3fa8", +3573 => x"3d08aa3d", +3574 => x"0871bb3d", +3575 => x"0c70bc3d", +3576 => x"0c5a5883", +3577 => x"5c0b0b0b", +3578 => x"f5c039b8", +3579 => x"3d08ba3d", +3580 => x"08715670", +3581 => x"57585276", +3582 => x"5364510b", +3583 => x"0b818fc3", +3584 => x"3fa83d08", +3585 => x"aa3d0871", +3586 => x"bb3d0c70", +3587 => x"bc3d0c7e", +3588 => x"557f5671", +3589 => x"5370545a", +3590 => x"580b0b81", +3591 => x"c6f33f80", +3592 => x"0880240b", +3593 => x"0b0b0ba4", +3594 => x"387c537d", +3595 => x"54775178", +3596 => x"520b0b81", +3597 => x"c2b33f80", +3598 => x"080b0b0b", +3599 => x"80c13879", +3600 => x"81065675", +3601 => x"802e0b0b", +3602 => x"0b0bb438", +3603 => x"ff1f7033", +3604 => x"575f75b9", +3605 => x"2e098106", +3606 => x"0b0b0b0b", +3607 => x"94387e6d", +3608 => x"2e098106", +3609 => x"0b0b0b0b", +3610 => x"e3386281", +3611 => x"0543b06d", +3612 => x"347e7f81", +3613 => x"05713381", +3614 => x"05584057", +3615 => x"75773460", +3616 => x"527f510b", +3617 => x"0b80c3e8", +3618 => x"3f807f34", +3619 => x"80c13d08", +3620 => x"63810571", +3621 => x"0c568c08", +3622 => x"802e0b0b", +3623 => x"0b0b8538", +3624 => x"7e8c080c", +3625 => x"6c800cba", +3626 => x"3d0d8c0c", +3627 => x"0462305b", +3628 => x"7a802e0b", +3629 => x"0b0bf4c2", +3630 => x"387a832b", +3631 => x"80f8060b", +3632 => x"0b82f2dc", +3633 => x"11080b0b", +3634 => x"82f2d812", +3635 => x"08565678", +3636 => x"53795465", +3637 => x"52560b0b", +3638 => x"8190c23f", +3639 => x"a83d08aa", +3640 => x"3d0871bb", +3641 => x"3d0c70bc", +3642 => x"3d0c7c84", +3643 => x"2c5c5a58", +3644 => x"79802e0b", +3645 => x"0b0bf482", +3646 => x"380b0b82", +3647 => x"f2b07a81", +3648 => x"06575b75", +3649 => x"0b0b0b82", +3650 => x"90387981", +3651 => x"2c881c5c", +3652 => x"5a79802e", +3653 => x"0b0b0bf3", +3654 => x"e1387981", +3655 => x"06567580", +3656 => x"2e0b0b0b", +3657 => x"0be4380b", +3658 => x"0b0b81ed", +3659 => x"399f820a", +3660 => x"56807655", +3661 => x"55775278", +3662 => x"537a510b", +3663 => x"0b818d83", +3664 => x"3fb03d08", +3665 => x"b23d085a", +3666 => x"b73d0c78", +3667 => x"b83d0cb6", +3668 => x"3d0890ff", +3669 => x"0a05b73d", +3670 => x"0cf7cd1c", +3671 => x"5c814e0b", +3672 => x"0b0bebed", +3673 => x"39757906", +3674 => x"5675802e", +3675 => x"0b0b0bf9", +3676 => x"ac388070", +3677 => x"484a6966", +3678 => x"240b0b0b", +3679 => x"82943880", +3680 => x"d0820a56", +3681 => x"80765555", +3682 => x"7c527d53", +3683 => x"64510b0b", +3684 => x"818f8a3f", +3685 => x"a83d08aa", +3686 => x"3d085853", +3687 => x"7654b83d", +3688 => x"08ba3d08", +3689 => x"58517652", +3690 => x"0b0b81c8", +3691 => x"8c3f6980", +3692 => x"08250b0b", +3693 => x"0b81db38", +3694 => x"6c5fb17f", +3695 => x"70810541", +3696 => x"34628105", +3697 => x"4366527f", +3698 => x"510b0b80", +3699 => x"c1a23f69", +3700 => x"802e0b0b", +3701 => x"0bfda838", +3702 => x"67307069", +3703 => x"079f2a51", +3704 => x"56676a2e", +3705 => x"0b0b0b0b", +3706 => x"8838750b", +3707 => x"0b0b80e5", +3708 => x"3869527f", +3709 => x"510b0b80", +3710 => x"c0f63f0b", +3711 => x"0b0bfcff", +3712 => x"39817071", +3713 => x"a63d0c71", +3714 => x"485d490b", +3715 => x"0b0beff1", +3716 => x"39815a0b", +3717 => x"0b0bf28b", +3718 => x"39811c7b", +3719 => x"08841d08", +3720 => x"59557756", +3721 => x"78537954", +3722 => x"65525c0b", +3723 => x"0b818ded", +3724 => x"3fa83d08", +3725 => x"aa3d0871", +3726 => x"bb3d0c70", +3727 => x"bc3d0c7b", +3728 => x"812c881e", +3729 => x"5e5c5a58", +3730 => x"790b0b0b", +3731 => x"fdcc380b", +3732 => x"0b0bf1a6", +3733 => x"3967527f", +3734 => x"510b0b80", +3735 => x"c0923f69", +3736 => x"527f510b", +3737 => x"0b80c088", +3738 => x"3f0b0b0b", +3739 => x"fc913977", +3740 => x"810a3253", +3741 => x"78547951", +3742 => x"7a520b0b", +3743 => x"81c4a63f", +3744 => x"80088025", +3745 => x"0b0b0bf6", +3746 => x"af3879b9", +3747 => x"3d0c7aba", +3748 => x"3d0c6809", +3749 => x"430b0b0b", +3750 => x"feab396a", +3751 => x"a63d0878", +3752 => x"794b4c59", +3753 => x"596f802e", +3754 => x"0b0b0b80", +3755 => x"d0388162", +3756 => x"250b0b0b", +3757 => x"8ec73865", +3758 => x"ff05a63d", +3759 => x"08713159", +3760 => x"5aa53d08", +3761 => x"7a250b0b", +3762 => x"0b0b9438", +3763 => x"79a63d08", +3764 => x"316f11a1", +3765 => x"3d0ca63d", +3766 => x"0805a63d", +3767 => x"0c765865", +3768 => x"5c806624", +3769 => x"0b0b0b84", +3770 => x"cb386a1c", +3771 => x"641d454b", +3772 => x"81527f51", +3773 => x"0b0b80c4", +3774 => x"de3f8008", +3775 => x"4a788024", +3776 => x"56806425", +3777 => x"0b0b0b0b", +3778 => x"a3387580", +3779 => x"2e0b0b0b", +3780 => x"0b9a3863", +3781 => x"5c786425", +3782 => x"0b0b0b0b", +3783 => x"8338785c", +3784 => x"6a7c3179", +3785 => x"7d31657e", +3786 => x"31465a4b", +3787 => x"800ba63d", +3788 => x"08250b0b", +3789 => x"0b80cb38", +3790 => x"6f802e0b", +3791 => x"0b0b8ae5", +3792 => x"38807825", +3793 => x"0b0b0b0b", +3794 => x"ac387753", +3795 => x"69527f51", +3796 => x"0b0b80c7", +3797 => x"943f8008", +3798 => x"61548008", +3799 => x"5360524a", +3800 => x"0b0b80c4", +3801 => x"8e3f8008", +3802 => x"61536052", +3803 => x"560b0b0b", +3804 => x"bdfe3f75", +3805 => x"41a53d08", +3806 => x"78315a79", +3807 => x"0b0b0b83", +3808 => x"9e388152", +3809 => x"7f510b0b", +3810 => x"80c3cc3f", +3811 => x"80084780", +3812 => x"6f250b0b", +3813 => x"0b0b9138", +3814 => x"6e538008", +3815 => x"527f510b", +3816 => x"0b80c6c5", +3817 => x"3f800847", +3818 => x"80588162", +3819 => x"250b0b0b", +3820 => x"829b3863", +3821 => x"81059f06", +3822 => x"5c6e0b0b", +3823 => x"0b81ee38", +3824 => x"7b802e0b", +3825 => x"0b0b0b85", +3826 => x"38a07c31", +3827 => x"5c847c25", +3828 => x"0b0b0b88", +3829 => x"c238fc1c", +3830 => x"6b11711b", +3831 => x"5b4c6405", +3832 => x"44806b25", +3833 => x"0b0b0b0b", +3834 => x"90386a53", +3835 => x"60527f51", +3836 => x"0b0b80c7", +3837 => x"f23f8008", +3838 => x"41806425", +3839 => x"0b0b0b0b", +3840 => x"90386353", +3841 => x"66527f51", +3842 => x"0b0b80c7", +3843 => x"da3f8008", +3844 => x"47a13d08", +3845 => x"0b0b0b80", +3846 => x"da388066", +3847 => x"25568262", +3848 => x"250b0b0b", +3849 => x"82c73875", +3850 => x"802e0b0b", +3851 => x"0b82be38", +3852 => x"8066240b", +3853 => x"0b0bfcda", +3854 => x"38805485", +3855 => x"5366527f", +3856 => x"510b0b0b", +3857 => x"bcce3f80", +3858 => x"08800853", +3859 => x"6152470b", +3860 => x"0b80c985", +3861 => x"3f800b80", +3862 => x"08250b0b", +3863 => x"0bfcb338", +3864 => x"6c5fb17f", +3865 => x"70810541", +3866 => x"34628105", +3867 => x"430b0b0b", +3868 => x"fad33966", +3869 => x"5260510b", +3870 => x"0b80c8dd", +3871 => x"3f800880", +3872 => x"250b0b0b", +3873 => x"ff943862", +3874 => x"ff054380", +3875 => x"548a5360", +3876 => x"527f510b", +3877 => x"0b0bbbfc", +3878 => x"3f800841", +3879 => x"6f0b0b0b", +3880 => x"81b038a3", +3881 => x"3d08460b", +3882 => x"0b0bfeee", +3883 => x"39669005", +3884 => x"08101067", +3885 => x"05901108", +3886 => x"52560b0b", +3887 => x"0bbec93f", +3888 => x"63800831", +3889 => x"9f065c0b", +3890 => x"0b0bfdf4", +3891 => x"39b93d08", +3892 => x"782e0981", +3893 => x"060b0b0b", +3894 => x"fdd938b8", +3895 => x"3d0870bf", +3896 => x"ffff0657", +3897 => x"5775782e", +3898 => x"0981060b", +3899 => x"0b0bfdc3", +3900 => x"38769ffe", +3901 => x"0a065675", +3902 => x"782e0b0b", +3903 => x"0bfdb438", +3904 => x"6a810564", +3905 => x"8105454b", +3906 => x"81648105", +3907 => x"9f065d58", +3908 => x"6e802e0b", +3909 => x"0b0bfda8", +3910 => x"380b0b0b", +3911 => x"ff8f3979", +3912 => x"5360527f", +3913 => x"510b0b80", +3914 => x"c3bf3f80", +3915 => x"08410b0b", +3916 => x"0bfccf39", +3917 => x"6a663159", +3918 => x"806b114c", +3919 => x"64054481", +3920 => x"527f510b", +3921 => x"0b80c08f", +3922 => x"3f80084a", +3923 => x"0b0b0bfb", +3924 => x"ac398054", +3925 => x"8a536952", +3926 => x"7f510b0b", +3927 => x"0bbab53f", +3928 => x"8008a43d", +3929 => x"08474a0b", +3930 => x"0b0bfdae", +3931 => x"39815c6f", +3932 => x"802e0b0b", +3933 => x"0b82bb38", +3934 => x"8079250b", +3935 => x"0b0b0b90", +3936 => x"38785369", +3937 => x"527f510b", +3938 => x"0b80c4db", +3939 => x"3f80084a", +3940 => x"6948770b", +3941 => x"0b0b82e9", +3942 => x"38815c66", +3943 => x"5260510b", +3944 => x"0b0bdce3", +3945 => x"3f8008b0", +3946 => x"05685361", +3947 => x"52570b0b", +3948 => x"80c6a63f", +3949 => x"80086a54", +3950 => x"67536052", +3951 => x"5a0b0b80", +3952 => x"c6fe3f80", +3953 => x"0856815b", +3954 => x"80088c05", +3955 => x"08802e0b", +3956 => x"0b0b8299", +3957 => x"3875527f", +3958 => x"510b0b0b", +3959 => x"b9923f7a", +3960 => x"62075675", +3961 => x"0b0b0b0b", +3962 => x"9038b93d", +3963 => x"08810656", +3964 => x"75802e0b", +3965 => x"0b0b82c8", +3966 => x"38807a24", +3967 => x"0b0b0b82", +3968 => x"da387962", +3969 => x"0756750b", +3970 => x"0b0b0b90", +3971 => x"38b93d08", +3972 => x"81065675", +3973 => x"802e0b0b", +3974 => x"0b82c038", +3975 => x"7a80240b", +3976 => x"0b0b8883", +3977 => x"38767f70", +3978 => x"81054134", +3979 => x"7b662e0b", +3980 => x"0b0b83fd", +3981 => x"3880548a", +3982 => x"5360527f", +3983 => x"510b0b0b", +3984 => x"b8d23f80", +3985 => x"0841676a", +3986 => x"2e0b0b0b", +3987 => x"83ac3880", +3988 => x"548a5367", +3989 => x"527f510b", +3990 => x"0b0bb8b8", +3991 => x"3f800848", +3992 => x"80548a53", +3993 => x"69527f51", +3994 => x"0b0b0bb8", +3995 => x"a73f8008", +3996 => x"811d5d4a", +3997 => x"66526051", +3998 => x"0b0b0bdb", +3999 => x"8a3f8008", +4000 => x"b0056853", +4001 => x"6152570b", +4002 => x"0b80c4cd", +4003 => x"3f80086a", +4004 => x"54675360", +4005 => x"525a0b0b", +4006 => x"80c5a53f", +4007 => x"80085681", +4008 => x"5b80088c", +4009 => x"05080b0b", +4010 => x"0bfeaa38", +4011 => x"0b0b0b0b", +4012 => x"bc396652", +4013 => x"7e7f8105", +4014 => x"62534056", +4015 => x"0b0b0bda", +4016 => x"c63f8008", +4017 => x"b0055776", +4018 => x"76347b66", +4019 => x"250b0b0b", +4020 => x"82df3880", +4021 => x"548a5360", +4022 => x"527f510b", +4023 => x"0b0bb7b4", +4024 => x"3f800881", +4025 => x"1d5d410b", +4026 => x"0b0b0bc6", +4027 => x"39800852", +4028 => x"60510b0b", +4029 => x"80c3e23f", +4030 => x"80085b0b", +4031 => x"0b0bfdd5", +4032 => x"39698405", +4033 => x"08527f51", +4034 => x"0b0b0bb5", +4035 => x"bc3f8008", +4036 => x"68900508", +4037 => x"10108805", +4038 => x"54688c05", +4039 => x"5380088c", +4040 => x"05524a0b", +4041 => x"0bff94e3", +4042 => x"3f815369", +4043 => x"527f510b", +4044 => x"0b80c1b3", +4045 => x"3f80084a", +4046 => x"815c0b0b", +4047 => x"0bfcdc39", +4048 => x"76b92e0b", +4049 => x"0b0b80d0", +4050 => x"38798024", +4051 => x"1757767f", +4052 => x"70810541", +4053 => x"340b0b0b", +4054 => x"f4eb3980", +4055 => x"7b250b0b", +4056 => x"0b0beb38", +4057 => x"81536052", +4058 => x"7f510b0b", +4059 => x"80c0f83f", +4060 => x"80086753", +4061 => x"80085241", +4062 => x"0b0b80c2", +4063 => x"dc3f800b", +4064 => x"8008250b", +4065 => x"0b0b80c8", +4066 => x"38811757", +4067 => x"76ba2e09", +4068 => x"81060b0b", +4069 => x"0bffb738", +4070 => x"b97f7081", +4071 => x"054134ff", +4072 => x"1f703357", +4073 => x"5f75b92e", +4074 => x"0981060b", +4075 => x"0b0b81d0", +4076 => x"387e6d2e", +4077 => x"0981060b", +4078 => x"0b0b0be3", +4079 => x"38628105", +4080 => x"6d4043b1", +4081 => x"7f708105", +4082 => x"41340b0b", +4083 => x"0bf3f639", +4084 => x"80080b0b", +4085 => x"0bfef738", +4086 => x"76810656", +4087 => x"75802e0b", +4088 => x"0b0bfeea", +4089 => x"38811757", +4090 => x"76ba2e09", +4091 => x"81060b0b", +4092 => x"0bfedb38", +4093 => x"0b0b0bff", +4094 => x"9f398054", +4095 => x"8a536952", +4096 => x"7f510b0b", +4097 => x"0bb58d3f", +4098 => x"80088008", +4099 => x"811e5e49", +4100 => x"4a0b0b0b", +4101 => x"fcde397b", +4102 => x"83240b0b", +4103 => x"0bf7c238", +4104 => x"9c1c6b11", +4105 => x"711b5b4c", +4106 => x"6405440b", +4107 => x"0b0bf7b1", +4108 => x"39815360", +4109 => x"527f510b", +4110 => x"0b0bbfab", +4111 => x"3f800867", +4112 => x"53800852", +4113 => x"410b0b80", +4114 => x"c18f3f80", +4115 => x"0880240b", +4116 => x"0b0bfecb", +4117 => x"3880080b", +4118 => x"0b0b0b8c", +4119 => x"38768106", +4120 => x"56750b0b", +4121 => x"0bfeb838", +4122 => x"ff1f7033", +4123 => x"575f75b0", +4124 => x"2e0b0b0b", +4125 => x"0bf23881", +4126 => x"1f5f0b0b", +4127 => x"0bf2c639", +4128 => x"7e7f8105", +4129 => x"71338105", +4130 => x"58405775", +4131 => x"77340b0b", +4132 => x"0bf2b239", +4133 => x"6a633163", +4134 => x"30a73d0c", +4135 => x"4b804f0b", +4136 => x"0b0bdff1", +4137 => x"39a53d08", +4138 => x"5360527f", +4139 => x"510b0b0b", +4140 => x"bcb73f80", +4141 => x"08410b0b", +4142 => x"0bf5c739", +4143 => x"65101010", +4144 => x"0b0b82f2", +4145 => x"d0058411", +4146 => x"08710856", +4147 => x"56b53d08", +4148 => x"b73d0859", +4149 => x"53567653", +4150 => x"64510b0b", +4151 => x"8180be3f", +4152 => x"a83d08aa", +4153 => x"3d0858b5", +4154 => x"3d0c76b6", +4155 => x"3d0c810b", +4156 => x"b93d08bb", +4157 => x"3d085b59", +4158 => x"5c775178", +4159 => x"520b0b81", +4160 => x"bdeb3f80", +4161 => x"08800853", +4162 => x"65525a0b", +4163 => x"0b81bbbd", +4164 => x"3fa83d08", +4165 => x"aa3d0858", +4166 => x"547655b8", +4167 => x"3d08ba3d", +4168 => x"08585276", +4169 => x"536b510b", +4170 => x"0b80febe", +4171 => x"3faa3d08", +4172 => x"ac3d085a", +4173 => x"b93d0c78", +4174 => x"ba3d0cb0", +4175 => x"1a56757f", +4176 => x"70810541", +4177 => x"347b662e", +4178 => x"0b0b0be7", +4179 => x"f038811c", +4180 => x"5c80c882", +4181 => x"0a568076", +4182 => x"5555b83d", +4183 => x"08ba3d08", +4184 => x"58527653", +4185 => x"64510b0b", +4186 => x"80ffb23f", +4187 => x"a83d08aa", +4188 => x"3d0871bb", +4189 => x"3d0c70bc", +4190 => x"3d0c5a58", +4191 => x"0b0b0bfe", +4192 => x"f839ff1f", +4193 => x"7033575f", +4194 => x"75b02e0b", +4195 => x"0b0b0bf2", +4196 => x"38811f5f", +4197 => x"0b0b0bed", +4198 => x"e6396566", +4199 => x"484a80d0", +4200 => x"820a5680", +4201 => x"765555b8", +4202 => x"3d08ba3d", +4203 => x"08585276", +4204 => x"5364510b", +4205 => x"0b80fdb2", +4206 => x"3fa83d08", +4207 => x"aa3d08b6", +4208 => x"3d08b83d", +4209 => x"08715770", +4210 => x"58735572", +4211 => x"565c5a5c", +4212 => x"5a0b0b81", +4213 => x"b3bb3f80", +4214 => x"0b800825", +4215 => x"0b0b0bf1", +4216 => x"8e3879b9", +4217 => x"3d0c7aba", +4218 => x"3d0c6c5f", +4219 => x"b17f7081", +4220 => x"05413462", +4221 => x"8105430b", +4222 => x"0b0befc9", +4223 => x"3988b316", +4224 => x"5c6d0b0b", +4225 => x"0bf1e338", +4226 => x"b60ba83d", +4227 => x"08316b11", +4228 => x"4c640544", +4229 => x"81527f51", +4230 => x"0b0b0bb6", +4231 => x"ba3f8008", +4232 => x"4a0b0b0b", +4233 => x"f1d73976", +4234 => x"b92e0b0b", +4235 => x"0bfae938", +4236 => x"81175675", +4237 => x"7f708105", +4238 => x"41340b0b", +4239 => x"0bef8639", +4240 => x"f83d0d7a", +4241 => x"5877802e", +4242 => x"0b0b0b81", +4243 => x"bd380b0b", +4244 => x"82f4ec08", +4245 => x"54b81408", +4246 => x"802e0b0b", +4247 => x"0b818238", +4248 => x"8c182270", +4249 => x"902b7090", +4250 => x"2c70832a", +4251 => x"81328106", +4252 => x"5c515754", +4253 => x"780b0b0b", +4254 => x"80df3890", +4255 => x"18085776", +4256 => x"802e0b0b", +4257 => x"0b80d238", +4258 => x"77087731", +4259 => x"77790c76", +4260 => x"83067a58", +4261 => x"5555730b", +4262 => x"0b0b0b85", +4263 => x"38941808", +4264 => x"56758819", +4265 => x"0c807525", +4266 => x"0b0b0b0b", +4267 => x"ac387453", +4268 => x"76529c18", +4269 => x"0851a418", +4270 => x"0854732d", +4271 => x"800b8008", +4272 => x"250b0b0b", +4273 => x"80df3880", +4274 => x"08177580", +4275 => x"08315657", +4276 => x"7480240b", +4277 => x"0b0b0bd6", +4278 => x"38800b80", +4279 => x"0c8a3d0d", +4280 => x"0473510b", +4281 => x"0b0b81f7", +4282 => x"3f8c1822", +4283 => x"70902b70", +4284 => x"902c7083", +4285 => x"2a813281", +4286 => x"065c5157", +4287 => x"54780b0b", +4288 => x"0b0bd638", +4289 => x"0b0b0bfe", +4290 => x"f2390b0b", +4291 => x"8184c052", +4292 => x"0b0b82f4", +4293 => x"ec08510b", +4294 => x"0b0b93b4", +4295 => x"3f800880", +4296 => x"0c8a3d0d", +4297 => x"048c1822", +4298 => x"80c00754", +4299 => x"738c1923", +4300 => x"ff0b800c", +4301 => x"8a3d0d04", +4302 => x"70725180", +4303 => x"710c800b", +4304 => x"84120c80", +4305 => x"0b88120c", +4306 => x"028e0522", +4307 => x"8c122302", +4308 => x"9205228e", +4309 => x"1223800b", +4310 => x"90120c80", +4311 => x"0b94120c", +4312 => x"800b9812", +4313 => x"0c709c12", +4314 => x"0c0b0b81", +4315 => x"d7880ba0", +4316 => x"120c0b0b", +4317 => x"81d7dd0b", +4318 => x"a4120c0b", +4319 => x"0b81d8ec", +4320 => x"0ba8120c", +4321 => x"0b0b81d9", +4322 => x"c60bac12", +4323 => x"0c5004fa", +4324 => x"3d0d7970", +4325 => x"80dc298c", +4326 => x"11547a53", +4327 => x"56570b0b", +4328 => x"0b989f3f", +4329 => x"80088008", +4330 => x"55568008", +4331 => x"802e0b0b", +4332 => x"0b0ba538", +4333 => x"80088c05", +4334 => x"54800b80", +4335 => x"080c7680", +4336 => x"0884050c", +4337 => x"73800888", +4338 => x"050c7453", +4339 => x"80527351", +4340 => x"0b0b0baa", +4341 => x"c03f7554", +4342 => x"73800c88", +4343 => x"3d0d04fc", +4344 => x"3d0d760b", +4345 => x"0b818aa8", +4346 => x"0bbc120c", +4347 => x"55810bb8", +4348 => x"160c800b", +4349 => x"84dc160c", +4350 => x"830b84e0", +4351 => x"160c84e8", +4352 => x"1584e416", +4353 => x"0c745480", +4354 => x"53845284", +4355 => x"1508510b", +4356 => x"0b0bfea4", +4357 => x"3f745481", +4358 => x"53895288", +4359 => x"1508510b", +4360 => x"0b0bfe94", +4361 => x"3f745482", +4362 => x"538a528c", +4363 => x"1508510b", +4364 => x"0b0bfe84", +4365 => x"3f863d0d", +4366 => x"04f93d0d", +4367 => x"790b0b82", +4368 => x"f4ec0854", +4369 => x"57b81308", +4370 => x"802e0b0b", +4371 => x"0b80db38", +4372 => x"84dc1356", +4373 => x"88160884", +4374 => x"1708ff05", +4375 => x"55558074", +4376 => x"240b0b0b", +4377 => x"0ba6388c", +4378 => x"15227090", +4379 => x"2b70902c", +4380 => x"51545872", +4381 => x"802e0b0b", +4382 => x"0b80e838", +4383 => x"80dc15ff", +4384 => x"15555573", +4385 => x"80250b0b", +4386 => x"0b0bdc38", +4387 => x"75085372", +4388 => x"802e0b0b", +4389 => x"0b0bab38", +4390 => x"72568816", +4391 => x"08841708", +4392 => x"ff055555", +4393 => x"0b0b0bff", +4394 => x"b5397251", +4395 => x"0b0b0bfe", +4396 => x"ae3f0b0b", +4397 => x"82f4ec08", +4398 => x"84dc0556", +4399 => x"0b0b0bff", +4400 => x"93398452", +4401 => x"76510b0b", +4402 => x"0bfdc43f", +4403 => x"8008760c", +4404 => x"8008802e", +4405 => x"0b0b0b80", +4406 => x"c4388008", +4407 => x"560b0b0b", +4408 => x"ffb83981", +4409 => x"0b8c1623", +4410 => x"72750c72", +4411 => x"88160c72", +4412 => x"84160c72", +4413 => x"90160c72", +4414 => x"94160c72", +4415 => x"98160cff", +4416 => x"0b8e1623", +4417 => x"72b0160c", +4418 => x"72b4160c", +4419 => x"7280c416", +4420 => x"0c7280c8", +4421 => x"160c7480", +4422 => x"0c893d0d", +4423 => x"048c770c", +4424 => x"800b800c", +4425 => x"893d0d04", +4426 => x"70700b0b", +4427 => x"8184c052", +4428 => x"73510b0b", +4429 => x"0b8f993f", +4430 => x"50500470", +4431 => x"0b0b82f4", +4432 => x"ec08510b", +4433 => x"0b0b0be0", +4434 => x"3f5004fb", +4435 => x"3d0d7770", +4436 => x"52560b0b", +4437 => x"0ba8f03f", +4438 => x"0b0b82fc", +4439 => x"c80b8805", +4440 => x"08841108", +4441 => x"fc06707b", +4442 => x"319fef05", +4443 => x"e08006e0", +4444 => x"80055656", +4445 => x"53a08074", +4446 => x"240b0b0b", +4447 => x"0b9d3880", +4448 => x"5275510b", +4449 => x"0b80cbba", +4450 => x"3f0b0b82", +4451 => x"fcd00815", +4452 => x"53728008", +4453 => x"2e0b0b0b", +4454 => x"0b923875", +4455 => x"510b0b0b", +4456 => x"a8a63f80", +4457 => x"5372800c", +4458 => x"873d0d04", +4459 => x"73305275", +4460 => x"510b0b80", +4461 => x"cb8c3f80", +4462 => x"08ff2e0b", +4463 => x"0b0b0bb1", +4464 => x"380b0b82", +4465 => x"fcc80b88", +4466 => x"05087575", +4467 => x"31810784", +4468 => x"120c530b", +4469 => x"0b82fc8c", +4470 => x"0874310b", +4471 => x"0b82fc8c", +4472 => x"0c75510b", +4473 => x"0b0ba7e0", +4474 => x"3f810b80", +4475 => x"0c873d0d", +4476 => x"04805275", +4477 => x"510b0b80", +4478 => x"cac83f0b", +4479 => x"0b82fcc8", +4480 => x"0b880508", +4481 => x"80087131", +4482 => x"56538f75", +4483 => x"250b0b0b", +4484 => x"ff893880", +4485 => x"080b0b82", +4486 => x"fcbc0831", +4487 => x"0b0b82fc", +4488 => x"8c0c7481", +4489 => x"0784140c", +4490 => x"75510b0b", +4491 => x"0ba7993f", +4492 => x"80530b0b", +4493 => x"0bfeee39", +4494 => x"f63d0d7c", +4495 => x"7e545b72", +4496 => x"802e0b0b", +4497 => x"0b82c838", +4498 => x"7a510b0b", +4499 => x"0ba6f83f", +4500 => x"f8138411", +4501 => x"0870fe06", +4502 => x"70138411", +4503 => x"08fc065d", +4504 => x"58595458", +4505 => x"0b0b82fc", +4506 => x"d008752e", +4507 => x"0b0b0b83", +4508 => x"b5387884", +4509 => x"160c8073", +4510 => x"8106545a", +4511 => x"727a2e0b", +4512 => x"0b0b828f", +4513 => x"38781584", +4514 => x"11088106", +4515 => x"5153720b", +4516 => x"0b0b0ba8", +4517 => x"38781757", +4518 => x"790b0b0b", +4519 => x"82a13888", +4520 => x"15085372", +4521 => x"0b0b82fc", +4522 => x"d02e0b0b", +4523 => x"0b83d738", +4524 => x"8c150870", +4525 => x"8c150c73", +4526 => x"88120c56", +4527 => x"76810784", +4528 => x"190c7618", +4529 => x"77710c53", +4530 => x"790b0b0b", +4531 => x"81b93883", +4532 => x"ff77270b", +4533 => x"0b0b81fb", +4534 => x"3876892a", +4535 => x"77832a56", +4536 => x"5372802e", +4537 => x"0b0b0b80", +4538 => x"d3387686", +4539 => x"2ab80555", +4540 => x"8473270b", +4541 => x"0b0b80c4", +4542 => x"3880db13", +4543 => x"55947327", +4544 => x"0b0b0b0b", +4545 => x"b738768c", +4546 => x"2a80ee05", +4547 => x"5580d473", +4548 => x"270b0b0b", +4549 => x"0ba63876", +4550 => x"8f2a80f7", +4551 => x"055582d4", +4552 => x"73270b0b", +4553 => x"0b0b9538", +4554 => x"76922a80", +4555 => x"fc05558a", +4556 => x"d473270b", +4557 => x"0b0b0b84", +4558 => x"3880fe55", +4559 => x"74101010", +4560 => x"0b0b82fc", +4561 => x"c8058811", +4562 => x"08555673", +4563 => x"762e0b0b", +4564 => x"0b82fa38", +4565 => x"841408fc", +4566 => x"06537673", +4567 => x"270b0b0b", +4568 => x"0b913888", +4569 => x"14085473", +4570 => x"762e0981", +4571 => x"060b0b0b", +4572 => x"0be2388c", +4573 => x"1408708c", +4574 => x"1a0c7488", +4575 => x"1a0c7888", +4576 => x"120c5677", +4577 => x"8c150c7a", +4578 => x"510b0b0b", +4579 => x"a4ba3f8c", +4580 => x"3d0d0477", +4581 => x"08787131", +4582 => x"59770588", +4583 => x"19085457", +4584 => x"720b0b82", +4585 => x"fcd02e0b", +4586 => x"0b0b80f2", +4587 => x"388c1808", +4588 => x"708c150c", +4589 => x"7388120c", +4590 => x"560b0b0b", +4591 => x"fdc73988", +4592 => x"15088c16", +4593 => x"08708c13", +4594 => x"0c578817", +4595 => x"0c0b0b0b", +4596 => x"fdea3976", +4597 => x"832a7054", +4598 => x"55807524", +4599 => x"0b0b0b81", +4600 => x"bd387282", +4601 => x"2c81712b", +4602 => x"0b0b82fc", +4603 => x"cc08070b", +4604 => x"0b82fcc8", +4605 => x"0b84050c", +4606 => x"53741010", +4607 => x"100b0b82", +4608 => x"fcc80588", +4609 => x"11085556", +4610 => x"758c190c", +4611 => x"7388190c", +4612 => x"7788170c", +4613 => x"778c150c", +4614 => x"0b0b0bfe", +4615 => x"ea39815a", +4616 => x"0b0b0bfc", +4617 => x"e0397817", +4618 => x"73810654", +4619 => x"57720b0b", +4620 => x"0b0b9838", +4621 => x"77087871", +4622 => x"31597705", +4623 => x"8c190888", +4624 => x"1a08718c", +4625 => x"120c8812", +4626 => x"0c575776", +4627 => x"81078419", +4628 => x"0c770b0b", +4629 => x"82fcc80b", +4630 => x"88050c0b", +4631 => x"0b82fcc4", +4632 => x"0877260b", +4633 => x"0b0bfe9f", +4634 => x"380b0b82", +4635 => x"fcc00852", +4636 => x"7a510b0b", +4637 => x"0bf9d43f", +4638 => x"7a510b0b", +4639 => x"0ba2c93f", +4640 => x"0b0b0bfe", +4641 => x"8a398178", +4642 => x"8c150c78", +4643 => x"88150c73", +4644 => x"8c1a0c73", +4645 => x"881a0c5a", +4646 => x"0b0b0bfc", +4647 => x"9f398315", +4648 => x"70822c81", +4649 => x"712b0b0b", +4650 => x"82fccc08", +4651 => x"070b0b82", +4652 => x"fcc80b84", +4653 => x"050c5153", +4654 => x"74101010", +4655 => x"0b0b82fc", +4656 => x"c8058811", +4657 => x"0855560b", +4658 => x"0b0bfebc", +4659 => x"39745380", +4660 => x"75240b0b", +4661 => x"0b0bae38", +4662 => x"72822c81", +4663 => x"712b0b0b", +4664 => x"82fccc08", +4665 => x"070b0b82", +4666 => x"fcc80b84", +4667 => x"050c5375", +4668 => x"8c190c73", +4669 => x"88190c77", +4670 => x"88170c77", +4671 => x"8c150c0b", +4672 => x"0b0bfd83", +4673 => x"39831570", +4674 => x"822c8171", +4675 => x"2b0b0b82", +4676 => x"fccc0807", +4677 => x"0b0b82fc", +4678 => x"c80b8405", +4679 => x"0c51530b", +4680 => x"0b0b0bcb", +4681 => x"39f23d0d", +4682 => x"60628811", +4683 => x"08705757", +4684 => x"5f5a7480", +4685 => x"2e0b0b0b", +4686 => x"81b3388c", +4687 => x"1a227083", +4688 => x"2a813270", +4689 => x"81065155", +4690 => x"58730b0b", +4691 => x"0b0b8a38", +4692 => x"901a080b", +4693 => x"0b0b0b97", +4694 => x"3879510b", +4695 => x"0b0bc388", +4696 => x"3fff5480", +4697 => x"080b0b0b", +4698 => x"8183388c", +4699 => x"1a22587d", +4700 => x"08578078", +4701 => x"83ffff06", +4702 => x"700a100a", +4703 => x"70810651", +4704 => x"56575573", +4705 => x"752e0b0b", +4706 => x"0b80e938", +4707 => x"740b0b0b", +4708 => x"0b943876", +4709 => x"08841808", +4710 => x"88195956", +4711 => x"5974802e", +4712 => x"0b0b0b0b", +4713 => x"ee387454", +4714 => x"88807527", +4715 => x"0b0b0b0b", +4716 => x"84388880", +4717 => x"54735378", +4718 => x"529c1a08", +4719 => x"51a41a08", +4720 => x"54732d80", +4721 => x"0b800825", +4722 => x"0b0b0b83", +4723 => x"bf388008", +4724 => x"19758008", +4725 => x"317f8805", +4726 => x"08800831", +4727 => x"70618805", +4728 => x"0c565659", +4729 => x"730b0b0b", +4730 => x"ffa23880", +4731 => x"5473800c", +4732 => x"903d0d04", +4733 => x"75813270", +4734 => x"81067641", +4735 => x"51547380", +4736 => x"2e0b0b0b", +4737 => x"81f03874", +4738 => x"0b0b0b0b", +4739 => x"94387608", +4740 => x"84180888", +4741 => x"19595659", +4742 => x"74802e0b", +4743 => x"0b0b0bee", +4744 => x"38881a08", +4745 => x"7883ffff", +4746 => x"0670892a", +4747 => x"70810651", +4748 => x"56595673", +4749 => x"802e0b0b", +4750 => x"0b83e338", +4751 => x"7575270b", +4752 => x"0b0b0b90", +4753 => x"3877872a", +4754 => x"70810651", +4755 => x"54730b0b", +4756 => x"0b838c38", +4757 => x"7476270b", +4758 => x"0b0b0b83", +4759 => x"38745675", +4760 => x"53785279", +4761 => x"08510b0b", +4762 => x"0b9bb83f", +4763 => x"881a0876", +4764 => x"31881b0c", +4765 => x"7908167a", +4766 => x"0c745675", +4767 => x"19757731", +4768 => x"7f880508", +4769 => x"78317061", +4770 => x"88050c56", +4771 => x"56597380", +4772 => x"2e0b0b0b", +4773 => x"fed5388c", +4774 => x"1a22580b", +4775 => x"0b0bfee7", +4776 => x"39777854", +4777 => x"79537b52", +4778 => x"560b0b0b", +4779 => x"9af53f88", +4780 => x"1a087831", +4781 => x"881b0c79", +4782 => x"08187a0c", +4783 => x"7c76315d", +4784 => x"7c0b0b0b", +4785 => x"0b943879", +4786 => x"510b0b0b", +4787 => x"eef23f80", +4788 => x"080b0b0b", +4789 => x"81b63880", +4790 => x"085f7519", +4791 => x"7577317f", +4792 => x"88050878", +4793 => x"31706188", +4794 => x"050c5656", +4795 => x"5973802e", +4796 => x"0b0b0bfd", +4797 => x"f638740b", +4798 => x"0b0b81a4", +4799 => x"38760884", +4800 => x"18088819", +4801 => x"59565974", +4802 => x"802e0b0b", +4803 => x"0b0bee38", +4804 => x"74538a52", +4805 => x"78510b0b", +4806 => x"0b98bb3f", +4807 => x"80087931", +4808 => x"81055d80", +4809 => x"080b0b0b", +4810 => x"0b843881", +4811 => x"155d815f", +4812 => x"7c58747d", +4813 => x"270b0b0b", +4814 => x"0b833874", +4815 => x"58941a08", +4816 => x"881b0811", +4817 => x"575c807a", +4818 => x"085c5490", +4819 => x"1a087b27", +4820 => x"0b0b0b0b", +4821 => x"83388154", +4822 => x"7578250b", +4823 => x"0b0b0b88", +4824 => x"38730b0b", +4825 => x"0b80c638", +4826 => x"7b78240b", +4827 => x"0b0bfeb1", +4828 => x"387b5378", +4829 => x"529c1a08", +4830 => x"51a41a08", +4831 => x"54732d80", +4832 => x"08568008", +4833 => x"80240b0b", +4834 => x"0bfeb138", +4835 => x"8c1a2280", +4836 => x"c0075473", +4837 => x"8c1b23ff", +4838 => x"5473800c", +4839 => x"903d0d04", +4840 => x"7e0b0b0b", +4841 => x"ff8a380b", +4842 => x"0b0bfee4", +4843 => x"39755378", +4844 => x"527a510b", +4845 => x"0b0b98eb", +4846 => x"3f790816", +4847 => x"7a0c7951", +4848 => x"0b0b0bec", +4849 => x"fb3f8008", +4850 => x"0b0b0bff", +4851 => x"bf387c76", +4852 => x"315d7c0b", +4853 => x"0b0bfe82", +4854 => x"380b0b0b", +4855 => x"fde93990", +4856 => x"1a087a08", +4857 => x"71317611", +4858 => x"70565a57", +4859 => x"520b0b82", +4860 => x"f4ec0851", +4861 => x"0b0b0bb4", +4862 => x"ad3f8008", +4863 => x"802e0b0b", +4864 => x"0bff8938", +4865 => x"8008901b", +4866 => x"0c800816", +4867 => x"7a0c7794", +4868 => x"1b0c7488", +4869 => x"1b0c7456", +4870 => x"0b0b0bfc", +4871 => x"b7397908", +4872 => x"58901a08", +4873 => x"78270b0b", +4874 => x"0b0b8338", +4875 => x"81547575", +4876 => x"270b0b0b", +4877 => x"0b883873", +4878 => x"0b0b0b0b", +4879 => x"bc38941a", +4880 => x"08567575", +4881 => x"260b0b0b", +4882 => x"80e53875", +4883 => x"5378529c", +4884 => x"1a0851a4", +4885 => x"1a085473", +4886 => x"2d800856", +4887 => x"80088024", +4888 => x"0b0b0bfc", +4889 => x"96388c1a", +4890 => x"2280c007", +4891 => x"54738c1b", +4892 => x"23ff540b", +4893 => x"0b0bfea1", +4894 => x"39755378", +4895 => x"5277510b", +4896 => x"0b0b979f", +4897 => x"3f790816", +4898 => x"7a0c7951", +4899 => x"0b0b0beb", +4900 => x"af3f8008", +4901 => x"802e0b0b", +4902 => x"0bfbe038", +4903 => x"8c1a2280", +4904 => x"c0075473", +4905 => x"8c1b23ff", +4906 => x"540b0b0b", +4907 => x"fdeb3974", +4908 => x"75547953", +4909 => x"7852560b", +4910 => x"0b0b96e7", +4911 => x"3f881a08", +4912 => x"7531881b", +4913 => x"0c790815", +4914 => x"7a0c0b0b", +4915 => x"0bfbac39", +4916 => x"f93d0d79", +4917 => x"7b585380", +4918 => x"0b0b0b82", +4919 => x"f4ec0853", +4920 => x"5672722e", +4921 => x"0b0b0b80", +4922 => x"d53884dc", +4923 => x"13557476", +4924 => x"2e0b0b0b", +4925 => x"80c83888", +4926 => x"15088416", +4927 => x"08ff0554", +4928 => x"54807324", +4929 => x"0b0b0b0b", +4930 => x"a4388c14", +4931 => x"2270902b", +4932 => x"70902c51", +4933 => x"5358710b", +4934 => x"0b0b80f6", +4935 => x"3880dc14", +4936 => x"ff145454", +4937 => x"7280250b", +4938 => x"0b0b0bde", +4939 => x"38740855", +4940 => x"740b0b0b", +4941 => x"0bc1380b", +4942 => x"0b82f4ec", +4943 => x"085284dc", +4944 => x"12557480", +4945 => x"2e0b0b0b", +4946 => x"80c13888", +4947 => x"15088416", +4948 => x"08ff0554", +4949 => x"54807324", +4950 => x"0b0b0b0b", +4951 => x"a4388c14", +4952 => x"2270902b", +4953 => x"70902c51", +4954 => x"5358710b", +4955 => x"0b0b0bb8", +4956 => x"3880dc14", +4957 => x"ff145454", +4958 => x"7280250b", +4959 => x"0b0b0bde", +4960 => x"38740855", +4961 => x"740b0b0b", +4962 => x"0bc13875", +4963 => x"800c893d", +4964 => x"0d047351", +4965 => x"762d7580", +4966 => x"080780dc", +4967 => x"15ff1555", +4968 => x"55560b0b", +4969 => x"0bfefd39", +4970 => x"7351762d", +4971 => x"75800807", +4972 => x"80dc15ff", +4973 => x"15555556", +4974 => x"0b0b0bff", +4975 => x"bb39fc3d", +4976 => x"0d767955", +4977 => x"5573802e", +4978 => x"0b0b0b0b", +4979 => x"9f380b0b", +4980 => x"82f1c852", +4981 => x"73510b0b", +4982 => x"0bbe8d3f", +4983 => x"80080b0b", +4984 => x"0b0b9638", +4985 => x"77b0160c", +4986 => x"73b4160c", +4987 => x"0b0b82f1", +4988 => x"c8537280", +4989 => x"0c863d0d", +4990 => x"040b0b82", +4991 => x"f0ec5273", +4992 => x"510b0b0b", +4993 => x"bde23f80", +4994 => x"53800873", +4995 => x"2e098106", +4996 => x"0b0b0b0b", +4997 => x"dd3877b0", +4998 => x"160c73b4", +4999 => x"160c0b0b", +5000 => x"0b0bc939", +5001 => x"0b0b82fc", +5002 => x"8808800c", +5003 => x"040b0b82", +5004 => x"f1d80b80", +5005 => x"0c047070", +5006 => x"70755374", +5007 => x"520b0b82", +5008 => x"f4ec0851", +5009 => x"0b0b0bfe", +5010 => x"f53f5050", +5011 => x"5004700b", +5012 => x"0b82f4ec", +5013 => x"08510b0b", +5014 => x"0b0bd23f", +5015 => x"5004ea3d", +5016 => x"0d688c11", +5017 => x"22700a10", +5018 => x"0a810657", +5019 => x"5856740b", +5020 => x"0b0b8180", +5021 => x"388e1622", +5022 => x"70902b70", +5023 => x"902c5155", +5024 => x"58807424", +5025 => x"0b0b0b80", +5026 => x"c038983d", +5027 => x"c4055373", +5028 => x"520b0b82", +5029 => x"f4ec0851", +5030 => x"0b0b80c1", +5031 => x"ac3f800b", +5032 => x"8008240b", +5033 => x"0b0b0b9d", +5034 => x"387983e0", +5035 => x"80065473", +5036 => x"80c0802e", +5037 => x"0b0b0b81", +5038 => x"aa387382", +5039 => x"80802e0b", +5040 => x"0b0b81ac", +5041 => x"388c1622", +5042 => x"57769080", +5043 => x"0754738c", +5044 => x"17238880", +5045 => x"520b0b82", +5046 => x"f4ec0851", +5047 => x"0b0b0b81", +5048 => x"e13f8008", +5049 => x"0b0b0b0b", +5050 => x"9d388c16", +5051 => x"22820754", +5052 => x"738c1723", +5053 => x"80c31670", +5054 => x"770c9017", +5055 => x"0c810b94", +5056 => x"170c983d", +5057 => x"0d040b0b", +5058 => x"82f4ec08", +5059 => x"0b0b818a", +5060 => x"a80bbc12", +5061 => x"0c548c16", +5062 => x"22818007", +5063 => x"54738c17", +5064 => x"23800876", +5065 => x"0c800890", +5066 => x"170c8880", +5067 => x"0b94170c", +5068 => x"74802e0b", +5069 => x"0b0b0bca", +5070 => x"388e1622", +5071 => x"70902b70", +5072 => x"902c5355", +5073 => x"580b0b80", +5074 => x"ced33f80", +5075 => x"08802e0b", +5076 => x"0b0bffae", +5077 => x"388c1622", +5078 => x"81075473", +5079 => x"8c172398", +5080 => x"3d0d0481", +5081 => x"0b8c1722", +5082 => x"58550b0b", +5083 => x"0bfeda39", +5084 => x"a816080b", +5085 => x"0b81d8ec", +5086 => x"2e098106", +5087 => x"0b0b0bfe", +5088 => x"c4388c16", +5089 => x"22888007", +5090 => x"54738c17", +5091 => x"2388800b", +5092 => x"80cc170c", +5093 => x"0b0b0bfe", +5094 => x"b9397070", +5095 => x"73520b0b", +5096 => x"82f4ec08", +5097 => x"510b0b0b", +5098 => x"0b983f50", +5099 => x"50047070", +5100 => x"73520b0b", +5101 => x"82f4ec08", +5102 => x"510b0b0b", +5103 => x"ecfa3f50", +5104 => x"5004f33d", +5105 => x"0d7f618b", +5106 => x"1170f806", +5107 => x"5c55555e", +5108 => x"7296260b", +5109 => x"0b0b0b83", +5110 => x"38905980", +5111 => x"7924747a", +5112 => x"26075380", +5113 => x"5472742e", +5114 => x"0981060b", +5115 => x"0b0b80d9", +5116 => x"387d510b", +5117 => x"0b0b93cf", +5118 => x"3f7883f7", +5119 => x"260b0b0b", +5120 => x"80ce3878", +5121 => x"832a7010", +5122 => x"10100b0b", +5123 => x"82fcc805", +5124 => x"8c110859", +5125 => x"595a7678", +5126 => x"2e0b0b0b", +5127 => x"84aa3884", +5128 => x"1708fc06", +5129 => x"568c1708", +5130 => x"88180871", +5131 => x"8c120c88", +5132 => x"120c5875", +5133 => x"17841108", +5134 => x"81078412", +5135 => x"0c537d51", +5136 => x"0b0b0b93", +5137 => x"833f8817", +5138 => x"5473800c", +5139 => x"8f3d0d04", +5140 => x"78892a79", +5141 => x"832a5b53", +5142 => x"72802e0b", +5143 => x"0b0b80d3", +5144 => x"3878862a", +5145 => x"b8055a84", +5146 => x"73270b0b", +5147 => x"0b80c438", +5148 => x"80db135a", +5149 => x"9473270b", +5150 => x"0b0b0bb7", +5151 => x"38788c2a", +5152 => x"80ee055a", +5153 => x"80d47327", +5154 => x"0b0b0b0b", +5155 => x"a638788f", +5156 => x"2a80f705", +5157 => x"5a82d473", +5158 => x"270b0b0b", +5159 => x"0b953878", +5160 => x"922a80fc", +5161 => x"055a8ad4", +5162 => x"73270b0b", +5163 => x"0b0b8438", +5164 => x"80fe5a79", +5165 => x"1010100b", +5166 => x"0b82fcc8", +5167 => x"058c1108", +5168 => x"58557675", +5169 => x"2e0b0b0b", +5170 => x"0bad3884", +5171 => x"1708fc06", +5172 => x"707a3155", +5173 => x"56738f24", +5174 => x"0b0b0b8b", +5175 => x"94387380", +5176 => x"250b0b0b", +5177 => x"febf388c", +5178 => x"17085776", +5179 => x"752e0981", +5180 => x"060b0b0b", +5181 => x"0bd53881", +5182 => x"1a5a0b0b", +5183 => x"82fcd808", +5184 => x"57760b0b", +5185 => x"82fcd02e", +5186 => x"0b0b0b83", +5187 => x"9a388417", +5188 => x"08fc0670", +5189 => x"7a315556", +5190 => x"738f240b", +5191 => x"0b0b82c4", +5192 => x"380b0b82", +5193 => x"fcd00b0b", +5194 => x"0b82fcdc", +5195 => x"0c0b0b82", +5196 => x"fcd00b0b", +5197 => x"0b82fcd8", +5198 => x"0c738025", +5199 => x"0b0b0bfd", +5200 => x"f23883ff", +5201 => x"76270b0b", +5202 => x"0b84e238", +5203 => x"75892a76", +5204 => x"832a5553", +5205 => x"72802e0b", +5206 => x"0b0b80d3", +5207 => x"3875862a", +5208 => x"b8055484", +5209 => x"73270b0b", +5210 => x"0b80c438", +5211 => x"80db1354", +5212 => x"9473270b", +5213 => x"0b0b0bb7", +5214 => x"38758c2a", +5215 => x"80ee0554", +5216 => x"80d47327", +5217 => x"0b0b0b0b", +5218 => x"a638758f", +5219 => x"2a80f705", +5220 => x"5482d473", +5221 => x"270b0b0b", +5222 => x"0b953875", +5223 => x"922a80fc", +5224 => x"05548ad4", +5225 => x"73270b0b", +5226 => x"0b0b8438", +5227 => x"80fe5473", +5228 => x"1010100b", +5229 => x"0b82fcc8", +5230 => x"05881108", +5231 => x"56587478", +5232 => x"2e0b0b0b", +5233 => x"88b83884", +5234 => x"1508fc06", +5235 => x"53757327", +5236 => x"0b0b0b0b", +5237 => x"91388815", +5238 => x"08557478", +5239 => x"2e098106", +5240 => x"0b0b0b0b", +5241 => x"e2388c15", +5242 => x"080b0b82", +5243 => x"fcc80b84", +5244 => x"0508718c", +5245 => x"1a0c7688", +5246 => x"1a0c7888", +5247 => x"130c788c", +5248 => x"180c5d58", +5249 => x"7953807a", +5250 => x"240b0b0b", +5251 => x"84e93872", +5252 => x"822c8171", +5253 => x"2b5c537a", +5254 => x"7c260b0b", +5255 => x"0b81c538", +5256 => x"7b7b0653", +5257 => x"720b0b0b", +5258 => x"83d03879", +5259 => x"fc068405", +5260 => x"5a7a1070", +5261 => x"7d06545b", +5262 => x"720b0b0b", +5263 => x"83bc3884", +5264 => x"1a5a0b0b", +5265 => x"0b0bea39", +5266 => x"88178c11", +5267 => x"08585876", +5268 => x"782e0981", +5269 => x"060b0b0b", +5270 => x"fbc53882", +5271 => x"1a5a0b0b", +5272 => x"0bfd9739", +5273 => x"78177981", +5274 => x"0784190c", +5275 => x"700b0b82", +5276 => x"fcdc0c70", +5277 => x"0b0b82fc", +5278 => x"d80c0b0b", +5279 => x"82fcd00b", +5280 => x"8c120c8c", +5281 => x"11088812", +5282 => x"0c748107", +5283 => x"84120c74", +5284 => x"1175710c", +5285 => x"51537d51", +5286 => x"0b0b0b8e", +5287 => x"ab3f8817", +5288 => x"540b0b0b", +5289 => x"fba3390b", +5290 => x"0b82fcc8", +5291 => x"0b840508", +5292 => x"7a545c79", +5293 => x"80250b0b", +5294 => x"0bfed438", +5295 => x"0b0b0b83", +5296 => x"b6397a09", +5297 => x"7c06700b", +5298 => x"0b82fcc8", +5299 => x"0b84050c", +5300 => x"5c7a105b", +5301 => x"7a7c260b", +5302 => x"0b0b0b88", +5303 => x"387a0b0b", +5304 => x"0b86f738", +5305 => x"0b0b82fc", +5306 => x"c80b8805", +5307 => x"08708412", +5308 => x"08fc0670", +5309 => x"7c317c72", +5310 => x"268f7225", +5311 => x"0757575c", +5312 => x"5d557280", +5313 => x"2e0b0b0b", +5314 => x"80f73879", +5315 => x"7a160b0b", +5316 => x"82fcc008", +5317 => x"1b90115a", +5318 => x"55575b0b", +5319 => x"0b82fcbc", +5320 => x"08ff2e0b", +5321 => x"0b0b0b88", +5322 => x"38a08f13", +5323 => x"e0800657", +5324 => x"76527d51", +5325 => x"0b0b0bb0", +5326 => x"893f8008", +5327 => x"548008ff", +5328 => x"2e0b0b0b", +5329 => x"0b983880", +5330 => x"0876270b", +5331 => x"0b0b82e1", +5332 => x"38740b0b", +5333 => x"82fcc82e", +5334 => x"0b0b0b82", +5335 => x"d4380b0b", +5336 => x"82fcc80b", +5337 => x"88050855", +5338 => x"841508fc", +5339 => x"06707a31", +5340 => x"7a72268f", +5341 => x"72250752", +5342 => x"5553720b", +5343 => x"0b0b84ee", +5344 => x"38747981", +5345 => x"0784170c", +5346 => x"7916700b", +5347 => x"0b82fcc8", +5348 => x"0b88050c", +5349 => x"75810784", +5350 => x"120c547e", +5351 => x"52570b0b", +5352 => x"0b8ca53f", +5353 => x"8817540b", +5354 => x"0b0bf99d", +5355 => x"3975832a", +5356 => x"70545480", +5357 => x"74240b0b", +5358 => x"0b81c538", +5359 => x"72822c81", +5360 => x"712b0b0b", +5361 => x"82fccc08", +5362 => x"07700b0b", +5363 => x"82fcc80b", +5364 => x"84050c75", +5365 => x"1010100b", +5366 => x"0b82fcc8", +5367 => x"05881108", +5368 => x"585a5d53", +5369 => x"778c180c", +5370 => x"7488180c", +5371 => x"7688190c", +5372 => x"768c160c", +5373 => x"0b0b0bfc", +5374 => x"8b39797a", +5375 => x"1010100b", +5376 => x"0b82fcc8", +5377 => x"05705759", +5378 => x"5d8c1508", +5379 => x"5776752e", +5380 => x"0b0b0b0b", +5381 => x"ad388417", +5382 => x"08fc0670", +5383 => x"7a315556", +5384 => x"738f240b", +5385 => x"0b0b84d5", +5386 => x"38738025", +5387 => x"0b0b0b85", +5388 => x"92388c17", +5389 => x"08577675", +5390 => x"2e098106", +5391 => x"0b0b0b0b", +5392 => x"d5388815", +5393 => x"811b7083", +5394 => x"06555b55", +5395 => x"720b0b0b", +5396 => x"ffb7387c", +5397 => x"83065372", +5398 => x"802e0b0b", +5399 => x"0bfce338", +5400 => x"ff1df819", +5401 => x"595d8818", +5402 => x"08782e0b", +5403 => x"0b0b0be3", +5404 => x"380b0b0b", +5405 => x"fcdb3983", +5406 => x"1a530b0b", +5407 => x"0bfb9039", +5408 => x"83147082", +5409 => x"2c81712b", +5410 => x"0b0b82fc", +5411 => x"cc080770", +5412 => x"0b0b82fc", +5413 => x"c80b8405", +5414 => x"0c761010", +5415 => x"100b0b82", +5416 => x"fcc80588", +5417 => x"1108595b", +5418 => x"5e51530b", +5419 => x"0b0bfeb4", +5420 => x"390b0b82", +5421 => x"fc8c0817", +5422 => x"58800876", +5423 => x"2e0b0b0b", +5424 => x"81b2380b", +5425 => x"0b82fcbc", +5426 => x"08ff2e0b", +5427 => x"0b0b84e8", +5428 => x"38737631", +5429 => x"180b0b82", +5430 => x"fc8c0c73", +5431 => x"87067057", +5432 => x"5372802e", +5433 => x"0b0b0b0b", +5434 => x"88388873", +5435 => x"31701555", +5436 => x"5676149f", +5437 => x"ff06a080", +5438 => x"71311770", +5439 => x"547f5357", +5440 => x"530b0b0b", +5441 => x"acbc3f80", +5442 => x"08538008", +5443 => x"ff2e0b0b", +5444 => x"0b81d138", +5445 => x"0b0b82fc", +5446 => x"8c081670", +5447 => x"0b0b82fc", +5448 => x"8c0c7475", +5449 => x"0b0b82fc", +5450 => x"c80b8805", +5451 => x"0c747631", +5452 => x"18708107", +5453 => x"51555658", +5454 => x"7b0b0b82", +5455 => x"fcc82e0b", +5456 => x"0b0b8488", +5457 => x"38798f26", +5458 => x"0b0b0b83", +5459 => x"a038810b", +5460 => x"84150c84", +5461 => x"1508fc06", +5462 => x"707a317a", +5463 => x"72268f72", +5464 => x"25075255", +5465 => x"5372802e", +5466 => x"0b0b0bfc", +5467 => x"94380b0b", +5468 => x"0b80fb39", +5469 => x"80089fff", +5470 => x"0653720b", +5471 => x"0b0bfec3", +5472 => x"38770b0b", +5473 => x"82fc8c0c", +5474 => x"0b0b82fc", +5475 => x"c80b8805", +5476 => x"087b1881", +5477 => x"0784120c", +5478 => x"550b0b82", +5479 => x"fcb80878", +5480 => x"270b0b0b", +5481 => x"0b883877", +5482 => x"0b0b82fc", +5483 => x"b80c0b0b", +5484 => x"82fcb408", +5485 => x"78270b0b", +5486 => x"0bfbad38", +5487 => x"770b0b82", +5488 => x"fcb40c84", +5489 => x"1508fc06", +5490 => x"707a317a", +5491 => x"72268f72", +5492 => x"25075255", +5493 => x"5372802e", +5494 => x"0b0b0bfb", +5495 => x"a4380b0b", +5496 => x"0b0b8b39", +5497 => x"80745456", +5498 => x"0b0b0bfe", +5499 => x"a7397d51", +5500 => x"0b0b0b87", +5501 => x"d33f800b", +5502 => x"800c8f3d", +5503 => x"0d047353", +5504 => x"8074240b", +5505 => x"0b0b0bb0", +5506 => x"3872822c", +5507 => x"81712b0b", +5508 => x"0b82fccc", +5509 => x"0807700b", +5510 => x"0b82fcc8", +5511 => x"0b84050c", +5512 => x"5d53778c", +5513 => x"180c7488", +5514 => x"180c7688", +5515 => x"190c768c", +5516 => x"160c0b0b", +5517 => x"0bf7cd39", +5518 => x"83147082", +5519 => x"2c81712b", +5520 => x"0b0b82fc", +5521 => x"cc080770", +5522 => x"0b0b82fc", +5523 => x"c80b8405", +5524 => x"0c5e5153", +5525 => x"0b0b0b0b", +5526 => x"c9397b7b", +5527 => x"0653720b", +5528 => x"0b0bfb96", +5529 => x"38841a7b", +5530 => x"105c5a0b", +5531 => x"0b0b0bea", +5532 => x"39ff1a81", +5533 => x"11515a0b", +5534 => x"0b0bf4fe", +5535 => x"39781779", +5536 => x"81078419", +5537 => x"0c8c1808", +5538 => x"88190871", +5539 => x"8c120c88", +5540 => x"120c5970", +5541 => x"0b0b82fc", +5542 => x"dc0c700b", +5543 => x"0b82fcd8", +5544 => x"0c0b0b82", +5545 => x"fcd00b8c", +5546 => x"120c8c11", +5547 => x"0888120c", +5548 => x"74810784", +5549 => x"120c7411", +5550 => x"75710c51", +5551 => x"530b0b0b", +5552 => x"f7d43975", +5553 => x"17841108", +5554 => x"81078412", +5555 => x"0c538c17", +5556 => x"08881808", +5557 => x"718c120c", +5558 => x"88120c58", +5559 => x"7d510b0b", +5560 => x"0b85e53f", +5561 => x"8817540b", +5562 => x"0b0bf2dd", +5563 => x"39728415", +5564 => x"0cf41af8", +5565 => x"0670841e", +5566 => x"08810607", +5567 => x"841e0c70", +5568 => x"1d545b85", +5569 => x"0b84140c", +5570 => x"850b8814", +5571 => x"0c8f7b27", +5572 => x"0b0b0bfd", +5573 => x"8438881c", +5574 => x"527d510b", +5575 => x"0b0bde98", +5576 => x"3f0b0b82", +5577 => x"fcc80b88", +5578 => x"05080b0b", +5579 => x"82fc8c08", +5580 => x"59550b0b", +5581 => x"0bfce239", +5582 => x"770b0b82", +5583 => x"fc8c0c73", +5584 => x"0b0b82fc", +5585 => x"bc0c0b0b", +5586 => x"0bfb9039", +5587 => x"7284150c", +5588 => x"0b0b0bfc", +5589 => x"c439fa3d", +5590 => x"0d7a7902", +5591 => x"8805a705", +5592 => x"33565253", +5593 => x"8373270b", +5594 => x"0b0b0b8e", +5595 => x"38708306", +5596 => x"5271802e", +5597 => x"0b0b0b0b", +5598 => x"b438ff13", +5599 => x"5372ff2e", +5600 => x"0b0b0b0b", +5601 => x"9f387033", +5602 => x"5273722e", +5603 => x"0b0b0b0b", +5604 => x"95388111", +5605 => x"ff145451", +5606 => x"72ff2e09", +5607 => x"81060b0b", +5608 => x"0b0be338", +5609 => x"80517080", +5610 => x"0c883d0d", +5611 => x"04707257", +5612 => x"55835175", +5613 => x"82802914", +5614 => x"ff125256", +5615 => x"7080250b", +5616 => x"0b0b0bef", +5617 => x"38837327", +5618 => x"0b0b0b80", +5619 => x"ce387408", +5620 => x"76327009", +5621 => x"f7fbfdff", +5622 => x"120670f8", +5623 => x"84828180", +5624 => x"06515151", +5625 => x"70802e0b", +5626 => x"0b0b0ba0", +5627 => x"38745180", +5628 => x"52703357", +5629 => x"73772e0b", +5630 => x"0b0bffaa", +5631 => x"38811181", +5632 => x"13535183", +5633 => x"72270b0b", +5634 => x"0b0be638", +5635 => x"fc138416", +5636 => x"56537283", +5637 => x"260b0b0b", +5638 => x"ffb43874", +5639 => x"510b0b0b", +5640 => x"fed839fa", +5641 => x"3d0d787a", +5642 => x"7c727272", +5643 => x"57575759", +5644 => x"56567476", +5645 => x"270b0b0b", +5646 => x"0bbe3876", +5647 => x"15517571", +5648 => x"270b0b0b", +5649 => x"0bb23870", +5650 => x"7717ff14", +5651 => x"54555371", +5652 => x"ff2e0b0b", +5653 => x"0b0b9a38", +5654 => x"ff14ff14", +5655 => x"54547233", +5656 => x"7434ff12", +5657 => x"5271ff2e", +5658 => x"0981060b", +5659 => x"0b0b0be8", +5660 => x"3875800c", +5661 => x"883d0d04", +5662 => x"768f260b", +5663 => x"0b0b0b9f", +5664 => x"38ff1252", +5665 => x"71ff2e0b", +5666 => x"0b0b0be5", +5667 => x"38727081", +5668 => x"05543374", +5669 => x"70810556", +5670 => x"340b0b0b", +5671 => x"0be33974", +5672 => x"76078306", +5673 => x"51700b0b", +5674 => x"0b0bd638", +5675 => x"75755451", +5676 => x"72708405", +5677 => x"54087170", +5678 => x"8405530c", +5679 => x"72708405", +5680 => x"54087170", +5681 => x"8405530c", +5682 => x"72708405", +5683 => x"54087170", +5684 => x"8405530c", +5685 => x"72708405", +5686 => x"54087170", +5687 => x"8405530c", +5688 => x"f0125271", +5689 => x"8f260b0b", +5690 => x"0b0bc538", +5691 => x"8372270b", +5692 => x"0b0b0b99", +5693 => x"38727084", +5694 => x"05540871", +5695 => x"70840553", +5696 => x"0cfc1252", +5697 => x"7183260b", +5698 => x"0b0b0be9", +5699 => x"3870540b", +5700 => x"0b0bfeed", +5701 => x"39fc3d0d", +5702 => x"76797102", +5703 => x"8c059f05", +5704 => x"33575553", +5705 => x"55837227", +5706 => x"0b0b0b0b", +5707 => x"8e387483", +5708 => x"06517080", +5709 => x"2e0b0b0b", +5710 => x"0baa38ff", +5711 => x"125271ff", +5712 => x"2e0b0b0b", +5713 => x"0b973873", +5714 => x"73708105", +5715 => x"5534ff12", +5716 => x"5271ff2e", +5717 => x"0981060b", +5718 => x"0b0b0beb", +5719 => x"3874800c", +5720 => x"863d0d04", +5721 => x"7474882b", +5722 => x"75077071", +5723 => x"902b0751", +5724 => x"54518f72", +5725 => x"270b0b0b", +5726 => x"0ba93872", +5727 => x"71708405", +5728 => x"530c7271", +5729 => x"70840553", +5730 => x"0c727170", +5731 => x"8405530c", +5732 => x"72717084", +5733 => x"05530cf0", +5734 => x"1252718f", +5735 => x"260b0b0b", +5736 => x"0bd93883", +5737 => x"72270b0b", +5738 => x"0b0b9438", +5739 => x"72717084", +5740 => x"05530cfc", +5741 => x"12527183", +5742 => x"260b0b0b", +5743 => x"0bee3870", +5744 => x"530b0b0b", +5745 => x"fef53904", +5746 => x"04f93d0d", +5747 => x"797b80cc", +5748 => x"12085658", +5749 => x"5673802e", +5750 => x"0b0b0b0b", +5751 => x"a9387610", +5752 => x"10147008", +5753 => x"55557380", +5754 => x"2e0b0b0b", +5755 => x"80c03873", +5756 => x"08750c80", +5757 => x"0b90150c", +5758 => x"800b8c15", +5759 => x"0c735574", +5760 => x"800c893d", +5761 => x"0d049053", +5762 => x"84527551", +5763 => x"0b0b0ba8", +5764 => x"c63f8008", +5765 => x"80cc170c", +5766 => x"80085580", +5767 => x"08802e0b", +5768 => x"0b0b0bdb", +5769 => x"38800854", +5770 => x"0b0b0bff", +5771 => x"b1398177", +5772 => x"2b701010", +5773 => x"94055458", +5774 => x"81527551", +5775 => x"0b0b0ba8", +5776 => x"963f8008", +5777 => x"80085654", +5778 => x"8008802e", +5779 => x"0b0b0bff", +5780 => x"ae387680", +5781 => x"0884050c", +5782 => x"77800888", +5783 => x"050c800b", +5784 => x"90150c80", +5785 => x"0b8c150c", +5786 => x"73550b0b", +5787 => x"0bff9039", +5788 => x"70707452", +5789 => x"71802e0b", +5790 => x"0b0b0b95", +5791 => x"38738413", +5792 => x"08101080", +5793 => x"cc120805", +5794 => x"7008740c", +5795 => x"73710c51", +5796 => x"51505004", +5797 => x"f53d0d7d", +5798 => x"7f616390", +5799 => x"13089414", +5800 => x"5b5d5b5c", +5801 => x"5c5c8057", +5802 => x"8216227a", +5803 => x"71291977", +5804 => x"227c7129", +5805 => x"72902a05", +5806 => x"70902a73", +5807 => x"83ffff06", +5808 => x"72848080", +5809 => x"29057b70", +5810 => x"84055d0c", +5811 => x"811c5c52", +5812 => x"535a5555", +5813 => x"7877240b", +5814 => x"0b0b0bcc", +5815 => x"3877802e", +5816 => x"0b0b0b0b", +5817 => x"9a387888", +5818 => x"1c08250b", +5819 => x"0b0b0b96", +5820 => x"38781010", +5821 => x"1b789412", +5822 => x"0c548119", +5823 => x"901c0c7a", +5824 => x"800c8d3d", +5825 => x"0d04841b", +5826 => x"08810552", +5827 => x"7b510b0b", +5828 => x"0bfdb63f", +5829 => x"8008901c", +5830 => x"08101088", +5831 => x"05548c1c", +5832 => x"5380088c", +5833 => x"0552540b", +5834 => x"0bfedcdf", +5835 => x"3f7a527b", +5836 => x"510b0b0b", +5837 => x"feba3f73", +5838 => x"79101011", +5839 => x"7994120c", +5840 => x"55811a90", +5841 => x"120c5b0b", +5842 => x"0b0bffb3", +5843 => x"39f63d0d", +5844 => x"7c7e6062", +5845 => x"890b8812", +5846 => x"355b5e5c", +5847 => x"59598056", +5848 => x"81557477", +5849 => x"250b0b0b", +5850 => x"0b903874", +5851 => x"10811757", +5852 => x"55767524", +5853 => x"0b0b0b0b", +5854 => x"f2387552", +5855 => x"78510b0b", +5856 => x"0bfcc63f", +5857 => x"80086180", +5858 => x"0894050c", +5859 => x"56810b80", +5860 => x"0890050c", +5861 => x"8957767a", +5862 => x"250b0b0b", +5863 => x"80e13876", +5864 => x"18587770", +5865 => x"81055933", +5866 => x"d005548a", +5867 => x"53755278", +5868 => x"510b0b0b", +5869 => x"fdde3f80", +5870 => x"08811858", +5871 => x"56797724", +5872 => x"0b0b0b0b", +5873 => x"dd388118", +5874 => x"58767b25", +5875 => x"0b0b0b0b", +5876 => x"a7387a77", +5877 => x"31577770", +5878 => x"81055933", +5879 => x"d005548a", +5880 => x"53755278", +5881 => x"510b0b0b", +5882 => x"fdaa3f80", +5883 => x"08ff1858", +5884 => x"56760b0b", +5885 => x"0b0bdf38", +5886 => x"75800c8c", +5887 => x"3d0d048a", +5888 => x"18580b0b", +5889 => x"0b0bc239", +5890 => x"70707074", +5891 => x"528072fc", +5892 => x"80800652", +5893 => x"5370732e", +5894 => x"0981060b", +5895 => x"0b0b0b87", +5896 => x"38907271", +5897 => x"2b535371", +5898 => x"81ff0a06", +5899 => x"51700b0b", +5900 => x"0b0b8838", +5901 => x"88137288", +5902 => x"2b535371", +5903 => x"8f0a0651", +5904 => x"700b0b0b", +5905 => x"0b883884", +5906 => x"1372842b", +5907 => x"53537183", +5908 => x"0a065170", +5909 => x"0b0b0b0b", +5910 => x"88388213", +5911 => x"72822b53", +5912 => x"53807224", +5913 => x"0b0b0b0b", +5914 => x"97388113", +5915 => x"729e2a70", +5916 => x"81065152", +5917 => x"53a05270", +5918 => x"802e0b0b", +5919 => x"0b0b8338", +5920 => x"72527180", +5921 => x"0c505050", +5922 => x"04fc3d0d", +5923 => x"76700870", +5924 => x"87065353", +5925 => x"5570802e", +5926 => x"0b0b0b0b", +5927 => x"b1387181", +5928 => x"06518053", +5929 => x"70732e09", +5930 => x"81060b0b", +5931 => x"0b0b9838", +5932 => x"710a100a", +5933 => x"70810652", +5934 => x"5370802e", +5935 => x"0b0b0b81", +5936 => x"89387275", +5937 => x"0c815372", +5938 => x"800c863d", +5939 => x"0d047072", +5940 => x"83ffff06", +5941 => x"52547080", +5942 => x"2e0b0b0b", +5943 => x"80e03871", +5944 => x"81ff0651", +5945 => x"700b0b0b", +5946 => x"0b883888", +5947 => x"1472882a", +5948 => x"5354718f", +5949 => x"0651700b", +5950 => x"0b0b0b88", +5951 => x"38841472", +5952 => x"842a5354", +5953 => x"71830651", +5954 => x"700b0b0b", +5955 => x"0b883882", +5956 => x"1472822a", +5957 => x"53547181", +5958 => x"0651700b", +5959 => x"0b0b0b94", +5960 => x"38811472", +5961 => x"0a100a53", +5962 => x"54a05371", +5963 => x"802e0b0b", +5964 => x"0bff9438", +5965 => x"71750c73", +5966 => x"800c863d", +5967 => x"0d049072", +5968 => x"712a5354", +5969 => x"0b0b0bff", +5970 => x"96397182", +5971 => x"2a750c82", +5972 => x"0b800c86", +5973 => x"3d0d0470", +5974 => x"70815273", +5975 => x"510b0b0b", +5976 => x"f8e73f74", +5977 => x"80089405", +5978 => x"0c810b80", +5979 => x"0890050c", +5980 => x"505004ee", +5981 => x"3d0d6567", +5982 => x"90120890", +5983 => x"12085856", +5984 => x"57537375", +5985 => x"250b0b0b", +5986 => x"0b8d3872", +5987 => x"76717790", +5988 => x"14085957", +5989 => x"58544274", +5990 => x"14708815", +5991 => x"08248415", +5992 => x"08055365", +5993 => x"525e0b0b", +5994 => x"0bf89e3f", +5995 => x"80088008", +5996 => x"94057060", +5997 => x"822b7211", +5998 => x"43465941", +5999 => x"427f7f27", +6000 => x"0b0b0b0b", +6001 => x"91388077", +6002 => x"70840559", +6003 => x"0c7e7726", +6004 => x"0b0b0b0b", +6005 => x"f1389413", +6006 => x"74101011", +6007 => x"94187710", +6008 => x"10116341", +6009 => x"445d5d5f", +6010 => x"7a61270b", +6011 => x"0b0b81c9", +6012 => x"387a0870", +6013 => x"83ffff06", +6014 => x"59537780", +6015 => x"2e0b0b0b", +6016 => x"80cb387e", +6017 => x"7d575780", +6018 => x"5a767084", +6019 => x"05580870", +6020 => x"83ffff06", +6021 => x"82182271", +6022 => x"7b29057c", +6023 => x"1173902a", +6024 => x"7c297a22", +6025 => x"5e7d0571", +6026 => x"902a0570", +6027 => x"902a5f59", +6028 => x"51515454", +6029 => x"74762372", +6030 => x"82172384", +6031 => x"16567b77", +6032 => x"260b0b0b", +6033 => x"0bc33879", +6034 => x"760c7a08", +6035 => x"5372902a", +6036 => x"5877802e", +6037 => x"0b0b0b80", +6038 => x"d1387e7d", +6039 => x"5757807d", +6040 => x"08705b56", +6041 => x"5a767084", +6042 => x"05580870", +6043 => x"83ffff06", +6044 => x"707a297b", +6045 => x"902a057c", +6046 => x"11515154", +6047 => x"54727623", +6048 => x"74821723", +6049 => x"84167490", +6050 => x"2a792971", +6051 => x"08821322", +6052 => x"5d5b7b05", +6053 => x"74902a05", +6054 => x"70902a5c", +6055 => x"56567b77", +6056 => x"260b0b0b", +6057 => x"ffbf3874", +6058 => x"760c841b", +6059 => x"841e5e5b", +6060 => x"607b260b", +6061 => x"0b0bfeb9", +6062 => x"38626005", +6063 => x"56807e25", +6064 => x"0b0b0b0b", +6065 => x"9838fc16", +6066 => x"5675080b", +6067 => x"0b0b0b8d", +6068 => x"38ff1e5e", +6069 => x"7d80240b", +6070 => x"0b0b0bea", +6071 => x"387d6290", +6072 => x"050c6180", +6073 => x"0c943d0d", +6074 => x"04f73d0d", +6075 => x"7b7d7f70", +6076 => x"83065858", +6077 => x"5a5a740b", +6078 => x"0b0b8181", +6079 => x"3875822c", +6080 => x"5675802e", +6081 => x"0b0b0b80", +6082 => x"cc3880c8", +6083 => x"1a087056", +6084 => x"5776802e", +6085 => x"0b0b0b81", +6086 => x"a3387581", +6087 => x"0655740b", +6088 => x"0b0b0bb8", +6089 => x"3875812c", +6090 => x"5675802e", +6091 => x"0b0b0b0b", +6092 => x"a4387608", +6093 => x"70595574", +6094 => x"802e0b0b", +6095 => x"0b80e038", +6096 => x"74577581", +6097 => x"06557480", +6098 => x"2e0b0b0b", +6099 => x"0bd7380b", +6100 => x"0b0b0b88", +6101 => x"3978800c", +6102 => x"8b3d0d04", +6103 => x"76537852", +6104 => x"79510b0b", +6105 => x"0bfc8c3f", +6106 => x"80087953", +6107 => x"7a52550b", +6108 => x"0b0bf5fc", +6109 => x"3f74590b", +6110 => x"0b0bffa9", +6111 => x"39805474", +6112 => x"10100b0b", +6113 => x"82f49c05", +6114 => x"70085455", +6115 => x"78527951", +6116 => x"0b0b0bf5", +6117 => x"ff3f8008", +6118 => x"590b0b0b", +6119 => x"fedf3976", +6120 => x"53765279", +6121 => x"510b0b0b", +6122 => x"fbc93f80", +6123 => x"08770c80", +6124 => x"08788008", +6125 => x"0c570b0b", +6126 => x"0bff8739", +6127 => x"84f15279", +6128 => x"510b0b0b", +6129 => x"fb913f80", +6130 => x"0880c81b", +6131 => x"0c800875", +6132 => x"80080c76", +6133 => x"81065657", +6134 => x"74802e0b", +6135 => x"0b0bfec5", +6136 => x"380b0b0b", +6137 => x"fef639f5", +6138 => x"3d0d7d7f", +6139 => x"6170852c", +6140 => x"84130890", +6141 => x"14081281", +6142 => x"05881508", +6143 => x"595e5959", +6144 => x"5a5c5c72", +6145 => x"79250b0b", +6146 => x"0b0b9038", +6147 => x"81157310", +6148 => x"54557873", +6149 => x"240b0b0b", +6150 => x"0bf23874", +6151 => x"527b510b", +6152 => x"0b0bf3a5", +6153 => x"3f800880", +6154 => x"08940555", +6155 => x"5a807625", +6156 => x"0b0b0b0b", +6157 => x"94387553", +6158 => x"80747084", +6159 => x"05560cff", +6160 => x"1353720b", +6161 => x"0b0b0bf0", +6162 => x"38941b90", +6163 => x"1c081010", +6164 => x"11799f06", +6165 => x"5a585377", +6166 => x"802e0b0b", +6167 => x"0b80ca38", +6168 => x"a0783155", +6169 => x"80567208", +6170 => x"782b7607", +6171 => x"74708405", +6172 => x"560c7270", +6173 => x"84055408", +6174 => x"752a5676", +6175 => x"73260b0b", +6176 => x"0b0be338", +6177 => x"75740c75", +6178 => x"802e0b0b", +6179 => x"0b0b8438", +6180 => x"811959ff", +6181 => x"19901b0c", +6182 => x"7a527b51", +6183 => x"0b0b0bf3", +6184 => x"cf3f7980", +6185 => x"0c8d3d0d", +6186 => x"04727084", +6187 => x"05540874", +6188 => x"70840556", +6189 => x"0c727727", +6190 => x"0b0b0b0b", +6191 => x"d6387270", +6192 => x"84055408", +6193 => x"74708405", +6194 => x"560c7673", +6195 => x"260b0b0b", +6196 => x"0bd7380b", +6197 => x"0b0bffbb", +6198 => x"39fb3d0d", +6199 => x"77799011", +6200 => x"08901308", +6201 => x"71317056", +6202 => x"54555754", +6203 => x"700b0b0b", +6204 => x"0bb33894", +6205 => x"1473822b", +6206 => x"71117119", +6207 => x"94055254", +6208 => x"5255fc12", +6209 => x"fc127108", +6210 => x"71085656", +6211 => x"52527373", +6212 => x"2e098106", +6213 => x"0b0b0b0b", +6214 => x"93387175", +6215 => x"260b0b0b", +6216 => x"0be03880", +6217 => x"5271800c", +6218 => x"873d0d04", +6219 => x"ff517274", +6220 => x"260b0b0b", +6221 => x"0b833881", +6222 => x"5170800c", +6223 => x"873d0d04", +6224 => x"f33d0d7f", +6225 => x"61637055", +6226 => x"71545754", +6227 => x"560b0b0b", +6228 => x"ff873f80", +6229 => x"08548008", +6230 => x"802e0b0b", +6231 => x"0b81e038", +6232 => x"80547380", +6233 => x"08240b0b", +6234 => x"0b81f638", +6235 => x"84130852", +6236 => x"75510b0b", +6237 => x"0bf0d23f", +6238 => x"80087480", +6239 => x"088c050c", +6240 => x"90140894", +6241 => x"15711010", +6242 => x"11941990", +6243 => x"1a081010", +6244 => x"11800894", +6245 => x"055d415d", +6246 => x"415a5c5d", +6247 => x"805a7770", +6248 => x"84055908", +6249 => x"7083ffff", +6250 => x"067a7084", +6251 => x"055c0870", +6252 => x"83ffff06", +6253 => x"7271311e", +6254 => x"74902a73", +6255 => x"902a3171", +6256 => x"902c1170", +6257 => x"902c4151", +6258 => x"55515657", +6259 => x"57547377", +6260 => x"23728218", +6261 => x"23841757", +6262 => x"7b79260b", +6263 => x"0b0bffbe", +6264 => x"38777e27", +6265 => x"0b0b0b0b", +6266 => x"b0387770", +6267 => x"84055908", +6268 => x"7083ffff", +6269 => x"067b1170", +6270 => x"902c7390", +6271 => x"2a057090", +6272 => x"2c5e5351", +6273 => x"54547377", +6274 => x"23728218", +6275 => x"23841757", +6276 => x"7d78260b", +6277 => x"0b0b0bd2", +6278 => x"38fc1757", +6279 => x"76080b0b", +6280 => x"0b0b9138", +6281 => x"ff1bfc18", +6282 => x"585b7608", +6283 => x"802e0b0b", +6284 => x"0b0bf138", +6285 => x"7a901e0c", +6286 => x"7c800c8f", +6287 => x"3d0d0480", +6288 => x"08527551", +6289 => x"0b0b0bef", +6290 => x"803f8008", +6291 => x"5d810b80", +6292 => x"0890050c", +6293 => x"73800894", +6294 => x"050c7c80", +6295 => x"0c8f3d0d", +6296 => x"04727554", +6297 => x"55810b84", +6298 => x"14085376", +6299 => x"52540b0b", +6300 => x"0beed63f", +6301 => x"80087480", +6302 => x"088c050c", +6303 => x"90140894", +6304 => x"15711010", +6305 => x"11941990", +6306 => x"1a081010", +6307 => x"11800894", +6308 => x"055d415d", +6309 => x"415a5c5d", +6310 => x"805a0b0b", +6311 => x"0bfdff39", +6312 => x"fa3d0d78", +6313 => x"7a7c5457", +6314 => x"7258769f", +6315 => x"fe0a0686", +6316 => x"bf0a0553", +6317 => x"53807225", +6318 => x"0b0b0b0b", +6319 => x"95387154", +6320 => x"80557375", +6321 => x"53730c71", +6322 => x"84140c72", +6323 => x"800c883d", +6324 => x"0d047130", +6325 => x"70942c53", +6326 => x"51937225", +6327 => x"0b0b0b0b", +6328 => x"ab388054", +6329 => x"ec129f71", +6330 => x"3181712b", +6331 => x"5152529e", +6332 => x"72250b0b", +6333 => x"0b0b8338", +6334 => x"81517055", +6335 => x"73755373", +6336 => x"0c718414", +6337 => x"0c72800c", +6338 => x"883d0d04", +6339 => x"a0808072", +6340 => x"2c548055", +6341 => x"0b0b0bff", +6342 => x"a939f63d", +6343 => x"0d7c7e94", +6344 => x"11901208", +6345 => x"101011fc", +6346 => x"11700870", +6347 => x"575a5157", +6348 => x"5853590b", +6349 => x"0b0bf1d0", +6350 => x"3f80087f", +6351 => x"a00b8008", +6352 => x"31710c53", +6353 => x"538a0b80", +6354 => x"08250b0b", +6355 => x"0b80f738", +6356 => x"80577376", +6357 => x"260b0b0b", +6358 => x"80c438f5", +6359 => x"13537280", +6360 => x"2e0b0b0b", +6361 => x"80c838a0", +6362 => x"73317574", +6363 => x"2b78722a", +6364 => x"079ffc0a", +6365 => x"075b5880", +6366 => x"55757427", +6367 => x"0b0b0b0b", +6368 => x"8538fc14", +6369 => x"08557673", +6370 => x"2b75792a", +6371 => x"075b797b", +6372 => x"54790c72", +6373 => x"841a0c78", +6374 => x"800c8c3d", +6375 => x"0d04fc14", +6376 => x"7008f515", +6377 => x"55585472", +6378 => x"0b0b0bff", +6379 => x"ba38749f", +6380 => x"fc0a075a", +6381 => x"765b797b", +6382 => x"54790c72", +6383 => x"841a0c78", +6384 => x"800c8c3d", +6385 => x"0d048b0b", +6386 => x"80083175", +6387 => x"712a9ffc", +6388 => x"0a075b57", +6389 => x"80587574", +6390 => x"270b0b0b", +6391 => x"0b8538fc", +6392 => x"14085895", +6393 => x"1375712b", +6394 => x"79792a07", +6395 => x"5c52797b", +6396 => x"54790c72", +6397 => x"841a0c78", +6398 => x"800c8c3d", +6399 => x"0d04f33d", +6400 => x"0d626462", +6401 => x"64575f75", +6402 => x"405b5981", +6403 => x"527f510b", +6404 => x"0b0bebb5", +6405 => x"3f800880", +6406 => x"0894057e", +6407 => x"70bfffff", +6408 => x"06705f71", +6409 => x"fe0a0670", +6410 => x"4270942a", +6411 => x"5b525755", +6412 => x"59577580", +6413 => x"2e0b0b0b", +6414 => x"0b873873", +6415 => x"90800a07", +6416 => x"5b7d5372", +6417 => x"802e0b0b", +6418 => x"0b80e038", +6419 => x"725c8f3d", +6420 => x"f405510b", +6421 => x"0b0bf0b1", +6422 => x"3f800855", +6423 => x"8008802e", +6424 => x"0b0b0b81", +6425 => x"8d38a00b", +6426 => x"8008317b", +6427 => x"712b7d07", +6428 => x"790c537a", +6429 => x"80082a5b", +6430 => x"7a70841a", +6431 => x"0c703070", +6432 => x"72078025", +6433 => x"82713170", +6434 => x"901c0c51", +6435 => x"51545475", +6436 => x"802e0b0b", +6437 => x"0b0bb638", +6438 => x"7416f7cd", +6439 => x"05790cb5", +6440 => x"75317a0c", +6441 => x"76800c8f", +6442 => x"3d0d048f", +6443 => x"3df00551", +6444 => x"0b0b0bef", +6445 => x"d43f7a78", +6446 => x"0c810b90", +6447 => x"180c810b", +6448 => x"8008a005", +6449 => x"5653750b", +6450 => x"0b0b0bcc", +6451 => x"38f7ce15", +6452 => x"790c7285", +6453 => x"2b731010", +6454 => x"19fc1108", +6455 => x"5354540b", +6456 => x"0b0beea4", +6457 => x"3f738008", +6458 => x"317a0c76", +6459 => x"800c8f3d", +6460 => x"0d047b78", +6461 => x"0c7a7084", +6462 => x"1a0c7030", +6463 => x"70720780", +6464 => x"25827131", +6465 => x"70901c0c", +6466 => x"51515454", +6467 => x"0b0b0bfe", +6468 => x"fe39f03d", +6469 => x"0d626466", +6470 => x"953de411", +6471 => x"577256f8", +6472 => x"05545858", +6473 => x"580b0b0b", +6474 => x"fbf03f92", +6475 => x"3de01154", +6476 => x"7653f005", +6477 => x"510b0b0b", +6478 => x"fbe03f90", +6479 => x"17089017", +6480 => x"0831852b", +6481 => x"7b7b3111", +6482 => x"51568076", +6483 => x"250b0b0b", +6484 => x"0bb03875", +6485 => x"90800a29", +6486 => x"6005407d", +6487 => x"7f585476", +6488 => x"557f6158", +6489 => x"52765392", +6490 => x"3de80551", +6491 => x"0b0b80d6", +6492 => x"ac3f7b7d", +6493 => x"58780c76", +6494 => x"84190c77", +6495 => x"800c923d", +6496 => x"0d047530", +6497 => x"7090800a", +6498 => x"291f5f56", +6499 => x"7d7f5854", +6500 => x"76557f61", +6501 => x"58527653", +6502 => x"923de805", +6503 => x"510b0b80", +6504 => x"d5fb3f7b", +6505 => x"7d58780c", +6506 => x"7684190c", +6507 => x"77800c92", +6508 => x"3d0d04f3", +6509 => x"3d0d7f61", +6510 => x"575c9ffc", +6511 => x"0a578058", +6512 => x"7597240b", +6513 => x"0b0b0b9d", +6514 => x"38751010", +6515 => x"100b0b82", +6516 => x"f2d80584", +6517 => x"11087108", +6518 => x"7e0c841e", +6519 => x"0c7c800c", +6520 => x"568f3d0d", +6521 => x"04807625", +6522 => x"0b0b0b0b", +6523 => x"ab388d3d", +6524 => x"5b80c882", +6525 => x"0a59805a", +6526 => x"78547955", +6527 => x"76527753", +6528 => x"7a510b0b", +6529 => x"0bb6963f", +6530 => x"7c7eff18", +6531 => x"58595775", +6532 => x"80240b0b", +6533 => x"0b0be138", +6534 => x"767c0c77", +6535 => x"841d0c7b", +6536 => x"800c8f3d", +6537 => x"0d04ef3d", +6538 => x"0d636567", +6539 => x"405d427b", +6540 => x"802e0b0b", +6541 => x"0b85ea38", +6542 => x"61510b0b", +6543 => x"0be7883f", +6544 => x"f81c7084", +6545 => x"120870fc", +6546 => x"0670628b", +6547 => x"0570f806", +6548 => x"4159455b", +6549 => x"5c415796", +6550 => x"74270b0b", +6551 => x"0b82fe38", +6552 => x"807b247e", +6553 => x"7c260759", +6554 => x"80547874", +6555 => x"2e098106", +6556 => x"0b0b0b82", +6557 => x"e138777b", +6558 => x"250b0b0b", +6559 => x"82ab3877", +6560 => x"170b0b82", +6561 => x"fcc80b88", +6562 => x"05085e56", +6563 => x"7c762e0b", +6564 => x"0b0b859f", +6565 => x"38841608", +6566 => x"70fe0617", +6567 => x"84110881", +6568 => x"06515555", +6569 => x"730b0b0b", +6570 => x"82bb3874", +6571 => x"fc06597c", +6572 => x"762e0b0b", +6573 => x"0b85c938", +6574 => x"77195f7e", +6575 => x"7b250b0b", +6576 => x"0b82aa38", +6577 => x"79810654", +6578 => x"730b0b0b", +6579 => x"82f53876", +6580 => x"77083184", +6581 => x"1108fc06", +6582 => x"565a7580", +6583 => x"2e0b0b0b", +6584 => x"0b97387c", +6585 => x"762e0b0b", +6586 => x"0b85d438", +6587 => x"74191859", +6588 => x"787b250b", +6589 => x"0b0b84e2", +6590 => x"3879802e", +6591 => x"0b0b0b82", +6592 => x"c2387715", +6593 => x"567a7624", +6594 => x"0b0b0b82", +6595 => x"b6388c1a", +6596 => x"08881b08", +6597 => x"718c120c", +6598 => x"88120c55", +6599 => x"79765957", +6600 => x"881761fc", +6601 => x"05575975", +6602 => x"a4260b0b", +6603 => x"0b86e638", +6604 => x"7b795555", +6605 => x"9376270b", +6606 => x"0b0b80d1", +6607 => x"387b7084", +6608 => x"055d087c", +6609 => x"56790c74", +6610 => x"70840556", +6611 => x"088c180c", +6612 => x"9017549b", +6613 => x"76270b0b", +6614 => x"0b0bb238", +6615 => x"74708405", +6616 => x"5608740c", +6617 => x"74708405", +6618 => x"56089418", +6619 => x"0c981754", +6620 => x"a376270b", +6621 => x"0b0b0b95", +6622 => x"38747084", +6623 => x"05560874", +6624 => x"0c747084", +6625 => x"0556089c", +6626 => x"180ca017", +6627 => x"54747084", +6628 => x"05560874", +6629 => x"70840556", +6630 => x"0c747084", +6631 => x"05560874", +6632 => x"70840556", +6633 => x"0c740874", +6634 => x"0c777b31", +6635 => x"56758f26", +6636 => x"0b0b0b80", +6637 => x"d5388417", +6638 => x"08810678", +6639 => x"0784180c", +6640 => x"77178411", +6641 => x"08810784", +6642 => x"120c5461", +6643 => x"510b0b0b", +6644 => x"e3f63f88", +6645 => x"17547380", +6646 => x"0c933d0d", +6647 => x"04905b0b", +6648 => x"0b0bfcfc", +6649 => x"3978560b", +6650 => x"0b0bfdd8", +6651 => x"398c1608", +6652 => x"88170871", +6653 => x"8c120c88", +6654 => x"120c557e", +6655 => x"707c3157", +6656 => x"588f7627", +6657 => x"0b0b0bff", +6658 => x"ad387a17", +6659 => x"84180881", +6660 => x"067c0784", +6661 => x"190c7681", +6662 => x"0784120c", +6663 => x"76118411", +6664 => x"08810784", +6665 => x"120c5588", +6666 => x"05526151", +6667 => x"0b0bffbc", +6668 => x"873f6151", +6669 => x"0b0b0be3", +6670 => x"8f3f8817", +6671 => x"540b0b0b", +6672 => x"ff94397d", +6673 => x"5261510b", +6674 => x"0b0bcef6", +6675 => x"3f800859", +6676 => x"8008802e", +6677 => x"0b0b0b81", +6678 => x"b7388008", +6679 => x"f8056084", +6680 => x"0508fe06", +6681 => x"61055557", +6682 => x"76742e0b", +6683 => x"0b0b84b7", +6684 => x"38fc1856", +6685 => x"75a4260b", +6686 => x"0b0b81c1", +6687 => x"387b8008", +6688 => x"55559376", +6689 => x"270b0b0b", +6690 => x"80e03874", +6691 => x"70840556", +6692 => x"08800870", +6693 => x"8405800c", +6694 => x"0c800875", +6695 => x"70840557", +6696 => x"08717084", +6697 => x"05530c54", +6698 => x"9b76270b", +6699 => x"0b0b0bba", +6700 => x"38747084", +6701 => x"05560874", +6702 => x"70840556", +6703 => x"0c747084", +6704 => x"05560874", +6705 => x"70840556", +6706 => x"0ca37627", +6707 => x"0b0b0b0b", +6708 => x"99387470", +6709 => x"84055608", +6710 => x"74708405", +6711 => x"560c7470", +6712 => x"84055608", +6713 => x"74708405", +6714 => x"560c7470", +6715 => x"84055608", +6716 => x"74708405", +6717 => x"560c7470", +6718 => x"84055608", +6719 => x"74708405", +6720 => x"560c7408", +6721 => x"740c7b52", +6722 => x"61510b0b", +6723 => x"ffbaa93f", +6724 => x"61510b0b", +6725 => x"0be1b13f", +6726 => x"78547380", +6727 => x"0c933d0d", +6728 => x"047d5261", +6729 => x"510b0b0b", +6730 => x"cd983f80", +6731 => x"08800c93", +6732 => x"3d0d0484", +6733 => x"1608550b", +6734 => x"0b0bfaef", +6735 => x"3975537b", +6736 => x"52800851", +6737 => x"0b0bfec0", +6738 => x"c23f7b52", +6739 => x"61510b0b", +6740 => x"ffb9e53f", +6741 => x"0b0b0bff", +6742 => x"b7398c16", +6743 => x"08881708", +6744 => x"718c120c", +6745 => x"88120c55", +6746 => x"8c1a0888", +6747 => x"1b08718c", +6748 => x"120c8812", +6749 => x"0c557979", +6750 => x"59570b0b", +6751 => x"0bfba139", +6752 => x"7719901c", +6753 => x"55557375", +6754 => x"240b0b0b", +6755 => x"fab6387a", +6756 => x"17700b0b", +6757 => x"82fcc80b", +6758 => x"88050c75", +6759 => x"7c318107", +6760 => x"84120c5d", +6761 => x"84170881", +6762 => x"067b0784", +6763 => x"180c6151", +6764 => x"0b0b0be0", +6765 => x"933f8817", +6766 => x"540b0b0b", +6767 => x"fc983974", +6768 => x"1918901c", +6769 => x"555d737d", +6770 => x"240b0b0b", +6771 => x"faab388c", +6772 => x"1a08881b", +6773 => x"08718c12", +6774 => x"0c88120c", +6775 => x"55881a61", +6776 => x"fc055759", +6777 => x"75a4260b", +6778 => x"0b0b81ca", +6779 => x"387b7955", +6780 => x"55937627", +6781 => x"0b0b0b80", +6782 => x"d1387b70", +6783 => x"84055d08", +6784 => x"7c56790c", +6785 => x"74708405", +6786 => x"56088c1b", +6787 => x"0c901a54", +6788 => x"9b76270b", +6789 => x"0b0b0bb2", +6790 => x"38747084", +6791 => x"05560874", +6792 => x"0c747084", +6793 => x"05560894", +6794 => x"1b0c981a", +6795 => x"54a37627", +6796 => x"0b0b0b0b", +6797 => x"95387470", +6798 => x"84055608", +6799 => x"740c7470", +6800 => x"84055608", +6801 => x"9c1b0ca0", +6802 => x"1a547470", +6803 => x"84055608", +6804 => x"74708405", +6805 => x"560c7470", +6806 => x"84055608", +6807 => x"74708405", +6808 => x"560c7408", +6809 => x"740c7a1a", +6810 => x"700b0b82", +6811 => x"fcc80b88", +6812 => x"050c7d7c", +6813 => x"31810784", +6814 => x"120c5484", +6815 => x"1a088106", +6816 => x"7b07841b", +6817 => x"0c61510b", +6818 => x"0b0bdebc", +6819 => x"3f78540b", +6820 => x"0b0bfd86", +6821 => x"3975537b", +6822 => x"5278510b", +6823 => x"0bfebdeb", +6824 => x"3f0b0b0b", +6825 => x"fa833984", +6826 => x"1708fc06", +6827 => x"18605858", +6828 => x"0b0b0bf9", +6829 => x"f4397553", +6830 => x"7b527851", +6831 => x"0b0bfebd", +6832 => x"ca3f7a1a", +6833 => x"700b0b82", +6834 => x"fcc80b88", +6835 => x"050c7d7c", +6836 => x"31810784", +6837 => x"120c5484", +6838 => x"1a088106", +6839 => x"7b07841b", +6840 => x"0c0b0b0b", +6841 => x"ff9f3970", +6842 => x"70707075", +6843 => x"77535371", +6844 => x"54733070", +6845 => x"75079f2a", +6846 => x"7075fe0a", +6847 => x"06079081", +6848 => x"0a119ffe", +6849 => x"0a723107", +6850 => x"709f2a81", +6851 => x"7131800c", +6852 => x"51515151", +6853 => x"51505050", +6854 => x"50047070", +6855 => x"70707577", +6856 => x"53537154", +6857 => x"73307075", +6858 => x"079f2a70", +6859 => x"75fe0a06", +6860 => x"079ffe0a", +6861 => x"71319f2a", +6862 => x"800c5151", +6863 => x"51505050", +6864 => x"50047070", +6865 => x"7070800b", +6866 => x"0b0b8385", +6867 => x"840c7651", +6868 => x"0b0b0b8c", +6869 => x"f33f8008", +6870 => x"538008ff", +6871 => x"2e0b0b0b", +6872 => x"0b893872", +6873 => x"800c5050", +6874 => x"5050040b", +6875 => x"0b838584", +6876 => x"08547380", +6877 => x"2e0b0b0b", +6878 => x"0be93875", +6879 => x"74710c52", +6880 => x"72800c50", +6881 => x"50505004", +6882 => x"f93d0d79", +6883 => x"7c557b54", +6884 => x"8e112270", +6885 => x"902b7090", +6886 => x"2c55570b", +6887 => x"0b82f4ec", +6888 => x"08535856", +6889 => x"0b0b0b88", +6890 => x"ac3f8008", +6891 => x"57800b80", +6892 => x"08240b0b", +6893 => x"0b0b9338", +6894 => x"80d01608", +6895 => x"80080580", +6896 => x"d0170c76", +6897 => x"800c893d", +6898 => x"0d048c16", +6899 => x"2283dfff", +6900 => x"0655748c", +6901 => x"17237680", +6902 => x"0c893d0d", +6903 => x"04fa3d0d", +6904 => x"788c1122", +6905 => x"70882a70", +6906 => x"81065157", +6907 => x"5856740b", +6908 => x"0b0b0bae", +6909 => x"388c1622", +6910 => x"83dfff06", +6911 => x"55748c17", +6912 => x"237a5479", +6913 => x"538e1622", +6914 => x"70902b70", +6915 => x"902c5456", +6916 => x"0b0b82f4", +6917 => x"ec085256", +6918 => x"0b0b0b83", +6919 => x"f33f883d", +6920 => x"0d048254", +6921 => x"80538e16", +6922 => x"2270902b", +6923 => x"70902c54", +6924 => x"560b0b82", +6925 => x"f4ec0852", +6926 => x"570b0b0b", +6927 => x"86d03f8c", +6928 => x"162283df", +6929 => x"ff065574", +6930 => x"8c17237a", +6931 => x"5479538e", +6932 => x"16227090", +6933 => x"2b70902c", +6934 => x"54560b0b", +6935 => x"82f4ec08", +6936 => x"52560b0b", +6937 => x"0b83a93f", +6938 => x"883d0d04", +6939 => x"f93d0d79", +6940 => x"7c557b54", +6941 => x"8e112270", +6942 => x"902b7090", +6943 => x"2c55570b", +6944 => x"0b82f4ec", +6945 => x"08535856", +6946 => x"0b0b0b86", +6947 => x"813f8008", +6948 => x"578008ff", +6949 => x"2e0b0b0b", +6950 => x"0b99388c", +6951 => x"1622a080", +6952 => x"0755748c", +6953 => x"17238008", +6954 => x"80d0170c", +6955 => x"76800c89", +6956 => x"3d0d048c", +6957 => x"162283df", +6958 => x"ff065574", +6959 => x"8c172376", +6960 => x"800c893d", +6961 => x"0d047070", +6962 => x"70748e11", +6963 => x"2270902b", +6964 => x"70902c55", +6965 => x"5151530b", +6966 => x"0b82f4ec", +6967 => x"08510b0b", +6968 => x"0b84a03f", +6969 => x"50505004", +6970 => x"fb3d0d77", +6971 => x"79707207", +6972 => x"83065354", +6973 => x"52700b0b", +6974 => x"0b0b9638", +6975 => x"71737308", +6976 => x"54565471", +6977 => x"73082e0b", +6978 => x"0b0b80d0", +6979 => x"38737554", +6980 => x"52713370", +6981 => x"81ff0652", +6982 => x"5470802e", +6983 => x"0b0b0b0b", +6984 => x"a5387233", +6985 => x"5570752e", +6986 => x"0981060b", +6987 => x"0b0b0b99", +6988 => x"38811281", +6989 => x"14713370", +6990 => x"81ff0654", +6991 => x"56545270", +6992 => x"0b0b0b0b", +6993 => x"dd387233", +6994 => x"557381ff", +6995 => x"067581ff", +6996 => x"06717131", +6997 => x"800c5252", +6998 => x"873d0d04", +6999 => x"710970f7", +7000 => x"fbfdff14", +7001 => x"0670f884", +7002 => x"82818006", +7003 => x"51515170", +7004 => x"0b0b0b0b", +7005 => x"9e388414", +7006 => x"84167108", +7007 => x"54565471", +7008 => x"75082e0b", +7009 => x"0b0b0bd4", +7010 => x"38737554", +7011 => x"520b0b0b", +7012 => x"feff3980", +7013 => x"0b800c87", +7014 => x"3d0d0470", +7015 => x"70707075", +7016 => x"70718306", +7017 => x"53555270", +7018 => x"0b0b0b80", +7019 => x"c0387170", +7020 => x"087009f7", +7021 => x"fbfdff12", +7022 => x"0670f884", +7023 => x"82818006", +7024 => x"51515253", +7025 => x"700b0b0b", +7026 => x"0ba13884", +7027 => x"13700870", +7028 => x"09f7fbfd", +7029 => x"ff120670", +7030 => x"f8848281", +7031 => x"80065151", +7032 => x"52537080", +7033 => x"2e0b0b0b", +7034 => x"0be13872", +7035 => x"52713351", +7036 => x"70802e0b", +7037 => x"0b0b0b8e", +7038 => x"38811270", +7039 => x"33525270", +7040 => x"0b0b0b0b", +7041 => x"f4387174", +7042 => x"31800c50", +7043 => x"50505004", +7044 => x"fb3d0d80", +7045 => x"0b0b0b83", +7046 => x"85840c7a", +7047 => x"53795278", +7048 => x"510b0b0b", +7049 => x"88de3f80", +7050 => x"08558008", +7051 => x"ff2e0b0b", +7052 => x"0b0b8838", +7053 => x"74800c87", +7054 => x"3d0d040b", +7055 => x"0b838584", +7056 => x"08567580", +7057 => x"2e0b0b0b", +7058 => x"0bea3877", +7059 => x"76710c54", +7060 => x"74800c87", +7061 => x"3d0d04fb", +7062 => x"3d0d787a", +7063 => x"29527751", +7064 => x"0b0b0bc2", +7065 => x"dd3f8008", +7066 => x"80085556", +7067 => x"8008802e", +7068 => x"0b0b0b80", +7069 => x"f2388008", +7070 => x"fc0508fc", +7071 => x"06fc0555", +7072 => x"74a4260b", +7073 => x"0b0b80e6", +7074 => x"38937527", +7075 => x"0b0b0b80", +7076 => x"c338800b", +7077 => x"80087084", +7078 => x"05800c0c", +7079 => x"80085480", +7080 => x"74708405", +7081 => x"560c9b75", +7082 => x"270b0b0b", +7083 => x"0ba63880", +7084 => x"74708405", +7085 => x"560c8074", +7086 => x"70840556", +7087 => x"0ca37527", +7088 => x"0b0b0b0b", +7089 => x"8f388074", +7090 => x"70840556", +7091 => x"0c807470", +7092 => x"8405560c", +7093 => x"80747084", +7094 => x"05560c80", +7095 => x"74708405", +7096 => x"560c8074", +7097 => x"0c755473", +7098 => x"800c873d", +7099 => x"0d047453", +7100 => x"80528008", +7101 => x"510b0b0b", +7102 => x"d49b3f75", +7103 => x"540b0b0b", +7104 => x"0be53970", +7105 => x"70707080", +7106 => x"0b0b0b83", +7107 => x"85840c76", +7108 => x"510b0b0b", +7109 => x"8a943f80", +7110 => x"08538008", +7111 => x"ff2e0b0b", +7112 => x"0b0b8938", +7113 => x"72800c50", +7114 => x"50505004", +7115 => x"0b0b8385", +7116 => x"84085473", +7117 => x"802e0b0b", +7118 => x"0b0be938", +7119 => x"7574710c", +7120 => x"5272800c", +7121 => x"50505050", +7122 => x"04fc3d0d", +7123 => x"800b0b0b", +7124 => x"8385840c", +7125 => x"78527751", +7126 => x"0b0b0b8d", +7127 => x"823f8008", +7128 => x"548008ff", +7129 => x"2e0b0b0b", +7130 => x"0b883873", +7131 => x"800c863d", +7132 => x"0d040b0b", +7133 => x"83858408", +7134 => x"5574802e", +7135 => x"0b0b0b0b", +7136 => x"ea387675", +7137 => x"710c5373", +7138 => x"800c863d", +7139 => x"0d04fb3d", +7140 => x"0d800b0b", +7141 => x"0b838584", +7142 => x"0c7a5379", +7143 => x"5278510b", +7144 => x"0b0b8a9e", +7145 => x"3f800855", +7146 => x"8008ff2e", +7147 => x"0b0b0b0b", +7148 => x"88387480", +7149 => x"0c873d0d", +7150 => x"040b0b83", +7151 => x"85840856", +7152 => x"75802e0b", +7153 => x"0b0b0bea", +7154 => x"38777671", +7155 => x"0c547480", +7156 => x"0c873d0d", +7157 => x"04fb3d0d", +7158 => x"800b0b0b", +7159 => x"8385840c", +7160 => x"7a537952", +7161 => x"78510b0b", +7162 => x"0b86b13f", +7163 => x"80085580", +7164 => x"08ff2e0b", +7165 => x"0b0b0b88", +7166 => x"3874800c", +7167 => x"873d0d04", +7168 => x"0b0b8385", +7169 => x"84085675", +7170 => x"802e0b0b", +7171 => x"0b0bea38", +7172 => x"7776710c", +7173 => x"5474800c", +7174 => x"873d0d04", +7175 => x"fc3d0d76", +7176 => x"78700855", +7177 => x"5555720b", +7178 => x"0b0b0b8f", +7179 => x"38735274", +7180 => x"510b0bff", +7181 => x"ac823f86", +7182 => x"3d0d0472", +7183 => x"5274510b", +7184 => x"0b0b0bd8", +7185 => x"3f735274", +7186 => x"510b0bff", +7187 => x"abea3f86", +7188 => x"3d0d04fb", +7189 => x"3d0d7755", +7190 => x"740b0b82", +7191 => x"f4ec082e", +7192 => x"0b0b0b80", +7193 => x"fe3880cc", +7194 => x"15085380", +7195 => x"5672762e", +7196 => x"0981060b", +7197 => x"0b0b8180", +7198 => x"3882c815", +7199 => x"08537280", +7200 => x"2e0b0b0b", +7201 => x"0bb23882", +7202 => x"cc155672", +7203 => x"762e0b0b", +7204 => x"0b0ba538", +7205 => x"72547574", +7206 => x"2e0b0b0b", +7207 => x"0b9a3873", +7208 => x"74085552", +7209 => x"74510b0b", +7210 => x"ffab8d3f", +7211 => x"75742e09", +7212 => x"81060b0b", +7213 => x"0b0be838", +7214 => x"80d41508", +7215 => x"53720b0b", +7216 => x"0b80d938", +7217 => x"b8150880", +7218 => x"2e0b0b0b", +7219 => x"0b953874", +7220 => x"51bc1508", +7221 => x"53722d84", +7222 => x"dc150853", +7223 => x"720b0b0b", +7224 => x"80ca3887", +7225 => x"3d0d0481", +7226 => x"1656758e", +7227 => x"240b0b0b", +7228 => x"80c83880", +7229 => x"cc150853", +7230 => x"75101013", +7231 => x"70085553", +7232 => x"73802e0b", +7233 => x"0b0b0bdf", +7234 => x"38737408", +7235 => x"55527451", +7236 => x"0b0bffaa", +7237 => x"a33f0b0b", +7238 => x"0b0be539", +7239 => x"72527451", +7240 => x"0b0bffaa", +7241 => x"933f0b0b", +7242 => x"0bff9939", +7243 => x"72527451", +7244 => x"0b0b0bfd", +7245 => x"e73f873d", +7246 => x"0d0480cc", +7247 => x"15085274", +7248 => x"510b0bff", +7249 => x"a9f23f0b", +7250 => x"0b0bfead", +7251 => x"39fb3d0d", +7252 => x"77567580", +7253 => x"2e0b0b0b", +7254 => x"80dc3882", +7255 => x"c8160855", +7256 => x"74802e0b", +7257 => x"0b0b0bb5", +7258 => x"38841508", +7259 => x"ff055480", +7260 => x"74240b0b", +7261 => x"0b0b9c38", +7262 => x"73101015", +7263 => x"88055372", +7264 => x"08fc1454", +7265 => x"52712dff", +7266 => x"14547380", +7267 => x"250b0b0b", +7268 => x"0bed3874", +7269 => x"0855740b", +7270 => x"0b0b0bcd", +7271 => x"38bc1608", +7272 => x"0b0b0b0b", +7273 => x"8538873d", +7274 => x"0d047551", +7275 => x"bc160852", +7276 => x"712d873d", +7277 => x"0d040b0b", +7278 => x"82f4ec08", +7279 => x"82c81108", +7280 => x"56560b0b", +7281 => x"0bff9939", +7282 => x"7070700b", +7283 => x"0b8384fc", +7284 => x"080b0b0b", +7285 => x"0b8d380b", +7286 => x"0b838588", +7287 => x"0b0b0b83", +7288 => x"84fc0c0b", +7289 => x"0b8384fc", +7290 => x"08751152", +7291 => x"52ff5370", +7292 => x"0b87fb80", +7293 => x"80260b0b", +7294 => x"0b0b8a38", +7295 => x"700b0b83", +7296 => x"84fc0c71", +7297 => x"5372800c", +7298 => x"50505004", +7299 => x"fd3d0d80", +7300 => x"0b0b0b82", +7301 => x"f4e00854", +7302 => x"5472812e", +7303 => x"0b0b0b0b", +7304 => x"ab38730b", +7305 => x"0b838580", +7306 => x"0c0b0bfe", +7307 => x"a5853f0b", +7308 => x"0bfea3cc", +7309 => x"3f0b0b83", +7310 => x"84d05281", +7311 => x"510b0bfe", +7312 => x"a7dd3f80", +7313 => x"08510b0b", +7314 => x"0b89973f", +7315 => x"720b0b83", +7316 => x"85800c0b", +7317 => x"0bfea4db", +7318 => x"3f0b0bfe", +7319 => x"a3a23f0b", +7320 => x"0b8384d0", +7321 => x"5281510b", +7322 => x"0bfea7b3", +7323 => x"3f800851", +7324 => x"0b0b0b88", +7325 => x"ed3f000b", +7326 => x"0b0b0bfb", +7327 => x"39000b0b", +7328 => x"0b0bfb39", +7329 => x"f53d0d7e", +7330 => x"600b0b83", +7331 => x"85800870", +7332 => x"5b585b5b", +7333 => x"750b0b0b", +7334 => x"80db3877", +7335 => x"7a250b0b", +7336 => x"0b0bac38", +7337 => x"771b7033", +7338 => x"7081ff06", +7339 => x"58585975", +7340 => x"8a2e0b0b", +7341 => x"0b0b9f38", +7342 => x"7681ff06", +7343 => x"510b0bfe", +7344 => x"a3cc3f81", +7345 => x"18587978", +7346 => x"240b0b0b", +7347 => x"0bd63879", +7348 => x"800c8d3d", +7349 => x"0d048d51", +7350 => x"0b0bfea3", +7351 => x"b13f7833", +7352 => x"7081ff06", +7353 => x"52570b0b", +7354 => x"fea3a33f", +7355 => x"8118580b", +7356 => x"0b0b0bd2", +7357 => x"3979557a", +7358 => x"547d5385", +7359 => x"528d3dfc", +7360 => x"05510b0b", +7361 => x"fea2c03f", +7362 => x"8008560b", +7363 => x"0b0b87c9", +7364 => x"3f7b8008", +7365 => x"0c75800c", +7366 => x"8d3d0d04", +7367 => x"f63d0d7d", +7368 => x"7f0b0b83", +7369 => x"85800870", +7370 => x"5b585a5a", +7371 => x"750b0b0b", +7372 => x"80d63877", +7373 => x"79250b0b", +7374 => x"0b80c438", +7375 => x"0b0bfea2", +7376 => x"a43f8008", +7377 => x"81ff0670", +7378 => x"8d327030", +7379 => x"709f2a51", +7380 => x"51575776", +7381 => x"8a2e0b0b", +7382 => x"0b80d438", +7383 => x"75802e0b", +7384 => x"0b0b80cb", +7385 => x"38771a56", +7386 => x"76763476", +7387 => x"510b0bfe", +7388 => x"a29c3f81", +7389 => x"18587878", +7390 => x"240b0b0b", +7391 => x"ffbe3877", +7392 => x"5675800c", +7393 => x"8c3d0d04", +7394 => x"78557954", +7395 => x"7c538452", +7396 => x"8c3dfc05", +7397 => x"510b0bfe", +7398 => x"a1ad3f80", +7399 => x"08560b0b", +7400 => x"0b86b63f", +7401 => x"7a80080c", +7402 => x"75800c8c", +7403 => x"3d0d0477", +7404 => x"1a568a76", +7405 => x"34811858", +7406 => x"8d510b0b", +7407 => x"fea1cf3f", +7408 => x"8a510b0b", +7409 => x"fea1c73f", +7410 => x"77560b0b", +7411 => x"0bffb239", +7412 => x"f93d0d79", +7413 => x"570b0b83", +7414 => x"85800880", +7415 => x"2e0b0b0b", +7416 => x"0bb53876", +7417 => x"510b0b0b", +7418 => x"f3b13f7b", +7419 => x"567a5580", +7420 => x"08810554", +7421 => x"76538252", +7422 => x"893dfc05", +7423 => x"510b0bfe", +7424 => x"a0c53f80", +7425 => x"08570b0b", +7426 => x"0b85ce3f", +7427 => x"7780080c", +7428 => x"76800c89", +7429 => x"3d0d040b", +7430 => x"0b0b85bd", +7431 => x"3f850b80", +7432 => x"080cff0b", +7433 => x"800c893d", +7434 => x"0d04fb3d", +7435 => x"0d0b0b83", +7436 => x"85800870", +7437 => x"5654730b", +7438 => x"0b0b0b88", +7439 => x"3874800c", +7440 => x"873d0d04", +7441 => x"77538352", +7442 => x"873dfc05", +7443 => x"510b0bfe", +7444 => x"9ff53f80", +7445 => x"08540b0b", +7446 => x"0b84fe3f", +7447 => x"7580080c", +7448 => x"73800c87", +7449 => x"3d0d04ff", +7450 => x"0b800c04", +7451 => x"fb3d0d77", +7452 => x"550b0b83", +7453 => x"85800880", +7454 => x"2e0b0b0b", +7455 => x"0bb13874", +7456 => x"510b0b0b", +7457 => x"f2953f80", +7458 => x"08810554", +7459 => x"74538752", +7460 => x"873dfc05", +7461 => x"510b0bfe", +7462 => x"9fad3f80", +7463 => x"08550b0b", +7464 => x"0b84b63f", +7465 => x"7580080c", +7466 => x"74800c87", +7467 => x"3d0d040b", +7468 => x"0b0b84a5", +7469 => x"3f850b80", +7470 => x"080cff0b", +7471 => x"800c873d", +7472 => x"0d04fa3d", +7473 => x"0d0b0b83", +7474 => x"85800880", +7475 => x"2e0b0b0b", +7476 => x"0ba8387a", +7477 => x"55795478", +7478 => x"53865288", +7479 => x"3dfc0551", +7480 => x"0b0bfe9e", +7481 => x"e23f8008", +7482 => x"560b0b0b", +7483 => x"83eb3f76", +7484 => x"80080c75", +7485 => x"800c883d", +7486 => x"0d040b0b", +7487 => x"0b83da3f", +7488 => x"9d0b8008", +7489 => x"0cff0b80", +7490 => x"0c883d0d", +7491 => x"04fb3d0d", +7492 => x"77795656", +7493 => x"80705454", +7494 => x"7375250b", +7495 => x"0b0b0ba3", +7496 => x"38741010", +7497 => x"10f80552", +7498 => x"72167033", +7499 => x"70742b76", +7500 => x"078116f8", +7501 => x"16565656", +7502 => x"51517473", +7503 => x"240b0b0b", +7504 => x"0be63873", +7505 => x"800c873d", +7506 => x"0d04fc3d", +7507 => x"0d767855", +7508 => x"55bc5380", +7509 => x"5273510b", +7510 => x"0b0bc7b9", +7511 => x"3f845274", +7512 => x"510b0b0b", +7513 => x"ffa73f80", +7514 => x"08742384", +7515 => x"52841551", +7516 => x"0b0b0bff", +7517 => x"983f8008", +7518 => x"82152384", +7519 => x"52881551", +7520 => x"0b0b0bff", +7521 => x"883f8008", +7522 => x"84150c84", +7523 => x"528c1551", +7524 => x"0b0b0bfe", +7525 => x"f83f8008", +7526 => x"88152384", +7527 => x"52901551", +7528 => x"0b0b0bfe", +7529 => x"e83f8008", +7530 => x"8a152384", +7531 => x"52941551", +7532 => x"0b0b0bfe", +7533 => x"d83f8008", +7534 => x"8c152384", +7535 => x"52981551", +7536 => x"0b0b0bfe", +7537 => x"c83f8008", +7538 => x"8e152388", +7539 => x"529c1551", +7540 => x"0b0b0bfe", +7541 => x"b83f8008", +7542 => x"90150c86", +7543 => x"3d0d04e9", +7544 => x"3d0d6a0b", +7545 => x"0b838580", +7546 => x"08575775", +7547 => x"0b0b0b0b", +7548 => x"933880c0", +7549 => x"800b8418", +7550 => x"0c75ac18", +7551 => x"0c75800c", +7552 => x"993d0d04", +7553 => x"893d7055", +7554 => x"6a54558a", +7555 => x"52993dff", +7556 => x"bc05510b", +7557 => x"0bfe9caf", +7558 => x"3f800877", +7559 => x"53755256", +7560 => x"0b0b0bfe", +7561 => x"a53f0b0b", +7562 => x"0b81ae3f", +7563 => x"7780080c", +7564 => x"75800c99", +7565 => x"3d0d04e9", +7566 => x"3d0d6957", +7567 => x"0b0b8385", +7568 => x"8008802e", +7569 => x"0b0b0b80", +7570 => x"c1387651", +7571 => x"0b0b0bee", +7572 => x"ca3f893d", +7573 => x"70568008", +7574 => x"81055577", +7575 => x"54568f52", +7576 => x"993dffbc", +7577 => x"05510b0b", +7578 => x"fe9bdc3f", +7579 => x"80086b53", +7580 => x"7652570b", +7581 => x"0b0bfdd2", +7582 => x"3f0b0b0b", +7583 => x"80db3f77", +7584 => x"80080c76", +7585 => x"800c993d", +7586 => x"0d040b0b", +7587 => x"0b80ca3f", +7588 => x"850b8008", +7589 => x"0cff0b80", +7590 => x"0c993d0d", +7591 => x"04fc3d0d", +7592 => x"81540b0b", +7593 => x"83858008", +7594 => x"0b0b0b0b", +7595 => x"88387380", +7596 => x"0c863d0d", +7597 => x"04765397", +7598 => x"b952863d", +7599 => x"fc05510b", +7600 => x"0bfe9b83", +7601 => x"3f800854", +7602 => x"0b0b0b0b", +7603 => x"8c3f7480", +7604 => x"080c7380", +7605 => x"0c863d0d", +7606 => x"040b0b82", +7607 => x"f4ec0880", +7608 => x"0c04f73d", +7609 => x"0d7b0b0b", +7610 => x"82f4ec08", +7611 => x"82c81108", +7612 => x"5a545a77", +7613 => x"802e0b0b", +7614 => x"0b80ee38", +7615 => x"81881884", +7616 => x"1908ff05", +7617 => x"81712b59", +7618 => x"55598074", +7619 => x"240b0b0b", +7620 => x"81893880", +7621 => x"74240b0b", +7622 => x"0b0bbd38", +7623 => x"73822b78", +7624 => x"11880556", +7625 => x"56818019", +7626 => x"08770653", +7627 => x"72802e0b", +7628 => x"0b0b80c6", +7629 => x"38781670", +7630 => x"08535379", +7631 => x"51740853", +7632 => x"722dff14", +7633 => x"fc17fc17", +7634 => x"79812c5a", +7635 => x"57575473", +7636 => x"80250b0b", +7637 => x"0b0bce38", +7638 => x"77085877", +7639 => x"0b0b0bff", +7640 => x"9b380b0b", +7641 => x"82f4ec08", +7642 => x"53bc1308", +7643 => x"0b0b0b0b", +7644 => x"b2387951", +7645 => x"0b0b0bf5", +7646 => x"fd3f7408", +7647 => x"53722dff", +7648 => x"14fc17fc", +7649 => x"1779812c", +7650 => x"5a575754", +7651 => x"7380250b", +7652 => x"0b0bff91", +7653 => x"380b0b0b", +7654 => x"ffbe3980", +7655 => x"570b0b0b", +7656 => x"fef13972", +7657 => x"51bc1308", +7658 => x"53722d79", +7659 => x"510b0b0b", +7660 => x"f5c43f8c", +7661 => x"08028c0c", +7662 => x"d43d0d8c", +7663 => x"08880508", +7664 => x"510b0b0b", +7665 => x"8fb43f80", +7666 => x"08547380", +7667 => x"2e0b0b0b", +7668 => x"0b93388c", +7669 => x"08880508", +7670 => x"708c08d0", +7671 => x"050c540b", +7672 => x"0b0b8e8a", +7673 => x"398c088c", +7674 => x"0508510b", +7675 => x"0b0b8f8a", +7676 => x"3f800854", +7677 => x"73802e0b", +7678 => x"0b0b0b93", +7679 => x"388c088c", +7680 => x"0508708c", +7681 => x"08d0050c", +7682 => x"540b0b0b", +7683 => x"8de0398c", +7684 => x"08880508", +7685 => x"510b0b0b", +7686 => x"8eaa3f80", +7687 => x"08547380", +7688 => x"2e0b0b0b", +7689 => x"80d9388c", +7690 => x"088c0508", +7691 => x"510b0b0b", +7692 => x"8e923f80", +7693 => x"08547380", +7694 => x"2e0b0b0b", +7695 => x"0baf388c", +7696 => x"08880508", +7697 => x"8c088c05", +7698 => x"08555584", +7699 => x"15088415", +7700 => x"082e0b0b", +7701 => x"0b0b9638", +7702 => x"0b0b0b8d", +7703 => x"d43f8008", +7704 => x"708c08d0", +7705 => x"050c540b", +7706 => x"0b0b8d82", +7707 => x"398c0888", +7708 => x"0508708c", +7709 => x"08d0050c", +7710 => x"540b0b0b", +7711 => x"8cf0398c", +7712 => x"088c0508", +7713 => x"510b0b0b", +7714 => x"8dba3f80", +7715 => x"08547380", +7716 => x"2e0b0b0b", +7717 => x"0b93388c", +7718 => x"088c0508", +7719 => x"708c08d0", +7720 => x"050c540b", +7721 => x"0b0b8cc6", +7722 => x"398c088c", +7723 => x"0508510b", +7724 => x"0b0b8cc7", +7725 => x"3f800854", +7726 => x"73802e0b", +7727 => x"0b0b80f5", +7728 => x"388c0888", +7729 => x"0508510b", +7730 => x"0b0b8caf", +7731 => x"3f800854", +7732 => x"73802e0b", +7733 => x"0b0b80cb", +7734 => x"388c0890", +7735 => x"05088c08", +7736 => x"88050871", +7737 => x"58565494", +7738 => x"70547553", +7739 => x"7652540b", +7740 => x"0bfea197", +7741 => x"3f8c0890", +7742 => x"05088c08", +7743 => x"8805088c", +7744 => x"088c0508", +7745 => x"84120884", +7746 => x"12080684", +7747 => x"140c8c08", +7748 => x"90050870", +7749 => x"8c08d005", +7750 => x"0c515656", +7751 => x"560b0b0b", +7752 => x"8bcc398c", +7753 => x"08880508", +7754 => x"708c08d0", +7755 => x"050c540b", +7756 => x"0b0b8bba", +7757 => x"398c0888", +7758 => x"0508510b", +7759 => x"0b0b8bbb", +7760 => x"3f800854", +7761 => x"73802e0b", +7762 => x"0b0b0b93", +7763 => x"388c088c", +7764 => x"0508708c", +7765 => x"08d0050c", +7766 => x"540b0b0b", +7767 => x"8b90398c", +7768 => x"08880508", +7769 => x"8811088c", +7770 => x"08f4050c", +7771 => x"8c088c05", +7772 => x"08881108", +7773 => x"8c08f005", +7774 => x"0c8c0888", +7775 => x"05085151", +7776 => x"54901408", +7777 => x"8c150855", +7778 => x"55738c08", +7779 => x"e8050c74", +7780 => x"8c08ec05", +7781 => x"0c8c088c", +7782 => x"05085490", +7783 => x"14088c15", +7784 => x"08555573", +7785 => x"8c08e005", +7786 => x"0c748c08", +7787 => x"e4050c8c", +7788 => x"08f40508", +7789 => x"8c08f005", +7790 => x"08318c08", +7791 => x"dc050c8c", +7792 => x"08dc0508", +7793 => x"80250b0b", +7794 => x"0b0b8c38", +7795 => x"8c08dc05", +7796 => x"08308c08", +7797 => x"dc050c8c", +7798 => x"08dc0508", +7799 => x"bf240b0b", +7800 => x"0b81bf38", +7801 => x"8c08f005", +7802 => x"088c08f4", +7803 => x"0508250b", +7804 => x"0b0b80cf", +7805 => x"388c08f0", +7806 => x"05088105", +7807 => x"8c08f005", +7808 => x"0c8c08e0", +7809 => x"05088006", +7810 => x"8c08e405", +7811 => x"0881068c", +7812 => x"08e00508", +7813 => x"9f2b8c08", +7814 => x"e4050881", +7815 => x"2a707207", +7816 => x"8c08e005", +7817 => x"08812a70", +7818 => x"76078c08", +7819 => x"e0050c74", +7820 => x"72078c08", +7821 => x"e4050c59", +7822 => x"595b5b58", +7823 => x"560b0b0b", +7824 => x"ffa2398c", +7825 => x"08f40508", +7826 => x"8c08f005", +7827 => x"08250b0b", +7828 => x"0b819a38", +7829 => x"8c08f405", +7830 => x"0881058c", +7831 => x"08f4050c", +7832 => x"8c08e805", +7833 => x"0880068c", +7834 => x"08ec0508", +7835 => x"81068c08", +7836 => x"e805089f", +7837 => x"2b8c08ec", +7838 => x"0508812a", +7839 => x"7072078c", +7840 => x"08e80508", +7841 => x"812a7076", +7842 => x"078c08e8", +7843 => x"050c7472", +7844 => x"078c08ec", +7845 => x"050c5959", +7846 => x"5b5b5856", +7847 => x"0b0b0bff", +7848 => x"a2398c08", +7849 => x"f005088c", +7850 => x"08f40508", +7851 => x"250b0b0b", +7852 => x"0ba1388c", +7853 => x"08f40508", +7854 => x"8c08f005", +7855 => x"0c805480", +7856 => x"55738c08", +7857 => x"e0050c74", +7858 => x"8c08e405", +7859 => x"0c0b0b0b", +7860 => x"0b9b398c", +7861 => x"08f00508", +7862 => x"8c08f405", +7863 => x"0c805480", +7864 => x"55738c08", +7865 => x"e8050c74", +7866 => x"8c08ec05", +7867 => x"0c8c0888", +7868 => x"05088c08", +7869 => x"8c050855", +7870 => x"55841508", +7871 => x"8415082e", +7872 => x"0b0b0b85", +7873 => x"85388c08", +7874 => x"88050854", +7875 => x"84140880", +7876 => x"2e0b0b0b", +7877 => x"81bc388c", +7878 => x"08e00508", +7879 => x"8c08e405", +7880 => x"08565473", +7881 => x"8c08c805", +7882 => x"0c748c08", +7883 => x"cc050c8c", +7884 => x"08e80508", +7885 => x"8c08ec05", +7886 => x"08575574", +7887 => x"8c08c005", +7888 => x"0c758c08", +7889 => x"c4050c8c", +7890 => x"08cc0508", +7891 => x"8c08c405", +7892 => x"08717131", +7893 => x"708c08ff", +7894 => x"bc050c52", +7895 => x"5556810b", +7896 => x"8c08ffb4", +7897 => x"050c8c08", +7898 => x"ffbc0508", +7899 => x"8c08cc05", +7900 => x"08575574", +7901 => x"76260b0b", +7902 => x"0b0b8938", +7903 => x"800b8c08", +7904 => x"ffb4050c", +7905 => x"8c08c805", +7906 => x"088c08c0", +7907 => x"05087171", +7908 => x"31708c08", +7909 => x"ffb8050c", +7910 => x"8c08ffb8", +7911 => x"0508708c", +7912 => x"08ffb405", +7913 => x"0831708c", +7914 => x"08ffb805", +7915 => x"0c525952", +7916 => x"56548c08", +7917 => x"ffb80508", +7918 => x"8c08ffbc", +7919 => x"05085654", +7920 => x"738c08f8", +7921 => x"050c748c", +7922 => x"08fc050c", +7923 => x"0b0b0b81", +7924 => x"bf398c08", +7925 => x"e805088c", +7926 => x"08ec0508", +7927 => x"5755748c", +7928 => x"08ffac05", +7929 => x"0c758c08", +7930 => x"ffb0050c", +7931 => x"8c08e005", +7932 => x"088c08e4", +7933 => x"05085654", +7934 => x"738c08ff", +7935 => x"a4050c74", +7936 => x"8c08ffa8", +7937 => x"050c8c08", +7938 => x"ffb00508", +7939 => x"8c08ffa8", +7940 => x"05087171", +7941 => x"31708c08", +7942 => x"ffa0050c", +7943 => x"52575581", +7944 => x"0b8c08ff", +7945 => x"98050c8c", +7946 => x"08ffa005", +7947 => x"088c08ff", +7948 => x"b0050856", +7949 => x"54737526", +7950 => x"0b0b0b0b", +7951 => x"8938800b", +7952 => x"8c08ff98", +7953 => x"050c8c08", +7954 => x"ffac0508", +7955 => x"8c08ffa4", +7956 => x"05087171", +7957 => x"31708c08", +7958 => x"ff9c050c", +7959 => x"8c08ff9c", +7960 => x"0508708c", +7961 => x"08ff9805", +7962 => x"0831708c", +7963 => x"08ff9c05", +7964 => x"0c535852", +7965 => x"55568c08", +7966 => x"ff9c0508", +7967 => x"8c08ffa0", +7968 => x"05085654", +7969 => x"738c08f8", +7970 => x"050c748c", +7971 => x"08fc050c", +7972 => x"800b8c08", +7973 => x"f8050824", +7974 => x"0b0b0b0b", +7975 => x"ba388c08", +7976 => x"90050854", +7977 => x"800b8415", +7978 => x"0c8c0890", +7979 => x"05088c08", +7980 => x"f4050888", +7981 => x"120c8c08", +7982 => x"90050857", +7983 => x"548c08f8", +7984 => x"05088c08", +7985 => x"fc050856", +7986 => x"54738c17", +7987 => x"0c749017", +7988 => x"0c0b0b0b", +7989 => x"80d1398c", +7990 => x"08900508", +7991 => x"54810b84", +7992 => x"150c8c08", +7993 => x"9005088c", +7994 => x"08f40508", +7995 => x"88120c8c", +7996 => x"08900508", +7997 => x"8c08d405", +7998 => x"5858548c", +7999 => x"08f80508", +8000 => x"8c08fc05", +8001 => x"08565473", +8002 => x"52745375", +8003 => x"510b0b80", +8004 => x"cfcb3f8c", +8005 => x"08d40508", +8006 => x"8c08d805", +8007 => x"08565473", +8008 => x"8c180c74", +8009 => x"90180c8c", +8010 => x"08900508", +8011 => x"548c1408", +8012 => x"f00a260b", +8013 => x"0b0b82bb", +8014 => x"388c0890", +8015 => x"05088c11", +8016 => x"08709013", +8017 => x"08075155", +8018 => x"5573802e", +8019 => x"0b0b0b82", +8020 => x"a2388c08", +8021 => x"9005088c", +8022 => x"08900508", +8023 => x"9011089f", +8024 => x"2a8c1208", +8025 => x"10707207", +8026 => x"8c150c90", +8027 => x"13081090", +8028 => x"150c8c08", +8029 => x"90050888", +8030 => x"1108ff05", +8031 => x"88120c53", +8032 => x"58585557", +8033 => x"0b0b0bff", +8034 => x"9e398c08", +8035 => x"9005088c", +8036 => x"08880508", +8037 => x"84110884", +8038 => x"130c8c08", +8039 => x"9005088c", +8040 => x"08f40508", +8041 => x"88120c8c", +8042 => x"08900508", +8043 => x"8c08ff94", +8044 => x"050c5256", +8045 => x"548c08e8", +8046 => x"05088c08", +8047 => x"ec050857", +8048 => x"55748c08", +8049 => x"ff8c050c", +8050 => x"758c08ff", +8051 => x"90050c8c", +8052 => x"08e00508", +8053 => x"8c08e405", +8054 => x"08565473", +8055 => x"8c08ff84", +8056 => x"050c748c", +8057 => x"08ff8805", +8058 => x"0c8c08ff", +8059 => x"9005088c", +8060 => x"08ff8805", +8061 => x"08701270", +8062 => x"8c08ff80", +8063 => x"050c5257", +8064 => x"55810b8c", +8065 => x"08fef805", +8066 => x"0c8c08ff", +8067 => x"8005088c", +8068 => x"08ff9005", +8069 => x"08565474", +8070 => x"74260b0b", +8071 => x"0b0b8938", +8072 => x"800b8c08", +8073 => x"fef8050c", +8074 => x"8c08ff8c", +8075 => x"05088c08", +8076 => x"ff840508", +8077 => x"7012708c", +8078 => x"08fefc05", +8079 => x"0c8c08fe", +8080 => x"fc05088c", +8081 => x"08fef805", +8082 => x"0811708c", +8083 => x"08fefc05", +8084 => x"0c535852", +8085 => x"55568c08", +8086 => x"fefc0508", +8087 => x"8c08ff80", +8088 => x"05088c08", +8089 => x"ff940508", +8090 => x"58565473", +8091 => x"8c170c74", +8092 => x"90170c8c", +8093 => x"08900508", +8094 => x"5483740c", +8095 => x"8c089005", +8096 => x"08548c14", +8097 => x"08f80a26", +8098 => x"0b0b0b0b", +8099 => x"87380b0b", +8100 => x"0b80cf39", +8101 => x"8c089005", +8102 => x"088c0890", +8103 => x"05088c11", +8104 => x"08800690", +8105 => x"12088106", +8106 => x"8c089005", +8107 => x"088c1108", +8108 => x"9f2b9012", +8109 => x"08812a70", +8110 => x"72078c14", +8111 => x"08812a70", +8112 => x"77078c1a", +8113 => x"0c757207", +8114 => x"901a0c8c", +8115 => x"08900508", +8116 => x"88110881", +8117 => x"0588120c", +8118 => x"51575c5f", +8119 => x"5f5c5a58", +8120 => x"555b8c08", +8121 => x"90050870", +8122 => x"8c08d005", +8123 => x"0c548c08", +8124 => x"d0050880", +8125 => x"0cae3d0d", +8126 => x"8c0c048c", +8127 => x"08028c0c", +8128 => x"7070800b", +8129 => x"8c08fc05", +8130 => x"0c8c0888", +8131 => x"05085170", +8132 => x"08822e09", +8133 => x"81060b0b", +8134 => x"0b0b8838", +8135 => x"810b8c08", +8136 => x"fc050c8c", +8137 => x"08fc0508", +8138 => x"70800c51", +8139 => x"50508c0c", +8140 => x"048c0802", +8141 => x"8c0c700b", +8142 => x"0b82f4b8", +8143 => x"70800c51", +8144 => x"508c0c04", +8145 => x"8c08028c", +8146 => x"0c707080", +8147 => x"0b8c08fc", +8148 => x"050c8c08", +8149 => x"88050851", +8150 => x"7008842e", +8151 => x"0981060b", +8152 => x"0b0b0b88", +8153 => x"38810b8c", +8154 => x"08fc050c", +8155 => x"8c08fc05", +8156 => x"0870800c", +8157 => x"5150508c", +8158 => x"0c048c08", +8159 => x"028c0c70", +8160 => x"70800b8c", +8161 => x"08fc050c", +8162 => x"8c088805", +8163 => x"08517008", +8164 => x"802e0b0b", +8165 => x"0b0b9738", +8166 => x"8c088805", +8167 => x"08517008", +8168 => x"812e0b0b", +8169 => x"0b0b8738", +8170 => x"0b0b0b0b", +8171 => x"8839810b", +8172 => x"8c08fc05", +8173 => x"0c8c08fc", +8174 => x"05087080", +8175 => x"0c515050", +8176 => x"8c0c048c", +8177 => x"08028c0c", +8178 => x"e73d0d8c", +8179 => x"08880508", +8180 => x"568c088c", +8181 => x"05088c08", +8182 => x"90050856", +8183 => x"54738c08", +8184 => x"ffb8050c", +8185 => x"748c08ff", +8186 => x"bc050c8c", +8187 => x"08940508", +8188 => x"8c089805", +8189 => x"08565473", +8190 => x"8c08ffb0", +8191 => x"050c748c", +8192 => x"08ffb405", +8193 => x"0c8c08ec", +8194 => x"0570538c", +8195 => x"08ffb805", +8196 => x"70535154", +8197 => x"0b0b80de", +8198 => x"c13f8c08", +8199 => x"d8057053", +8200 => x"8c08ffb0", +8201 => x"05705351", +8202 => x"540b0b80", +8203 => x"deac3f8c", +8204 => x"08c40570", +8205 => x"548c08d8", +8206 => x"0570548c", +8207 => x"08ec0570", +8208 => x"54515154", +8209 => x"0b0b0bee", +8210 => x"ea3f8008", +8211 => x"708c08c0", +8212 => x"050c8c08", +8213 => x"c0050853", +8214 => x"7652540b", +8215 => x"0b80ccb8", +8216 => x"3f75800c", +8217 => x"9b3d0d8c", +8218 => x"0c048c08", +8219 => x"028c0ce7", +8220 => x"3d0d8c08", +8221 => x"88050856", +8222 => x"8c088c05", +8223 => x"088c0890", +8224 => x"05085654", +8225 => x"738c08ff", +8226 => x"b8050c74", +8227 => x"8c08ffbc", +8228 => x"050c8c08", +8229 => x"9405088c", +8230 => x"08980508", +8231 => x"5654738c", +8232 => x"08ffb005", +8233 => x"0c748c08", +8234 => x"ffb4050c", +8235 => x"8c08ec05", +8236 => x"70538c08", +8237 => x"ffb80570", +8238 => x"5351540b", +8239 => x"0b80dd9a", +8240 => x"3f8c08d8", +8241 => x"0570538c", +8242 => x"08ffb005", +8243 => x"70535154", +8244 => x"0b0b80dd", +8245 => x"853f8c08", +8246 => x"dc050881", +8247 => x"328c08dc", +8248 => x"050c8c08", +8249 => x"c4057054", +8250 => x"8c08d805", +8251 => x"70548c08", +8252 => x"ec057054", +8253 => x"5151540b", +8254 => x"0b0bedb7", +8255 => x"3f800870", +8256 => x"8c08c005", +8257 => x"0c8c08c0", +8258 => x"05085376", +8259 => x"52540b0b", +8260 => x"80cb853f", +8261 => x"75800c9b", +8262 => x"3d0d8c0c", +8263 => x"048c0802", +8264 => x"8c0cff83", +8265 => x"3d0d8c08", +8266 => x"8c05088c", +8267 => x"08900508", +8268 => x"5856758c", +8269 => x"08ffb805", +8270 => x"0c768c08", +8271 => x"ffbc050c", +8272 => x"8c089405", +8273 => x"088c0898", +8274 => x"05085856", +8275 => x"758c08ff", +8276 => x"b0050c76", +8277 => x"8c08ffb4", +8278 => x"050c8c08", +8279 => x"ec057053", +8280 => x"8c08ffb8", +8281 => x"05705351", +8282 => x"560b0b80", +8283 => x"dbec3f8c", +8284 => x"08d80570", +8285 => x"538c08ff", +8286 => x"b0057053", +8287 => x"51560b0b", +8288 => x"80dbd73f", +8289 => x"8c08ec05", +8290 => x"8c08ffac", +8291 => x"050c8c08", +8292 => x"d8058c08", +8293 => x"ffa8050c", +8294 => x"8c08c405", +8295 => x"8c08ffa4", +8296 => x"050c8056", +8297 => x"8057758c", +8298 => x"08ff9805", +8299 => x"0c768c08", +8300 => x"ff9c050c", +8301 => x"80568057", +8302 => x"758c08ff", +8303 => x"90050c76", +8304 => x"8c08ff94", +8305 => x"050c8c08", +8306 => x"ffac0508", +8307 => x"510b0b0b", +8308 => x"9d823f80", +8309 => x"08567580", +8310 => x"2e0b0b0b", +8311 => x"80da388c", +8312 => x"08ffac05", +8313 => x"088c08fe", +8314 => x"c4050c80", +8315 => x"0b8c08fe", +8316 => x"c0050c8c", +8317 => x"08ffac05", +8318 => x"088c08ff", +8319 => x"a8050857", +8320 => x"57841708", +8321 => x"8417082e", +8322 => x"0b0b0b0b", +8323 => x"8938810b", +8324 => x"8c08fec0", +8325 => x"050c8c08", +8326 => x"fec40508", +8327 => x"8c08fec0", +8328 => x"05088412", +8329 => x"0c8c08ff", +8330 => x"ac05088c", +8331 => x"08ffa005", +8332 => x"0c560b0b", +8333 => x"0b9af139", +8334 => x"8c08ffa8", +8335 => x"0508510b", +8336 => x"0b0b9c90", +8337 => x"3f800856", +8338 => x"75802e0b", +8339 => x"0b0b80da", +8340 => x"388c08ff", +8341 => x"a805088c", +8342 => x"08febc05", +8343 => x"0c800b8c", +8344 => x"08feb805", +8345 => x"0c8c08ff", +8346 => x"ac05088c", +8347 => x"08ffa805", +8348 => x"08575784", +8349 => x"17088417", +8350 => x"082e0b0b", +8351 => x"0b0b8938", +8352 => x"810b8c08", +8353 => x"feb8050c", +8354 => x"8c08febc", +8355 => x"05088c08", +8356 => x"feb80508", +8357 => x"84120c8c", +8358 => x"08ffa805", +8359 => x"088c08ff", +8360 => x"a0050c57", +8361 => x"0b0b0b99", +8362 => x"ff398c08", +8363 => x"ffac0508", +8364 => x"510b0b0b", +8365 => x"9ae83f80", +8366 => x"08567580", +8367 => x"2e0b0b0b", +8368 => x"8189388c", +8369 => x"08ffa805", +8370 => x"08510b0b", +8371 => x"0b9a993f", +8372 => x"80085675", +8373 => x"802e0b0b", +8374 => x"0b0b9738", +8375 => x"0b0b0b99", +8376 => x"f43f8008", +8377 => x"708c08ff", +8378 => x"a0050c56", +8379 => x"0b0b0b99", +8380 => x"b7398c08", +8381 => x"ffac0508", +8382 => x"8c08feb4", +8383 => x"050c800b", +8384 => x"8c08feb0", +8385 => x"050c8c08", +8386 => x"ffac0508", +8387 => x"8c08ffa8", +8388 => x"05085757", +8389 => x"84170884", +8390 => x"17082e0b", +8391 => x"0b0b0b89", +8392 => x"38810b8c", +8393 => x"08feb005", +8394 => x"0c8c08fe", +8395 => x"b405088c", +8396 => x"08feb005", +8397 => x"0884120c", +8398 => x"8c08ffac", +8399 => x"05088c08", +8400 => x"ffa0050c", +8401 => x"560b0b0b", +8402 => x"98de398c", +8403 => x"08ffa805", +8404 => x"08510b0b", +8405 => x"0b99c73f", +8406 => x"80085675", +8407 => x"802e0b0b", +8408 => x"0b818938", +8409 => x"8c08ffac", +8410 => x"0508510b", +8411 => x"0b0b98f8", +8412 => x"3f800856", +8413 => x"75802e0b", +8414 => x"0b0b0b97", +8415 => x"380b0b0b", +8416 => x"98d33f80", +8417 => x"08708c08", +8418 => x"ffa0050c", +8419 => x"560b0b0b", +8420 => x"9896398c", +8421 => x"08ffa805", +8422 => x"088c08fe", +8423 => x"ac050c80", +8424 => x"0b8c08fe", +8425 => x"a8050c8c", +8426 => x"08ffac05", +8427 => x"088c08ff", +8428 => x"a8050857", +8429 => x"57841708", +8430 => x"8417082e", +8431 => x"0b0b0b0b", +8432 => x"8938810b", +8433 => x"8c08fea8", +8434 => x"050c8c08", +8435 => x"feac0508", +8436 => x"8c08fea8", +8437 => x"05088412", +8438 => x"0c8c08ff", +8439 => x"a805088c", +8440 => x"08ffa005", +8441 => x"0c570b0b", +8442 => x"0b97bd39", +8443 => x"8c08ffac", +8444 => x"0508510b", +8445 => x"0b0b97f0", +8446 => x"3f800856", +8447 => x"75802e0b", +8448 => x"0b0b80da", +8449 => x"388c08ff", +8450 => x"ac05088c", +8451 => x"08fea405", +8452 => x"0c800b8c", +8453 => x"08fea005", +8454 => x"0c8c08ff", +8455 => x"ac05088c", +8456 => x"08ffa805", +8457 => x"08575784", +8458 => x"17088417", +8459 => x"082e0b0b", +8460 => x"0b0b8938", +8461 => x"810b8c08", +8462 => x"fea0050c", +8463 => x"8c08fea4", +8464 => x"05088c08", +8465 => x"fea00508", +8466 => x"84120c8c", +8467 => x"08ffac05", +8468 => x"088c08ff", +8469 => x"a0050c56", +8470 => x"0b0b0b96", +8471 => x"cb398c08", +8472 => x"ffa80508", +8473 => x"510b0b0b", +8474 => x"96fe3f80", +8475 => x"08567580", +8476 => x"2e0b0b0b", +8477 => x"80da388c", +8478 => x"08ffa805", +8479 => x"088c08fe", +8480 => x"9c050c80", +8481 => x"0b8c08fe", +8482 => x"98050c8c", +8483 => x"08ffac05", +8484 => x"088c08ff", +8485 => x"a8050857", +8486 => x"57841708", +8487 => x"8417082e", +8488 => x"0b0b0b0b", +8489 => x"8938810b", +8490 => x"8c08fe98", +8491 => x"050c8c08", +8492 => x"fe9c0508", +8493 => x"8c08fe98", +8494 => x"05088412", +8495 => x"0c8c08ff", +8496 => x"a805088c", +8497 => x"08ffa005", +8498 => x"0c570b0b", +8499 => x"0b95d939", +8500 => x"8c08ffac", +8501 => x"05089011", +8502 => x"088c08ff", +8503 => x"8c050c8c", +8504 => x"08ffac05", +8505 => x"088c1108", +8506 => x"802a5959", +8507 => x"5680778c", +8508 => x"08ff8805", +8509 => x"0c8c08ff", +8510 => x"a8050890", +8511 => x"11088c08", +8512 => x"ff84050c", +8513 => x"8c08ffa8", +8514 => x"05088c11", +8515 => x"08802a5a", +8516 => x"5a515680", +8517 => x"778c08ff", +8518 => x"80050c8c", +8519 => x"08ff8405", +8520 => x"085a5680", +8521 => x"0b8c08ff", +8522 => x"8c050858", +8523 => x"58800b8c", +8524 => x"08fef005", +8525 => x"5b567554", +8526 => x"76557752", +8527 => x"78537951", +8528 => x"0b0b0bbb", +8529 => x"b23f8c08", +8530 => x"fef00508", +8531 => x"8c08fef4", +8532 => x"05085856", +8533 => x"758c08fe", +8534 => x"f8050c76", +8535 => x"8c08fefc", +8536 => x"050c8c08", +8537 => x"ff800508", +8538 => x"59800b8c", +8539 => x"08ff8c05", +8540 => x"08585880", +8541 => x"0b8c08fe", +8542 => x"e8055b56", +8543 => x"75547655", +8544 => x"77527853", +8545 => x"79510b0b", +8546 => x"0bbaec3f", +8547 => x"8c08fee8", +8548 => x"05088c08", +8549 => x"feec0508", +8550 => x"5856758c", +8551 => x"08fef005", +8552 => x"0c768c08", +8553 => x"fef4050c", +8554 => x"8c08ff84", +8555 => x"05085980", +8556 => x"0b8c08ff", +8557 => x"88050858", +8558 => x"58800b8c", +8559 => x"08fee005", +8560 => x"5b567554", +8561 => x"76557752", +8562 => x"78537951", +8563 => x"0b0b0bba", +8564 => x"a63f8c08", +8565 => x"fee00508", +8566 => x"8c08fee4", +8567 => x"05085856", +8568 => x"758c08fe", +8569 => x"e8050c76", +8570 => x"8c08feec", +8571 => x"050c8c08", +8572 => x"ff800508", +8573 => x"59800b8c", +8574 => x"08ff8805", +8575 => x"08585880", +8576 => x"0b8c08fe", +8577 => x"d8055b56", +8578 => x"75547655", +8579 => x"77527853", +8580 => x"79510b0b", +8581 => x"0bb9e03f", +8582 => x"8c08fed8", +8583 => x"05088c08", +8584 => x"fedc0508", +8585 => x"5856758c", +8586 => x"08fee005", +8587 => x"0c768c08", +8588 => x"fee4050c", +8589 => x"80568057", +8590 => x"758c08fe", +8591 => x"d8050c76", +8592 => x"8c08fedc", +8593 => x"050c8056", +8594 => x"8057758c", +8595 => x"08fed005", +8596 => x"0c768c08", +8597 => x"fed4050c", +8598 => x"8c08fef0", +8599 => x"05088c08", +8600 => x"fef40508", +8601 => x"5856758c", +8602 => x"08fe9005", +8603 => x"0c768c08", +8604 => x"fe94050c", +8605 => x"8c08fee8", +8606 => x"05088c08", +8607 => x"feec0508", +8608 => x"5856758c", +8609 => x"08fe8805", +8610 => x"0c768c08", +8611 => x"fe8c050c", +8612 => x"8c08fe94", +8613 => x"05088c08", +8614 => x"fe8c0508", +8615 => x"7012708c", +8616 => x"08fe8405", +8617 => x"0c525757", +8618 => x"810b8c08", +8619 => x"fdfc050c", +8620 => x"8c08fe84", +8621 => x"05088c08", +8622 => x"fe940508", +8623 => x"57577577", +8624 => x"260b0b0b", +8625 => x"0b893880", +8626 => x"0b8c08fd", +8627 => x"fc050c8c", +8628 => x"08fe9005", +8629 => x"088c08fe", +8630 => x"88050870", +8631 => x"12708c08", +8632 => x"fe80050c", +8633 => x"8c08fe80", +8634 => x"05088c08", +8635 => x"fdfc0508", +8636 => x"11708c08", +8637 => x"fe80050c", +8638 => x"53515257", +8639 => x"578c08fe", +8640 => x"8005088c", +8641 => x"08fe8405", +8642 => x"08585675", +8643 => x"8c08fec8", +8644 => x"050c768c", +8645 => x"08fecc05", +8646 => x"0c8c08fe", +8647 => x"f005088c", +8648 => x"08fec805", +8649 => x"08260b0b", +8650 => x"0b0bb038", +8651 => x"8c08fef0", +8652 => x"05088c08", +8653 => x"fec80508", +8654 => x"2e098106", +8655 => x"0b0b0b81", +8656 => x"d1388c08", +8657 => x"fef40508", +8658 => x"8c08fecc", +8659 => x"0508260b", +8660 => x"0b0b0b87", +8661 => x"380b0b0b", +8662 => x"81b8398c", +8663 => x"08fed805", +8664 => x"088c08fe", +8665 => x"dc050858", +8666 => x"56758c08", +8667 => x"fdf4050c", +8668 => x"768c08fd", +8669 => x"f8050c81", +8670 => x"56805775", +8671 => x"8c08fdec", +8672 => x"050c768c", +8673 => x"08fdf005", +8674 => x"0c8c08fd", +8675 => x"f805088c", +8676 => x"08fdf005", +8677 => x"08701270", +8678 => x"8c08fde8", +8679 => x"050c5257", +8680 => x"57810b8c", +8681 => x"08fde005", +8682 => x"0c8c08fd", +8683 => x"e805088c", +8684 => x"08fdf805", +8685 => x"08575775", +8686 => x"77260b0b", +8687 => x"0b0b8938", +8688 => x"800b8c08", +8689 => x"fde0050c", +8690 => x"8c08fdf4", +8691 => x"05088c08", +8692 => x"fdec0508", +8693 => x"7012708c", +8694 => x"08fde405", +8695 => x"0c8c08fd", +8696 => x"e405088c", +8697 => x"08fde005", +8698 => x"0811708c", +8699 => x"08fde405", +8700 => x"0c535152", +8701 => x"57578c08", +8702 => x"fde40508", +8703 => x"8c08fde8", +8704 => x"05085856", +8705 => x"758c08fe", +8706 => x"d8050c76", +8707 => x"8c08fedc", +8708 => x"050c8c08", +8709 => x"fecc0508", +8710 => x"57807780", +8711 => x"2b8c08fe", +8712 => x"f0050c56", +8713 => x"800b8c08", +8714 => x"fef4050c", +8715 => x"8c08fef8", +8716 => x"05088c08", +8717 => x"fefc0508", +8718 => x"5856758c", +8719 => x"08fdd805", +8720 => x"0c768c08", +8721 => x"fddc050c", +8722 => x"8c08fef0", +8723 => x"05088c08", +8724 => x"fef40508", +8725 => x"5856758c", +8726 => x"08fdd005", +8727 => x"0c768c08", +8728 => x"fdd4050c", +8729 => x"8c08fddc", +8730 => x"05088c08", +8731 => x"fdd40508", +8732 => x"7012708c", +8733 => x"08fdcc05", +8734 => x"0c525757", +8735 => x"810b8c08", +8736 => x"fdc4050c", +8737 => x"8c08fdcc", +8738 => x"05088c08", +8739 => x"fddc0508", +8740 => x"57577577", +8741 => x"260b0b0b", +8742 => x"0b893880", +8743 => x"0b8c08fd", +8744 => x"c4050c8c", +8745 => x"08fdd805", +8746 => x"088c08fd", +8747 => x"d0050870", +8748 => x"12708c08", +8749 => x"fdc8050c", +8750 => x"8c08fdc8", +8751 => x"05088c08", +8752 => x"fdc40508", +8753 => x"11708c08", +8754 => x"fdc8050c", +8755 => x"53515257", +8756 => x"578c08fd", +8757 => x"c805088c", +8758 => x"08fdcc05", +8759 => x"08585675", +8760 => x"8c08fed0", +8761 => x"050c768c", +8762 => x"08fed405", +8763 => x"0c8c08fe", +8764 => x"f805088c", +8765 => x"08fed005", +8766 => x"08260b0b", +8767 => x"0b0bb038", +8768 => x"8c08fef8", +8769 => x"05088c08", +8770 => x"fed00508", +8771 => x"2e098106", +8772 => x"0b0b0b81", +8773 => x"d1388c08", +8774 => x"fefc0508", +8775 => x"8c08fed4", +8776 => x"0508260b", +8777 => x"0b0b0b87", +8778 => x"380b0b0b", +8779 => x"81b8398c", +8780 => x"08fed805", +8781 => x"088c08fe", +8782 => x"dc050858", +8783 => x"56758c08", +8784 => x"fdbc050c", +8785 => x"768c08fd", +8786 => x"c0050c80", +8787 => x"56815775", +8788 => x"8c08fdb4", +8789 => x"050c768c", +8790 => x"08fdb805", +8791 => x"0c8c08fd", +8792 => x"c005088c", +8793 => x"08fdb805", +8794 => x"08701270", +8795 => x"8c08fdb0", +8796 => x"050c5257", +8797 => x"57810b8c", +8798 => x"08fda805", +8799 => x"0c8c08fd", +8800 => x"b005088c", +8801 => x"08fdc005", +8802 => x"08575775", +8803 => x"77260b0b", +8804 => x"0b0b8938", +8805 => x"800b8c08", +8806 => x"fda8050c", +8807 => x"8c08fdbc", +8808 => x"05088c08", +8809 => x"fdb40508", +8810 => x"7012708c", +8811 => x"08fdac05", +8812 => x"0c8c08fd", +8813 => x"ac05088c", +8814 => x"08fda805", +8815 => x"0811708c", +8816 => x"08fdac05", +8817 => x"0c535152", +8818 => x"57578c08", +8819 => x"fdac0508", +8820 => x"8c08fdb0", +8821 => x"05085856", +8822 => x"758c08fe", +8823 => x"d8050c76", +8824 => x"8c08fedc", +8825 => x"050c8c08", +8826 => x"fec80508", +8827 => x"802a708c", +8828 => x"08fda405", +8829 => x"0c578070", +8830 => x"8c08fda0", +8831 => x"050c568c", +8832 => x"08fda005", +8833 => x"088c08fd", +8834 => x"a4050858", +8835 => x"56758c08", +8836 => x"fda0050c", +8837 => x"768c08fd", +8838 => x"a4050c8c", +8839 => x"08fee005", +8840 => x"088c08fe", +8841 => x"e4050858", +8842 => x"56758c08", +8843 => x"fd98050c", +8844 => x"768c08fd", +8845 => x"9c050c8c", +8846 => x"08fda405", +8847 => x"088c08fd", +8848 => x"9c050870", +8849 => x"12708c08", +8850 => x"fd94050c", +8851 => x"52575781", +8852 => x"0b8c08fd", +8853 => x"8c050c8c", +8854 => x"08fd9405", +8855 => x"088c08fd", +8856 => x"a4050857", +8857 => x"57757726", +8858 => x"0b0b0b0b", +8859 => x"8938800b", +8860 => x"8c08fd8c", +8861 => x"050c8c08", +8862 => x"fda00508", +8863 => x"8c08fd98", +8864 => x"05087012", +8865 => x"708c08fd", +8866 => x"90050c8c", +8867 => x"08fd9005", +8868 => x"088c08fd", +8869 => x"8c050811", +8870 => x"708c08fd", +8871 => x"90050c53", +8872 => x"51525757", +8873 => x"8c08fed8", +8874 => x"05088c08", +8875 => x"fedc0508", +8876 => x"5856758c", +8877 => x"08fd8405", +8878 => x"0c768c08", +8879 => x"fd88050c", +8880 => x"8c08fd88", +8881 => x"05088c08", +8882 => x"fd940508", +8883 => x"7012708c", +8884 => x"08fd8005", +8885 => x"0c525757", +8886 => x"810b8c08", +8887 => x"fcf8050c", +8888 => x"8c08fd80", +8889 => x"05088c08", +8890 => x"fd880508", +8891 => x"57577577", +8892 => x"260b0b0b", +8893 => x"0b893880", +8894 => x"0b8c08fc", +8895 => x"f8050c8c", +8896 => x"08fd8405", +8897 => x"088c08fd", +8898 => x"90050870", +8899 => x"12708c08", +8900 => x"fcfc050c", +8901 => x"8c08fcfc", +8902 => x"05088c08", +8903 => x"fcf80508", +8904 => x"11708c08", +8905 => x"fcfc050c", +8906 => x"53515257", +8907 => x"578c08fc", +8908 => x"fc05088c", +8909 => x"08fd8005", +8910 => x"08585675", +8911 => x"8c08fed8", +8912 => x"050c768c", +8913 => x"08fedc05", +8914 => x"0c8c08fe", +8915 => x"d805088c", +8916 => x"08fedc05", +8917 => x"08585675", +8918 => x"8c08ff90", +8919 => x"050c768c", +8920 => x"08ff9405", +8921 => x"0c8c08fe", +8922 => x"d005088c", +8923 => x"08fed405", +8924 => x"08585675", +8925 => x"8c08ff98", +8926 => x"050c768c", +8927 => x"08ff9c05", +8928 => x"0c8c08ff", +8929 => x"a405088c", +8930 => x"08ffac05", +8931 => x"088c08ff", +8932 => x"a8050888", +8933 => x"12088812", +8934 => x"08058411", +8935 => x"88150c8c", +8936 => x"08ffa405", +8937 => x"088c08fc", +8938 => x"f4050c51", +8939 => x"58585880", +8940 => x"0b8c08fc", +8941 => x"f0050c8c", +8942 => x"08ffac05", +8943 => x"088c08ff", +8944 => x"a8050857", +8945 => x"57841708", +8946 => x"8417082e", +8947 => x"0b0b0b0b", +8948 => x"8938810b", +8949 => x"8c08fcf0", +8950 => x"050c8c08", +8951 => x"fcf40508", +8952 => x"8c08fcf0", +8953 => x"05088412", +8954 => x"0c578c08", +8955 => x"ff900508", +8956 => x"f80a260b", +8957 => x"0b0b0b87", +8958 => x"380b0b0b", +8959 => x"81ae398c", +8960 => x"08ffa405", +8961 => x"08881108", +8962 => x"81058812", +8963 => x"0c8c08ff", +8964 => x"90050880", +8965 => x"068c08ff", +8966 => x"94050881", +8967 => x"06705259", +8968 => x"51567580", +8969 => x"2e0b0b0b", +8970 => x"80cf388c", +8971 => x"08ff9805", +8972 => x"089f2b8c", +8973 => x"08ff9c05", +8974 => x"08812a70", +8975 => x"72078c08", +8976 => x"ff980508", +8977 => x"812a5959", +8978 => x"5959758c", +8979 => x"08ff9805", +8980 => x"0c768c08", +8981 => x"ff9c050c", +8982 => x"8c08ff98", +8983 => x"0508810a", +8984 => x"078c08ff", +8985 => x"9c050880", +8986 => x"07585675", +8987 => x"8c08ff98", +8988 => x"050c768c", +8989 => x"08ff9c05", +8990 => x"0c8c08ff", +8991 => x"9005089f", +8992 => x"2b8c08ff", +8993 => x"94050881", +8994 => x"2a707207", +8995 => x"8c08ff90", +8996 => x"0508812a", +8997 => x"59595959", +8998 => x"758c08ff", +8999 => x"90050c76", +9000 => x"8c08ff94", +9001 => x"050c0b0b", +9002 => x"0bfebf39", +9003 => x"8c08ff90", +9004 => x"0508f00a", +9005 => x"260b0b0b", +9006 => x"81a1388c", +9007 => x"08ffa405", +9008 => x"08881108", +9009 => x"ff058812", +9010 => x"0c8c08ff", +9011 => x"9405089f", +9012 => x"2a8c08ff", +9013 => x"90050810", +9014 => x"7072078c", +9015 => x"08ff9405", +9016 => x"08105b53", +9017 => x"5a5a5675", +9018 => x"8c08ff90", +9019 => x"050c768c", +9020 => x"08ff9405", +9021 => x"0c800b8c", +9022 => x"08ff9805", +9023 => x"08240b0b", +9024 => x"0b0b8738", +9025 => x"0b0b0b0b", +9026 => x"a1398c08", +9027 => x"ff900508", +9028 => x"80078c08", +9029 => x"ff940508", +9030 => x"81075856", +9031 => x"758c08ff", +9032 => x"90050c76", +9033 => x"8c08ff94", +9034 => x"050c8c08", +9035 => x"ff9c0508", +9036 => x"9f2a8c08", +9037 => x"ff980508", +9038 => x"10707207", +9039 => x"8c08ff9c", +9040 => x"0508105a", +9041 => x"58595975", +9042 => x"8c08ff98", +9043 => x"050c768c", +9044 => x"08ff9c05", +9045 => x"0c0b0b0b", +9046 => x"fed2398c", +9047 => x"08ff9005", +9048 => x"08800670", +9049 => x"8c08fce8", +9050 => x"050c8c08", +9051 => x"ff940508", +9052 => x"81ff0670", +9053 => x"8c08fcec", +9054 => x"050c5856", +9055 => x"8c08fce8", +9056 => x"05088c08", +9057 => x"fcec0508", +9058 => x"5856758c", +9059 => x"08fce805", +9060 => x"0c768c08", +9061 => x"fcec050c", +9062 => x"8c08fce8", +9063 => x"05085776", +9064 => x"0b0b0b83", +9065 => x"d0388c08", +9066 => x"fcec0508", +9067 => x"56758180", +9068 => x"2e098106", +9069 => x"0b0b0b83", +9070 => x"bc388c08", +9071 => x"ff900508", +9072 => x"982b8c08", +9073 => x"ff940508", +9074 => x"882a7072", +9075 => x"078c08ff", +9076 => x"90050888", +9077 => x"2a718106", +9078 => x"51595959", +9079 => x"5975802e", +9080 => x"0b0b0b81", +9081 => x"bf388c08", +9082 => x"ff900508", +9083 => x"8c08ff94", +9084 => x"05085856", +9085 => x"758c08fc", +9086 => x"e0050c76", +9087 => x"8c08fce4", +9088 => x"050c8056", +9089 => x"81805775", +9090 => x"8c08fcd8", +9091 => x"050c768c", +9092 => x"08fcdc05", +9093 => x"0c8c08fc", +9094 => x"e405088c", +9095 => x"08fcdc05", +9096 => x"08701270", +9097 => x"8c08fcd4", +9098 => x"050c5257", +9099 => x"57810b8c", +9100 => x"08fccc05", +9101 => x"0c8c08fc", +9102 => x"d405088c", +9103 => x"08fce405", +9104 => x"08575775", +9105 => x"77260b0b", +9106 => x"0b0b8938", +9107 => x"800b8c08", +9108 => x"fccc050c", +9109 => x"8c08fce0", +9110 => x"05088c08", +9111 => x"fcd80508", +9112 => x"7012708c", +9113 => x"08fcd005", +9114 => x"0c8c08fc", +9115 => x"d005088c", +9116 => x"08fccc05", +9117 => x"0811708c", +9118 => x"08fcd005", +9119 => x"0c535152", +9120 => x"57578c08", +9121 => x"fcd00508", +9122 => x"8c08fcd4", +9123 => x"05085856", +9124 => x"758c08ff", +9125 => x"90050c76", +9126 => x"8c08ff94", +9127 => x"050c0b0b", +9128 => x"0b81d239", +9129 => x"8c08ff98", +9130 => x"0508708c", +9131 => x"08ff9c05", +9132 => x"08075156", +9133 => x"75802e0b", +9134 => x"0b0b81b9", +9135 => x"388c08ff", +9136 => x"9005088c", +9137 => x"08ff9405", +9138 => x"08585675", +9139 => x"8c08fcc4", +9140 => x"050c768c", +9141 => x"08fcc805", +9142 => x"0c805681", +9143 => x"8057758c", +9144 => x"08fcbc05", +9145 => x"0c768c08", +9146 => x"fcc0050c", +9147 => x"8c08fcc8", +9148 => x"05088c08", +9149 => x"fcc00508", +9150 => x"7012708c", +9151 => x"08fcb805", +9152 => x"0c525757", +9153 => x"810b8c08", +9154 => x"fcb0050c", +9155 => x"8c08fcb8", +9156 => x"05088c08", +9157 => x"fcc80508", +9158 => x"57577577", +9159 => x"260b0b0b", +9160 => x"0b893880", +9161 => x"0b8c08fc", +9162 => x"b0050c8c", +9163 => x"08fcc405", +9164 => x"088c08fc", +9165 => x"bc050870", +9166 => x"12708c08", +9167 => x"fcb4050c", +9168 => x"8c08fcb4", +9169 => x"05088c08", +9170 => x"fcb00508", +9171 => x"11708c08", +9172 => x"fcb4050c", +9173 => x"53515257", +9174 => x"578c08fc", +9175 => x"b405088c", +9176 => x"08fcb805", +9177 => x"08585675", +9178 => x"8c08ff90", +9179 => x"050c768c", +9180 => x"08ff9405", +9181 => x"0c8c08ff", +9182 => x"a4050856", +9183 => x"8c08ff90", +9184 => x"05088c08", +9185 => x"ff940508", +9186 => x"5957768c", +9187 => x"170c7790", +9188 => x"170c8c08", +9189 => x"ffa40508", +9190 => x"5683760c", +9191 => x"8c08ffa4", +9192 => x"05088c08", +9193 => x"ffa0050c", +9194 => x"8c08ffa0", +9195 => x"0508708c", +9196 => x"08c0050c", +9197 => x"8c08c005", +9198 => x"08538c08", +9199 => x"88050852", +9200 => x"560b0b0b", +9201 => x"add23f8c", +9202 => x"08880508", +9203 => x"800c80ff", +9204 => x"3d0d8c0c", +9205 => x"048c0802", +9206 => x"8c0c700b", +9207 => x"0b82f4b8", +9208 => x"70800c51", +9209 => x"508c0c04", +9210 => x"8c08028c", +9211 => x"0c707080", +9212 => x"0b8c08fc", +9213 => x"050c8c08", +9214 => x"88050851", +9215 => x"7008822e", +9216 => x"0981060b", +9217 => x"0b0b0b88", +9218 => x"38810b8c", +9219 => x"08fc050c", +9220 => x"8c08fc05", +9221 => x"0870800c", +9222 => x"5150508c", +9223 => x"0c048c08", +9224 => x"028c0c70", +9225 => x"70800b8c", +9226 => x"08fc050c", +9227 => x"8c088805", +9228 => x"08517008", +9229 => x"842e0981", +9230 => x"060b0b0b", +9231 => x"0b883881", +9232 => x"0b8c08fc", +9233 => x"050c8c08", +9234 => x"fc050870", +9235 => x"800c5150", +9236 => x"508c0c04", +9237 => x"8c08028c", +9238 => x"0c707080", +9239 => x"0b8c08fc", +9240 => x"050c8c08", +9241 => x"88050851", +9242 => x"7008802e", +9243 => x"0b0b0b0b", +9244 => x"97388c08", +9245 => x"88050851", +9246 => x"7008812e", +9247 => x"0b0b0b0b", +9248 => x"87380b0b", +9249 => x"0b0b8839", +9250 => x"810b8c08", +9251 => x"fc050c8c", +9252 => x"08fc0508", +9253 => x"70800c51", +9254 => x"50508c0c", +9255 => x"048c0802", +9256 => x"8c0cffbc", +9257 => x"3d0d8c08", +9258 => x"8c05088c", +9259 => x"08900508", +9260 => x"5553728c", +9261 => x"08cc050c", +9262 => x"738c08d0", +9263 => x"050c8c08", +9264 => x"9405088c", +9265 => x"08980508", +9266 => x"5553728c", +9267 => x"08c4050c", +9268 => x"738c08c8", +9269 => x"050c8c08", +9270 => x"ec057053", +9271 => x"8c08cc05", +9272 => x"70535153", +9273 => x"0b0b0bbc", +9274 => x"f13f8c08", +9275 => x"d8057053", +9276 => x"8c08c405", +9277 => x"70535153", +9278 => x"0b0b0bbc", +9279 => x"dd3f8c08", +9280 => x"ec058c08", +9281 => x"c0050c8c", +9282 => x"08d8058c", +9283 => x"08ffbc05", +9284 => x"0c8c08c0", +9285 => x"0508510b", +9286 => x"0b0b9084", +9287 => x"3f800853", +9288 => x"72802e0b", +9289 => x"0b0b0b92", +9290 => x"388c08c0", +9291 => x"05088c08", +9292 => x"ffb8050c", +9293 => x"0b0b0b8e", +9294 => x"bb398c08", +9295 => x"ffbc0508", +9296 => x"510b0b0b", +9297 => x"8fda3f80", +9298 => x"08537280", +9299 => x"2e0b0b0b", +9300 => x"0b93388c", +9301 => x"08ffbc05", +9302 => x"088c08ff", +9303 => x"b8050c0b", +9304 => x"0b0b8e90", +9305 => x"398c08c0", +9306 => x"05088c08", +9307 => x"c005088c", +9308 => x"08ffbc05", +9309 => x"08841208", +9310 => x"84120832", +9311 => x"84140c8c", +9312 => x"08c00508", +9313 => x"54555555", +9314 => x"0b0b0b8e", +9315 => x"dd3f8008", +9316 => x"53720b0b", +9317 => x"0b0b9d38", +9318 => x"8c08c005", +9319 => x"08510b0b", +9320 => x"0b8e913f", +9321 => x"80085372", +9322 => x"0b0b0b0b", +9323 => x"87380b0b", +9324 => x"0b80c339", +9325 => x"8c08c005", +9326 => x"088c08ff", +9327 => x"bc050854", +9328 => x"54730873", +9329 => x"082e0981", +9330 => x"060b0b0b", +9331 => x"0b97380b", +9332 => x"0b0b8dcd", +9333 => x"3f800870", +9334 => x"8c08ffb8", +9335 => x"050c530b", +9336 => x"0b0b8d90", +9337 => x"398c08c0", +9338 => x"05088c08", +9339 => x"ffb8050c", +9340 => x"0b0b0b8c", +9341 => x"ff398c08", +9342 => x"ffbc0508", +9343 => x"510b0b0b", +9344 => x"8de83f80", +9345 => x"08537280", +9346 => x"2e0b0b0b", +9347 => x"0baf388c", +9348 => x"08c00508", +9349 => x"53805480", +9350 => x"55738c14", +9351 => x"0c749014", +9352 => x"0c8c08c0", +9353 => x"05085380", +9354 => x"0b88140c", +9355 => x"8c08c005", +9356 => x"088c08ff", +9357 => x"b8050c0b", +9358 => x"0b0b8cb8", +9359 => x"398c08ff", +9360 => x"bc050851", +9361 => x"0b0b0b8c", +9362 => x"eb3f8008", +9363 => x"5372802e", +9364 => x"0b0b0b0b", +9365 => x"9b388c08", +9366 => x"c0050853", +9367 => x"84730c8c", +9368 => x"08c00508", +9369 => x"8c08ffb8", +9370 => x"050c0b0b", +9371 => x"0b8c8539", +9372 => x"8c08c005", +9373 => x"088c08c0", +9374 => x"05088c08", +9375 => x"ffbc0508", +9376 => x"88120888", +9377 => x"12083188", +9378 => x"140c8c08", +9379 => x"c0050851", +9380 => x"55555590", +9381 => x"13088c14", +9382 => x"08545472", +9383 => x"8c08ffa8", +9384 => x"050c738c", +9385 => x"08ffac05", +9386 => x"0c8c08ff", +9387 => x"bc050853", +9388 => x"9013088c", +9389 => x"14085454", +9390 => x"728c08ff", +9391 => x"a0050c73", +9392 => x"8c08ffa4", +9393 => x"050c8c08", +9394 => x"ffa00508", +9395 => x"8c08ffa8", +9396 => x"0508260b", +9397 => x"0b0b0bb0", +9398 => x"388c08ff", +9399 => x"a005088c", +9400 => x"08ffa805", +9401 => x"082e0981", +9402 => x"060b0b0b", +9403 => x"81e9388c", +9404 => x"08ffa405", +9405 => x"088c08ff", +9406 => x"ac050826", +9407 => x"0b0b0b0b", +9408 => x"87380b0b", +9409 => x"0b81d039", +9410 => x"8c08ffa8", +9411 => x"05088c08", +9412 => x"ffac0508", +9413 => x"5553728c", +9414 => x"08ff9005", +9415 => x"0c738c08", +9416 => x"ff94050c", +9417 => x"8c08ff90", +9418 => x"05088c08", +9419 => x"ff940508", +9420 => x"5553728c", +9421 => x"08ff8805", +9422 => x"0c738c08", +9423 => x"ff8c050c", +9424 => x"8c08ff8c", +9425 => x"05088c08", +9426 => x"ff940508", +9427 => x"7012708c", +9428 => x"08ff8405", +9429 => x"0c525454", +9430 => x"810b8c08", +9431 => x"fefc050c", +9432 => x"8c08ff84", +9433 => x"05088c08", +9434 => x"ff8c0508", +9435 => x"54547274", +9436 => x"260b0b0b", +9437 => x"0b893880", +9438 => x"0b8c08fe", +9439 => x"fc050c8c", +9440 => x"08ff8805", +9441 => x"088c08ff", +9442 => x"90050870", +9443 => x"12708c08", +9444 => x"ff80050c", +9445 => x"8c08ff80", +9446 => x"05088c08", +9447 => x"fefc0508", +9448 => x"11708c08", +9449 => x"ff80050c", +9450 => x"53515254", +9451 => x"548c08ff", +9452 => x"8005088c", +9453 => x"08ff8405", +9454 => x"08555372", +9455 => x"8c08ffa8", +9456 => x"050c738c", +9457 => x"08ffac05", +9458 => x"0c8c08c0", +9459 => x"05088811", +9460 => x"08ff0588", +9461 => x"120c5388", +9462 => x"0a538054", +9463 => x"728c08ff", +9464 => x"b0050c73", +9465 => x"8c08ffb4", +9466 => x"050c8053", +9467 => x"8054728c", +9468 => x"08ff9805", +9469 => x"0c738c08", +9470 => x"ff9c050c", +9471 => x"8c08ffb0", +9472 => x"0508708c", +9473 => x"08ffb405", +9474 => x"08075153", +9475 => x"72802e0b", +9476 => x"0b0b849f", +9477 => x"388c08ff", +9478 => x"a005088c", +9479 => x"08ffa805", +9480 => x"08260b0b", +9481 => x"0b829838", +9482 => x"8c08ffa0", +9483 => x"05088c08", +9484 => x"ffa80508", +9485 => x"2e098106", +9486 => x"0b0b0b0b", +9487 => x"94388c08", +9488 => x"ffa40508", +9489 => x"8c08ffac", +9490 => x"0508260b", +9491 => x"0b0b81ef", +9492 => x"388c08ff", +9493 => x"9805088c", +9494 => x"08ffb005", +9495 => x"08078c08", +9496 => x"ff9c0508", +9497 => x"8c08ffb4", +9498 => x"05080755", +9499 => x"53728c08", +9500 => x"ff98050c", +9501 => x"738c08ff", +9502 => x"9c050c8c", +9503 => x"08ffa805", +9504 => x"088c08ff", +9505 => x"ac050855", +9506 => x"53728c08", +9507 => x"fef4050c", +9508 => x"738c08fe", +9509 => x"f8050c8c", +9510 => x"08ffa005", +9511 => x"088c08ff", +9512 => x"a4050855", +9513 => x"53728c08", +9514 => x"feec050c", +9515 => x"738c08fe", +9516 => x"f0050c8c", +9517 => x"08fef805", +9518 => x"088c08fe", +9519 => x"f0050871", +9520 => x"7131708c", +9521 => x"08fee805", +9522 => x"0c525454", +9523 => x"810b8c08", +9524 => x"fee0050c", +9525 => x"8c08fee8", +9526 => x"05088c08", +9527 => x"fef80508", +9528 => x"54547373", +9529 => x"260b0b0b", +9530 => x"0b893880", +9531 => x"0b8c08fe", +9532 => x"e0050c8c", +9533 => x"08fef405", +9534 => x"088c08fe", +9535 => x"ec050871", +9536 => x"7131708c", +9537 => x"08fee405", +9538 => x"0c8c08fe", +9539 => x"e4050870", +9540 => x"8c08fee0", +9541 => x"05083170", +9542 => x"8c08fee4", +9543 => x"050c5351", +9544 => x"5254548c", +9545 => x"08fee405", +9546 => x"088c08fe", +9547 => x"e8050855", +9548 => x"53728c08", +9549 => x"ffa8050c", +9550 => x"738c08ff", +9551 => x"ac050c8c", +9552 => x"08ffb005", +9553 => x"089f2b8c", +9554 => x"08ffb405", +9555 => x"08812a70", +9556 => x"72078c08", +9557 => x"ffb00508", +9558 => x"812a5656", +9559 => x"5656728c", +9560 => x"08ffb005", +9561 => x"0c738c08", +9562 => x"ffb4050c", +9563 => x"8c08ffa8", +9564 => x"05088c08", +9565 => x"ffac0508", +9566 => x"5553728c", +9567 => x"08fed805", +9568 => x"0c738c08", +9569 => x"fedc050c", +9570 => x"8c08fed8", +9571 => x"05088c08", +9572 => x"fedc0508", +9573 => x"5553728c", +9574 => x"08fed005", +9575 => x"0c738c08", +9576 => x"fed4050c", +9577 => x"8c08fed4", +9578 => x"05088c08", +9579 => x"fedc0508", +9580 => x"7012708c", +9581 => x"08fecc05", +9582 => x"0c525454", +9583 => x"810b8c08", +9584 => x"fec4050c", +9585 => x"8c08fecc", +9586 => x"05088c08", +9587 => x"fed40508", +9588 => x"54547274", +9589 => x"260b0b0b", +9590 => x"0b893880", +9591 => x"0b8c08fe", +9592 => x"c4050c8c", +9593 => x"08fed005", +9594 => x"088c08fe", +9595 => x"d8050870", +9596 => x"12708c08", +9597 => x"fec8050c", +9598 => x"8c08fec8", +9599 => x"05088c08", +9600 => x"fec40508", +9601 => x"11708c08", +9602 => x"fec8050c", +9603 => x"53515254", +9604 => x"548c08fe", +9605 => x"c805088c", +9606 => x"08fecc05", +9607 => x"08555372", +9608 => x"8c08ffa8", +9609 => x"050c738c", +9610 => x"08ffac05", +9611 => x"0c0b0b0b", +9612 => x"fbca398c", +9613 => x"08ff9805", +9614 => x"08800670", +9615 => x"8c08febc", +9616 => x"050c8c08", +9617 => x"ff9c0508", +9618 => x"81ff0670", +9619 => x"8c08fec0", +9620 => x"050c5454", +9621 => x"8c08febc", +9622 => x"05088c08", +9623 => x"fec00508", +9624 => x"5553728c", +9625 => x"08febc05", +9626 => x"0c738c08", +9627 => x"fec0050c", +9628 => x"8c08febc", +9629 => x"05085473", +9630 => x"0b0b0b83", +9631 => x"d0388c08", +9632 => x"fec00508", +9633 => x"53728180", +9634 => x"2e098106", +9635 => x"0b0b0b83", +9636 => x"bc388c08", +9637 => x"ff980508", +9638 => x"982b8c08", +9639 => x"ff9c0508", +9640 => x"882a7072", +9641 => x"078c08ff", +9642 => x"98050888", +9643 => x"2a718106", +9644 => x"51565656", +9645 => x"5672802e", +9646 => x"0b0b0b81", +9647 => x"bf388c08", +9648 => x"ff980508", +9649 => x"8c08ff9c", +9650 => x"05085553", +9651 => x"728c08fe", +9652 => x"b4050c73", +9653 => x"8c08feb8", +9654 => x"050c8053", +9655 => x"81805472", +9656 => x"8c08feac", +9657 => x"050c738c", +9658 => x"08feb005", +9659 => x"0c8c08fe", +9660 => x"b805088c", +9661 => x"08feb005", +9662 => x"08701270", +9663 => x"8c08fea8", +9664 => x"050c5254", +9665 => x"54810b8c", +9666 => x"08fea005", +9667 => x"0c8c08fe", +9668 => x"a805088c", +9669 => x"08feb805", +9670 => x"08545472", +9671 => x"74260b0b", +9672 => x"0b0b8938", +9673 => x"800b8c08", +9674 => x"fea0050c", +9675 => x"8c08feb4", +9676 => x"05088c08", +9677 => x"feac0508", +9678 => x"7012708c", +9679 => x"08fea405", +9680 => x"0c8c08fe", +9681 => x"a405088c", +9682 => x"08fea005", +9683 => x"0811708c", +9684 => x"08fea405", +9685 => x"0c535152", +9686 => x"54548c08", +9687 => x"fea40508", +9688 => x"8c08fea8", +9689 => x"05085553", +9690 => x"728c08ff", +9691 => x"98050c73", +9692 => x"8c08ff9c", +9693 => x"050c0b0b", +9694 => x"0b81d239", +9695 => x"8c08ffa8", +9696 => x"0508708c", +9697 => x"08ffac05", +9698 => x"08075153", +9699 => x"72802e0b", +9700 => x"0b0b81b9", +9701 => x"388c08ff", +9702 => x"9805088c", +9703 => x"08ff9c05", +9704 => x"08555372", +9705 => x"8c08fe98", +9706 => x"050c738c", +9707 => x"08fe9c05", +9708 => x"0c805381", +9709 => x"8054728c", +9710 => x"08fe9005", +9711 => x"0c738c08", +9712 => x"fe94050c", +9713 => x"8c08fe9c", +9714 => x"05088c08", +9715 => x"fe940508", +9716 => x"7012708c", +9717 => x"08fe8c05", +9718 => x"0c525454", +9719 => x"810b8c08", +9720 => x"fe84050c", +9721 => x"8c08fe8c", +9722 => x"05088c08", +9723 => x"fe9c0508", +9724 => x"54547274", +9725 => x"260b0b0b", +9726 => x"0b893880", +9727 => x"0b8c08fe", +9728 => x"84050c8c", +9729 => x"08fe9805", +9730 => x"088c08fe", +9731 => x"90050870", +9732 => x"12708c08", +9733 => x"fe88050c", +9734 => x"8c08fe88", +9735 => x"05088c08", +9736 => x"fe840508", +9737 => x"11708c08", +9738 => x"fe88050c", +9739 => x"53515254", +9740 => x"548c08fe", +9741 => x"8805088c", +9742 => x"08fe8c05", +9743 => x"08555372", +9744 => x"8c08ff98", +9745 => x"050c738c", +9746 => x"08ff9c05", +9747 => x"0c8c08c0", +9748 => x"0508558c", +9749 => x"08ff9805", +9750 => x"088c08ff", +9751 => x"9c050855", +9752 => x"53728c16", +9753 => x"0c739016", +9754 => x"0c8c08c0", +9755 => x"05088c08", +9756 => x"ffb8050c", +9757 => x"8c08ffb8", +9758 => x"0508708c", +9759 => x"08d4050c", +9760 => x"8c08d405", +9761 => x"08538c08", +9762 => x"88050852", +9763 => x"530b0b0b", +9764 => x"9c863f8c", +9765 => x"08880508", +9766 => x"800c80c6", +9767 => x"3d0d8c0c", +9768 => x"048c0802", +9769 => x"8c0c700b", +9770 => x"0b82f4b8", +9771 => x"70800c51", +9772 => x"508c0c04", +9773 => x"8c08028c", +9774 => x"0c707080", +9775 => x"0b8c08fc", +9776 => x"050c8c08", +9777 => x"88050851", +9778 => x"7008822e", +9779 => x"0981060b", +9780 => x"0b0b0b88", +9781 => x"38810b8c", +9782 => x"08fc050c", +9783 => x"8c08fc05", +9784 => x"0870800c", +9785 => x"5150508c", +9786 => x"0c048c08", +9787 => x"028c0c70", +9788 => x"70800b8c", +9789 => x"08fc050c", +9790 => x"8c088805", +9791 => x"08517008", +9792 => x"842e0981", +9793 => x"060b0b0b", +9794 => x"0b883881", +9795 => x"0b8c08fc", +9796 => x"050c8c08", +9797 => x"fc050870", +9798 => x"800c5150", +9799 => x"508c0c04", +9800 => x"8c08028c", +9801 => x"0c707080", +9802 => x"0b8c08fc", +9803 => x"050c8c08", +9804 => x"88050851", +9805 => x"7008802e", +9806 => x"0b0b0b0b", +9807 => x"97388c08", +9808 => x"88050851", +9809 => x"7008812e", +9810 => x"0b0b0b0b", +9811 => x"87380b0b", +9812 => x"0b0b8839", +9813 => x"810b8c08", +9814 => x"fc050c8c", +9815 => x"08fc0508", +9816 => x"70800c51", +9817 => x"50508c0c", +9818 => x"048c0802", +9819 => x"8c0cee3d", +9820 => x"0d8c0888", +9821 => x"05088c08", +9822 => x"8c050855", +9823 => x"53728c08", +9824 => x"d0050c73", +9825 => x"8c08d405", +9826 => x"0c8c0890", +9827 => x"05088c08", +9828 => x"94050855", +9829 => x"53728c08", +9830 => x"c8050c73", +9831 => x"8c08cc05", +9832 => x"0c8c08ec", +9833 => x"0570538c", +9834 => x"08d00570", +9835 => x"5351530b", +9836 => x"0b0baba6", +9837 => x"3f8c08d8", +9838 => x"0570538c", +9839 => x"08c80570", +9840 => x"5351530b", +9841 => x"0b0bab92", +9842 => x"3f8c08ec", +9843 => x"05705253", +9844 => x"0b0b0b80", +9845 => x"df3f8008", +9846 => x"53720b0b", +9847 => x"0b0b9e38", +9848 => x"8c08d805", +9849 => x"7052530b", +9850 => x"0b0b80c8", +9851 => x"3f800853", +9852 => x"720b0b0b", +9853 => x"0b87380b", +9854 => x"0b0b0b8e", +9855 => x"39810b8c", +9856 => x"08c4050c", +9857 => x"0b0b0b0b", +9858 => x"9e398c08", +9859 => x"d8057053", +9860 => x"8c08ec05", +9861 => x"70535153", +9862 => x"0b0b0bae", +9863 => x"c53f8008", +9864 => x"708c08c4", +9865 => x"050c538c", +9866 => x"08c40508", +9867 => x"800c943d", +9868 => x"0d8c0c04", +9869 => x"8c08028c", +9870 => x"0c707080", +9871 => x"0b8c08fc", +9872 => x"050c8c08", +9873 => x"88050851", +9874 => x"7008802e", +9875 => x"0b0b0b0b", +9876 => x"97388c08", +9877 => x"88050851", +9878 => x"7008812e", +9879 => x"0b0b0b0b", +9880 => x"87380b0b", +9881 => x"0b0b8839", +9882 => x"810b8c08", +9883 => x"fc050c8c", +9884 => x"08fc0508", +9885 => x"70800c51", +9886 => x"50508c0c", +9887 => x"048c0802", +9888 => x"8c0cee3d", +9889 => x"0d8c0888", +9890 => x"05088c08", +9891 => x"8c050855", +9892 => x"53728c08", +9893 => x"d0050c73", +9894 => x"8c08d405", +9895 => x"0c8c0890", +9896 => x"05088c08", +9897 => x"94050855", +9898 => x"53728c08", +9899 => x"c8050c73", +9900 => x"8c08cc05", +9901 => x"0c8c08ec", +9902 => x"0570538c", +9903 => x"08d00570", +9904 => x"5351530b", +9905 => x"0b0ba992", +9906 => x"3f8c08d8", +9907 => x"0570538c", +9908 => x"08c80570", +9909 => x"5351530b", +9910 => x"0b0ba8fe", +9911 => x"3f8c08ec", +9912 => x"05705253", +9913 => x"0b0b0b80", +9914 => x"df3f8008", +9915 => x"53720b0b", +9916 => x"0b0b9e38", +9917 => x"8c08d805", +9918 => x"7052530b", +9919 => x"0b0b80c8", +9920 => x"3f800853", +9921 => x"720b0b0b", +9922 => x"0b87380b", +9923 => x"0b0b0b8e", +9924 => x"39810b8c", +9925 => x"08c4050c", +9926 => x"0b0b0b0b", +9927 => x"9e398c08", +9928 => x"d8057053", +9929 => x"8c08ec05", +9930 => x"70535153", +9931 => x"0b0b0bac", +9932 => x"b13f8008", +9933 => x"708c08c4", +9934 => x"050c538c", +9935 => x"08c40508", +9936 => x"800c943d", +9937 => x"0d8c0c04", +9938 => x"8c08028c", +9939 => x"0c707080", +9940 => x"0b8c08fc", +9941 => x"050c8c08", +9942 => x"88050851", +9943 => x"7008802e", +9944 => x"0b0b0b0b", +9945 => x"97388c08", +9946 => x"88050851", +9947 => x"7008812e", +9948 => x"0b0b0b0b", +9949 => x"87380b0b", +9950 => x"0b0b8839", +9951 => x"810b8c08", +9952 => x"fc050c8c", +9953 => x"08fc0508", +9954 => x"70800c51", +9955 => x"50508c0c", +9956 => x"048c0802", +9957 => x"8c0cee3d", +9958 => x"0d8c0888", +9959 => x"05088c08", +9960 => x"8c050855", +9961 => x"53728c08", +9962 => x"d0050c73", +9963 => x"8c08d405", +9964 => x"0c8c0890", +9965 => x"05088c08", +9966 => x"94050855", +9967 => x"53728c08", +9968 => x"c8050c73", +9969 => x"8c08cc05", +9970 => x"0c8c08ec", +9971 => x"0570538c", +9972 => x"08d00570", +9973 => x"5351530b", +9974 => x"0b0ba6fe", +9975 => x"3f8c08d8", +9976 => x"0570538c", +9977 => x"08c80570", +9978 => x"5351530b", +9979 => x"0b0ba6ea", +9980 => x"3f8c08ec", +9981 => x"05705253", +9982 => x"0b0b0b80", +9983 => x"df3f8008", +9984 => x"53720b0b", +9985 => x"0b0b9e38", +9986 => x"8c08d805", +9987 => x"7052530b", +9988 => x"0b0b80c8", +9989 => x"3f800853", +9990 => x"720b0b0b", +9991 => x"0b87380b", +9992 => x"0b0b0b8e", +9993 => x"39ff0b8c", +9994 => x"08c4050c", +9995 => x"0b0b0b0b", +9996 => x"9e398c08", +9997 => x"d8057053", +9998 => x"8c08ec05", +9999 => x"70535153", +10000 => x"0b0b0baa", +10001 => x"9d3f8008", +10002 => x"708c08c4", +10003 => x"050c538c", +10004 => x"08c40508", +10005 => x"800c943d", +10006 => x"0d8c0c04", +10007 => x"8c08028c", +10008 => x"0c707080", +10009 => x"0b8c08fc", +10010 => x"050c8c08", +10011 => x"88050851", +10012 => x"7008802e", +10013 => x"0b0b0b0b", +10014 => x"97388c08", +10015 => x"88050851", +10016 => x"7008812e", +10017 => x"0b0b0b0b", +10018 => x"87380b0b", +10019 => x"0b0b8839", +10020 => x"810b8c08", +10021 => x"fc050c8c", +10022 => x"08fc0508", +10023 => x"70800c51", +10024 => x"50508c0c", +10025 => x"048c0802", +10026 => x"8c0cee3d", +10027 => x"0d8c0888", +10028 => x"05088c08", +10029 => x"8c050855", +10030 => x"53728c08", +10031 => x"d0050c73", +10032 => x"8c08d405", +10033 => x"0c8c0890", +10034 => x"05088c08", +10035 => x"94050855", +10036 => x"53728c08", +10037 => x"c8050c73", +10038 => x"8c08cc05", +10039 => x"0c8c08ec", +10040 => x"0570538c", +10041 => x"08d00570", +10042 => x"5351530b", +10043 => x"0b0ba4ea", +10044 => x"3f8c08d8", +10045 => x"0570538c", +10046 => x"08c80570", +10047 => x"5351530b", +10048 => x"0b0ba4d6", +10049 => x"3f8c08ec", +10050 => x"05705253", +10051 => x"0b0b0b80", +10052 => x"df3f8008", +10053 => x"53720b0b", +10054 => x"0b0b9e38", +10055 => x"8c08d805", +10056 => x"7052530b", +10057 => x"0b0b80c8", +10058 => x"3f800853", +10059 => x"720b0b0b", +10060 => x"0b87380b", +10061 => x"0b0b0b8e", +10062 => x"39810b8c", +10063 => x"08c4050c", +10064 => x"0b0b0b0b", +10065 => x"9e398c08", +10066 => x"d8057053", +10067 => x"8c08ec05", +10068 => x"70535153", +10069 => x"0b0b0ba8", +10070 => x"893f8008", +10071 => x"708c08c4", +10072 => x"050c538c", +10073 => x"08c40508", +10074 => x"800c943d", +10075 => x"0d8c0c04", +10076 => x"8c08028c", +10077 => x"0c707080", +10078 => x"0b8c08fc", +10079 => x"050c8c08", +10080 => x"88050851", +10081 => x"7008802e", +10082 => x"0b0b0b0b", +10083 => x"97388c08", +10084 => x"88050851", +10085 => x"7008812e", +10086 => x"0b0b0b0b", +10087 => x"87380b0b", +10088 => x"0b0b8839", +10089 => x"810b8c08", +10090 => x"fc050c8c", +10091 => x"08fc0508", +10092 => x"70800c51", +10093 => x"50508c0c", +10094 => x"048c0802", +10095 => x"8c0cee3d", +10096 => x"0d8c0888", +10097 => x"05088c08", +10098 => x"8c050855", +10099 => x"53728c08", +10100 => x"d0050c73", +10101 => x"8c08d405", +10102 => x"0c8c0890", +10103 => x"05088c08", +10104 => x"94050855", +10105 => x"53728c08", +10106 => x"c8050c73", +10107 => x"8c08cc05", +10108 => x"0c8c08ec", +10109 => x"0570538c", +10110 => x"08d00570", +10111 => x"5351530b", +10112 => x"0b0ba2d6", +10113 => x"3f8c08d8", +10114 => x"0570538c", +10115 => x"08c80570", +10116 => x"5351530b", +10117 => x"0b0ba2c2", +10118 => x"3f8c08ec", +10119 => x"05705253", +10120 => x"0b0b0b80", +10121 => x"df3f8008", +10122 => x"53720b0b", +10123 => x"0b0b9e38", +10124 => x"8c08d805", +10125 => x"7052530b", +10126 => x"0b0b80c8", +10127 => x"3f800853", +10128 => x"720b0b0b", +10129 => x"0b87380b", +10130 => x"0b0b0b8e", +10131 => x"39810b8c", +10132 => x"08c4050c", +10133 => x"0b0b0b0b", +10134 => x"9e398c08", +10135 => x"d8057053", +10136 => x"8c08ec05", +10137 => x"70535153", +10138 => x"0b0b0ba5", +10139 => x"f53f8008", +10140 => x"708c08c4", +10141 => x"050c538c", +10142 => x"08c40508", +10143 => x"800c943d", +10144 => x"0d8c0c04", +10145 => x"8c08028c", +10146 => x"0c707080", +10147 => x"0b8c08fc", +10148 => x"050c8c08", +10149 => x"88050851", +10150 => x"7008802e", +10151 => x"0b0b0b0b", +10152 => x"97388c08", +10153 => x"88050851", +10154 => x"7008812e", +10155 => x"0b0b0b0b", +10156 => x"87380b0b", +10157 => x"0b0b8839", +10158 => x"810b8c08", +10159 => x"fc050c8c", +10160 => x"08fc0508", +10161 => x"70800c51", +10162 => x"50508c0c", +10163 => x"048c0802", +10164 => x"8c0cf63d", +10165 => x"0d830b8c", +10166 => x"08ec050c", +10167 => x"800b8c08", +10168 => x"e8050c8c", +10169 => x"088c0508", +10170 => x"80250b0b", +10171 => x"0b0b8838", +10172 => x"810b8c08", +10173 => x"e8050c8c", +10174 => x"08e80508", +10175 => x"8c08f005", +10176 => x"0c8c088c", +10177 => x"05080b0b", +10178 => x"0b0b8e38", +10179 => x"820b8c08", +10180 => x"ec050c0b", +10181 => x"0b0b81b5", +10182 => x"39bc0b8c", +10183 => x"08f4050c", +10184 => x"8c08f005", +10185 => x"08802e0b", +10186 => x"0b0b80c9", +10187 => x"388c088c", +10188 => x"0508810a", +10189 => x"2e098106", +10190 => x"0b0b0b0b", +10191 => x"9b388f83", +10192 => x"0a53800b", +10193 => x"8c088805", +10194 => x"08565472", +10195 => x"750c7384", +10196 => x"160c0b0b", +10197 => x"0b818939", +10198 => x"8c088c05", +10199 => x"0830708c", +10200 => x"08fc050c", +10201 => x"709f2c70", +10202 => x"8c08f805", +10203 => x"0c51530b", +10204 => x"0b0b0b97", +10205 => x"398c088c", +10206 => x"0508708c", +10207 => x"08fc050c", +10208 => x"709f2c70", +10209 => x"8c08f805", +10210 => x"0c51538c", +10211 => x"08f80508", +10212 => x"f00a260b", +10213 => x"0b0b0bb5", +10214 => x"388c08fc", +10215 => x"05089f2a", +10216 => x"8c08f805", +10217 => x"08107072", +10218 => x"078c08f8", +10219 => x"050c8c08", +10220 => x"fc050810", +10221 => x"8c08fc05", +10222 => x"0c8c08f4", +10223 => x"0508ff05", +10224 => x"8c08f405", +10225 => x"0c54540b", +10226 => x"0b0bffbf", +10227 => x"398c08ec", +10228 => x"0570538c", +10229 => x"08880508", +10230 => x"52530b0b", +10231 => x"0b8db93f", +10232 => x"8c088805", +10233 => x"08800c8c", +10234 => x"3d0d8c0c", +10235 => x"048c0802", +10236 => x"8c0cec3d", +10237 => x"0d8c0888", +10238 => x"05088c08", +10239 => x"8c050857", +10240 => x"55748c08", +10241 => x"e0050c75", +10242 => x"8c08e405", +10243 => x"0c8c08ec", +10244 => x"0570538c", +10245 => x"08e00570", +10246 => x"5351550b", +10247 => x"0b0b9eba", +10248 => x"3f8c08ec", +10249 => x"05705255", +10250 => x"0b0b0b83", +10251 => x"d93f8008", +10252 => x"5574802e", +10253 => x"0b0b0b0b", +10254 => x"8e38800b", +10255 => x"8c08d405", +10256 => x"0c0b0b0b", +10257 => x"82b4398c", +10258 => x"08ec0570", +10259 => x"52550b0b", +10260 => x"0b82ea3f", +10261 => x"80085574", +10262 => x"802e0b0b", +10263 => x"0b0b8e38", +10264 => x"800b8c08", +10265 => x"d4050c0b", +10266 => x"0b0b828e", +10267 => x"398c08ec", +10268 => x"05705255", +10269 => x"0b0b0b82", +10270 => x"8e3f8008", +10271 => x"5574802e", +10272 => x"0b0b0b0b", +10273 => x"b4388c08", +10274 => x"f0050880", +10275 => x"2e0b0b0b", +10276 => x"0b8f3881", +10277 => x"0a0b8c08", +10278 => x"d0050c0b", +10279 => x"0b0b0b89", +10280 => x"39fe0a0b", +10281 => x"8c08d005", +10282 => x"0c8c08d0", +10283 => x"05088c08", +10284 => x"d4050c0b", +10285 => x"0b0b81c2", +10286 => x"398c08f4", +10287 => x"05088025", +10288 => x"0b0b0b0b", +10289 => x"8e38800b", +10290 => x"8c08d405", +10291 => x"0c0b0b0b", +10292 => x"81a8399e", +10293 => x"0b8c08f4", +10294 => x"0508250b", +10295 => x"0b0b0bb4", +10296 => x"388c08f0", +10297 => x"0508802e", +10298 => x"0b0b0b0b", +10299 => x"8f38810a", +10300 => x"0b8c08cc", +10301 => x"050c0b0b", +10302 => x"0b0b8939", +10303 => x"fe0a0b8c", +10304 => x"08cc050c", +10305 => x"8c08cc05", +10306 => x"088c08d4", +10307 => x"050c0b0b", +10308 => x"0b80e739", +10309 => x"bc0b8c08", +10310 => x"f4050831", +10311 => x"8c08d805", +10312 => x"71565855", +10313 => x"8c08f805", +10314 => x"088c08fc", +10315 => x"05085755", +10316 => x"74527553", +10317 => x"76510b0b", +10318 => x"0b88d53f", +10319 => x"8c08d805", +10320 => x"088c08dc", +10321 => x"0508708c", +10322 => x"08e8050c", +10323 => x"8c08e805", +10324 => x"088c08c8", +10325 => x"050c5755", +10326 => x"8c08f005", +10327 => x"08802e0b", +10328 => x"0b0b0b8c", +10329 => x"388c08c8", +10330 => x"0508308c", +10331 => x"08c8050c", +10332 => x"8c08c805", +10333 => x"088c08d4", +10334 => x"050c8c08", +10335 => x"d4050880", +10336 => x"0c963d0d", +10337 => x"8c0c048c", +10338 => x"08028c0c", +10339 => x"7070800b", +10340 => x"8c08fc05", +10341 => x"0c8c0888", +10342 => x"05085170", +10343 => x"08842e09", +10344 => x"81060b0b", +10345 => x"0b0b8838", +10346 => x"810b8c08", +10347 => x"fc050c8c", +10348 => x"08fc0508", +10349 => x"70800c51", +10350 => x"50508c0c", +10351 => x"048c0802", +10352 => x"8c0c7070", +10353 => x"800b8c08", +10354 => x"fc050c8c", +10355 => x"08880508", +10356 => x"51700880", +10357 => x"2e0b0b0b", +10358 => x"0b97388c", +10359 => x"08880508", +10360 => x"51700881", +10361 => x"2e0b0b0b", +10362 => x"0b87380b", +10363 => x"0b0b0b88", +10364 => x"39810b8c", +10365 => x"08fc050c", +10366 => x"8c08fc05", +10367 => x"0870800c", +10368 => x"5150508c", +10369 => x"0c048c08", +10370 => x"028c0c70", +10371 => x"70800b8c", +10372 => x"08fc050c", +10373 => x"8c088805", +10374 => x"08517008", +10375 => x"822e0981", +10376 => x"060b0b0b", +10377 => x"0b883881", +10378 => x"0b8c08fc", +10379 => x"050c8c08", +10380 => x"fc050870", +10381 => x"800c5150", +10382 => x"508c0c04", +10383 => x"8c08028c", +10384 => x"0c707070", +10385 => x"7080538c", +10386 => x"088c0508", +10387 => x"528c0888", +10388 => x"0508510b", +10389 => x"0bfdccbf", +10390 => x"3f800870", +10391 => x"800c5450", +10392 => x"5050508c", +10393 => x"0c048c08", +10394 => x"028c0c70", +10395 => x"70707081", +10396 => x"538c088c", +10397 => x"0508528c", +10398 => x"08880508", +10399 => x"510b0bfd", +10400 => x"cc953f80", +10401 => x"0870800c", +10402 => x"54505050", +10403 => x"508c0c04", +10404 => x"8c08028c", +10405 => x"0c707080", +10406 => x"0b8c08fc", +10407 => x"050c8c08", +10408 => x"88050881", +10409 => x"06ff1170", +10410 => x"09708c08", +10411 => x"8c050806", +10412 => x"8c08fc05", +10413 => x"08118c08", +10414 => x"fc050c8c", +10415 => x"08880508", +10416 => x"812a8c08", +10417 => x"88050c8c", +10418 => x"088c0508", +10419 => x"108c088c", +10420 => x"050c5151", +10421 => x"51518c08", +10422 => x"88050880", +10423 => x"2e0b0b0b", +10424 => x"0b87380b", +10425 => x"0b0bffb6", +10426 => x"398c08fc", +10427 => x"05087080", +10428 => x"0c515050", +10429 => x"8c0c048c", +10430 => x"08028c0c", +10431 => x"eb3d0d80", +10432 => x"0b8c08f0", +10433 => x"050c800b", +10434 => x"8c08f405", +10435 => x"0c8c088c", +10436 => x"05088c08", +10437 => x"90050856", +10438 => x"54738c08", +10439 => x"f0050c74", +10440 => x"8c08f405", +10441 => x"0c8c08f8", +10442 => x"058c08f0", +10443 => x"05565688", +10444 => x"70547553", +10445 => x"7652540b", +10446 => x"0bfdcccf", +10447 => x"3f800b8c", +10448 => x"08e8050c", +10449 => x"800b8c08", +10450 => x"ec050c8c", +10451 => x"08940508", +10452 => x"8c089805", +10453 => x"08565473", +10454 => x"8c08e805", +10455 => x"0c748c08", +10456 => x"ec050c8c", +10457 => x"08f0058c", +10458 => x"08e80556", +10459 => x"56887054", +10460 => x"75537652", +10461 => x"540b0bfd", +10462 => x"cc913f80", +10463 => x"0b8c08e8", +10464 => x"050c800b", +10465 => x"8c08ec05", +10466 => x"0c8c08fc", +10467 => x"050883ff", +10468 => x"ff068c08", +10469 => x"cc050c8c", +10470 => x"08fc0508", +10471 => x"902a8c08", +10472 => x"c4050c8c", +10473 => x"08f40508", +10474 => x"83ffff06", +10475 => x"8c08c805", +10476 => x"0c8c08f4", +10477 => x"0508902a", +10478 => x"8c08c005", +10479 => x"0c8c08cc", +10480 => x"05088c08", +10481 => x"c8050829", +10482 => x"708c08dc", +10483 => x"050c8c08", +10484 => x"cc05088c", +10485 => x"08c00508", +10486 => x"29708c08", +10487 => x"d8050c8c", +10488 => x"08c40508", +10489 => x"8c08c805", +10490 => x"0829708c", +10491 => x"08d4050c", +10492 => x"8c08c405", +10493 => x"088c08c0", +10494 => x"05082970", +10495 => x"8c08d005", +10496 => x"0c8c08dc", +10497 => x"0508902a", +10498 => x"8c08d805", +10499 => x"08118c08", +10500 => x"d8050c8c", +10501 => x"08d80508", +10502 => x"8c08d405", +10503 => x"08058c08", +10504 => x"d8050c51", +10505 => x"51515154", +10506 => x"8c08d805", +10507 => x"088c08d4", +10508 => x"0508270b", +10509 => x"0b0b0b8f", +10510 => x"388c08d0", +10511 => x"05088480", +10512 => x"80058c08", +10513 => x"d0050c8c", +10514 => x"08d80508", +10515 => x"902a8c08", +10516 => x"d0050811", +10517 => x"8c08e005", +10518 => x"0c8c08d8", +10519 => x"050883ff", +10520 => x"ff067090", +10521 => x"2b8c08dc", +10522 => x"050883ff", +10523 => x"ff067012", +10524 => x"8c08e405", +10525 => x"0c525751", +10526 => x"548c08e0", +10527 => x"05088c08", +10528 => x"e4050856", +10529 => x"54738c08", +10530 => x"e8050c74", +10531 => x"8c08ec05", +10532 => x"0c8c08fc", +10533 => x"05088c08", +10534 => x"f0050829", +10535 => x"8c08f805", +10536 => x"088c08f4", +10537 => x"05082970", +10538 => x"128c08e8", +10539 => x"0508118c", +10540 => x"08e8050c", +10541 => x"5155558c", +10542 => x"08e80508", +10543 => x"8c08ec05", +10544 => x"088c0888", +10545 => x"05085856", +10546 => x"5473760c", +10547 => x"7484170c", +10548 => x"8c088805", +10549 => x"08800c97", +10550 => x"3d0d8c0c", +10551 => x"048c0802", +10552 => x"8c0cf63d", +10553 => x"0d800b8c", +10554 => x"08f0050c", +10555 => x"800b8c08", +10556 => x"f4050c8c", +10557 => x"088c0508", +10558 => x"8c089005", +10559 => x"08565473", +10560 => x"8c08f005", +10561 => x"0c748c08", +10562 => x"f4050c8c", +10563 => x"08f8058c", +10564 => x"08f00556", +10565 => x"56887054", +10566 => x"75537652", +10567 => x"540b0bfd", +10568 => x"c8e93f80", +10569 => x"0b8c08f0", +10570 => x"050c800b", +10571 => x"8c08f405", +10572 => x"0c8c08f8", +10573 => x"0508308c", +10574 => x"08ec050c", +10575 => x"8c08fc05", +10576 => x"08802e0b", +10577 => x"0b0b0b8d", +10578 => x"388c08ec", +10579 => x"0508ff05", +10580 => x"8c08ec05", +10581 => x"0c8c08ec", +10582 => x"05088c08", +10583 => x"f0050c8c", +10584 => x"08fc0508", +10585 => x"308c08f4", +10586 => x"050c8c08", +10587 => x"f005088c", +10588 => x"08f40508", +10589 => x"8c088805", +10590 => x"08585654", +10591 => x"73760c74", +10592 => x"84170c8c", +10593 => x"08880508", +10594 => x"800c8c3d", +10595 => x"0d8c0c04", +10596 => x"8c08028c", +10597 => x"0cf53d0d", +10598 => x"8c089405", +10599 => x"080b0b0b", +10600 => x"0ba0388c", +10601 => x"088c0508", +10602 => x"8c089005", +10603 => x"088c0888", +10604 => x"05085856", +10605 => x"5473760c", +10606 => x"7484170c", +10607 => x"0b0b0b81", +10608 => x"ca39800b", +10609 => x"8c08f005", +10610 => x"0c800b8c", +10611 => x"08f4050c", +10612 => x"8c088c05", +10613 => x"088c0890", +10614 => x"05085654", +10615 => x"738c08f0", +10616 => x"050c748c", +10617 => x"08f4050c", +10618 => x"8c08f805", +10619 => x"8c08f005", +10620 => x"56568870", +10621 => x"54755376", +10622 => x"52540b0b", +10623 => x"fdc78c3f", +10624 => x"a00b8c08", +10625 => x"94050831", +10626 => x"8c08ec05", +10627 => x"0c8c08ec", +10628 => x"05088024", +10629 => x"0b0b0b0b", +10630 => x"a138800b", +10631 => x"8c08f005", +10632 => x"0c8c08ec", +10633 => x"0508308c", +10634 => x"08f80508", +10635 => x"712a8c08", +10636 => x"f4050c54", +10637 => x"0b0b0b0b", +10638 => x"b9398c08", +10639 => x"f805088c", +10640 => x"08ec0508", +10641 => x"2b8c08e8", +10642 => x"050c8c08", +10643 => x"f805088c", +10644 => x"08940508", +10645 => x"2a8c08f0", +10646 => x"050c8c08", +10647 => x"fc05088c", +10648 => x"08940508", +10649 => x"2a708c08", +10650 => x"e8050807", +10651 => x"8c08f405", +10652 => x"0c548c08", +10653 => x"f005088c", +10654 => x"08f40508", +10655 => x"8c088805", +10656 => x"08585654", +10657 => x"73760c74", +10658 => x"84170c8c", +10659 => x"08880508", +10660 => x"800c8d3d", +10661 => x"0d8c0c04", +10662 => x"8c08028c", +10663 => x"0cc73d0d", +10664 => x"8c088c05", +10665 => x"08559015", +10666 => x"088c1608", +10667 => x"5656748c", +10668 => x"08f0050c", +10669 => x"758c08f4", +10670 => x"050c8c08", +10671 => x"8c050884", +10672 => x"11088c08", +10673 => x"ec050c55", +10674 => x"800b8c08", +10675 => x"e8050c8c", +10676 => x"088c0508", +10677 => x"510b0b0b", +10678 => x"90b73f80", +10679 => x"08557480", +10680 => x"2e0b0b0b", +10681 => x"0bad388f", +10682 => x"ff0b8c08", +10683 => x"e8050c8c", +10684 => x"08f00508", +10685 => x"a0808007", +10686 => x"8c08f405", +10687 => x"08800757", +10688 => x"55748c08", +10689 => x"f0050c75", +10690 => x"8c08f405", +10691 => x"0c0b0b0b", +10692 => x"8df4398c", +10693 => x"088c0508", +10694 => x"510b0b0b", +10695 => x"8fbd3f80", +10696 => x"08557480", +10697 => x"2e0b0b0b", +10698 => x"0b9f388f", +10699 => x"ff0b8c08", +10700 => x"e8050c80", +10701 => x"55805674", +10702 => x"8c08f005", +10703 => x"0c758c08", +10704 => x"f4050c0b", +10705 => x"0b0b8dbe", +10706 => x"398c088c", +10707 => x"0508510b", +10708 => x"0b0b8ed1", +10709 => x"3f800855", +10710 => x"74802e0b", +10711 => x"0b0b0b9e", +10712 => x"38800b8c", +10713 => x"08e8050c", +10714 => x"80558056", +10715 => x"748c08f0", +10716 => x"050c758c", +10717 => x"08f4050c", +10718 => x"0b0b0b8d", +10719 => x"89398c08", +10720 => x"f0050870", +10721 => x"8c08f405", +10722 => x"08075155", +10723 => x"740b0b0b", +10724 => x"0b8e3880", +10725 => x"0b8c08e8", +10726 => x"050c0b0b", +10727 => x"0b8ce739", +10728 => x"8c088c05", +10729 => x"08558815", +10730 => x"08f88225", +10731 => x"0b0b0b87", +10732 => x"af388c08", +10733 => x"8c0508f8", +10734 => x"820b8812", +10735 => x"08318c08", +10736 => x"e4050c55", +10737 => x"800b8c08", +10738 => x"e8050cb8", +10739 => x"0b8c08e4", +10740 => x"0508250b", +10741 => x"0b0b0b97", +10742 => x"38805580", +10743 => x"56748c08", +10744 => x"f0050c75", +10745 => x"8c08f405", +10746 => x"0c0b0b0b", +10747 => x"82b03980", +10748 => x"0b8c08e0", +10749 => x"050c8c08", +10750 => x"d8055780", +10751 => x"55810b8c", +10752 => x"08e40508", +10753 => x"55567452", +10754 => x"75537651", +10755 => x"0b0bfdbc", +10756 => x"ab3f8c08", +10757 => x"d805088c", +10758 => x"08dc0508", +10759 => x"5755748c", +10760 => x"08d0050c", +10761 => x"758c08d4", +10762 => x"050cff56", +10763 => x"ff57758c", +10764 => x"08c8050c", +10765 => x"768c08cc", +10766 => x"050c8c08", +10767 => x"d405088c", +10768 => x"08cc0508", +10769 => x"7012708c", +10770 => x"08c4050c", +10771 => x"52565781", +10772 => x"0b8c08ff", +10773 => x"bc050c8c", +10774 => x"08c40508", +10775 => x"8c08d405", +10776 => x"08585676", +10777 => x"76260b0b", +10778 => x"0b0b8938", +10779 => x"800b8c08", +10780 => x"ffbc050c", +10781 => x"8c08d005", +10782 => x"088c08c8", +10783 => x"05087012", +10784 => x"708c08c0", +10785 => x"050c8c08", +10786 => x"c005088c", +10787 => x"08ffbc05", +10788 => x"0811708c", +10789 => x"08c0050c", +10790 => x"8c08c005", +10791 => x"08708c08", +10792 => x"f0050806", +10793 => x"8c08c405", +10794 => x"08708c08", +10795 => x"f4050806", +10796 => x"72707207", +10797 => x"51525752", +10798 => x"5252525a", +10799 => x"52575576", +10800 => x"802e0b0b", +10801 => x"0b0b8838", +10802 => x"810b8c08", +10803 => x"e0050c8c", +10804 => x"08d8058c", +10805 => x"08e40508", +10806 => x"55578c08", +10807 => x"f005088c", +10808 => x"08f40508", +10809 => x"57557452", +10810 => x"75537651", +10811 => x"0b0b0bf9", +10812 => x"9f3f8c08", +10813 => x"d805088c", +10814 => x"08dc0508", +10815 => x"8c08e005", +10816 => x"089f2c8c", +10817 => x"08e00508", +10818 => x"71707507", +10819 => x"8c08f005", +10820 => x"0c737207", +10821 => x"8c08f405", +10822 => x"0c59595b", +10823 => x"59578c08", +10824 => x"f0050880", +10825 => x"06708c08", +10826 => x"ffb4050c", +10827 => x"8c08f405", +10828 => x"0881ff06", +10829 => x"708c08ff", +10830 => x"b8050c57", +10831 => x"558c08ff", +10832 => x"b405088c", +10833 => x"08ffb805", +10834 => x"08575574", +10835 => x"8c08ffb4", +10836 => x"050c758c", +10837 => x"08ffb805", +10838 => x"0c8c08ff", +10839 => x"b4050856", +10840 => x"750b0b0b", +10841 => x"81f8388c", +10842 => x"08ffb805", +10843 => x"08577681", +10844 => x"802e0981", +10845 => x"060b0b0b", +10846 => x"81e4388c", +10847 => x"08f00508", +10848 => x"982b8c08", +10849 => x"f4050888", +10850 => x"2a707207", +10851 => x"8c08f005", +10852 => x"08882a71", +10853 => x"81065158", +10854 => x"58585874", +10855 => x"802e0b0b", +10856 => x"0b82ef38", +10857 => x"8c08f005", +10858 => x"088c08f4", +10859 => x"05085755", +10860 => x"748c08ff", +10861 => x"ac050c75", +10862 => x"8c08ffb0", +10863 => x"050c8056", +10864 => x"81805775", +10865 => x"8c08ffa4", +10866 => x"050c768c", +10867 => x"08ffa805", +10868 => x"0c8c08ff", +10869 => x"b005088c", +10870 => x"08ffa805", +10871 => x"08701270", +10872 => x"8c08ffa0", +10873 => x"050c5256", +10874 => x"57810b8c", +10875 => x"08ff9805", +10876 => x"0c8c08ff", +10877 => x"a005088c", +10878 => x"08ffb005", +10879 => x"08585676", +10880 => x"76260b0b", +10881 => x"0b0b8938", +10882 => x"800b8c08", +10883 => x"ff98050c", +10884 => x"8c08ffac", +10885 => x"05088c08", +10886 => x"ffa40508", +10887 => x"7012708c", +10888 => x"08ff9c05", +10889 => x"0c8c08ff", +10890 => x"9c05088c", +10891 => x"08ff9805", +10892 => x"0811708c", +10893 => x"08ff9c05", +10894 => x"0c525a52", +10895 => x"57558c08", +10896 => x"ff9c0508", +10897 => x"8c08ffa0", +10898 => x"05085755", +10899 => x"748c08f0", +10900 => x"050c758c", +10901 => x"08f4050c", +10902 => x"0b0b0b81", +10903 => x"b5398c08", +10904 => x"f005088c", +10905 => x"08f40508", +10906 => x"5856758c", +10907 => x"08ff9005", +10908 => x"0c768c08", +10909 => x"ff94050c", +10910 => x"805580ff", +10911 => x"56748c08", +10912 => x"ff88050c", +10913 => x"758c08ff", +10914 => x"8c050c8c", +10915 => x"08ff9405", +10916 => x"088c08ff", +10917 => x"8c050870", +10918 => x"12708c08", +10919 => x"ff84050c", +10920 => x"52585681", +10921 => x"0b8c08fe", +10922 => x"fc050c8c", +10923 => x"08ff8405", +10924 => x"088c08ff", +10925 => x"94050857", +10926 => x"55757526", +10927 => x"0b0b0b0b", +10928 => x"8938800b", +10929 => x"8c08fefc", +10930 => x"050c8c08", +10931 => x"ff900508", +10932 => x"8c08ff88", +10933 => x"05087012", +10934 => x"708c08ff", +10935 => x"80050c8c", +10936 => x"08ff8005", +10937 => x"088c08fe", +10938 => x"fc050811", +10939 => x"708c08ff", +10940 => x"80050c53", +10941 => x"59525657", +10942 => x"8c08ff80", +10943 => x"05088c08", +10944 => x"ff840508", +10945 => x"5755748c", +10946 => x"08f0050c", +10947 => x"758c08f4", +10948 => x"050c8c08", +10949 => x"f00508f0", +10950 => x"0a260b0b", +10951 => x"0b0b8738", +10952 => x"0b0b0b0b", +10953 => x"8d398c08", +10954 => x"e8050881", +10955 => x"058c08e8", +10956 => x"050c8c08", +10957 => x"f0050898", +10958 => x"2b8c08f4", +10959 => x"0508882a", +10960 => x"7072078c", +10961 => x"08f00508", +10962 => x"882a5858", +10963 => x"5858748c", +10964 => x"08f0050c", +10965 => x"758c08f4", +10966 => x"050c0b0b", +10967 => x"0b85a739", +10968 => x"8c088c05", +10969 => x"085587ff", +10970 => x"0b881608", +10971 => x"250b0b0b", +10972 => x"0b9f388f", +10973 => x"ff0b8c08", +10974 => x"e8050c80", +10975 => x"55805674", +10976 => x"8c08f005", +10977 => x"0c758c08", +10978 => x"f4050c0b", +10979 => x"0b0b84f6", +10980 => x"398c088c", +10981 => x"05088811", +10982 => x"0887ff05", +10983 => x"8c08e805", +10984 => x"0c8c08f0", +10985 => x"05088006", +10986 => x"708c08fe", +10987 => x"f4050c8c", +10988 => x"08f40508", +10989 => x"81ff0670", +10990 => x"8c08fef8", +10991 => x"050c5957", +10992 => x"558c08fe", +10993 => x"f405088c", +10994 => x"08fef805", +10995 => x"08575574", +10996 => x"8c08fef4", +10997 => x"050c758c", +10998 => x"08fef805", +10999 => x"0c8c08fe", +11000 => x"f4050856", +11001 => x"750b0b0b", +11002 => x"81f8388c", +11003 => x"08fef805", +11004 => x"08577681", +11005 => x"802e0981", +11006 => x"060b0b0b", +11007 => x"81e4388c", +11008 => x"08f00508", +11009 => x"982b8c08", +11010 => x"f4050888", +11011 => x"2a707207", +11012 => x"8c08f005", +11013 => x"08882a71", +11014 => x"81065158", +11015 => x"58585874", +11016 => x"802e0b0b", +11017 => x"0b82ef38", +11018 => x"8c08f005", +11019 => x"088c08f4", +11020 => x"05085755", +11021 => x"748c08fe", +11022 => x"ec050c75", +11023 => x"8c08fef0", +11024 => x"050c8056", +11025 => x"81805775", +11026 => x"8c08fee4", +11027 => x"050c768c", +11028 => x"08fee805", +11029 => x"0c8c08fe", +11030 => x"f005088c", +11031 => x"08fee805", +11032 => x"08701270", +11033 => x"8c08fee0", +11034 => x"050c5256", +11035 => x"57810b8c", +11036 => x"08fed805", +11037 => x"0c8c08fe", +11038 => x"e005088c", +11039 => x"08fef005", +11040 => x"08585676", +11041 => x"76260b0b", +11042 => x"0b0b8938", +11043 => x"800b8c08", +11044 => x"fed8050c", +11045 => x"8c08feec", +11046 => x"05088c08", +11047 => x"fee40508", +11048 => x"7012708c", +11049 => x"08fedc05", +11050 => x"0c8c08fe", +11051 => x"dc05088c", +11052 => x"08fed805", +11053 => x"0811708c", +11054 => x"08fedc05", +11055 => x"0c525a52", +11056 => x"57558c08", +11057 => x"fedc0508", +11058 => x"8c08fee0", +11059 => x"05085755", +11060 => x"748c08f0", +11061 => x"050c758c", +11062 => x"08f4050c", +11063 => x"0b0b0b81", +11064 => x"b5398c08", +11065 => x"f005088c", +11066 => x"08f40508", +11067 => x"5856758c", +11068 => x"08fed005", +11069 => x"0c768c08", +11070 => x"fed4050c", +11071 => x"805580ff", +11072 => x"56748c08", +11073 => x"fec8050c", +11074 => x"758c08fe", +11075 => x"cc050c8c", +11076 => x"08fed405", +11077 => x"088c08fe", +11078 => x"cc050870", +11079 => x"12708c08", +11080 => x"fec4050c", +11081 => x"52585681", +11082 => x"0b8c08fe", +11083 => x"bc050c8c", +11084 => x"08fec405", +11085 => x"088c08fe", +11086 => x"d4050857", +11087 => x"55757526", +11088 => x"0b0b0b0b", +11089 => x"8938800b", +11090 => x"8c08febc", +11091 => x"050c8c08", +11092 => x"fed00508", +11093 => x"8c08fec8", +11094 => x"05087012", +11095 => x"708c08fe", +11096 => x"c0050c8c", +11097 => x"08fec005", +11098 => x"088c08fe", +11099 => x"bc050811", +11100 => x"708c08fe", +11101 => x"c0050c53", +11102 => x"59525657", +11103 => x"8c08fec0", +11104 => x"05088c08", +11105 => x"fec40508", +11106 => x"5755748c", +11107 => x"08f0050c", +11108 => x"758c08f4", +11109 => x"050c8c08", +11110 => x"f00508f8", +11111 => x"0a260b0b", +11112 => x"0b0b8738", +11113 => x"0b0b0b0b", +11114 => x"b5398c08", +11115 => x"f005089f", +11116 => x"2b8c08f4", +11117 => x"0508812a", +11118 => x"7072078c", +11119 => x"08f00508", +11120 => x"812a5858", +11121 => x"5858748c", +11122 => x"08f0050c", +11123 => x"758c08f4", +11124 => x"050c8c08", +11125 => x"e8050881", +11126 => x"058c08e8", +11127 => x"050c8c08", +11128 => x"f0050898", +11129 => x"2b8c08f4", +11130 => x"0508882a", +11131 => x"7072078c", +11132 => x"08f00508", +11133 => x"882a5858", +11134 => x"5858748c", +11135 => x"08f0050c", +11136 => x"758c08f4", +11137 => x"050c8c08", +11138 => x"f00508bf", +11139 => x"ffff068c", +11140 => x"08f8050c", +11141 => x"8c08f405", +11142 => x"08ff068c", +11143 => x"08fc050c", +11144 => x"8c08e805", +11145 => x"08568070", +11146 => x"8006778f", +11147 => x"ff067094", +11148 => x"2b535a58", +11149 => x"55800b8c", +11150 => x"08f80508", +11151 => x"76078c08", +11152 => x"f8050c70", +11153 => x"8c08fc05", +11154 => x"08078c08", +11155 => x"fc050c8c", +11156 => x"08ec0508", +11157 => x"51568070", +11158 => x"80067781", +11159 => x"06709f2b", +11160 => x"535a5855", +11161 => x"800b8c08", +11162 => x"f8050876", +11163 => x"078c08f8", +11164 => x"050c708c", +11165 => x"08fc0508", +11166 => x"078c08fc", +11167 => x"050c568c", +11168 => x"08f80508", +11169 => x"8c08fc05", +11170 => x"088c0888", +11171 => x"05085957", +11172 => x"5574770c", +11173 => x"7584180c", +11174 => x"8c088805", +11175 => x"08800cbb", +11176 => x"3d0d8c0c", +11177 => x"048c0802", +11178 => x"8c0c7070", +11179 => x"800b8c08", +11180 => x"fc050c8c", +11181 => x"08880508", +11182 => x"51700882", +11183 => x"2e098106", +11184 => x"0b0b0b0b", +11185 => x"8838810b", +11186 => x"8c08fc05", +11187 => x"0c8c08fc", +11188 => x"05087080", +11189 => x"0c515050", +11190 => x"8c0c048c", +11191 => x"08028c0c", +11192 => x"7070800b", +11193 => x"8c08fc05", +11194 => x"0c8c0888", +11195 => x"05085170", +11196 => x"08842e09", +11197 => x"81060b0b", +11198 => x"0b0b8838", +11199 => x"810b8c08", +11200 => x"fc050c8c", +11201 => x"08fc0508", +11202 => x"70800c51", +11203 => x"50508c0c", +11204 => x"048c0802", +11205 => x"8c0c7070", +11206 => x"800b8c08", +11207 => x"fc050c8c", +11208 => x"08880508", +11209 => x"51700880", +11210 => x"2e0b0b0b", +11211 => x"0b97388c", +11212 => x"08880508", +11213 => x"51700881", +11214 => x"2e0b0b0b", +11215 => x"0b87380b", +11216 => x"0b0b0b88", +11217 => x"39810b8c", +11218 => x"08fc050c", +11219 => x"8c08fc05", +11220 => x"0870800c", +11221 => x"5150508c", +11222 => x"0c048c08", +11223 => x"028c0cf8", +11224 => x"3d0d8c08", +11225 => x"88050870", +11226 => x"08bfffff", +11227 => x"068c08f8", +11228 => x"050c8411", +11229 => x"08ff068c", +11230 => x"08fc050c", +11231 => x"8c088805", +11232 => x"08700894", +11233 => x"2a545451", +11234 => x"80728fff", +11235 => x"068c08f4", +11236 => x"050c8c08", +11237 => x"88050870", +11238 => x"089f2a54", +11239 => x"54518072", +11240 => x"81068c08", +11241 => x"f0050c8c", +11242 => x"088c0508", +11243 => x"8c08f005", +11244 => x"0884120c", +11245 => x"51518c08", +11246 => x"f405080b", +11247 => x"0b0b81cf", +11248 => x"388c08f8", +11249 => x"0508708c", +11250 => x"08fc0508", +11251 => x"07515170", +11252 => x"0b0b0b0b", +11253 => x"90388c08", +11254 => x"8c050851", +11255 => x"82710c0b", +11256 => x"0b0b82f8", +11257 => x"398c088c", +11258 => x"05088c08", +11259 => x"f40508f8", +11260 => x"82058812", +11261 => x"0c8c08fc", +11262 => x"0508982a", +11263 => x"8c08f805", +11264 => x"08882b70", +11265 => x"72078c08", +11266 => x"fc050888", +11267 => x"2b565355", +11268 => x"5551708c", +11269 => x"08f8050c", +11270 => x"718c08fc", +11271 => x"050c8c08", +11272 => x"8c050851", +11273 => x"83710c8c", +11274 => x"08f80508", +11275 => x"f00a260b", +11276 => x"0b0b0bbb", +11277 => x"388c08fc", +11278 => x"05089f2a", +11279 => x"8c08f805", +11280 => x"08107072", +11281 => x"078c08fc", +11282 => x"05081055", +11283 => x"53545470", +11284 => x"8c08f805", +11285 => x"0c718c08", +11286 => x"fc050c8c", +11287 => x"088c0508", +11288 => x"881108ff", +11289 => x"0588120c", +11290 => x"510b0b0b", +11291 => x"ffb9398c", +11292 => x"088c0508", +11293 => x"538c08f8", +11294 => x"05088c08", +11295 => x"fc050853", +11296 => x"51708c14", +11297 => x"0c719014", +11298 => x"0c0b0b0b", +11299 => x"81ce398c", +11300 => x"08f40508", +11301 => x"8fff2e09", +11302 => x"81060b0b", +11303 => x"0b80f438", +11304 => x"8c08f805", +11305 => x"08708c08", +11306 => x"fc050807", +11307 => x"5151700b", +11308 => x"0b0b0b90", +11309 => x"388c088c", +11310 => x"05085184", +11311 => x"710c0b0b", +11312 => x"0b819939", +11313 => x"8c08f805", +11314 => x"08932a52", +11315 => x"80728106", +11316 => x"51517080", +11317 => x"2e0b0b0b", +11318 => x"0b90388c", +11319 => x"088c0508", +11320 => x"5181710c", +11321 => x"0b0b0b0b", +11322 => x"8a398c08", +11323 => x"8c050851", +11324 => x"80710c8c", +11325 => x"088c0508", +11326 => x"538c08f8", +11327 => x"05088c08", +11328 => x"fc050853", +11329 => x"51708c14", +11330 => x"0c719014", +11331 => x"0c0b0b0b", +11332 => x"80ca398c", +11333 => x"088c0508", +11334 => x"8c08f405", +11335 => x"08f88105", +11336 => x"88120c8c", +11337 => x"088c0508", +11338 => x"51518371", +11339 => x"0c8c088c", +11340 => x"05088c08", +11341 => x"fc050898", +11342 => x"2a8c08f8", +11343 => x"0508882b", +11344 => x"7072078c", +11345 => x"08fc0508", +11346 => x"882b7188", +11347 => x"0a078c16", +11348 => x"0c708007", +11349 => x"90160c56", +11350 => x"54555555", +11351 => x"8a3d0d8c", +11352 => x"0c048c08", +11353 => x"028c0cf0", +11354 => x"3d0d8c08", +11355 => x"88050851", +11356 => x"0b0b0b89", +11357 => x"993f8008", +11358 => x"52710b0b", +11359 => x"0b0b9d38", +11360 => x"8c088c05", +11361 => x"08510b0b", +11362 => x"0b89833f", +11363 => x"80085271", +11364 => x"0b0b0b0b", +11365 => x"87380b0b", +11366 => x"0b0b8e39", +11367 => x"810b8c08", +11368 => x"fc050c0b", +11369 => x"0b0b87ed", +11370 => x"398c0888", +11371 => x"0508510b", +11372 => x"0b0b88a4", +11373 => x"3f800852", +11374 => x"71802e0b", +11375 => x"0b0b0bb9", +11376 => x"388c088c", +11377 => x"0508510b", +11378 => x"0b0b888c", +11379 => x"3f800852", +11380 => x"71802e0b", +11381 => x"0b0b0ba1", +11382 => x"388c088c", +11383 => x"05088c08", +11384 => x"88050884", +11385 => x"12088412", +11386 => x"0831708c", +11387 => x"08fc050c", +11388 => x"5254520b", +11389 => x"0b0b879d", +11390 => x"398c0888", +11391 => x"0508510b", +11392 => x"0b0b87d4", +11393 => x"3f800852", +11394 => x"71802e0b", +11395 => x"0b0b0bb6", +11396 => x"388c0888", +11397 => x"05085284", +11398 => x"1208802e", +11399 => x"0b0b0b0b", +11400 => x"8e38ff0b", +11401 => x"8c08f805", +11402 => x"0c0b0b0b", +11403 => x"0b883981", +11404 => x"0b8c08f8", +11405 => x"050c8c08", +11406 => x"f805088c", +11407 => x"08fc050c", +11408 => x"0b0b0b86", +11409 => x"d0398c08", +11410 => x"8c050851", +11411 => x"0b0b0b87", +11412 => x"873f8008", +11413 => x"5271802e", +11414 => x"0b0b0b0b", +11415 => x"b6388c08", +11416 => x"8c050852", +11417 => x"84120880", +11418 => x"2e0b0b0b", +11419 => x"0b8e3881", +11420 => x"0b8c08f4", +11421 => x"050c0b0b", +11422 => x"0b0b8839", +11423 => x"ff0b8c08", +11424 => x"f4050c8c", +11425 => x"08f40508", +11426 => x"8c08fc05", +11427 => x"0c0b0b0b", +11428 => x"8683398c", +11429 => x"08880508", +11430 => x"510b0b0b", +11431 => x"86843f80", +11432 => x"08527180", +11433 => x"2e0b0b0b", +11434 => x"0ba6388c", +11435 => x"088c0508", +11436 => x"510b0b0b", +11437 => x"85ec3f80", +11438 => x"08527180", +11439 => x"2e0b0b0b", +11440 => x"0b8e3880", +11441 => x"0b8c08fc", +11442 => x"050c0b0b", +11443 => x"0b85c639", +11444 => x"8c088805", +11445 => x"08510b0b", +11446 => x"0b85c73f", +11447 => x"80085271", +11448 => x"802e0b0b", +11449 => x"0b0bb638", +11450 => x"8c088c05", +11451 => x"08528412", +11452 => x"08802e0b", +11453 => x"0b0b0b8e", +11454 => x"38810b8c", +11455 => x"08f0050c", +11456 => x"0b0b0b0b", +11457 => x"8839ff0b", +11458 => x"8c08f005", +11459 => x"0c8c08f0", +11460 => x"05088c08", +11461 => x"fc050c0b", +11462 => x"0b0b84f9", +11463 => x"398c088c", +11464 => x"0508510b", +11465 => x"0b0b84fa", +11466 => x"3f800852", +11467 => x"71802e0b", +11468 => x"0b0b0bb6", +11469 => x"388c0888", +11470 => x"05085284", +11471 => x"1208802e", +11472 => x"0b0b0b0b", +11473 => x"8e38ff0b", +11474 => x"8c08ec05", +11475 => x"0c0b0b0b", +11476 => x"0b883981", +11477 => x"0b8c08ec", +11478 => x"050c8c08", +11479 => x"ec05088c", +11480 => x"08fc050c", +11481 => x"0b0b0b84", +11482 => x"ac398c08", +11483 => x"8805088c", +11484 => x"088c0508", +11485 => x"53538413", +11486 => x"08841308", +11487 => x"2e0b0b0b", +11488 => x"0bb6388c", +11489 => x"08880508", +11490 => x"52841208", +11491 => x"802e0b0b", +11492 => x"0b0b8e38", +11493 => x"ff0b8c08", +11494 => x"e8050c0b", +11495 => x"0b0b0b88", +11496 => x"39810b8c", +11497 => x"08e8050c", +11498 => x"8c08e805", +11499 => x"088c08fc", +11500 => x"050c0b0b", +11501 => x"0b83de39", +11502 => x"8c088805", +11503 => x"088c088c", +11504 => x"05085353", +11505 => x"88120888", +11506 => x"1408250b", +11507 => x"0b0b0bb6", +11508 => x"388c0888", +11509 => x"05085284", +11510 => x"1208802e", +11511 => x"0b0b0b0b", +11512 => x"8e38ff0b", +11513 => x"8c08e405", +11514 => x"0c0b0b0b", +11515 => x"0b883981", +11516 => x"0b8c08e4", +11517 => x"050c8c08", +11518 => x"e405088c", +11519 => x"08fc050c", +11520 => x"0b0b0b83", +11521 => x"90398c08", +11522 => x"8805088c", +11523 => x"088c0508", +11524 => x"53538813", +11525 => x"08881308", +11526 => x"250b0b0b", +11527 => x"0bb6388c", +11528 => x"08880508", +11529 => x"52841208", +11530 => x"802e0b0b", +11531 => x"0b0b8e38", +11532 => x"810b8c08", +11533 => x"e0050c0b", +11534 => x"0b0b0b88", +11535 => x"39ff0b8c", +11536 => x"08e0050c", +11537 => x"8c08e005", +11538 => x"088c08fc", +11539 => x"050c0b0b", +11540 => x"0b82c239", +11541 => x"8c088805", +11542 => x"088c08dc", +11543 => x"050c8c08", +11544 => x"8c05088c", +11545 => x"08d8050c", +11546 => x"8c08dc05", +11547 => x"088c08d8", +11548 => x"05085452", +11549 => x"8c12088c", +11550 => x"1408260b", +11551 => x"0b0b0bbc", +11552 => x"388c08dc", +11553 => x"05088c08", +11554 => x"d8050854", +11555 => x"528c1208", +11556 => x"8c14082e", +11557 => x"0981060b", +11558 => x"0b0b80d5", +11559 => x"388c08dc", +11560 => x"05088c08", +11561 => x"d8050854", +11562 => x"52901208", +11563 => x"90140826", +11564 => x"0b0b0b0b", +11565 => x"87380b0b", +11566 => x"0b0bb639", +11567 => x"8c088805", +11568 => x"08528412", +11569 => x"08802e0b", +11570 => x"0b0b0b8e", +11571 => x"38ff0b8c", +11572 => x"08d4050c", +11573 => x"0b0b0b0b", +11574 => x"8839810b", +11575 => x"8c08d405", +11576 => x"0c8c08d4", +11577 => x"05088c08", +11578 => x"fc050c0b", +11579 => x"0b0b81a5", +11580 => x"398c088c", +11581 => x"05088c08", +11582 => x"d0050c8c", +11583 => x"08880508", +11584 => x"8c08cc05", +11585 => x"0c8c08d0", +11586 => x"05088c08", +11587 => x"cc050854", +11588 => x"528c1208", +11589 => x"8c140826", +11590 => x"0b0b0b0b", +11591 => x"bc388c08", +11592 => x"d005088c", +11593 => x"08cc0508", +11594 => x"54528c12", +11595 => x"088c1408", +11596 => x"2e098106", +11597 => x"0b0b0b80", +11598 => x"d5388c08", +11599 => x"d005088c", +11600 => x"08cc0508", +11601 => x"54529012", +11602 => x"08901408", +11603 => x"260b0b0b", +11604 => x"0b87380b", +11605 => x"0b0b0bb6", +11606 => x"398c0888", +11607 => x"05085284", +11608 => x"1208802e", +11609 => x"0b0b0b0b", +11610 => x"8e38810b", +11611 => x"8c08c805", +11612 => x"0c0b0b0b", +11613 => x"0b8839ff", +11614 => x"0b8c08c8", +11615 => x"050c8c08", +11616 => x"c805088c", +11617 => x"08fc050c", +11618 => x"0b0b0b0b", +11619 => x"8839800b", +11620 => x"8c08fc05", +11621 => x"0c8c08fc", +11622 => x"0508800c", +11623 => x"923d0d8c", +11624 => x"0c048c08", +11625 => x"028c0c70", +11626 => x"70800b8c", +11627 => x"08fc050c", +11628 => x"8c088805", +11629 => x"08517008", +11630 => x"822e0981", +11631 => x"060b0b0b", +11632 => x"0b883881", +11633 => x"0b8c08fc", +11634 => x"050c8c08", +11635 => x"fc050870", +11636 => x"800c5150", +11637 => x"508c0c04", +11638 => x"8c08028c", +11639 => x"0c707080", +11640 => x"0b8c08fc", +11641 => x"050c8c08", +11642 => x"88050851", +11643 => x"7008842e", +11644 => x"0981060b", +11645 => x"0b0b0b88", +11646 => x"38810b8c", +11647 => x"08fc050c", +11648 => x"8c08fc05", +11649 => x"0870800c", +11650 => x"5150508c", +11651 => x"0c048c08", +11652 => x"028c0c70", +11653 => x"70800b8c", +11654 => x"08fc050c", +11655 => x"8c088805", +11656 => x"08517008", +11657 => x"802e0b0b", +11658 => x"0b0b9738", +11659 => x"8c088805", +11660 => x"08517008", +11661 => x"812e0b0b", +11662 => x"0b0b8738", +11663 => x"0b0b0b0b", +11664 => x"8839810b", +11665 => x"8c08fc05", +11666 => x"0c8c08fc", +11667 => x"05087080", +11668 => x"0c515050", +11669 => x"8c0c0470", +11670 => x"700b0b83", +11671 => x"84d80bfc", +11672 => x"05700852", +11673 => x"5270ff2e", +11674 => x"0b0b0b0b", +11675 => x"9538702d", +11676 => x"fc127008", +11677 => x"525270ff", +11678 => x"2e098106", +11679 => x"0b0b0b0b", +11680 => x"ed385050", +11681 => x"04040b0b", +11682 => x"fd9e993f", +11683 => x"04000000", +11684 => x"00000040", +11685 => x"48656c6c", +11686 => x"6f20776f", +11687 => x"726c6421", +11688 => x"0a000000", +11689 => x"20202020", +11690 => x"20202020", +11691 => x"20202020", +11692 => x"20202020", +11693 => x"30303030", +11694 => x"30303030", +11695 => x"30303030", +11696 => x"30303030", +11697 => x"0000164c", +11698 => x"000010d6", +11699 => x"000010d6", +11700 => x"0000163f", +11701 => x"000010d6", +11702 => x"000010d6", +11703 => x"000010d6", +11704 => x"000010d6", +11705 => x"000010d6", +11706 => x"000010d6", +11707 => x"000010a4", +11708 => x"000015c6", +11709 => x"000010d6", +11710 => x"000010b9", +11711 => x"000012d9", +11712 => x"000010d6", +11713 => x"000015fe", +11714 => x"000015d5", +11715 => x"000015d5", +11716 => x"000015d5", +11717 => x"000015d5", +11718 => x"000015d5", +11719 => x"000015d5", +11720 => x"000015d5", +11721 => x"000015d5", +11722 => x"000015d5", +11723 => x"000010d6", +11724 => x"000010d6", +11725 => x"000010d6", +11726 => x"000010d6", +11727 => x"000010d6", +11728 => x"000010d6", +11729 => x"000010d6", +11730 => x"000010d6", +11731 => x"000010d6", +11732 => x"00001476", +11733 => x"00001060", +11734 => x"000013e5", +11735 => x"000010d6", +11736 => x"000013e5", +11737 => x"000010d6", +11738 => x"000010d6", +11739 => x"000010d6", +11740 => x"000010d6", +11741 => x"0000160c", +11742 => x"000010d6", +11743 => x"000010d6", +11744 => x"00001024", +11745 => x"000010d6", +11746 => x"000010d6", +11747 => x"000010d6", +11748 => x"0000152a", +11749 => x"000010d6", +11750 => x"00000ce0", +11751 => x"000010d6", +11752 => x"000010d6", +11753 => x"000014d2", +11754 => x"000010d6", +11755 => x"000010d6", +11756 => x"000010d6", +11757 => x"000010d6", +11758 => x"000010d6", +11759 => x"000010d6", +11760 => x"000010d6", +11761 => x"000010d6", +11762 => x"000010d6", +11763 => x"000010d6", +11764 => x"00001476", +11765 => x"00001064", +11766 => x"000013e5", +11767 => x"000013e5", +11768 => x"000013e5", +11769 => x"000013d7", +11770 => x"00001064", +11771 => x"000010d6", +11772 => x"000010d6", +11773 => x"000012b5", +11774 => x"000010d6", +11775 => x"00001592", +11776 => x"00001028", +11777 => x"0000132c", +11778 => x"000010c9", +11779 => x"000010d6", +11780 => x"0000152a", +11781 => x"000010d6", +11782 => x"00000ce4", +11783 => x"000010d6", +11784 => x"000010d6", +11785 => x"00001619", +11786 => x"62756720", +11787 => x"696e2076", +11788 => x"66707269", +11789 => x"6e74663a", +11790 => x"20626164", +11791 => x"20626173", +11792 => x"65000000", +11793 => x"30313233", +11794 => x"34353637", +11795 => x"38396162", +11796 => x"63646566", +11797 => x"00000000", +11798 => x"496e6600", +11799 => x"30313233", +11800 => x"34353637", +11801 => x"38394142", +11802 => x"43444546", +11803 => x"00000000", +11804 => x"30000000", +11805 => x"2e000000", +11806 => x"4e614e00", +11807 => x"286e756c", +11808 => x"6c290000", +11809 => x"432d5554", +11810 => x"462d3800", +11811 => x"432d534a", +11812 => x"49530000", +11813 => x"432d4555", +11814 => x"434a5000", +11815 => x"432d4a49", +11816 => x"53000000", +11817 => x"496e6669", +11818 => x"6e697479", +11819 => x"00000000", +11820 => x"000037a9", +11821 => x"000037a9", +11822 => x"0000378d", +11823 => x"000031e6", +11824 => x"00003792", +11825 => x"000031eb", +11826 => x"43000000", +11827 => x"49534f2d", +11828 => x"38383539", +11829 => x"2d310000", +11830 => x"0000b874", +11831 => x"0000b86c", +11832 => x"0000b86c", +11833 => x"0000b86c", +11834 => x"0000b86c", +11835 => x"0000b86c", +11836 => x"0000b86c", +11837 => x"0000b86c", +11838 => x"0000b86c", +11839 => x"0000b86c", +11840 => x"ffffffff", +11841 => x"ffffffff", +11842 => x"3c9cd2b2", +11843 => x"97d889bc", +11844 => x"3949f623", +11845 => x"d5a8a733", +11846 => x"32a50ffd", +11847 => x"44f4a73d", +11848 => x"255bba08", +11849 => x"cf8c979d", +11850 => x"0ac80628", +11851 => x"64ac6f43", +11852 => x"4341c379", +11853 => x"37e08000", +11854 => x"4693b8b5", +11855 => x"b5056e17", +11856 => x"4d384f03", +11857 => x"e93ff9f5", +11858 => x"5a827748", +11859 => x"f9301d32", +11860 => x"75154fdd", +11861 => x"7f73bf3c", +11862 => x"3ff00000", +11863 => x"00000000", +11864 => x"40240000", +11865 => x"00000000", +11866 => x"40590000", +11867 => x"00000000", +11868 => x"408f4000", +11869 => x"00000000", +11870 => x"40c38800", +11871 => x"00000000", +11872 => x"40f86a00", +11873 => x"00000000", +11874 => x"412e8480", +11875 => x"00000000", +11876 => x"416312d0", +11877 => x"00000000", +11878 => x"4197d784", +11879 => x"00000000", +11880 => x"41cdcd65", +11881 => x"00000000", +11882 => x"4202a05f", +11883 => x"20000000", +11884 => x"42374876", +11885 => x"e8000000", +11886 => x"426d1a94", +11887 => x"a2000000", +11888 => x"42a2309c", +11889 => x"e5400000", +11890 => x"42d6bcc4", +11891 => x"1e900000", +11892 => x"430c6bf5", +11893 => x"26340000", +11894 => x"4341c379", +11895 => x"37e08000", +11896 => x"43763457", +11897 => x"85d8a000", +11898 => x"43abc16d", +11899 => x"674ec800", +11900 => x"43e158e4", +11901 => x"60913d00", +11902 => x"4415af1d", +11903 => x"78b58c40", +11904 => x"444b1ae4", +11905 => x"d6e2ef50", +11906 => x"4480f0cf", +11907 => x"064dd592", +11908 => x"44b52d02", +11909 => x"c7e14af6", +11910 => x"44ea7843", +11911 => x"79d99db4", +11912 => x"00000005", +11913 => x"00000019", +11914 => x"0000007d", +11915 => x"64756d6d", +11916 => x"792e6578", +11917 => x"65000000", +11918 => x"00000000", +11919 => x"00000000", +11920 => x"00000000", +11921 => x"00000000", +11922 => x"00000000", +11923 => x"00ffffff", +11924 => x"ff00ffff", +11925 => x"ffff00ff", +11926 => x"ffffff00", +11927 => x"00000000", +11928 => x"00000000", +11929 => x"00000000", +11930 => x"0000c260", +11931 => x"0000ba70", +11932 => x"00000000", +11933 => x"0000bcd8", +11934 => x"0000bd34", +11935 => x"0000bd90", +11936 => x"00000000", +11937 => x"00000000", +11938 => x"00000000", +11939 => x"00000000", +11940 => x"00000000", +11941 => x"00000000", +11942 => x"00000000", +11943 => x"00000000", +11944 => x"00000000", +11945 => x"0000b8c8", +11946 => x"00000000", +11947 => x"00000000", +11948 => x"00000000", +11949 => x"00000000", +11950 => x"00000000", +11951 => x"00000000", +11952 => x"00000000", +11953 => x"00000000", +11954 => x"00000000", +11955 => x"00000000", +11956 => x"00000000", +11957 => x"00000000", +11958 => x"00000000", +11959 => x"00000000", +11960 => x"00000000", +11961 => x"00000000", +11962 => x"00000000", +11963 => x"00000000", +11964 => x"00000000", +11965 => x"00000000", +11966 => x"00000000", +11967 => x"00000000", +11968 => x"00000000", +11969 => x"00000000", +11970 => x"00000000", +11971 => x"00000000", +11972 => x"00000000", +11973 => x"00000000", +11974 => x"00000001", +11975 => x"330eabcd", +11976 => x"1234e66d", +11977 => x"deec0005", +11978 => x"000b0000", +11979 => x"00000000", +11980 => x"00000000", +11981 => x"00000000", +11982 => x"00000000", +11983 => x"00000000", +11984 => x"00000000", +11985 => x"00000000", +11986 => x"00000000", +11987 => x"00000000", +11988 => x"00000000", +11989 => x"00000000", +11990 => x"00000000", +11991 => x"00000000", +11992 => x"00000000", +11993 => x"00000000", +11994 => x"00000000", +11995 => x"00000000", +11996 => x"00000000", +11997 => x"00000000", +11998 => x"00000000", +11999 => x"00000000", +12000 => x"00000000", +12001 => x"00000000", +12002 => x"00000000", +12003 => x"00000000", +12004 => x"00000000", +12005 => x"00000000", +12006 => x"00000000", +12007 => x"00000000", +12008 => x"00000000", +12009 => x"00000000", +12010 => x"00000000", +12011 => x"00000000", +12012 => x"00000000", +12013 => x"00000000", +12014 => x"00000000", +12015 => x"00000000", +12016 => x"00000000", +12017 => x"00000000", +12018 => x"00000000", +12019 => x"00000000", +12020 => x"00000000", +12021 => x"00000000", +12022 => x"00000000", +12023 => x"00000000", +12024 => x"00000000", +12025 => x"00000000", +12026 => x"00000000", +12027 => x"00000000", +12028 => x"00000000", +12029 => x"00000000", +12030 => x"00000000", +12031 => x"00000000", +12032 => x"00000000", +12033 => x"00000000", +12034 => x"00000000", +12035 => x"00000000", +12036 => x"00000000", +12037 => x"00000000", +12038 => x"00000000", +12039 => x"00000000", +12040 => x"00000000", +12041 => x"00000000", +12042 => x"00000000", +12043 => x"00000000", +12044 => x"00000000", +12045 => x"00000000", +12046 => x"00000000", +12047 => x"00000000", +12048 => x"00000000", +12049 => x"00000000", +12050 => x"00000000", +12051 => x"00000000", +12052 => x"00000000", +12053 => x"00000000", +12054 => x"00000000", +12055 => x"00000000", +12056 => x"00000000", +12057 => x"00000000", +12058 => x"00000000", +12059 => x"00000000", +12060 => x"00000000", +12061 => x"00000000", +12062 => x"00000000", +12063 => x"00000000", +12064 => x"00000000", +12065 => x"00000000", +12066 => x"00000000", +12067 => x"00000000", +12068 => x"00000000", +12069 => x"00000000", +12070 => x"00000000", +12071 => x"00000000", +12072 => x"00000000", +12073 => x"00000000", +12074 => x"00000000", +12075 => x"00000000", +12076 => x"00000000", +12077 => x"00000000", +12078 => x"00000000", +12079 => x"00000000", +12080 => x"00000000", +12081 => x"00000000", +12082 => x"00000000", +12083 => x"00000000", +12084 => x"00000000", +12085 => x"00000000", +12086 => x"00000000", +12087 => x"00000000", +12088 => x"00000000", +12089 => x"00000000", +12090 => x"00000000", +12091 => x"00000000", +12092 => x"00000000", +12093 => x"00000000", +12094 => x"00000000", +12095 => x"00000000", +12096 => x"00000000", +12097 => x"00000000", +12098 => x"00000000", +12099 => x"00000000", +12100 => x"00000000", +12101 => x"00000000", +12102 => x"00000000", +12103 => x"00000000", +12104 => x"00000000", +12105 => x"00000000", +12106 => x"00000000", +12107 => x"00000000", +12108 => x"00000000", +12109 => x"00000000", +12110 => x"00000000", +12111 => x"00000000", +12112 => x"00000000", +12113 => x"00000000", +12114 => x"00000000", +12115 => x"00000000", +12116 => x"00000000", +12117 => x"00000000", +12118 => x"00000000", +12119 => x"00000000", +12120 => x"00000000", +12121 => x"00000000", +12122 => x"00000000", +12123 => x"00000000", +12124 => x"00000000", +12125 => x"00000000", +12126 => x"00000000", +12127 => x"00000000", +12128 => x"00000000", +12129 => x"00000000", +12130 => x"00000000", +12131 => x"00000000", +12132 => x"00000000", +12133 => x"00000000", +12134 => x"00000000", +12135 => x"00000000", +12136 => x"00000000", +12137 => x"00000000", +12138 => x"00000000", +12139 => x"00000000", +12140 => x"00000000", +12141 => x"00000000", +12142 => x"00000000", +12143 => x"00000000", +12144 => x"00000000", +12145 => x"00000000", +12146 => x"00000000", +12147 => x"00000000", +12148 => x"00000000", +12149 => x"00000000", +12150 => x"00000000", +12151 => x"00000000", +12152 => x"00000000", +12153 => x"00000000", +12154 => x"00000000", +12155 => x"43000000", +12156 => x"00000000", +12157 => x"00000000", +12158 => x"00000000", +12159 => x"00000000", +12160 => x"00000000", +12161 => x"00000001", +12162 => x"0000b8cc", +12163 => x"00000000", +12164 => x"00000000", +12165 => x"00000000", +12166 => x"00000000", +12167 => x"00000000", +12168 => x"00000000", +12169 => x"00000000", +12170 => x"00000000", +12171 => x"00000000", +12172 => x"00000000", +12173 => x"00000000", +12174 => x"00000000", +12175 => x"ffffffff", +12176 => x"00000000", +12177 => x"00020000", +12178 => x"00000000", +12179 => x"00000000", +12180 => x"0000be48", +12181 => x"0000be48", +12182 => x"0000be50", +12183 => x"0000be50", +12184 => x"0000be58", +12185 => x"0000be58", +12186 => x"0000be60", +12187 => x"0000be60", +12188 => x"0000be68", +12189 => x"0000be68", +12190 => x"0000be70", +12191 => x"0000be70", +12192 => x"0000be78", +12193 => x"0000be78", +12194 => x"0000be80", +12195 => x"0000be80", +12196 => x"0000be88", +12197 => x"0000be88", +12198 => x"0000be90", +12199 => x"0000be90", +12200 => x"0000be98", +12201 => x"0000be98", +12202 => x"0000bea0", +12203 => x"0000bea0", +12204 => x"0000bea8", +12205 => x"0000bea8", +12206 => x"0000beb0", +12207 => x"0000beb0", +12208 => x"0000beb8", +12209 => x"0000beb8", +12210 => x"0000bec0", +12211 => x"0000bec0", +12212 => x"0000bec8", +12213 => x"0000bec8", +12214 => x"0000bed0", +12215 => x"0000bed0", +12216 => x"0000bed8", +12217 => x"0000bed8", +12218 => x"0000bee0", +12219 => x"0000bee0", +12220 => x"0000bee8", +12221 => x"0000bee8", +12222 => x"0000bef0", +12223 => x"0000bef0", +12224 => x"0000bef8", +12225 => x"0000bef8", +12226 => x"0000bf00", +12227 => x"0000bf00", +12228 => x"0000bf08", +12229 => x"0000bf08", +12230 => x"0000bf10", +12231 => x"0000bf10", +12232 => x"0000bf18", +12233 => x"0000bf18", +12234 => x"0000bf20", +12235 => x"0000bf20", +12236 => x"0000bf28", +12237 => x"0000bf28", +12238 => x"0000bf30", +12239 => x"0000bf30", +12240 => x"0000bf38", +12241 => x"0000bf38", +12242 => x"0000bf40", +12243 => x"0000bf40", +12244 => x"0000bf48", +12245 => x"0000bf48", +12246 => x"0000bf50", +12247 => x"0000bf50", +12248 => x"0000bf58", +12249 => x"0000bf58", +12250 => x"0000bf60", +12251 => x"0000bf60", +12252 => x"0000bf68", +12253 => x"0000bf68", +12254 => x"0000bf70", +12255 => x"0000bf70", +12256 => x"0000bf78", +12257 => x"0000bf78", +12258 => x"0000bf80", +12259 => x"0000bf80", +12260 => x"0000bf88", +12261 => x"0000bf88", +12262 => x"0000bf90", +12263 => x"0000bf90", +12264 => x"0000bf98", +12265 => x"0000bf98", +12266 => x"0000bfa0", +12267 => x"0000bfa0", +12268 => x"0000bfa8", +12269 => x"0000bfa8", +12270 => x"0000bfb0", +12271 => x"0000bfb0", +12272 => x"0000bfb8", +12273 => x"0000bfb8", +12274 => x"0000bfc0", +12275 => x"0000bfc0", +12276 => x"0000bfc8", +12277 => x"0000bfc8", +12278 => x"0000bfd0", +12279 => x"0000bfd0", +12280 => x"0000bfd8", +12281 => x"0000bfd8", +12282 => x"0000bfe0", +12283 => x"0000bfe0", +12284 => x"0000bfe8", +12285 => x"0000bfe8", +12286 => x"0000bff0", +12287 => x"0000bff0", +12288 => x"0000bff8", +12289 => x"0000bff8", +12290 => x"0000c000", +12291 => x"0000c000", +12292 => x"0000c008", +12293 => x"0000c008", +12294 => x"0000c010", +12295 => x"0000c010", +12296 => x"0000c018", +12297 => x"0000c018", +12298 => x"0000c020", +12299 => x"0000c020", +12300 => x"0000c028", +12301 => x"0000c028", +12302 => x"0000c030", +12303 => x"0000c030", +12304 => x"0000c038", +12305 => x"0000c038", +12306 => x"0000c040", +12307 => x"0000c040", +12308 => x"0000c048", +12309 => x"0000c048", +12310 => x"0000c050", +12311 => x"0000c050", +12312 => x"0000c058", +12313 => x"0000c058", +12314 => x"0000c060", +12315 => x"0000c060", +12316 => x"0000c068", +12317 => x"0000c068", +12318 => x"0000c070", +12319 => x"0000c070", +12320 => x"0000c078", +12321 => x"0000c078", +12322 => x"0000c080", +12323 => x"0000c080", +12324 => x"0000c088", +12325 => x"0000c088", +12326 => x"0000c090", +12327 => x"0000c090", +12328 => x"0000c098", +12329 => x"0000c098", +12330 => x"0000c0a0", +12331 => x"0000c0a0", +12332 => x"0000c0a8", +12333 => x"0000c0a8", +12334 => x"0000c0b0", +12335 => x"0000c0b0", +12336 => x"0000c0b8", +12337 => x"0000c0b8", +12338 => x"0000c0c0", +12339 => x"0000c0c0", +12340 => x"0000c0c8", +12341 => x"0000c0c8", +12342 => x"0000c0d0", +12343 => x"0000c0d0", +12344 => x"0000c0d8", +12345 => x"0000c0d8", +12346 => x"0000c0e0", +12347 => x"0000c0e0", +12348 => x"0000c0e8", +12349 => x"0000c0e8", +12350 => x"0000c0f0", +12351 => x"0000c0f0", +12352 => x"0000c0f8", +12353 => x"0000c0f8", +12354 => x"0000c100", +12355 => x"0000c100", +12356 => x"0000c108", +12357 => x"0000c108", +12358 => x"0000c110", +12359 => x"0000c110", +12360 => x"0000c118", +12361 => x"0000c118", +12362 => x"0000c120", +12363 => x"0000c120", +12364 => x"0000c128", +12365 => x"0000c128", +12366 => x"0000c130", +12367 => x"0000c130", +12368 => x"0000c138", +12369 => x"0000c138", +12370 => x"0000c140", +12371 => x"0000c140", +12372 => x"0000c148", +12373 => x"0000c148", +12374 => x"0000c150", +12375 => x"0000c150", +12376 => x"0000c158", +12377 => x"0000c158", +12378 => x"0000c160", +12379 => x"0000c160", +12380 => x"0000c168", +12381 => x"0000c168", +12382 => x"0000c170", +12383 => x"0000c170", +12384 => x"0000c178", +12385 => x"0000c178", +12386 => x"0000c180", +12387 => x"0000c180", +12388 => x"0000c188", +12389 => x"0000c188", +12390 => x"0000c190", +12391 => x"0000c190", +12392 => x"0000c198", +12393 => x"0000c198", +12394 => x"0000c1a0", +12395 => x"0000c1a0", +12396 => x"0000c1a8", +12397 => x"0000c1a8", +12398 => x"0000c1b0", +12399 => x"0000c1b0", +12400 => x"0000c1b8", +12401 => x"0000c1b8", +12402 => x"0000c1c0", +12403 => x"0000c1c0", +12404 => x"0000c1c8", +12405 => x"0000c1c8", +12406 => x"0000c1d0", +12407 => x"0000c1d0", +12408 => x"0000c1d8", +12409 => x"0000c1d8", +12410 => x"0000c1e0", +12411 => x"0000c1e0", +12412 => x"0000c1e8", +12413 => x"0000c1e8", +12414 => x"0000c1f0", +12415 => x"0000c1f0", +12416 => x"0000c1f8", +12417 => x"0000c1f8", +12418 => x"0000c200", +12419 => x"0000c200", +12420 => x"0000c208", +12421 => x"0000c208", +12422 => x"0000c210", +12423 => x"0000c210", +12424 => x"0000c218", +12425 => x"0000c218", +12426 => x"0000c220", +12427 => x"0000c220", +12428 => x"0000c228", +12429 => x"0000c228", +12430 => x"0000c230", +12431 => x"0000c230", +12432 => x"0000c238", +12433 => x"0000c238", +12434 => x"0000c240", +12435 => x"0000c240", +12436 => x"0000ba2c", +12437 => x"ffffffff", +12438 => x"00000000", +12439 => x"ffffffff", +12440 => x"00000000", diff --git a/zpu/sw/helloworld/hello.c b/zpu/sw/helloworld/hello.c new file mode 100644 index 0000000..e9cc61e --- /dev/null +++ b/zpu/sw/helloworld/hello.c @@ -0,0 +1,6 @@ +// To compile: zpu-elf-gcc test.c -o test.elf -phi +// To run: +int main(int argc, char **argv) +{ + printf("Hello world!\n"); +} diff --git a/zpu/sw/helloworld/hello.elf b/zpu/sw/helloworld/hello.elf new file mode 100644 index 0000000..be3c093 Binary files /dev/null and b/zpu/sw/helloworld/hello.elf differ diff --git a/zpu/sw/helloworld/zpusim.PNG b/zpu/sw/helloworld/zpusim.PNG new file mode 100644 index 0000000..d8fc277 Binary files /dev/null and b/zpu/sw/helloworld/zpusim.PNG differ diff --git a/zpu/sw/index.html b/zpu/sw/index.html new file mode 100644 index 0000000..6c860a9 --- /dev/null +++ b/zpu/sw/index.html @@ -0,0 +1,44 @@ + + +

Getting started - a ZPU hello world program

+The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has +some very basic peripherals defined: counter, timer interrupt and a debug output port. +

Installing

+
    +
  1. Install Cygwin. http://www.cygwin.com +
  2. Install Java +
  3. Start Cygwin bash +
  4. cd zpu/sw +
  5. unzip tools/zputoolchain.zip +
  6. zpu/sw/install/bin now has the .exe files for the GCC toolchain & GDB +
  7. You may want to add install/bin from zputoolchain.zip to PATH.
    +export PATH=$PATH:<unzipdir>/install/bin +
+

Hello world example

+The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. +

+ +cd zpu/sw/helloworld
+../install/bin/zpu-elf-gcc -phi hello.c -o hello.elf
+
+

Running the hello world example in GDB

+
    +
  1. cd zpu/sw/helloworld +
  2. Launch the simulator from a seperate bash shell:

    +java -classpath ../simulator/zpusim.jar -Xmx512m com.zylin.zpu.simulator.Phi 4444 +

    + +

  3. Launch GDB:

    +../install/bin/zpu-elf-gdb hello.elf +

  4. Connect to target, load and run application:

    + +(gdb) target remote localhost:4444
    +(gdb) load
    +(gdb) continue
    +
    +

    + + + + + diff --git a/zpu/sw/simulator/.classpath b/zpu/sw/simulator/.classpath new file mode 100644 index 0000000..617be7e --- /dev/null +++ b/zpu/sw/simulator/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/zpu/sw/simulator/.project b/zpu/sw/simulator/.project new file mode 100644 index 0000000..9cd2fd7 --- /dev/null +++ b/zpu/sw/simulator/.project @@ -0,0 +1,17 @@ + + + simulator + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs b/zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..6a131a7 --- /dev/null +++ b/zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,66 @@ +#Sat Aug 04 19:47:23 CEST 2007 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=ignore +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/zpu/sw/simulator/ChangeLog b/zpu/sw/simulator/ChangeLog new file mode 100644 index 0000000..c645841 --- /dev/null +++ b/zpu/sw/simulator/ChangeLog @@ -0,0 +1,2 @@ +2007-08-04 Øyvind Harboe + * First version after open sourcing ZPU diff --git a/zpu/sw/simulator/build.xml b/zpu/sw/simulator/build.xml new file mode 100644 index 0000000..a5cc8a3 --- /dev/null +++ b/zpu/sw/simulator/build.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java new file mode 100644 index 0000000..8d8667c --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java @@ -0,0 +1,109 @@ + +package com.zylin.zpu.simulator; + +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.MemoryAccessException; + +public class Abel extends Simulator +{ + + protected int getIO() + { + return 0x8000; + } + + + + protected int ioRead(int addr) throws CPUException + { + switch (addr) + { + case 0xc000: + return syscall.readUART(); + + /* FIFO empty? bit 0, FIFO full bit 1(never the case) */ + case 0xc004: + return syscall.readFIFO(); + + case 0x9000: + case 0x9004: + case 0x9008: + case 0x900c: + + case 0x9010: + case 0x9014: + case 0x9018: + case 0x901c: + return readSampledTimer(addr, 0x9000); + + case 0x8800: + return readMHz(); + + default: + throw new MemoryAccessException(); + } + } + + /* + ; 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 Write: 8 LED's + */ + + /* + 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) + */ + + protected void ioWrite(int addr, int val) throws MemoryAccessException + { + switch (addr) + { + case 0x9000: + writeTimerSampleReg(val); + case 0xc000: + syscall.writeUART(val); + break; + default: + throw new MemoryAccessException(); + } + } + + Abel() throws CPUException + { + } + + protected boolean emulateConfig() + { + return true; + } + + protected int getStartStack() + { + return getRAMSIZE()-8; + } + + protected int getRAMSIZE() + { + return 32768; + } + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java b/zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java new file mode 100644 index 0000000..6ccca24 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java @@ -0,0 +1,285 @@ + +package com.zylin.zpu.simulator; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.LineNumberReader; + +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.GDBServerException; +import com.zylin.zpu.simulator.exceptions.TraceException; + +public class FileTracer implements Tracer +{ + private LineNumberReader file; + private boolean trigger; + private boolean resync; + private Simulator simulator; + private String line; + private boolean ignore; + + static class Trace + { + int pc; + int opcode; + int sp; + int stackA; + int stackB; + int intSp; + long cycle; + public boolean undefinedStackA; + public boolean undefinedStackB; + public boolean undefinedIntSp; + public void print() + { + System.err.println(Integer.toHexString(pc)+ " " + + Integer.toHexString(opcode) + " " + + Integer.toHexString(sp) + " " + + Integer.toHexString(stackA) + " " + + Integer.toHexString(stackB) + " " + + intSp + " " + + cycle); + + } + }; + private Trace[] trace= new Trace[100]; + private int current; + private String fileName; + private boolean metEnd; + + + public FileTracer(Simulator sim, String string) + { + simulator=sim; + fileName=string; + + resync=true; + + + for (int i=0; i=1) + { + portNumber=Integer.parseInt(args[0]); + } + } + + private void moreParse() + { + if (args.length>=2) + { + simulator.setTraceFile(args[1]); + } + } + + void run(String[] args) + { + this.args=args; + parseArgs(); + try + { + channel = ServerSocketChannel.open(); + try + { + System.out.println("Listening on port " + portNumber); + channel.socket().bind(new InetSocketAddress(portNumber)); + for (;;) + { + try + { + simulator=simFactory.create(); + simulator.suspend(); + moreParse(); + run(); + } catch (CPUException e) + { + e.printStackTrace(); + } + } + } finally + { + channel.close(); + } + } catch (IOException e1) + { + e1.printStackTrace(); + } + + } + + private void run() throws CPUException + { + final GDBServer gdbServer=new GDBServer(simulator, this); + simulator.setSyscall(gdbServer); + Thread thread = new Thread(new Runnable() + { + public void run() + { + try + { + gdbServer.gdbServer(); + } + catch (Throwable e) + { + e.printStackTrace(); + } + simulator.shutdown(); + } + }); + thread.start(); + try + { + simulator.run(); + } + finally + { + + try + { + thread.join(); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + } +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java b/zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java new file mode 100644 index 0000000..4db85d7 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java @@ -0,0 +1,8 @@ +package com.zylin.zpu.simulator; + +public interface SimFactory +{ + + Simulator create(); + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java new file mode 100644 index 0000000..c1b86d4 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java @@ -0,0 +1,2063 @@ +package com.zylin.zpu.simulator; + +import java.io.ByteArrayOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; + +import com.zylin.zpu.simulator.FileTracer.Trace; +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.DebuggerBreakpointException; +import com.zylin.zpu.simulator.exceptions.EndSessionException; +import com.zylin.zpu.simulator.exceptions.GDBServerException; +import com.zylin.zpu.simulator.exceptions.HardwareWatchPointException; +import com.zylin.zpu.simulator.exceptions.IllegalInstructionException; +import com.zylin.zpu.simulator.exceptions.InterruptException; +import com.zylin.zpu.simulator.exceptions.MemoryAccessException; + +public class Simulator implements ZPU, Machine, Sim +{ + + int minStack; + + /** + * the feeble version of the CPU, e.g. only implements + * 11 instructions. + * + * For debugging purposes it is useful to enable/disable + * each instruction + */ + boolean feeble[]=new boolean[256]; + + private long opcodeHistogram[]=new long[256]; + private long opcodeHistogramCycles[]=new long[256]; + private long opcodePairHistogram[]=new long[256*256]; + private long opcodePairHistogramCycles[]=new long[256*256]; + + /** weee! constants are 32 bit by default, so we need to assign a 64 bit + * integer in this matter. + */ + private static final long INTMASK = Long.parseLong("ffffffff", 16); + + final static int PUSHPC=59; + final static int OR=7; + final static int NOT=9; + final static int LOAD=8; + final static int STORE=12; + final static int POPPC=4; + final static int FLIP=10; + + final static int ADD=5; + final static int PUSHSP=2; + final static int POPSP=13; + final static int NOP=11; + final static int AND=6; + final static int ADDSP=16; + + final static int EMULATE=32; + final static int LOADH=34; + final static int STOREH=35; + final static int LESSTHAN=36; + final static int LESSTHANOREQUAL=37; + final static int ULESSTHAN=38; + final static int ULESSTHANOREQUAL=39; + final static int SWAP=40; + final static int MULT=41; + final static int LSHIFTRIGHT=42; + final static int ASHIFTLEFT=43; + final static int ASHIFTRIGHT=44; + final static int CALL=45; + final static int EQ=46; + final static int NEQ=47; + final static int NEG=48; + final static int SUB=49; + final static int XOR=50; + final static int LOADB=51; + final static int STOREB=52; + final static int DIV=53; + final static int MOD=54; + final static int EQBRANCH=55; + final static int NEQBRANCH=56; + final static int POPPCREL=57; + final static int CONFIG=58; + final static int SYSCALL=60; + final static int PUSHSPADD=61; + final static int MULT16X16=62; + final static int CALLPCREL=63; + final static int STORESP=64; + final static int LOADSP=64+32; + + int[] memory; + boolean[] validMemory; + protected long cycles; + protected int instructionCount; + private int sp; + private int pc; + protected boolean breakNext; + + /* halting synchronization object */ + protected Object halt = new Object(); + + private int IOSIZE=getIOSIZE(); + protected int getIOSIZE() + { + return 32768; + } + long prevCycles; + private static final int VECTORSIZE = 0x20; + private static final int VECTOR_RESET = 0; + private static final int VECTOR_INTERRUPT = 1; + private boolean hitVector; + private static final int VECTORBASE = 0x0; + private int nextVector; + protected long lastTimer; + protected boolean timer; + private boolean powerdown; + private boolean decodeMask; + + private static final int ZETA = 1; + + private static final int ABEL = 0; + + private int startStack; + + protected Host syscall; + + private long[] emulateOpcodeHistogram= new long[256]; + + private long[] emulateOpcodeHistogramCycles=new long[256]; + + private long emulateCycles;; + + public Simulator() throws CPUException + { + } + + + public void run() throws CPUException + { + syscall.running(); + + try + { + + instructionLoop(); + + + } catch (EndSessionException e) + { + /* done */ + } finally + { + } + dumpInfo(); + + System.err.println("Stack usage: " + (startStack-minStack)); + } + + private void dumpInfo() + { + dumpOpcodeHistogram(); + + //printMemoryHistorgram(); + } + + + private void dumpOpcodeHistogram() + { + System.out.println("Opcode histogram"); + dumpHistogram(opcodeHistogram, opcodeHistogramCycles); + System.out.println("Emulate histogram"); + dumpHistogram(emulateOpcodeHistogram, emulateOpcodeHistogramCycles); + System.out.println("Pair histogram"); + dumpHistogram(opcodePairHistogram, opcodePairHistogramCycles); + + + dumpGmon(); + + System.out.println("Grouping of LOADSP/STORESP/IM"); + printRange(64, 96); + printRange(96, 128); + printRange(128, 256); +// printRange(64, 65); +// printRange(65, 66); +// printRange(66, 64+32); +// printRange(96, 97); +// printRange(97, 98); +// printRange(98, 96+32); +// printRange(128, 129); +// printRange(129, 130); +// printRange(130, 131); +// printRange(131, 132); +// printRange(132, 133); +// printRange(252, 253); +// printRange(253, 254); +// printRange(254, 255); +// printRange(255, 256); + } + + + +// #define GMON_MAGIC "gmon" /* magic cookie */ +// #define GMON_VERSION 1 /* version number */ +// +// /* +// * Raw header as it appears on file (without padding): +// */ +// struct gmon_hdr +// { +// char cookie[4]; +// char version[4]; // a cyg_uint32, target-side endianness +// char spare[3 * 4]; +// }; +// +// /* types of records in this file: */ +// typedef enum +// { +// GMON_TAG_TIME_HIST = 0, GMON_TAG_CG_ARC = 1, GMON_TAG_BB_COUNT = 2 +// } +// GMON_Record_Tag; +// +// /* The histogram tag is followed by this header, and then an array of */ +// /* cyg_uint16's for the actual counts. */ +// +// struct gmon_hist_hdr +// { +// /* host-side gprof adapts to sizeof(void*) and endianness. */ +// /* It is assumed that the compiler does not insert padding around the */ +// /* cyg_uint32's or the char arrays. */ +// void* low_pc; /* base pc address of sample buffer */ +// void* high_pc; /* max pc address of sampled buffer */ +// cyg_uint32 hist_size; /* size of sample buffer */ +// cyg_uint32 prof_rate; /* profiling clock rate */ +// char dimen[15]; /* phys. dim., usually "seconds" */ +// char dimen_abbrev; /* usually 's' for "seconds" */ +// }; +// +// /* An arc tag is followed by a single arc record. self_pc corresponds to */ +// /* the location of an mcount() call, at the start of a function. from_pc */ +// /* corresponds to the return address, i.e. where the function was called */ +// /* from. count is the number of calls. */ +// +// struct gmon_cg_arc_record +// { +// void* from_pc; /* address within caller's body */ +// void* self_pc; /* address within callee's body */ +// cyg_uint32 count; /* number of arc traversals */ +// }; +// +// /* In theory gprof can also process basic block counts, as per the */ +// /* compiler's -fprofile-arcs flag. The compiler-generated basic block */ +// /* structure should contain a table of addresses and a table of counts, */ +// /* and the compiled code updates those counts. Current versions of the */ +// /* compiler (~3.2.1) do not output the table of addresses, and without */ +// /* that table gprof cannot process the counts. Possibly gprof should read */ +// /* in the .bb and .bbg files generated for gcov processing, but that does */ +// /* not happen at the moment. */ +// /* */ +// /* So for now gmon.out does not contain basic block counts and gprof */ +// /* operations that depend on it, e.g. --annotated-source, won't work. */ + + /** + * Write gmon.out file. + **/ + private void dumpGmon() + { + try + { + ByteArrayOutputStream b=new ByteArrayOutputStream(); + + +// /* +// * Raw header as it appears on file (without padding): +// */ +// struct gmon_hdr +// { +// char cookie[4]; +// char version[4]; // a cyg_uint32, target-side endianness +// char spare[3 * 4]; +// }; +// #define GMON_MAGIC "gmon" /* magic cookie */ +// #define GMON_VERSION 1 /* version number */ + +// dump binary memory gmon.out &profile_gmon_hdr ((char*)&profile_gmon_hdr + sizeof(struct gmon_hdr)) + b.write("gmon".getBytes()); + writeLong(b, 1); // version + b.write(new byte[3*4]); // spare + +// GMON_TAG_TIME_HIST = 0, GMON_TAG_CG_ARC = 1, GMON_TAG_BB_COUNT = 2 + +// append binary memory gmon.out &profile_tags[0] &profile_tags[1] + b.write(new byte[]{0}); // GMON_TAG_TIME_HIST + + +// +// // The gprof documentation claims that this should be the size in +// // bytes. The implementation treats it as a count. +// profile_hist_hdr.hist_size = (cyg_uint32) ((text_size + bucket_size - 1) / bucket_size); +// profile_hist_hdr.low_pc = _start; +// profile_hist_hdr.high_pc = (void*)((cyg_uint8*)_end - 1); +// // The prof_rate is the frequency in hz. The resolution argument is +// // an interval in microseconds. +// profile_hist_hdr.prof_rate = 1000000 / resolution; +// +// // Now allocate a buffer for the histogram data. +// profile_hist_data = (cyg_uint16*) malloc(profile_hist_hdr.hist_size * sizeof(cyg_uint16)); +// if ((cyg_uint16*)0 == profile_hist_data) { +// diag_printf("profile_on(): cannot allocate histogram buffer - ignored\n"); +// return; +// } +// memset(profile_hist_data, 0, profile_hist_hdr.hist_size * sizeof(cyg_uint16)); + + + +// struct gmon_hist_hdr +// { +// /* host-side gprof adapts to sizeof(void*) and endianness. */ +// /* It is assumed that the compiler does not insert padding around the */ +// /* cyg_uint32's or the char arrays. */ +// void* low_pc; /* base pc address of sample buffer */ +// void* high_pc; /* max pc address of sampled buffer */ +// cyg_uint32 hist_size; /* size of sample buffer */ +// cyg_uint32 prof_rate; /* profiling clock rate */ +// char dimen[15]; /* phys. dim., usually "seconds" */ +// char dimen_abbrev; /* usually 's' for "seconds" */ +// }; + + + // maximum 65536 buckets. + int length=memory.length*4; + if (length > 60000) + { + length=60000; + } + int buckets[]=new int[length]; + for (long i=0; i65535) + { + val=65535; + } + writeShort(b, val); + } + + OutputStream o=new FileOutputStream("gmon.out"); + b.writeTo(o); + o.flush(); + o.close(); + + } catch (IOException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + + + private void writeLong(ByteArrayOutputStream b, int i) throws IOException + { + int val=i; + b.write(new byte[]{(byte)((val>>24)&0xff), + (byte)((val>>16)&0xff), + (byte)((val>>8)&0xff), + (byte)((val>>0)&0xff)}); + } + + + private void writeShort(ByteArrayOutputStream b, int i) throws IOException + { + int val=i; + b.write(new byte[]{ (byte)((val>>8)&0xff), + (byte)((val>>0)&0xff)}); + } + + + private void dumpHistogram(long[] ms, long[] ms2) + { + List l=new LinkedList(); + + totalCycles = 0; + for (int i=0; i<256; i++) + { + totalCycles+=opcodeHistogramCycles[i]; + } + for (int i=0; i>(32-7); + + if (decodeMask) + { + int a; + a=(popIntStack()<<7)|(t&0x7f); + pushIntStack(a); + } else + { + pushIntStack(t); + } + decodeMask=true; + } else + { + decodeMask = false; + if (isAddSP(instruction)) + { + int offset=instruction - ADDSP; + int valAddr=sp+offset*4; + int a = popIntStack(); + pushIntStack(cpuReadLong(valAddr) + a); + } else if ((instruction >= LOADSP) && (instruction < LOADSP + 32)) + { + int addr; + addr = getSp(); + int offset=(instruction - LOADSP)^0x10; + addr += 4 * offset; + pushIntStack(cpuReadLong(addr)); + } else if (isStoreSP(instruction)) + { + int addr; + addr = getSp(); + int offset=(instruction - STORESP)^0x10; + addr += 4 * offset; + + cpuWriteLong(addr, popIntStack()); + } else + { + int addr; + int val; + switch (instruction) + { + case 0: + throw new DebuggerBreakpointException(); + + case PUSHPC: + pushIntStack(pc); + break; + case OR: + pushIntStack(popIntStack() | popIntStack()); + break; + case NOT: + pushIntStack(popIntStack() ^ 0xffffffff); + break; + case LOAD: + pushIntStack(cpuReadLong(popIntStack())); + break; + case PUSHSPADD: + if (feeble[PUSHSPADD]) + { + emulate(); + } else + { + int a; + int b; + a=sp; + b=popIntStack()*4; + pushIntStack(a+b); + } + break; + case STORE: + addr = popIntOrExt(); + val = popIntOrExt(); + cpuWriteLong(addr, val); + break; + case POPPC: + { + // NB!!!! does NOT flush internal stack + int a; + if (intSp>0) + { + a=popIntStack(); + } else + { + a=pop(); + } + + if ((sp>=emulateSp)&&(emulateInProgress)) + { + emulateInProgress=false; + /* we returned from an emulate instruction */ + emulateOpcodeHistogram[emulateOpcode]++; + emulateOpcodeHistogramCycles[emulateOpcode]+=cycles-emulateCycles; + } + + setPc(a); + break; + } + case POPPCREL: + if (feeble[POPPCREL]) + { + emulate(); + } else + { + setPc(popIntStack()+getPc()); + } + break; + case FLIP: + pushIntStack(flip(popIntStack())); + break; + case ADD: + pushIntStack(popIntStack() + popIntStack()); + break; + case SUB: + if (feeble[SUB]) + { + emulate(); + } else + { + int a=popIntStack(); + int b=popIntStack(); + pushIntStack(b-a); + } + break; + case PUSHSP: + pushIntStack(getSp()); + break; + case POPSP: + changeSp(popIntStack()); + intSp=0; // flush internal stack + break; + case NOP: + break; + case AND: + pushIntStack(popIntStack() & popIntStack()); + break; + case XOR: + if (feeble[XOR]) + { + emulate(); + } else + { + pushIntStack(popIntStack() ^ popIntStack()); + } + break; + case LOADB: + if (feeble[LOADB]) + { + emulate(); + } else + { + pushIntStack(cpuReadByte(popIntStack())); + } + break; + case STOREB: + if (feeble[STOREB]) + { + emulate(); + } else + { + addr = popIntStack(); + val = popIntStack(); + cpuWriteByte(addr, val); + } + break; + case LOADH: + if (feeble[LOADH]) + { + emulate(); + } else + { + pushIntStack(cpuReadWord(popIntStack())); + } + break; + case STOREH: + if (feeble[STOREH]) + { + emulate(); + } else + { + addr = popIntStack(); + val = popIntStack(); + cpuWriteWord(addr, val); + } + break; + case LESSTHAN: + if (feeble[LESSTHAN]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + pushIntStack((a < b) ? 1 : 0); + } + break; + case LESSTHANOREQUAL: + if (feeble[LESSTHANOREQUAL]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + pushIntStack((a <= b) ? 1 : 0); + } + break; + case ULESSTHAN: + if (feeble[ULESSTHAN]) + { + emulate(); + } else + { + long a; + long b; + a = ((long) popIntStack()) & INTMASK; + b = ((long) popIntStack()) & INTMASK; + pushIntStack((a < b) ? 1 : 0); + } + break; + case ULESSTHANOREQUAL: + if (feeble[ULESSTHANOREQUAL]) + { + emulate(); + } else + { + long a; + long b; + a = ((long) popIntStack()) & INTMASK; + b = ((long) popIntStack()) & INTMASK; + pushIntStack((a <= b) ? 1 : 0); + } + break; + + case SWAP: +// if (feeble[SWAP]) +// { +// emulate(); +// } else + { + int swapVal=popIntStack();; + pushIntStack(((swapVal >>16)&0xffff)|(swapVal<<16)); + } + break; + case MULT16X16: +// if (feeble[SWAP]) +// { +// emulate(); +// } else + { + int a=popIntStack(); + int b=popIntStack(); + pushIntStack((a&0xffff)*(b&0xffff)); + } + break; + case EQBRANCH: + if (feeble[EQBRANCH]) + { + emulate(); + } else + { + int compare; + int target; + target = popIntStack() + pc; + compare = popIntStack(); + if (compare == 0) + { + setPc(target); + } else + { + setPc(pc + 1); + } + } + break; + + case NEQBRANCH: + if (feeble[NEQBRANCH]) + { + emulate(); + } else + { + int compare; + int target; + target = popIntStack() + pc; + compare = popIntStack(); + if (compare != 0) + { + setPc(target); + } else + { + setPc(pc + 1); + } + } + break; + + case MULT: + if (feeble[MULT]) + { + emulate(); + } else + { + pushIntStack(popIntStack() * popIntStack()); + } + break; + case DIV: + if (feeble[DIV]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + if (b == 0) + { + throw new CPUException(); + } + pushIntStack(a / b); + } + break; + case MOD: + if (feeble[MOD]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + if (b == 0) + { + throw new CPUException(); + } + pushIntStack(a % b); + } + break; + + case LSHIFTRIGHT: + if (feeble[LSHIFTRIGHT]) + { + emulate(); + } else + { + long shift; + long valX; + int t; + shift = ((long) popIntStack()) & INTMASK; + valX = ((long) popIntStack()) & INTMASK; + t = (int) (valX >> (shift & 0x3f)); + pushIntStack(t); + } + break; + + case ASHIFTLEFT: + if (feeble[ASHIFTLEFT]) + { + emulate(); + } else + { + long shift; + long valX; + shift = ((long) popIntStack()) & INTMASK; + valX = ((long) popIntStack()) & INTMASK; + int t = (int) (valX << (shift & 0x3f)); + pushIntStack(t); + } + break; + + case ASHIFTRIGHT: + if (feeble[ASHIFTRIGHT]) + { + emulate(); + } else + { + long shift; + int valX; + shift = ((long) popIntStack()) & INTMASK; + valX = popIntStack(); + int t = valX >> (shift & 0x3f); + pushIntStack(t); + } + break; + + case CALL: + if (feeble[CALL]) + { + emulate(); + } else + { + intSp=0; // flush internal stack + int address = pop(); + push(pc + 1); + setPc(address); + } + break; + case CALLPCREL: + if (feeble[CALLPCREL]) + { + emulate(); + } else + { + intSp=0; // flush internal stack + int address = pop(); + push(pc + 1); + setPc(address+pc); + } + break; + + case EQ: + if (feeble[EQ]) + { + emulate(); + } else + { + pushIntStack((popIntStack() == popIntStack()) ? 1 : 0); + } + break; + + case NEQ: + if (feeble[NEQ]) + { + emulate(); + } else + { + pushIntStack((popIntStack() != popIntStack()) ? 1 : 0); + } + break; + + case NEG: + if (feeble[NEG]) + { + emulate(); + } else + { + pushIntStack(-popIntStack()); + } + break; + + + case CONFIG: + if (emulateConfig()) + { + emulate(); + cpu=ABEL; + } else + { + cpu = popIntStack(); + } + switch (cpu) + { + case ABEL: + System.err.println("ZPU feeble instruction set"); + for (int i = 0; i < feeble.length; i++) + { + feeble[i] = true; + } + + setFeeble(); + + break; + case ZETA: + System.err.println("ZPU full instruction set"); + for (int i = 0; i < feeble.length; i++) + { + feeble[i] = false; + } + break; + default: + break; + } + break; + + case SYSCALL: + if (feeble[SYSCALL]) + { + throw new IllegalInstructionException(); + } else + { + intSp=0; // flush internal stack + syscall.syscall(this); + } + break; + + default: + throw new IllegalInstructionException(); + } + } + } + if (!touchedPc) + { + setPc(pc + 1); + } + committed(); + + // one more instruction retired + instructionCount++; + } + } + + + protected void setFeeble() + { + feeble[NEQBRANCH] = false; + feeble[EQ] = false; + feeble[LOADB] = false; + feeble[LESSTHAN] = false; + feeble[ULESSTHAN] = false; + feeble[STOREB] = false; + feeble[MULT] = false; + feeble[CALL] = true; + feeble[POPPCREL] = true; + feeble[LESSTHANOREQUAL] = true; + feeble[ULESSTHANOREQUAL] = true; + + feeble[PUSHSPADD] = false; + feeble[CALLPCREL] = false; + feeble[SUB] = false; + } + + + private int popIntOrExt() + { + int a; + if (intSp==0) + { + a=pop(); + } else + { + a=popIntStack(); + } + return a; + } + + int intSp; + + private int emulateSp; + + private int emulateOpcode; + + private boolean emulateInProgress; + + protected boolean timerPending; + + private boolean inInterrupt; + private int popIntStack() + { +// if (intSp<=0) +// throw new IllegalInstructionException(); + intSp--; + return pop(); + } + + private void pushIntStack(int x) + { +// if (intSp>=32) +// throw new IllegalInstructionException(); + push(x); + intSp++; + } + + + + private static boolean isAddSP(int instruction) + { + return (instruction >= ADDSP) && (instruction < ADDSP + 16); + } + + + private static boolean isStoreSP(int instruction) + { + return (instruction >= STORESP) && (instruction < STORESP + 32); + } + + + protected boolean emulateConfig() + { + return false; + } + + + private void checkCommit() throws CPUException + { + if (!commit) + { + decodeMask=savedDecodeMask; + pc=savedPc; + setSp(savedSp); + committed(); + } + } + + + private void committed() + { + commit=true; + tracer.commit(); + } + + + private void emulate() throws CPUException + { + // NB! Do NOT flush internal stack +// intSp=0; // flush internal stack + /* three total overhead to emulate instruction */ + if (!emulateInProgress) + { + emulateInProgress=true; + emulateSp = sp; + emulateOpcode = getOpcode(); + emulateCycles = cycles; + } + pushIntStack(pc+1); + setPc((cpuReadByte(pc)-32)*VECTORSIZE+VECTORBASE); + } + + + + private void checkInterrupts() throws InterruptException + { + if (!tracer.simInterrupt()) + { + /* These flags are set *regardless* of interrupt state. */ + while (lastTimer+timerInterval0) + { + lastTimer+=timerInterval; + } else + { + lastTimer=cycles; + } + timerPending=true; + } + } + + if (!interrupt) + return; + + /* if we are in the middle of decoding an instruction, no interrupt */ + if (decodeMask) + { + return; + } + if (tracer.simInterrupt()) + { + if (!tracer.onInterrupt()) + { + inInterrupt=false; + } + if (inInterrupt) + { + return; + } + /* Use trace information instead of trying to figure out when an interrupt happens. We don't try + * to simulate anything more complicated than timer interrupts so we don't need to worry about source. + */ + + if (tracer.onInterrupt()&&!inInterrupt) + { + if (!timer) + { + throw new IllegalInstructionException(); + } + + inInterrupt=true; + timerPending=true; + throw new InterruptException(); + } + + } else + { + if (!timerPending) + inInterrupt=false; + + if (inInterrupt) + { + return; + } + + if (timer&&timerPending) + { + inInterrupt=true; + throw new InterruptException(); + } + } + } + + + + + private void cpuWriteWord(int addr, int val) throws MemoryAccessException + { + if ((addr&0x1)!=0) + { + throw new MemoryAccessException(); + } + for (int i=0; i<2; i++) + { + writeByte(addr+i, val>>(8*(1-i))); + } + } + + /** + * @param i + * @return + * @throws MemoryAccessException + */ + private int cpuReadWord(int addr) throws MemoryAccessException + { + if ((addr&0x1)!=0) + { + throw new MemoryAccessException(); + } + return ((readByteInternal(addr+0)&0xff)<<8) | (readByteInternal(addr+1)&0xff); + } + + private void cpuWriteByte(int addr, int val) throws MemoryAccessException + { + writeByte(addr, val); + } + + + protected boolean interrupt; + protected long timerInterval; + private boolean touchedPc; + + private boolean accessWatchPoint; + + private int accessWatchPointAddress; + + private int accessWatchPointLength; + + private boolean commit; + + private boolean savedDecodeMask; + + private int savedSp; + + private int savedPc; + + private long[] profile; + + private int cpu; + + private long sampledCycle; + + private Tracer tracer=new Tracer() + { + + public void instructionEvent() + { + + } + + public void commit() + { + } + + public void setSp(int sp) + { + } + + public void dumpTraceBack() + { + + } + + public boolean onInterrupt() + { + return false; + } + + public boolean simInterrupt() + { + return false; + } + + }; + + private int instruction; + + private long totalCycles; + + + private String traceFileName; + + private int prevOpcode; + + private long prevCycles2; + + private int prevOpcode2; + + + + + /** + * checks if the CPU should halt, and halts. Fn. returns when the + * CPU has resumed execution. + * @throws EndSessionException + */ + private void checkHalt() throws EndSessionException + { + synchronized(halt) + { + if (powerdown) + { + throw new EndSessionException(); + } + + if (breakNext) + { + breakNext=false; + + halt.notify(); + try + { + syscall.halted(); + halt.wait(); + syscall.running(); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + if (powerdown) + { + throw new EndSessionException(); + } + } + } + + private int flip(int i) + { + int t=0; + for (int j=0; j<32; j++) + { + t|=((i>>j)&1)<<(31-j); + } + return t; + } + + /** the CPU is writing a long during execution */ + public void cpuWriteLong(int addr, int val) throws MemoryAccessException + { + if (accessWatchPoint&&(addr==accessWatchPointAddress)) + { + suspend(); + } + if ((addr&0x3)!=0) + { + throw new MemoryAccessException(); + } + if ((addr>=getIO())&&(addr=0)&&(addr<=memory.length*4)) + { + memory[addr/4]=val; + validMemory[addr/4]=true; + } else + { + throw new MemoryAccessException(); + } + } + + public void writeByte(int addr, int val) throws MemoryAccessException + { + if ((addr>=0)&&(addr>(((addr-base)/4)*32))&0xffffffff); + return t; + } + + + + private int cpuReadByte(int addr) throws MemoryAccessException + { + return readByteInternal(addr); + } + + + /** this is the CPU reading a long word during execution */ + public int cpuReadLong(int addr) throws CPUException + { + if (accessWatchPoint&&(addr==accessWatchPointAddress)) + { + suspend(); + } + if ((addr&0x3)!=0) + { + throw new MemoryAccessException(); + } + if ((addr>=getIO())&&(addr=0)&&(addr<=memory.length*4)) + { + return memory[addr/4]; + } else + { + throw new MemoryAccessException(); + } + } + + /** + * Causes a cycle to pass. + * @throws MemoryAccessException + */ + /** increase time and record how long we spent on this instruction */ + private void tick() throws MemoryAccessException + { + profile[pc]++; + int opcode; + opcode=readByte(pc); + opcodeHistogram[prevOpcode]++; + opcodeHistogramCycles[prevOpcode]+=cycles-prevCycles; + int opcodePair=groupOpcode(prevOpcode2)*256+groupOpcode(prevOpcode); + + opcodePairHistogram[opcodePair]++; + opcodePairHistogramCycles[opcodePair]+=cycles-prevCycles2; + + prevOpcode2=prevOpcode; + prevOpcode=opcode; + + + + prevCycles2=prevCycles; + prevCycles=cycles; + cycles++; + } + + private int groupOpcode(int instruction) + { + if (isAddSP(instruction)) + { + return ADDSP; + } else if ((instruction >= LOADSP) && (instruction < LOADSP + 32)) + { + return LOADSP; + } else if (isStoreSP(instruction)) + { + return STORESP; + } + + if ((instruction&0x80)!=0) + return 0x80; + return instruction; + } + + + public int readByte(int addr) throws MemoryAccessException + { + if ((addr>=0)&&(addr>((3-addr&0x3)*8))&0xff; + } + + private int pop() throws CPUException + { + int val; + validMemory[getSp()/4]=false; + val=cpuReadLong(getSp()); + setSp(getSp() + 4); + return val; + } + + private void push(int imm) throws CPUException + { + setSp(getSp() - 4); + cpuWriteLong(getSp(), imm); + } + + private final class OpcodeSample + { + private final int j; + + int opcode; + + long count; + + private OpcodeSample(int j, long l) + { + this.j = j; + opcode = j; + count = l; + } + } + + + + + private void initRam() + { + memory = (new int[getRAMSIZE()/4]); + validMemory = new boolean[getRAMSIZE()/4]; + for (int i=0; imemory.length*4)) + { + throw new MemoryAccessException(); + } + this.pc = pc; + touchedPc=true; + } + + public int getPc() + { + return pc; + } + + /** resume execution. This function returns when the CPU halts again. */ + public void cont() + { + for (;;) + { + synchronized(halt) + { + halt.notify(); + try + { + halt.wait(); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + if (syscall.doneContinue()) + { + break; + } + } + } + + /** resume execution. This function returns when the CPU halts again. */ + public void step() + { + synchronized(halt) + { + suspend(); + cont(); + } + } + + + + public int getReg(int regNum) throws CPUException + { + if ((regNum>=0)&&(regNum<32)) + { + return memory[regNum]; + } else if (regNum==32) + { + return getSp(); + } else if (regNum==33) + { + return pc; + } else + { + throw new RuntimeException("Illegal getReg()"); + } + } + + public int getREGNUM() + { + return 34; + } + + public long getCycleCounter() + { + return cycles; + } + + public void addWaitStates(int num) + { + } + + /** tells simulator to enter the suspended state */ + public void suspend() + { + synchronized(halt) + { + breakNext=true; + } +// tracer.dumpTraceBack(); + } + + + public long getPrevCycles() + { + return prevCycles; + } + + public long getCycles() + { + return cycles; + } + + + public void enableAccessWatchPoint(int address, int length) throws CPUException + { + if (accessWatchPoint) + { + throw new HardwareWatchPointException(); + } + accessWatchPointAddress=address; + accessWatchPointLength=length; + accessWatchPoint=true; + } + public void disableAccessWatchPoint(int address, int length) throws CPUException + { + if (!accessWatchPoint) + { + throw new HardwareWatchPointException(); + } + if ((address!=accessWatchPointAddress)||(length!=accessWatchPointLength)) + { + throw new HardwareWatchPointException(); + } + + accessWatchPoint=false; + } + + /** POPSP changes the stack pointer */ + public void changeSp(int sp) throws CPUException + { + setSp(sp); + tracer.setSp(sp); + } + + public void setSp(int sp) throws CPUException + { + if ((sp%4)!=0) + { + throw new IllegalInstructionException(); + } + + if (sppad.length()) + { + t=t.substring(0, pad.length()); + } + return pad.substring(0, pad.length()-t.length())+t; + } + + public void write(byte[] bytes) throws IOException + { + int i=0; + while (i0) + { + writeBuffer.flip(); + int len=writeBuffer.limit(); + + int j=0; + while (j0?0:1; + } catch (IOException e) + { + e.printStackTrace(); + } + return 1; + } + + public void halted() + { + // TODO Auto-generated method stub + + } + + public void running() + { + // TODO Auto-generated method stub + + } +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java b/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java new file mode 100644 index 0000000..7925bd5 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java @@ -0,0 +1,455 @@ +/* + * Created on Nov 16, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package com.zylin.zpu.simulator.gdb; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.zylin.zpu.simulator.exceptions.BadPacketException; +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.EndSessionException; +import com.zylin.zpu.simulator.exceptions.GDBServerException; +import com.zylin.zpu.simulator.exceptions.MemoryAccessException; +import com.zylin.zpu.simulator.exceptions.NoAckException; +import com.zylin.zpu.simulator.exceptions.UnknownPacketException; + + +/** all packet related operations */ +class Packet +{ + private final GDBServer server; + + Packet(GDBServer server) + { + this.server = server; + reply=new StringBuffer(); + } + + void receive() throws IOException, GDBServerException, EndSessionException + { + int t; + /* we spool until we see a $ */ + this.server.expect('$'); + + StringBuffer packet=new StringBuffer(); + + int cc=0; + for (;;) + { + int t1; + t1=this.server.read(); + t = t1; + if (t==0x7d) + { + int t2; + t2=this.server.read(); + /* the next char is escaped after a GDB specific scheme. See + * gdb/gdb/remote.c */ + t = t2; + t^=0x20; + } else + { + if (t=='#') + { + break; + } + } + + cc+=t; + + packet.append((char)t); + } + cc&=0xff; + + String checkSum; + checkSum=""+(char)this.server.read()+(char)this.server.read(); + int readCheckSum; + readCheckSum=Integer.parseInt(checkSum, 16); + if (readCheckSum!=cc) + { + // error + dumpHex(packet.toString()); + + this.server.write("-".getBytes()); + throw new BadPacketException(); + } else + { + // ack + this.server.write("+".getBytes()); + } + + cmd=packet.toString(); + this.server.print(GDBServer.PACKET, "Got " + number + ": #$" + cmd + "#" + checkSum); + origCmd=cmd; + } + + void parseAndExecute() throws IOException, EndSessionException + { + boolean silent=false; + try + { + if (checkPrefix("g")) + { + readRegisters(); + } else if (checkPrefix("?")) + { + querySignal(); + } else if (checkPrefix("s")) + { + doStep(); + } else if (checkPrefix("m")) + { + try + { + readMemory(); + } catch (CPUException e) + { + silent=true; // happens all the time while hovering over variables in the GUI + throw e; + } + } else if (checkPrefix("c")) + { + continueExecution(); + } else if (checkPrefix("M")) + { + writeMemory(); + } else if (checkPrefix("z4")) + { + disableAccessWatchPoint(); + } else if (checkPrefix("Z4")) + { + enableAccessWatchPoint(); + } else if (checkPrefix("k")) + { + /* we must send a reply, but not wait for ack before we shut down + the connection. + */ + server.alive=false; + reply("OK"); + } else + { + throw new UnknownPacketException(); + } + } catch (UnknownPacketException e) + { + this.server.print(GDBServer.UNKNOWN, "Unknown packet: " + origCmd); + // empty reply to unknown packets + } catch (CPUException e) + { + if (!silent) + { + this.server.print(GDBServer.CPUEXCEPTION, "Exception handling GDB request"); + if (GDBServer.CPUEXCEPTION) + { + e.printStackTrace(); + } + } + reply("E01"); + } catch (GDBServerException e) + { + e.printStackTrace(); + reply("E01"); + } catch (RuntimeException e) + { + e.printStackTrace(); + reply("E01"); + } + } + + private void checkEmpty() throws GDBServerException + { + if (cmd.length()>0) + { + throw new GDBServerException(); + } + } + private void dumpHex(String arrayList2) + { + for (int i=0; i4) + { + byte[] tmp=new byte[4]; + file.read(tmp); + int word=0; + for (int j=0; j<4; j++) + { + word|=((int)(tmp[j])&0xff)<<((3-j)*8); + } + String str=Integer.toHexString(word); + while (str.length()<8) + { + str="0"+str; + } + + System.out.println(str); + i++; + } + } + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java b/zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java new file mode 100644 index 0000000..4a7b233 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java @@ -0,0 +1,39 @@ + +package com.zylin.zpu.simulator.tools; + +import java.io.FileInputStream; +import java.io.IOException; + +public class MakeRam +{ + public static void main(String[] args) throws IOException + { + new MakeRam().run(args[0]); + } + + private void run(String string) throws IOException + { + FileInputStream file=new FileInputStream(string); + + int i=0; + while (file.available()>4) + { + byte[] tmp=new byte[4]; + file.read(tmp); + int word=0; + for (int j=0; j<4; j++) + { + word|=((int)(tmp[j])&0xff)<<((3-j)*8); + } + String str=Integer.toHexString(word); + while (str.length()<8) + { + str="0"+str; + } + + System.out.println("" + i + " => x\"" + str + "\","); + i++; + } + } + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java b/zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java new file mode 100644 index 0000000..0f06aec --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java @@ -0,0 +1,94 @@ +/* + * Created on Jan 18, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package com.zylin.zpu.stats; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +import com.zylin.zpu.simulator.Machine; + +public class CountSequences implements Machine +{ + + private byte[] array; + private StatKeeper statKeeper; + + public static void main(String[] args) + { + new CountSequences().run(args[0]); + } + + private void run(String string) + { + try + { + File file=new File(string); + if (file.exists()) + System.out.println("It exists!"); + FileInputStream in=new FileInputStream(file); + + try + { + array=new byte[(int) file.length()]; + + if (in.read(array)!=array.length) + throw new IOException(); + + countStats(); + + statKeeper.printStats(); + } finally + { + in.close(); + } + + } catch (FileNotFoundException e) + { + e.printStackTrace(); + } catch (IOException e) + { + e.printStackTrace(); + } + + + } + + + private void countStats() + { + statKeeper=new StatKeeper(this); + for (int i=0; i=64)&&(j<96)) +// { +// j=64; +// } else if ((j>=96)&&(j<128)) +// { +// j=96; +// } else if ((j>=128)&&(j<256)) +// { +// j=128; +// } + statKeeper.countInstruction(j); + } + + } + + public long getPrevCycles() + { + return 0; + } + + public long getCycles() + { + return 0; + } +} diff --git a/zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java b/zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java new file mode 100644 index 0000000..80be11d --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java @@ -0,0 +1,17 @@ +/* + * Created on 26.nov.2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package com.zylin.zpu.stats; +/** + * @author oyvind + * + * To change the template for this generated type comment go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +public interface DumpIt +{ + int dumpIt(int i); +} \ No newline at end of file diff --git a/zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java b/zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java new file mode 100644 index 0000000..252dd7f --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java @@ -0,0 +1,62 @@ +package com.zylin.zpu.stats; + +public class Instruction +{ + public class DumpCycles implements DumpIt + { + public int dumpIt(int i) + { + return insn[i].cycles; + } + } + + + + public Instruction[] insn=new Instruction[256]; + public int count; + public int cycles; + + public Instruction addInstruction(int i) + { + if (insn[i]==null) + { + insn[i]=new Instruction(); + } + return insn[i]; + } + + /** + * Recursive print of statistics + */ + public void printStats() + { + System.out.println("Count dump"); + DumpIt cDump = new DumpCount(); + printCount("", cDump); + } + + /** + * Recursive print of counts + * @param string + * @param dumpIt TODO + */ + private void printCount(String string, DumpIt dumpIt) + { + for (int i=0; i Date: Thu, 3 Jan 2008 09:30:16 +0000 Subject: clarify licensing a bit. --- zpu/COPYING | 11 ++++++++--- zpu/ChangeLog | 13 ++----------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/zpu/COPYING b/zpu/COPYING index 96b27d3..9475e0f 100644 --- a/zpu/COPYING +++ b/zpu/COPYING @@ -1,8 +1,7 @@ About ZPU licensing: -Licensing is not entirely fleshed out yet(there are many parts to a -soft CPU), but the license for the HDL will be BSD/eCos-like to be -friendly towards commercially oriented projects, however the +The license for HDL implementations is BSD to be +friendly towards commercial projects, however the architecture, documentation and tools will be GPL. This means that all updates to the architecture must be shared, but actual implementations(which are small and can be very project speific) can @@ -10,3 +9,9 @@ be friendly towards commercial considerations. Patches to update files w/correct licensing info will be most appreciated! + + +The ZPU and all the files are per 1/1-2008 Copyright Zylin AS, i.e. +Zylin is free to decide upon the BSD license for HDL implementation +and GPL for architecture, tools and documentation. + \ No newline at end of file diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 827ede8..a468d8a 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,11 +1,2 @@ -2007-09-11 Øyvind Harboe - * Cleaning up zpu/hdl/example. simzpu.do file now uses zpu4/src files instead - of duplicating them. Hello world simzpu.do now works out of the box. -2007-09-10 Øyvind Harboe - * Cleaning up .html files a bit. - * retired zpututorial.odt. -2007-08-04 Øyvind Harboe - * small ZPU hello world example now simulates with valid log.txt/trace.txt file. - * Until files are properly organized, ChangeLog will not be kept up to date. -2007-08-03 Øyvind Harboe - * Starting to commit files +2008-01-02 Øyvind Harboe + * Moved to www.opencores.org -- cgit v1.1 From 86579431bc123532d3225d59d7c01c4fa7115969 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 11 Feb 2008 20:47:26 +0000 Subject: * hdl/index.html. Fixed typo. Use objcopy and not objdump. --- zpu/ChangeLog | 2 ++ zpu/hdl/index.html | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index a468d8a..2921691 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,2 +1,4 @@ +2008-02-11 Øyvind Harboe + * hdl/index.html. Fixed typo. Use objcopy and not objdump. 2008-01-02 Øyvind Harboe * Moved to www.opencores.org diff --git a/zpu/hdl/index.html b/zpu/hdl/index.html index d3b4c1a..271d46a 100644 --- a/zpu/hdl/index.html +++ b/zpu/hdl/index.html @@ -15,7 +15,7 @@ Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is

    Generating VHDL BRAM initialization

    -../install/bin/zpu-elf-objdump -O binary hello.elf hello.bin
    +../install/bin/zpu-elf-objcopy -O binary hello.elf hello.bin
    java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
    -- cgit v1.1 From 4f2caa8713e198e5cc50339a6272c085ff9ad980 Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 19 Feb 2008 18:12:28 +0000 Subject: peek & poke example. --- zpu/roadshow/roadshow/loop/looptest.c | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 zpu/roadshow/roadshow/loop/looptest.c diff --git a/zpu/roadshow/roadshow/loop/looptest.c b/zpu/roadshow/roadshow/loop/looptest.c new file mode 100644 index 0000000..5ae197a --- /dev/null +++ b/zpu/roadshow/roadshow/loop/looptest.c @@ -0,0 +1,68 @@ +/* This is a peek & poke example for an FPGA. + + It should loop at a frequency of ~50 instructions. If + the ZPU(small) is running at 25MHz, then this would yield + a peek & poke every 8ms or so. + + zpu-elf-gcc -O3 -zeta looptest.c -o looptest.elf -Wl,--relax -Wl,--gc-sections */ + + +/* +0000051c
    : + 51c: ff im -1 + 51d: 3d pushspadd + 51e: 0d popsp + 51f: 80 im 0 + 520: 52 storesp 8 + +00000521 <.L2>: + 521: 81 im 1 + 522: 12 addsp 8 + 523: 82 im 2 + 524: 80 im 0 + 525: 80 im 0 + 526: 08 load + 527: 71 loadsp 4 + 528: 82 im 2 + 529: 80 im 0 + 52a: 90 im 16 + 52b: 0c store + 52c: 81 im 1 + 52d: 12 addsp 8 + 52e: 82 im 2 + 52f: 80 im 0 + 530: 80 im 0 + 531: 08 load + 532: 71 loadsp 4 + 533: 82 im 2 + 534: 80 im 0 + 535: 90 im 16 + 536: 0c store + 537: 52 storesp 8 + 538: 52 storesp 8 + 539: 52 storesp 8 + 53a: 52 storesp 8 + 53b: e5 im -27 + 53c: 39 poppcrel +*/ +#define FPGA_ADDR 0x8000 + +typedef volatile unsigned int* pAddr; +#define FPGA_READ *(pAddr) (FPGA_ADDR) + +#define FPGA_WRITE *(pAddr) (FPGA_ADDR + 16) + + +int main(int argc, char **argv) +{ +int i; +int j = 0; + + while (1) + + { + j++; + i = FPGA_READ; + FPGA_WRITE = j; + } +} -- cgit v1.1 From 4a419c5aa7ef974279042ebfba2aed2adab197db Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 21 Feb 2008 18:59:45 +0000 Subject: * zpu/zpu/hdl/index.html. Sharpened instructions and shows two working examples. Small & medium ZPU. * got zpu4/src/simzpu_medium.do working again. --- zpu/ChangeLog | 4 + zpu/hdl/example/.cvsignore | 2 + zpu/hdl/example/helloworld.vhd | 15002 ++++++-------------------------- zpu/hdl/example/log.txt | 22 +- zpu/hdl/example/simzpu.do | 29 - zpu/hdl/example/simzpu_small.do | 29 + zpu/hdl/index.html | 7 +- zpu/hdl/zpu4/src/dram_hello.vhd | 5167 ++++++----- zpu/hdl/zpu4/src/fasthello.do | 19 + zpu/hdl/zpu4/src/io.vhd | 23 +- zpu/hdl/zpu4/src/log.txt | 139 +- zpu/hdl/zpu4/src/sim_fpga_top.vhd | 11 +- zpu/hdl/zpu4/src/simzpu.do | 23 - zpu/hdl/zpu4/src/simzpu_intstack.do | 23 - zpu/hdl/zpu4/src/simzpu_medium.do | 28 + zpu/hdl/zpu4/src/zpu_config_trace.vhd | 6 +- zpu/hdl/zpu4/src/zpu_core.vhd | 4 +- zpu/hdl/zpu4/src/zpu_core_small.vhd | 13 + zpu/hdl/zpu4/src/zpuio.vhd | 32 +- zpu/hdl/zpu4/src/zpupkg.vhd | 11 - zpu/hdl/zpu4/test/dmips/build.sh | 1 + zpu/hdl/zpu4/test/dmips/dmips.ram | 5969 ++++++------- zpu/hdl/zpu4/test/hello/build.sh | 3 +- zpu/hdl/zpu4/test/hello/hello.bin | Bin 12664 -> 12224 bytes zpu/hdl/zpu4/test/hello/hello.c | 8 +- zpu/hdl/zpu4/test/hello/hello.elf | Bin 150455 -> 150384 bytes zpu/hdl/zpu4/test/hello/hello.ram | 5150 ++++++----- 27 files changed, 11100 insertions(+), 20625 deletions(-) create mode 100644 zpu/hdl/example/.cvsignore delete mode 100644 zpu/hdl/example/simzpu.do create mode 100644 zpu/hdl/example/simzpu_small.do create mode 100644 zpu/hdl/zpu4/src/fasthello.do delete mode 100644 zpu/hdl/zpu4/src/simzpu.do delete mode 100644 zpu/hdl/zpu4/src/simzpu_intstack.do create mode 100644 zpu/hdl/zpu4/src/simzpu_medium.do diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 2921691..9a6495b 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,7 @@ +2008-02-21 Øyvind Harboe + * zpu/zpu/hdl/index.html. Sharpened instructions and shows two working + examples. Small & medium ZPU. + * got zpu4/src/simzpu_medium.do working again. 2008-02-11 Øyvind Harboe * hdl/index.html. Fixed typo. Use objcopy and not objdump. 2008-01-02 Øyvind Harboe diff --git a/zpu/hdl/example/.cvsignore b/zpu/hdl/example/.cvsignore new file mode 100644 index 0000000..ab4e67c --- /dev/null +++ b/zpu/hdl/example/.cvsignore @@ -0,0 +1,2 @@ +work +vsim.wlf diff --git a/zpu/hdl/example/helloworld.vhd b/zpu/hdl/example/helloworld.vhd index 9c99259..2e5ce4e 100644 --- a/zpu/hdl/example/helloworld.vhd +++ b/zpu/hdl/example/helloworld.vhd @@ -28,15 +28,15 @@ shared variable ram : ram_type := ( 0 => x"0b0b0b0b", 1 => x"82700b0b", -2 => x"82f4e00c", -3 => x"3a0b0b81", -4 => x"e48c0400", +2 => x"80cfd80c", +3 => x"3a0b0b80", +4 => x"c6d00400", 5 => x"00000000", 6 => x"00000000", 7 => x"00000000", 8 => x"80088408", 9 => x"88080b0b", -10 => x"81e4fd2d", +10 => x"80c7972d", 11 => x"880c840c", 12 => x"800c0400", 13 => x"00000000", @@ -99,7 +99,7 @@ shared variable ram : ram_type := 70 => x"00000000", 71 => x"00000000", 72 => x"0b0b0b88", -73 => x"c9040000", +73 => x"c4040000", 74 => x"00000000", 75 => x"00000000", 76 => x"00000000", @@ -116,7 +116,7 @@ shared variable ram : ram_type := 87 => x"00000000", 88 => x"72729f06", 89 => x"0981050b", -90 => x"0b0b88ac", +90 => x"0b0b88a7", 91 => x"05040000", 92 => x"00000000", 93 => x"00000000", @@ -187,25 +187,25 @@ shared variable ram : ram_type := 158 => x"00000000", 159 => x"00000000", 160 => x"71fc0608", -161 => x"0b0b82f4", -162 => x"cc738306", +161 => x"0b0b80cf", +162 => x"c4738306", 163 => x"10100508", 164 => x"060b0b0b", -165 => x"88af0400", +165 => x"88aa0400", 166 => x"00000000", 167 => x"00000000", 168 => x"80088408", 169 => x"88087575", -170 => x"0b0b0b8e", -171 => x"c42d5050", +170 => x"0b0b0b8b", +171 => x"9f2d5050", 172 => x"80085688", 173 => x"0c840c80", 174 => x"0c510400", 175 => x"00000000", 176 => x"80088408", 177 => x"88087575", -178 => x"0b0b0b90", -179 => x"8d2d5050", +178 => x"0b0b0b8b", +179 => x"e32d5050", 180 => x"80085688", 181 => x"0c840c80", 182 => x"0c510400", @@ -235,7 +235,7 @@ shared variable ram : ram_type := 206 => x"00000000", 207 => x"00000000", 208 => x"810b0b0b", -209 => x"82f4dc0c", +209 => x"80cfd40c", 210 => x"51040000", 211 => x"00000000", 212 => x"00000000", @@ -282,12191 +282,2805 @@ shared variable ram : ram_type := 253 => x"00000000", 254 => x"00000000", 255 => x"00000000", -256 => x"0b0b0b83", -257 => x"e93f0b0b", -258 => x"82e4cc3f", -259 => x"04101010", +256 => x"82c53f80", +257 => x"c6d93f04", +258 => x"10101010", +259 => x"10101010", 260 => x"10101010", 261 => x"10101010", 262 => x"10101010", 263 => x"10101010", 264 => x"10101010", -265 => x"10101010", -266 => x"10101010", -267 => x"53510473", -268 => x"81ff0673", -269 => x"83060981", -270 => x"05830510", -271 => x"10102b07", -272 => x"72fc060c", -273 => x"5151043c", -274 => x"04727280", -275 => x"728106ff", -276 => x"05097206", -277 => x"05711052", -278 => x"720a100a", -279 => x"5372ed38", -280 => x"51515351", -281 => x"04fe3d0d", -282 => x"0b0b8384", -283 => x"e8085384", -284 => x"13087088", -285 => x"2a708106", -286 => x"51525270", -287 => x"802e0b0b", -288 => x"0b0bec38", -289 => x"7181ff06", -290 => x"800c843d", -291 => x"0d04ff3d", -292 => x"0d0b0b83", -293 => x"84e80852", -294 => x"71087088", -295 => x"2a813270", -296 => x"81065151", -297 => x"51700b0b", -298 => x"0b0bed38", -299 => x"73720c83", -300 => x"3d0d040b", -301 => x"0b82f4dc", -302 => x"08802e0b", -303 => x"0b0b0bae", -304 => x"380b0b82", -305 => x"f4e00882", -306 => x"2e0b0b0b", -307 => x"80c53883", -308 => x"80800b0b", -309 => x"0b8384e8", -310 => x"0c82a080", -311 => x"0b0b0b83", -312 => x"84ec0c82", -313 => x"90800b0b", -314 => x"0b8384f0", -315 => x"0c04f880", -316 => x"8080a40b", -317 => x"0b0b8384", -318 => x"e80cf880", -319 => x"8082800b", -320 => x"0b0b8384", -321 => x"ec0cf880", -322 => x"8084800b", -323 => x"0b0b8384", -324 => x"f00c0480", -325 => x"c0a8808c", -326 => x"0b0b0b83", -327 => x"84e80c80", -328 => x"c0a88094", -329 => x"0b0b0b83", -330 => x"84ec0c0b", -331 => x"0b82ed90", -332 => x"0b0b0b83", -333 => x"84f00c04", -334 => x"f23d0d60", -335 => x"0b0b8384", -336 => x"ec08565d", -337 => x"82750c80", -338 => x"59805a80", -339 => x"0b8f3d5d", -340 => x"5b7a1010", -341 => x"15700871", -342 => x"08719f2c", -343 => x"7e852b58", -344 => x"55557d53", -345 => x"59570b0b", -346 => x"0b81d13f", -347 => x"7d7f7a72", -348 => x"077c7207", -349 => x"71716081", -350 => x"05415f5d", -351 => x"5b595755", -352 => x"817b270b", -353 => x"0b0b0b8f", -354 => x"38767d0c", -355 => x"77841e0c", -356 => x"7c800c90", -357 => x"3d0d040b", -358 => x"0b8384ec", -359 => x"08550b0b", -360 => x"0bffae39", -361 => x"70700b0b", -362 => x"8384f433", -363 => x"51700b0b", -364 => x"0b0bb738", -365 => x"0b0b82f4", -366 => x"e8087008", -367 => x"52527080", -368 => x"2e0b0b0b", -369 => x"0b9c3884", -370 => x"120b0b82", -371 => x"f4e80c70", -372 => x"2d0b0b82", -373 => x"f4e80870", -374 => x"08525270", -375 => x"0b0b0b0b", -376 => x"e638810b", -377 => x"0b0b8384", -378 => x"f4345050", -379 => x"0404700b", -380 => x"0b8384e4", -381 => x"08802e0b", -382 => x"0b0b0b92", -383 => x"380b0b0b", -384 => x"0b800b80", -385 => x"2e098106", -386 => x"0b0b0b0b", -387 => x"83385004", -388 => x"0b0b8384", -389 => x"e4510b0b", -390 => x"0bf3e53f", -391 => x"5004048c", -392 => x"08028c0c", -393 => x"ff3d0d0b", -394 => x"0b82ed94", -395 => x"510b0b0b", -396 => x"88ab3f71", -397 => x"800c833d", -398 => x"0d8c0c04", -399 => x"8c08028c", -400 => x"0cf53d0d", -401 => x"8c089405", -402 => x"080b0b0b", -403 => x"0ba0388c", -404 => x"088c0508", -405 => x"8c089005", -406 => x"088c0888", -407 => x"05085856", -408 => x"5473760c", -409 => x"7484170c", -410 => x"0b0b0b81", -411 => x"ca39800b", -412 => x"8c08f005", -413 => x"0c800b8c", -414 => x"08f4050c", -415 => x"8c088c05", -416 => x"088c0890", -417 => x"05085654", -418 => x"738c08f0", -419 => x"050c748c", -420 => x"08f4050c", -421 => x"8c08f805", -422 => x"8c08f005", -423 => x"56568870", -424 => x"54755376", -425 => x"52540b0b", -426 => x"0b85e03f", -427 => x"a00b8c08", -428 => x"94050831", -429 => x"8c08ec05", -430 => x"0c8c08ec", -431 => x"05088024", -432 => x"0b0b0b0b", -433 => x"a138800b", -434 => x"8c08f405", -435 => x"0c8c08ec", -436 => x"0508308c", -437 => x"08fc0508", -438 => x"712b8c08", -439 => x"f0050c54", -440 => x"0b0b0b0b", -441 => x"b9398c08", -442 => x"fc05088c", -443 => x"08ec0508", -444 => x"2a8c08e8", -445 => x"050c8c08", -446 => x"fc05088c", -447 => x"08940508", -448 => x"2b8c08f4", -449 => x"050c8c08", -450 => x"f805088c", -451 => x"08940508", -452 => x"2b708c08", -453 => x"e8050807", -454 => x"8c08f005", -455 => x"0c548c08", -456 => x"f005088c", -457 => x"08f40508", -458 => x"8c088805", -459 => x"08585654", -460 => x"73760c74", -461 => x"84170c8c", -462 => x"08880508", -463 => x"800c8d3d", -464 => x"0d8c0c04", -465 => x"8c08028c", -466 => x"0cf93d0d", -467 => x"800b8c08", -468 => x"fc050c8c", -469 => x"08880508", -470 => x"80250b0b", -471 => x"0b0baf38", -472 => x"8c088805", -473 => x"08308c08", -474 => x"88050c80", -475 => x"0b8c08f4", -476 => x"050c8c08", -477 => x"fc05080b", -478 => x"0b0b0b88", -479 => x"38810b8c", -480 => x"08f4050c", -481 => x"8c08f405", -482 => x"088c08fc", -483 => x"050c8c08", -484 => x"8c050880", -485 => x"250b0b0b", -486 => x"0baf388c", -487 => x"088c0508", -488 => x"308c088c", -489 => x"050c800b", -490 => x"8c08f005", -491 => x"0c8c08fc", -492 => x"05080b0b", -493 => x"0b0b8838", -494 => x"810b8c08", -495 => x"f0050c8c", -496 => x"08f00508", -497 => x"8c08fc05", -498 => x"0c80538c", -499 => x"088c0508", -500 => x"528c0888", -501 => x"0508510b", -502 => x"0b0b81bb", -503 => x"3f800870", -504 => x"8c08f805", -505 => x"0c548c08", -506 => x"fc050880", -507 => x"2e0b0b0b", -508 => x"0b8c388c", -509 => x"08f80508", -510 => x"308c08f8", -511 => x"050c8c08", -512 => x"f8050870", -513 => x"800c5489", -514 => x"3d0d8c0c", -515 => x"048c0802", -516 => x"8c0cfb3d", -517 => x"0d800b8c", -518 => x"08fc050c", -519 => x"8c088805", -520 => x"0880250b", -521 => x"0b0b0b93", -522 => x"388c0888", -523 => x"0508308c", -524 => x"0888050c", -525 => x"810b8c08", -526 => x"fc050c8c", -527 => x"088c0508", -528 => x"80250b0b", -529 => x"0b0b8c38", -530 => x"8c088c05", -531 => x"08308c08", -532 => x"8c050c81", -533 => x"538c088c", -534 => x"0508528c", -535 => x"08880508", -536 => x"510b0b0b", -537 => x"0bb13f80", -538 => x"08708c08", -539 => x"f8050c54", -540 => x"8c08fc05", -541 => x"08802e0b", -542 => x"0b0b0b8c", -543 => x"388c08f8", -544 => x"0508308c", -545 => x"08f8050c", -546 => x"8c08f805", -547 => x"0870800c", -548 => x"54873d0d", -549 => x"8c0c048c", -550 => x"08028c0c", -551 => x"70707070", -552 => x"810b8c08", -553 => x"fc050c80", -554 => x"0b8c08f8", -555 => x"050c8c08", -556 => x"8c05088c", -557 => x"08880508", -558 => x"270b0b0b", -559 => x"0bb8388c", -560 => x"08fc0508", -561 => x"802e0b0b", -562 => x"0b0bab38", -563 => x"800b8c08", -564 => x"8c050824", -565 => x"0b0b0b0b", -566 => x"9d388c08", -567 => x"8c050810", -568 => x"8c088c05", -569 => x"0c8c08fc", -570 => x"0508108c", -571 => x"08fc050c", -572 => x"0b0b0bff", -573 => x"b9398c08", -574 => x"fc050880", -575 => x"2e0b0b0b", -576 => x"80d0388c", -577 => x"088c0508", -578 => x"8c088805", -579 => x"08260b0b", -580 => x"0b0ba138", -581 => x"8c088805", -582 => x"088c088c", -583 => x"0508318c", -584 => x"0888050c", -585 => x"8c08f805", -586 => x"088c08fc", -587 => x"0508078c", -588 => x"08f8050c", -589 => x"8c08fc05", -590 => x"08812a8c", -591 => x"08fc050c", -592 => x"8c088c05", -593 => x"08812a8c", -594 => x"088c050c", -595 => x"0b0b0bff", -596 => x"a5398c08", -597 => x"90050880", -598 => x"2e0b0b0b", -599 => x"0b93388c", -600 => x"08880508", -601 => x"708c08f4", -602 => x"050c510b", -603 => x"0b0b0b8d", -604 => x"398c08f8", -605 => x"0508708c", -606 => x"08f4050c", -607 => x"518c08f4", -608 => x"0508800c", -609 => x"50505050", -610 => x"8c0c04fc", -611 => x"3d0d7670", -612 => x"797b5555", -613 => x"55558f72", -614 => x"270b0b0b", -615 => x"0b903872", -616 => x"75078306", -617 => x"5170802e", -618 => x"0b0b0b0b", -619 => x"af38ff12", -620 => x"5271ff2e", -621 => x"0b0b0b0b", -622 => x"9c387270", -623 => x"81055433", -624 => x"74708105", -625 => x"5634ff12", -626 => x"5271ff2e", -627 => x"0981060b", -628 => x"0b0b0be6", -629 => x"3874800c", -630 => x"863d0d04", -631 => x"74517270", -632 => x"84055408", -633 => x"71708405", -634 => x"530c7270", -635 => x"84055408", -636 => x"71708405", -637 => x"530c7270", -638 => x"84055408", -639 => x"71708405", -640 => x"530c7270", -641 => x"84055408", -642 => x"71708405", -643 => x"530cf012", -644 => x"52718f26", -645 => x"0b0b0b0b", -646 => x"c5388372", -647 => x"270b0b0b", -648 => x"0b993872", -649 => x"70840554", -650 => x"08717084", -651 => x"05530cfc", -652 => x"12527183", -653 => x"260b0b0b", -654 => x"0be93870", -655 => x"540b0b0b", -656 => x"feec39fb", -657 => x"3d0d7789", -658 => x"3d880555", -659 => x"79548811", -660 => x"0853510b", -661 => x"0b0b80e3", -662 => x"3f873d0d", -663 => x"04fc3d0d", -664 => x"873d7070", -665 => x"84055208", -666 => x"56537452", -667 => x"0b0b82f4", -668 => x"ec088811", -669 => x"0852540b", -670 => x"0b0bb4a2", -671 => x"3f863d0d", -672 => x"04707070", -673 => x"70768811", -674 => x"08545472", -675 => x"0b0b0b0b", -676 => x"8d387284", -677 => x"150c7280", -678 => x"0c505050", -679 => x"50047352", -680 => x"75510b0b", -681 => x"80fcfe3f", -682 => x"800b8815", -683 => x"0c800b84", -684 => x"150c8008", -685 => x"800c5050", -686 => x"505004fc", -687 => x"c43d0d83", -688 => x"bf3d0883", -689 => x"c13d0883", -690 => x"c33d0883", -691 => x"c53d0848", -692 => x"5e484b0b", -693 => x"0b8186f6", -694 => x"3f800808", -695 => x"4c800b83", -696 => x"bb3d0c80", -697 => x"0b83bc3d", -698 => x"0c807071", -699 => x"698c0522", -700 => x"70832a81", -701 => x"32708106", -702 => x"515d5d4c", -703 => x"4f4d786d", -704 => x"2e098106", -705 => x"0b0b0b0b", -706 => x"90386690", -707 => x"05086d2e", -708 => x"0981060b", -709 => x"0b0b0b98", -710 => x"3866510b", -711 => x"0b0bbfc8", -712 => x"3fff5980", -713 => x"080b0b0b", -714 => x"82893866", -715 => x"8c05225a", -716 => x"799a0659", -717 => x"788a2e0b", -718 => x"0b0b80ce", -719 => x"387b83a6", -720 => x"3d707183", -721 => x"b93d0c5e", -722 => x"475d800b", -723 => x"83b83d0c", -724 => x"800b83b7", -725 => x"3d0c8049", -726 => x"7c5e807d", -727 => x"337081ff", -728 => x"065b5b5b", -729 => x"787b2e0b", -730 => x"0b0b0b83", -731 => x"38815b78", -732 => x"a52e0b0b", -733 => x"0b81c438", -734 => x"7a802e0b", -735 => x"0b0b81bb", -736 => x"38811d5d", -737 => x"0b0b0b0b", -738 => x"d139668e", -739 => x"05227090", -740 => x"2b5a5b80", -741 => x"79240b0b", -742 => x"0bffa238", -743 => x"79fd0659", -744 => x"7882ba3d", -745 => x"237a0284", -746 => x"0589e205", -747 => x"23669c05", -748 => x"0882be3d", -749 => x"0c66a405", -750 => x"0882c03d", -751 => x"0cb63d70", -752 => x"82b83d0c", -753 => x"82bb3d0c", -754 => x"88800b82", -755 => x"b93d0c88", -756 => x"800b82bc", -757 => x"3d0c800b", -758 => x"82bd3d0c", -759 => x"64537b52", -760 => x"82b63d70", -761 => x"52590b0b", -762 => x"0bb1b33f", -763 => x"80085a80", -764 => x"0b800824", -765 => x"0b0b0b0b", -766 => x"95387851", -767 => x"0b0b80ec", -768 => x"bf3f8008", -769 => x"802e0b0b", -770 => x"0b0b8338", -771 => x"ff5a82b9", -772 => x"3d227086", -773 => x"2a708106", -774 => x"515a5b78", -775 => x"802e0b0b", -776 => x"0b0b8e38", -777 => x"668c0522", -778 => x"80c00759", -779 => x"78678c05", -780 => x"23795978", -781 => x"800c83be", -782 => x"3d0d047c", -783 => x"7e315b7a", -784 => x"802e0b0b", -785 => x"0b0bb138", -786 => x"7d7c0c7a", -787 => x"841d0c83", -788 => x"b73d081b", -789 => x"83b83d0c", -790 => x"881c83b7", -791 => x"3d088111", -792 => x"83b93d0c", -793 => x"8111515a", -794 => x"5c788724", -795 => x"0b0b0b80", -796 => x"cb38681b", -797 => x"7d335b49", -798 => x"7981ff06", -799 => x"5978802e", -800 => x"0b0b0bae", -801 => x"df38811d", -802 => x"5d807071", -803 => x"4a4543ff", -804 => x"416283be", -805 => x"3d347c33", -806 => x"5a7981ff", -807 => x"06811e5e", -808 => x"407fe005", -809 => x"597880d8", -810 => x"260b0b0b", -811 => x"88a83878", -812 => x"10100b0b", -813 => x"82edc405", -814 => x"59780804", -815 => x"83be3ddc", -816 => x"05526651", -817 => x"0b0b0bfb", -818 => x"b83f8008", -819 => x"0b0b0b8b", -820 => x"b3386569", -821 => x"1c7e335c", -822 => x"4a5c0b0b", -823 => x"0bff9939", -824 => x"62900743", -825 => x"62842a70", -826 => x"81065159", -827 => x"780b0b0b", -828 => x"9e873862", -829 => x"862a7081", -830 => x"06515978", -831 => x"802e0b0b", -832 => x"0b9df638", -833 => x"64658405", -834 => x"8212225d", -835 => x"4659815f", -836 => x"800b83be", -837 => x"3d346044", -838 => x"8061240b", -839 => x"0b0b0b86", -840 => x"3862feff", -841 => x"0643657b", -842 => x"30707d07", -843 => x"9f2a6630", -844 => x"7068079f", -845 => x"2a720752", -846 => x"5c515b5e", -847 => x"79802e0b", -848 => x"0b0b98fd", -849 => x"387e812e", -850 => x"0b0b0b8c", -851 => x"8438817f", -852 => x"250b0b0b", -853 => x"a0eb387e", -854 => x"822e0b0b", -855 => x"0b8cc038", -856 => x"0b0b82f0", -857 => x"a85e7d51", -858 => x"0b0b81c0", -859 => x"ae3f8008", -860 => x"5f7e427e", -861 => x"64250b0b", -862 => x"0b0b8338", -863 => x"634283bd", -864 => x"3d337081", -865 => x"ff065a5b", -866 => x"78802e0b", -867 => x"0b0b9488", -868 => x"38618105", -869 => x"42628184", -870 => x"0641600b", -871 => x"0b0b8186", -872 => x"38676231", -873 => x"5a807a25", -874 => x"0b0b0b80", -875 => x"f938907a", -876 => x"250b0b0b", -877 => x"0bbd380b", -878 => x"0b82eda4", -879 => x"7c0c900b", -880 => x"841d0c83", -881 => x"b73d0890", -882 => x"0583b83d", -883 => x"0c881c83", -884 => x"b73d0881", -885 => x"1183b93d", -886 => x"0c811151", -887 => x"5a5c7887", -888 => x"240b0b0b", -889 => x"868e38f0", -890 => x"1a5a7990", -891 => x"240b0b0b", -892 => x"0bc5380b", -893 => x"0b82eda4", -894 => x"7c0c7984", -895 => x"1d0c83b7", -896 => x"3d081a83", -897 => x"b83d0c88", -898 => x"1c83b73d", -899 => x"08811183", -900 => x"b93d0c81", -901 => x"11515a5c", -902 => x"7887240b", -903 => x"0b0b96fe", -904 => x"3883bd3d", -905 => x"335b7a81", -906 => x"ff065978", -907 => x"802e0b0b", -908 => x"0b938138", -909 => x"83be3dfc", -910 => x"057c0c81", -911 => x"0b841d0c", -912 => x"83b73d08", -913 => x"810583b8", -914 => x"3d0c881c", -915 => x"83b73d08", -916 => x"811183b9", -917 => x"3d0c8111", -918 => x"515a5c78", -919 => x"87240b0b", -920 => x"0b879f38", -921 => x"6081802e", -922 => x"0b0b0b85", -923 => x"c938637f", -924 => x"315a807a", -925 => x"250b0b0b", -926 => x"818c3890", -927 => x"7a250b0b", -928 => x"0b0bbd38", -929 => x"0b0b82ed", -930 => x"b47c0c90", -931 => x"0b841d0c", -932 => x"83b73d08", -933 => x"900583b8", -934 => x"3d0c881c", -935 => x"83b73d08", -936 => x"811183b9", -937 => x"3d0c8111", -938 => x"515a5c78", -939 => x"87240b0b", -940 => x"0b84e238", -941 => x"f01a5a79", -942 => x"90240b0b", -943 => x"0b0bc538", -944 => x"0b0b82ed", -945 => x"b47c0c79", -946 => x"841d0c83", -947 => x"b73d081a", -948 => x"83b83d0c", -949 => x"881c83b7", -950 => x"3d088111", -951 => x"83b93d0c", -952 => x"8111515a", -953 => x"5c877925", -954 => x"0b0b0b0b", -955 => x"993883be", -956 => x"3ddc0552", -957 => x"66510b0b", -958 => x"0bf7863f", -959 => x"80080b0b", -960 => x"0b878138", -961 => x"655c6288", -962 => x"2a813270", -963 => x"81065159", -964 => x"78802e0b", -965 => x"0b0b91f3", -966 => x"387d7c0c", -967 => x"7e841d0c", -968 => x"83b73d08", -969 => x"1f83b83d", -970 => x"0c881c83", -971 => x"b73d0881", -972 => x"1183b93d", -973 => x"0c811151", -974 => x"5a5c7887", -975 => x"240b0b0b", -976 => x"868c3862", -977 => x"822a7081", -978 => x"06515978", -979 => x"802e0b0b", -980 => x"0b819438", -981 => x"6762315a", -982 => x"807a250b", -983 => x"0b0b8187", -984 => x"38907a25", -985 => x"0b0b0b0b", -986 => x"bd380b0b", -987 => x"82eda47c", -988 => x"0c900b84", -989 => x"1d0c83b7", -990 => x"3d089005", -991 => x"83b83d0c", -992 => x"881c83b7", -993 => x"3d088111", -994 => x"83b93d0c", -995 => x"8111515a", -996 => x"5c788724", -997 => x"0b0b0b85", -998 => x"9438f01a", -999 => x"5a799024", -1000 => x"0b0b0b0b", -1001 => x"c5380b0b", -1002 => x"82eda47c", -1003 => x"0c79841d", -1004 => x"0c83b73d", -1005 => x"081a83b8", -1006 => x"3d0c83b6", -1007 => x"3d088111", -1008 => x"83b83d0c", -1009 => x"81115159", -1010 => x"8779250b", -1011 => x"0b0b0b97", -1012 => x"3883be3d", -1013 => x"dc055266", -1014 => x"510b0b0b", -1015 => x"f5a33f80", -1016 => x"080b0b0b", -1017 => x"859e3861", -1018 => x"59616825", -1019 => x"0b0b0b0b", -1020 => x"83386759", -1021 => x"68194983", -1022 => x"b73d080b", -1023 => x"0b0b84ec", -1024 => x"38800b83", -1025 => x"b73d0c65", -1026 => x"5c69802e", -1027 => x"0b0b0bf6", -1028 => x"c7386951", -1029 => x"0b0b80ff", -1030 => x"953f807d", -1031 => x"5f4a0b0b", -1032 => x"0bf6b739", -1033 => x"62900743", -1034 => x"62842a70", -1035 => x"81065159", -1036 => x"780b0b0b", -1037 => x"97d43862", -1038 => x"862a7081", -1039 => x"06515978", -1040 => x"802e0b0b", -1041 => x"0b97c338", -1042 => x"64658405", -1043 => x"8212225d", -1044 => x"4659805f", -1045 => x"800b83be", -1046 => x"3d340b0b", -1047 => x"0bf9b739", -1048 => x"62900743", -1049 => x"62842a70", -1050 => x"81065159", -1051 => x"780b0b0b", -1052 => x"97a93862", -1053 => x"862a7081", -1054 => x"06515978", -1055 => x"802e0b0b", -1056 => x"0b979838", -1057 => x"64658405", -1058 => x"7108902b", -1059 => x"70902c51", -1060 => x"5d465980", -1061 => x"7b240b0b", -1062 => x"0b8bdf38", -1063 => x"815f0b0b", -1064 => x"0bf8f339", -1065 => x"64658405", -1066 => x"71084a46", -1067 => x"59678025", -1068 => x"0b0b0bf7", -1069 => x"e1386730", -1070 => x"48628407", -1071 => x"7d335b43", -1072 => x"0b0b0bf7", -1073 => x"d439811d", -1074 => x"5d629007", -1075 => x"7d335b43", -1076 => x"0b0b0bf7", -1077 => x"c4397f80", -1078 => x"2e0b0b0b", -1079 => x"a6863882", -1080 => x"ce3d5e7f", -1081 => x"7e34815f", -1082 => x"800b83be", -1083 => x"3d340b0b", -1084 => x"0bf8fe39", -1085 => x"83be3ddc", -1086 => x"05526651", -1087 => x"0b0b0bf3", -1088 => x"803f8008", -1089 => x"0b0b0b82", -1090 => x"fb3865f0", -1091 => x"1b5b5c0b", -1092 => x"0b0bf9d6", -1093 => x"3983be3d", -1094 => x"dc055266", -1095 => x"510b0b0b", -1096 => x"f2df3f80", -1097 => x"080b0b0b", -1098 => x"82da3865", -1099 => x"f01b5b5c", -1100 => x"0b0b0bfb", -1101 => x"82396762", -1102 => x"315a807a", -1103 => x"250b0b0b", -1104 => x"faac3890", -1105 => x"7a250b0b", -1106 => x"0b0bbd38", -1107 => x"0b0b82ed", -1108 => x"b47c0c90", -1109 => x"0b841d0c", -1110 => x"83b73d08", -1111 => x"900583b8", -1112 => x"3d0c881c", -1113 => x"83b73d08", -1114 => x"811183b9", -1115 => x"3d0c8111", -1116 => x"515a5c78", -1117 => x"87240b0b", -1118 => x"0b80e638", -1119 => x"f01a5a79", -1120 => x"90240b0b", -1121 => x"0b0bc538", -1122 => x"0b0b82ed", -1123 => x"b47c0c79", -1124 => x"841d0c83", -1125 => x"b73d081a", -1126 => x"83b83d0c", -1127 => x"881c83b7", -1128 => x"3d088111", -1129 => x"83b93d0c", -1130 => x"8111515a", -1131 => x"5c877925", -1132 => x"0b0b0bf9", -1133 => x"b93883be", -1134 => x"3ddc0552", -1135 => x"66510b0b", -1136 => x"0bf1be3f", -1137 => x"80080b0b", -1138 => x"0b81b938", -1139 => x"65646031", -1140 => x"5b5c7980", -1141 => x"240b0b0b", -1142 => x"f9a1380b", -1143 => x"0b0bfaa6", -1144 => x"3983be3d", -1145 => x"dc055266", -1146 => x"510b0b0b", -1147 => x"f1933f80", -1148 => x"080b0b0b", -1149 => x"818e3865", -1150 => x"f01b5b5c", -1151 => x"0b0b0bfe", -1152 => x"fe3983be", -1153 => x"3ddc0552", -1154 => x"66510b0b", -1155 => x"0bf0f23f", -1156 => x"80080b0b", -1157 => x"0b80ed38", -1158 => x"655c6081", -1159 => x"802e0981", -1160 => x"060b0b0b", -1161 => x"f8c8380b", -1162 => x"0b0bfe8a", -1163 => x"3983be3d", -1164 => x"dc055266", -1165 => x"510b0b0b", -1166 => x"f0c73f80", -1167 => x"080b0b0b", -1168 => x"80c23865", -1169 => x"f01b5b5c", -1170 => x"0b0b0bfa", -1171 => x"d03983be", -1172 => x"3ddc0552", -1173 => x"66510b0b", -1174 => x"0bf0a63f", -1175 => x"80080b0b", -1176 => x"0b0ba138", -1177 => x"655c0b0b", -1178 => x"0bf9d839", -1179 => x"83be3ddc", -1180 => x"05526651", -1181 => x"0b0b0bf0", -1182 => x"883f8008", -1183 => x"802e0b0b", -1184 => x"0bfafe38", -1185 => x"69802e0b", -1186 => x"0b0b0b89", -1187 => x"3869510b", -1188 => x"0b80fa9a", -1189 => x"3f668c05", -1190 => x"2270862a", -1191 => x"7081066b", -1192 => x"5d515a47", -1193 => x"78802e0b", -1194 => x"0b0bf385", -1195 => x"38ff590b", -1196 => x"0b0bf2ff", -1197 => x"397c3370", -1198 => x"81ff065a", -1199 => x"5a7880ec", -1200 => x"2e0b0b0b", -1201 => x"fc803862", -1202 => x"90077a81", -1203 => x"ff06811f", -1204 => x"5f41430b", -1205 => x"0b0bf3c9", -1206 => x"397c7081", -1207 => x"055e3340", -1208 => x"7faa2e0b", -1209 => x"0b0ba2f9", -1210 => x"388060d0", -1211 => x"0571435a", -1212 => x"5a788926", -1213 => x"0b0b0bf3", -1214 => x"a8387910", -1215 => x"10107a10", -1216 => x"056005d0", -1217 => x"057d7081", -1218 => x"055f33d0", -1219 => x"115b415a", -1220 => x"8979270b", -1221 => x"0b0b0be2", -1222 => x"38794179", -1223 => x"ff250b0b", -1224 => x"0bf2fe38", -1225 => x"ff410b0b", -1226 => x"0bf2f639", -1227 => x"64658405", -1228 => x"71085d46", -1229 => x"59820b0b", -1230 => x"0b82f0c4", -1231 => x"64720745", -1232 => x"4f5f80f8", -1233 => x"40800b83", -1234 => x"be3d340b", -1235 => x"0b0bf3c6", -1236 => x"39897b27", -1237 => x"0b0b0b0b", -1238 => x"ac38ff1e", -1239 => x"5e8a527a", -1240 => x"510b0b82", -1241 => x"9e803f80", -1242 => x"08b00559", -1243 => x"787e348a", -1244 => x"527a510b", -1245 => x"0b829dc4", -1246 => x"3f80085b", -1247 => x"7a89260b", -1248 => x"0b0b0bd6", -1249 => x"38ff1eb0", -1250 => x"1c5a5e78", -1251 => x"7e3483be", -1252 => x"3d707f31", -1253 => x"ff9c0540", -1254 => x"5b0b0b0b", -1255 => x"f3d339ff", -1256 => x"1e7b8f06", -1257 => x"6f055a5e", -1258 => x"78337e34", -1259 => x"7a842a5b", -1260 => x"7a802e0b", -1261 => x"0b0b0bd6", -1262 => x"38ff1e7b", -1263 => x"8f066f05", -1264 => x"5a5e7833", -1265 => x"7e347a84", -1266 => x"2a5b7a0b", -1267 => x"0b0b0bcf", -1268 => x"380b0b0b", -1269 => x"ffb83962", -1270 => x"80c0077d", -1271 => x"335b430b", -1272 => x"0b0bf1b5", -1273 => x"3960ff2e", -1274 => x"0b0b0b9f", -1275 => x"a0387f80", -1276 => x"e7327030", -1277 => x"70720780", -1278 => x"256280c7", -1279 => x"32703070", -1280 => x"72078025", -1281 => x"73075354", -1282 => x"5e515b59", -1283 => x"79802e0b", -1284 => x"0b0b0b8a", -1285 => x"38600b0b", -1286 => x"0b0b8338", -1287 => x"81416465", -1288 => x"88058412", -1289 => x"08720870", -1290 => x"83bf3d0c", -1291 => x"7183c03d", -1292 => x"0c545446", -1293 => x"590b0b81", -1294 => x"adad3f80", -1295 => x"08802e0b", -1296 => x"0b0b95db", -1297 => x"38805980", -1298 => x"79545483", -1299 => x"ba3d0883", -1300 => x"bc3d085b", -1301 => x"5179520b", -1302 => x"0b8290c9", -1303 => x"3f800b80", -1304 => x"08240b0b", -1305 => x"0b85f138", -1306 => x"0b0b82f0", -1307 => x"d85e835f", -1308 => x"0b0b0bf1", -1309 => x"fc3982ce", -1310 => x"3d5e7f80", -1311 => x"c32e0b0b", -1312 => x"0b0b9238", -1313 => x"62842a70", -1314 => x"81065159", -1315 => x"78802e0b", -1316 => x"0b0b83d3", -1317 => x"38885380", -1318 => x"52b43d70", -1319 => x"52590b0b", -1320 => x"8188f23f", -1321 => x"78546465", -1322 => x"84057108", -1323 => x"557f546c", -1324 => x"5346590b", -1325 => x"0b0ba0b1", -1326 => x"3f80085f", -1327 => x"8008ff2e", -1328 => x"0b0b0bfb", -1329 => x"bf38800b", -1330 => x"83be3d34", -1331 => x"0b0b0bf1", -1332 => x"a0390b0b", -1333 => x"82f0dc63", -1334 => x"842a7081", -1335 => x"06515a4e", -1336 => x"780b0b0b", -1337 => x"82ca3862", -1338 => x"862a7081", -1339 => x"06515978", -1340 => x"802e0b0b", -1341 => x"0b82b938", -1342 => x"64658405", -1343 => x"8212225d", -1344 => x"46598263", -1345 => x"81065a5f", -1346 => x"7a802e0b", -1347 => x"0b0bf080", -1348 => x"3878802e", -1349 => x"0b0b0bef", -1350 => x"f738627f", -1351 => x"0743800b", -1352 => x"83be3d34", -1353 => x"0b0b0bef", -1354 => x"ed39800b", -1355 => x"83be3d34", -1356 => x"64658405", -1357 => x"71084046", -1358 => x"597d802e", -1359 => x"0b0b0b9c", -1360 => x"d4387f80", -1361 => x"d32e0b0b", -1362 => x"0b82c038", -1363 => x"62842a70", -1364 => x"81065159", -1365 => x"780b0b0b", -1366 => x"82b13880", -1367 => x"61240b0b", -1368 => x"0bf08338", -1369 => x"60537852", -1370 => x"7d510b0b", -1371 => x"8183e73f", -1372 => x"605f8008", -1373 => x"802e0b0b", -1374 => x"0beff638", -1375 => x"80087e31", -1376 => x"5f607f25", -1377 => x"0b0b0bef", -1378 => x"e838605f", -1379 => x"0b0b0bef", -1380 => x"e0396284", -1381 => x"2a708106", -1382 => x"5159780b", -1383 => x"0b0b908d", -1384 => x"3862862a", -1385 => x"70810651", -1386 => x"5978802e", -1387 => x"0b0b0b8f", -1388 => x"fc386465", -1389 => x"84057108", -1390 => x"52465968", -1391 => x"79237c5e", -1392 => x"0b0b0beb", -1393 => x"9539ab0b", -1394 => x"83be3d34", -1395 => x"7c335a0b", -1396 => x"0b0bedc5", -1397 => x"39805a79", -1398 => x"1010107a", -1399 => x"10056005", -1400 => x"d0057d70", -1401 => x"81055f33", -1402 => x"d0115b41", -1403 => x"5a897927", -1404 => x"0b0b0b0b", -1405 => x"e2387948", -1406 => x"0b0b0bed", -1407 => x"a4396281", -1408 => x"80077d33", -1409 => x"5b430b0b", -1410 => x"0bed8e39", -1411 => x"6288077d", -1412 => x"335b430b", -1413 => x"0b0bed81", -1414 => x"390b0b82", -1415 => x"f0c46384", -1416 => x"2a708106", -1417 => x"515a4e78", -1418 => x"802e0b0b", -1419 => x"0bfdb838", -1420 => x"64658405", -1421 => x"71085d46", -1422 => x"590b0b0b", -1423 => x"fdc43962", -1424 => x"81077d33", -1425 => x"5b430b0b", -1426 => x"0becce39", -1427 => x"83bd3d33", -1428 => x"59780b0b", -1429 => x"0becbf38", -1430 => x"a00b83be", -1431 => x"3d347c33", -1432 => x"5a0b0b0b", -1433 => x"ecb33964", -1434 => x"65840546", -1435 => x"59831933", -1436 => x"7e34815f", -1437 => x"0b0b0bf4", -1438 => x"ef397a30", -1439 => x"5bad0b83", -1440 => x"be3d3481", -1441 => x"5f0b0b0b", -1442 => x"ed8c397d", -1443 => x"a23d0c80", -1444 => x"705c5f88", -1445 => x"537e52a6", -1446 => x"3d70525a", -1447 => x"0b0b8184", -1448 => x"f43f7e61", -1449 => x"240b0b0b", -1450 => x"81c2387a", -1451 => x"1010a23d", -1452 => x"08055978", -1453 => x"08802e0b", -1454 => x"0b0b0bbd", -1455 => x"38795478", -1456 => x"085383be", -1457 => x"3dfcc005", -1458 => x"526a510b", -1459 => x"0b0b9c99", -1460 => x"3f8008ff", -1461 => x"2e0b0b0b", -1462 => x"f7aa3880", -1463 => x"081f5978", -1464 => x"61240b0b", -1465 => x"0b0b9238", -1466 => x"811b7940", -1467 => x"5b78612e", -1468 => x"0981060b", -1469 => x"0b0bffb3", -1470 => x"387e802e", -1471 => x"0b0b0bec", -1472 => x"f038811f", -1473 => x"526a510b", -1474 => x"0b80f1b6", -1475 => x"3f80084a", -1476 => x"8008802e", -1477 => x"0b0b0bf6", -1478 => x"fc388853", -1479 => x"80527951", -1480 => x"0b0b8183", -1481 => x"f03f7955", -1482 => x"7e5483be", -1483 => x"3df38c05", -1484 => x"5369526a", -1485 => x"510b0b0b", -1486 => x"9cb03f80", -1487 => x"087f2e09", -1488 => x"81060b0b", -1489 => x"0bf6bd38", -1490 => x"696a8008", -1491 => x"055a5e80", -1492 => x"79340b0b", -1493 => x"0bec9a39", -1494 => x"ad0b83be", -1495 => x"3d340b0b", -1496 => x"82f0d85e", -1497 => x"835f0b0b", -1498 => x"0bec8639", -1499 => x"79557e54", -1500 => x"83be3df3", -1501 => x"8c05537e", -1502 => x"526a510b", -1503 => x"0b0b9bea", -1504 => x"3f80085f", -1505 => x"8008ff2e", -1506 => x"0b0b0bf5", -1507 => x"f7387da2", -1508 => x"3d0c0b0b", -1509 => x"0bfee239", -1510 => x"620a100a", -1511 => x"70810651", -1512 => x"5978802e", -1513 => x"0b0b0beb", -1514 => x"ec386182", -1515 => x"05420b0b", -1516 => x"0bebe239", -1517 => x"620a100a", -1518 => x"70810651", -1519 => x"5978802e", -1520 => x"0b0b0bed", -1521 => x"9f38b00b", -1522 => x"82ce3d34", -1523 => x"7f028405", -1524 => x"8ab10534", -1525 => x"83be3dfc", -1526 => x"bc057c0c", -1527 => x"820b841d", -1528 => x"0c83b73d", -1529 => x"08820583", -1530 => x"b83d0c88", -1531 => x"1c83b73d", -1532 => x"08811183", -1533 => x"b93d0c81", -1534 => x"11515a5c", -1535 => x"8779250b", -1536 => x"0b0bece0", -1537 => x"380b0b0b", -1538 => x"f3f83980", -1539 => x"e560250b", -1540 => x"0b0b83da", -1541 => x"38805980", -1542 => x"79545483", -1543 => x"ba3d0883", -1544 => x"bc3d085b", -1545 => x"5179520b", -1546 => x"0b8282bd", -1547 => x"3f80080b", -1548 => x"0b0b87ff", -1549 => x"380b0b82", -1550 => x"f0f07c0c", -1551 => x"810b841d", -1552 => x"0c83b73d", -1553 => x"08810583", -1554 => x"b83d0c88", -1555 => x"1c83b73d", -1556 => x"08811183", -1557 => x"b93d0c81", -1558 => x"11515a5c", -1559 => x"7887240b", -1560 => x"0b0b81ce", -1561 => x"38a43d08", -1562 => x"5b7aa63d", -1563 => x"08240b0b", -1564 => x"0b0b8e38", -1565 => x"62810659", -1566 => x"78802e0b", -1567 => x"0b0bedc3", -1568 => x"386b7c0c", -1569 => x"810b841d", -1570 => x"0c83b73d", -1571 => x"08810583", -1572 => x"b83d0c88", -1573 => x"1c83b73d", -1574 => x"08811183", -1575 => x"b93d0c81", -1576 => x"11515a5c", -1577 => x"7887240b", -1578 => x"0b0b81c5", -1579 => x"38ff1b5a", -1580 => x"807a250b", -1581 => x"0b0bed8b", -1582 => x"38907a25", -1583 => x"0b0b0b0b", -1584 => x"bd380b0b", -1585 => x"82edb47c", -1586 => x"0c900b84", -1587 => x"1d0c83b7", -1588 => x"3d089005", -1589 => x"83b83d0c", -1590 => x"881c83b7", -1591 => x"3d088111", -1592 => x"83b93d0c", -1593 => x"8111515a", -1594 => x"5c788724", -1595 => x"0b0b0b80", -1596 => x"df38f01a", -1597 => x"5a799024", -1598 => x"0b0b0b0b", -1599 => x"c5380b0b", -1600 => x"82edb47c", -1601 => x"0c79841d", -1602 => x"0c83b73d", -1603 => x"081a83b8", -1604 => x"3d0c881c", -1605 => x"83b73d08", -1606 => x"811183b9", -1607 => x"3d0c8111", -1608 => x"515a5c87", -1609 => x"79250b0b", -1610 => x"0bec9838", -1611 => x"0b0b0bf2", -1612 => x"9d3983be", -1613 => x"3ddc0552", -1614 => x"66510b0b", -1615 => x"0be2c23f", -1616 => x"80080b0b", -1617 => x"0bf2bd38", -1618 => x"655c0b0b", -1619 => x"0bfe9639", -1620 => x"83be3ddc", -1621 => x"05526651", -1622 => x"0b0b0be2", -1623 => x"a43f8008", -1624 => x"0b0b0bf2", -1625 => x"9f3865f0", -1626 => x"1b5b5c0b", -1627 => x"0b0bff85", -1628 => x"3983be3d", -1629 => x"dc055266", -1630 => x"510b0b0b", -1631 => x"e2833f80", -1632 => x"080b0b0b", -1633 => x"f1fe3865", -1634 => x"a53d08ff", -1635 => x"055b5c79", -1636 => x"80240b0b", -1637 => x"0bfea238", -1638 => x"0b0b0beb", -1639 => x"a63983be", -1640 => x"3ddc0552", -1641 => x"66510b0b", -1642 => x"0be1d63f", -1643 => x"80080b0b", -1644 => x"0bf1d138", -1645 => x"6583be3d", -1646 => x"335c5c0b", -1647 => x"0b0be8e6", -1648 => x"397e0b0b", -1649 => x"0bf3c738", -1650 => x"62810659", -1651 => x"78802e0b", -1652 => x"0b0bf3ba", -1653 => x"38028d8f", -1654 => x"055eb07e", -1655 => x"3483be3d", -1656 => x"707f31ff", -1657 => x"9c05405b", -1658 => x"0b0b0be7", -1659 => x"8439a43d", -1660 => x"085b817b", -1661 => x"250b0b0b", -1662 => x"83bc387d", -1663 => x"7081055f", -1664 => x"3382ce3d", -1665 => x"34ae0284", -1666 => x"058ab105", -1667 => x"3483be3d", -1668 => x"fcbc057c", -1669 => x"0c820b84", -1670 => x"1d0c83b7", -1671 => x"3d088205", -1672 => x"83b83d0c", -1673 => x"881c83b7", -1674 => x"3d088111", -1675 => x"83b93d0c", -1676 => x"8111515a", -1677 => x"5c788724", -1678 => x"0b0b0b81", -1679 => x"8b388059", -1680 => x"80795454", -1681 => x"83ba3d08", -1682 => x"83bc3d08", -1683 => x"5b517952", -1684 => x"0b0b8280", -1685 => x"a83f8008", -1686 => x"802e0b0b", -1687 => x"0b81a538", -1688 => x"7d7c0cff", -1689 => x"1b841d0c", -1690 => x"83b73d08", -1691 => x"1bff0583", -1692 => x"b83d0c88", -1693 => x"1c83b73d", -1694 => x"08811183", -1695 => x"b93d0c81", -1696 => x"11515a5c", -1697 => x"7887240b", -1698 => x"0b0b81f7", -1699 => x"3883be3d", -1700 => x"e8057c0c", -1701 => x"6c841d0c", -1702 => x"83b73d08", -1703 => x"6d0583b8", -1704 => x"3d0c881c", -1705 => x"83b73d08", -1706 => x"811183b9", -1707 => x"3d0c8111", -1708 => x"515a5c87", -1709 => x"79250b0b", -1710 => x"0be98838", -1711 => x"83be3ddc", -1712 => x"05520b0b", -1713 => x"0bef8d39", -1714 => x"83be3ddc", -1715 => x"05526651", -1716 => x"0b0b0bdf", -1717 => x"ac3f8008", -1718 => x"0b0b0bef", -1719 => x"a73865a5", -1720 => x"3d085c5c", -1721 => x"80598079", -1722 => x"545483ba", -1723 => x"3d0883bc", -1724 => x"3d085b51", -1725 => x"79520b0b", -1726 => x"81ff823f", -1727 => x"80080b0b", -1728 => x"0bfedd38", -1729 => x"ff1b5a80", -1730 => x"7a250b0b", -1731 => x"0bfefe38", -1732 => x"907a250b", -1733 => x"0b0b0bbd", -1734 => x"380b0b82", -1735 => x"edb47c0c", -1736 => x"900b841d", -1737 => x"0c83b73d", -1738 => x"08900583", -1739 => x"b83d0c88", -1740 => x"1c83b73d", -1741 => x"08811183", -1742 => x"b93d0c81", -1743 => x"11515a5c", -1744 => x"7887240b", -1745 => x"0b0b84c4", -1746 => x"38f01a5a", -1747 => x"7990240b", -1748 => x"0b0b0bc5", -1749 => x"380b0b82", -1750 => x"edb47c0c", -1751 => x"79841d0c", -1752 => x"83b73d08", -1753 => x"1a83b83d", -1754 => x"0c881c83", -1755 => x"b73d0881", -1756 => x"1183b93d", -1757 => x"0c811151", -1758 => x"5a5c8779", -1759 => x"250b0b0b", -1760 => x"fe8b3883", -1761 => x"be3ddc05", -1762 => x"5266510b", -1763 => x"0b0bddf1", -1764 => x"3f80080b", -1765 => x"0b0bedec", -1766 => x"386583bf", -1767 => x"3de80571", -1768 => x"0c6d8412", -1769 => x"0c83b83d", -1770 => x"086e0583", -1771 => x"b93d0c5c", -1772 => x"0b0b0bfd", -1773 => x"ed396281", -1774 => x"0659780b", -1775 => x"0b0bfcbb", -1776 => x"387d7c0c", -1777 => x"810b841d", -1778 => x"0c83b73d", -1779 => x"08810583", -1780 => x"b83d0c88", -1781 => x"1c83b73d", -1782 => x"08811183", -1783 => x"b93d0c81", -1784 => x"11515a5c", -1785 => x"8779250b", -1786 => x"0b0bfda1", -1787 => x"3883be3d", -1788 => x"dc05520b", -1789 => x"0b0bff91", -1790 => x"39646584", -1791 => x"0571085d", -1792 => x"4659815f", -1793 => x"0b0b0be2", -1794 => x"87396465", -1795 => x"84057108", -1796 => x"5d465980", -1797 => x"5f0b0b0b", -1798 => x"e8ba3964", -1799 => x"65840571", -1800 => x"085d4659", -1801 => x"7a80250b", -1802 => x"0b0be8f0", -1803 => x"380b0b0b", -1804 => x"f4c839a5", -1805 => x"3d085a80", -1806 => x"7a250b0b", -1807 => x"0b8bbd38", -1808 => x"a43d085b", -1809 => x"7a7a240b", -1810 => x"0b0b83b5", -1811 => x"387d7c0c", -1812 => x"7a841d0c", -1813 => x"83b73d08", -1814 => x"1b83b83d", -1815 => x"0c881c83", -1816 => x"b73d0881", -1817 => x"1183b93d", -1818 => x"0c811151", -1819 => x"5a5c7887", -1820 => x"240b0b0b", -1821 => x"81e33879", -1822 => x"7b315a80", -1823 => x"7a250b0b", -1824 => x"0b818c38", -1825 => x"907a250b", -1826 => x"0b0b0bbd", -1827 => x"380b0b82", -1828 => x"edb47c0c", -1829 => x"900b841d", -1830 => x"0c83b73d", -1831 => x"08900583", -1832 => x"b83d0c88", -1833 => x"1c83b73d", -1834 => x"08811183", -1835 => x"b93d0c81", -1836 => x"11515a5c", -1837 => x"7887240b", -1838 => x"0b0b80fc", -1839 => x"38f01a5a", -1840 => x"7990240b", -1841 => x"0b0b0bc5", -1842 => x"380b0b82", -1843 => x"edb47c0c", -1844 => x"79841d0c", -1845 => x"83b73d08", -1846 => x"1a83b83d", -1847 => x"0c881c83", -1848 => x"b73d0881", -1849 => x"1183b93d", -1850 => x"0c811151", -1851 => x"5a5c8779", -1852 => x"250b0b0b", -1853 => x"0b993883", -1854 => x"be3ddc05", -1855 => x"5266510b", -1856 => x"0b0bdafd", -1857 => x"3f80080b", -1858 => x"0b0beaf8", -1859 => x"38655c62", -1860 => x"81065978", -1861 => x"802e0b0b", -1862 => x"0be4a838", -1863 => x"0b0b82f0", -1864 => x"f47c0c81", -1865 => x"0b841d0c", -1866 => x"83b73d08", -1867 => x"810583b8", -1868 => x"3d0c0b0b", -1869 => x"0bfaeb39", -1870 => x"83be3ddc", -1871 => x"05526651", -1872 => x"0b0b0bda", -1873 => x"bc3f8008", -1874 => x"0b0b0bea", -1875 => x"b73865f0", -1876 => x"1b5b5c0b", -1877 => x"0b0bfee8", -1878 => x"3983be3d", -1879 => x"dc055266", -1880 => x"510b0b0b", -1881 => x"da9b3f80", -1882 => x"080b0b0b", -1883 => x"ea963865", -1884 => x"a63d08a6", -1885 => x"3d087171", -1886 => x"31525d5b", -1887 => x"5c798024", -1888 => x"0b0b0bfd", -1889 => x"ff380b0b", -1890 => x"0bff8439", -1891 => x"83be3ddc", -1892 => x"05526651", -1893 => x"0b0b0bd9", -1894 => x"e83f8008", -1895 => x"0b0b0be9", -1896 => x"e33865f0", -1897 => x"1b5b5c0b", -1898 => x"0b0bfba0", -1899 => x"39646584", -1900 => x"0571086b", -1901 => x"710c527e", -1902 => x"4046590b", -1903 => x"0b0bdb9a", -1904 => x"397e0b0b", -1905 => x"0bdf9938", -1906 => x"ff1e7bb7", -1907 => x"06b0075b", -1908 => x"5e797e34", -1909 => x"7a832a5b", -1910 => x"7a0b0b0b", -1911 => x"0bea3862", -1912 => x"81065978", -1913 => x"802e0b0b", -1914 => x"0beba338", -1915 => x"79b02e0b", -1916 => x"0b0beb9a", -1917 => x"38ff1e5e", -1918 => x"b07e340b", -1919 => x"0b0bf7dd", -1920 => x"397d7c0c", -1921 => x"79841d0c", -1922 => x"83b73d08", -1923 => x"1a83b83d", -1924 => x"0c881c83", -1925 => x"b73d0881", -1926 => x"1183b93d", -1927 => x"0c811151", -1928 => x"5a5c7887", -1929 => x"240b0b0b", -1930 => x"81a03879", -1931 => x"1e0b0b82", -1932 => x"f0f47d0c", -1933 => x"5e810b84", -1934 => x"1d0c83b7", -1935 => x"3d088105", -1936 => x"83b83d0c", -1937 => x"881c83b7", -1938 => x"3d088111", -1939 => x"83b93d0c", -1940 => x"8111515a", -1941 => x"5c788724", -1942 => x"0b0b0b0b", -1943 => x"b6387d7c", -1944 => x"0ca43d08", -1945 => x"7a317084", -1946 => x"1e0c83b8", -1947 => x"3d080583", -1948 => x"b83d0c88", -1949 => x"1c83b73d", -1950 => x"08811183", -1951 => x"b93d0c81", -1952 => x"11515a5c", -1953 => x"8779250b", -1954 => x"0b0be1b7", -1955 => x"380b0b0b", -1956 => x"e7bc3983", -1957 => x"be3ddc05", -1958 => x"5266510b", -1959 => x"0b0bd7e1", -1960 => x"3f80080b", -1961 => x"0b0be7dc", -1962 => x"3865a63d", -1963 => x"087f720c", -1964 => x"a63d0871", -1965 => x"31708414", -1966 => x"0c83ba3d", -1967 => x"080583ba", -1968 => x"3d0c5b5c", -1969 => x"0b0b0bff", -1970 => x"aa3983be", -1971 => x"3ddc0552", -1972 => x"66510b0b", -1973 => x"0bd7aa3f", -1974 => x"80080b0b", -1975 => x"0be7a538", -1976 => x"65a63d08", -1977 => x"7f110b0b", -1978 => x"82f0f473", -1979 => x"0c405b5c", -1980 => x"810b841d", -1981 => x"0c83b73d", -1982 => x"08810583", -1983 => x"b83d0c88", -1984 => x"1c83b73d", -1985 => x"08811183", -1986 => x"b93d0c81", -1987 => x"11515a5c", -1988 => x"8779250b", -1989 => x"0b0bfec6", -1990 => x"380b0b0b", -1991 => x"fef53983", -1992 => x"ba3d0883", -1993 => x"bc3d085b", -1994 => x"5179520b", -1995 => x"0b8197ea", -1996 => x"3f0b0b82", -1997 => x"f0f85e83", -1998 => x"5f80080b", -1999 => x"0b0bdcb1", -2000 => x"38628280", -2001 => x"0783bb3d", -2002 => x"0883bd3d", -2003 => x"086383c0", -2004 => x"3daa3da5", -2005 => x"3d0c5f45", -2006 => x"415f4383", -2007 => x"0ba13d0c", -2008 => x"7f80e62e", -2009 => x"0b0b0b0b", -2010 => x"b1388008", -2011 => x"5a7f80e5", -2012 => x"2e0b0b0b", -2013 => x"83ea3880", -2014 => x"08597f80", -2015 => x"c52e0b0b", -2016 => x"0b83f038", -2017 => x"79790759", -2018 => x"78802e0b", -2019 => x"0b0b0b85", -2020 => x"38608105", -2021 => x"42820ba1", -2022 => x"3d0c7db3", -2023 => x"3d0c7eb4", -2024 => x"3d0c800b", -2025 => x"b33d0824", -2026 => x"0b0b0b88", -2027 => x"ef38807b", -2028 => x"3483be3d", -2029 => x"f3941159", -2030 => x"f3900557", -2031 => x"6e566155", -2032 => x"6f547d52", -2033 => x"7e536a51", -2034 => x"0b0b0b9b", -2035 => x"b03f8008", -2036 => x"6080e732", -2037 => x"70307072", -2038 => x"079f2a51", -2039 => x"5b5ba13d", -2040 => x"0c7f80c7", -2041 => x"2e0b0b0b", -2042 => x"0b883878", -2043 => x"0b0b0b81", -2044 => x"e4386281", -2045 => x"0659780b", -2046 => x"0b0b81d9", -2047 => x"38a33d08", -2048 => x"5978a13d", -2049 => x"0831a53d", -2050 => x"0c6f6080", -2051 => x"e7327030", -2052 => x"70720780", -2053 => x"256380c7", -2054 => x"32703070", -2055 => x"72078025", -2056 => x"73075354", -2057 => x"5f515c5a", -2058 => x"5e79802e", -2059 => x"0b0b0b86", -2060 => x"f238a53d", -2061 => x"085afc7a", -2062 => x"250b0b0b", -2063 => x"0b8a3860", -2064 => x"7a250b0b", -2065 => x"0b82cc38", -2066 => x"80e5597f", -2067 => x"80e72e0b", -2068 => x"0b0b0b84", -2069 => x"3880c559", -2070 => x"78407f80", -2071 => x"e5240b0b", -2072 => x"0b86ca38", -2073 => x"ff1a70a7", -2074 => x"3d0c83b9", -2075 => x"3d715d43", -2076 => x"5a7f6234", -2077 => x"028ddd05", -2078 => x"5f807a24", -2079 => x"0b0b0b87", -2080 => x"c138ab7f", -2081 => x"34028dde", -2082 => x"05b33d70", -2083 => x"5c425f89", -2084 => x"7b250b0b", -2085 => x"0b818738", -2086 => x"ff1a8a7c", -2087 => x"36b0055a", -2088 => x"5a787a34", -2089 => x"8a7b355b", -2090 => x"7a89240b", -2091 => x"0b0b0be8", -2092 => x"38ff1ab0", -2093 => x"1c5a5a78", -2094 => x"7a347961", -2095 => x"270b0b0b", -2096 => x"80ed3879", -2097 => x"7081055b", -2098 => x"337f7081", -2099 => x"0541340b", -2100 => x"0b0b0be6", -2101 => x"39800862", -2102 => x"055b7f80", -2103 => x"e62e0b0b", -2104 => x"0b819838", -2105 => x"80598079", -2106 => x"54547d51", -2107 => x"7e520b0b", -2108 => x"81f0f63f", -2109 => x"80080b0b", -2110 => x"0b0b8538", -2111 => x"7aa43d0c", -2112 => x"a33d0859", -2113 => x"787b270b", -2114 => x"0b0bfdf5", -2115 => x"38b07934", -2116 => x"a33d0881", -2117 => x"05a43d0c", -2118 => x"0b0b0b0b", -2119 => x"e339b07f", -2120 => x"70810541", -2121 => x"34b01b59", -2122 => x"787f7081", -2123 => x"0541347e", -2124 => x"6231a53d", -2125 => x"08701241", -2126 => x"5a4d8179", -2127 => x"250b0b0b", -2128 => x"81a43881", -2129 => x"1f5f83bc", -2130 => x"3d335978", -2131 => x"802e0b0b", -2132 => x"0bd89e38", -2133 => x"ad0b83be", -2134 => x"3d340b0b", -2135 => x"0bd89239", -2136 => x"810b8008", -2137 => x"5a5a7f80", -2138 => x"c52e0981", -2139 => x"060b0b0b", -2140 => x"fc923881", -2141 => x"590b0b0b", -2142 => x"fc8a3980", -2143 => x"08335978", -2144 => x"b02e0b0b", -2145 => x"0b0bb438", -2146 => x"6e087b05", -2147 => x"5b0b0b0b", -2148 => x"fed23980", -2149 => x"e740a43d", -2150 => x"0859787a", -2151 => x"240b0b0b", -2152 => x"85883879", -2153 => x"6381065a", -2154 => x"5f78802e", -2155 => x"0b0b0bff", -2156 => x"9538811a", -2157 => x"5f0b0b0b", -2158 => x"ff8c3980", -2159 => x"59807954", -2160 => x"547d517e", -2161 => x"520b0b81", -2162 => x"f1b33f80", -2163 => x"08802e0b", -2164 => x"0b0bffb4", -2165 => x"38816231", -2166 => x"70a13d08", -2167 => x"0c7b055b", -2168 => x"0b0b0bfd", -2169 => x"ff396281", -2170 => x"06597880", -2171 => x"2e0b0b0b", -2172 => x"fed43881", -2173 => x"1f5f0b0b", -2174 => x"0bfecb39", -2175 => x"0b0b82f0", -2176 => x"f07c0c81", -2177 => x"0b841d0c", -2178 => x"83b73d08", -2179 => x"810583b8", -2180 => x"3d0c881c", -2181 => x"83b73d08", -2182 => x"811183b9", -2183 => x"3d0c8111", -2184 => x"515a5c78", -2185 => x"87240b0b", -2186 => x"0b829238", -2187 => x"790b0b0b", -2188 => x"0b8c38a4", -2189 => x"3d08802e", -2190 => x"0b0b0bda", -2191 => x"86386b7c", -2192 => x"0c810b84", -2193 => x"1d0c83b7", -2194 => x"3d088105", -2195 => x"83b83d0c", -2196 => x"881c83b7", -2197 => x"3d088111", -2198 => x"83b93d0c", -2199 => x"8111515a", -2200 => x"5c788724", -2201 => x"0b0b0b81", -2202 => x"f6387930", -2203 => x"5a807a25", -2204 => x"0b0b0b81", -2205 => x"8c38907a", -2206 => x"250b0b0b", -2207 => x"0bbd380b", -2208 => x"0b82edb4", -2209 => x"7c0c900b", -2210 => x"841d0c83", -2211 => x"b73d0890", -2212 => x"0583b83d", -2213 => x"0c881c83", -2214 => x"b73d0881", -2215 => x"1183b93d", -2216 => x"0c811151", -2217 => x"5a5c7887", -2218 => x"240b0b0b", -2219 => x"80ee38f0", -2220 => x"1a5a7990", -2221 => x"240b0b0b", -2222 => x"0bc5380b", -2223 => x"0b82edb4", -2224 => x"7c0c7984", -2225 => x"1d0c83b7", -2226 => x"3d081a83", -2227 => x"b83d0c88", -2228 => x"1c83b73d", -2229 => x"08811183", -2230 => x"b93d0c81", -2231 => x"11515a5c", -2232 => x"8779250b", -2233 => x"0b0b0b99", -2234 => x"3883be3d", -2235 => x"dc055266", -2236 => x"510b0b0b", -2237 => x"cf8b3f80", -2238 => x"080b0b0b", -2239 => x"df863865", -2240 => x"5c7d7c0c", -2241 => x"a43d0884", -2242 => x"1d0c83b7", -2243 => x"3d08a53d", -2244 => x"080583b8", -2245 => x"3d0c0b0b", -2246 => x"0bef8739", -2247 => x"83be3ddc", -2248 => x"05526651", -2249 => x"0b0b0bce", -2250 => x"d83f8008", -2251 => x"0b0b0bde", -2252 => x"d33865f0", -2253 => x"1b5b5c0b", -2254 => x"0b0bfef6", -2255 => x"3983be3d", -2256 => x"dc055266", -2257 => x"510b0b0b", -2258 => x"ceb73f80", -2259 => x"080b0b0b", -2260 => x"deb23865", -2261 => x"a63d085b", -2262 => x"5c0b0b0b", -2263 => x"fdce3983", -2264 => x"be3ddc05", -2265 => x"5266510b", -2266 => x"0b0bce95", -2267 => x"3f80080b", -2268 => x"0b0bde90", -2269 => x"3865a63d", -2270 => x"08703051", -2271 => x"5b5c7980", -2272 => x"240b0b0b", -2273 => x"fdf0380b", -2274 => x"0b0bfef5", -2275 => x"3986410b", -2276 => x"0b0be18a", -2277 => x"390b0b82", -2278 => x"f0fc5e86", -2279 => x"5f0b0b0b", -2280 => x"d3cf39a5", -2281 => x"3d085a0b", -2282 => x"0b0bf9ae", -2283 => x"397f80e6", -2284 => x"2e098106", -2285 => x"0b0b0bfb", -2286 => x"dd38807a", -2287 => x"250b0b0b", -2288 => x"81bc3879", -2289 => x"5f600b0b", -2290 => x"0b0b8e38", -2291 => x"62810659", -2292 => x"78802e0b", -2293 => x"0b0bfaee", -2294 => x"38601a81", -2295 => x"055f0b0b", -2296 => x"0bfae339", -2297 => x"83b73d08", -2298 => x"0b0b0b0b", -2299 => x"8d38800b", -2300 => x"83b73d0c", -2301 => x"0b0b0bdd", -2302 => x"8b3983be", -2303 => x"3ddc0552", -2304 => x"66510b0b", -2305 => x"0bccfa3f", -2306 => x"80080b0b", -2307 => x"0bdcf538", -2308 => x"800b83b7", -2309 => x"3d0c0b0b", -2310 => x"0bdce939", -2311 => x"7d810a32", -2312 => x"5ead7b34", -2313 => x"0b0b0bf7", -2314 => x"8839787a", -2315 => x"3182055f", -2316 => x"807a250b", -2317 => x"0b0bfa8e", -2318 => x"3881195f", -2319 => x"0b0b0bfa", -2320 => x"85397930", -2321 => x"5bad7f34", -2322 => x"028dde05", -2323 => x"b33d705c", -2324 => x"425f897b", -2325 => x"250b0b0b", -2326 => x"f9c4380b", -2327 => x"0b0bf8b8", -2328 => x"39646584", -2329 => x"05710843", -2330 => x"46596080", -2331 => x"250b0b0b", -2332 => x"d0a438ff", -2333 => x"7d335b41", -2334 => x"0b0b0bd0", -2335 => x"9c39600b", -2336 => x"0b0b0b90", -2337 => x"38628106", -2338 => x"59815f78", -2339 => x"802e0b0b", -2340 => x"0bf9b338", -2341 => x"6082055f", -2342 => x"0b0b0bf9", -2343 => x"a939fc3d", -2344 => x"0d0b0b82", -2345 => x"f4ec0855", -2346 => x"b8150880", -2347 => x"2e0b0b0b", -2348 => x"0b983878", -2349 => x"54775376", -2350 => x"520b0b82", -2351 => x"f4ec0851", -2352 => x"0b0b0bcb", -2353 => x"f63f863d", -2354 => x"0d047451", -2355 => x"0b0b0bbe", -2356 => x"8e3f7854", -2357 => x"77537652", -2358 => x"0b0b82f4", -2359 => x"ec08510b", -2360 => x"0b0bcbd7", -2361 => x"3f863d0d", -2362 => x"04f63d0d", -2363 => x"7c7e6159", -2364 => x"56588056", -2365 => x"74762e0b", -2366 => x"0b0b0ba3", -2367 => x"3876547e", -2368 => x"53745277", -2369 => x"510b0b0b", -2370 => x"83823f80", -2371 => x"08558008", -2372 => x"ff2e0b0b", -2373 => x"0b0ba938", -2374 => x"74800c8c", -2375 => x"3d0d0476", -2376 => x"5475538c", -2377 => x"3df40552", -2378 => x"77510b0b", -2379 => x"0b82dd3f", -2380 => x"80085580", -2381 => x"08ff2e09", -2382 => x"81060b0b", -2383 => x"0b0bd938", -2384 => x"80770c81", -2385 => x"8a780c74", -2386 => x"800c8c3d", -2387 => x"0d047070", -2388 => x"70707754", -2389 => x"76537552", -2390 => x"0b0b82f4", -2391 => x"ec08510b", -2392 => x"0b0bff85", -2393 => x"3f505050", -2394 => x"5004ec3d", -2395 => x"0d66686a", -2396 => x"6c6e735c", -2397 => x"405d4242", -2398 => x"4260802e", -2399 => x"0b0b0b81", -2400 => x"b2388060", -2401 => x"085a5d7c", -2402 => x"7a270b0b", -2403 => x"0b819b38", -2404 => x"933d5b7b", -2405 => x"08841d08", -2406 => x"7d567a08", -2407 => x"557c5463", -2408 => x"53405e0b", -2409 => x"0b0bfec1", -2410 => x"3f800858", -2411 => x"8008ff2e", -2412 => x"0b0b0b81", -2413 => x"9538807a", -2414 => x"80083156", -2415 => x"567c7526", -2416 => x"0b0b0b0b", -2417 => x"83388156", -2418 => x"80087a27", -2419 => x"0b0b0b80", -2420 => x"ea387580", -2421 => x"2e0b0b0b", -2422 => x"80e13880", -2423 => x"081d5d60", -2424 => x"802e0b0b", -2425 => x"0b0baa38", -2426 => x"80567580", -2427 => x"08250b0b", -2428 => x"0b0b9838", -2429 => x"751b5574", -2430 => x"33777081", -2431 => x"05593481", -2432 => x"16567776", -2433 => x"240b0b0b", -2434 => x"0bea387f", -2435 => x"08840560", -2436 => x"0c787084", -2437 => x"055a0855", -2438 => x"74802e0b", -2439 => x"0b0b0bb9", -2440 => x"38797d26", -2441 => x"0b0b0bfe", -2442 => x"ea387c55", -2443 => x"74800c96", -2444 => x"3d0d04ff", -2445 => x"5a0b0b0b", -2446 => x"fec8397d", -2447 => x"7c0c7e84", -2448 => x"1d0c7c55", -2449 => x"0b0b0b0b", -2450 => x"e339818a", -2451 => x"620c807c", -2452 => x"0c800880", -2453 => x"0c963d0d", -2454 => x"0460802e", -2455 => x"0b0b0b0b", -2456 => x"84387460", -2457 => x"0c747c0c", -2458 => x"ff1d800c", -2459 => x"963d0d04", -2460 => x"fc3d0d79", -2461 => x"55785477", -2462 => x"5376520b", -2463 => x"0b82f4ec", -2464 => x"08510b0b", -2465 => x"0bfde33f", -2466 => x"863d0d04", -2467 => x"f83d0d7b", -2468 => x"7d7f0b0b", -2469 => x"82fbec54", -2470 => x"5957550b", -2471 => x"0b818dfb", -2472 => x"3f800881", -2473 => x"260b0b0b", -2474 => x"0b983874", -2475 => x"5474802e", -2476 => x"0b0b0b0b", -2477 => x"86387575", -2478 => x"34815473", -2479 => x"800c8a3d", -2480 => x"0d040b0b", -2481 => x"82f18452", -2482 => x"0b0b82fb", -2483 => x"ec510b0b", -2484 => x"818c953f", -2485 => x"80080b0b", -2486 => x"0b81d838", -2487 => x"80085474", -2488 => x"802e0b0b", -2489 => x"0b0bd438", -2490 => x"80ff7625", -2491 => x"0b0b0b0b", -2492 => x"c538ff80", -2493 => x"16538eff", -2494 => x"73270b0b", -2495 => x"0b85e338", -2496 => x"f0801653", -2497 => x"83efff73", -2498 => x"270b0b0b", -2499 => x"82d838fc", -2500 => x"80801653", -2501 => x"80fbffff", -2502 => x"73270b0b", -2503 => x"0b85e838", -2504 => x"8fff0a16", -2505 => x"53f7c00a", -2506 => x"73270b0b", -2507 => x"0b86a638", -2508 => x"ff54c00a", -2509 => x"76250b0b", -2510 => x"0bff8038", -2511 => x"75820a06", -2512 => x"709e2c70", -2513 => x"fc075151", -2514 => x"53727570", -2515 => x"81055734", -2516 => x"7581fc0a", -2517 => x"0670982a", -2518 => x"ff800751", -2519 => x"53727570", -2520 => x"81055734", -2521 => x"7587f080", -2522 => x"80067092", -2523 => x"2aff8007", -2524 => x"51537275", -2525 => x"70810557", -2526 => x"34758fe0", -2527 => x"8006708c", -2528 => x"2aff8007", -2529 => x"51537275", -2530 => x"70810557", -2531 => x"34759fc0", -2532 => x"0670862a", -2533 => x"ff800751", -2534 => x"53727570", -2535 => x"81055734", -2536 => x"75ffbf06", -2537 => x"ff800753", -2538 => x"72753486", -2539 => x"0b800c8a", -2540 => x"3d0d040b", -2541 => x"0b82f18c", -2542 => x"520b0b82", -2543 => x"fbec510b", -2544 => x"0b818aa4", -2545 => x"3f80080b", -2546 => x"0b0b81f7", -2547 => x"387581ff", -2548 => x"0676882c", -2549 => x"7081ff06", -2550 => x"80085759", -2551 => x"54587480", -2552 => x"2e0b0b0b", -2553 => x"fdd53876", -2554 => x"802e0b0b", -2555 => x"0bfdbc38", -2556 => x"800880ff", -2557 => x"187081ff", -2558 => x"06515456", -2559 => x"729e260b", -2560 => x"0b0b0b83", -2561 => x"38815680", -2562 => x"08a01870", -2563 => x"81ff0651", -2564 => x"5454728f", -2565 => x"260b0b0b", -2566 => x"0b833881", -2567 => x"54757407", -2568 => x"5372802e", -2569 => x"0b0b0b0b", -2570 => x"b5388008", -2571 => x"c0195456", -2572 => x"72be260b", -2573 => x"0b0b0b83", -2574 => x"38815680", -2575 => x"08ff8019", -2576 => x"7081ff06", -2577 => x"51545472", -2578 => x"80fc260b", -2579 => x"0b0b0b83", -2580 => x"38815475", -2581 => x"74075372", -2582 => x"0b0b0b80", -2583 => x"d338ff0b", -2584 => x"800c8a3d", -2585 => x"0d04fcd0", -2586 => x"801653ff", -2587 => x"548fff73", -2588 => x"270b0b0b", -2589 => x"fcc53875", -2590 => x"83e08006", -2591 => x"708c2ae0", -2592 => x"07515372", -2593 => x"75708105", -2594 => x"5734759f", -2595 => x"c0067086", -2596 => x"2aff8007", -2597 => x"51537275", -2598 => x"70810557", -2599 => x"3475ffbf", -2600 => x"06ff8007", -2601 => x"53727534", -2602 => x"830b800c", -2603 => x"8a3d0d04", -2604 => x"76757081", -2605 => x"05573477", -2606 => x"75348254", -2607 => x"73800c8a", -2608 => x"3d0d040b", -2609 => x"0b82f194", -2610 => x"520b0b82", -2611 => x"fbec510b", -2612 => x"0b818894", -2613 => x"3f80080b", -2614 => x"0b0b80f8", -2615 => x"387581ff", -2616 => x"0676882c", -2617 => x"7081ff06", -2618 => x"80085759", -2619 => x"54587480", -2620 => x"2e0b0b0b", -2621 => x"fbc53876", -2622 => x"802e0b0b", -2623 => x"0bfbac38", -2624 => x"80085381", -2625 => x"a077270b", -2626 => x"0b0b0b83", -2627 => x"38815376", -2628 => x"81ff2e0b", -2629 => x"0b0bfec6", -2630 => x"38817074", -2631 => x"06545472", -2632 => x"802e0b0b", -2633 => x"0bfeb738", -2634 => x"80085381", -2635 => x"a078270b", -2636 => x"0b0b0b83", -2637 => x"38735377", -2638 => x"81ff2e0b", -2639 => x"0b0bfe9e", -2640 => x"38727406", -2641 => x"5372802e", -2642 => x"0b0b0bfe", -2643 => x"91380b0b", -2644 => x"0bfedd39", -2645 => x"0b0b82f1", -2646 => x"9c520b0b", -2647 => x"82fbec51", -2648 => x"0b0b8187", -2649 => x"833f8008", -2650 => x"0b0b0bfa", -2651 => x"be388008", -2652 => x"7681ff06", -2653 => x"77882c70", -2654 => x"81ff0659", -2655 => x"55595981", -2656 => x"5474802e", -2657 => x"0b0b0bfa", -2658 => x"b2387580", -2659 => x"2e0b0b0b", -2660 => x"82a538df", -2661 => x"16537280", -2662 => x"dd260b0b", -2663 => x"0bfdbf38", -2664 => x"df185372", -2665 => x"80dd260b", -2666 => x"0b0bfdb2", -2667 => x"3876080b", -2668 => x"0b0b0b9c", -2669 => x"3873770c", -2670 => x"9b757081", -2671 => x"055734a4", -2672 => x"75708105", -2673 => x"573480c2", -2674 => x"75708105", -2675 => x"57348359", -2676 => x"75757081", -2677 => x"05573477", -2678 => x"75348219", -2679 => x"800c8a3d", -2680 => x"0d04758f", -2681 => x"c0067086", -2682 => x"2ac00751", -2683 => x"53727570", -2684 => x"81055734", -2685 => x"75ffbf06", -2686 => x"ff800753", -2687 => x"72753482", -2688 => x"540b0b0b", -2689 => x"fdb63975", -2690 => x"80f08080", -2691 => x"0670922a", -2692 => x"f0075153", -2693 => x"72757081", -2694 => x"05573475", -2695 => x"8fe08006", -2696 => x"708c2aff", -2697 => x"80075153", -2698 => x"72757081", -2699 => x"05573475", -2700 => x"9fc00670", -2701 => x"862aff80", -2702 => x"07515372", -2703 => x"75708105", -2704 => x"573475ff", -2705 => x"bf06ff80", -2706 => x"07537275", -2707 => x"34840b80", -2708 => x"0c8a3d0d", -2709 => x"047581c0", -2710 => x"0a067098", -2711 => x"2af80751", -2712 => x"53727570", -2713 => x"81055734", -2714 => x"7587f080", -2715 => x"80067092", -2716 => x"2aff8007", -2717 => x"51537275", -2718 => x"70810557", -2719 => x"34758fe0", -2720 => x"8006708c", -2721 => x"2aff8007", -2722 => x"51537275", -2723 => x"70810557", -2724 => x"34759fc0", -2725 => x"0670862a", -2726 => x"ff800751", -2727 => x"53727570", -2728 => x"81055734", -2729 => x"75ffbf06", -2730 => x"ff800753", -2731 => x"72753485", -2732 => x"0b800c8a", -2733 => x"3d0d0476", -2734 => x"08802e0b", -2735 => x"0b0b0b9d", -2736 => x"38800877", -2737 => x"0c9b7570", -2738 => x"81055734", -2739 => x"a8757081", -2740 => x"05573480", -2741 => x"c2757081", -2742 => x"05573483", -2743 => x"59777534", -2744 => x"8119800c", -2745 => x"8a3d0d04", -2746 => x"fa3d0d78", -2747 => x"0b0b82f4", -2748 => x"ec085455", -2749 => x"b8130880", -2750 => x"2e0b0b0b", -2751 => x"81dc388c", -2752 => x"15227083", -2753 => x"ffff0670", -2754 => x"832a8132", -2755 => x"70810651", -2756 => x"55555672", -2757 => x"802e0b0b", -2758 => x"0b80f038", -2759 => x"73842a81", -2760 => x"32810657", -2761 => x"ff53760b", -2762 => x"0b0b8193", -2763 => x"3873822a", -2764 => x"70810651", -2765 => x"5372802e", -2766 => x"0b0b0b80", -2767 => x"c638b015", -2768 => x"08547380", -2769 => x"2e0b0b0b", -2770 => x"0ba53880", -2771 => x"c0155373", -2772 => x"732e0b0b", -2773 => x"0b0b9438", -2774 => x"73520b0b", -2775 => x"82f4ec08", -2776 => x"510b0b0b", -2777 => x"b5d23f8c", -2778 => x"15225676", -2779 => x"b0160c75", -2780 => x"db065372", -2781 => x"8c162380", -2782 => x"0b84160c", -2783 => x"90150875", -2784 => x"0c725675", -2785 => x"88075372", -2786 => x"8c162390", -2787 => x"1508802e", -2788 => x"0b0b0b80", -2789 => x"d3388c15", -2790 => x"22708106", -2791 => x"5553730b", -2792 => x"0b0b0ba2", -2793 => x"38720a10", -2794 => x"0a708106", -2795 => x"5153720b", -2796 => x"0b0b0b85", -2797 => x"38941508", -2798 => x"54738816", -2799 => x"0c805372", -2800 => x"800c883d", -2801 => x"0d04800b", -2802 => x"88160c94", -2803 => x"15083098", -2804 => x"160c8053", -2805 => x"0b0b0b0b", -2806 => x"e6397251", -2807 => x"0b0b0baf", -2808 => x"fe3f0b0b", -2809 => x"0bfe9839", -2810 => x"74510b0b", -2811 => x"80c4ef3f", -2812 => x"8c152270", -2813 => x"81065553", -2814 => x"73802e0b", -2815 => x"0b0bffa5", -2816 => x"380b0b0b", -2817 => x"0bc039ef", -2818 => x"3d0d6365", -2819 => x"9011085e", -2820 => x"40408053", -2821 => x"7b609005", -2822 => x"08240b0b", -2823 => x"0b81d038", -2824 => x"941f70ff", -2825 => x"1e70822b", -2826 => x"73116494", -2827 => x"05705c43", -2828 => x"5f610570", -2829 => x"087f0881", -2830 => x"0557555c", -2831 => x"5e42570b", -2832 => x"0b81ebf8", -2833 => x"3f80085d", -2834 => x"80080b0b", -2835 => x"0b81a738", -2836 => x"7e527f51", -2837 => x"0b0b80e9", -2838 => x"803f800b", -2839 => x"8008240b", -2840 => x"0b0b8189", -2841 => x"38811d5d", -2842 => x"80707f63", -2843 => x"5a585b58", -2844 => x"76708405", -2845 => x"58087083", -2846 => x"ffff067b", -2847 => x"0571902a", -2848 => x"71902a05", -2849 => x"70902a5d", -2850 => x"5283ffff", -2851 => x"06821822", -2852 => x"7072311b", -2853 => x"585b5483", -2854 => x"ffff0676", -2855 => x"22707231", -2856 => x"77902c05", -2857 => x"70902c5b", -2858 => x"52435372", -2859 => x"76237482", -2860 => x"17238416", -2861 => x"567a7727", -2862 => x"0b0b0bff", -2863 => x"b3387b10", -2864 => x"101e5978", -2865 => x"080b0b0b", -2866 => x"0ba338fc", -2867 => x"19597d79", -2868 => x"270b0b0b", -2869 => x"0b923878", -2870 => x"080b0b0b", -2871 => x"0b8a38ff", -2872 => x"1c5c0b0b", -2873 => x"0b0be439", -2874 => x"7b609005", -2875 => x"0c7c5372", -2876 => x"800c933d", -2877 => x"0d048070", -2878 => x"5b587670", -2879 => x"84055808", -2880 => x"7083ffff", -2881 => x"06707f29", -2882 => x"1c72902a", -2883 => x"60297190", -2884 => x"2a057090", -2885 => x"2a5e5283", -2886 => x"ffff0682", -2887 => x"19227072", -2888 => x"311c5945", -2889 => x"5283ffff", -2890 => x"06772270", -2891 => x"72317890", -2892 => x"2c057090", -2893 => x"2c5c5256", -2894 => x"51537276", -2895 => x"23748217", -2896 => x"23841656", -2897 => x"7a77270b", -2898 => x"0b0bffae", -2899 => x"3878080b", -2900 => x"0b0bfdfc", -2901 => x"38fc1959", -2902 => x"7d79270b", -2903 => x"0b0b0b92", -2904 => x"3878080b", -2905 => x"0b0b0b8a", -2906 => x"38ff1c5c", -2907 => x"0b0b0b0b", -2908 => x"e4397b60", -2909 => x"90050c0b", -2910 => x"0b0bfdd4", -2911 => x"398c08c8", -2912 => x"3d0dbc3d", -2913 => x"0880c03d", -2914 => x"0880c23d", -2915 => x"0880c53d", -2916 => x"0880c73d", -2917 => x"088c0c5d", -2918 => x"4b434080", -2919 => x"0bbe3d08", -2920 => x"80c03d08", -2921 => x"5bba3d0c", -2922 => x"79bb3d0c", -2923 => x"6080c005", -2924 => x"08574875", -2925 => x"682e0981", -2926 => x"060b0b0b", -2927 => x"80ea38b8", -2928 => x"3d085780", -2929 => x"77240b0b", -2930 => x"0b818c38", -2931 => x"677a0c76", -2932 => x"9ffe0a06", -2933 => x"56759ffe", -2934 => x"0a2e0b0b", -2935 => x"0b819838", -2936 => x"b83d08ba", -2937 => x"3d085a58", -2938 => x"80568076", -2939 => x"54547751", -2940 => x"78520b0b", -2941 => x"81d6f23f", -2942 => x"80080b0b", -2943 => x"0b81c638", -2944 => x"80c13d08", -2945 => x"5881780c", -2946 => x"0b0b82f0", -2947 => x"f05f8c08", -2948 => x"802e0b0b", -2949 => x"0b0b8638", -2950 => x"811f8c08", -2951 => x"0c7e5675", -2952 => x"800cba3d", -2953 => x"0d8c0c04", -2954 => x"7f80c405", -2955 => x"0884170c", -2956 => x"816080c4", -2957 => x"05082b88", -2958 => x"170c7552", -2959 => x"7f510b0b", -2960 => x"80d8ad3f", -2961 => x"676080c0", -2962 => x"050cb83d", -2963 => x"08577680", -2964 => x"250b0b0b", -2965 => x"fef63881", -2966 => x"7a0c76fe", -2967 => x"0a0670ba", -2968 => x"3d0c709f", -2969 => x"fe0a0657", -2970 => x"57759ffe", -2971 => x"0a2e0981", -2972 => x"060b0b0b", -2973 => x"feea3880", -2974 => x"c13d0856", -2975 => x"80ce8f76", -2976 => x"0cb93d08", -2977 => x"0b0b0b84", -2978 => x"c93876bf", -2979 => x"ffff060b", -2980 => x"0b82f1a4", -2981 => x"4056750b", -2982 => x"0b0b84b6", -2983 => x"388c0880", -2984 => x"2e0b0b0b", -2985 => x"fef73883", -2986 => x"1f337f88", -2987 => x"05585675", -2988 => x"0b0b0b0b", -2989 => x"8438831f", -2990 => x"57768c08", -2991 => x"0c7e560b", -2992 => x"0b0bfedb", -2993 => x"39ba3dff", -2994 => x"b41156ff", -2995 => x"b0055477", -2996 => x"5278537f", -2997 => x"510b0b80", -2998 => x"eaa43f80", -2999 => x"08b93d08", -3000 => x"70942a8f", -3001 => x"ff065e59", -3002 => x"417b0b0b", -3003 => x"0b83ef38", -3004 => x"a73d08a7", -3005 => x"3d080588", -3006 => x"b2115d56", -3007 => x"a07c250b", -3008 => x"0b0b8ff4", -3009 => x"3880c07c", -3010 => x"31889217", -3011 => x"79722bbc", -3012 => x"3d08722a", -3013 => x"07b53d71", -3014 => x"5670555d", -3015 => x"5157570b", -3016 => x"0b81dfa9", -3017 => x"3fb23d08", -3018 => x"b43d08b2", -3019 => x"3d5d5a58", -3020 => x"8076240b", -3021 => x"0b0b93f5", -3022 => x"3877b73d", -3023 => x"0c78b83d", -3024 => x"0cb63d08", -3025 => x"90ff0a05", -3026 => x"b73d0cf7", -3027 => x"cd1c5c81", -3028 => x"4ebffc0a", -3029 => x"56807655", -3030 => x"55b63d08", -3031 => x"b83d0858", -3032 => x"5276537a", -3033 => x"510b0b81", -3034 => x"a2803f83", -3035 => x"feca8fa7", -3036 => x"56869bbd", -3037 => x"86e17655", -3038 => x"55b03d08", -3039 => x"b23d0858", -3040 => x"52765379", -3041 => x"510b0b81", -3042 => x"a3933f83", -3043 => x"fe9a94a8", -3044 => x"56f8db83", -3045 => x"91b37655", -3046 => x"55b23d08", -3047 => x"b43d0858", -3048 => x"527653ba", -3049 => x"3dd00551", -3050 => x"0b0b81a0", -3051 => x"963fae3d", -3052 => x"08b03d08", -3053 => x"7d54ae3d", -3054 => x"535a580b", -3055 => x"0b81de8d", -3056 => x"3faa3d4c", -3057 => x"83fecd88", -3058 => x"93568584", -3059 => x"fdf3fb76", -3060 => x"5555ac3d", -3061 => x"08ae3d08", -3062 => x"58527653", -3063 => x"6b510b0b", -3064 => x"81a2ba3f", -3065 => x"a83dab3d", -3066 => x"08ad3d08", -3067 => x"59557756", -3068 => x"78537954", -3069 => x"7052450b", -3070 => x"0b819fc7", -3071 => x"3fa83d08", -3072 => x"aa3d0871", -3073 => x"5370545f", -3074 => x"5d0b0b81", -3075 => x"dfdf3f80", -3076 => x"08438056", -3077 => x"80765454", -3078 => x"7c517d52", -3079 => x"0b0b81d9", -3080 => x"843f800b", -3081 => x"8008240b", -3082 => x"0b0b8eae", -3083 => x"38810ba2", -3084 => x"3d0c6296", -3085 => x"260b0b0b", -3086 => x"0bb23862", -3087 => x"1010100b", -3088 => x"0b82f2d8", -3089 => x"05841108", -3090 => x"71085555", -3091 => x"b93d08bb", -3092 => x"3d085952", -3093 => x"5676520b", -3094 => x"0b81d8c9", -3095 => x"3f800b80", -3096 => x"08246371", -3097 => x"31445680", -3098 => x"0ba23d0c", -3099 => x"a73d087c", -3100 => x"31ff055a", -3101 => x"807a454b", -3102 => x"6a7a240b", -3103 => x"0b0b8da9", -3104 => x"38806324", -3105 => x"0b0b0ba0", -3106 => x"8b38800b", -3107 => x"a63d0c62", -3108 => x"4f636305", -3109 => x"44896227", -3110 => x"0b0b0b0b", -3111 => x"83388042", -3112 => x"81588562", -3113 => x"250b0b0b", -3114 => x"0b873861", -3115 => x"fc054280", -3116 => x"58810ba1", -3117 => x"3d0cff70", -3118 => x"a53d0c46", -3119 => x"6185260b", -3120 => x"0b0b82bd", -3121 => x"38611010", -3122 => x"0b0b82f1", -3123 => x"b0055675", -3124 => x"08040b0b", -3125 => x"82f0f85f", -3126 => x"0b0b0bfb", -3127 => x"c039b83d", -3128 => x"08ba3d08", -3129 => x"58b73d0c", -3130 => x"76b83d0c", -3131 => x"b63d08fc", -3132 => x"0a069ffc", -3133 => x"0a07b73d", -3134 => x"0cf8811c", -3135 => x"5c804eb2", -3136 => x"3db13d5c", -3137 => x"5abffc0a", -3138 => x"56807655", -3139 => x"55b63d08", -3140 => x"b83d0858", -3141 => x"5276537a", -3142 => x"510b0b81", -3143 => x"9ecc3f83", -3144 => x"feca8fa7", -3145 => x"56869bbd", -3146 => x"86e17655", -3147 => x"55b03d08", -3148 => x"b23d0858", -3149 => x"52765379", -3150 => x"510b0b81", -3151 => x"9fdf3f83", -3152 => x"fe9a94a8", -3153 => x"56f8db83", -3154 => x"91b37655", -3155 => x"55b23d08", -3156 => x"b43d0858", -3157 => x"527653ba", -3158 => x"3dd00551", -3159 => x"0b0b819c", -3160 => x"e23fae3d", -3161 => x"08b03d08", -3162 => x"7d54ae3d", -3163 => x"535a580b", -3164 => x"0b81dad9", -3165 => x"3faa3d4c", -3166 => x"83fecd88", -3167 => x"93568584", -3168 => x"fdf3fb76", -3169 => x"5555ac3d", -3170 => x"08ae3d08", -3171 => x"58527653", -3172 => x"6b510b0b", -3173 => x"819f863f", -3174 => x"a83dab3d", -3175 => x"08ad3d08", -3176 => x"59557756", -3177 => x"78537954", -3178 => x"7052450b", -3179 => x"0b819c93", -3180 => x"3fa83d08", -3181 => x"aa3d0871", -3182 => x"5370545f", -3183 => x"5d0b0b81", -3184 => x"dcab3f80", -3185 => x"08438056", -3186 => x"80765454", -3187 => x"7c517d52", -3188 => x"0b0b81d5", -3189 => x"d03f8008", -3190 => x"80250b0b", -3191 => x"0bfcce38", -3192 => x"0b0b0b8a", -3193 => x"f539800b", -3194 => x"a13d0c68", -3195 => x"63058111", -3196 => x"70485da4", -3197 => x"3d0c7b80", -3198 => x"240b0b0b", -3199 => x"0b833881", -3200 => x"5c845a80", -3201 => x"6080c405", -3202 => x"0c987c26", -3203 => x"0b0b0b0b", -3204 => x"9b388057", -3205 => x"81177a10", -3206 => x"9411585b", -3207 => x"577b7627", -3208 => x"0b0b0b0b", -3209 => x"ef387660", -3210 => x"80c4050c", -3211 => x"7f80c405", -3212 => x"08527f51", -3213 => x"0b0b80cf", -3214 => x"903f8008", -3215 => x"6080c005", -3216 => x"0c800880", -3217 => x"088e6827", -3218 => x"58404d77", -3219 => x"802e0b0b", -3220 => x"0b86fd38", -3221 => x"75802e0b", -3222 => x"0b0b86f4", -3223 => x"38b83d08", -3224 => x"ba3d0871", -3225 => x"b93d0c70", -3226 => x"ba3d0c64", -3227 => x"a53d0c67", -3228 => x"a73d0c5a", -3229 => x"58825c80", -3230 => x"63250b0b", -3231 => x"0b8cae38", -3232 => x"62832b80", -3233 => x"f8060b0b", -3234 => x"82f2d811", -3235 => x"080b0b82", -3236 => x"f2dc1208", -3237 => x"65842c70", -3238 => x"842a7081", -3239 => x"0651545d", -3240 => x"405e5675", -3241 => x"0b0b0b8a", -3242 => x"8a387980", -3243 => x"2e0b0b0b", -3244 => x"0ba8380b", -3245 => x"0b82f2b0", -3246 => x"58798106", -3247 => x"56750b0b", -3248 => x"0b88f138", -3249 => x"79812c88", -3250 => x"19595a79", -3251 => x"0b0b0b0b", -3252 => x"e838b83d", -3253 => x"08ba3d08", -3254 => x"5a587c54", -3255 => x"7d557752", -3256 => x"78536451", -3257 => x"0b0b81bb", -3258 => x"b43fa83d", -3259 => x"08aa3d08", -3260 => x"71bb3d0c", -3261 => x"70bc3d0c", -3262 => x"5a58a13d", -3263 => x"08802e0b", -3264 => x"0b0b80eb", -3265 => x"38805a9f", -3266 => x"fc0a5680", -3267 => x"76545477", -3268 => x"5178520b", -3269 => x"0b81d38d", -3270 => x"3f798008", -3271 => x"240b0b0b", -3272 => x"8def3880", -3273 => x"66250b0b", -3274 => x"0b80c438", -3275 => x"79802e0b", -3276 => x"0b0b0bbb", -3277 => x"38800ba4", -3278 => x"3d08250b", -3279 => x"0b0b84f8", -3280 => x"38a33d08", -3281 => x"63ff0544", -3282 => x"4680c882", -3283 => x"0a568076", -3284 => x"55557752", -3285 => x"78536451", -3286 => x"0b0b819b", -3287 => x"c03fa83d", -3288 => x"08aa3d08", -3289 => x"5ab93d0c", -3290 => x"78ba3d0c", -3291 => x"811c5c7b", -3292 => x"5264510b", -3293 => x"0b81d6d5", -3294 => x"3fb83d08", -3295 => x"ba3d0858", -3296 => x"547655a8", -3297 => x"3d08aa3d", -3298 => x"08585276", -3299 => x"536b510b", -3300 => x"0b819b89", -3301 => x"3f80f082", -3302 => x"0a568076", -3303 => x"5555aa3d", -3304 => x"08ac3d08", -3305 => x"58527653", -3306 => x"ac3d510b", -3307 => x"0b819893", -3308 => x"3fac3d08", -3309 => x"ae3d0858", -3310 => x"b53d0c76", -3311 => x"b63d0cb4", -3312 => x"3d0886bf", -3313 => x"0a05b53d", -3314 => x"0c65802e", -3315 => x"0b0b0b9b", -3316 => x"c9386f80", -3317 => x"2e0b0b0b", -3318 => x"99e23865", -3319 => x"1010100b", -3320 => x"0b82f2d0", -3321 => x"05841108", -3322 => x"71085656", -3323 => x"568ffc0a", -3324 => x"56807653", -3325 => x"5364510b", -3326 => x"0b81b9a1", -3327 => x"3fb43d08", -3328 => x"b63d0858", -3329 => x"547655a8", -3330 => x"3d08aa3d", -3331 => x"08585276", -3332 => x"536b510b", -3333 => x"0b8198d2", -3334 => x"3faa3d08", -3335 => x"ac3d0858", -3336 => x"b53d0c76", -3337 => x"b63d0c80", -3338 => x"0bb93d08", -3339 => x"bb3d085b", -3340 => x"595c80c8", -3341 => x"820a5d80", -3342 => x"5e775178", -3343 => x"520b0b81", -3344 => x"d7ab3f80", -3345 => x"08800853", -3346 => x"65525a0b", -3347 => x"0b81d4fd", -3348 => x"3fa83d08", -3349 => x"aa3d0858", -3350 => x"547655b8", -3351 => x"3d08ba3d", -3352 => x"08585276", -3353 => x"536b510b", -3354 => x"0b8197fe", -3355 => x"3faa3d08", -3356 => x"ac3d085a", -3357 => x"b93d0c78", -3358 => x"ba3d0cb0", -3359 => x"1a56757f", -3360 => x"70810541", -3361 => x"34b83d08", -3362 => x"ba3d08b6", -3363 => x"3d08b83d", -3364 => x"085a5578", -3365 => x"56715370", -3366 => x"545a580b", -3367 => x"0b81d085", -3368 => x"3f800b80", -3369 => x"08240b0b", -3370 => x"0b87d438", -3371 => x"77547855", -3372 => x"9ffc0a56", -3373 => x"80765353", -3374 => x"64510b0b", -3375 => x"8197ab3f", -3376 => x"b43d08b6", -3377 => x"3d087155", -3378 => x"7056aa3d", -3379 => x"08ac3d08", -3380 => x"5a537854", -3381 => x"5a580b0b", -3382 => x"81cfca3f", -3383 => x"800b8008", -3384 => x"240b0b0b", -3385 => x"86e63881", -3386 => x"1c5c7b66", -3387 => x"250b0b0b", -3388 => x"81c6387c", -3389 => x"547d5577", -3390 => x"5278536b", -3391 => x"510b0b81", -3392 => x"989b3faa", -3393 => x"3d08ac3d", -3394 => x"0858b53d", -3395 => x"0c76b63d", -3396 => x"0c7c547d", -3397 => x"55b83d08", -3398 => x"ba3d0858", -3399 => x"52765364", -3400 => x"510b0b81", -3401 => x"97f73fa8", -3402 => x"3d08aa3d", -3403 => x"0871bb3d", -3404 => x"0c70bc3d", -3405 => x"0c5a580b", -3406 => x"0b0bfdfd", -3407 => x"398ffc0a", -3408 => x"58807855", -3409 => x"7056b53d", -3410 => x"08b73d08", -3411 => x"59537754", -3412 => x"6552590b", -3413 => x"0b8194eb", -3414 => x"3fa83d08", -3415 => x"aa3d0858", -3416 => x"537654b8", -3417 => x"3d08ba3d", -3418 => x"08585176", -3419 => x"520b0b81", -3420 => x"cc9f3f80", -3421 => x"0880240b", -3422 => x"0b0b85d0", -3423 => x"38b43d08", -3424 => x"b63d0858", -3425 => x"54765577", -3426 => x"5278536b", -3427 => x"510b0b81", -3428 => x"95d83faa", -3429 => x"3d08ac3d", -3430 => x"08585376", -3431 => x"54b83d08", -3432 => x"ba3d0858", -3433 => x"5176520b", -3434 => x"0b81cdf9", -3435 => x"3f800b80", -3436 => x"08240b0b", -3437 => x"0b97cb38", -3438 => x"6cb73d08", -3439 => x"b93d085b", -3440 => x"ba3d0c79", -3441 => x"bb3d0ca3", -3442 => x"3d08a63d", -3443 => x"0848445f", -3444 => x"800ba73d", -3445 => x"08575877", -3446 => x"76240b0b", -3447 => x"0b0b8338", -3448 => x"81588078", -3449 => x"0657628e", -3450 => x"240b0b0b", -3451 => x"89ad3881", -3452 => x"70790658", -3453 => x"5976802e", -3454 => x"0b0b0b89", -3455 => x"9e386210", -3456 => x"10100b0b", -3457 => x"82f2d805", -3458 => x"70088412", -3459 => x"08806c24", -3460 => x"53405e56", -3461 => x"8066250b", -3462 => x"0b0b86c9", -3463 => x"38810bb9", -3464 => x"3d08bb3d", -3465 => x"085b595c", -3466 => x"7c547d55", -3467 => x"77527853", -3468 => x"64510b0b", -3469 => x"81b4e63f", -3470 => x"a83d08aa", -3471 => x"3d085851", -3472 => x"76520b0b", -3473 => x"81d3a63f", -3474 => x"80088008", -3475 => x"5365525a", -3476 => x"0b0b81d0", -3477 => x"f83f7c54", -3478 => x"7d55a83d", -3479 => x"08aa3d08", -3480 => x"58527653", -3481 => x"6b510b0b", -3482 => x"8195b23f", -3483 => x"aa3d08ac", -3484 => x"3d085854", -3485 => x"7655b83d", -3486 => x"08ba3d08", -3487 => x"58527653", -3488 => x"ac3d510b", -3489 => x"0b8193e2", -3490 => x"3fac3d08", -3491 => x"ae3d085a", -3492 => x"b93d0c78", -3493 => x"ba3d0cb0", -3494 => x"1a56757f", -3495 => x"70810541", -3496 => x"347b662e", -3497 => x"0b0b0b82", -3498 => x"c23880c8", -3499 => x"820a5680", -3500 => x"765555b8", -3501 => x"3d08ba3d", -3502 => x"08585276", -3503 => x"5364510b", -3504 => x"0b8194d9", -3505 => x"3fa83d08", -3506 => x"aa3d0871", -3507 => x"bb3d0c70", -3508 => x"bc3d0c5a", -3509 => x"58805680", -3510 => x"76545477", -3511 => x"5178520b", -3512 => x"0b81c585", -3513 => x"3f800880", -3514 => x"2e0b0b0b", -3515 => x"83913881", -3516 => x"1c5c0b0b", -3517 => x"0bfeb139", -3518 => x"a07c31ba", -3519 => x"3d08712b", -3520 => x"b43d7155", -3521 => x"70545c51", -3522 => x"560b0b81", -3523 => x"cfbf3fb2", -3524 => x"3d08b43d", -3525 => x"08b23d5d", -3526 => x"5a587580", -3527 => x"250b0b0b", -3528 => x"f097380b", -3529 => x"0b0b8485", -3530 => x"3979304b", -3531 => x"80440b0b", -3532 => x"0bf2ce39", -3533 => x"811c7808", -3534 => x"841a0859", -3535 => x"5577567d", -3536 => x"537e5465", -3537 => x"525c0b0b", -3538 => x"8193d23f", -3539 => x"a83d08aa", -3540 => x"3d085f5d", -3541 => x"0b0b0bf6", -3542 => x"eb396252", -3543 => x"64510b0b", -3544 => x"81ceea3f", -3545 => x"7c537d54", -3546 => x"a83d08aa", -3547 => x"3d085851", -3548 => x"76520b0b", -3549 => x"81c6863f", -3550 => x"80083070", -3551 => x"8008079f", -3552 => x"2a647131", -3553 => x"4551560b", -3554 => x"0b0bf1a1", -3555 => x"39800ba1", -3556 => x"3d0c8069", -3557 => x"250b0b0b", -3558 => x"84e73868", -3559 => x"69a53d0c", -3560 => x"69475c0b", -3561 => x"0b0bf4d9", -3562 => x"39925c80", -3563 => x"490b0b0b", -3564 => x"f4cf3979", -3565 => x"8f060b0b", -3566 => x"82f2d008", -3567 => x"0b0b82f2", -3568 => x"d4085955", -3569 => x"77567853", -3570 => x"79546552", -3571 => x"5a0b0b81", -3572 => x"b1cb3fa8", -3573 => x"3d08aa3d", -3574 => x"0871bb3d", -3575 => x"0c70bc3d", -3576 => x"0c5a5883", -3577 => x"5c0b0b0b", -3578 => x"f5c039b8", -3579 => x"3d08ba3d", -3580 => x"08715670", -3581 => x"57585276", -3582 => x"5364510b", -3583 => x"0b818fc3", -3584 => x"3fa83d08", -3585 => x"aa3d0871", -3586 => x"bb3d0c70", -3587 => x"bc3d0c7e", -3588 => x"557f5671", -3589 => x"5370545a", -3590 => x"580b0b81", -3591 => x"c6f33f80", -3592 => x"0880240b", -3593 => x"0b0b0ba4", -3594 => x"387c537d", -3595 => x"54775178", -3596 => x"520b0b81", -3597 => x"c2b33f80", -3598 => x"080b0b0b", -3599 => x"80c13879", -3600 => x"81065675", -3601 => x"802e0b0b", -3602 => x"0b0bb438", -3603 => x"ff1f7033", -3604 => x"575f75b9", -3605 => x"2e098106", -3606 => x"0b0b0b0b", -3607 => x"94387e6d", -3608 => x"2e098106", -3609 => x"0b0b0b0b", -3610 => x"e3386281", -3611 => x"0543b06d", -3612 => x"347e7f81", -3613 => x"05713381", -3614 => x"05584057", -3615 => x"75773460", -3616 => x"527f510b", -3617 => x"0b80c3e8", -3618 => x"3f807f34", -3619 => x"80c13d08", -3620 => x"63810571", -3621 => x"0c568c08", -3622 => x"802e0b0b", -3623 => x"0b0b8538", -3624 => x"7e8c080c", -3625 => x"6c800cba", -3626 => x"3d0d8c0c", -3627 => x"0462305b", -3628 => x"7a802e0b", -3629 => x"0b0bf4c2", -3630 => x"387a832b", -3631 => x"80f8060b", -3632 => x"0b82f2dc", -3633 => x"11080b0b", -3634 => x"82f2d812", -3635 => x"08565678", -3636 => x"53795465", -3637 => x"52560b0b", -3638 => x"8190c23f", -3639 => x"a83d08aa", -3640 => x"3d0871bb", -3641 => x"3d0c70bc", -3642 => x"3d0c7c84", -3643 => x"2c5c5a58", -3644 => x"79802e0b", -3645 => x"0b0bf482", -3646 => x"380b0b82", -3647 => x"f2b07a81", -3648 => x"06575b75", -3649 => x"0b0b0b82", -3650 => x"90387981", -3651 => x"2c881c5c", -3652 => x"5a79802e", -3653 => x"0b0b0bf3", -3654 => x"e1387981", -3655 => x"06567580", -3656 => x"2e0b0b0b", -3657 => x"0be4380b", -3658 => x"0b0b81ed", -3659 => x"399f820a", -3660 => x"56807655", -3661 => x"55775278", -3662 => x"537a510b", -3663 => x"0b818d83", -3664 => x"3fb03d08", -3665 => x"b23d085a", -3666 => x"b73d0c78", -3667 => x"b83d0cb6", -3668 => x"3d0890ff", -3669 => x"0a05b73d", -3670 => x"0cf7cd1c", -3671 => x"5c814e0b", -3672 => x"0b0bebed", -3673 => x"39757906", -3674 => x"5675802e", -3675 => x"0b0b0bf9", -3676 => x"ac388070", -3677 => x"484a6966", -3678 => x"240b0b0b", -3679 => x"82943880", -3680 => x"d0820a56", -3681 => x"80765555", -3682 => x"7c527d53", -3683 => x"64510b0b", -3684 => x"818f8a3f", -3685 => x"a83d08aa", -3686 => x"3d085853", -3687 => x"7654b83d", -3688 => x"08ba3d08", -3689 => x"58517652", -3690 => x"0b0b81c8", -3691 => x"8c3f6980", -3692 => x"08250b0b", -3693 => x"0b81db38", -3694 => x"6c5fb17f", -3695 => x"70810541", -3696 => x"34628105", -3697 => x"4366527f", -3698 => x"510b0b80", -3699 => x"c1a23f69", -3700 => x"802e0b0b", -3701 => x"0bfda838", -3702 => x"67307069", -3703 => x"079f2a51", -3704 => x"56676a2e", -3705 => x"0b0b0b0b", -3706 => x"8838750b", -3707 => x"0b0b80e5", -3708 => x"3869527f", -3709 => x"510b0b80", -3710 => x"c0f63f0b", -3711 => x"0b0bfcff", -3712 => x"39817071", -3713 => x"a63d0c71", -3714 => x"485d490b", -3715 => x"0b0beff1", -3716 => x"39815a0b", -3717 => x"0b0bf28b", -3718 => x"39811c7b", -3719 => x"08841d08", -3720 => x"59557756", -3721 => x"78537954", -3722 => x"65525c0b", -3723 => x"0b818ded", -3724 => x"3fa83d08", -3725 => x"aa3d0871", -3726 => x"bb3d0c70", -3727 => x"bc3d0c7b", -3728 => x"812c881e", -3729 => x"5e5c5a58", -3730 => x"790b0b0b", -3731 => x"fdcc380b", -3732 => x"0b0bf1a6", -3733 => x"3967527f", -3734 => x"510b0b80", -3735 => x"c0923f69", -3736 => x"527f510b", -3737 => x"0b80c088", -3738 => x"3f0b0b0b", -3739 => x"fc913977", -3740 => x"810a3253", -3741 => x"78547951", -3742 => x"7a520b0b", -3743 => x"81c4a63f", -3744 => x"80088025", -3745 => x"0b0b0bf6", -3746 => x"af3879b9", -3747 => x"3d0c7aba", -3748 => x"3d0c6809", -3749 => x"430b0b0b", -3750 => x"feab396a", -3751 => x"a63d0878", -3752 => x"794b4c59", -3753 => x"596f802e", -3754 => x"0b0b0b80", -3755 => x"d0388162", -3756 => x"250b0b0b", -3757 => x"8ec73865", -3758 => x"ff05a63d", -3759 => x"08713159", -3760 => x"5aa53d08", -3761 => x"7a250b0b", -3762 => x"0b0b9438", -3763 => x"79a63d08", -3764 => x"316f11a1", -3765 => x"3d0ca63d", -3766 => x"0805a63d", -3767 => x"0c765865", -3768 => x"5c806624", -3769 => x"0b0b0b84", -3770 => x"cb386a1c", -3771 => x"641d454b", -3772 => x"81527f51", -3773 => x"0b0b80c4", -3774 => x"de3f8008", -3775 => x"4a788024", -3776 => x"56806425", -3777 => x"0b0b0b0b", -3778 => x"a3387580", -3779 => x"2e0b0b0b", -3780 => x"0b9a3863", -3781 => x"5c786425", -3782 => x"0b0b0b0b", -3783 => x"8338785c", -3784 => x"6a7c3179", -3785 => x"7d31657e", -3786 => x"31465a4b", -3787 => x"800ba63d", -3788 => x"08250b0b", -3789 => x"0b80cb38", -3790 => x"6f802e0b", -3791 => x"0b0b8ae5", -3792 => x"38807825", -3793 => x"0b0b0b0b", -3794 => x"ac387753", -3795 => x"69527f51", -3796 => x"0b0b80c7", -3797 => x"943f8008", -3798 => x"61548008", -3799 => x"5360524a", -3800 => x"0b0b80c4", -3801 => x"8e3f8008", -3802 => x"61536052", -3803 => x"560b0b0b", -3804 => x"bdfe3f75", -3805 => x"41a53d08", -3806 => x"78315a79", -3807 => x"0b0b0b83", -3808 => x"9e388152", -3809 => x"7f510b0b", -3810 => x"80c3cc3f", -3811 => x"80084780", -3812 => x"6f250b0b", -3813 => x"0b0b9138", -3814 => x"6e538008", -3815 => x"527f510b", -3816 => x"0b80c6c5", -3817 => x"3f800847", -3818 => x"80588162", -3819 => x"250b0b0b", -3820 => x"829b3863", -3821 => x"81059f06", -3822 => x"5c6e0b0b", -3823 => x"0b81ee38", -3824 => x"7b802e0b", -3825 => x"0b0b0b85", -3826 => x"38a07c31", -3827 => x"5c847c25", -3828 => x"0b0b0b88", -3829 => x"c238fc1c", -3830 => x"6b11711b", -3831 => x"5b4c6405", -3832 => x"44806b25", -3833 => x"0b0b0b0b", -3834 => x"90386a53", -3835 => x"60527f51", -3836 => x"0b0b80c7", -3837 => x"f23f8008", -3838 => x"41806425", -3839 => x"0b0b0b0b", -3840 => x"90386353", -3841 => x"66527f51", -3842 => x"0b0b80c7", -3843 => x"da3f8008", -3844 => x"47a13d08", -3845 => x"0b0b0b80", -3846 => x"da388066", -3847 => x"25568262", -3848 => x"250b0b0b", -3849 => x"82c73875", -3850 => x"802e0b0b", -3851 => x"0b82be38", -3852 => x"8066240b", -3853 => x"0b0bfcda", -3854 => x"38805485", -3855 => x"5366527f", -3856 => x"510b0b0b", -3857 => x"bcce3f80", -3858 => x"08800853", -3859 => x"6152470b", -3860 => x"0b80c985", -3861 => x"3f800b80", -3862 => x"08250b0b", -3863 => x"0bfcb338", -3864 => x"6c5fb17f", -3865 => x"70810541", -3866 => x"34628105", -3867 => x"430b0b0b", -3868 => x"fad33966", -3869 => x"5260510b", -3870 => x"0b80c8dd", -3871 => x"3f800880", -3872 => x"250b0b0b", -3873 => x"ff943862", -3874 => x"ff054380", -3875 => x"548a5360", -3876 => x"527f510b", -3877 => x"0b0bbbfc", -3878 => x"3f800841", -3879 => x"6f0b0b0b", -3880 => x"81b038a3", -3881 => x"3d08460b", -3882 => x"0b0bfeee", -3883 => x"39669005", -3884 => x"08101067", -3885 => x"05901108", -3886 => x"52560b0b", -3887 => x"0bbec93f", -3888 => x"63800831", -3889 => x"9f065c0b", -3890 => x"0b0bfdf4", -3891 => x"39b93d08", -3892 => x"782e0981", -3893 => x"060b0b0b", -3894 => x"fdd938b8", -3895 => x"3d0870bf", -3896 => x"ffff0657", -3897 => x"5775782e", -3898 => x"0981060b", -3899 => x"0b0bfdc3", -3900 => x"38769ffe", -3901 => x"0a065675", -3902 => x"782e0b0b", -3903 => x"0bfdb438", -3904 => x"6a810564", -3905 => x"8105454b", -3906 => x"81648105", -3907 => x"9f065d58", -3908 => x"6e802e0b", -3909 => x"0b0bfda8", -3910 => x"380b0b0b", -3911 => x"ff8f3979", -3912 => x"5360527f", -3913 => x"510b0b80", -3914 => x"c3bf3f80", -3915 => x"08410b0b", -3916 => x"0bfccf39", -3917 => x"6a663159", -3918 => x"806b114c", -3919 => x"64054481", -3920 => x"527f510b", -3921 => x"0b80c08f", -3922 => x"3f80084a", -3923 => x"0b0b0bfb", -3924 => x"ac398054", -3925 => x"8a536952", -3926 => x"7f510b0b", -3927 => x"0bbab53f", -3928 => x"8008a43d", -3929 => x"08474a0b", -3930 => x"0b0bfdae", -3931 => x"39815c6f", -3932 => x"802e0b0b", -3933 => x"0b82bb38", -3934 => x"8079250b", -3935 => x"0b0b0b90", -3936 => x"38785369", -3937 => x"527f510b", -3938 => x"0b80c4db", -3939 => x"3f80084a", -3940 => x"6948770b", -3941 => x"0b0b82e9", -3942 => x"38815c66", -3943 => x"5260510b", -3944 => x"0b0bdce3", -3945 => x"3f8008b0", -3946 => x"05685361", -3947 => x"52570b0b", -3948 => x"80c6a63f", -3949 => x"80086a54", -3950 => x"67536052", -3951 => x"5a0b0b80", -3952 => x"c6fe3f80", -3953 => x"0856815b", -3954 => x"80088c05", -3955 => x"08802e0b", -3956 => x"0b0b8299", -3957 => x"3875527f", -3958 => x"510b0b0b", -3959 => x"b9923f7a", -3960 => x"62075675", -3961 => x"0b0b0b0b", -3962 => x"9038b93d", -3963 => x"08810656", -3964 => x"75802e0b", -3965 => x"0b0b82c8", -3966 => x"38807a24", -3967 => x"0b0b0b82", -3968 => x"da387962", -3969 => x"0756750b", -3970 => x"0b0b0b90", -3971 => x"38b93d08", -3972 => x"81065675", -3973 => x"802e0b0b", -3974 => x"0b82c038", -3975 => x"7a80240b", -3976 => x"0b0b8883", -3977 => x"38767f70", -3978 => x"81054134", -3979 => x"7b662e0b", -3980 => x"0b0b83fd", -3981 => x"3880548a", -3982 => x"5360527f", -3983 => x"510b0b0b", -3984 => x"b8d23f80", -3985 => x"0841676a", -3986 => x"2e0b0b0b", -3987 => x"83ac3880", -3988 => x"548a5367", -3989 => x"527f510b", -3990 => x"0b0bb8b8", -3991 => x"3f800848", -3992 => x"80548a53", -3993 => x"69527f51", -3994 => x"0b0b0bb8", -3995 => x"a73f8008", -3996 => x"811d5d4a", -3997 => x"66526051", -3998 => x"0b0b0bdb", -3999 => x"8a3f8008", -4000 => x"b0056853", -4001 => x"6152570b", -4002 => x"0b80c4cd", -4003 => x"3f80086a", -4004 => x"54675360", -4005 => x"525a0b0b", -4006 => x"80c5a53f", -4007 => x"80085681", -4008 => x"5b80088c", -4009 => x"05080b0b", -4010 => x"0bfeaa38", -4011 => x"0b0b0b0b", -4012 => x"bc396652", -4013 => x"7e7f8105", -4014 => x"62534056", -4015 => x"0b0b0bda", -4016 => x"c63f8008", -4017 => x"b0055776", -4018 => x"76347b66", -4019 => x"250b0b0b", -4020 => x"82df3880", -4021 => x"548a5360", -4022 => x"527f510b", -4023 => x"0b0bb7b4", -4024 => x"3f800881", -4025 => x"1d5d410b", -4026 => x"0b0b0bc6", -4027 => x"39800852", -4028 => x"60510b0b", -4029 => x"80c3e23f", -4030 => x"80085b0b", -4031 => x"0b0bfdd5", -4032 => x"39698405", -4033 => x"08527f51", -4034 => x"0b0b0bb5", -4035 => x"bc3f8008", -4036 => x"68900508", -4037 => x"10108805", -4038 => x"54688c05", -4039 => x"5380088c", -4040 => x"05524a0b", -4041 => x"0bff94e3", -4042 => x"3f815369", -4043 => x"527f510b", -4044 => x"0b80c1b3", -4045 => x"3f80084a", -4046 => x"815c0b0b", -4047 => x"0bfcdc39", -4048 => x"76b92e0b", -4049 => x"0b0b80d0", -4050 => x"38798024", -4051 => x"1757767f", -4052 => x"70810541", -4053 => x"340b0b0b", -4054 => x"f4eb3980", -4055 => x"7b250b0b", -4056 => x"0b0beb38", -4057 => x"81536052", -4058 => x"7f510b0b", -4059 => x"80c0f83f", -4060 => x"80086753", -4061 => x"80085241", -4062 => x"0b0b80c2", -4063 => x"dc3f800b", -4064 => x"8008250b", -4065 => x"0b0b80c8", -4066 => x"38811757", -4067 => x"76ba2e09", -4068 => x"81060b0b", -4069 => x"0bffb738", -4070 => x"b97f7081", -4071 => x"054134ff", -4072 => x"1f703357", -4073 => x"5f75b92e", -4074 => x"0981060b", -4075 => x"0b0b81d0", -4076 => x"387e6d2e", -4077 => x"0981060b", -4078 => x"0b0b0be3", -4079 => x"38628105", -4080 => x"6d4043b1", -4081 => x"7f708105", -4082 => x"41340b0b", -4083 => x"0bf3f639", -4084 => x"80080b0b", -4085 => x"0bfef738", -4086 => x"76810656", -4087 => x"75802e0b", -4088 => x"0b0bfeea", -4089 => x"38811757", -4090 => x"76ba2e09", -4091 => x"81060b0b", -4092 => x"0bfedb38", -4093 => x"0b0b0bff", -4094 => x"9f398054", -4095 => x"8a536952", -4096 => x"7f510b0b", -4097 => x"0bb58d3f", -4098 => x"80088008", -4099 => x"811e5e49", -4100 => x"4a0b0b0b", -4101 => x"fcde397b", -4102 => x"83240b0b", -4103 => x"0bf7c238", -4104 => x"9c1c6b11", -4105 => x"711b5b4c", -4106 => x"6405440b", -4107 => x"0b0bf7b1", -4108 => x"39815360", -4109 => x"527f510b", -4110 => x"0b0bbfab", -4111 => x"3f800867", -4112 => x"53800852", -4113 => x"410b0b80", -4114 => x"c18f3f80", -4115 => x"0880240b", -4116 => x"0b0bfecb", -4117 => x"3880080b", -4118 => x"0b0b0b8c", -4119 => x"38768106", -4120 => x"56750b0b", -4121 => x"0bfeb838", -4122 => x"ff1f7033", -4123 => x"575f75b0", -4124 => x"2e0b0b0b", -4125 => x"0bf23881", -4126 => x"1f5f0b0b", -4127 => x"0bf2c639", -4128 => x"7e7f8105", -4129 => x"71338105", -4130 => x"58405775", -4131 => x"77340b0b", -4132 => x"0bf2b239", -4133 => x"6a633163", -4134 => x"30a73d0c", -4135 => x"4b804f0b", -4136 => x"0b0bdff1", -4137 => x"39a53d08", -4138 => x"5360527f", -4139 => x"510b0b0b", -4140 => x"bcb73f80", -4141 => x"08410b0b", -4142 => x"0bf5c739", -4143 => x"65101010", -4144 => x"0b0b82f2", -4145 => x"d0058411", -4146 => x"08710856", -4147 => x"56b53d08", -4148 => x"b73d0859", -4149 => x"53567653", -4150 => x"64510b0b", -4151 => x"8180be3f", -4152 => x"a83d08aa", -4153 => x"3d0858b5", -4154 => x"3d0c76b6", -4155 => x"3d0c810b", -4156 => x"b93d08bb", -4157 => x"3d085b59", -4158 => x"5c775178", -4159 => x"520b0b81", -4160 => x"bdeb3f80", -4161 => x"08800853", -4162 => x"65525a0b", -4163 => x"0b81bbbd", -4164 => x"3fa83d08", -4165 => x"aa3d0858", -4166 => x"547655b8", -4167 => x"3d08ba3d", -4168 => x"08585276", -4169 => x"536b510b", -4170 => x"0b80febe", -4171 => x"3faa3d08", -4172 => x"ac3d085a", -4173 => x"b93d0c78", -4174 => x"ba3d0cb0", -4175 => x"1a56757f", -4176 => x"70810541", -4177 => x"347b662e", -4178 => x"0b0b0be7", -4179 => x"f038811c", -4180 => x"5c80c882", -4181 => x"0a568076", -4182 => x"5555b83d", -4183 => x"08ba3d08", -4184 => x"58527653", -4185 => x"64510b0b", -4186 => x"80ffb23f", -4187 => x"a83d08aa", -4188 => x"3d0871bb", -4189 => x"3d0c70bc", -4190 => x"3d0c5a58", -4191 => x"0b0b0bfe", -4192 => x"f839ff1f", -4193 => x"7033575f", -4194 => x"75b02e0b", -4195 => x"0b0b0bf2", -4196 => x"38811f5f", -4197 => x"0b0b0bed", -4198 => x"e6396566", -4199 => x"484a80d0", -4200 => x"820a5680", -4201 => x"765555b8", -4202 => x"3d08ba3d", -4203 => x"08585276", -4204 => x"5364510b", -4205 => x"0b80fdb2", -4206 => x"3fa83d08", -4207 => x"aa3d08b6", -4208 => x"3d08b83d", -4209 => x"08715770", -4210 => x"58735572", -4211 => x"565c5a5c", -4212 => x"5a0b0b81", -4213 => x"b3bb3f80", -4214 => x"0b800825", -4215 => x"0b0b0bf1", -4216 => x"8e3879b9", -4217 => x"3d0c7aba", -4218 => x"3d0c6c5f", -4219 => x"b17f7081", -4220 => x"05413462", -4221 => x"8105430b", -4222 => x"0b0befc9", -4223 => x"3988b316", -4224 => x"5c6d0b0b", -4225 => x"0bf1e338", -4226 => x"b60ba83d", -4227 => x"08316b11", -4228 => x"4c640544", -4229 => x"81527f51", -4230 => x"0b0b0bb6", -4231 => x"ba3f8008", -4232 => x"4a0b0b0b", -4233 => x"f1d73976", -4234 => x"b92e0b0b", -4235 => x"0bfae938", -4236 => x"81175675", -4237 => x"7f708105", -4238 => x"41340b0b", -4239 => x"0bef8639", -4240 => x"f83d0d7a", -4241 => x"5877802e", -4242 => x"0b0b0b81", -4243 => x"bd380b0b", -4244 => x"82f4ec08", -4245 => x"54b81408", -4246 => x"802e0b0b", -4247 => x"0b818238", -4248 => x"8c182270", -4249 => x"902b7090", -4250 => x"2c70832a", -4251 => x"81328106", -4252 => x"5c515754", -4253 => x"780b0b0b", -4254 => x"80df3890", -4255 => x"18085776", -4256 => x"802e0b0b", -4257 => x"0b80d238", -4258 => x"77087731", -4259 => x"77790c76", -4260 => x"83067a58", -4261 => x"5555730b", -4262 => x"0b0b0b85", -4263 => x"38941808", -4264 => x"56758819", -4265 => x"0c807525", -4266 => x"0b0b0b0b", -4267 => x"ac387453", -4268 => x"76529c18", -4269 => x"0851a418", -4270 => x"0854732d", -4271 => x"800b8008", -4272 => x"250b0b0b", -4273 => x"80df3880", -4274 => x"08177580", -4275 => x"08315657", -4276 => x"7480240b", -4277 => x"0b0b0bd6", -4278 => x"38800b80", -4279 => x"0c8a3d0d", -4280 => x"0473510b", -4281 => x"0b0b81f7", -4282 => x"3f8c1822", -4283 => x"70902b70", -4284 => x"902c7083", -4285 => x"2a813281", -4286 => x"065c5157", -4287 => x"54780b0b", -4288 => x"0b0bd638", -4289 => x"0b0b0bfe", -4290 => x"f2390b0b", -4291 => x"8184c052", -4292 => x"0b0b82f4", -4293 => x"ec08510b", -4294 => x"0b0b93b4", -4295 => x"3f800880", -4296 => x"0c8a3d0d", -4297 => x"048c1822", -4298 => x"80c00754", -4299 => x"738c1923", -4300 => x"ff0b800c", -4301 => x"8a3d0d04", -4302 => x"70725180", -4303 => x"710c800b", -4304 => x"84120c80", -4305 => x"0b88120c", -4306 => x"028e0522", -4307 => x"8c122302", -4308 => x"9205228e", -4309 => x"1223800b", -4310 => x"90120c80", -4311 => x"0b94120c", -4312 => x"800b9812", -4313 => x"0c709c12", -4314 => x"0c0b0b81", -4315 => x"d7880ba0", -4316 => x"120c0b0b", -4317 => x"81d7dd0b", -4318 => x"a4120c0b", -4319 => x"0b81d8ec", -4320 => x"0ba8120c", -4321 => x"0b0b81d9", -4322 => x"c60bac12", -4323 => x"0c5004fa", -4324 => x"3d0d7970", -4325 => x"80dc298c", -4326 => x"11547a53", -4327 => x"56570b0b", -4328 => x"0b989f3f", -4329 => x"80088008", -4330 => x"55568008", -4331 => x"802e0b0b", -4332 => x"0b0ba538", -4333 => x"80088c05", -4334 => x"54800b80", -4335 => x"080c7680", -4336 => x"0884050c", -4337 => x"73800888", -4338 => x"050c7453", -4339 => x"80527351", -4340 => x"0b0b0baa", -4341 => x"c03f7554", -4342 => x"73800c88", -4343 => x"3d0d04fc", -4344 => x"3d0d760b", -4345 => x"0b818aa8", -4346 => x"0bbc120c", -4347 => x"55810bb8", -4348 => x"160c800b", -4349 => x"84dc160c", -4350 => x"830b84e0", -4351 => x"160c84e8", -4352 => x"1584e416", -4353 => x"0c745480", -4354 => x"53845284", -4355 => x"1508510b", -4356 => x"0b0bfea4", -4357 => x"3f745481", -4358 => x"53895288", -4359 => x"1508510b", -4360 => x"0b0bfe94", -4361 => x"3f745482", -4362 => x"538a528c", -4363 => x"1508510b", -4364 => x"0b0bfe84", -4365 => x"3f863d0d", -4366 => x"04f93d0d", -4367 => x"790b0b82", -4368 => x"f4ec0854", -4369 => x"57b81308", -4370 => x"802e0b0b", -4371 => x"0b80db38", -4372 => x"84dc1356", -4373 => x"88160884", -4374 => x"1708ff05", -4375 => x"55558074", -4376 => x"240b0b0b", -4377 => x"0ba6388c", -4378 => x"15227090", -4379 => x"2b70902c", -4380 => x"51545872", -4381 => x"802e0b0b", -4382 => x"0b80e838", -4383 => x"80dc15ff", -4384 => x"15555573", -4385 => x"80250b0b", -4386 => x"0b0bdc38", -4387 => x"75085372", -4388 => x"802e0b0b", -4389 => x"0b0bab38", -4390 => x"72568816", -4391 => x"08841708", -4392 => x"ff055555", -4393 => x"0b0b0bff", -4394 => x"b5397251", -4395 => x"0b0b0bfe", -4396 => x"ae3f0b0b", -4397 => x"82f4ec08", -4398 => x"84dc0556", -4399 => x"0b0b0bff", -4400 => x"93398452", -4401 => x"76510b0b", -4402 => x"0bfdc43f", -4403 => x"8008760c", -4404 => x"8008802e", -4405 => x"0b0b0b80", -4406 => x"c4388008", -4407 => x"560b0b0b", -4408 => x"ffb83981", -4409 => x"0b8c1623", -4410 => x"72750c72", -4411 => x"88160c72", -4412 => x"84160c72", -4413 => x"90160c72", -4414 => x"94160c72", -4415 => x"98160cff", -4416 => x"0b8e1623", -4417 => x"72b0160c", -4418 => x"72b4160c", -4419 => x"7280c416", -4420 => x"0c7280c8", -4421 => x"160c7480", -4422 => x"0c893d0d", -4423 => x"048c770c", -4424 => x"800b800c", -4425 => x"893d0d04", -4426 => x"70700b0b", -4427 => x"8184c052", -4428 => x"73510b0b", -4429 => x"0b8f993f", -4430 => x"50500470", -4431 => x"0b0b82f4", -4432 => x"ec08510b", -4433 => x"0b0b0be0", -4434 => x"3f5004fb", -4435 => x"3d0d7770", -4436 => x"52560b0b", -4437 => x"0ba8f03f", -4438 => x"0b0b82fc", -4439 => x"c80b8805", -4440 => x"08841108", -4441 => x"fc06707b", -4442 => x"319fef05", -4443 => x"e08006e0", -4444 => x"80055656", -4445 => x"53a08074", -4446 => x"240b0b0b", -4447 => x"0b9d3880", -4448 => x"5275510b", -4449 => x"0b80cbba", -4450 => x"3f0b0b82", -4451 => x"fcd00815", -4452 => x"53728008", -4453 => x"2e0b0b0b", -4454 => x"0b923875", -4455 => x"510b0b0b", -4456 => x"a8a63f80", -4457 => x"5372800c", -4458 => x"873d0d04", -4459 => x"73305275", -4460 => x"510b0b80", -4461 => x"cb8c3f80", -4462 => x"08ff2e0b", -4463 => x"0b0b0bb1", -4464 => x"380b0b82", -4465 => x"fcc80b88", -4466 => x"05087575", -4467 => x"31810784", -4468 => x"120c530b", -4469 => x"0b82fc8c", -4470 => x"0874310b", -4471 => x"0b82fc8c", -4472 => x"0c75510b", -4473 => x"0b0ba7e0", -4474 => x"3f810b80", -4475 => x"0c873d0d", -4476 => x"04805275", -4477 => x"510b0b80", -4478 => x"cac83f0b", -4479 => x"0b82fcc8", -4480 => x"0b880508", -4481 => x"80087131", -4482 => x"56538f75", -4483 => x"250b0b0b", -4484 => x"ff893880", -4485 => x"080b0b82", -4486 => x"fcbc0831", -4487 => x"0b0b82fc", -4488 => x"8c0c7481", -4489 => x"0784140c", -4490 => x"75510b0b", -4491 => x"0ba7993f", -4492 => x"80530b0b", -4493 => x"0bfeee39", -4494 => x"f63d0d7c", -4495 => x"7e545b72", -4496 => x"802e0b0b", -4497 => x"0b82c838", -4498 => x"7a510b0b", -4499 => x"0ba6f83f", -4500 => x"f8138411", -4501 => x"0870fe06", -4502 => x"70138411", -4503 => x"08fc065d", -4504 => x"58595458", -4505 => x"0b0b82fc", -4506 => x"d008752e", -4507 => x"0b0b0b83", -4508 => x"b5387884", -4509 => x"160c8073", -4510 => x"8106545a", -4511 => x"727a2e0b", -4512 => x"0b0b828f", -4513 => x"38781584", -4514 => x"11088106", -4515 => x"5153720b", -4516 => x"0b0b0ba8", -4517 => x"38781757", -4518 => x"790b0b0b", -4519 => x"82a13888", -4520 => x"15085372", -4521 => x"0b0b82fc", -4522 => x"d02e0b0b", -4523 => x"0b83d738", -4524 => x"8c150870", -4525 => x"8c150c73", -4526 => x"88120c56", -4527 => x"76810784", -4528 => x"190c7618", -4529 => x"77710c53", -4530 => x"790b0b0b", -4531 => x"81b93883", -4532 => x"ff77270b", -4533 => x"0b0b81fb", -4534 => x"3876892a", -4535 => x"77832a56", -4536 => x"5372802e", -4537 => x"0b0b0b80", -4538 => x"d3387686", -4539 => x"2ab80555", -4540 => x"8473270b", -4541 => x"0b0b80c4", -4542 => x"3880db13", -4543 => x"55947327", -4544 => x"0b0b0b0b", -4545 => x"b738768c", -4546 => x"2a80ee05", -4547 => x"5580d473", -4548 => x"270b0b0b", -4549 => x"0ba63876", -4550 => x"8f2a80f7", -4551 => x"055582d4", -4552 => x"73270b0b", -4553 => x"0b0b9538", -4554 => x"76922a80", -4555 => x"fc05558a", -4556 => x"d473270b", -4557 => x"0b0b0b84", -4558 => x"3880fe55", -4559 => x"74101010", -4560 => x"0b0b82fc", -4561 => x"c8058811", -4562 => x"08555673", -4563 => x"762e0b0b", -4564 => x"0b82fa38", -4565 => x"841408fc", -4566 => x"06537673", -4567 => x"270b0b0b", -4568 => x"0b913888", -4569 => x"14085473", -4570 => x"762e0981", -4571 => x"060b0b0b", -4572 => x"0be2388c", -4573 => x"1408708c", -4574 => x"1a0c7488", -4575 => x"1a0c7888", -4576 => x"120c5677", -4577 => x"8c150c7a", -4578 => x"510b0b0b", -4579 => x"a4ba3f8c", -4580 => x"3d0d0477", -4581 => x"08787131", -4582 => x"59770588", -4583 => x"19085457", -4584 => x"720b0b82", -4585 => x"fcd02e0b", -4586 => x"0b0b80f2", -4587 => x"388c1808", -4588 => x"708c150c", -4589 => x"7388120c", -4590 => x"560b0b0b", -4591 => x"fdc73988", -4592 => x"15088c16", -4593 => x"08708c13", -4594 => x"0c578817", -4595 => x"0c0b0b0b", -4596 => x"fdea3976", -4597 => x"832a7054", -4598 => x"55807524", -4599 => x"0b0b0b81", -4600 => x"bd387282", -4601 => x"2c81712b", -4602 => x"0b0b82fc", -4603 => x"cc08070b", -4604 => x"0b82fcc8", -4605 => x"0b84050c", -4606 => x"53741010", -4607 => x"100b0b82", -4608 => x"fcc80588", -4609 => x"11085556", -4610 => x"758c190c", -4611 => x"7388190c", -4612 => x"7788170c", -4613 => x"778c150c", -4614 => x"0b0b0bfe", -4615 => x"ea39815a", -4616 => x"0b0b0bfc", -4617 => x"e0397817", -4618 => x"73810654", -4619 => x"57720b0b", -4620 => x"0b0b9838", -4621 => x"77087871", -4622 => x"31597705", -4623 => x"8c190888", -4624 => x"1a08718c", -4625 => x"120c8812", -4626 => x"0c575776", -4627 => x"81078419", -4628 => x"0c770b0b", -4629 => x"82fcc80b", -4630 => x"88050c0b", -4631 => x"0b82fcc4", -4632 => x"0877260b", -4633 => x"0b0bfe9f", -4634 => x"380b0b82", -4635 => x"fcc00852", -4636 => x"7a510b0b", -4637 => x"0bf9d43f", -4638 => x"7a510b0b", -4639 => x"0ba2c93f", -4640 => x"0b0b0bfe", -4641 => x"8a398178", -4642 => x"8c150c78", -4643 => x"88150c73", -4644 => x"8c1a0c73", -4645 => x"881a0c5a", -4646 => x"0b0b0bfc", -4647 => x"9f398315", -4648 => x"70822c81", -4649 => x"712b0b0b", -4650 => x"82fccc08", -4651 => x"070b0b82", -4652 => x"fcc80b84", -4653 => x"050c5153", -4654 => x"74101010", -4655 => x"0b0b82fc", -4656 => x"c8058811", -4657 => x"0855560b", -4658 => x"0b0bfebc", -4659 => x"39745380", -4660 => x"75240b0b", -4661 => x"0b0bae38", -4662 => x"72822c81", -4663 => x"712b0b0b", -4664 => x"82fccc08", -4665 => x"070b0b82", -4666 => x"fcc80b84", -4667 => x"050c5375", -4668 => x"8c190c73", -4669 => x"88190c77", -4670 => x"88170c77", -4671 => x"8c150c0b", -4672 => x"0b0bfd83", -4673 => x"39831570", -4674 => x"822c8171", -4675 => x"2b0b0b82", -4676 => x"fccc0807", -4677 => x"0b0b82fc", -4678 => x"c80b8405", -4679 => x"0c51530b", -4680 => x"0b0b0bcb", -4681 => x"39f23d0d", -4682 => x"60628811", -4683 => x"08705757", -4684 => x"5f5a7480", -4685 => x"2e0b0b0b", -4686 => x"81b3388c", -4687 => x"1a227083", -4688 => x"2a813270", -4689 => x"81065155", -4690 => x"58730b0b", -4691 => x"0b0b8a38", -4692 => x"901a080b", -4693 => x"0b0b0b97", -4694 => x"3879510b", -4695 => x"0b0bc388", -4696 => x"3fff5480", -4697 => x"080b0b0b", -4698 => x"8183388c", -4699 => x"1a22587d", -4700 => x"08578078", -4701 => x"83ffff06", -4702 => x"700a100a", -4703 => x"70810651", -4704 => x"56575573", -4705 => x"752e0b0b", -4706 => x"0b80e938", -4707 => x"740b0b0b", -4708 => x"0b943876", -4709 => x"08841808", -4710 => x"88195956", -4711 => x"5974802e", -4712 => x"0b0b0b0b", -4713 => x"ee387454", -4714 => x"88807527", -4715 => x"0b0b0b0b", -4716 => x"84388880", -4717 => x"54735378", -4718 => x"529c1a08", -4719 => x"51a41a08", -4720 => x"54732d80", -4721 => x"0b800825", -4722 => x"0b0b0b83", -4723 => x"bf388008", -4724 => x"19758008", -4725 => x"317f8805", -4726 => x"08800831", -4727 => x"70618805", -4728 => x"0c565659", -4729 => x"730b0b0b", -4730 => x"ffa23880", -4731 => x"5473800c", -4732 => x"903d0d04", -4733 => x"75813270", -4734 => x"81067641", -4735 => x"51547380", -4736 => x"2e0b0b0b", -4737 => x"81f03874", -4738 => x"0b0b0b0b", -4739 => x"94387608", -4740 => x"84180888", -4741 => x"19595659", -4742 => x"74802e0b", -4743 => x"0b0b0bee", -4744 => x"38881a08", -4745 => x"7883ffff", -4746 => x"0670892a", -4747 => x"70810651", -4748 => x"56595673", -4749 => x"802e0b0b", -4750 => x"0b83e338", -4751 => x"7575270b", -4752 => x"0b0b0b90", -4753 => x"3877872a", -4754 => x"70810651", -4755 => x"54730b0b", -4756 => x"0b838c38", -4757 => x"7476270b", -4758 => x"0b0b0b83", -4759 => x"38745675", -4760 => x"53785279", -4761 => x"08510b0b", -4762 => x"0b9bb83f", -4763 => x"881a0876", -4764 => x"31881b0c", -4765 => x"7908167a", -4766 => x"0c745675", -4767 => x"19757731", -4768 => x"7f880508", -4769 => x"78317061", -4770 => x"88050c56", -4771 => x"56597380", -4772 => x"2e0b0b0b", -4773 => x"fed5388c", -4774 => x"1a22580b", -4775 => x"0b0bfee7", -4776 => x"39777854", -4777 => x"79537b52", -4778 => x"560b0b0b", -4779 => x"9af53f88", -4780 => x"1a087831", -4781 => x"881b0c79", -4782 => x"08187a0c", -4783 => x"7c76315d", -4784 => x"7c0b0b0b", -4785 => x"0b943879", -4786 => x"510b0b0b", -4787 => x"eef23f80", -4788 => x"080b0b0b", -4789 => x"81b63880", -4790 => x"085f7519", -4791 => x"7577317f", -4792 => x"88050878", -4793 => x"31706188", -4794 => x"050c5656", -4795 => x"5973802e", -4796 => x"0b0b0bfd", -4797 => x"f638740b", -4798 => x"0b0b81a4", -4799 => x"38760884", -4800 => x"18088819", -4801 => x"59565974", -4802 => x"802e0b0b", -4803 => x"0b0bee38", -4804 => x"74538a52", -4805 => x"78510b0b", -4806 => x"0b98bb3f", -4807 => x"80087931", -4808 => x"81055d80", -4809 => x"080b0b0b", -4810 => x"0b843881", -4811 => x"155d815f", -4812 => x"7c58747d", -4813 => x"270b0b0b", -4814 => x"0b833874", -4815 => x"58941a08", -4816 => x"881b0811", -4817 => x"575c807a", -4818 => x"085c5490", -4819 => x"1a087b27", -4820 => x"0b0b0b0b", -4821 => x"83388154", -4822 => x"7578250b", -4823 => x"0b0b0b88", -4824 => x"38730b0b", -4825 => x"0b80c638", -4826 => x"7b78240b", -4827 => x"0b0bfeb1", -4828 => x"387b5378", -4829 => x"529c1a08", -4830 => x"51a41a08", -4831 => x"54732d80", -4832 => x"08568008", -4833 => x"80240b0b", -4834 => x"0bfeb138", -4835 => x"8c1a2280", -4836 => x"c0075473", -4837 => x"8c1b23ff", -4838 => x"5473800c", -4839 => x"903d0d04", -4840 => x"7e0b0b0b", -4841 => x"ff8a380b", -4842 => x"0b0bfee4", -4843 => x"39755378", -4844 => x"527a510b", -4845 => x"0b0b98eb", -4846 => x"3f790816", -4847 => x"7a0c7951", -4848 => x"0b0b0bec", -4849 => x"fb3f8008", -4850 => x"0b0b0bff", -4851 => x"bf387c76", -4852 => x"315d7c0b", -4853 => x"0b0bfe82", -4854 => x"380b0b0b", -4855 => x"fde93990", -4856 => x"1a087a08", -4857 => x"71317611", -4858 => x"70565a57", -4859 => x"520b0b82", -4860 => x"f4ec0851", -4861 => x"0b0b0bb4", -4862 => x"ad3f8008", -4863 => x"802e0b0b", -4864 => x"0bff8938", -4865 => x"8008901b", -4866 => x"0c800816", -4867 => x"7a0c7794", -4868 => x"1b0c7488", -4869 => x"1b0c7456", -4870 => x"0b0b0bfc", -4871 => x"b7397908", -4872 => x"58901a08", -4873 => x"78270b0b", -4874 => x"0b0b8338", -4875 => x"81547575", -4876 => x"270b0b0b", -4877 => x"0b883873", -4878 => x"0b0b0b0b", -4879 => x"bc38941a", -4880 => x"08567575", -4881 => x"260b0b0b", -4882 => x"80e53875", -4883 => x"5378529c", -4884 => x"1a0851a4", -4885 => x"1a085473", -4886 => x"2d800856", -4887 => x"80088024", -4888 => x"0b0b0bfc", -4889 => x"96388c1a", -4890 => x"2280c007", -4891 => x"54738c1b", -4892 => x"23ff540b", -4893 => x"0b0bfea1", -4894 => x"39755378", -4895 => x"5277510b", -4896 => x"0b0b979f", -4897 => x"3f790816", -4898 => x"7a0c7951", -4899 => x"0b0b0beb", -4900 => x"af3f8008", -4901 => x"802e0b0b", -4902 => x"0bfbe038", -4903 => x"8c1a2280", -4904 => x"c0075473", -4905 => x"8c1b23ff", -4906 => x"540b0b0b", -4907 => x"fdeb3974", -4908 => x"75547953", -4909 => x"7852560b", -4910 => x"0b0b96e7", -4911 => x"3f881a08", -4912 => x"7531881b", -4913 => x"0c790815", -4914 => x"7a0c0b0b", -4915 => x"0bfbac39", -4916 => x"f93d0d79", -4917 => x"7b585380", -4918 => x"0b0b0b82", -4919 => x"f4ec0853", -4920 => x"5672722e", -4921 => x"0b0b0b80", -4922 => x"d53884dc", -4923 => x"13557476", -4924 => x"2e0b0b0b", -4925 => x"80c83888", -4926 => x"15088416", -4927 => x"08ff0554", -4928 => x"54807324", -4929 => x"0b0b0b0b", -4930 => x"a4388c14", -4931 => x"2270902b", -4932 => x"70902c51", -4933 => x"5358710b", -4934 => x"0b0b80f6", -4935 => x"3880dc14", -4936 => x"ff145454", -4937 => x"7280250b", -4938 => x"0b0b0bde", -4939 => x"38740855", -4940 => x"740b0b0b", -4941 => x"0bc1380b", -4942 => x"0b82f4ec", -4943 => x"085284dc", -4944 => x"12557480", -4945 => x"2e0b0b0b", -4946 => x"80c13888", -4947 => x"15088416", -4948 => x"08ff0554", -4949 => x"54807324", -4950 => x"0b0b0b0b", -4951 => x"a4388c14", -4952 => x"2270902b", -4953 => x"70902c51", -4954 => x"5358710b", -4955 => x"0b0b0bb8", -4956 => x"3880dc14", -4957 => x"ff145454", -4958 => x"7280250b", -4959 => x"0b0b0bde", -4960 => x"38740855", -4961 => x"740b0b0b", -4962 => x"0bc13875", -4963 => x"800c893d", -4964 => x"0d047351", -4965 => x"762d7580", -4966 => x"080780dc", -4967 => x"15ff1555", -4968 => x"55560b0b", -4969 => x"0bfefd39", -4970 => x"7351762d", -4971 => x"75800807", -4972 => x"80dc15ff", -4973 => x"15555556", -4974 => x"0b0b0bff", -4975 => x"bb39fc3d", -4976 => x"0d767955", -4977 => x"5573802e", -4978 => x"0b0b0b0b", -4979 => x"9f380b0b", -4980 => x"82f1c852", -4981 => x"73510b0b", -4982 => x"0bbe8d3f", -4983 => x"80080b0b", -4984 => x"0b0b9638", -4985 => x"77b0160c", -4986 => x"73b4160c", -4987 => x"0b0b82f1", -4988 => x"c8537280", -4989 => x"0c863d0d", -4990 => x"040b0b82", -4991 => x"f0ec5273", -4992 => x"510b0b0b", -4993 => x"bde23f80", -4994 => x"53800873", -4995 => x"2e098106", -4996 => x"0b0b0b0b", -4997 => x"dd3877b0", -4998 => x"160c73b4", -4999 => x"160c0b0b", -5000 => x"0b0bc939", -5001 => x"0b0b82fc", -5002 => x"8808800c", -5003 => x"040b0b82", -5004 => x"f1d80b80", -5005 => x"0c047070", -5006 => x"70755374", -5007 => x"520b0b82", -5008 => x"f4ec0851", -5009 => x"0b0b0bfe", -5010 => x"f53f5050", -5011 => x"5004700b", -5012 => x"0b82f4ec", -5013 => x"08510b0b", -5014 => x"0b0bd23f", -5015 => x"5004ea3d", -5016 => x"0d688c11", -5017 => x"22700a10", -5018 => x"0a810657", -5019 => x"5856740b", -5020 => x"0b0b8180", -5021 => x"388e1622", -5022 => x"70902b70", -5023 => x"902c5155", -5024 => x"58807424", -5025 => x"0b0b0b80", -5026 => x"c038983d", -5027 => x"c4055373", -5028 => x"520b0b82", -5029 => x"f4ec0851", -5030 => x"0b0b80c1", -5031 => x"ac3f800b", -5032 => x"8008240b", -5033 => x"0b0b0b9d", -5034 => x"387983e0", -5035 => x"80065473", -5036 => x"80c0802e", -5037 => x"0b0b0b81", -5038 => x"aa387382", -5039 => x"80802e0b", -5040 => x"0b0b81ac", -5041 => x"388c1622", -5042 => x"57769080", -5043 => x"0754738c", -5044 => x"17238880", -5045 => x"520b0b82", -5046 => x"f4ec0851", -5047 => x"0b0b0b81", -5048 => x"e13f8008", -5049 => x"0b0b0b0b", -5050 => x"9d388c16", -5051 => x"22820754", -5052 => x"738c1723", -5053 => x"80c31670", -5054 => x"770c9017", -5055 => x"0c810b94", -5056 => x"170c983d", -5057 => x"0d040b0b", -5058 => x"82f4ec08", -5059 => x"0b0b818a", -5060 => x"a80bbc12", -5061 => x"0c548c16", -5062 => x"22818007", -5063 => x"54738c17", -5064 => x"23800876", -5065 => x"0c800890", -5066 => x"170c8880", -5067 => x"0b94170c", -5068 => x"74802e0b", -5069 => x"0b0b0bca", -5070 => x"388e1622", -5071 => x"70902b70", -5072 => x"902c5355", -5073 => x"580b0b80", -5074 => x"ced33f80", -5075 => x"08802e0b", -5076 => x"0b0bffae", -5077 => x"388c1622", -5078 => x"81075473", -5079 => x"8c172398", -5080 => x"3d0d0481", -5081 => x"0b8c1722", -5082 => x"58550b0b", -5083 => x"0bfeda39", -5084 => x"a816080b", -5085 => x"0b81d8ec", -5086 => x"2e098106", -5087 => x"0b0b0bfe", -5088 => x"c4388c16", -5089 => x"22888007", -5090 => x"54738c17", -5091 => x"2388800b", -5092 => x"80cc170c", -5093 => x"0b0b0bfe", -5094 => x"b9397070", -5095 => x"73520b0b", -5096 => x"82f4ec08", -5097 => x"510b0b0b", -5098 => x"0b983f50", -5099 => x"50047070", -5100 => x"73520b0b", -5101 => x"82f4ec08", -5102 => x"510b0b0b", -5103 => x"ecfa3f50", -5104 => x"5004f33d", -5105 => x"0d7f618b", -5106 => x"1170f806", -5107 => x"5c55555e", -5108 => x"7296260b", -5109 => x"0b0b0b83", -5110 => x"38905980", -5111 => x"7924747a", -5112 => x"26075380", -5113 => x"5472742e", -5114 => x"0981060b", -5115 => x"0b0b80d9", -5116 => x"387d510b", -5117 => x"0b0b93cf", -5118 => x"3f7883f7", -5119 => x"260b0b0b", -5120 => x"80ce3878", -5121 => x"832a7010", -5122 => x"10100b0b", -5123 => x"82fcc805", -5124 => x"8c110859", -5125 => x"595a7678", -5126 => x"2e0b0b0b", -5127 => x"84aa3884", -5128 => x"1708fc06", -5129 => x"568c1708", -5130 => x"88180871", -5131 => x"8c120c88", -5132 => x"120c5875", -5133 => x"17841108", -5134 => x"81078412", -5135 => x"0c537d51", -5136 => x"0b0b0b93", -5137 => x"833f8817", -5138 => x"5473800c", -5139 => x"8f3d0d04", -5140 => x"78892a79", -5141 => x"832a5b53", -5142 => x"72802e0b", -5143 => x"0b0b80d3", -5144 => x"3878862a", -5145 => x"b8055a84", -5146 => x"73270b0b", -5147 => x"0b80c438", -5148 => x"80db135a", -5149 => x"9473270b", -5150 => x"0b0b0bb7", -5151 => x"38788c2a", -5152 => x"80ee055a", -5153 => x"80d47327", -5154 => x"0b0b0b0b", -5155 => x"a638788f", -5156 => x"2a80f705", -5157 => x"5a82d473", -5158 => x"270b0b0b", -5159 => x"0b953878", -5160 => x"922a80fc", -5161 => x"055a8ad4", -5162 => x"73270b0b", -5163 => x"0b0b8438", -5164 => x"80fe5a79", -5165 => x"1010100b", -5166 => x"0b82fcc8", -5167 => x"058c1108", -5168 => x"58557675", -5169 => x"2e0b0b0b", -5170 => x"0bad3884", -5171 => x"1708fc06", -5172 => x"707a3155", -5173 => x"56738f24", -5174 => x"0b0b0b8b", -5175 => x"94387380", -5176 => x"250b0b0b", -5177 => x"febf388c", -5178 => x"17085776", -5179 => x"752e0981", -5180 => x"060b0b0b", -5181 => x"0bd53881", -5182 => x"1a5a0b0b", -5183 => x"82fcd808", -5184 => x"57760b0b", -5185 => x"82fcd02e", -5186 => x"0b0b0b83", -5187 => x"9a388417", -5188 => x"08fc0670", -5189 => x"7a315556", -5190 => x"738f240b", -5191 => x"0b0b82c4", -5192 => x"380b0b82", -5193 => x"fcd00b0b", -5194 => x"0b82fcdc", -5195 => x"0c0b0b82", -5196 => x"fcd00b0b", -5197 => x"0b82fcd8", -5198 => x"0c738025", -5199 => x"0b0b0bfd", -5200 => x"f23883ff", -5201 => x"76270b0b", -5202 => x"0b84e238", -5203 => x"75892a76", -5204 => x"832a5553", -5205 => x"72802e0b", -5206 => x"0b0b80d3", -5207 => x"3875862a", -5208 => x"b8055484", -5209 => x"73270b0b", -5210 => x"0b80c438", -5211 => x"80db1354", -5212 => x"9473270b", -5213 => x"0b0b0bb7", -5214 => x"38758c2a", -5215 => x"80ee0554", -5216 => x"80d47327", -5217 => x"0b0b0b0b", -5218 => x"a638758f", -5219 => x"2a80f705", -5220 => x"5482d473", -5221 => x"270b0b0b", -5222 => x"0b953875", -5223 => x"922a80fc", -5224 => x"05548ad4", -5225 => x"73270b0b", -5226 => x"0b0b8438", -5227 => x"80fe5473", -5228 => x"1010100b", -5229 => x"0b82fcc8", -5230 => x"05881108", -5231 => x"56587478", -5232 => x"2e0b0b0b", -5233 => x"88b83884", -5234 => x"1508fc06", -5235 => x"53757327", -5236 => x"0b0b0b0b", -5237 => x"91388815", -5238 => x"08557478", -5239 => x"2e098106", -5240 => x"0b0b0b0b", -5241 => x"e2388c15", -5242 => x"080b0b82", -5243 => x"fcc80b84", -5244 => x"0508718c", -5245 => x"1a0c7688", -5246 => x"1a0c7888", -5247 => x"130c788c", -5248 => x"180c5d58", -5249 => x"7953807a", -5250 => x"240b0b0b", -5251 => x"84e93872", -5252 => x"822c8171", -5253 => x"2b5c537a", -5254 => x"7c260b0b", -5255 => x"0b81c538", -5256 => x"7b7b0653", -5257 => x"720b0b0b", -5258 => x"83d03879", -5259 => x"fc068405", -5260 => x"5a7a1070", -5261 => x"7d06545b", -5262 => x"720b0b0b", -5263 => x"83bc3884", -5264 => x"1a5a0b0b", -5265 => x"0b0bea39", -5266 => x"88178c11", -5267 => x"08585876", -5268 => x"782e0981", -5269 => x"060b0b0b", -5270 => x"fbc53882", -5271 => x"1a5a0b0b", -5272 => x"0bfd9739", -5273 => x"78177981", -5274 => x"0784190c", -5275 => x"700b0b82", -5276 => x"fcdc0c70", -5277 => x"0b0b82fc", -5278 => x"d80c0b0b", -5279 => x"82fcd00b", -5280 => x"8c120c8c", -5281 => x"11088812", -5282 => x"0c748107", -5283 => x"84120c74", -5284 => x"1175710c", -5285 => x"51537d51", -5286 => x"0b0b0b8e", -5287 => x"ab3f8817", -5288 => x"540b0b0b", -5289 => x"fba3390b", -5290 => x"0b82fcc8", -5291 => x"0b840508", -5292 => x"7a545c79", -5293 => x"80250b0b", -5294 => x"0bfed438", -5295 => x"0b0b0b83", -5296 => x"b6397a09", -5297 => x"7c06700b", -5298 => x"0b82fcc8", -5299 => x"0b84050c", -5300 => x"5c7a105b", -5301 => x"7a7c260b", -5302 => x"0b0b0b88", -5303 => x"387a0b0b", -5304 => x"0b86f738", -5305 => x"0b0b82fc", -5306 => x"c80b8805", -5307 => x"08708412", -5308 => x"08fc0670", -5309 => x"7c317c72", -5310 => x"268f7225", -5311 => x"0757575c", -5312 => x"5d557280", -5313 => x"2e0b0b0b", -5314 => x"80f73879", -5315 => x"7a160b0b", -5316 => x"82fcc008", -5317 => x"1b90115a", -5318 => x"55575b0b", -5319 => x"0b82fcbc", -5320 => x"08ff2e0b", -5321 => x"0b0b0b88", -5322 => x"38a08f13", -5323 => x"e0800657", -5324 => x"76527d51", -5325 => x"0b0b0bb0", -5326 => x"893f8008", -5327 => x"548008ff", -5328 => x"2e0b0b0b", -5329 => x"0b983880", -5330 => x"0876270b", -5331 => x"0b0b82e1", -5332 => x"38740b0b", -5333 => x"82fcc82e", -5334 => x"0b0b0b82", -5335 => x"d4380b0b", -5336 => x"82fcc80b", -5337 => x"88050855", -5338 => x"841508fc", -5339 => x"06707a31", -5340 => x"7a72268f", -5341 => x"72250752", -5342 => x"5553720b", -5343 => x"0b0b84ee", -5344 => x"38747981", -5345 => x"0784170c", -5346 => x"7916700b", -5347 => x"0b82fcc8", -5348 => x"0b88050c", -5349 => x"75810784", -5350 => x"120c547e", -5351 => x"52570b0b", -5352 => x"0b8ca53f", -5353 => x"8817540b", -5354 => x"0b0bf99d", -5355 => x"3975832a", -5356 => x"70545480", -5357 => x"74240b0b", -5358 => x"0b81c538", -5359 => x"72822c81", -5360 => x"712b0b0b", -5361 => x"82fccc08", -5362 => x"07700b0b", -5363 => x"82fcc80b", -5364 => x"84050c75", -5365 => x"1010100b", -5366 => x"0b82fcc8", -5367 => x"05881108", -5368 => x"585a5d53", -5369 => x"778c180c", -5370 => x"7488180c", -5371 => x"7688190c", -5372 => x"768c160c", -5373 => x"0b0b0bfc", -5374 => x"8b39797a", -5375 => x"1010100b", -5376 => x"0b82fcc8", -5377 => x"05705759", -5378 => x"5d8c1508", -5379 => x"5776752e", -5380 => x"0b0b0b0b", -5381 => x"ad388417", -5382 => x"08fc0670", -5383 => x"7a315556", -5384 => x"738f240b", -5385 => x"0b0b84d5", -5386 => x"38738025", -5387 => x"0b0b0b85", -5388 => x"92388c17", -5389 => x"08577675", -5390 => x"2e098106", -5391 => x"0b0b0b0b", -5392 => x"d5388815", -5393 => x"811b7083", -5394 => x"06555b55", -5395 => x"720b0b0b", -5396 => x"ffb7387c", -5397 => x"83065372", -5398 => x"802e0b0b", -5399 => x"0bfce338", -5400 => x"ff1df819", -5401 => x"595d8818", -5402 => x"08782e0b", -5403 => x"0b0b0be3", -5404 => x"380b0b0b", -5405 => x"fcdb3983", -5406 => x"1a530b0b", -5407 => x"0bfb9039", -5408 => x"83147082", -5409 => x"2c81712b", -5410 => x"0b0b82fc", -5411 => x"cc080770", -5412 => x"0b0b82fc", -5413 => x"c80b8405", -5414 => x"0c761010", -5415 => x"100b0b82", -5416 => x"fcc80588", -5417 => x"1108595b", -5418 => x"5e51530b", -5419 => x"0b0bfeb4", -5420 => x"390b0b82", -5421 => x"fc8c0817", -5422 => x"58800876", -5423 => x"2e0b0b0b", -5424 => x"81b2380b", -5425 => x"0b82fcbc", -5426 => x"08ff2e0b", -5427 => x"0b0b84e8", -5428 => x"38737631", -5429 => x"180b0b82", -5430 => x"fc8c0c73", -5431 => x"87067057", -5432 => x"5372802e", -5433 => x"0b0b0b0b", -5434 => x"88388873", -5435 => x"31701555", -5436 => x"5676149f", -5437 => x"ff06a080", -5438 => x"71311770", -5439 => x"547f5357", -5440 => x"530b0b0b", -5441 => x"acbc3f80", -5442 => x"08538008", -5443 => x"ff2e0b0b", -5444 => x"0b81d138", -5445 => x"0b0b82fc", -5446 => x"8c081670", -5447 => x"0b0b82fc", -5448 => x"8c0c7475", -5449 => x"0b0b82fc", -5450 => x"c80b8805", -5451 => x"0c747631", -5452 => x"18708107", -5453 => x"51555658", -5454 => x"7b0b0b82", -5455 => x"fcc82e0b", -5456 => x"0b0b8488", -5457 => x"38798f26", -5458 => x"0b0b0b83", -5459 => x"a038810b", -5460 => x"84150c84", -5461 => x"1508fc06", -5462 => x"707a317a", -5463 => x"72268f72", -5464 => x"25075255", -5465 => x"5372802e", -5466 => x"0b0b0bfc", -5467 => x"94380b0b", -5468 => x"0b80fb39", -5469 => x"80089fff", -5470 => x"0653720b", -5471 => x"0b0bfec3", -5472 => x"38770b0b", -5473 => x"82fc8c0c", -5474 => x"0b0b82fc", -5475 => x"c80b8805", -5476 => x"087b1881", -5477 => x"0784120c", -5478 => x"550b0b82", -5479 => x"fcb80878", -5480 => x"270b0b0b", -5481 => x"0b883877", -5482 => x"0b0b82fc", -5483 => x"b80c0b0b", -5484 => x"82fcb408", -5485 => x"78270b0b", -5486 => x"0bfbad38", -5487 => x"770b0b82", -5488 => x"fcb40c84", -5489 => x"1508fc06", -5490 => x"707a317a", -5491 => x"72268f72", -5492 => x"25075255", -5493 => x"5372802e", -5494 => x"0b0b0bfb", -5495 => x"a4380b0b", -5496 => x"0b0b8b39", -5497 => x"80745456", -5498 => x"0b0b0bfe", -5499 => x"a7397d51", -5500 => x"0b0b0b87", -5501 => x"d33f800b", -5502 => x"800c8f3d", -5503 => x"0d047353", -5504 => x"8074240b", -5505 => x"0b0b0bb0", -5506 => x"3872822c", -5507 => x"81712b0b", -5508 => x"0b82fccc", -5509 => x"0807700b", -5510 => x"0b82fcc8", -5511 => x"0b84050c", -5512 => x"5d53778c", -5513 => x"180c7488", -5514 => x"180c7688", -5515 => x"190c768c", -5516 => x"160c0b0b", -5517 => x"0bf7cd39", -5518 => x"83147082", -5519 => x"2c81712b", -5520 => x"0b0b82fc", -5521 => x"cc080770", -5522 => x"0b0b82fc", -5523 => x"c80b8405", -5524 => x"0c5e5153", -5525 => x"0b0b0b0b", -5526 => x"c9397b7b", -5527 => x"0653720b", -5528 => x"0b0bfb96", -5529 => x"38841a7b", -5530 => x"105c5a0b", -5531 => x"0b0b0bea", -5532 => x"39ff1a81", -5533 => x"11515a0b", -5534 => x"0b0bf4fe", -5535 => x"39781779", -5536 => x"81078419", -5537 => x"0c8c1808", -5538 => x"88190871", -5539 => x"8c120c88", -5540 => x"120c5970", -5541 => x"0b0b82fc", -5542 => x"dc0c700b", -5543 => x"0b82fcd8", -5544 => x"0c0b0b82", -5545 => x"fcd00b8c", -5546 => x"120c8c11", -5547 => x"0888120c", -5548 => x"74810784", -5549 => x"120c7411", -5550 => x"75710c51", -5551 => x"530b0b0b", -5552 => x"f7d43975", -5553 => x"17841108", -5554 => x"81078412", -5555 => x"0c538c17", -5556 => x"08881808", -5557 => x"718c120c", -5558 => x"88120c58", -5559 => x"7d510b0b", -5560 => x"0b85e53f", -5561 => x"8817540b", -5562 => x"0b0bf2dd", -5563 => x"39728415", -5564 => x"0cf41af8", -5565 => x"0670841e", -5566 => x"08810607", -5567 => x"841e0c70", -5568 => x"1d545b85", -5569 => x"0b84140c", -5570 => x"850b8814", -5571 => x"0c8f7b27", -5572 => x"0b0b0bfd", -5573 => x"8438881c", -5574 => x"527d510b", -5575 => x"0b0bde98", -5576 => x"3f0b0b82", -5577 => x"fcc80b88", -5578 => x"05080b0b", -5579 => x"82fc8c08", -5580 => x"59550b0b", -5581 => x"0bfce239", -5582 => x"770b0b82", -5583 => x"fc8c0c73", -5584 => x"0b0b82fc", -5585 => x"bc0c0b0b", -5586 => x"0bfb9039", -5587 => x"7284150c", -5588 => x"0b0b0bfc", -5589 => x"c439fa3d", -5590 => x"0d7a7902", -5591 => x"8805a705", -5592 => x"33565253", -5593 => x"8373270b", -5594 => x"0b0b0b8e", -5595 => x"38708306", -5596 => x"5271802e", -5597 => x"0b0b0b0b", -5598 => x"b438ff13", -5599 => x"5372ff2e", -5600 => x"0b0b0b0b", -5601 => x"9f387033", -5602 => x"5273722e", -5603 => x"0b0b0b0b", -5604 => x"95388111", -5605 => x"ff145451", -5606 => x"72ff2e09", -5607 => x"81060b0b", -5608 => x"0b0be338", -5609 => x"80517080", -5610 => x"0c883d0d", -5611 => x"04707257", -5612 => x"55835175", -5613 => x"82802914", -5614 => x"ff125256", -5615 => x"7080250b", -5616 => x"0b0b0bef", -5617 => x"38837327", -5618 => x"0b0b0b80", -5619 => x"ce387408", -5620 => x"76327009", -5621 => x"f7fbfdff", -5622 => x"120670f8", -5623 => x"84828180", -5624 => x"06515151", -5625 => x"70802e0b", -5626 => x"0b0b0ba0", -5627 => x"38745180", -5628 => x"52703357", -5629 => x"73772e0b", -5630 => x"0b0bffaa", -5631 => x"38811181", -5632 => x"13535183", -5633 => x"72270b0b", -5634 => x"0b0be638", -5635 => x"fc138416", -5636 => x"56537283", -5637 => x"260b0b0b", -5638 => x"ffb43874", -5639 => x"510b0b0b", -5640 => x"fed839fa", -5641 => x"3d0d787a", -5642 => x"7c727272", -5643 => x"57575759", -5644 => x"56567476", -5645 => x"270b0b0b", -5646 => x"0bbe3876", -5647 => x"15517571", -5648 => x"270b0b0b", -5649 => x"0bb23870", -5650 => x"7717ff14", -5651 => x"54555371", -5652 => x"ff2e0b0b", -5653 => x"0b0b9a38", -5654 => x"ff14ff14", -5655 => x"54547233", -5656 => x"7434ff12", -5657 => x"5271ff2e", -5658 => x"0981060b", -5659 => x"0b0b0be8", -5660 => x"3875800c", -5661 => x"883d0d04", -5662 => x"768f260b", -5663 => x"0b0b0b9f", -5664 => x"38ff1252", -5665 => x"71ff2e0b", -5666 => x"0b0b0be5", -5667 => x"38727081", -5668 => x"05543374", -5669 => x"70810556", -5670 => x"340b0b0b", -5671 => x"0be33974", -5672 => x"76078306", -5673 => x"51700b0b", -5674 => x"0b0bd638", -5675 => x"75755451", -5676 => x"72708405", -5677 => x"54087170", -5678 => x"8405530c", -5679 => x"72708405", -5680 => x"54087170", -5681 => x"8405530c", -5682 => x"72708405", -5683 => x"54087170", -5684 => x"8405530c", -5685 => x"72708405", -5686 => x"54087170", -5687 => x"8405530c", -5688 => x"f0125271", -5689 => x"8f260b0b", -5690 => x"0b0bc538", -5691 => x"8372270b", -5692 => x"0b0b0b99", -5693 => x"38727084", -5694 => x"05540871", -5695 => x"70840553", -5696 => x"0cfc1252", -5697 => x"7183260b", -5698 => x"0b0b0be9", -5699 => x"3870540b", -5700 => x"0b0bfeed", -5701 => x"39fc3d0d", -5702 => x"76797102", -5703 => x"8c059f05", -5704 => x"33575553", -5705 => x"55837227", -5706 => x"0b0b0b0b", -5707 => x"8e387483", -5708 => x"06517080", -5709 => x"2e0b0b0b", -5710 => x"0baa38ff", -5711 => x"125271ff", -5712 => x"2e0b0b0b", -5713 => x"0b973873", -5714 => x"73708105", -5715 => x"5534ff12", -5716 => x"5271ff2e", -5717 => x"0981060b", -5718 => x"0b0b0beb", -5719 => x"3874800c", -5720 => x"863d0d04", -5721 => x"7474882b", -5722 => x"75077071", -5723 => x"902b0751", -5724 => x"54518f72", -5725 => x"270b0b0b", -5726 => x"0ba93872", -5727 => x"71708405", -5728 => x"530c7271", -5729 => x"70840553", -5730 => x"0c727170", -5731 => x"8405530c", -5732 => x"72717084", -5733 => x"05530cf0", -5734 => x"1252718f", -5735 => x"260b0b0b", -5736 => x"0bd93883", -5737 => x"72270b0b", -5738 => x"0b0b9438", -5739 => x"72717084", -5740 => x"05530cfc", -5741 => x"12527183", -5742 => x"260b0b0b", -5743 => x"0bee3870", -5744 => x"530b0b0b", -5745 => x"fef53904", -5746 => x"04f93d0d", -5747 => x"797b80cc", -5748 => x"12085658", -5749 => x"5673802e", -5750 => x"0b0b0b0b", -5751 => x"a9387610", -5752 => x"10147008", -5753 => x"55557380", -5754 => x"2e0b0b0b", -5755 => x"80c03873", -5756 => x"08750c80", -5757 => x"0b90150c", -5758 => x"800b8c15", -5759 => x"0c735574", -5760 => x"800c893d", -5761 => x"0d049053", -5762 => x"84527551", -5763 => x"0b0b0ba8", -5764 => x"c63f8008", -5765 => x"80cc170c", -5766 => x"80085580", -5767 => x"08802e0b", -5768 => x"0b0b0bdb", -5769 => x"38800854", -5770 => x"0b0b0bff", -5771 => x"b1398177", -5772 => x"2b701010", -5773 => x"94055458", -5774 => x"81527551", -5775 => x"0b0b0ba8", -5776 => x"963f8008", -5777 => x"80085654", -5778 => x"8008802e", -5779 => x"0b0b0bff", -5780 => x"ae387680", -5781 => x"0884050c", -5782 => x"77800888", -5783 => x"050c800b", -5784 => x"90150c80", -5785 => x"0b8c150c", -5786 => x"73550b0b", -5787 => x"0bff9039", -5788 => x"70707452", -5789 => x"71802e0b", -5790 => x"0b0b0b95", -5791 => x"38738413", -5792 => x"08101080", -5793 => x"cc120805", -5794 => x"7008740c", -5795 => x"73710c51", -5796 => x"51505004", -5797 => x"f53d0d7d", -5798 => x"7f616390", -5799 => x"13089414", -5800 => x"5b5d5b5c", -5801 => x"5c5c8057", -5802 => x"8216227a", -5803 => x"71291977", -5804 => x"227c7129", -5805 => x"72902a05", -5806 => x"70902a73", -5807 => x"83ffff06", -5808 => x"72848080", -5809 => x"29057b70", -5810 => x"84055d0c", -5811 => x"811c5c52", -5812 => x"535a5555", -5813 => x"7877240b", -5814 => x"0b0b0bcc", -5815 => x"3877802e", -5816 => x"0b0b0b0b", -5817 => x"9a387888", -5818 => x"1c08250b", -5819 => x"0b0b0b96", -5820 => x"38781010", -5821 => x"1b789412", -5822 => x"0c548119", -5823 => x"901c0c7a", -5824 => x"800c8d3d", -5825 => x"0d04841b", -5826 => x"08810552", -5827 => x"7b510b0b", -5828 => x"0bfdb63f", -5829 => x"8008901c", -5830 => x"08101088", -5831 => x"05548c1c", -5832 => x"5380088c", -5833 => x"0552540b", -5834 => x"0bfedcdf", -5835 => x"3f7a527b", -5836 => x"510b0b0b", -5837 => x"feba3f73", -5838 => x"79101011", -5839 => x"7994120c", -5840 => x"55811a90", -5841 => x"120c5b0b", -5842 => x"0b0bffb3", -5843 => x"39f63d0d", -5844 => x"7c7e6062", -5845 => x"890b8812", -5846 => x"355b5e5c", -5847 => x"59598056", -5848 => x"81557477", -5849 => x"250b0b0b", -5850 => x"0b903874", -5851 => x"10811757", -5852 => x"55767524", -5853 => x"0b0b0b0b", -5854 => x"f2387552", -5855 => x"78510b0b", -5856 => x"0bfcc63f", -5857 => x"80086180", -5858 => x"0894050c", -5859 => x"56810b80", -5860 => x"0890050c", -5861 => x"8957767a", -5862 => x"250b0b0b", -5863 => x"80e13876", -5864 => x"18587770", -5865 => x"81055933", -5866 => x"d005548a", -5867 => x"53755278", -5868 => x"510b0b0b", -5869 => x"fdde3f80", -5870 => x"08811858", -5871 => x"56797724", -5872 => x"0b0b0b0b", -5873 => x"dd388118", -5874 => x"58767b25", -5875 => x"0b0b0b0b", -5876 => x"a7387a77", -5877 => x"31577770", -5878 => x"81055933", -5879 => x"d005548a", -5880 => x"53755278", -5881 => x"510b0b0b", -5882 => x"fdaa3f80", -5883 => x"08ff1858", -5884 => x"56760b0b", -5885 => x"0b0bdf38", -5886 => x"75800c8c", -5887 => x"3d0d048a", -5888 => x"18580b0b", -5889 => x"0b0bc239", -5890 => x"70707074", -5891 => x"528072fc", -5892 => x"80800652", -5893 => x"5370732e", -5894 => x"0981060b", -5895 => x"0b0b0b87", -5896 => x"38907271", -5897 => x"2b535371", -5898 => x"81ff0a06", -5899 => x"51700b0b", -5900 => x"0b0b8838", -5901 => x"88137288", -5902 => x"2b535371", -5903 => x"8f0a0651", -5904 => x"700b0b0b", -5905 => x"0b883884", -5906 => x"1372842b", -5907 => x"53537183", -5908 => x"0a065170", -5909 => x"0b0b0b0b", -5910 => x"88388213", -5911 => x"72822b53", -5912 => x"53807224", -5913 => x"0b0b0b0b", -5914 => x"97388113", -5915 => x"729e2a70", -5916 => x"81065152", -5917 => x"53a05270", -5918 => x"802e0b0b", -5919 => x"0b0b8338", -5920 => x"72527180", -5921 => x"0c505050", -5922 => x"04fc3d0d", -5923 => x"76700870", -5924 => x"87065353", -5925 => x"5570802e", -5926 => x"0b0b0b0b", -5927 => x"b1387181", -5928 => x"06518053", -5929 => x"70732e09", -5930 => x"81060b0b", -5931 => x"0b0b9838", -5932 => x"710a100a", -5933 => x"70810652", -5934 => x"5370802e", -5935 => x"0b0b0b81", -5936 => x"89387275", -5937 => x"0c815372", -5938 => x"800c863d", -5939 => x"0d047072", -5940 => x"83ffff06", -5941 => x"52547080", -5942 => x"2e0b0b0b", -5943 => x"80e03871", -5944 => x"81ff0651", -5945 => x"700b0b0b", -5946 => x"0b883888", -5947 => x"1472882a", -5948 => x"5354718f", -5949 => x"0651700b", -5950 => x"0b0b0b88", -5951 => x"38841472", -5952 => x"842a5354", -5953 => x"71830651", -5954 => x"700b0b0b", -5955 => x"0b883882", -5956 => x"1472822a", -5957 => x"53547181", -5958 => x"0651700b", -5959 => x"0b0b0b94", -5960 => x"38811472", -5961 => x"0a100a53", -5962 => x"54a05371", -5963 => x"802e0b0b", -5964 => x"0bff9438", -5965 => x"71750c73", -5966 => x"800c863d", -5967 => x"0d049072", -5968 => x"712a5354", -5969 => x"0b0b0bff", -5970 => x"96397182", -5971 => x"2a750c82", -5972 => x"0b800c86", -5973 => x"3d0d0470", -5974 => x"70815273", -5975 => x"510b0b0b", -5976 => x"f8e73f74", -5977 => x"80089405", -5978 => x"0c810b80", -5979 => x"0890050c", -5980 => x"505004ee", -5981 => x"3d0d6567", -5982 => x"90120890", -5983 => x"12085856", -5984 => x"57537375", -5985 => x"250b0b0b", -5986 => x"0b8d3872", -5987 => x"76717790", -5988 => x"14085957", -5989 => x"58544274", -5990 => x"14708815", -5991 => x"08248415", -5992 => x"08055365", -5993 => x"525e0b0b", -5994 => x"0bf89e3f", -5995 => x"80088008", -5996 => x"94057060", -5997 => x"822b7211", -5998 => x"43465941", -5999 => x"427f7f27", -6000 => x"0b0b0b0b", -6001 => x"91388077", -6002 => x"70840559", -6003 => x"0c7e7726", -6004 => x"0b0b0b0b", -6005 => x"f1389413", -6006 => x"74101011", -6007 => x"94187710", -6008 => x"10116341", -6009 => x"445d5d5f", -6010 => x"7a61270b", -6011 => x"0b0b81c9", -6012 => x"387a0870", -6013 => x"83ffff06", -6014 => x"59537780", -6015 => x"2e0b0b0b", -6016 => x"80cb387e", -6017 => x"7d575780", -6018 => x"5a767084", -6019 => x"05580870", -6020 => x"83ffff06", -6021 => x"82182271", -6022 => x"7b29057c", -6023 => x"1173902a", -6024 => x"7c297a22", -6025 => x"5e7d0571", -6026 => x"902a0570", -6027 => x"902a5f59", -6028 => x"51515454", -6029 => x"74762372", -6030 => x"82172384", -6031 => x"16567b77", -6032 => x"260b0b0b", -6033 => x"0bc33879", -6034 => x"760c7a08", -6035 => x"5372902a", -6036 => x"5877802e", -6037 => x"0b0b0b80", -6038 => x"d1387e7d", -6039 => x"5757807d", -6040 => x"08705b56", -6041 => x"5a767084", -6042 => x"05580870", -6043 => x"83ffff06", -6044 => x"707a297b", -6045 => x"902a057c", -6046 => x"11515154", -6047 => x"54727623", -6048 => x"74821723", -6049 => x"84167490", -6050 => x"2a792971", -6051 => x"08821322", -6052 => x"5d5b7b05", -6053 => x"74902a05", -6054 => x"70902a5c", -6055 => x"56567b77", -6056 => x"260b0b0b", -6057 => x"ffbf3874", -6058 => x"760c841b", -6059 => x"841e5e5b", -6060 => x"607b260b", -6061 => x"0b0bfeb9", -6062 => x"38626005", -6063 => x"56807e25", -6064 => x"0b0b0b0b", -6065 => x"9838fc16", -6066 => x"5675080b", -6067 => x"0b0b0b8d", -6068 => x"38ff1e5e", -6069 => x"7d80240b", -6070 => x"0b0b0bea", -6071 => x"387d6290", -6072 => x"050c6180", -6073 => x"0c943d0d", -6074 => x"04f73d0d", -6075 => x"7b7d7f70", -6076 => x"83065858", -6077 => x"5a5a740b", -6078 => x"0b0b8181", -6079 => x"3875822c", -6080 => x"5675802e", -6081 => x"0b0b0b80", -6082 => x"cc3880c8", -6083 => x"1a087056", -6084 => x"5776802e", -6085 => x"0b0b0b81", -6086 => x"a3387581", -6087 => x"0655740b", -6088 => x"0b0b0bb8", -6089 => x"3875812c", -6090 => x"5675802e", -6091 => x"0b0b0b0b", -6092 => x"a4387608", -6093 => x"70595574", -6094 => x"802e0b0b", -6095 => x"0b80e038", -6096 => x"74577581", -6097 => x"06557480", -6098 => x"2e0b0b0b", -6099 => x"0bd7380b", -6100 => x"0b0b0b88", -6101 => x"3978800c", -6102 => x"8b3d0d04", -6103 => x"76537852", -6104 => x"79510b0b", -6105 => x"0bfc8c3f", -6106 => x"80087953", -6107 => x"7a52550b", -6108 => x"0b0bf5fc", -6109 => x"3f74590b", -6110 => x"0b0bffa9", -6111 => x"39805474", -6112 => x"10100b0b", -6113 => x"82f49c05", -6114 => x"70085455", -6115 => x"78527951", -6116 => x"0b0b0bf5", -6117 => x"ff3f8008", -6118 => x"590b0b0b", -6119 => x"fedf3976", -6120 => x"53765279", -6121 => x"510b0b0b", -6122 => x"fbc93f80", -6123 => x"08770c80", -6124 => x"08788008", -6125 => x"0c570b0b", -6126 => x"0bff8739", -6127 => x"84f15279", -6128 => x"510b0b0b", -6129 => x"fb913f80", -6130 => x"0880c81b", -6131 => x"0c800875", -6132 => x"80080c76", -6133 => x"81065657", -6134 => x"74802e0b", -6135 => x"0b0bfec5", -6136 => x"380b0b0b", -6137 => x"fef639f5", -6138 => x"3d0d7d7f", -6139 => x"6170852c", -6140 => x"84130890", -6141 => x"14081281", -6142 => x"05881508", -6143 => x"595e5959", -6144 => x"5a5c5c72", -6145 => x"79250b0b", -6146 => x"0b0b9038", -6147 => x"81157310", -6148 => x"54557873", -6149 => x"240b0b0b", -6150 => x"0bf23874", -6151 => x"527b510b", -6152 => x"0b0bf3a5", -6153 => x"3f800880", -6154 => x"08940555", -6155 => x"5a807625", -6156 => x"0b0b0b0b", -6157 => x"94387553", -6158 => x"80747084", -6159 => x"05560cff", -6160 => x"1353720b", -6161 => x"0b0b0bf0", -6162 => x"38941b90", -6163 => x"1c081010", -6164 => x"11799f06", -6165 => x"5a585377", -6166 => x"802e0b0b", -6167 => x"0b80ca38", -6168 => x"a0783155", -6169 => x"80567208", -6170 => x"782b7607", -6171 => x"74708405", -6172 => x"560c7270", -6173 => x"84055408", -6174 => x"752a5676", -6175 => x"73260b0b", -6176 => x"0b0be338", -6177 => x"75740c75", -6178 => x"802e0b0b", -6179 => x"0b0b8438", -6180 => x"811959ff", -6181 => x"19901b0c", -6182 => x"7a527b51", -6183 => x"0b0b0bf3", -6184 => x"cf3f7980", -6185 => x"0c8d3d0d", -6186 => x"04727084", -6187 => x"05540874", -6188 => x"70840556", -6189 => x"0c727727", -6190 => x"0b0b0b0b", -6191 => x"d6387270", -6192 => x"84055408", -6193 => x"74708405", -6194 => x"560c7673", -6195 => x"260b0b0b", -6196 => x"0bd7380b", -6197 => x"0b0bffbb", -6198 => x"39fb3d0d", -6199 => x"77799011", -6200 => x"08901308", -6201 => x"71317056", -6202 => x"54555754", -6203 => x"700b0b0b", -6204 => x"0bb33894", -6205 => x"1473822b", -6206 => x"71117119", -6207 => x"94055254", -6208 => x"5255fc12", -6209 => x"fc127108", -6210 => x"71085656", -6211 => x"52527373", -6212 => x"2e098106", -6213 => x"0b0b0b0b", -6214 => x"93387175", -6215 => x"260b0b0b", -6216 => x"0be03880", -6217 => x"5271800c", -6218 => x"873d0d04", -6219 => x"ff517274", -6220 => x"260b0b0b", -6221 => x"0b833881", -6222 => x"5170800c", -6223 => x"873d0d04", -6224 => x"f33d0d7f", -6225 => x"61637055", -6226 => x"71545754", -6227 => x"560b0b0b", -6228 => x"ff873f80", -6229 => x"08548008", -6230 => x"802e0b0b", -6231 => x"0b81e038", -6232 => x"80547380", -6233 => x"08240b0b", -6234 => x"0b81f638", -6235 => x"84130852", -6236 => x"75510b0b", -6237 => x"0bf0d23f", -6238 => x"80087480", -6239 => x"088c050c", -6240 => x"90140894", -6241 => x"15711010", -6242 => x"11941990", -6243 => x"1a081010", -6244 => x"11800894", -6245 => x"055d415d", -6246 => x"415a5c5d", -6247 => x"805a7770", -6248 => x"84055908", -6249 => x"7083ffff", -6250 => x"067a7084", -6251 => x"055c0870", -6252 => x"83ffff06", -6253 => x"7271311e", -6254 => x"74902a73", -6255 => x"902a3171", -6256 => x"902c1170", -6257 => x"902c4151", -6258 => x"55515657", -6259 => x"57547377", -6260 => x"23728218", -6261 => x"23841757", -6262 => x"7b79260b", -6263 => x"0b0bffbe", -6264 => x"38777e27", -6265 => x"0b0b0b0b", -6266 => x"b0387770", -6267 => x"84055908", -6268 => x"7083ffff", -6269 => x"067b1170", -6270 => x"902c7390", -6271 => x"2a057090", -6272 => x"2c5e5351", -6273 => x"54547377", -6274 => x"23728218", -6275 => x"23841757", -6276 => x"7d78260b", -6277 => x"0b0b0bd2", -6278 => x"38fc1757", -6279 => x"76080b0b", -6280 => x"0b0b9138", -6281 => x"ff1bfc18", -6282 => x"585b7608", -6283 => x"802e0b0b", -6284 => x"0b0bf138", -6285 => x"7a901e0c", -6286 => x"7c800c8f", -6287 => x"3d0d0480", -6288 => x"08527551", -6289 => x"0b0b0bef", -6290 => x"803f8008", -6291 => x"5d810b80", -6292 => x"0890050c", -6293 => x"73800894", -6294 => x"050c7c80", -6295 => x"0c8f3d0d", -6296 => x"04727554", -6297 => x"55810b84", -6298 => x"14085376", -6299 => x"52540b0b", -6300 => x"0beed63f", -6301 => x"80087480", -6302 => x"088c050c", -6303 => x"90140894", -6304 => x"15711010", -6305 => x"11941990", -6306 => x"1a081010", -6307 => x"11800894", -6308 => x"055d415d", -6309 => x"415a5c5d", -6310 => x"805a0b0b", -6311 => x"0bfdff39", -6312 => x"fa3d0d78", -6313 => x"7a7c5457", -6314 => x"7258769f", -6315 => x"fe0a0686", -6316 => x"bf0a0553", -6317 => x"53807225", -6318 => x"0b0b0b0b", -6319 => x"95387154", -6320 => x"80557375", -6321 => x"53730c71", -6322 => x"84140c72", -6323 => x"800c883d", -6324 => x"0d047130", -6325 => x"70942c53", -6326 => x"51937225", -6327 => x"0b0b0b0b", -6328 => x"ab388054", -6329 => x"ec129f71", -6330 => x"3181712b", -6331 => x"5152529e", -6332 => x"72250b0b", -6333 => x"0b0b8338", -6334 => x"81517055", -6335 => x"73755373", -6336 => x"0c718414", -6337 => x"0c72800c", -6338 => x"883d0d04", -6339 => x"a0808072", -6340 => x"2c548055", -6341 => x"0b0b0bff", -6342 => x"a939f63d", -6343 => x"0d7c7e94", -6344 => x"11901208", -6345 => x"101011fc", -6346 => x"11700870", -6347 => x"575a5157", -6348 => x"5853590b", -6349 => x"0b0bf1d0", -6350 => x"3f80087f", -6351 => x"a00b8008", -6352 => x"31710c53", -6353 => x"538a0b80", -6354 => x"08250b0b", -6355 => x"0b80f738", -6356 => x"80577376", -6357 => x"260b0b0b", -6358 => x"80c438f5", -6359 => x"13537280", -6360 => x"2e0b0b0b", -6361 => x"80c838a0", -6362 => x"73317574", -6363 => x"2b78722a", -6364 => x"079ffc0a", -6365 => x"075b5880", -6366 => x"55757427", -6367 => x"0b0b0b0b", -6368 => x"8538fc14", -6369 => x"08557673", -6370 => x"2b75792a", -6371 => x"075b797b", -6372 => x"54790c72", -6373 => x"841a0c78", -6374 => x"800c8c3d", -6375 => x"0d04fc14", -6376 => x"7008f515", -6377 => x"55585472", -6378 => x"0b0b0bff", -6379 => x"ba38749f", -6380 => x"fc0a075a", -6381 => x"765b797b", -6382 => x"54790c72", -6383 => x"841a0c78", -6384 => x"800c8c3d", -6385 => x"0d048b0b", -6386 => x"80083175", -6387 => x"712a9ffc", -6388 => x"0a075b57", -6389 => x"80587574", -6390 => x"270b0b0b", -6391 => x"0b8538fc", -6392 => x"14085895", -6393 => x"1375712b", -6394 => x"79792a07", -6395 => x"5c52797b", -6396 => x"54790c72", -6397 => x"841a0c78", -6398 => x"800c8c3d", -6399 => x"0d04f33d", -6400 => x"0d626462", -6401 => x"64575f75", -6402 => x"405b5981", -6403 => x"527f510b", -6404 => x"0b0bebb5", -6405 => x"3f800880", -6406 => x"0894057e", -6407 => x"70bfffff", -6408 => x"06705f71", -6409 => x"fe0a0670", -6410 => x"4270942a", -6411 => x"5b525755", -6412 => x"59577580", -6413 => x"2e0b0b0b", -6414 => x"0b873873", -6415 => x"90800a07", -6416 => x"5b7d5372", -6417 => x"802e0b0b", -6418 => x"0b80e038", -6419 => x"725c8f3d", -6420 => x"f405510b", -6421 => x"0b0bf0b1", -6422 => x"3f800855", -6423 => x"8008802e", -6424 => x"0b0b0b81", -6425 => x"8d38a00b", -6426 => x"8008317b", -6427 => x"712b7d07", -6428 => x"790c537a", -6429 => x"80082a5b", -6430 => x"7a70841a", -6431 => x"0c703070", -6432 => x"72078025", -6433 => x"82713170", -6434 => x"901c0c51", -6435 => x"51545475", -6436 => x"802e0b0b", -6437 => x"0b0bb638", -6438 => x"7416f7cd", -6439 => x"05790cb5", -6440 => x"75317a0c", -6441 => x"76800c8f", -6442 => x"3d0d048f", -6443 => x"3df00551", -6444 => x"0b0b0bef", -6445 => x"d43f7a78", -6446 => x"0c810b90", -6447 => x"180c810b", -6448 => x"8008a005", -6449 => x"5653750b", -6450 => x"0b0b0bcc", -6451 => x"38f7ce15", -6452 => x"790c7285", -6453 => x"2b731010", -6454 => x"19fc1108", -6455 => x"5354540b", -6456 => x"0b0beea4", -6457 => x"3f738008", -6458 => x"317a0c76", -6459 => x"800c8f3d", -6460 => x"0d047b78", -6461 => x"0c7a7084", -6462 => x"1a0c7030", -6463 => x"70720780", -6464 => x"25827131", -6465 => x"70901c0c", -6466 => x"51515454", -6467 => x"0b0b0bfe", -6468 => x"fe39f03d", -6469 => x"0d626466", -6470 => x"953de411", -6471 => x"577256f8", -6472 => x"05545858", -6473 => x"580b0b0b", -6474 => x"fbf03f92", -6475 => x"3de01154", -6476 => x"7653f005", -6477 => x"510b0b0b", -6478 => x"fbe03f90", -6479 => x"17089017", -6480 => x"0831852b", -6481 => x"7b7b3111", -6482 => x"51568076", -6483 => x"250b0b0b", -6484 => x"0bb03875", -6485 => x"90800a29", -6486 => x"6005407d", -6487 => x"7f585476", -6488 => x"557f6158", -6489 => x"52765392", -6490 => x"3de80551", -6491 => x"0b0b80d6", -6492 => x"ac3f7b7d", -6493 => x"58780c76", -6494 => x"84190c77", -6495 => x"800c923d", -6496 => x"0d047530", -6497 => x"7090800a", -6498 => x"291f5f56", -6499 => x"7d7f5854", -6500 => x"76557f61", -6501 => x"58527653", -6502 => x"923de805", -6503 => x"510b0b80", -6504 => x"d5fb3f7b", -6505 => x"7d58780c", -6506 => x"7684190c", -6507 => x"77800c92", -6508 => x"3d0d04f3", -6509 => x"3d0d7f61", -6510 => x"575c9ffc", -6511 => x"0a578058", -6512 => x"7597240b", -6513 => x"0b0b0b9d", -6514 => x"38751010", -6515 => x"100b0b82", -6516 => x"f2d80584", -6517 => x"11087108", -6518 => x"7e0c841e", -6519 => x"0c7c800c", -6520 => x"568f3d0d", -6521 => x"04807625", -6522 => x"0b0b0b0b", -6523 => x"ab388d3d", -6524 => x"5b80c882", -6525 => x"0a59805a", -6526 => x"78547955", -6527 => x"76527753", -6528 => x"7a510b0b", -6529 => x"0bb6963f", -6530 => x"7c7eff18", -6531 => x"58595775", -6532 => x"80240b0b", -6533 => x"0b0be138", -6534 => x"767c0c77", -6535 => x"841d0c7b", -6536 => x"800c8f3d", -6537 => x"0d04ef3d", -6538 => x"0d636567", -6539 => x"405d427b", -6540 => x"802e0b0b", -6541 => x"0b85ea38", -6542 => x"61510b0b", -6543 => x"0be7883f", -6544 => x"f81c7084", -6545 => x"120870fc", -6546 => x"0670628b", -6547 => x"0570f806", -6548 => x"4159455b", -6549 => x"5c415796", -6550 => x"74270b0b", -6551 => x"0b82fe38", -6552 => x"807b247e", -6553 => x"7c260759", -6554 => x"80547874", -6555 => x"2e098106", -6556 => x"0b0b0b82", -6557 => x"e138777b", -6558 => x"250b0b0b", -6559 => x"82ab3877", -6560 => x"170b0b82", -6561 => x"fcc80b88", -6562 => x"05085e56", -6563 => x"7c762e0b", -6564 => x"0b0b859f", -6565 => x"38841608", -6566 => x"70fe0617", -6567 => x"84110881", -6568 => x"06515555", -6569 => x"730b0b0b", -6570 => x"82bb3874", -6571 => x"fc06597c", -6572 => x"762e0b0b", -6573 => x"0b85c938", -6574 => x"77195f7e", -6575 => x"7b250b0b", -6576 => x"0b82aa38", -6577 => x"79810654", -6578 => x"730b0b0b", -6579 => x"82f53876", -6580 => x"77083184", -6581 => x"1108fc06", -6582 => x"565a7580", -6583 => x"2e0b0b0b", -6584 => x"0b97387c", -6585 => x"762e0b0b", -6586 => x"0b85d438", -6587 => x"74191859", -6588 => x"787b250b", -6589 => x"0b0b84e2", -6590 => x"3879802e", -6591 => x"0b0b0b82", -6592 => x"c2387715", -6593 => x"567a7624", -6594 => x"0b0b0b82", -6595 => x"b6388c1a", -6596 => x"08881b08", -6597 => x"718c120c", -6598 => x"88120c55", -6599 => x"79765957", -6600 => x"881761fc", -6601 => x"05575975", -6602 => x"a4260b0b", -6603 => x"0b86e638", -6604 => x"7b795555", -6605 => x"9376270b", -6606 => x"0b0b80d1", -6607 => x"387b7084", -6608 => x"055d087c", -6609 => x"56790c74", -6610 => x"70840556", -6611 => x"088c180c", -6612 => x"9017549b", -6613 => x"76270b0b", -6614 => x"0b0bb238", -6615 => x"74708405", -6616 => x"5608740c", -6617 => x"74708405", -6618 => x"56089418", -6619 => x"0c981754", -6620 => x"a376270b", -6621 => x"0b0b0b95", -6622 => x"38747084", -6623 => x"05560874", -6624 => x"0c747084", -6625 => x"0556089c", -6626 => x"180ca017", -6627 => x"54747084", -6628 => x"05560874", -6629 => x"70840556", -6630 => x"0c747084", -6631 => x"05560874", -6632 => x"70840556", -6633 => x"0c740874", -6634 => x"0c777b31", -6635 => x"56758f26", -6636 => x"0b0b0b80", -6637 => x"d5388417", -6638 => x"08810678", -6639 => x"0784180c", -6640 => x"77178411", -6641 => x"08810784", -6642 => x"120c5461", -6643 => x"510b0b0b", -6644 => x"e3f63f88", -6645 => x"17547380", -6646 => x"0c933d0d", -6647 => x"04905b0b", -6648 => x"0b0bfcfc", -6649 => x"3978560b", -6650 => x"0b0bfdd8", -6651 => x"398c1608", -6652 => x"88170871", -6653 => x"8c120c88", -6654 => x"120c557e", -6655 => x"707c3157", -6656 => x"588f7627", -6657 => x"0b0b0bff", -6658 => x"ad387a17", -6659 => x"84180881", -6660 => x"067c0784", -6661 => x"190c7681", -6662 => x"0784120c", -6663 => x"76118411", -6664 => x"08810784", -6665 => x"120c5588", -6666 => x"05526151", -6667 => x"0b0bffbc", -6668 => x"873f6151", -6669 => x"0b0b0be3", -6670 => x"8f3f8817", -6671 => x"540b0b0b", -6672 => x"ff94397d", -6673 => x"5261510b", -6674 => x"0b0bcef6", -6675 => x"3f800859", -6676 => x"8008802e", -6677 => x"0b0b0b81", -6678 => x"b7388008", -6679 => x"f8056084", -6680 => x"0508fe06", -6681 => x"61055557", -6682 => x"76742e0b", -6683 => x"0b0b84b7", -6684 => x"38fc1856", -6685 => x"75a4260b", -6686 => x"0b0b81c1", -6687 => x"387b8008", -6688 => x"55559376", -6689 => x"270b0b0b", -6690 => x"80e03874", -6691 => x"70840556", -6692 => x"08800870", -6693 => x"8405800c", -6694 => x"0c800875", -6695 => x"70840557", -6696 => x"08717084", -6697 => x"05530c54", -6698 => x"9b76270b", -6699 => x"0b0b0bba", -6700 => x"38747084", -6701 => x"05560874", -6702 => x"70840556", -6703 => x"0c747084", -6704 => x"05560874", -6705 => x"70840556", -6706 => x"0ca37627", -6707 => x"0b0b0b0b", -6708 => x"99387470", -6709 => x"84055608", -6710 => x"74708405", -6711 => x"560c7470", -6712 => x"84055608", -6713 => x"74708405", -6714 => x"560c7470", -6715 => x"84055608", -6716 => x"74708405", -6717 => x"560c7470", -6718 => x"84055608", -6719 => x"74708405", -6720 => x"560c7408", -6721 => x"740c7b52", -6722 => x"61510b0b", -6723 => x"ffbaa93f", -6724 => x"61510b0b", -6725 => x"0be1b13f", -6726 => x"78547380", -6727 => x"0c933d0d", -6728 => x"047d5261", -6729 => x"510b0b0b", -6730 => x"cd983f80", -6731 => x"08800c93", -6732 => x"3d0d0484", -6733 => x"1608550b", -6734 => x"0b0bfaef", -6735 => x"3975537b", -6736 => x"52800851", -6737 => x"0b0bfec0", -6738 => x"c23f7b52", -6739 => x"61510b0b", -6740 => x"ffb9e53f", -6741 => x"0b0b0bff", -6742 => x"b7398c16", -6743 => x"08881708", -6744 => x"718c120c", -6745 => x"88120c55", -6746 => x"8c1a0888", -6747 => x"1b08718c", -6748 => x"120c8812", -6749 => x"0c557979", -6750 => x"59570b0b", -6751 => x"0bfba139", -6752 => x"7719901c", -6753 => x"55557375", -6754 => x"240b0b0b", -6755 => x"fab6387a", -6756 => x"17700b0b", -6757 => x"82fcc80b", -6758 => x"88050c75", -6759 => x"7c318107", -6760 => x"84120c5d", -6761 => x"84170881", -6762 => x"067b0784", -6763 => x"180c6151", -6764 => x"0b0b0be0", -6765 => x"933f8817", -6766 => x"540b0b0b", -6767 => x"fc983974", -6768 => x"1918901c", -6769 => x"555d737d", -6770 => x"240b0b0b", -6771 => x"faab388c", -6772 => x"1a08881b", -6773 => x"08718c12", -6774 => x"0c88120c", -6775 => x"55881a61", -6776 => x"fc055759", -6777 => x"75a4260b", -6778 => x"0b0b81ca", -6779 => x"387b7955", -6780 => x"55937627", -6781 => x"0b0b0b80", -6782 => x"d1387b70", -6783 => x"84055d08", -6784 => x"7c56790c", -6785 => x"74708405", -6786 => x"56088c1b", -6787 => x"0c901a54", -6788 => x"9b76270b", -6789 => x"0b0b0bb2", -6790 => x"38747084", -6791 => x"05560874", -6792 => x"0c747084", -6793 => x"05560894", -6794 => x"1b0c981a", -6795 => x"54a37627", -6796 => x"0b0b0b0b", -6797 => x"95387470", -6798 => x"84055608", -6799 => x"740c7470", -6800 => x"84055608", -6801 => x"9c1b0ca0", -6802 => x"1a547470", -6803 => x"84055608", -6804 => x"74708405", -6805 => x"560c7470", -6806 => x"84055608", -6807 => x"74708405", -6808 => x"560c7408", -6809 => x"740c7a1a", -6810 => x"700b0b82", -6811 => x"fcc80b88", -6812 => x"050c7d7c", -6813 => x"31810784", -6814 => x"120c5484", -6815 => x"1a088106", -6816 => x"7b07841b", -6817 => x"0c61510b", -6818 => x"0b0bdebc", -6819 => x"3f78540b", -6820 => x"0b0bfd86", -6821 => x"3975537b", -6822 => x"5278510b", -6823 => x"0bfebdeb", -6824 => x"3f0b0b0b", -6825 => x"fa833984", -6826 => x"1708fc06", -6827 => x"18605858", -6828 => x"0b0b0bf9", -6829 => x"f4397553", -6830 => x"7b527851", -6831 => x"0b0bfebd", -6832 => x"ca3f7a1a", -6833 => x"700b0b82", -6834 => x"fcc80b88", -6835 => x"050c7d7c", -6836 => x"31810784", -6837 => x"120c5484", -6838 => x"1a088106", -6839 => x"7b07841b", -6840 => x"0c0b0b0b", -6841 => x"ff9f3970", -6842 => x"70707075", -6843 => x"77535371", -6844 => x"54733070", -6845 => x"75079f2a", -6846 => x"7075fe0a", -6847 => x"06079081", -6848 => x"0a119ffe", -6849 => x"0a723107", -6850 => x"709f2a81", -6851 => x"7131800c", -6852 => x"51515151", -6853 => x"51505050", -6854 => x"50047070", -6855 => x"70707577", -6856 => x"53537154", -6857 => x"73307075", -6858 => x"079f2a70", -6859 => x"75fe0a06", -6860 => x"079ffe0a", -6861 => x"71319f2a", -6862 => x"800c5151", -6863 => x"51505050", -6864 => x"50047070", -6865 => x"7070800b", -6866 => x"0b0b8385", -6867 => x"840c7651", -6868 => x"0b0b0b8c", -6869 => x"f33f8008", -6870 => x"538008ff", -6871 => x"2e0b0b0b", -6872 => x"0b893872", -6873 => x"800c5050", -6874 => x"5050040b", -6875 => x"0b838584", -6876 => x"08547380", -6877 => x"2e0b0b0b", -6878 => x"0be93875", -6879 => x"74710c52", -6880 => x"72800c50", -6881 => x"50505004", -6882 => x"f93d0d79", -6883 => x"7c557b54", -6884 => x"8e112270", -6885 => x"902b7090", -6886 => x"2c55570b", -6887 => x"0b82f4ec", -6888 => x"08535856", -6889 => x"0b0b0b88", -6890 => x"ac3f8008", -6891 => x"57800b80", -6892 => x"08240b0b", -6893 => x"0b0b9338", -6894 => x"80d01608", -6895 => x"80080580", -6896 => x"d0170c76", -6897 => x"800c893d", -6898 => x"0d048c16", -6899 => x"2283dfff", -6900 => x"0655748c", -6901 => x"17237680", -6902 => x"0c893d0d", -6903 => x"04fa3d0d", -6904 => x"788c1122", -6905 => x"70882a70", -6906 => x"81065157", -6907 => x"5856740b", -6908 => x"0b0b0bae", -6909 => x"388c1622", -6910 => x"83dfff06", -6911 => x"55748c17", -6912 => x"237a5479", -6913 => x"538e1622", -6914 => x"70902b70", -6915 => x"902c5456", -6916 => x"0b0b82f4", -6917 => x"ec085256", -6918 => x"0b0b0b83", -6919 => x"f33f883d", -6920 => x"0d048254", -6921 => x"80538e16", -6922 => x"2270902b", -6923 => x"70902c54", -6924 => x"560b0b82", -6925 => x"f4ec0852", -6926 => x"570b0b0b", -6927 => x"86d03f8c", -6928 => x"162283df", -6929 => x"ff065574", -6930 => x"8c17237a", -6931 => x"5479538e", -6932 => x"16227090", -6933 => x"2b70902c", -6934 => x"54560b0b", -6935 => x"82f4ec08", -6936 => x"52560b0b", -6937 => x"0b83a93f", -6938 => x"883d0d04", -6939 => x"f93d0d79", -6940 => x"7c557b54", -6941 => x"8e112270", -6942 => x"902b7090", -6943 => x"2c55570b", -6944 => x"0b82f4ec", -6945 => x"08535856", -6946 => x"0b0b0b86", -6947 => x"813f8008", -6948 => x"578008ff", -6949 => x"2e0b0b0b", -6950 => x"0b99388c", -6951 => x"1622a080", -6952 => x"0755748c", -6953 => x"17238008", -6954 => x"80d0170c", -6955 => x"76800c89", -6956 => x"3d0d048c", -6957 => x"162283df", -6958 => x"ff065574", -6959 => x"8c172376", -6960 => x"800c893d", -6961 => x"0d047070", -6962 => x"70748e11", -6963 => x"2270902b", -6964 => x"70902c55", -6965 => x"5151530b", -6966 => x"0b82f4ec", -6967 => x"08510b0b", -6968 => x"0b84a03f", -6969 => x"50505004", -6970 => x"fb3d0d77", -6971 => x"79707207", -6972 => x"83065354", -6973 => x"52700b0b", -6974 => x"0b0b9638", -6975 => x"71737308", -6976 => x"54565471", -6977 => x"73082e0b", -6978 => x"0b0b80d0", -6979 => x"38737554", -6980 => x"52713370", -6981 => x"81ff0652", -6982 => x"5470802e", -6983 => x"0b0b0b0b", -6984 => x"a5387233", -6985 => x"5570752e", -6986 => x"0981060b", -6987 => x"0b0b0b99", -6988 => x"38811281", -6989 => x"14713370", -6990 => x"81ff0654", -6991 => x"56545270", -6992 => x"0b0b0b0b", -6993 => x"dd387233", -6994 => x"557381ff", -6995 => x"067581ff", -6996 => x"06717131", -6997 => x"800c5252", -6998 => x"873d0d04", -6999 => x"710970f7", -7000 => x"fbfdff14", -7001 => x"0670f884", -7002 => x"82818006", -7003 => x"51515170", -7004 => x"0b0b0b0b", -7005 => x"9e388414", -7006 => x"84167108", -7007 => x"54565471", -7008 => x"75082e0b", -7009 => x"0b0b0bd4", -7010 => x"38737554", -7011 => x"520b0b0b", -7012 => x"feff3980", -7013 => x"0b800c87", -7014 => x"3d0d0470", -7015 => x"70707075", -7016 => x"70718306", -7017 => x"53555270", -7018 => x"0b0b0b80", -7019 => x"c0387170", -7020 => x"087009f7", -7021 => x"fbfdff12", -7022 => x"0670f884", -7023 => x"82818006", -7024 => x"51515253", -7025 => x"700b0b0b", -7026 => x"0ba13884", -7027 => x"13700870", -7028 => x"09f7fbfd", -7029 => x"ff120670", -7030 => x"f8848281", -7031 => x"80065151", -7032 => x"52537080", -7033 => x"2e0b0b0b", -7034 => x"0be13872", -7035 => x"52713351", -7036 => x"70802e0b", -7037 => x"0b0b0b8e", -7038 => x"38811270", -7039 => x"33525270", -7040 => x"0b0b0b0b", -7041 => x"f4387174", -7042 => x"31800c50", -7043 => x"50505004", -7044 => x"fb3d0d80", -7045 => x"0b0b0b83", -7046 => x"85840c7a", -7047 => x"53795278", -7048 => x"510b0b0b", -7049 => x"88de3f80", -7050 => x"08558008", -7051 => x"ff2e0b0b", -7052 => x"0b0b8838", -7053 => x"74800c87", -7054 => x"3d0d040b", -7055 => x"0b838584", -7056 => x"08567580", -7057 => x"2e0b0b0b", -7058 => x"0bea3877", -7059 => x"76710c54", -7060 => x"74800c87", -7061 => x"3d0d04fb", -7062 => x"3d0d787a", -7063 => x"29527751", -7064 => x"0b0b0bc2", -7065 => x"dd3f8008", -7066 => x"80085556", -7067 => x"8008802e", -7068 => x"0b0b0b80", -7069 => x"f2388008", -7070 => x"fc0508fc", -7071 => x"06fc0555", -7072 => x"74a4260b", -7073 => x"0b0b80e6", -7074 => x"38937527", -7075 => x"0b0b0b80", -7076 => x"c338800b", -7077 => x"80087084", -7078 => x"05800c0c", -7079 => x"80085480", -7080 => x"74708405", -7081 => x"560c9b75", -7082 => x"270b0b0b", -7083 => x"0ba63880", -7084 => x"74708405", -7085 => x"560c8074", -7086 => x"70840556", -7087 => x"0ca37527", -7088 => x"0b0b0b0b", -7089 => x"8f388074", -7090 => x"70840556", -7091 => x"0c807470", -7092 => x"8405560c", -7093 => x"80747084", -7094 => x"05560c80", -7095 => x"74708405", -7096 => x"560c8074", -7097 => x"0c755473", -7098 => x"800c873d", -7099 => x"0d047453", -7100 => x"80528008", -7101 => x"510b0b0b", -7102 => x"d49b3f75", -7103 => x"540b0b0b", -7104 => x"0be53970", -7105 => x"70707080", -7106 => x"0b0b0b83", -7107 => x"85840c76", -7108 => x"510b0b0b", -7109 => x"8a943f80", -7110 => x"08538008", -7111 => x"ff2e0b0b", -7112 => x"0b0b8938", -7113 => x"72800c50", -7114 => x"50505004", -7115 => x"0b0b8385", -7116 => x"84085473", -7117 => x"802e0b0b", -7118 => x"0b0be938", -7119 => x"7574710c", -7120 => x"5272800c", -7121 => x"50505050", -7122 => x"04fc3d0d", -7123 => x"800b0b0b", -7124 => x"8385840c", -7125 => x"78527751", -7126 => x"0b0b0b8d", -7127 => x"823f8008", -7128 => x"548008ff", -7129 => x"2e0b0b0b", -7130 => x"0b883873", -7131 => x"800c863d", -7132 => x"0d040b0b", -7133 => x"83858408", -7134 => x"5574802e", -7135 => x"0b0b0b0b", -7136 => x"ea387675", -7137 => x"710c5373", -7138 => x"800c863d", -7139 => x"0d04fb3d", -7140 => x"0d800b0b", -7141 => x"0b838584", -7142 => x"0c7a5379", -7143 => x"5278510b", -7144 => x"0b0b8a9e", -7145 => x"3f800855", -7146 => x"8008ff2e", -7147 => x"0b0b0b0b", -7148 => x"88387480", -7149 => x"0c873d0d", -7150 => x"040b0b83", -7151 => x"85840856", -7152 => x"75802e0b", -7153 => x"0b0b0bea", -7154 => x"38777671", -7155 => x"0c547480", -7156 => x"0c873d0d", -7157 => x"04fb3d0d", -7158 => x"800b0b0b", -7159 => x"8385840c", -7160 => x"7a537952", -7161 => x"78510b0b", -7162 => x"0b86b13f", -7163 => x"80085580", -7164 => x"08ff2e0b", -7165 => x"0b0b0b88", -7166 => x"3874800c", -7167 => x"873d0d04", -7168 => x"0b0b8385", -7169 => x"84085675", -7170 => x"802e0b0b", -7171 => x"0b0bea38", -7172 => x"7776710c", -7173 => x"5474800c", -7174 => x"873d0d04", -7175 => x"fc3d0d76", -7176 => x"78700855", -7177 => x"5555720b", -7178 => x"0b0b0b8f", -7179 => x"38735274", -7180 => x"510b0bff", -7181 => x"ac823f86", -7182 => x"3d0d0472", -7183 => x"5274510b", -7184 => x"0b0b0bd8", -7185 => x"3f735274", -7186 => x"510b0bff", -7187 => x"abea3f86", -7188 => x"3d0d04fb", -7189 => x"3d0d7755", -7190 => x"740b0b82", -7191 => x"f4ec082e", -7192 => x"0b0b0b80", -7193 => x"fe3880cc", -7194 => x"15085380", -7195 => x"5672762e", -7196 => x"0981060b", -7197 => x"0b0b8180", -7198 => x"3882c815", -7199 => x"08537280", -7200 => x"2e0b0b0b", -7201 => x"0bb23882", -7202 => x"cc155672", -7203 => x"762e0b0b", -7204 => x"0b0ba538", -7205 => x"72547574", -7206 => x"2e0b0b0b", -7207 => x"0b9a3873", -7208 => x"74085552", -7209 => x"74510b0b", -7210 => x"ffab8d3f", -7211 => x"75742e09", -7212 => x"81060b0b", -7213 => x"0b0be838", -7214 => x"80d41508", -7215 => x"53720b0b", -7216 => x"0b80d938", -7217 => x"b8150880", -7218 => x"2e0b0b0b", -7219 => x"0b953874", -7220 => x"51bc1508", -7221 => x"53722d84", -7222 => x"dc150853", -7223 => x"720b0b0b", -7224 => x"80ca3887", -7225 => x"3d0d0481", -7226 => x"1656758e", -7227 => x"240b0b0b", -7228 => x"80c83880", -7229 => x"cc150853", -7230 => x"75101013", -7231 => x"70085553", -7232 => x"73802e0b", -7233 => x"0b0b0bdf", -7234 => x"38737408", -7235 => x"55527451", -7236 => x"0b0bffaa", -7237 => x"a33f0b0b", -7238 => x"0b0be539", -7239 => x"72527451", -7240 => x"0b0bffaa", -7241 => x"933f0b0b", -7242 => x"0bff9939", -7243 => x"72527451", -7244 => x"0b0b0bfd", -7245 => x"e73f873d", -7246 => x"0d0480cc", -7247 => x"15085274", -7248 => x"510b0bff", -7249 => x"a9f23f0b", -7250 => x"0b0bfead", -7251 => x"39fb3d0d", -7252 => x"77567580", -7253 => x"2e0b0b0b", -7254 => x"80dc3882", -7255 => x"c8160855", -7256 => x"74802e0b", -7257 => x"0b0b0bb5", -7258 => x"38841508", -7259 => x"ff055480", -7260 => x"74240b0b", -7261 => x"0b0b9c38", -7262 => x"73101015", -7263 => x"88055372", -7264 => x"08fc1454", -7265 => x"52712dff", -7266 => x"14547380", -7267 => x"250b0b0b", -7268 => x"0bed3874", -7269 => x"0855740b", -7270 => x"0b0b0bcd", -7271 => x"38bc1608", -7272 => x"0b0b0b0b", -7273 => x"8538873d", -7274 => x"0d047551", -7275 => x"bc160852", -7276 => x"712d873d", -7277 => x"0d040b0b", -7278 => x"82f4ec08", -7279 => x"82c81108", -7280 => x"56560b0b", -7281 => x"0bff9939", -7282 => x"7070700b", -7283 => x"0b8384fc", -7284 => x"080b0b0b", -7285 => x"0b8d380b", -7286 => x"0b838588", -7287 => x"0b0b0b83", -7288 => x"84fc0c0b", -7289 => x"0b8384fc", -7290 => x"08751152", -7291 => x"52ff5370", -7292 => x"0b87fb80", -7293 => x"80260b0b", -7294 => x"0b0b8a38", -7295 => x"700b0b83", -7296 => x"84fc0c71", -7297 => x"5372800c", -7298 => x"50505004", -7299 => x"fd3d0d80", -7300 => x"0b0b0b82", -7301 => x"f4e00854", -7302 => x"5472812e", -7303 => x"0b0b0b0b", -7304 => x"ab38730b", -7305 => x"0b838580", -7306 => x"0c0b0bfe", -7307 => x"a5853f0b", -7308 => x"0bfea3cc", -7309 => x"3f0b0b83", -7310 => x"84d05281", -7311 => x"510b0bfe", -7312 => x"a7dd3f80", -7313 => x"08510b0b", -7314 => x"0b89973f", -7315 => x"720b0b83", -7316 => x"85800c0b", -7317 => x"0bfea4db", -7318 => x"3f0b0bfe", -7319 => x"a3a23f0b", -7320 => x"0b8384d0", -7321 => x"5281510b", -7322 => x"0bfea7b3", -7323 => x"3f800851", -7324 => x"0b0b0b88", -7325 => x"ed3f000b", -7326 => x"0b0b0bfb", -7327 => x"39000b0b", -7328 => x"0b0bfb39", -7329 => x"f53d0d7e", -7330 => x"600b0b83", -7331 => x"85800870", -7332 => x"5b585b5b", -7333 => x"750b0b0b", -7334 => x"80db3877", -7335 => x"7a250b0b", -7336 => x"0b0bac38", -7337 => x"771b7033", -7338 => x"7081ff06", -7339 => x"58585975", -7340 => x"8a2e0b0b", -7341 => x"0b0b9f38", -7342 => x"7681ff06", -7343 => x"510b0bfe", -7344 => x"a3cc3f81", -7345 => x"18587978", -7346 => x"240b0b0b", -7347 => x"0bd63879", -7348 => x"800c8d3d", -7349 => x"0d048d51", -7350 => x"0b0bfea3", -7351 => x"b13f7833", -7352 => x"7081ff06", -7353 => x"52570b0b", -7354 => x"fea3a33f", -7355 => x"8118580b", -7356 => x"0b0b0bd2", -7357 => x"3979557a", -7358 => x"547d5385", -7359 => x"528d3dfc", -7360 => x"05510b0b", -7361 => x"fea2c03f", -7362 => x"8008560b", -7363 => x"0b0b87c9", -7364 => x"3f7b8008", -7365 => x"0c75800c", -7366 => x"8d3d0d04", -7367 => x"f63d0d7d", -7368 => x"7f0b0b83", -7369 => x"85800870", -7370 => x"5b585a5a", -7371 => x"750b0b0b", -7372 => x"80d63877", -7373 => x"79250b0b", -7374 => x"0b80c438", -7375 => x"0b0bfea2", -7376 => x"a43f8008", -7377 => x"81ff0670", -7378 => x"8d327030", -7379 => x"709f2a51", -7380 => x"51575776", -7381 => x"8a2e0b0b", -7382 => x"0b80d438", -7383 => x"75802e0b", -7384 => x"0b0b80cb", -7385 => x"38771a56", -7386 => x"76763476", -7387 => x"510b0bfe", -7388 => x"a29c3f81", -7389 => x"18587878", -7390 => x"240b0b0b", -7391 => x"ffbe3877", -7392 => x"5675800c", -7393 => x"8c3d0d04", -7394 => x"78557954", -7395 => x"7c538452", -7396 => x"8c3dfc05", -7397 => x"510b0bfe", -7398 => x"a1ad3f80", -7399 => x"08560b0b", -7400 => x"0b86b63f", -7401 => x"7a80080c", -7402 => x"75800c8c", -7403 => x"3d0d0477", -7404 => x"1a568a76", -7405 => x"34811858", -7406 => x"8d510b0b", -7407 => x"fea1cf3f", -7408 => x"8a510b0b", -7409 => x"fea1c73f", -7410 => x"77560b0b", -7411 => x"0bffb239", -7412 => x"f93d0d79", -7413 => x"570b0b83", -7414 => x"85800880", -7415 => x"2e0b0b0b", -7416 => x"0bb53876", -7417 => x"510b0b0b", -7418 => x"f3b13f7b", -7419 => x"567a5580", -7420 => x"08810554", -7421 => x"76538252", -7422 => x"893dfc05", -7423 => x"510b0bfe", -7424 => x"a0c53f80", -7425 => x"08570b0b", -7426 => x"0b85ce3f", -7427 => x"7780080c", -7428 => x"76800c89", -7429 => x"3d0d040b", -7430 => x"0b0b85bd", -7431 => x"3f850b80", -7432 => x"080cff0b", -7433 => x"800c893d", -7434 => x"0d04fb3d", -7435 => x"0d0b0b83", -7436 => x"85800870", -7437 => x"5654730b", -7438 => x"0b0b0b88", -7439 => x"3874800c", -7440 => x"873d0d04", -7441 => x"77538352", -7442 => x"873dfc05", -7443 => x"510b0bfe", -7444 => x"9ff53f80", -7445 => x"08540b0b", -7446 => x"0b84fe3f", -7447 => x"7580080c", -7448 => x"73800c87", -7449 => x"3d0d04ff", -7450 => x"0b800c04", -7451 => x"fb3d0d77", -7452 => x"550b0b83", -7453 => x"85800880", -7454 => x"2e0b0b0b", -7455 => x"0bb13874", -7456 => x"510b0b0b", -7457 => x"f2953f80", -7458 => x"08810554", -7459 => x"74538752", -7460 => x"873dfc05", -7461 => x"510b0bfe", -7462 => x"9fad3f80", -7463 => x"08550b0b", -7464 => x"0b84b63f", -7465 => x"7580080c", -7466 => x"74800c87", -7467 => x"3d0d040b", -7468 => x"0b0b84a5", -7469 => x"3f850b80", -7470 => x"080cff0b", -7471 => x"800c873d", -7472 => x"0d04fa3d", -7473 => x"0d0b0b83", -7474 => x"85800880", -7475 => x"2e0b0b0b", -7476 => x"0ba8387a", -7477 => x"55795478", -7478 => x"53865288", -7479 => x"3dfc0551", -7480 => x"0b0bfe9e", -7481 => x"e23f8008", -7482 => x"560b0b0b", -7483 => x"83eb3f76", -7484 => x"80080c75", -7485 => x"800c883d", -7486 => x"0d040b0b", -7487 => x"0b83da3f", -7488 => x"9d0b8008", -7489 => x"0cff0b80", -7490 => x"0c883d0d", -7491 => x"04fb3d0d", -7492 => x"77795656", -7493 => x"80705454", -7494 => x"7375250b", -7495 => x"0b0b0ba3", -7496 => x"38741010", -7497 => x"10f80552", -7498 => x"72167033", -7499 => x"70742b76", -7500 => x"078116f8", -7501 => x"16565656", -7502 => x"51517473", -7503 => x"240b0b0b", -7504 => x"0be63873", -7505 => x"800c873d", -7506 => x"0d04fc3d", -7507 => x"0d767855", -7508 => x"55bc5380", -7509 => x"5273510b", -7510 => x"0b0bc7b9", -7511 => x"3f845274", -7512 => x"510b0b0b", -7513 => x"ffa73f80", -7514 => x"08742384", -7515 => x"52841551", -7516 => x"0b0b0bff", -7517 => x"983f8008", -7518 => x"82152384", -7519 => x"52881551", -7520 => x"0b0b0bff", -7521 => x"883f8008", -7522 => x"84150c84", -7523 => x"528c1551", -7524 => x"0b0b0bfe", -7525 => x"f83f8008", -7526 => x"88152384", -7527 => x"52901551", -7528 => x"0b0b0bfe", -7529 => x"e83f8008", -7530 => x"8a152384", -7531 => x"52941551", -7532 => x"0b0b0bfe", -7533 => x"d83f8008", -7534 => x"8c152384", -7535 => x"52981551", -7536 => x"0b0b0bfe", -7537 => x"c83f8008", -7538 => x"8e152388", -7539 => x"529c1551", -7540 => x"0b0b0bfe", -7541 => x"b83f8008", -7542 => x"90150c86", -7543 => x"3d0d04e9", -7544 => x"3d0d6a0b", -7545 => x"0b838580", -7546 => x"08575775", -7547 => x"0b0b0b0b", -7548 => x"933880c0", -7549 => x"800b8418", -7550 => x"0c75ac18", -7551 => x"0c75800c", -7552 => x"993d0d04", -7553 => x"893d7055", -7554 => x"6a54558a", -7555 => x"52993dff", -7556 => x"bc05510b", -7557 => x"0bfe9caf", -7558 => x"3f800877", -7559 => x"53755256", -7560 => x"0b0b0bfe", -7561 => x"a53f0b0b", -7562 => x"0b81ae3f", -7563 => x"7780080c", -7564 => x"75800c99", -7565 => x"3d0d04e9", -7566 => x"3d0d6957", -7567 => x"0b0b8385", -7568 => x"8008802e", -7569 => x"0b0b0b80", -7570 => x"c1387651", -7571 => x"0b0b0bee", -7572 => x"ca3f893d", -7573 => x"70568008", -7574 => x"81055577", -7575 => x"54568f52", -7576 => x"993dffbc", -7577 => x"05510b0b", -7578 => x"fe9bdc3f", -7579 => x"80086b53", -7580 => x"7652570b", -7581 => x"0b0bfdd2", -7582 => x"3f0b0b0b", -7583 => x"80db3f77", -7584 => x"80080c76", -7585 => x"800c993d", -7586 => x"0d040b0b", -7587 => x"0b80ca3f", -7588 => x"850b8008", -7589 => x"0cff0b80", -7590 => x"0c993d0d", -7591 => x"04fc3d0d", -7592 => x"81540b0b", -7593 => x"83858008", -7594 => x"0b0b0b0b", -7595 => x"88387380", -7596 => x"0c863d0d", -7597 => x"04765397", -7598 => x"b952863d", -7599 => x"fc05510b", -7600 => x"0bfe9b83", -7601 => x"3f800854", -7602 => x"0b0b0b0b", -7603 => x"8c3f7480", -7604 => x"080c7380", -7605 => x"0c863d0d", -7606 => x"040b0b82", -7607 => x"f4ec0880", -7608 => x"0c04f73d", -7609 => x"0d7b0b0b", -7610 => x"82f4ec08", -7611 => x"82c81108", -7612 => x"5a545a77", -7613 => x"802e0b0b", -7614 => x"0b80ee38", -7615 => x"81881884", -7616 => x"1908ff05", -7617 => x"81712b59", -7618 => x"55598074", -7619 => x"240b0b0b", -7620 => x"81893880", -7621 => x"74240b0b", -7622 => x"0b0bbd38", -7623 => x"73822b78", -7624 => x"11880556", -7625 => x"56818019", -7626 => x"08770653", -7627 => x"72802e0b", -7628 => x"0b0b80c6", -7629 => x"38781670", -7630 => x"08535379", -7631 => x"51740853", -7632 => x"722dff14", -7633 => x"fc17fc17", -7634 => x"79812c5a", -7635 => x"57575473", -7636 => x"80250b0b", -7637 => x"0b0bce38", -7638 => x"77085877", -7639 => x"0b0b0bff", -7640 => x"9b380b0b", -7641 => x"82f4ec08", -7642 => x"53bc1308", -7643 => x"0b0b0b0b", -7644 => x"b2387951", -7645 => x"0b0b0bf5", -7646 => x"fd3f7408", -7647 => x"53722dff", -7648 => x"14fc17fc", -7649 => x"1779812c", -7650 => x"5a575754", -7651 => x"7380250b", -7652 => x"0b0bff91", -7653 => x"380b0b0b", -7654 => x"ffbe3980", -7655 => x"570b0b0b", -7656 => x"fef13972", -7657 => x"51bc1308", -7658 => x"53722d79", -7659 => x"510b0b0b", -7660 => x"f5c43f8c", -7661 => x"08028c0c", -7662 => x"d43d0d8c", -7663 => x"08880508", -7664 => x"510b0b0b", -7665 => x"8fb43f80", -7666 => x"08547380", -7667 => x"2e0b0b0b", -7668 => x"0b93388c", -7669 => x"08880508", -7670 => x"708c08d0", -7671 => x"050c540b", -7672 => x"0b0b8e8a", -7673 => x"398c088c", -7674 => x"0508510b", -7675 => x"0b0b8f8a", -7676 => x"3f800854", -7677 => x"73802e0b", -7678 => x"0b0b0b93", -7679 => x"388c088c", -7680 => x"0508708c", -7681 => x"08d0050c", -7682 => x"540b0b0b", -7683 => x"8de0398c", -7684 => x"08880508", -7685 => x"510b0b0b", -7686 => x"8eaa3f80", -7687 => x"08547380", -7688 => x"2e0b0b0b", -7689 => x"80d9388c", -7690 => x"088c0508", -7691 => x"510b0b0b", -7692 => x"8e923f80", -7693 => x"08547380", -7694 => x"2e0b0b0b", -7695 => x"0baf388c", -7696 => x"08880508", -7697 => x"8c088c05", -7698 => x"08555584", -7699 => x"15088415", -7700 => x"082e0b0b", -7701 => x"0b0b9638", -7702 => x"0b0b0b8d", -7703 => x"d43f8008", -7704 => x"708c08d0", -7705 => x"050c540b", -7706 => x"0b0b8d82", -7707 => x"398c0888", -7708 => x"0508708c", -7709 => x"08d0050c", -7710 => x"540b0b0b", -7711 => x"8cf0398c", -7712 => x"088c0508", -7713 => x"510b0b0b", -7714 => x"8dba3f80", -7715 => x"08547380", -7716 => x"2e0b0b0b", -7717 => x"0b93388c", -7718 => x"088c0508", -7719 => x"708c08d0", -7720 => x"050c540b", -7721 => x"0b0b8cc6", -7722 => x"398c088c", -7723 => x"0508510b", -7724 => x"0b0b8cc7", -7725 => x"3f800854", -7726 => x"73802e0b", -7727 => x"0b0b80f5", -7728 => x"388c0888", -7729 => x"0508510b", -7730 => x"0b0b8caf", -7731 => x"3f800854", -7732 => x"73802e0b", -7733 => x"0b0b80cb", -7734 => x"388c0890", -7735 => x"05088c08", -7736 => x"88050871", -7737 => x"58565494", -7738 => x"70547553", -7739 => x"7652540b", -7740 => x"0bfea197", -7741 => x"3f8c0890", -7742 => x"05088c08", -7743 => x"8805088c", -7744 => x"088c0508", -7745 => x"84120884", -7746 => x"12080684", -7747 => x"140c8c08", -7748 => x"90050870", -7749 => x"8c08d005", -7750 => x"0c515656", -7751 => x"560b0b0b", -7752 => x"8bcc398c", -7753 => x"08880508", -7754 => x"708c08d0", -7755 => x"050c540b", -7756 => x"0b0b8bba", -7757 => x"398c0888", -7758 => x"0508510b", -7759 => x"0b0b8bbb", -7760 => x"3f800854", -7761 => x"73802e0b", -7762 => x"0b0b0b93", -7763 => x"388c088c", -7764 => x"0508708c", -7765 => x"08d0050c", -7766 => x"540b0b0b", -7767 => x"8b90398c", -7768 => x"08880508", -7769 => x"8811088c", -7770 => x"08f4050c", -7771 => x"8c088c05", -7772 => x"08881108", -7773 => x"8c08f005", -7774 => x"0c8c0888", -7775 => x"05085151", -7776 => x"54901408", -7777 => x"8c150855", -7778 => x"55738c08", -7779 => x"e8050c74", -7780 => x"8c08ec05", -7781 => x"0c8c088c", -7782 => x"05085490", -7783 => x"14088c15", -7784 => x"08555573", -7785 => x"8c08e005", -7786 => x"0c748c08", -7787 => x"e4050c8c", -7788 => x"08f40508", -7789 => x"8c08f005", -7790 => x"08318c08", -7791 => x"dc050c8c", -7792 => x"08dc0508", -7793 => x"80250b0b", -7794 => x"0b0b8c38", -7795 => x"8c08dc05", -7796 => x"08308c08", -7797 => x"dc050c8c", -7798 => x"08dc0508", -7799 => x"bf240b0b", -7800 => x"0b81bf38", -7801 => x"8c08f005", -7802 => x"088c08f4", -7803 => x"0508250b", -7804 => x"0b0b80cf", -7805 => x"388c08f0", -7806 => x"05088105", -7807 => x"8c08f005", -7808 => x"0c8c08e0", -7809 => x"05088006", -7810 => x"8c08e405", -7811 => x"0881068c", -7812 => x"08e00508", -7813 => x"9f2b8c08", -7814 => x"e4050881", -7815 => x"2a707207", -7816 => x"8c08e005", -7817 => x"08812a70", -7818 => x"76078c08", -7819 => x"e0050c74", -7820 => x"72078c08", -7821 => x"e4050c59", -7822 => x"595b5b58", -7823 => x"560b0b0b", -7824 => x"ffa2398c", -7825 => x"08f40508", -7826 => x"8c08f005", -7827 => x"08250b0b", -7828 => x"0b819a38", -7829 => x"8c08f405", -7830 => x"0881058c", -7831 => x"08f4050c", -7832 => x"8c08e805", -7833 => x"0880068c", -7834 => x"08ec0508", -7835 => x"81068c08", -7836 => x"e805089f", -7837 => x"2b8c08ec", -7838 => x"0508812a", -7839 => x"7072078c", -7840 => x"08e80508", -7841 => x"812a7076", -7842 => x"078c08e8", -7843 => x"050c7472", -7844 => x"078c08ec", -7845 => x"050c5959", -7846 => x"5b5b5856", -7847 => x"0b0b0bff", -7848 => x"a2398c08", -7849 => x"f005088c", -7850 => x"08f40508", -7851 => x"250b0b0b", -7852 => x"0ba1388c", -7853 => x"08f40508", -7854 => x"8c08f005", -7855 => x"0c805480", -7856 => x"55738c08", -7857 => x"e0050c74", -7858 => x"8c08e405", -7859 => x"0c0b0b0b", -7860 => x"0b9b398c", -7861 => x"08f00508", -7862 => x"8c08f405", -7863 => x"0c805480", -7864 => x"55738c08", -7865 => x"e8050c74", -7866 => x"8c08ec05", -7867 => x"0c8c0888", -7868 => x"05088c08", -7869 => x"8c050855", -7870 => x"55841508", -7871 => x"8415082e", -7872 => x"0b0b0b85", -7873 => x"85388c08", -7874 => x"88050854", -7875 => x"84140880", -7876 => x"2e0b0b0b", -7877 => x"81bc388c", -7878 => x"08e00508", -7879 => x"8c08e405", -7880 => x"08565473", -7881 => x"8c08c805", -7882 => x"0c748c08", -7883 => x"cc050c8c", -7884 => x"08e80508", -7885 => x"8c08ec05", -7886 => x"08575574", -7887 => x"8c08c005", -7888 => x"0c758c08", -7889 => x"c4050c8c", -7890 => x"08cc0508", -7891 => x"8c08c405", -7892 => x"08717131", -7893 => x"708c08ff", -7894 => x"bc050c52", -7895 => x"5556810b", -7896 => x"8c08ffb4", -7897 => x"050c8c08", -7898 => x"ffbc0508", -7899 => x"8c08cc05", -7900 => x"08575574", -7901 => x"76260b0b", -7902 => x"0b0b8938", -7903 => x"800b8c08", -7904 => x"ffb4050c", -7905 => x"8c08c805", -7906 => x"088c08c0", -7907 => x"05087171", -7908 => x"31708c08", -7909 => x"ffb8050c", -7910 => x"8c08ffb8", -7911 => x"0508708c", -7912 => x"08ffb405", -7913 => x"0831708c", -7914 => x"08ffb805", -7915 => x"0c525952", -7916 => x"56548c08", -7917 => x"ffb80508", -7918 => x"8c08ffbc", -7919 => x"05085654", -7920 => x"738c08f8", -7921 => x"050c748c", -7922 => x"08fc050c", -7923 => x"0b0b0b81", -7924 => x"bf398c08", -7925 => x"e805088c", -7926 => x"08ec0508", -7927 => x"5755748c", -7928 => x"08ffac05", -7929 => x"0c758c08", -7930 => x"ffb0050c", -7931 => x"8c08e005", -7932 => x"088c08e4", -7933 => x"05085654", -7934 => x"738c08ff", -7935 => x"a4050c74", -7936 => x"8c08ffa8", -7937 => x"050c8c08", -7938 => x"ffb00508", -7939 => x"8c08ffa8", -7940 => x"05087171", -7941 => x"31708c08", -7942 => x"ffa0050c", -7943 => x"52575581", -7944 => x"0b8c08ff", -7945 => x"98050c8c", -7946 => x"08ffa005", -7947 => x"088c08ff", -7948 => x"b0050856", -7949 => x"54737526", -7950 => x"0b0b0b0b", -7951 => x"8938800b", -7952 => x"8c08ff98", -7953 => x"050c8c08", -7954 => x"ffac0508", -7955 => x"8c08ffa4", -7956 => x"05087171", -7957 => x"31708c08", -7958 => x"ff9c050c", -7959 => x"8c08ff9c", -7960 => x"0508708c", -7961 => x"08ff9805", -7962 => x"0831708c", -7963 => x"08ff9c05", -7964 => x"0c535852", -7965 => x"55568c08", -7966 => x"ff9c0508", -7967 => x"8c08ffa0", -7968 => x"05085654", -7969 => x"738c08f8", -7970 => x"050c748c", -7971 => x"08fc050c", -7972 => x"800b8c08", -7973 => x"f8050824", -7974 => x"0b0b0b0b", -7975 => x"ba388c08", -7976 => x"90050854", -7977 => x"800b8415", -7978 => x"0c8c0890", -7979 => x"05088c08", -7980 => x"f4050888", -7981 => x"120c8c08", -7982 => x"90050857", -7983 => x"548c08f8", -7984 => x"05088c08", -7985 => x"fc050856", -7986 => x"54738c17", -7987 => x"0c749017", -7988 => x"0c0b0b0b", -7989 => x"80d1398c", -7990 => x"08900508", -7991 => x"54810b84", -7992 => x"150c8c08", -7993 => x"9005088c", -7994 => x"08f40508", -7995 => x"88120c8c", -7996 => x"08900508", -7997 => x"8c08d405", -7998 => x"5858548c", -7999 => x"08f80508", -8000 => x"8c08fc05", -8001 => x"08565473", -8002 => x"52745375", -8003 => x"510b0b80", -8004 => x"cfcb3f8c", -8005 => x"08d40508", -8006 => x"8c08d805", -8007 => x"08565473", -8008 => x"8c180c74", -8009 => x"90180c8c", -8010 => x"08900508", -8011 => x"548c1408", -8012 => x"f00a260b", -8013 => x"0b0b82bb", -8014 => x"388c0890", -8015 => x"05088c11", -8016 => x"08709013", -8017 => x"08075155", -8018 => x"5573802e", -8019 => x"0b0b0b82", -8020 => x"a2388c08", -8021 => x"9005088c", -8022 => x"08900508", -8023 => x"9011089f", -8024 => x"2a8c1208", -8025 => x"10707207", -8026 => x"8c150c90", -8027 => x"13081090", -8028 => x"150c8c08", -8029 => x"90050888", -8030 => x"1108ff05", -8031 => x"88120c53", -8032 => x"58585557", -8033 => x"0b0b0bff", -8034 => x"9e398c08", -8035 => x"9005088c", -8036 => x"08880508", -8037 => x"84110884", -8038 => x"130c8c08", -8039 => x"9005088c", -8040 => x"08f40508", -8041 => x"88120c8c", -8042 => x"08900508", -8043 => x"8c08ff94", -8044 => x"050c5256", -8045 => x"548c08e8", -8046 => x"05088c08", -8047 => x"ec050857", -8048 => x"55748c08", -8049 => x"ff8c050c", -8050 => x"758c08ff", -8051 => x"90050c8c", -8052 => x"08e00508", -8053 => x"8c08e405", -8054 => x"08565473", -8055 => x"8c08ff84", -8056 => x"050c748c", -8057 => x"08ff8805", -8058 => x"0c8c08ff", -8059 => x"9005088c", -8060 => x"08ff8805", -8061 => x"08701270", -8062 => x"8c08ff80", -8063 => x"050c5257", -8064 => x"55810b8c", -8065 => x"08fef805", -8066 => x"0c8c08ff", -8067 => x"8005088c", -8068 => x"08ff9005", -8069 => x"08565474", -8070 => x"74260b0b", -8071 => x"0b0b8938", -8072 => x"800b8c08", -8073 => x"fef8050c", -8074 => x"8c08ff8c", -8075 => x"05088c08", -8076 => x"ff840508", -8077 => x"7012708c", -8078 => x"08fefc05", -8079 => x"0c8c08fe", -8080 => x"fc05088c", -8081 => x"08fef805", -8082 => x"0811708c", -8083 => x"08fefc05", -8084 => x"0c535852", -8085 => x"55568c08", -8086 => x"fefc0508", -8087 => x"8c08ff80", -8088 => x"05088c08", -8089 => x"ff940508", -8090 => x"58565473", -8091 => x"8c170c74", -8092 => x"90170c8c", -8093 => x"08900508", -8094 => x"5483740c", -8095 => x"8c089005", -8096 => x"08548c14", -8097 => x"08f80a26", -8098 => x"0b0b0b0b", -8099 => x"87380b0b", -8100 => x"0b80cf39", -8101 => x"8c089005", -8102 => x"088c0890", -8103 => x"05088c11", -8104 => x"08800690", -8105 => x"12088106", -8106 => x"8c089005", -8107 => x"088c1108", -8108 => x"9f2b9012", -8109 => x"08812a70", -8110 => x"72078c14", -8111 => x"08812a70", -8112 => x"77078c1a", -8113 => x"0c757207", -8114 => x"901a0c8c", -8115 => x"08900508", -8116 => x"88110881", -8117 => x"0588120c", -8118 => x"51575c5f", -8119 => x"5f5c5a58", -8120 => x"555b8c08", -8121 => x"90050870", -8122 => x"8c08d005", -8123 => x"0c548c08", -8124 => x"d0050880", -8125 => x"0cae3d0d", -8126 => x"8c0c048c", -8127 => x"08028c0c", -8128 => x"7070800b", -8129 => x"8c08fc05", -8130 => x"0c8c0888", -8131 => x"05085170", -8132 => x"08822e09", -8133 => x"81060b0b", -8134 => x"0b0b8838", -8135 => x"810b8c08", -8136 => x"fc050c8c", -8137 => x"08fc0508", -8138 => x"70800c51", -8139 => x"50508c0c", -8140 => x"048c0802", -8141 => x"8c0c700b", -8142 => x"0b82f4b8", -8143 => x"70800c51", -8144 => x"508c0c04", -8145 => x"8c08028c", -8146 => x"0c707080", -8147 => x"0b8c08fc", -8148 => x"050c8c08", -8149 => x"88050851", -8150 => x"7008842e", -8151 => x"0981060b", -8152 => x"0b0b0b88", -8153 => x"38810b8c", -8154 => x"08fc050c", -8155 => x"8c08fc05", -8156 => x"0870800c", -8157 => x"5150508c", -8158 => x"0c048c08", -8159 => x"028c0c70", -8160 => x"70800b8c", -8161 => x"08fc050c", -8162 => x"8c088805", -8163 => x"08517008", -8164 => x"802e0b0b", -8165 => x"0b0b9738", -8166 => x"8c088805", -8167 => x"08517008", -8168 => x"812e0b0b", -8169 => x"0b0b8738", -8170 => x"0b0b0b0b", -8171 => x"8839810b", -8172 => x"8c08fc05", -8173 => x"0c8c08fc", -8174 => x"05087080", -8175 => x"0c515050", -8176 => x"8c0c048c", -8177 => x"08028c0c", -8178 => x"e73d0d8c", -8179 => x"08880508", -8180 => x"568c088c", -8181 => x"05088c08", -8182 => x"90050856", -8183 => x"54738c08", -8184 => x"ffb8050c", -8185 => x"748c08ff", -8186 => x"bc050c8c", -8187 => x"08940508", -8188 => x"8c089805", -8189 => x"08565473", -8190 => x"8c08ffb0", -8191 => x"050c748c", -8192 => x"08ffb405", -8193 => x"0c8c08ec", -8194 => x"0570538c", -8195 => x"08ffb805", -8196 => x"70535154", -8197 => x"0b0b80de", -8198 => x"c13f8c08", -8199 => x"d8057053", -8200 => x"8c08ffb0", -8201 => x"05705351", -8202 => x"540b0b80", -8203 => x"deac3f8c", -8204 => x"08c40570", -8205 => x"548c08d8", -8206 => x"0570548c", -8207 => x"08ec0570", -8208 => x"54515154", -8209 => x"0b0b0bee", -8210 => x"ea3f8008", -8211 => x"708c08c0", -8212 => x"050c8c08", -8213 => x"c0050853", -8214 => x"7652540b", -8215 => x"0b80ccb8", -8216 => x"3f75800c", -8217 => x"9b3d0d8c", -8218 => x"0c048c08", -8219 => x"028c0ce7", -8220 => x"3d0d8c08", -8221 => x"88050856", -8222 => x"8c088c05", -8223 => x"088c0890", -8224 => x"05085654", -8225 => x"738c08ff", -8226 => x"b8050c74", -8227 => x"8c08ffbc", -8228 => x"050c8c08", -8229 => x"9405088c", -8230 => x"08980508", -8231 => x"5654738c", -8232 => x"08ffb005", -8233 => x"0c748c08", -8234 => x"ffb4050c", -8235 => x"8c08ec05", -8236 => x"70538c08", -8237 => x"ffb80570", -8238 => x"5351540b", -8239 => x"0b80dd9a", -8240 => x"3f8c08d8", -8241 => x"0570538c", -8242 => x"08ffb005", -8243 => x"70535154", -8244 => x"0b0b80dd", -8245 => x"853f8c08", -8246 => x"dc050881", -8247 => x"328c08dc", -8248 => x"050c8c08", -8249 => x"c4057054", -8250 => x"8c08d805", -8251 => x"70548c08", -8252 => x"ec057054", -8253 => x"5151540b", -8254 => x"0b0bedb7", -8255 => x"3f800870", -8256 => x"8c08c005", -8257 => x"0c8c08c0", -8258 => x"05085376", -8259 => x"52540b0b", -8260 => x"80cb853f", -8261 => x"75800c9b", -8262 => x"3d0d8c0c", -8263 => x"048c0802", -8264 => x"8c0cff83", -8265 => x"3d0d8c08", -8266 => x"8c05088c", -8267 => x"08900508", -8268 => x"5856758c", -8269 => x"08ffb805", -8270 => x"0c768c08", -8271 => x"ffbc050c", -8272 => x"8c089405", -8273 => x"088c0898", -8274 => x"05085856", -8275 => x"758c08ff", -8276 => x"b0050c76", -8277 => x"8c08ffb4", -8278 => x"050c8c08", -8279 => x"ec057053", -8280 => x"8c08ffb8", -8281 => x"05705351", -8282 => x"560b0b80", -8283 => x"dbec3f8c", -8284 => x"08d80570", -8285 => x"538c08ff", -8286 => x"b0057053", -8287 => x"51560b0b", -8288 => x"80dbd73f", -8289 => x"8c08ec05", -8290 => x"8c08ffac", -8291 => x"050c8c08", -8292 => x"d8058c08", -8293 => x"ffa8050c", -8294 => x"8c08c405", -8295 => x"8c08ffa4", -8296 => x"050c8056", -8297 => x"8057758c", -8298 => x"08ff9805", -8299 => x"0c768c08", -8300 => x"ff9c050c", -8301 => x"80568057", -8302 => x"758c08ff", -8303 => x"90050c76", -8304 => x"8c08ff94", -8305 => x"050c8c08", -8306 => x"ffac0508", -8307 => x"510b0b0b", -8308 => x"9d823f80", -8309 => x"08567580", -8310 => x"2e0b0b0b", -8311 => x"80da388c", -8312 => x"08ffac05", -8313 => x"088c08fe", -8314 => x"c4050c80", -8315 => x"0b8c08fe", -8316 => x"c0050c8c", -8317 => x"08ffac05", -8318 => x"088c08ff", -8319 => x"a8050857", -8320 => x"57841708", -8321 => x"8417082e", -8322 => x"0b0b0b0b", -8323 => x"8938810b", -8324 => x"8c08fec0", -8325 => x"050c8c08", -8326 => x"fec40508", -8327 => x"8c08fec0", -8328 => x"05088412", -8329 => x"0c8c08ff", -8330 => x"ac05088c", -8331 => x"08ffa005", -8332 => x"0c560b0b", -8333 => x"0b9af139", -8334 => x"8c08ffa8", -8335 => x"0508510b", -8336 => x"0b0b9c90", -8337 => x"3f800856", -8338 => x"75802e0b", -8339 => x"0b0b80da", -8340 => x"388c08ff", -8341 => x"a805088c", -8342 => x"08febc05", -8343 => x"0c800b8c", -8344 => x"08feb805", -8345 => x"0c8c08ff", -8346 => x"ac05088c", -8347 => x"08ffa805", -8348 => x"08575784", -8349 => x"17088417", -8350 => x"082e0b0b", -8351 => x"0b0b8938", -8352 => x"810b8c08", -8353 => x"feb8050c", -8354 => x"8c08febc", -8355 => x"05088c08", -8356 => x"feb80508", -8357 => x"84120c8c", -8358 => x"08ffa805", -8359 => x"088c08ff", -8360 => x"a0050c57", -8361 => x"0b0b0b99", -8362 => x"ff398c08", -8363 => x"ffac0508", -8364 => x"510b0b0b", -8365 => x"9ae83f80", -8366 => x"08567580", -8367 => x"2e0b0b0b", -8368 => x"8189388c", -8369 => x"08ffa805", -8370 => x"08510b0b", -8371 => x"0b9a993f", -8372 => x"80085675", -8373 => x"802e0b0b", -8374 => x"0b0b9738", -8375 => x"0b0b0b99", -8376 => x"f43f8008", -8377 => x"708c08ff", -8378 => x"a0050c56", -8379 => x"0b0b0b99", -8380 => x"b7398c08", -8381 => x"ffac0508", -8382 => x"8c08feb4", -8383 => x"050c800b", -8384 => x"8c08feb0", -8385 => x"050c8c08", -8386 => x"ffac0508", -8387 => x"8c08ffa8", -8388 => x"05085757", -8389 => x"84170884", -8390 => x"17082e0b", -8391 => x"0b0b0b89", -8392 => x"38810b8c", -8393 => x"08feb005", -8394 => x"0c8c08fe", -8395 => x"b405088c", -8396 => x"08feb005", -8397 => x"0884120c", -8398 => x"8c08ffac", -8399 => x"05088c08", -8400 => x"ffa0050c", -8401 => x"560b0b0b", -8402 => x"98de398c", -8403 => x"08ffa805", -8404 => x"08510b0b", -8405 => x"0b99c73f", -8406 => x"80085675", -8407 => x"802e0b0b", -8408 => x"0b818938", -8409 => x"8c08ffac", -8410 => x"0508510b", -8411 => x"0b0b98f8", -8412 => x"3f800856", -8413 => x"75802e0b", -8414 => x"0b0b0b97", -8415 => x"380b0b0b", -8416 => x"98d33f80", -8417 => x"08708c08", -8418 => x"ffa0050c", -8419 => x"560b0b0b", -8420 => x"9896398c", -8421 => x"08ffa805", -8422 => x"088c08fe", -8423 => x"ac050c80", -8424 => x"0b8c08fe", -8425 => x"a8050c8c", -8426 => x"08ffac05", -8427 => x"088c08ff", -8428 => x"a8050857", -8429 => x"57841708", -8430 => x"8417082e", -8431 => x"0b0b0b0b", -8432 => x"8938810b", -8433 => x"8c08fea8", -8434 => x"050c8c08", -8435 => x"feac0508", -8436 => x"8c08fea8", -8437 => x"05088412", -8438 => x"0c8c08ff", -8439 => x"a805088c", -8440 => x"08ffa005", -8441 => x"0c570b0b", -8442 => x"0b97bd39", -8443 => x"8c08ffac", -8444 => x"0508510b", -8445 => x"0b0b97f0", -8446 => x"3f800856", -8447 => x"75802e0b", -8448 => x"0b0b80da", -8449 => x"388c08ff", -8450 => x"ac05088c", -8451 => x"08fea405", -8452 => x"0c800b8c", -8453 => x"08fea005", -8454 => x"0c8c08ff", -8455 => x"ac05088c", -8456 => x"08ffa805", -8457 => x"08575784", -8458 => x"17088417", -8459 => x"082e0b0b", -8460 => x"0b0b8938", -8461 => x"810b8c08", -8462 => x"fea0050c", -8463 => x"8c08fea4", -8464 => x"05088c08", -8465 => x"fea00508", -8466 => x"84120c8c", -8467 => x"08ffac05", -8468 => x"088c08ff", -8469 => x"a0050c56", -8470 => x"0b0b0b96", -8471 => x"cb398c08", -8472 => x"ffa80508", -8473 => x"510b0b0b", -8474 => x"96fe3f80", -8475 => x"08567580", -8476 => x"2e0b0b0b", -8477 => x"80da388c", -8478 => x"08ffa805", -8479 => x"088c08fe", -8480 => x"9c050c80", -8481 => x"0b8c08fe", -8482 => x"98050c8c", -8483 => x"08ffac05", -8484 => x"088c08ff", -8485 => x"a8050857", -8486 => x"57841708", -8487 => x"8417082e", -8488 => x"0b0b0b0b", -8489 => x"8938810b", -8490 => x"8c08fe98", -8491 => x"050c8c08", -8492 => x"fe9c0508", -8493 => x"8c08fe98", -8494 => x"05088412", -8495 => x"0c8c08ff", -8496 => x"a805088c", -8497 => x"08ffa005", -8498 => x"0c570b0b", -8499 => x"0b95d939", -8500 => x"8c08ffac", -8501 => x"05089011", -8502 => x"088c08ff", -8503 => x"8c050c8c", -8504 => x"08ffac05", -8505 => x"088c1108", -8506 => x"802a5959", -8507 => x"5680778c", -8508 => x"08ff8805", -8509 => x"0c8c08ff", -8510 => x"a8050890", -8511 => x"11088c08", -8512 => x"ff84050c", -8513 => x"8c08ffa8", -8514 => x"05088c11", -8515 => x"08802a5a", -8516 => x"5a515680", -8517 => x"778c08ff", -8518 => x"80050c8c", -8519 => x"08ff8405", -8520 => x"085a5680", -8521 => x"0b8c08ff", -8522 => x"8c050858", -8523 => x"58800b8c", -8524 => x"08fef005", -8525 => x"5b567554", -8526 => x"76557752", -8527 => x"78537951", -8528 => x"0b0b0bbb", -8529 => x"b23f8c08", -8530 => x"fef00508", -8531 => x"8c08fef4", -8532 => x"05085856", -8533 => x"758c08fe", -8534 => x"f8050c76", -8535 => x"8c08fefc", -8536 => x"050c8c08", -8537 => x"ff800508", -8538 => x"59800b8c", -8539 => x"08ff8c05", -8540 => x"08585880", -8541 => x"0b8c08fe", -8542 => x"e8055b56", -8543 => x"75547655", -8544 => x"77527853", -8545 => x"79510b0b", -8546 => x"0bbaec3f", -8547 => x"8c08fee8", -8548 => x"05088c08", -8549 => x"feec0508", -8550 => x"5856758c", -8551 => x"08fef005", -8552 => x"0c768c08", -8553 => x"fef4050c", -8554 => x"8c08ff84", -8555 => x"05085980", -8556 => x"0b8c08ff", -8557 => x"88050858", -8558 => x"58800b8c", -8559 => x"08fee005", -8560 => x"5b567554", -8561 => x"76557752", -8562 => x"78537951", -8563 => x"0b0b0bba", -8564 => x"a63f8c08", -8565 => x"fee00508", -8566 => x"8c08fee4", -8567 => x"05085856", -8568 => x"758c08fe", -8569 => x"e8050c76", -8570 => x"8c08feec", -8571 => x"050c8c08", -8572 => x"ff800508", -8573 => x"59800b8c", -8574 => x"08ff8805", -8575 => x"08585880", -8576 => x"0b8c08fe", -8577 => x"d8055b56", -8578 => x"75547655", -8579 => x"77527853", -8580 => x"79510b0b", -8581 => x"0bb9e03f", -8582 => x"8c08fed8", -8583 => x"05088c08", -8584 => x"fedc0508", -8585 => x"5856758c", -8586 => x"08fee005", -8587 => x"0c768c08", -8588 => x"fee4050c", -8589 => x"80568057", -8590 => x"758c08fe", -8591 => x"d8050c76", -8592 => x"8c08fedc", -8593 => x"050c8056", -8594 => x"8057758c", -8595 => x"08fed005", -8596 => x"0c768c08", -8597 => x"fed4050c", -8598 => x"8c08fef0", -8599 => x"05088c08", -8600 => x"fef40508", -8601 => x"5856758c", -8602 => x"08fe9005", -8603 => x"0c768c08", -8604 => x"fe94050c", -8605 => x"8c08fee8", -8606 => x"05088c08", -8607 => x"feec0508", -8608 => x"5856758c", -8609 => x"08fe8805", -8610 => x"0c768c08", -8611 => x"fe8c050c", -8612 => x"8c08fe94", -8613 => x"05088c08", -8614 => x"fe8c0508", -8615 => x"7012708c", -8616 => x"08fe8405", -8617 => x"0c525757", -8618 => x"810b8c08", -8619 => x"fdfc050c", -8620 => x"8c08fe84", -8621 => x"05088c08", -8622 => x"fe940508", -8623 => x"57577577", -8624 => x"260b0b0b", -8625 => x"0b893880", -8626 => x"0b8c08fd", -8627 => x"fc050c8c", -8628 => x"08fe9005", -8629 => x"088c08fe", -8630 => x"88050870", -8631 => x"12708c08", -8632 => x"fe80050c", -8633 => x"8c08fe80", -8634 => x"05088c08", -8635 => x"fdfc0508", -8636 => x"11708c08", -8637 => x"fe80050c", -8638 => x"53515257", -8639 => x"578c08fe", -8640 => x"8005088c", -8641 => x"08fe8405", -8642 => x"08585675", -8643 => x"8c08fec8", -8644 => x"050c768c", -8645 => x"08fecc05", -8646 => x"0c8c08fe", -8647 => x"f005088c", -8648 => x"08fec805", -8649 => x"08260b0b", -8650 => x"0b0bb038", -8651 => x"8c08fef0", -8652 => x"05088c08", -8653 => x"fec80508", -8654 => x"2e098106", -8655 => x"0b0b0b81", -8656 => x"d1388c08", -8657 => x"fef40508", -8658 => x"8c08fecc", -8659 => x"0508260b", -8660 => x"0b0b0b87", -8661 => x"380b0b0b", -8662 => x"81b8398c", -8663 => x"08fed805", -8664 => x"088c08fe", -8665 => x"dc050858", -8666 => x"56758c08", -8667 => x"fdf4050c", -8668 => x"768c08fd", -8669 => x"f8050c81", -8670 => x"56805775", -8671 => x"8c08fdec", -8672 => x"050c768c", -8673 => x"08fdf005", -8674 => x"0c8c08fd", -8675 => x"f805088c", -8676 => x"08fdf005", -8677 => x"08701270", -8678 => x"8c08fde8", -8679 => x"050c5257", -8680 => x"57810b8c", -8681 => x"08fde005", -8682 => x"0c8c08fd", -8683 => x"e805088c", -8684 => x"08fdf805", -8685 => x"08575775", -8686 => x"77260b0b", -8687 => x"0b0b8938", -8688 => x"800b8c08", -8689 => x"fde0050c", -8690 => x"8c08fdf4", -8691 => x"05088c08", -8692 => x"fdec0508", -8693 => x"7012708c", -8694 => x"08fde405", -8695 => x"0c8c08fd", -8696 => x"e405088c", -8697 => x"08fde005", -8698 => x"0811708c", -8699 => x"08fde405", -8700 => x"0c535152", -8701 => x"57578c08", -8702 => x"fde40508", -8703 => x"8c08fde8", -8704 => x"05085856", -8705 => x"758c08fe", -8706 => x"d8050c76", -8707 => x"8c08fedc", -8708 => x"050c8c08", -8709 => x"fecc0508", -8710 => x"57807780", -8711 => x"2b8c08fe", -8712 => x"f0050c56", -8713 => x"800b8c08", -8714 => x"fef4050c", -8715 => x"8c08fef8", -8716 => x"05088c08", -8717 => x"fefc0508", -8718 => x"5856758c", -8719 => x"08fdd805", -8720 => x"0c768c08", -8721 => x"fddc050c", -8722 => x"8c08fef0", -8723 => x"05088c08", -8724 => x"fef40508", -8725 => x"5856758c", -8726 => x"08fdd005", -8727 => x"0c768c08", -8728 => x"fdd4050c", -8729 => x"8c08fddc", -8730 => x"05088c08", -8731 => x"fdd40508", -8732 => x"7012708c", -8733 => x"08fdcc05", -8734 => x"0c525757", -8735 => x"810b8c08", -8736 => x"fdc4050c", -8737 => x"8c08fdcc", -8738 => x"05088c08", -8739 => x"fddc0508", -8740 => x"57577577", -8741 => x"260b0b0b", -8742 => x"0b893880", -8743 => x"0b8c08fd", -8744 => x"c4050c8c", -8745 => x"08fdd805", -8746 => x"088c08fd", -8747 => x"d0050870", -8748 => x"12708c08", -8749 => x"fdc8050c", -8750 => x"8c08fdc8", -8751 => x"05088c08", -8752 => x"fdc40508", -8753 => x"11708c08", -8754 => x"fdc8050c", -8755 => x"53515257", -8756 => x"578c08fd", -8757 => x"c805088c", -8758 => x"08fdcc05", -8759 => x"08585675", -8760 => x"8c08fed0", -8761 => x"050c768c", -8762 => x"08fed405", -8763 => x"0c8c08fe", -8764 => x"f805088c", -8765 => x"08fed005", -8766 => x"08260b0b", -8767 => x"0b0bb038", -8768 => x"8c08fef8", -8769 => x"05088c08", -8770 => x"fed00508", -8771 => x"2e098106", -8772 => x"0b0b0b81", -8773 => x"d1388c08", -8774 => x"fefc0508", -8775 => x"8c08fed4", -8776 => x"0508260b", -8777 => x"0b0b0b87", -8778 => x"380b0b0b", -8779 => x"81b8398c", -8780 => x"08fed805", -8781 => x"088c08fe", -8782 => x"dc050858", -8783 => x"56758c08", -8784 => x"fdbc050c", -8785 => x"768c08fd", -8786 => x"c0050c80", -8787 => x"56815775", -8788 => x"8c08fdb4", -8789 => x"050c768c", -8790 => x"08fdb805", -8791 => x"0c8c08fd", -8792 => x"c005088c", -8793 => x"08fdb805", -8794 => x"08701270", -8795 => x"8c08fdb0", -8796 => x"050c5257", -8797 => x"57810b8c", -8798 => x"08fda805", -8799 => x"0c8c08fd", -8800 => x"b005088c", -8801 => x"08fdc005", -8802 => x"08575775", -8803 => x"77260b0b", -8804 => x"0b0b8938", -8805 => x"800b8c08", -8806 => x"fda8050c", -8807 => x"8c08fdbc", -8808 => x"05088c08", -8809 => x"fdb40508", -8810 => x"7012708c", -8811 => x"08fdac05", -8812 => x"0c8c08fd", -8813 => x"ac05088c", -8814 => x"08fda805", -8815 => x"0811708c", -8816 => x"08fdac05", -8817 => x"0c535152", -8818 => x"57578c08", -8819 => x"fdac0508", -8820 => x"8c08fdb0", -8821 => x"05085856", -8822 => x"758c08fe", -8823 => x"d8050c76", -8824 => x"8c08fedc", -8825 => x"050c8c08", -8826 => x"fec80508", -8827 => x"802a708c", -8828 => x"08fda405", -8829 => x"0c578070", -8830 => x"8c08fda0", -8831 => x"050c568c", -8832 => x"08fda005", -8833 => x"088c08fd", -8834 => x"a4050858", -8835 => x"56758c08", -8836 => x"fda0050c", -8837 => x"768c08fd", -8838 => x"a4050c8c", -8839 => x"08fee005", -8840 => x"088c08fe", -8841 => x"e4050858", -8842 => x"56758c08", -8843 => x"fd98050c", -8844 => x"768c08fd", -8845 => x"9c050c8c", -8846 => x"08fda405", -8847 => x"088c08fd", -8848 => x"9c050870", -8849 => x"12708c08", -8850 => x"fd94050c", -8851 => x"52575781", -8852 => x"0b8c08fd", -8853 => x"8c050c8c", -8854 => x"08fd9405", -8855 => x"088c08fd", -8856 => x"a4050857", -8857 => x"57757726", -8858 => x"0b0b0b0b", -8859 => x"8938800b", -8860 => x"8c08fd8c", -8861 => x"050c8c08", -8862 => x"fda00508", -8863 => x"8c08fd98", -8864 => x"05087012", -8865 => x"708c08fd", -8866 => x"90050c8c", -8867 => x"08fd9005", -8868 => x"088c08fd", -8869 => x"8c050811", -8870 => x"708c08fd", -8871 => x"90050c53", -8872 => x"51525757", -8873 => x"8c08fed8", -8874 => x"05088c08", -8875 => x"fedc0508", -8876 => x"5856758c", -8877 => x"08fd8405", -8878 => x"0c768c08", -8879 => x"fd88050c", -8880 => x"8c08fd88", -8881 => x"05088c08", -8882 => x"fd940508", -8883 => x"7012708c", -8884 => x"08fd8005", -8885 => x"0c525757", -8886 => x"810b8c08", -8887 => x"fcf8050c", -8888 => x"8c08fd80", -8889 => x"05088c08", -8890 => x"fd880508", -8891 => x"57577577", -8892 => x"260b0b0b", -8893 => x"0b893880", -8894 => x"0b8c08fc", -8895 => x"f8050c8c", -8896 => x"08fd8405", -8897 => x"088c08fd", -8898 => x"90050870", -8899 => x"12708c08", -8900 => x"fcfc050c", -8901 => x"8c08fcfc", -8902 => x"05088c08", -8903 => x"fcf80508", -8904 => x"11708c08", -8905 => x"fcfc050c", -8906 => x"53515257", -8907 => x"578c08fc", -8908 => x"fc05088c", -8909 => x"08fd8005", -8910 => x"08585675", -8911 => x"8c08fed8", -8912 => x"050c768c", -8913 => x"08fedc05", -8914 => x"0c8c08fe", -8915 => x"d805088c", -8916 => x"08fedc05", -8917 => x"08585675", -8918 => x"8c08ff90", -8919 => x"050c768c", -8920 => x"08ff9405", -8921 => x"0c8c08fe", -8922 => x"d005088c", -8923 => x"08fed405", -8924 => x"08585675", -8925 => x"8c08ff98", -8926 => x"050c768c", -8927 => x"08ff9c05", -8928 => x"0c8c08ff", -8929 => x"a405088c", -8930 => x"08ffac05", -8931 => x"088c08ff", -8932 => x"a8050888", -8933 => x"12088812", -8934 => x"08058411", -8935 => x"88150c8c", -8936 => x"08ffa405", -8937 => x"088c08fc", -8938 => x"f4050c51", -8939 => x"58585880", -8940 => x"0b8c08fc", -8941 => x"f0050c8c", -8942 => x"08ffac05", -8943 => x"088c08ff", -8944 => x"a8050857", -8945 => x"57841708", -8946 => x"8417082e", -8947 => x"0b0b0b0b", -8948 => x"8938810b", -8949 => x"8c08fcf0", -8950 => x"050c8c08", -8951 => x"fcf40508", -8952 => x"8c08fcf0", -8953 => x"05088412", -8954 => x"0c578c08", -8955 => x"ff900508", -8956 => x"f80a260b", -8957 => x"0b0b0b87", -8958 => x"380b0b0b", -8959 => x"81ae398c", -8960 => x"08ffa405", -8961 => x"08881108", -8962 => x"81058812", -8963 => x"0c8c08ff", -8964 => x"90050880", -8965 => x"068c08ff", -8966 => x"94050881", -8967 => x"06705259", -8968 => x"51567580", -8969 => x"2e0b0b0b", -8970 => x"80cf388c", -8971 => x"08ff9805", -8972 => x"089f2b8c", -8973 => x"08ff9c05", -8974 => x"08812a70", -8975 => x"72078c08", -8976 => x"ff980508", -8977 => x"812a5959", -8978 => x"5959758c", -8979 => x"08ff9805", -8980 => x"0c768c08", -8981 => x"ff9c050c", -8982 => x"8c08ff98", -8983 => x"0508810a", -8984 => x"078c08ff", -8985 => x"9c050880", -8986 => x"07585675", -8987 => x"8c08ff98", -8988 => x"050c768c", -8989 => x"08ff9c05", -8990 => x"0c8c08ff", -8991 => x"9005089f", -8992 => x"2b8c08ff", -8993 => x"94050881", -8994 => x"2a707207", -8995 => x"8c08ff90", -8996 => x"0508812a", -8997 => x"59595959", -8998 => x"758c08ff", -8999 => x"90050c76", -9000 => x"8c08ff94", -9001 => x"050c0b0b", -9002 => x"0bfebf39", -9003 => x"8c08ff90", -9004 => x"0508f00a", -9005 => x"260b0b0b", -9006 => x"81a1388c", -9007 => x"08ffa405", -9008 => x"08881108", -9009 => x"ff058812", -9010 => x"0c8c08ff", -9011 => x"9405089f", -9012 => x"2a8c08ff", -9013 => x"90050810", -9014 => x"7072078c", -9015 => x"08ff9405", -9016 => x"08105b53", -9017 => x"5a5a5675", -9018 => x"8c08ff90", -9019 => x"050c768c", -9020 => x"08ff9405", -9021 => x"0c800b8c", -9022 => x"08ff9805", -9023 => x"08240b0b", -9024 => x"0b0b8738", -9025 => x"0b0b0b0b", -9026 => x"a1398c08", -9027 => x"ff900508", -9028 => x"80078c08", -9029 => x"ff940508", -9030 => x"81075856", -9031 => x"758c08ff", -9032 => x"90050c76", -9033 => x"8c08ff94", -9034 => x"050c8c08", -9035 => x"ff9c0508", -9036 => x"9f2a8c08", -9037 => x"ff980508", -9038 => x"10707207", -9039 => x"8c08ff9c", -9040 => x"0508105a", -9041 => x"58595975", -9042 => x"8c08ff98", -9043 => x"050c768c", -9044 => x"08ff9c05", -9045 => x"0c0b0b0b", -9046 => x"fed2398c", -9047 => x"08ff9005", -9048 => x"08800670", -9049 => x"8c08fce8", -9050 => x"050c8c08", -9051 => x"ff940508", -9052 => x"81ff0670", -9053 => x"8c08fcec", -9054 => x"050c5856", -9055 => x"8c08fce8", -9056 => x"05088c08", -9057 => x"fcec0508", -9058 => x"5856758c", -9059 => x"08fce805", -9060 => x"0c768c08", -9061 => x"fcec050c", -9062 => x"8c08fce8", -9063 => x"05085776", -9064 => x"0b0b0b83", -9065 => x"d0388c08", -9066 => x"fcec0508", -9067 => x"56758180", -9068 => x"2e098106", -9069 => x"0b0b0b83", -9070 => x"bc388c08", -9071 => x"ff900508", -9072 => x"982b8c08", -9073 => x"ff940508", -9074 => x"882a7072", -9075 => x"078c08ff", -9076 => x"90050888", -9077 => x"2a718106", -9078 => x"51595959", -9079 => x"5975802e", -9080 => x"0b0b0b81", -9081 => x"bf388c08", -9082 => x"ff900508", -9083 => x"8c08ff94", -9084 => x"05085856", -9085 => x"758c08fc", -9086 => x"e0050c76", -9087 => x"8c08fce4", -9088 => x"050c8056", -9089 => x"81805775", -9090 => x"8c08fcd8", -9091 => x"050c768c", -9092 => x"08fcdc05", -9093 => x"0c8c08fc", -9094 => x"e405088c", -9095 => x"08fcdc05", -9096 => x"08701270", -9097 => x"8c08fcd4", -9098 => x"050c5257", -9099 => x"57810b8c", -9100 => x"08fccc05", -9101 => x"0c8c08fc", -9102 => x"d405088c", -9103 => x"08fce405", -9104 => x"08575775", -9105 => x"77260b0b", -9106 => x"0b0b8938", -9107 => x"800b8c08", -9108 => x"fccc050c", -9109 => x"8c08fce0", -9110 => x"05088c08", -9111 => x"fcd80508", -9112 => x"7012708c", -9113 => x"08fcd005", -9114 => x"0c8c08fc", -9115 => x"d005088c", -9116 => x"08fccc05", -9117 => x"0811708c", -9118 => x"08fcd005", -9119 => x"0c535152", -9120 => x"57578c08", -9121 => x"fcd00508", -9122 => x"8c08fcd4", -9123 => x"05085856", -9124 => x"758c08ff", -9125 => x"90050c76", -9126 => x"8c08ff94", -9127 => x"050c0b0b", -9128 => x"0b81d239", -9129 => x"8c08ff98", -9130 => x"0508708c", -9131 => x"08ff9c05", -9132 => x"08075156", -9133 => x"75802e0b", -9134 => x"0b0b81b9", -9135 => x"388c08ff", -9136 => x"9005088c", -9137 => x"08ff9405", -9138 => x"08585675", -9139 => x"8c08fcc4", -9140 => x"050c768c", -9141 => x"08fcc805", -9142 => x"0c805681", -9143 => x"8057758c", -9144 => x"08fcbc05", -9145 => x"0c768c08", -9146 => x"fcc0050c", -9147 => x"8c08fcc8", -9148 => x"05088c08", -9149 => x"fcc00508", -9150 => x"7012708c", -9151 => x"08fcb805", -9152 => x"0c525757", -9153 => x"810b8c08", -9154 => x"fcb0050c", -9155 => x"8c08fcb8", -9156 => x"05088c08", -9157 => x"fcc80508", -9158 => x"57577577", -9159 => x"260b0b0b", -9160 => x"0b893880", -9161 => x"0b8c08fc", -9162 => x"b0050c8c", -9163 => x"08fcc405", -9164 => x"088c08fc", -9165 => x"bc050870", -9166 => x"12708c08", -9167 => x"fcb4050c", -9168 => x"8c08fcb4", -9169 => x"05088c08", -9170 => x"fcb00508", -9171 => x"11708c08", -9172 => x"fcb4050c", -9173 => x"53515257", -9174 => x"578c08fc", -9175 => x"b405088c", -9176 => x"08fcb805", -9177 => x"08585675", -9178 => x"8c08ff90", -9179 => x"050c768c", -9180 => x"08ff9405", -9181 => x"0c8c08ff", -9182 => x"a4050856", -9183 => x"8c08ff90", -9184 => x"05088c08", -9185 => x"ff940508", -9186 => x"5957768c", -9187 => x"170c7790", -9188 => x"170c8c08", -9189 => x"ffa40508", -9190 => x"5683760c", -9191 => x"8c08ffa4", -9192 => x"05088c08", -9193 => x"ffa0050c", -9194 => x"8c08ffa0", -9195 => x"0508708c", -9196 => x"08c0050c", -9197 => x"8c08c005", -9198 => x"08538c08", -9199 => x"88050852", -9200 => x"560b0b0b", -9201 => x"add23f8c", -9202 => x"08880508", -9203 => x"800c80ff", -9204 => x"3d0d8c0c", -9205 => x"048c0802", -9206 => x"8c0c700b", -9207 => x"0b82f4b8", -9208 => x"70800c51", -9209 => x"508c0c04", -9210 => x"8c08028c", -9211 => x"0c707080", -9212 => x"0b8c08fc", -9213 => x"050c8c08", -9214 => x"88050851", -9215 => x"7008822e", -9216 => x"0981060b", -9217 => x"0b0b0b88", -9218 => x"38810b8c", -9219 => x"08fc050c", -9220 => x"8c08fc05", -9221 => x"0870800c", -9222 => x"5150508c", -9223 => x"0c048c08", -9224 => x"028c0c70", -9225 => x"70800b8c", -9226 => x"08fc050c", -9227 => x"8c088805", -9228 => x"08517008", -9229 => x"842e0981", -9230 => x"060b0b0b", -9231 => x"0b883881", -9232 => x"0b8c08fc", -9233 => x"050c8c08", -9234 => x"fc050870", -9235 => x"800c5150", -9236 => x"508c0c04", -9237 => x"8c08028c", -9238 => x"0c707080", -9239 => x"0b8c08fc", -9240 => x"050c8c08", -9241 => x"88050851", -9242 => x"7008802e", -9243 => x"0b0b0b0b", -9244 => x"97388c08", -9245 => x"88050851", -9246 => x"7008812e", -9247 => x"0b0b0b0b", -9248 => x"87380b0b", -9249 => x"0b0b8839", -9250 => x"810b8c08", -9251 => x"fc050c8c", -9252 => x"08fc0508", -9253 => x"70800c51", -9254 => x"50508c0c", -9255 => x"048c0802", -9256 => x"8c0cffbc", -9257 => x"3d0d8c08", -9258 => x"8c05088c", -9259 => x"08900508", -9260 => x"5553728c", -9261 => x"08cc050c", -9262 => x"738c08d0", -9263 => x"050c8c08", -9264 => x"9405088c", -9265 => x"08980508", -9266 => x"5553728c", -9267 => x"08c4050c", -9268 => x"738c08c8", -9269 => x"050c8c08", -9270 => x"ec057053", -9271 => x"8c08cc05", -9272 => x"70535153", -9273 => x"0b0b0bbc", -9274 => x"f13f8c08", -9275 => x"d8057053", -9276 => x"8c08c405", -9277 => x"70535153", -9278 => x"0b0b0bbc", -9279 => x"dd3f8c08", -9280 => x"ec058c08", -9281 => x"c0050c8c", -9282 => x"08d8058c", -9283 => x"08ffbc05", -9284 => x"0c8c08c0", -9285 => x"0508510b", -9286 => x"0b0b9084", -9287 => x"3f800853", -9288 => x"72802e0b", -9289 => x"0b0b0b92", -9290 => x"388c08c0", -9291 => x"05088c08", -9292 => x"ffb8050c", -9293 => x"0b0b0b8e", -9294 => x"bb398c08", -9295 => x"ffbc0508", -9296 => x"510b0b0b", -9297 => x"8fda3f80", -9298 => x"08537280", -9299 => x"2e0b0b0b", -9300 => x"0b93388c", -9301 => x"08ffbc05", -9302 => x"088c08ff", -9303 => x"b8050c0b", -9304 => x"0b0b8e90", -9305 => x"398c08c0", -9306 => x"05088c08", -9307 => x"c005088c", -9308 => x"08ffbc05", -9309 => x"08841208", -9310 => x"84120832", -9311 => x"84140c8c", -9312 => x"08c00508", -9313 => x"54555555", -9314 => x"0b0b0b8e", -9315 => x"dd3f8008", -9316 => x"53720b0b", -9317 => x"0b0b9d38", -9318 => x"8c08c005", -9319 => x"08510b0b", -9320 => x"0b8e913f", -9321 => x"80085372", -9322 => x"0b0b0b0b", -9323 => x"87380b0b", -9324 => x"0b80c339", -9325 => x"8c08c005", -9326 => x"088c08ff", -9327 => x"bc050854", -9328 => x"54730873", -9329 => x"082e0981", -9330 => x"060b0b0b", -9331 => x"0b97380b", -9332 => x"0b0b8dcd", -9333 => x"3f800870", -9334 => x"8c08ffb8", -9335 => x"050c530b", -9336 => x"0b0b8d90", -9337 => x"398c08c0", -9338 => x"05088c08", -9339 => x"ffb8050c", -9340 => x"0b0b0b8c", -9341 => x"ff398c08", -9342 => x"ffbc0508", -9343 => x"510b0b0b", -9344 => x"8de83f80", -9345 => x"08537280", -9346 => x"2e0b0b0b", -9347 => x"0baf388c", -9348 => x"08c00508", -9349 => x"53805480", -9350 => x"55738c14", -9351 => x"0c749014", -9352 => x"0c8c08c0", -9353 => x"05085380", -9354 => x"0b88140c", -9355 => x"8c08c005", -9356 => x"088c08ff", -9357 => x"b8050c0b", -9358 => x"0b0b8cb8", -9359 => x"398c08ff", -9360 => x"bc050851", -9361 => x"0b0b0b8c", -9362 => x"eb3f8008", -9363 => x"5372802e", -9364 => x"0b0b0b0b", -9365 => x"9b388c08", -9366 => x"c0050853", -9367 => x"84730c8c", -9368 => x"08c00508", -9369 => x"8c08ffb8", -9370 => x"050c0b0b", -9371 => x"0b8c8539", -9372 => x"8c08c005", -9373 => x"088c08c0", -9374 => x"05088c08", -9375 => x"ffbc0508", -9376 => x"88120888", -9377 => x"12083188", -9378 => x"140c8c08", -9379 => x"c0050851", -9380 => x"55555590", -9381 => x"13088c14", -9382 => x"08545472", -9383 => x"8c08ffa8", -9384 => x"050c738c", -9385 => x"08ffac05", -9386 => x"0c8c08ff", -9387 => x"bc050853", -9388 => x"9013088c", -9389 => x"14085454", -9390 => x"728c08ff", -9391 => x"a0050c73", -9392 => x"8c08ffa4", -9393 => x"050c8c08", -9394 => x"ffa00508", -9395 => x"8c08ffa8", -9396 => x"0508260b", -9397 => x"0b0b0bb0", -9398 => x"388c08ff", -9399 => x"a005088c", -9400 => x"08ffa805", -9401 => x"082e0981", -9402 => x"060b0b0b", -9403 => x"81e9388c", -9404 => x"08ffa405", -9405 => x"088c08ff", -9406 => x"ac050826", -9407 => x"0b0b0b0b", -9408 => x"87380b0b", -9409 => x"0b81d039", -9410 => x"8c08ffa8", -9411 => x"05088c08", -9412 => x"ffac0508", -9413 => x"5553728c", -9414 => x"08ff9005", -9415 => x"0c738c08", -9416 => x"ff94050c", -9417 => x"8c08ff90", -9418 => x"05088c08", -9419 => x"ff940508", -9420 => x"5553728c", -9421 => x"08ff8805", -9422 => x"0c738c08", -9423 => x"ff8c050c", -9424 => x"8c08ff8c", -9425 => x"05088c08", -9426 => x"ff940508", -9427 => x"7012708c", -9428 => x"08ff8405", -9429 => x"0c525454", -9430 => x"810b8c08", -9431 => x"fefc050c", -9432 => x"8c08ff84", -9433 => x"05088c08", -9434 => x"ff8c0508", -9435 => x"54547274", -9436 => x"260b0b0b", -9437 => x"0b893880", -9438 => x"0b8c08fe", -9439 => x"fc050c8c", -9440 => x"08ff8805", -9441 => x"088c08ff", -9442 => x"90050870", -9443 => x"12708c08", -9444 => x"ff80050c", -9445 => x"8c08ff80", -9446 => x"05088c08", -9447 => x"fefc0508", -9448 => x"11708c08", -9449 => x"ff80050c", -9450 => x"53515254", -9451 => x"548c08ff", -9452 => x"8005088c", -9453 => x"08ff8405", -9454 => x"08555372", -9455 => x"8c08ffa8", -9456 => x"050c738c", -9457 => x"08ffac05", -9458 => x"0c8c08c0", -9459 => x"05088811", -9460 => x"08ff0588", -9461 => x"120c5388", -9462 => x"0a538054", -9463 => x"728c08ff", -9464 => x"b0050c73", -9465 => x"8c08ffb4", -9466 => x"050c8053", -9467 => x"8054728c", -9468 => x"08ff9805", -9469 => x"0c738c08", -9470 => x"ff9c050c", -9471 => x"8c08ffb0", -9472 => x"0508708c", -9473 => x"08ffb405", -9474 => x"08075153", -9475 => x"72802e0b", -9476 => x"0b0b849f", -9477 => x"388c08ff", -9478 => x"a005088c", -9479 => x"08ffa805", -9480 => x"08260b0b", -9481 => x"0b829838", -9482 => x"8c08ffa0", -9483 => x"05088c08", -9484 => x"ffa80508", -9485 => x"2e098106", -9486 => x"0b0b0b0b", -9487 => x"94388c08", -9488 => x"ffa40508", -9489 => x"8c08ffac", -9490 => x"0508260b", -9491 => x"0b0b81ef", -9492 => x"388c08ff", -9493 => x"9805088c", -9494 => x"08ffb005", -9495 => x"08078c08", -9496 => x"ff9c0508", -9497 => x"8c08ffb4", -9498 => x"05080755", -9499 => x"53728c08", -9500 => x"ff98050c", -9501 => x"738c08ff", -9502 => x"9c050c8c", -9503 => x"08ffa805", -9504 => x"088c08ff", -9505 => x"ac050855", -9506 => x"53728c08", -9507 => x"fef4050c", -9508 => x"738c08fe", -9509 => x"f8050c8c", -9510 => x"08ffa005", -9511 => x"088c08ff", -9512 => x"a4050855", -9513 => x"53728c08", -9514 => x"feec050c", -9515 => x"738c08fe", -9516 => x"f0050c8c", -9517 => x"08fef805", -9518 => x"088c08fe", -9519 => x"f0050871", -9520 => x"7131708c", -9521 => x"08fee805", -9522 => x"0c525454", -9523 => x"810b8c08", -9524 => x"fee0050c", -9525 => x"8c08fee8", -9526 => x"05088c08", -9527 => x"fef80508", -9528 => x"54547373", -9529 => x"260b0b0b", -9530 => x"0b893880", -9531 => x"0b8c08fe", -9532 => x"e0050c8c", -9533 => x"08fef405", -9534 => x"088c08fe", -9535 => x"ec050871", -9536 => x"7131708c", -9537 => x"08fee405", -9538 => x"0c8c08fe", -9539 => x"e4050870", -9540 => x"8c08fee0", -9541 => x"05083170", -9542 => x"8c08fee4", -9543 => x"050c5351", -9544 => x"5254548c", -9545 => x"08fee405", -9546 => x"088c08fe", -9547 => x"e8050855", -9548 => x"53728c08", -9549 => x"ffa8050c", -9550 => x"738c08ff", -9551 => x"ac050c8c", -9552 => x"08ffb005", -9553 => x"089f2b8c", -9554 => x"08ffb405", -9555 => x"08812a70", -9556 => x"72078c08", -9557 => x"ffb00508", -9558 => x"812a5656", -9559 => x"5656728c", -9560 => x"08ffb005", -9561 => x"0c738c08", -9562 => x"ffb4050c", -9563 => x"8c08ffa8", -9564 => x"05088c08", -9565 => x"ffac0508", -9566 => x"5553728c", -9567 => x"08fed805", -9568 => x"0c738c08", -9569 => x"fedc050c", -9570 => x"8c08fed8", -9571 => x"05088c08", -9572 => x"fedc0508", -9573 => x"5553728c", -9574 => x"08fed005", -9575 => x"0c738c08", -9576 => x"fed4050c", -9577 => x"8c08fed4", -9578 => x"05088c08", -9579 => x"fedc0508", -9580 => x"7012708c", -9581 => x"08fecc05", -9582 => x"0c525454", -9583 => x"810b8c08", -9584 => x"fec4050c", -9585 => x"8c08fecc", -9586 => x"05088c08", -9587 => x"fed40508", -9588 => x"54547274", -9589 => x"260b0b0b", -9590 => x"0b893880", -9591 => x"0b8c08fe", -9592 => x"c4050c8c", -9593 => x"08fed005", -9594 => x"088c08fe", -9595 => x"d8050870", -9596 => x"12708c08", -9597 => x"fec8050c", -9598 => x"8c08fec8", -9599 => x"05088c08", -9600 => x"fec40508", -9601 => x"11708c08", -9602 => x"fec8050c", -9603 => x"53515254", -9604 => x"548c08fe", -9605 => x"c805088c", -9606 => x"08fecc05", -9607 => x"08555372", -9608 => x"8c08ffa8", -9609 => x"050c738c", -9610 => x"08ffac05", -9611 => x"0c0b0b0b", -9612 => x"fbca398c", -9613 => x"08ff9805", -9614 => x"08800670", -9615 => x"8c08febc", -9616 => x"050c8c08", -9617 => x"ff9c0508", -9618 => x"81ff0670", -9619 => x"8c08fec0", -9620 => x"050c5454", -9621 => x"8c08febc", -9622 => x"05088c08", -9623 => x"fec00508", -9624 => x"5553728c", -9625 => x"08febc05", -9626 => x"0c738c08", -9627 => x"fec0050c", -9628 => x"8c08febc", -9629 => x"05085473", -9630 => x"0b0b0b83", -9631 => x"d0388c08", -9632 => x"fec00508", -9633 => x"53728180", -9634 => x"2e098106", -9635 => x"0b0b0b83", -9636 => x"bc388c08", -9637 => x"ff980508", -9638 => x"982b8c08", -9639 => x"ff9c0508", -9640 => x"882a7072", -9641 => x"078c08ff", -9642 => x"98050888", -9643 => x"2a718106", -9644 => x"51565656", -9645 => x"5672802e", -9646 => x"0b0b0b81", -9647 => x"bf388c08", -9648 => x"ff980508", -9649 => x"8c08ff9c", -9650 => x"05085553", -9651 => x"728c08fe", -9652 => x"b4050c73", -9653 => x"8c08feb8", -9654 => x"050c8053", -9655 => x"81805472", -9656 => x"8c08feac", -9657 => x"050c738c", -9658 => x"08feb005", -9659 => x"0c8c08fe", -9660 => x"b805088c", -9661 => x"08feb005", -9662 => x"08701270", -9663 => x"8c08fea8", -9664 => x"050c5254", -9665 => x"54810b8c", -9666 => x"08fea005", -9667 => x"0c8c08fe", -9668 => x"a805088c", -9669 => x"08feb805", -9670 => x"08545472", -9671 => x"74260b0b", -9672 => x"0b0b8938", -9673 => x"800b8c08", -9674 => x"fea0050c", -9675 => x"8c08feb4", -9676 => x"05088c08", -9677 => x"feac0508", -9678 => x"7012708c", -9679 => x"08fea405", -9680 => x"0c8c08fe", -9681 => x"a405088c", -9682 => x"08fea005", -9683 => x"0811708c", -9684 => x"08fea405", -9685 => x"0c535152", -9686 => x"54548c08", -9687 => x"fea40508", -9688 => x"8c08fea8", -9689 => x"05085553", -9690 => x"728c08ff", -9691 => x"98050c73", -9692 => x"8c08ff9c", -9693 => x"050c0b0b", -9694 => x"0b81d239", -9695 => x"8c08ffa8", -9696 => x"0508708c", -9697 => x"08ffac05", -9698 => x"08075153", -9699 => x"72802e0b", -9700 => x"0b0b81b9", -9701 => x"388c08ff", -9702 => x"9805088c", -9703 => x"08ff9c05", -9704 => x"08555372", -9705 => x"8c08fe98", -9706 => x"050c738c", -9707 => x"08fe9c05", -9708 => x"0c805381", -9709 => x"8054728c", -9710 => x"08fe9005", -9711 => x"0c738c08", -9712 => x"fe94050c", -9713 => x"8c08fe9c", -9714 => x"05088c08", -9715 => x"fe940508", -9716 => x"7012708c", -9717 => x"08fe8c05", -9718 => x"0c525454", -9719 => x"810b8c08", -9720 => x"fe84050c", -9721 => x"8c08fe8c", -9722 => x"05088c08", -9723 => x"fe9c0508", -9724 => x"54547274", -9725 => x"260b0b0b", -9726 => x"0b893880", -9727 => x"0b8c08fe", -9728 => x"84050c8c", -9729 => x"08fe9805", -9730 => x"088c08fe", -9731 => x"90050870", -9732 => x"12708c08", -9733 => x"fe88050c", -9734 => x"8c08fe88", -9735 => x"05088c08", -9736 => x"fe840508", -9737 => x"11708c08", -9738 => x"fe88050c", -9739 => x"53515254", -9740 => x"548c08fe", -9741 => x"8805088c", -9742 => x"08fe8c05", -9743 => x"08555372", -9744 => x"8c08ff98", -9745 => x"050c738c", -9746 => x"08ff9c05", -9747 => x"0c8c08c0", -9748 => x"0508558c", -9749 => x"08ff9805", -9750 => x"088c08ff", -9751 => x"9c050855", -9752 => x"53728c16", -9753 => x"0c739016", -9754 => x"0c8c08c0", -9755 => x"05088c08", -9756 => x"ffb8050c", -9757 => x"8c08ffb8", -9758 => x"0508708c", -9759 => x"08d4050c", -9760 => x"8c08d405", -9761 => x"08538c08", -9762 => x"88050852", -9763 => x"530b0b0b", -9764 => x"9c863f8c", -9765 => x"08880508", -9766 => x"800c80c6", -9767 => x"3d0d8c0c", -9768 => x"048c0802", -9769 => x"8c0c700b", -9770 => x"0b82f4b8", -9771 => x"70800c51", -9772 => x"508c0c04", -9773 => x"8c08028c", -9774 => x"0c707080", -9775 => x"0b8c08fc", -9776 => x"050c8c08", -9777 => x"88050851", -9778 => x"7008822e", -9779 => x"0981060b", -9780 => x"0b0b0b88", -9781 => x"38810b8c", -9782 => x"08fc050c", -9783 => x"8c08fc05", -9784 => x"0870800c", -9785 => x"5150508c", -9786 => x"0c048c08", -9787 => x"028c0c70", -9788 => x"70800b8c", -9789 => x"08fc050c", -9790 => x"8c088805", -9791 => x"08517008", -9792 => x"842e0981", -9793 => x"060b0b0b", -9794 => x"0b883881", -9795 => x"0b8c08fc", -9796 => x"050c8c08", -9797 => x"fc050870", -9798 => x"800c5150", -9799 => x"508c0c04", -9800 => x"8c08028c", -9801 => x"0c707080", -9802 => x"0b8c08fc", -9803 => x"050c8c08", -9804 => x"88050851", -9805 => x"7008802e", -9806 => x"0b0b0b0b", -9807 => x"97388c08", -9808 => x"88050851", -9809 => x"7008812e", -9810 => x"0b0b0b0b", -9811 => x"87380b0b", -9812 => x"0b0b8839", -9813 => x"810b8c08", -9814 => x"fc050c8c", -9815 => x"08fc0508", -9816 => x"70800c51", -9817 => x"50508c0c", -9818 => x"048c0802", -9819 => x"8c0cee3d", -9820 => x"0d8c0888", -9821 => x"05088c08", -9822 => x"8c050855", -9823 => x"53728c08", -9824 => x"d0050c73", -9825 => x"8c08d405", -9826 => x"0c8c0890", -9827 => x"05088c08", -9828 => x"94050855", -9829 => x"53728c08", -9830 => x"c8050c73", -9831 => x"8c08cc05", -9832 => x"0c8c08ec", -9833 => x"0570538c", -9834 => x"08d00570", -9835 => x"5351530b", -9836 => x"0b0baba6", -9837 => x"3f8c08d8", -9838 => x"0570538c", -9839 => x"08c80570", -9840 => x"5351530b", -9841 => x"0b0bab92", -9842 => x"3f8c08ec", -9843 => x"05705253", -9844 => x"0b0b0b80", -9845 => x"df3f8008", -9846 => x"53720b0b", -9847 => x"0b0b9e38", -9848 => x"8c08d805", -9849 => x"7052530b", -9850 => x"0b0b80c8", -9851 => x"3f800853", -9852 => x"720b0b0b", -9853 => x"0b87380b", -9854 => x"0b0b0b8e", -9855 => x"39810b8c", -9856 => x"08c4050c", -9857 => x"0b0b0b0b", -9858 => x"9e398c08", -9859 => x"d8057053", -9860 => x"8c08ec05", -9861 => x"70535153", -9862 => x"0b0b0bae", -9863 => x"c53f8008", -9864 => x"708c08c4", -9865 => x"050c538c", -9866 => x"08c40508", -9867 => x"800c943d", -9868 => x"0d8c0c04", -9869 => x"8c08028c", -9870 => x"0c707080", -9871 => x"0b8c08fc", -9872 => x"050c8c08", -9873 => x"88050851", -9874 => x"7008802e", -9875 => x"0b0b0b0b", -9876 => x"97388c08", -9877 => x"88050851", -9878 => x"7008812e", -9879 => x"0b0b0b0b", -9880 => x"87380b0b", -9881 => x"0b0b8839", -9882 => x"810b8c08", -9883 => x"fc050c8c", -9884 => x"08fc0508", -9885 => x"70800c51", -9886 => x"50508c0c", -9887 => x"048c0802", -9888 => x"8c0cee3d", -9889 => x"0d8c0888", -9890 => x"05088c08", -9891 => x"8c050855", -9892 => x"53728c08", -9893 => x"d0050c73", -9894 => x"8c08d405", -9895 => x"0c8c0890", -9896 => x"05088c08", -9897 => x"94050855", -9898 => x"53728c08", -9899 => x"c8050c73", -9900 => x"8c08cc05", -9901 => x"0c8c08ec", -9902 => x"0570538c", -9903 => x"08d00570", -9904 => x"5351530b", -9905 => x"0b0ba992", -9906 => x"3f8c08d8", -9907 => x"0570538c", -9908 => x"08c80570", -9909 => x"5351530b", -9910 => x"0b0ba8fe", -9911 => x"3f8c08ec", -9912 => x"05705253", -9913 => x"0b0b0b80", -9914 => x"df3f8008", -9915 => x"53720b0b", -9916 => x"0b0b9e38", -9917 => x"8c08d805", -9918 => x"7052530b", -9919 => x"0b0b80c8", -9920 => x"3f800853", -9921 => x"720b0b0b", -9922 => x"0b87380b", -9923 => x"0b0b0b8e", -9924 => x"39810b8c", -9925 => x"08c4050c", -9926 => x"0b0b0b0b", -9927 => x"9e398c08", -9928 => x"d8057053", -9929 => x"8c08ec05", -9930 => x"70535153", -9931 => x"0b0b0bac", -9932 => x"b13f8008", -9933 => x"708c08c4", -9934 => x"050c538c", -9935 => x"08c40508", -9936 => x"800c943d", -9937 => x"0d8c0c04", -9938 => x"8c08028c", -9939 => x"0c707080", -9940 => x"0b8c08fc", -9941 => x"050c8c08", -9942 => x"88050851", -9943 => x"7008802e", -9944 => x"0b0b0b0b", -9945 => x"97388c08", -9946 => x"88050851", -9947 => x"7008812e", -9948 => x"0b0b0b0b", -9949 => x"87380b0b", -9950 => x"0b0b8839", -9951 => x"810b8c08", -9952 => x"fc050c8c", -9953 => x"08fc0508", -9954 => x"70800c51", -9955 => x"50508c0c", -9956 => x"048c0802", -9957 => x"8c0cee3d", -9958 => x"0d8c0888", -9959 => x"05088c08", -9960 => x"8c050855", -9961 => x"53728c08", -9962 => x"d0050c73", -9963 => x"8c08d405", -9964 => x"0c8c0890", -9965 => x"05088c08", -9966 => x"94050855", -9967 => x"53728c08", -9968 => x"c8050c73", -9969 => x"8c08cc05", -9970 => x"0c8c08ec", -9971 => x"0570538c", -9972 => x"08d00570", -9973 => x"5351530b", -9974 => x"0b0ba6fe", -9975 => x"3f8c08d8", -9976 => x"0570538c", -9977 => x"08c80570", -9978 => x"5351530b", -9979 => x"0b0ba6ea", -9980 => x"3f8c08ec", -9981 => x"05705253", -9982 => x"0b0b0b80", -9983 => x"df3f8008", -9984 => x"53720b0b", -9985 => x"0b0b9e38", -9986 => x"8c08d805", -9987 => x"7052530b", -9988 => x"0b0b80c8", -9989 => x"3f800853", -9990 => x"720b0b0b", -9991 => x"0b87380b", -9992 => x"0b0b0b8e", -9993 => x"39ff0b8c", -9994 => x"08c4050c", -9995 => x"0b0b0b0b", -9996 => x"9e398c08", -9997 => x"d8057053", -9998 => x"8c08ec05", -9999 => x"70535153", -10000 => x"0b0b0baa", -10001 => x"9d3f8008", -10002 => x"708c08c4", -10003 => x"050c538c", -10004 => x"08c40508", -10005 => x"800c943d", -10006 => x"0d8c0c04", -10007 => x"8c08028c", -10008 => x"0c707080", -10009 => x"0b8c08fc", -10010 => x"050c8c08", -10011 => x"88050851", -10012 => x"7008802e", -10013 => x"0b0b0b0b", -10014 => x"97388c08", -10015 => x"88050851", -10016 => x"7008812e", -10017 => x"0b0b0b0b", -10018 => x"87380b0b", -10019 => x"0b0b8839", -10020 => x"810b8c08", -10021 => x"fc050c8c", -10022 => x"08fc0508", -10023 => x"70800c51", -10024 => x"50508c0c", -10025 => x"048c0802", -10026 => x"8c0cee3d", -10027 => x"0d8c0888", -10028 => x"05088c08", -10029 => x"8c050855", -10030 => x"53728c08", -10031 => x"d0050c73", -10032 => x"8c08d405", -10033 => x"0c8c0890", -10034 => x"05088c08", -10035 => x"94050855", -10036 => x"53728c08", -10037 => x"c8050c73", -10038 => x"8c08cc05", -10039 => x"0c8c08ec", -10040 => x"0570538c", -10041 => x"08d00570", -10042 => x"5351530b", -10043 => x"0b0ba4ea", -10044 => x"3f8c08d8", -10045 => x"0570538c", -10046 => x"08c80570", -10047 => x"5351530b", -10048 => x"0b0ba4d6", -10049 => x"3f8c08ec", -10050 => x"05705253", -10051 => x"0b0b0b80", -10052 => x"df3f8008", -10053 => x"53720b0b", -10054 => x"0b0b9e38", -10055 => x"8c08d805", -10056 => x"7052530b", -10057 => x"0b0b80c8", -10058 => x"3f800853", -10059 => x"720b0b0b", -10060 => x"0b87380b", -10061 => x"0b0b0b8e", -10062 => x"39810b8c", -10063 => x"08c4050c", -10064 => x"0b0b0b0b", -10065 => x"9e398c08", -10066 => x"d8057053", -10067 => x"8c08ec05", -10068 => x"70535153", -10069 => x"0b0b0ba8", -10070 => x"893f8008", -10071 => x"708c08c4", -10072 => x"050c538c", -10073 => x"08c40508", -10074 => x"800c943d", -10075 => x"0d8c0c04", -10076 => x"8c08028c", -10077 => x"0c707080", -10078 => x"0b8c08fc", -10079 => x"050c8c08", -10080 => x"88050851", -10081 => x"7008802e", -10082 => x"0b0b0b0b", -10083 => x"97388c08", -10084 => x"88050851", -10085 => x"7008812e", -10086 => x"0b0b0b0b", -10087 => x"87380b0b", -10088 => x"0b0b8839", -10089 => x"810b8c08", -10090 => x"fc050c8c", -10091 => x"08fc0508", -10092 => x"70800c51", -10093 => x"50508c0c", -10094 => x"048c0802", -10095 => x"8c0cee3d", -10096 => x"0d8c0888", -10097 => x"05088c08", -10098 => x"8c050855", -10099 => x"53728c08", -10100 => x"d0050c73", -10101 => x"8c08d405", -10102 => x"0c8c0890", -10103 => x"05088c08", -10104 => x"94050855", -10105 => x"53728c08", -10106 => x"c8050c73", -10107 => x"8c08cc05", -10108 => x"0c8c08ec", -10109 => x"0570538c", -10110 => x"08d00570", -10111 => x"5351530b", -10112 => x"0b0ba2d6", -10113 => x"3f8c08d8", -10114 => x"0570538c", -10115 => x"08c80570", -10116 => x"5351530b", -10117 => x"0b0ba2c2", -10118 => x"3f8c08ec", -10119 => x"05705253", -10120 => x"0b0b0b80", -10121 => x"df3f8008", -10122 => x"53720b0b", -10123 => x"0b0b9e38", -10124 => x"8c08d805", -10125 => x"7052530b", -10126 => x"0b0b80c8", -10127 => x"3f800853", -10128 => x"720b0b0b", -10129 => x"0b87380b", -10130 => x"0b0b0b8e", -10131 => x"39810b8c", -10132 => x"08c4050c", -10133 => x"0b0b0b0b", -10134 => x"9e398c08", -10135 => x"d8057053", -10136 => x"8c08ec05", -10137 => x"70535153", -10138 => x"0b0b0ba5", -10139 => x"f53f8008", -10140 => x"708c08c4", -10141 => x"050c538c", -10142 => x"08c40508", -10143 => x"800c943d", -10144 => x"0d8c0c04", -10145 => x"8c08028c", -10146 => x"0c707080", -10147 => x"0b8c08fc", -10148 => x"050c8c08", -10149 => x"88050851", -10150 => x"7008802e", -10151 => x"0b0b0b0b", -10152 => x"97388c08", -10153 => x"88050851", -10154 => x"7008812e", -10155 => x"0b0b0b0b", -10156 => x"87380b0b", -10157 => x"0b0b8839", -10158 => x"810b8c08", -10159 => x"fc050c8c", -10160 => x"08fc0508", -10161 => x"70800c51", -10162 => x"50508c0c", -10163 => x"048c0802", -10164 => x"8c0cf63d", -10165 => x"0d830b8c", -10166 => x"08ec050c", -10167 => x"800b8c08", -10168 => x"e8050c8c", -10169 => x"088c0508", -10170 => x"80250b0b", -10171 => x"0b0b8838", -10172 => x"810b8c08", -10173 => x"e8050c8c", -10174 => x"08e80508", -10175 => x"8c08f005", -10176 => x"0c8c088c", -10177 => x"05080b0b", -10178 => x"0b0b8e38", -10179 => x"820b8c08", -10180 => x"ec050c0b", -10181 => x"0b0b81b5", -10182 => x"39bc0b8c", -10183 => x"08f4050c", -10184 => x"8c08f005", -10185 => x"08802e0b", -10186 => x"0b0b80c9", -10187 => x"388c088c", -10188 => x"0508810a", -10189 => x"2e098106", -10190 => x"0b0b0b0b", -10191 => x"9b388f83", -10192 => x"0a53800b", -10193 => x"8c088805", -10194 => x"08565472", -10195 => x"750c7384", -10196 => x"160c0b0b", -10197 => x"0b818939", -10198 => x"8c088c05", -10199 => x"0830708c", -10200 => x"08fc050c", -10201 => x"709f2c70", -10202 => x"8c08f805", -10203 => x"0c51530b", -10204 => x"0b0b0b97", -10205 => x"398c088c", -10206 => x"0508708c", -10207 => x"08fc050c", -10208 => x"709f2c70", -10209 => x"8c08f805", -10210 => x"0c51538c", -10211 => x"08f80508", -10212 => x"f00a260b", -10213 => x"0b0b0bb5", -10214 => x"388c08fc", -10215 => x"05089f2a", -10216 => x"8c08f805", -10217 => x"08107072", -10218 => x"078c08f8", -10219 => x"050c8c08", -10220 => x"fc050810", -10221 => x"8c08fc05", -10222 => x"0c8c08f4", -10223 => x"0508ff05", -10224 => x"8c08f405", -10225 => x"0c54540b", -10226 => x"0b0bffbf", -10227 => x"398c08ec", -10228 => x"0570538c", -10229 => x"08880508", -10230 => x"52530b0b", -10231 => x"0b8db93f", -10232 => x"8c088805", -10233 => x"08800c8c", -10234 => x"3d0d8c0c", -10235 => x"048c0802", -10236 => x"8c0cec3d", -10237 => x"0d8c0888", -10238 => x"05088c08", -10239 => x"8c050857", -10240 => x"55748c08", -10241 => x"e0050c75", -10242 => x"8c08e405", -10243 => x"0c8c08ec", -10244 => x"0570538c", -10245 => x"08e00570", -10246 => x"5351550b", -10247 => x"0b0b9eba", -10248 => x"3f8c08ec", -10249 => x"05705255", -10250 => x"0b0b0b83", -10251 => x"d93f8008", -10252 => x"5574802e", -10253 => x"0b0b0b0b", -10254 => x"8e38800b", -10255 => x"8c08d405", -10256 => x"0c0b0b0b", -10257 => x"82b4398c", -10258 => x"08ec0570", -10259 => x"52550b0b", -10260 => x"0b82ea3f", -10261 => x"80085574", -10262 => x"802e0b0b", -10263 => x"0b0b8e38", -10264 => x"800b8c08", -10265 => x"d4050c0b", -10266 => x"0b0b828e", -10267 => x"398c08ec", -10268 => x"05705255", -10269 => x"0b0b0b82", -10270 => x"8e3f8008", -10271 => x"5574802e", -10272 => x"0b0b0b0b", -10273 => x"b4388c08", -10274 => x"f0050880", -10275 => x"2e0b0b0b", -10276 => x"0b8f3881", -10277 => x"0a0b8c08", -10278 => x"d0050c0b", -10279 => x"0b0b0b89", -10280 => x"39fe0a0b", -10281 => x"8c08d005", -10282 => x"0c8c08d0", -10283 => x"05088c08", -10284 => x"d4050c0b", -10285 => x"0b0b81c2", -10286 => x"398c08f4", -10287 => x"05088025", -10288 => x"0b0b0b0b", -10289 => x"8e38800b", -10290 => x"8c08d405", -10291 => x"0c0b0b0b", -10292 => x"81a8399e", -10293 => x"0b8c08f4", -10294 => x"0508250b", -10295 => x"0b0b0bb4", -10296 => x"388c08f0", -10297 => x"0508802e", -10298 => x"0b0b0b0b", -10299 => x"8f38810a", -10300 => x"0b8c08cc", -10301 => x"050c0b0b", -10302 => x"0b0b8939", -10303 => x"fe0a0b8c", -10304 => x"08cc050c", -10305 => x"8c08cc05", -10306 => x"088c08d4", -10307 => x"050c0b0b", -10308 => x"0b80e739", -10309 => x"bc0b8c08", -10310 => x"f4050831", -10311 => x"8c08d805", -10312 => x"71565855", -10313 => x"8c08f805", -10314 => x"088c08fc", -10315 => x"05085755", -10316 => x"74527553", -10317 => x"76510b0b", -10318 => x"0b88d53f", -10319 => x"8c08d805", -10320 => x"088c08dc", -10321 => x"0508708c", -10322 => x"08e8050c", -10323 => x"8c08e805", -10324 => x"088c08c8", -10325 => x"050c5755", -10326 => x"8c08f005", -10327 => x"08802e0b", -10328 => x"0b0b0b8c", -10329 => x"388c08c8", -10330 => x"0508308c", -10331 => x"08c8050c", -10332 => x"8c08c805", -10333 => x"088c08d4", -10334 => x"050c8c08", -10335 => x"d4050880", -10336 => x"0c963d0d", -10337 => x"8c0c048c", -10338 => x"08028c0c", -10339 => x"7070800b", -10340 => x"8c08fc05", -10341 => x"0c8c0888", -10342 => x"05085170", -10343 => x"08842e09", -10344 => x"81060b0b", -10345 => x"0b0b8838", -10346 => x"810b8c08", -10347 => x"fc050c8c", -10348 => x"08fc0508", -10349 => x"70800c51", -10350 => x"50508c0c", -10351 => x"048c0802", -10352 => x"8c0c7070", -10353 => x"800b8c08", -10354 => x"fc050c8c", -10355 => x"08880508", -10356 => x"51700880", -10357 => x"2e0b0b0b", -10358 => x"0b97388c", -10359 => x"08880508", -10360 => x"51700881", -10361 => x"2e0b0b0b", -10362 => x"0b87380b", -10363 => x"0b0b0b88", -10364 => x"39810b8c", -10365 => x"08fc050c", -10366 => x"8c08fc05", -10367 => x"0870800c", -10368 => x"5150508c", -10369 => x"0c048c08", -10370 => x"028c0c70", -10371 => x"70800b8c", -10372 => x"08fc050c", -10373 => x"8c088805", -10374 => x"08517008", -10375 => x"822e0981", -10376 => x"060b0b0b", -10377 => x"0b883881", -10378 => x"0b8c08fc", -10379 => x"050c8c08", -10380 => x"fc050870", -10381 => x"800c5150", -10382 => x"508c0c04", -10383 => x"8c08028c", -10384 => x"0c707070", -10385 => x"7080538c", -10386 => x"088c0508", -10387 => x"528c0888", -10388 => x"0508510b", -10389 => x"0bfdccbf", -10390 => x"3f800870", -10391 => x"800c5450", -10392 => x"5050508c", -10393 => x"0c048c08", -10394 => x"028c0c70", -10395 => x"70707081", -10396 => x"538c088c", -10397 => x"0508528c", -10398 => x"08880508", -10399 => x"510b0bfd", -10400 => x"cc953f80", -10401 => x"0870800c", -10402 => x"54505050", -10403 => x"508c0c04", -10404 => x"8c08028c", -10405 => x"0c707080", -10406 => x"0b8c08fc", -10407 => x"050c8c08", -10408 => x"88050881", -10409 => x"06ff1170", -10410 => x"09708c08", -10411 => x"8c050806", -10412 => x"8c08fc05", -10413 => x"08118c08", -10414 => x"fc050c8c", -10415 => x"08880508", -10416 => x"812a8c08", -10417 => x"88050c8c", -10418 => x"088c0508", -10419 => x"108c088c", -10420 => x"050c5151", -10421 => x"51518c08", -10422 => x"88050880", -10423 => x"2e0b0b0b", -10424 => x"0b87380b", -10425 => x"0b0bffb6", -10426 => x"398c08fc", -10427 => x"05087080", -10428 => x"0c515050", -10429 => x"8c0c048c", -10430 => x"08028c0c", -10431 => x"eb3d0d80", -10432 => x"0b8c08f0", -10433 => x"050c800b", -10434 => x"8c08f405", -10435 => x"0c8c088c", -10436 => x"05088c08", -10437 => x"90050856", -10438 => x"54738c08", -10439 => x"f0050c74", -10440 => x"8c08f405", -10441 => x"0c8c08f8", -10442 => x"058c08f0", -10443 => x"05565688", -10444 => x"70547553", -10445 => x"7652540b", -10446 => x"0bfdcccf", -10447 => x"3f800b8c", -10448 => x"08e8050c", -10449 => x"800b8c08", -10450 => x"ec050c8c", -10451 => x"08940508", -10452 => x"8c089805", -10453 => x"08565473", -10454 => x"8c08e805", -10455 => x"0c748c08", -10456 => x"ec050c8c", -10457 => x"08f0058c", -10458 => x"08e80556", -10459 => x"56887054", -10460 => x"75537652", -10461 => x"540b0bfd", -10462 => x"cc913f80", -10463 => x"0b8c08e8", -10464 => x"050c800b", -10465 => x"8c08ec05", -10466 => x"0c8c08fc", -10467 => x"050883ff", -10468 => x"ff068c08", -10469 => x"cc050c8c", -10470 => x"08fc0508", -10471 => x"902a8c08", -10472 => x"c4050c8c", -10473 => x"08f40508", -10474 => x"83ffff06", -10475 => x"8c08c805", -10476 => x"0c8c08f4", -10477 => x"0508902a", -10478 => x"8c08c005", -10479 => x"0c8c08cc", -10480 => x"05088c08", -10481 => x"c8050829", -10482 => x"708c08dc", -10483 => x"050c8c08", -10484 => x"cc05088c", -10485 => x"08c00508", -10486 => x"29708c08", -10487 => x"d8050c8c", -10488 => x"08c40508", -10489 => x"8c08c805", -10490 => x"0829708c", -10491 => x"08d4050c", -10492 => x"8c08c405", -10493 => x"088c08c0", -10494 => x"05082970", -10495 => x"8c08d005", -10496 => x"0c8c08dc", -10497 => x"0508902a", -10498 => x"8c08d805", -10499 => x"08118c08", -10500 => x"d8050c8c", -10501 => x"08d80508", -10502 => x"8c08d405", -10503 => x"08058c08", -10504 => x"d8050c51", -10505 => x"51515154", -10506 => x"8c08d805", -10507 => x"088c08d4", -10508 => x"0508270b", -10509 => x"0b0b0b8f", -10510 => x"388c08d0", -10511 => x"05088480", -10512 => x"80058c08", -10513 => x"d0050c8c", -10514 => x"08d80508", -10515 => x"902a8c08", -10516 => x"d0050811", -10517 => x"8c08e005", -10518 => x"0c8c08d8", -10519 => x"050883ff", -10520 => x"ff067090", -10521 => x"2b8c08dc", -10522 => x"050883ff", -10523 => x"ff067012", -10524 => x"8c08e405", -10525 => x"0c525751", -10526 => x"548c08e0", -10527 => x"05088c08", -10528 => x"e4050856", -10529 => x"54738c08", -10530 => x"e8050c74", -10531 => x"8c08ec05", -10532 => x"0c8c08fc", -10533 => x"05088c08", -10534 => x"f0050829", -10535 => x"8c08f805", -10536 => x"088c08f4", -10537 => x"05082970", -10538 => x"128c08e8", -10539 => x"0508118c", -10540 => x"08e8050c", -10541 => x"5155558c", -10542 => x"08e80508", -10543 => x"8c08ec05", -10544 => x"088c0888", -10545 => x"05085856", -10546 => x"5473760c", -10547 => x"7484170c", -10548 => x"8c088805", -10549 => x"08800c97", -10550 => x"3d0d8c0c", -10551 => x"048c0802", -10552 => x"8c0cf63d", -10553 => x"0d800b8c", -10554 => x"08f0050c", -10555 => x"800b8c08", -10556 => x"f4050c8c", -10557 => x"088c0508", -10558 => x"8c089005", -10559 => x"08565473", -10560 => x"8c08f005", -10561 => x"0c748c08", -10562 => x"f4050c8c", -10563 => x"08f8058c", -10564 => x"08f00556", -10565 => x"56887054", -10566 => x"75537652", -10567 => x"540b0bfd", -10568 => x"c8e93f80", -10569 => x"0b8c08f0", -10570 => x"050c800b", -10571 => x"8c08f405", -10572 => x"0c8c08f8", -10573 => x"0508308c", -10574 => x"08ec050c", -10575 => x"8c08fc05", -10576 => x"08802e0b", -10577 => x"0b0b0b8d", -10578 => x"388c08ec", -10579 => x"0508ff05", -10580 => x"8c08ec05", -10581 => x"0c8c08ec", -10582 => x"05088c08", -10583 => x"f0050c8c", -10584 => x"08fc0508", -10585 => x"308c08f4", -10586 => x"050c8c08", -10587 => x"f005088c", -10588 => x"08f40508", -10589 => x"8c088805", -10590 => x"08585654", -10591 => x"73760c74", -10592 => x"84170c8c", -10593 => x"08880508", -10594 => x"800c8c3d", -10595 => x"0d8c0c04", -10596 => x"8c08028c", -10597 => x"0cf53d0d", -10598 => x"8c089405", -10599 => x"080b0b0b", -10600 => x"0ba0388c", -10601 => x"088c0508", -10602 => x"8c089005", -10603 => x"088c0888", -10604 => x"05085856", -10605 => x"5473760c", -10606 => x"7484170c", -10607 => x"0b0b0b81", -10608 => x"ca39800b", -10609 => x"8c08f005", -10610 => x"0c800b8c", -10611 => x"08f4050c", -10612 => x"8c088c05", -10613 => x"088c0890", -10614 => x"05085654", -10615 => x"738c08f0", -10616 => x"050c748c", -10617 => x"08f4050c", -10618 => x"8c08f805", -10619 => x"8c08f005", -10620 => x"56568870", -10621 => x"54755376", -10622 => x"52540b0b", -10623 => x"fdc78c3f", -10624 => x"a00b8c08", -10625 => x"94050831", -10626 => x"8c08ec05", -10627 => x"0c8c08ec", -10628 => x"05088024", -10629 => x"0b0b0b0b", -10630 => x"a138800b", -10631 => x"8c08f005", -10632 => x"0c8c08ec", -10633 => x"0508308c", -10634 => x"08f80508", -10635 => x"712a8c08", -10636 => x"f4050c54", -10637 => x"0b0b0b0b", -10638 => x"b9398c08", -10639 => x"f805088c", -10640 => x"08ec0508", -10641 => x"2b8c08e8", -10642 => x"050c8c08", -10643 => x"f805088c", -10644 => x"08940508", -10645 => x"2a8c08f0", -10646 => x"050c8c08", -10647 => x"fc05088c", -10648 => x"08940508", -10649 => x"2a708c08", -10650 => x"e8050807", -10651 => x"8c08f405", -10652 => x"0c548c08", -10653 => x"f005088c", -10654 => x"08f40508", -10655 => x"8c088805", -10656 => x"08585654", -10657 => x"73760c74", -10658 => x"84170c8c", -10659 => x"08880508", -10660 => x"800c8d3d", -10661 => x"0d8c0c04", -10662 => x"8c08028c", -10663 => x"0cc73d0d", -10664 => x"8c088c05", -10665 => x"08559015", -10666 => x"088c1608", -10667 => x"5656748c", -10668 => x"08f0050c", -10669 => x"758c08f4", -10670 => x"050c8c08", -10671 => x"8c050884", -10672 => x"11088c08", -10673 => x"ec050c55", -10674 => x"800b8c08", -10675 => x"e8050c8c", -10676 => x"088c0508", -10677 => x"510b0b0b", -10678 => x"90b73f80", -10679 => x"08557480", -10680 => x"2e0b0b0b", -10681 => x"0bad388f", -10682 => x"ff0b8c08", -10683 => x"e8050c8c", -10684 => x"08f00508", -10685 => x"a0808007", -10686 => x"8c08f405", -10687 => x"08800757", -10688 => x"55748c08", -10689 => x"f0050c75", -10690 => x"8c08f405", -10691 => x"0c0b0b0b", -10692 => x"8df4398c", -10693 => x"088c0508", -10694 => x"510b0b0b", -10695 => x"8fbd3f80", -10696 => x"08557480", -10697 => x"2e0b0b0b", -10698 => x"0b9f388f", -10699 => x"ff0b8c08", -10700 => x"e8050c80", -10701 => x"55805674", -10702 => x"8c08f005", -10703 => x"0c758c08", -10704 => x"f4050c0b", -10705 => x"0b0b8dbe", -10706 => x"398c088c", -10707 => x"0508510b", -10708 => x"0b0b8ed1", -10709 => x"3f800855", -10710 => x"74802e0b", -10711 => x"0b0b0b9e", -10712 => x"38800b8c", -10713 => x"08e8050c", -10714 => x"80558056", -10715 => x"748c08f0", -10716 => x"050c758c", -10717 => x"08f4050c", -10718 => x"0b0b0b8d", -10719 => x"89398c08", -10720 => x"f0050870", -10721 => x"8c08f405", -10722 => x"08075155", -10723 => x"740b0b0b", -10724 => x"0b8e3880", -10725 => x"0b8c08e8", -10726 => x"050c0b0b", -10727 => x"0b8ce739", -10728 => x"8c088c05", -10729 => x"08558815", -10730 => x"08f88225", -10731 => x"0b0b0b87", -10732 => x"af388c08", -10733 => x"8c0508f8", -10734 => x"820b8812", -10735 => x"08318c08", -10736 => x"e4050c55", -10737 => x"800b8c08", -10738 => x"e8050cb8", -10739 => x"0b8c08e4", -10740 => x"0508250b", -10741 => x"0b0b0b97", -10742 => x"38805580", -10743 => x"56748c08", -10744 => x"f0050c75", -10745 => x"8c08f405", -10746 => x"0c0b0b0b", -10747 => x"82b03980", -10748 => x"0b8c08e0", -10749 => x"050c8c08", -10750 => x"d8055780", -10751 => x"55810b8c", -10752 => x"08e40508", -10753 => x"55567452", -10754 => x"75537651", -10755 => x"0b0bfdbc", -10756 => x"ab3f8c08", -10757 => x"d805088c", -10758 => x"08dc0508", -10759 => x"5755748c", -10760 => x"08d0050c", -10761 => x"758c08d4", -10762 => x"050cff56", -10763 => x"ff57758c", -10764 => x"08c8050c", -10765 => x"768c08cc", -10766 => x"050c8c08", -10767 => x"d405088c", -10768 => x"08cc0508", -10769 => x"7012708c", -10770 => x"08c4050c", -10771 => x"52565781", -10772 => x"0b8c08ff", -10773 => x"bc050c8c", -10774 => x"08c40508", -10775 => x"8c08d405", -10776 => x"08585676", -10777 => x"76260b0b", -10778 => x"0b0b8938", -10779 => x"800b8c08", -10780 => x"ffbc050c", -10781 => x"8c08d005", -10782 => x"088c08c8", -10783 => x"05087012", -10784 => x"708c08c0", -10785 => x"050c8c08", -10786 => x"c005088c", -10787 => x"08ffbc05", -10788 => x"0811708c", -10789 => x"08c0050c", -10790 => x"8c08c005", -10791 => x"08708c08", -10792 => x"f0050806", -10793 => x"8c08c405", -10794 => x"08708c08", -10795 => x"f4050806", -10796 => x"72707207", -10797 => x"51525752", -10798 => x"5252525a", -10799 => x"52575576", -10800 => x"802e0b0b", -10801 => x"0b0b8838", -10802 => x"810b8c08", -10803 => x"e0050c8c", -10804 => x"08d8058c", -10805 => x"08e40508", -10806 => x"55578c08", -10807 => x"f005088c", -10808 => x"08f40508", -10809 => x"57557452", -10810 => x"75537651", -10811 => x"0b0b0bf9", -10812 => x"9f3f8c08", -10813 => x"d805088c", -10814 => x"08dc0508", -10815 => x"8c08e005", -10816 => x"089f2c8c", -10817 => x"08e00508", -10818 => x"71707507", -10819 => x"8c08f005", -10820 => x"0c737207", -10821 => x"8c08f405", -10822 => x"0c59595b", -10823 => x"59578c08", -10824 => x"f0050880", -10825 => x"06708c08", -10826 => x"ffb4050c", -10827 => x"8c08f405", -10828 => x"0881ff06", -10829 => x"708c08ff", -10830 => x"b8050c57", -10831 => x"558c08ff", -10832 => x"b405088c", -10833 => x"08ffb805", -10834 => x"08575574", -10835 => x"8c08ffb4", -10836 => x"050c758c", -10837 => x"08ffb805", -10838 => x"0c8c08ff", -10839 => x"b4050856", -10840 => x"750b0b0b", -10841 => x"81f8388c", -10842 => x"08ffb805", -10843 => x"08577681", -10844 => x"802e0981", -10845 => x"060b0b0b", -10846 => x"81e4388c", -10847 => x"08f00508", -10848 => x"982b8c08", -10849 => x"f4050888", -10850 => x"2a707207", -10851 => x"8c08f005", -10852 => x"08882a71", -10853 => x"81065158", -10854 => x"58585874", -10855 => x"802e0b0b", -10856 => x"0b82ef38", -10857 => x"8c08f005", -10858 => x"088c08f4", -10859 => x"05085755", -10860 => x"748c08ff", -10861 => x"ac050c75", -10862 => x"8c08ffb0", -10863 => x"050c8056", -10864 => x"81805775", -10865 => x"8c08ffa4", -10866 => x"050c768c", -10867 => x"08ffa805", -10868 => x"0c8c08ff", -10869 => x"b005088c", -10870 => x"08ffa805", -10871 => x"08701270", -10872 => x"8c08ffa0", -10873 => x"050c5256", -10874 => x"57810b8c", -10875 => x"08ff9805", -10876 => x"0c8c08ff", -10877 => x"a005088c", -10878 => x"08ffb005", -10879 => x"08585676", -10880 => x"76260b0b", -10881 => x"0b0b8938", -10882 => x"800b8c08", -10883 => x"ff98050c", -10884 => x"8c08ffac", -10885 => x"05088c08", -10886 => x"ffa40508", -10887 => x"7012708c", -10888 => x"08ff9c05", -10889 => x"0c8c08ff", -10890 => x"9c05088c", -10891 => x"08ff9805", -10892 => x"0811708c", -10893 => x"08ff9c05", -10894 => x"0c525a52", -10895 => x"57558c08", -10896 => x"ff9c0508", -10897 => x"8c08ffa0", -10898 => x"05085755", -10899 => x"748c08f0", -10900 => x"050c758c", -10901 => x"08f4050c", -10902 => x"0b0b0b81", -10903 => x"b5398c08", -10904 => x"f005088c", -10905 => x"08f40508", -10906 => x"5856758c", -10907 => x"08ff9005", -10908 => x"0c768c08", -10909 => x"ff94050c", -10910 => x"805580ff", -10911 => x"56748c08", -10912 => x"ff88050c", -10913 => x"758c08ff", -10914 => x"8c050c8c", -10915 => x"08ff9405", -10916 => x"088c08ff", -10917 => x"8c050870", -10918 => x"12708c08", -10919 => x"ff84050c", -10920 => x"52585681", -10921 => x"0b8c08fe", -10922 => x"fc050c8c", -10923 => x"08ff8405", -10924 => x"088c08ff", -10925 => x"94050857", -10926 => x"55757526", -10927 => x"0b0b0b0b", -10928 => x"8938800b", -10929 => x"8c08fefc", -10930 => x"050c8c08", -10931 => x"ff900508", -10932 => x"8c08ff88", -10933 => x"05087012", -10934 => x"708c08ff", -10935 => x"80050c8c", -10936 => x"08ff8005", -10937 => x"088c08fe", -10938 => x"fc050811", -10939 => x"708c08ff", -10940 => x"80050c53", -10941 => x"59525657", -10942 => x"8c08ff80", -10943 => x"05088c08", -10944 => x"ff840508", -10945 => x"5755748c", -10946 => x"08f0050c", -10947 => x"758c08f4", -10948 => x"050c8c08", -10949 => x"f00508f0", -10950 => x"0a260b0b", -10951 => x"0b0b8738", -10952 => x"0b0b0b0b", -10953 => x"8d398c08", -10954 => x"e8050881", -10955 => x"058c08e8", -10956 => x"050c8c08", -10957 => x"f0050898", -10958 => x"2b8c08f4", -10959 => x"0508882a", -10960 => x"7072078c", -10961 => x"08f00508", -10962 => x"882a5858", -10963 => x"5858748c", -10964 => x"08f0050c", -10965 => x"758c08f4", -10966 => x"050c0b0b", -10967 => x"0b85a739", -10968 => x"8c088c05", -10969 => x"085587ff", -10970 => x"0b881608", -10971 => x"250b0b0b", -10972 => x"0b9f388f", -10973 => x"ff0b8c08", -10974 => x"e8050c80", -10975 => x"55805674", -10976 => x"8c08f005", -10977 => x"0c758c08", -10978 => x"f4050c0b", -10979 => x"0b0b84f6", -10980 => x"398c088c", -10981 => x"05088811", -10982 => x"0887ff05", -10983 => x"8c08e805", -10984 => x"0c8c08f0", -10985 => x"05088006", -10986 => x"708c08fe", -10987 => x"f4050c8c", -10988 => x"08f40508", -10989 => x"81ff0670", -10990 => x"8c08fef8", -10991 => x"050c5957", -10992 => x"558c08fe", -10993 => x"f405088c", -10994 => x"08fef805", -10995 => x"08575574", -10996 => x"8c08fef4", -10997 => x"050c758c", -10998 => x"08fef805", -10999 => x"0c8c08fe", -11000 => x"f4050856", -11001 => x"750b0b0b", -11002 => x"81f8388c", -11003 => x"08fef805", -11004 => x"08577681", -11005 => x"802e0981", -11006 => x"060b0b0b", -11007 => x"81e4388c", -11008 => x"08f00508", -11009 => x"982b8c08", -11010 => x"f4050888", -11011 => x"2a707207", -11012 => x"8c08f005", -11013 => x"08882a71", -11014 => x"81065158", -11015 => x"58585874", -11016 => x"802e0b0b", -11017 => x"0b82ef38", -11018 => x"8c08f005", -11019 => x"088c08f4", -11020 => x"05085755", -11021 => x"748c08fe", -11022 => x"ec050c75", -11023 => x"8c08fef0", -11024 => x"050c8056", -11025 => x"81805775", -11026 => x"8c08fee4", -11027 => x"050c768c", -11028 => x"08fee805", -11029 => x"0c8c08fe", -11030 => x"f005088c", -11031 => x"08fee805", -11032 => x"08701270", -11033 => x"8c08fee0", -11034 => x"050c5256", -11035 => x"57810b8c", -11036 => x"08fed805", -11037 => x"0c8c08fe", -11038 => x"e005088c", -11039 => x"08fef005", -11040 => x"08585676", -11041 => x"76260b0b", -11042 => x"0b0b8938", -11043 => x"800b8c08", -11044 => x"fed8050c", -11045 => x"8c08feec", -11046 => x"05088c08", -11047 => x"fee40508", -11048 => x"7012708c", -11049 => x"08fedc05", -11050 => x"0c8c08fe", -11051 => x"dc05088c", -11052 => x"08fed805", -11053 => x"0811708c", -11054 => x"08fedc05", -11055 => x"0c525a52", -11056 => x"57558c08", -11057 => x"fedc0508", -11058 => x"8c08fee0", -11059 => x"05085755", -11060 => x"748c08f0", -11061 => x"050c758c", -11062 => x"08f4050c", -11063 => x"0b0b0b81", -11064 => x"b5398c08", -11065 => x"f005088c", -11066 => x"08f40508", -11067 => x"5856758c", -11068 => x"08fed005", -11069 => x"0c768c08", -11070 => x"fed4050c", -11071 => x"805580ff", -11072 => x"56748c08", -11073 => x"fec8050c", -11074 => x"758c08fe", -11075 => x"cc050c8c", -11076 => x"08fed405", -11077 => x"088c08fe", -11078 => x"cc050870", -11079 => x"12708c08", -11080 => x"fec4050c", -11081 => x"52585681", -11082 => x"0b8c08fe", -11083 => x"bc050c8c", -11084 => x"08fec405", -11085 => x"088c08fe", -11086 => x"d4050857", -11087 => x"55757526", -11088 => x"0b0b0b0b", -11089 => x"8938800b", -11090 => x"8c08febc", -11091 => x"050c8c08", -11092 => x"fed00508", -11093 => x"8c08fec8", -11094 => x"05087012", -11095 => x"708c08fe", -11096 => x"c0050c8c", -11097 => x"08fec005", -11098 => x"088c08fe", -11099 => x"bc050811", -11100 => x"708c08fe", -11101 => x"c0050c53", -11102 => x"59525657", -11103 => x"8c08fec0", -11104 => x"05088c08", -11105 => x"fec40508", -11106 => x"5755748c", -11107 => x"08f0050c", -11108 => x"758c08f4", -11109 => x"050c8c08", -11110 => x"f00508f8", -11111 => x"0a260b0b", -11112 => x"0b0b8738", -11113 => x"0b0b0b0b", -11114 => x"b5398c08", -11115 => x"f005089f", -11116 => x"2b8c08f4", -11117 => x"0508812a", -11118 => x"7072078c", -11119 => x"08f00508", -11120 => x"812a5858", -11121 => x"5858748c", -11122 => x"08f0050c", -11123 => x"758c08f4", -11124 => x"050c8c08", -11125 => x"e8050881", -11126 => x"058c08e8", -11127 => x"050c8c08", -11128 => x"f0050898", -11129 => x"2b8c08f4", -11130 => x"0508882a", -11131 => x"7072078c", -11132 => x"08f00508", -11133 => x"882a5858", -11134 => x"5858748c", -11135 => x"08f0050c", -11136 => x"758c08f4", -11137 => x"050c8c08", -11138 => x"f00508bf", -11139 => x"ffff068c", -11140 => x"08f8050c", -11141 => x"8c08f405", -11142 => x"08ff068c", -11143 => x"08fc050c", -11144 => x"8c08e805", -11145 => x"08568070", -11146 => x"8006778f", -11147 => x"ff067094", -11148 => x"2b535a58", -11149 => x"55800b8c", -11150 => x"08f80508", -11151 => x"76078c08", -11152 => x"f8050c70", -11153 => x"8c08fc05", -11154 => x"08078c08", -11155 => x"fc050c8c", -11156 => x"08ec0508", -11157 => x"51568070", -11158 => x"80067781", -11159 => x"06709f2b", -11160 => x"535a5855", -11161 => x"800b8c08", -11162 => x"f8050876", -11163 => x"078c08f8", -11164 => x"050c708c", -11165 => x"08fc0508", -11166 => x"078c08fc", -11167 => x"050c568c", -11168 => x"08f80508", -11169 => x"8c08fc05", -11170 => x"088c0888", -11171 => x"05085957", -11172 => x"5574770c", -11173 => x"7584180c", -11174 => x"8c088805", -11175 => x"08800cbb", -11176 => x"3d0d8c0c", -11177 => x"048c0802", -11178 => x"8c0c7070", -11179 => x"800b8c08", -11180 => x"fc050c8c", -11181 => x"08880508", -11182 => x"51700882", -11183 => x"2e098106", -11184 => x"0b0b0b0b", -11185 => x"8838810b", -11186 => x"8c08fc05", -11187 => x"0c8c08fc", -11188 => x"05087080", -11189 => x"0c515050", -11190 => x"8c0c048c", -11191 => x"08028c0c", -11192 => x"7070800b", -11193 => x"8c08fc05", -11194 => x"0c8c0888", -11195 => x"05085170", -11196 => x"08842e09", -11197 => x"81060b0b", -11198 => x"0b0b8838", -11199 => x"810b8c08", -11200 => x"fc050c8c", -11201 => x"08fc0508", -11202 => x"70800c51", -11203 => x"50508c0c", -11204 => x"048c0802", -11205 => x"8c0c7070", -11206 => x"800b8c08", -11207 => x"fc050c8c", -11208 => x"08880508", -11209 => x"51700880", -11210 => x"2e0b0b0b", -11211 => x"0b97388c", -11212 => x"08880508", -11213 => x"51700881", -11214 => x"2e0b0b0b", -11215 => x"0b87380b", -11216 => x"0b0b0b88", -11217 => x"39810b8c", -11218 => x"08fc050c", -11219 => x"8c08fc05", -11220 => x"0870800c", -11221 => x"5150508c", -11222 => x"0c048c08", -11223 => x"028c0cf8", -11224 => x"3d0d8c08", -11225 => x"88050870", -11226 => x"08bfffff", -11227 => x"068c08f8", -11228 => x"050c8411", -11229 => x"08ff068c", -11230 => x"08fc050c", -11231 => x"8c088805", -11232 => x"08700894", -11233 => x"2a545451", -11234 => x"80728fff", -11235 => x"068c08f4", -11236 => x"050c8c08", -11237 => x"88050870", -11238 => x"089f2a54", -11239 => x"54518072", -11240 => x"81068c08", -11241 => x"f0050c8c", -11242 => x"088c0508", -11243 => x"8c08f005", -11244 => x"0884120c", -11245 => x"51518c08", -11246 => x"f405080b", -11247 => x"0b0b81cf", -11248 => x"388c08f8", -11249 => x"0508708c", -11250 => x"08fc0508", -11251 => x"07515170", -11252 => x"0b0b0b0b", -11253 => x"90388c08", -11254 => x"8c050851", -11255 => x"82710c0b", -11256 => x"0b0b82f8", -11257 => x"398c088c", -11258 => x"05088c08", -11259 => x"f40508f8", -11260 => x"82058812", -11261 => x"0c8c08fc", -11262 => x"0508982a", -11263 => x"8c08f805", -11264 => x"08882b70", -11265 => x"72078c08", -11266 => x"fc050888", -11267 => x"2b565355", -11268 => x"5551708c", -11269 => x"08f8050c", -11270 => x"718c08fc", -11271 => x"050c8c08", -11272 => x"8c050851", -11273 => x"83710c8c", -11274 => x"08f80508", -11275 => x"f00a260b", -11276 => x"0b0b0bbb", -11277 => x"388c08fc", -11278 => x"05089f2a", -11279 => x"8c08f805", -11280 => x"08107072", -11281 => x"078c08fc", -11282 => x"05081055", -11283 => x"53545470", -11284 => x"8c08f805", -11285 => x"0c718c08", -11286 => x"fc050c8c", -11287 => x"088c0508", -11288 => x"881108ff", -11289 => x"0588120c", -11290 => x"510b0b0b", -11291 => x"ffb9398c", -11292 => x"088c0508", -11293 => x"538c08f8", -11294 => x"05088c08", -11295 => x"fc050853", -11296 => x"51708c14", -11297 => x"0c719014", -11298 => x"0c0b0b0b", -11299 => x"81ce398c", -11300 => x"08f40508", -11301 => x"8fff2e09", -11302 => x"81060b0b", -11303 => x"0b80f438", -11304 => x"8c08f805", -11305 => x"08708c08", -11306 => x"fc050807", -11307 => x"5151700b", -11308 => x"0b0b0b90", -11309 => x"388c088c", -11310 => x"05085184", -11311 => x"710c0b0b", -11312 => x"0b819939", -11313 => x"8c08f805", -11314 => x"08932a52", -11315 => x"80728106", -11316 => x"51517080", -11317 => x"2e0b0b0b", -11318 => x"0b90388c", -11319 => x"088c0508", -11320 => x"5181710c", -11321 => x"0b0b0b0b", -11322 => x"8a398c08", -11323 => x"8c050851", -11324 => x"80710c8c", -11325 => x"088c0508", -11326 => x"538c08f8", -11327 => x"05088c08", -11328 => x"fc050853", -11329 => x"51708c14", -11330 => x"0c719014", -11331 => x"0c0b0b0b", -11332 => x"80ca398c", -11333 => x"088c0508", -11334 => x"8c08f405", -11335 => x"08f88105", -11336 => x"88120c8c", -11337 => x"088c0508", -11338 => x"51518371", -11339 => x"0c8c088c", -11340 => x"05088c08", -11341 => x"fc050898", -11342 => x"2a8c08f8", -11343 => x"0508882b", -11344 => x"7072078c", -11345 => x"08fc0508", -11346 => x"882b7188", -11347 => x"0a078c16", -11348 => x"0c708007", -11349 => x"90160c56", -11350 => x"54555555", -11351 => x"8a3d0d8c", -11352 => x"0c048c08", -11353 => x"028c0cf0", -11354 => x"3d0d8c08", -11355 => x"88050851", -11356 => x"0b0b0b89", -11357 => x"993f8008", -11358 => x"52710b0b", -11359 => x"0b0b9d38", -11360 => x"8c088c05", -11361 => x"08510b0b", -11362 => x"0b89833f", -11363 => x"80085271", -11364 => x"0b0b0b0b", -11365 => x"87380b0b", -11366 => x"0b0b8e39", -11367 => x"810b8c08", -11368 => x"fc050c0b", -11369 => x"0b0b87ed", -11370 => x"398c0888", -11371 => x"0508510b", -11372 => x"0b0b88a4", -11373 => x"3f800852", -11374 => x"71802e0b", -11375 => x"0b0b0bb9", -11376 => x"388c088c", -11377 => x"0508510b", -11378 => x"0b0b888c", -11379 => x"3f800852", -11380 => x"71802e0b", -11381 => x"0b0b0ba1", -11382 => x"388c088c", -11383 => x"05088c08", -11384 => x"88050884", -11385 => x"12088412", -11386 => x"0831708c", -11387 => x"08fc050c", -11388 => x"5254520b", -11389 => x"0b0b879d", -11390 => x"398c0888", -11391 => x"0508510b", -11392 => x"0b0b87d4", -11393 => x"3f800852", -11394 => x"71802e0b", -11395 => x"0b0b0bb6", -11396 => x"388c0888", -11397 => x"05085284", -11398 => x"1208802e", -11399 => x"0b0b0b0b", -11400 => x"8e38ff0b", -11401 => x"8c08f805", -11402 => x"0c0b0b0b", -11403 => x"0b883981", -11404 => x"0b8c08f8", -11405 => x"050c8c08", -11406 => x"f805088c", -11407 => x"08fc050c", -11408 => x"0b0b0b86", -11409 => x"d0398c08", -11410 => x"8c050851", -11411 => x"0b0b0b87", -11412 => x"873f8008", -11413 => x"5271802e", -11414 => x"0b0b0b0b", -11415 => x"b6388c08", -11416 => x"8c050852", -11417 => x"84120880", -11418 => x"2e0b0b0b", -11419 => x"0b8e3881", -11420 => x"0b8c08f4", -11421 => x"050c0b0b", -11422 => x"0b0b8839", -11423 => x"ff0b8c08", -11424 => x"f4050c8c", -11425 => x"08f40508", -11426 => x"8c08fc05", -11427 => x"0c0b0b0b", -11428 => x"8683398c", -11429 => x"08880508", -11430 => x"510b0b0b", -11431 => x"86843f80", -11432 => x"08527180", -11433 => x"2e0b0b0b", -11434 => x"0ba6388c", -11435 => x"088c0508", -11436 => x"510b0b0b", -11437 => x"85ec3f80", -11438 => x"08527180", -11439 => x"2e0b0b0b", -11440 => x"0b8e3880", -11441 => x"0b8c08fc", -11442 => x"050c0b0b", -11443 => x"0b85c639", -11444 => x"8c088805", -11445 => x"08510b0b", -11446 => x"0b85c73f", -11447 => x"80085271", -11448 => x"802e0b0b", -11449 => x"0b0bb638", -11450 => x"8c088c05", -11451 => x"08528412", -11452 => x"08802e0b", -11453 => x"0b0b0b8e", -11454 => x"38810b8c", -11455 => x"08f0050c", -11456 => x"0b0b0b0b", -11457 => x"8839ff0b", -11458 => x"8c08f005", -11459 => x"0c8c08f0", -11460 => x"05088c08", -11461 => x"fc050c0b", -11462 => x"0b0b84f9", -11463 => x"398c088c", -11464 => x"0508510b", -11465 => x"0b0b84fa", -11466 => x"3f800852", -11467 => x"71802e0b", -11468 => x"0b0b0bb6", -11469 => x"388c0888", -11470 => x"05085284", -11471 => x"1208802e", -11472 => x"0b0b0b0b", -11473 => x"8e38ff0b", -11474 => x"8c08ec05", -11475 => x"0c0b0b0b", -11476 => x"0b883981", -11477 => x"0b8c08ec", -11478 => x"050c8c08", -11479 => x"ec05088c", -11480 => x"08fc050c", -11481 => x"0b0b0b84", -11482 => x"ac398c08", -11483 => x"8805088c", -11484 => x"088c0508", -11485 => x"53538413", -11486 => x"08841308", -11487 => x"2e0b0b0b", -11488 => x"0bb6388c", -11489 => x"08880508", -11490 => x"52841208", -11491 => x"802e0b0b", -11492 => x"0b0b8e38", -11493 => x"ff0b8c08", -11494 => x"e8050c0b", -11495 => x"0b0b0b88", -11496 => x"39810b8c", -11497 => x"08e8050c", -11498 => x"8c08e805", -11499 => x"088c08fc", -11500 => x"050c0b0b", -11501 => x"0b83de39", -11502 => x"8c088805", -11503 => x"088c088c", -11504 => x"05085353", -11505 => x"88120888", -11506 => x"1408250b", -11507 => x"0b0b0bb6", -11508 => x"388c0888", -11509 => x"05085284", -11510 => x"1208802e", -11511 => x"0b0b0b0b", -11512 => x"8e38ff0b", -11513 => x"8c08e405", -11514 => x"0c0b0b0b", -11515 => x"0b883981", -11516 => x"0b8c08e4", -11517 => x"050c8c08", -11518 => x"e405088c", -11519 => x"08fc050c", -11520 => x"0b0b0b83", -11521 => x"90398c08", -11522 => x"8805088c", -11523 => x"088c0508", -11524 => x"53538813", -11525 => x"08881308", -11526 => x"250b0b0b", -11527 => x"0bb6388c", -11528 => x"08880508", -11529 => x"52841208", -11530 => x"802e0b0b", -11531 => x"0b0b8e38", -11532 => x"810b8c08", -11533 => x"e0050c0b", -11534 => x"0b0b0b88", -11535 => x"39ff0b8c", -11536 => x"08e0050c", -11537 => x"8c08e005", -11538 => x"088c08fc", -11539 => x"050c0b0b", -11540 => x"0b82c239", -11541 => x"8c088805", -11542 => x"088c08dc", -11543 => x"050c8c08", -11544 => x"8c05088c", -11545 => x"08d8050c", -11546 => x"8c08dc05", -11547 => x"088c08d8", -11548 => x"05085452", -11549 => x"8c12088c", -11550 => x"1408260b", -11551 => x"0b0b0bbc", -11552 => x"388c08dc", -11553 => x"05088c08", -11554 => x"d8050854", -11555 => x"528c1208", -11556 => x"8c14082e", -11557 => x"0981060b", -11558 => x"0b0b80d5", -11559 => x"388c08dc", -11560 => x"05088c08", -11561 => x"d8050854", -11562 => x"52901208", -11563 => x"90140826", -11564 => x"0b0b0b0b", -11565 => x"87380b0b", -11566 => x"0b0bb639", -11567 => x"8c088805", -11568 => x"08528412", -11569 => x"08802e0b", -11570 => x"0b0b0b8e", -11571 => x"38ff0b8c", -11572 => x"08d4050c", -11573 => x"0b0b0b0b", -11574 => x"8839810b", -11575 => x"8c08d405", -11576 => x"0c8c08d4", -11577 => x"05088c08", -11578 => x"fc050c0b", -11579 => x"0b0b81a5", -11580 => x"398c088c", -11581 => x"05088c08", -11582 => x"d0050c8c", -11583 => x"08880508", -11584 => x"8c08cc05", -11585 => x"0c8c08d0", -11586 => x"05088c08", -11587 => x"cc050854", -11588 => x"528c1208", -11589 => x"8c140826", -11590 => x"0b0b0b0b", -11591 => x"bc388c08", -11592 => x"d005088c", -11593 => x"08cc0508", -11594 => x"54528c12", -11595 => x"088c1408", -11596 => x"2e098106", -11597 => x"0b0b0b80", -11598 => x"d5388c08", -11599 => x"d005088c", -11600 => x"08cc0508", -11601 => x"54529012", -11602 => x"08901408", -11603 => x"260b0b0b", -11604 => x"0b87380b", -11605 => x"0b0b0bb6", -11606 => x"398c0888", -11607 => x"05085284", -11608 => x"1208802e", -11609 => x"0b0b0b0b", -11610 => x"8e38810b", -11611 => x"8c08c805", -11612 => x"0c0b0b0b", -11613 => x"0b8839ff", -11614 => x"0b8c08c8", -11615 => x"050c8c08", -11616 => x"c805088c", -11617 => x"08fc050c", -11618 => x"0b0b0b0b", -11619 => x"8839800b", -11620 => x"8c08fc05", -11621 => x"0c8c08fc", -11622 => x"0508800c", -11623 => x"923d0d8c", -11624 => x"0c048c08", -11625 => x"028c0c70", -11626 => x"70800b8c", -11627 => x"08fc050c", -11628 => x"8c088805", -11629 => x"08517008", -11630 => x"822e0981", -11631 => x"060b0b0b", -11632 => x"0b883881", -11633 => x"0b8c08fc", -11634 => x"050c8c08", -11635 => x"fc050870", -11636 => x"800c5150", -11637 => x"508c0c04", -11638 => x"8c08028c", -11639 => x"0c707080", -11640 => x"0b8c08fc", -11641 => x"050c8c08", -11642 => x"88050851", -11643 => x"7008842e", -11644 => x"0981060b", -11645 => x"0b0b0b88", -11646 => x"38810b8c", -11647 => x"08fc050c", -11648 => x"8c08fc05", -11649 => x"0870800c", -11650 => x"5150508c", -11651 => x"0c048c08", -11652 => x"028c0c70", -11653 => x"70800b8c", -11654 => x"08fc050c", -11655 => x"8c088805", -11656 => x"08517008", -11657 => x"802e0b0b", -11658 => x"0b0b9738", -11659 => x"8c088805", -11660 => x"08517008", -11661 => x"812e0b0b", -11662 => x"0b0b8738", -11663 => x"0b0b0b0b", -11664 => x"8839810b", -11665 => x"8c08fc05", -11666 => x"0c8c08fc", -11667 => x"05087080", -11668 => x"0c515050", -11669 => x"8c0c0470", -11670 => x"700b0b83", -11671 => x"84d80bfc", -11672 => x"05700852", -11673 => x"5270ff2e", -11674 => x"0b0b0b0b", -11675 => x"9538702d", -11676 => x"fc127008", -11677 => x"525270ff", -11678 => x"2e098106", -11679 => x"0b0b0b0b", -11680 => x"ed385050", -11681 => x"04040b0b", -11682 => x"fd9e993f", -11683 => x"04000000", -11684 => x"00000040", -11685 => x"48656c6c", -11686 => x"6f20776f", -11687 => x"726c6421", -11688 => x"0a000000", -11689 => x"20202020", -11690 => x"20202020", -11691 => x"20202020", -11692 => x"20202020", -11693 => x"30303030", -11694 => x"30303030", -11695 => x"30303030", -11696 => x"30303030", -11697 => x"0000164c", -11698 => x"000010d6", -11699 => x"000010d6", -11700 => x"0000163f", -11701 => x"000010d6", -11702 => x"000010d6", -11703 => x"000010d6", -11704 => x"000010d6", -11705 => x"000010d6", -11706 => x"000010d6", -11707 => x"000010a4", -11708 => x"000015c6", -11709 => x"000010d6", -11710 => x"000010b9", -11711 => x"000012d9", -11712 => x"000010d6", -11713 => x"000015fe", -11714 => x"000015d5", -11715 => x"000015d5", -11716 => x"000015d5", -11717 => x"000015d5", -11718 => x"000015d5", -11719 => x"000015d5", -11720 => x"000015d5", -11721 => x"000015d5", -11722 => x"000015d5", -11723 => x"000010d6", -11724 => x"000010d6", -11725 => x"000010d6", -11726 => x"000010d6", -11727 => x"000010d6", -11728 => x"000010d6", -11729 => x"000010d6", -11730 => x"000010d6", -11731 => x"000010d6", -11732 => x"00001476", -11733 => x"00001060", -11734 => x"000013e5", -11735 => x"000010d6", -11736 => x"000013e5", -11737 => x"000010d6", -11738 => x"000010d6", -11739 => x"000010d6", -11740 => x"000010d6", -11741 => x"0000160c", -11742 => x"000010d6", -11743 => x"000010d6", -11744 => x"00001024", -11745 => x"000010d6", -11746 => x"000010d6", -11747 => x"000010d6", -11748 => x"0000152a", -11749 => x"000010d6", -11750 => x"00000ce0", -11751 => x"000010d6", -11752 => x"000010d6", -11753 => x"000014d2", -11754 => x"000010d6", -11755 => x"000010d6", -11756 => x"000010d6", -11757 => x"000010d6", -11758 => x"000010d6", -11759 => x"000010d6", -11760 => x"000010d6", -11761 => x"000010d6", -11762 => x"000010d6", -11763 => x"000010d6", -11764 => x"00001476", -11765 => x"00001064", -11766 => x"000013e5", -11767 => x"000013e5", -11768 => x"000013e5", -11769 => x"000013d7", -11770 => x"00001064", -11771 => x"000010d6", -11772 => x"000010d6", -11773 => x"000012b5", -11774 => x"000010d6", -11775 => x"00001592", -11776 => x"00001028", -11777 => x"0000132c", -11778 => x"000010c9", -11779 => x"000010d6", -11780 => x"0000152a", -11781 => x"000010d6", -11782 => x"00000ce4", -11783 => x"000010d6", -11784 => x"000010d6", -11785 => x"00001619", -11786 => x"62756720", -11787 => x"696e2076", -11788 => x"66707269", -11789 => x"6e74663a", -11790 => x"20626164", -11791 => x"20626173", -11792 => x"65000000", -11793 => x"30313233", -11794 => x"34353637", -11795 => x"38396162", -11796 => x"63646566", -11797 => x"00000000", -11798 => x"496e6600", -11799 => x"30313233", -11800 => x"34353637", -11801 => x"38394142", -11802 => x"43444546", -11803 => x"00000000", -11804 => x"30000000", -11805 => x"2e000000", -11806 => x"4e614e00", -11807 => x"286e756c", -11808 => x"6c290000", -11809 => x"432d5554", -11810 => x"462d3800", -11811 => x"432d534a", -11812 => x"49530000", -11813 => x"432d4555", -11814 => x"434a5000", -11815 => x"432d4a49", -11816 => x"53000000", -11817 => x"496e6669", -11818 => x"6e697479", -11819 => x"00000000", -11820 => x"000037a9", -11821 => x"000037a9", -11822 => x"0000378d", -11823 => x"000031e6", -11824 => x"00003792", -11825 => x"000031eb", -11826 => x"43000000", -11827 => x"49534f2d", -11828 => x"38383539", -11829 => x"2d310000", -11830 => x"0000b874", -11831 => x"0000b86c", -11832 => x"0000b86c", -11833 => x"0000b86c", -11834 => x"0000b86c", -11835 => x"0000b86c", -11836 => x"0000b86c", -11837 => x"0000b86c", -11838 => x"0000b86c", -11839 => x"0000b86c", -11840 => x"ffffffff", -11841 => x"ffffffff", -11842 => x"3c9cd2b2", -11843 => x"97d889bc", -11844 => x"3949f623", -11845 => x"d5a8a733", -11846 => x"32a50ffd", -11847 => x"44f4a73d", -11848 => x"255bba08", -11849 => x"cf8c979d", -11850 => x"0ac80628", -11851 => x"64ac6f43", -11852 => x"4341c379", -11853 => x"37e08000", -11854 => x"4693b8b5", -11855 => x"b5056e17", -11856 => x"4d384f03", -11857 => x"e93ff9f5", -11858 => x"5a827748", -11859 => x"f9301d32", -11860 => x"75154fdd", -11861 => x"7f73bf3c", -11862 => x"3ff00000", -11863 => x"00000000", -11864 => x"40240000", -11865 => x"00000000", -11866 => x"40590000", -11867 => x"00000000", -11868 => x"408f4000", -11869 => x"00000000", -11870 => x"40c38800", -11871 => x"00000000", -11872 => x"40f86a00", -11873 => x"00000000", -11874 => x"412e8480", -11875 => x"00000000", -11876 => x"416312d0", -11877 => x"00000000", -11878 => x"4197d784", -11879 => x"00000000", -11880 => x"41cdcd65", -11881 => x"00000000", -11882 => x"4202a05f", -11883 => x"20000000", -11884 => x"42374876", -11885 => x"e8000000", -11886 => x"426d1a94", -11887 => x"a2000000", -11888 => x"42a2309c", -11889 => x"e5400000", -11890 => x"42d6bcc4", -11891 => x"1e900000", -11892 => x"430c6bf5", -11893 => x"26340000", -11894 => x"4341c379", -11895 => x"37e08000", -11896 => x"43763457", -11897 => x"85d8a000", -11898 => x"43abc16d", -11899 => x"674ec800", -11900 => x"43e158e4", -11901 => x"60913d00", -11902 => x"4415af1d", -11903 => x"78b58c40", -11904 => x"444b1ae4", -11905 => x"d6e2ef50", -11906 => x"4480f0cf", -11907 => x"064dd592", -11908 => x"44b52d02", -11909 => x"c7e14af6", -11910 => x"44ea7843", -11911 => x"79d99db4", -11912 => x"00000005", -11913 => x"00000019", -11914 => x"0000007d", -11915 => x"64756d6d", -11916 => x"792e6578", -11917 => x"65000000", -11918 => x"00000000", -11919 => x"00000000", -11920 => x"00000000", -11921 => x"00000000", -11922 => x"00000000", -11923 => x"00ffffff", -11924 => x"ff00ffff", -11925 => x"ffff00ff", -11926 => x"ffffff00", -11927 => x"00000000", -11928 => x"00000000", -11929 => x"00000000", -11930 => x"0000c260", -11931 => x"0000ba70", -11932 => x"00000000", -11933 => x"0000bcd8", -11934 => x"0000bd34", -11935 => x"0000bd90", -11936 => x"00000000", -11937 => x"00000000", -11938 => x"00000000", -11939 => x"00000000", -11940 => x"00000000", -11941 => x"00000000", -11942 => x"00000000", -11943 => x"00000000", -11944 => x"00000000", -11945 => x"0000b8c8", -11946 => x"00000000", -11947 => x"00000000", -11948 => x"00000000", -11949 => x"00000000", -11950 => x"00000000", -11951 => x"00000000", -11952 => x"00000000", -11953 => x"00000000", -11954 => x"00000000", -11955 => x"00000000", -11956 => x"00000000", -11957 => x"00000000", -11958 => x"00000000", -11959 => x"00000000", -11960 => x"00000000", -11961 => x"00000000", -11962 => x"00000000", -11963 => x"00000000", -11964 => x"00000000", -11965 => x"00000000", -11966 => x"00000000", -11967 => x"00000000", -11968 => x"00000000", -11969 => x"00000000", -11970 => x"00000000", -11971 => x"00000000", -11972 => x"00000000", -11973 => x"00000000", -11974 => x"00000001", -11975 => x"330eabcd", -11976 => x"1234e66d", -11977 => x"deec0005", -11978 => x"000b0000", -11979 => x"00000000", -11980 => x"00000000", -11981 => x"00000000", -11982 => x"00000000", -11983 => x"00000000", -11984 => x"00000000", -11985 => x"00000000", -11986 => x"00000000", -11987 => x"00000000", -11988 => x"00000000", -11989 => x"00000000", -11990 => x"00000000", -11991 => x"00000000", -11992 => x"00000000", -11993 => x"00000000", -11994 => x"00000000", -11995 => x"00000000", -11996 => x"00000000", -11997 => x"00000000", -11998 => x"00000000", -11999 => x"00000000", -12000 => x"00000000", -12001 => x"00000000", -12002 => x"00000000", -12003 => x"00000000", -12004 => x"00000000", -12005 => x"00000000", -12006 => x"00000000", -12007 => x"00000000", -12008 => x"00000000", -12009 => x"00000000", -12010 => x"00000000", -12011 => x"00000000", -12012 => x"00000000", -12013 => x"00000000", -12014 => x"00000000", -12015 => x"00000000", -12016 => x"00000000", -12017 => x"00000000", -12018 => x"00000000", -12019 => x"00000000", -12020 => x"00000000", -12021 => x"00000000", -12022 => x"00000000", -12023 => x"00000000", -12024 => x"00000000", -12025 => x"00000000", -12026 => x"00000000", -12027 => x"00000000", -12028 => x"00000000", -12029 => x"00000000", -12030 => x"00000000", -12031 => x"00000000", -12032 => x"00000000", -12033 => x"00000000", -12034 => x"00000000", -12035 => x"00000000", -12036 => x"00000000", -12037 => x"00000000", -12038 => x"00000000", -12039 => x"00000000", -12040 => x"00000000", -12041 => x"00000000", -12042 => x"00000000", -12043 => x"00000000", -12044 => x"00000000", -12045 => x"00000000", -12046 => x"00000000", -12047 => x"00000000", -12048 => x"00000000", -12049 => x"00000000", -12050 => x"00000000", -12051 => x"00000000", -12052 => x"00000000", -12053 => x"00000000", -12054 => x"00000000", -12055 => x"00000000", -12056 => x"00000000", -12057 => x"00000000", -12058 => x"00000000", -12059 => x"00000000", -12060 => x"00000000", -12061 => x"00000000", -12062 => x"00000000", -12063 => x"00000000", -12064 => x"00000000", -12065 => x"00000000", -12066 => x"00000000", -12067 => x"00000000", -12068 => x"00000000", -12069 => x"00000000", -12070 => x"00000000", -12071 => x"00000000", -12072 => x"00000000", -12073 => x"00000000", -12074 => x"00000000", -12075 => x"00000000", -12076 => x"00000000", -12077 => x"00000000", -12078 => x"00000000", -12079 => x"00000000", -12080 => x"00000000", -12081 => x"00000000", -12082 => x"00000000", -12083 => x"00000000", -12084 => x"00000000", -12085 => x"00000000", -12086 => x"00000000", -12087 => x"00000000", -12088 => x"00000000", -12089 => x"00000000", -12090 => x"00000000", -12091 => x"00000000", -12092 => x"00000000", -12093 => x"00000000", -12094 => x"00000000", -12095 => x"00000000", -12096 => x"00000000", -12097 => x"00000000", -12098 => x"00000000", -12099 => x"00000000", -12100 => x"00000000", -12101 => x"00000000", -12102 => x"00000000", -12103 => x"00000000", -12104 => x"00000000", -12105 => x"00000000", -12106 => x"00000000", -12107 => x"00000000", -12108 => x"00000000", -12109 => x"00000000", -12110 => x"00000000", -12111 => x"00000000", -12112 => x"00000000", -12113 => x"00000000", -12114 => x"00000000", -12115 => x"00000000", -12116 => x"00000000", -12117 => x"00000000", -12118 => x"00000000", -12119 => x"00000000", -12120 => x"00000000", -12121 => x"00000000", -12122 => x"00000000", -12123 => x"00000000", -12124 => x"00000000", -12125 => x"00000000", -12126 => x"00000000", -12127 => x"00000000", -12128 => x"00000000", -12129 => x"00000000", -12130 => x"00000000", -12131 => x"00000000", -12132 => x"00000000", -12133 => x"00000000", -12134 => x"00000000", -12135 => x"00000000", -12136 => x"00000000", -12137 => x"00000000", -12138 => x"00000000", -12139 => x"00000000", -12140 => x"00000000", -12141 => x"00000000", -12142 => x"00000000", -12143 => x"00000000", -12144 => x"00000000", -12145 => x"00000000", -12146 => x"00000000", -12147 => x"00000000", -12148 => x"00000000", -12149 => x"00000000", -12150 => x"00000000", -12151 => x"00000000", -12152 => x"00000000", -12153 => x"00000000", -12154 => x"00000000", -12155 => x"43000000", -12156 => x"00000000", -12157 => x"00000000", -12158 => x"00000000", -12159 => x"00000000", -12160 => x"00000000", -12161 => x"00000001", -12162 => x"0000b8cc", -12163 => x"00000000", -12164 => x"00000000", -12165 => x"00000000", -12166 => x"00000000", -12167 => x"00000000", -12168 => x"00000000", -12169 => x"00000000", -12170 => x"00000000", -12171 => x"00000000", -12172 => x"00000000", -12173 => x"00000000", -12174 => x"00000000", -12175 => x"ffffffff", -12176 => x"00000000", -12177 => x"00020000", -12178 => x"00000000", -12179 => x"00000000", -12180 => x"0000be48", -12181 => x"0000be48", -12182 => x"0000be50", -12183 => x"0000be50", -12184 => x"0000be58", -12185 => x"0000be58", -12186 => x"0000be60", -12187 => x"0000be60", -12188 => x"0000be68", -12189 => x"0000be68", -12190 => x"0000be70", -12191 => x"0000be70", -12192 => x"0000be78", -12193 => x"0000be78", -12194 => x"0000be80", -12195 => x"0000be80", -12196 => x"0000be88", -12197 => x"0000be88", -12198 => x"0000be90", -12199 => x"0000be90", -12200 => x"0000be98", -12201 => x"0000be98", -12202 => x"0000bea0", -12203 => x"0000bea0", -12204 => x"0000bea8", -12205 => x"0000bea8", -12206 => x"0000beb0", -12207 => x"0000beb0", -12208 => x"0000beb8", -12209 => x"0000beb8", -12210 => x"0000bec0", -12211 => x"0000bec0", -12212 => x"0000bec8", -12213 => x"0000bec8", -12214 => x"0000bed0", -12215 => x"0000bed0", -12216 => x"0000bed8", -12217 => x"0000bed8", -12218 => x"0000bee0", -12219 => x"0000bee0", -12220 => x"0000bee8", -12221 => x"0000bee8", -12222 => x"0000bef0", -12223 => x"0000bef0", -12224 => x"0000bef8", -12225 => x"0000bef8", -12226 => x"0000bf00", -12227 => x"0000bf00", -12228 => x"0000bf08", -12229 => x"0000bf08", -12230 => x"0000bf10", -12231 => x"0000bf10", -12232 => x"0000bf18", -12233 => x"0000bf18", -12234 => x"0000bf20", -12235 => x"0000bf20", -12236 => x"0000bf28", -12237 => x"0000bf28", -12238 => x"0000bf30", -12239 => x"0000bf30", -12240 => x"0000bf38", -12241 => x"0000bf38", -12242 => x"0000bf40", -12243 => x"0000bf40", -12244 => x"0000bf48", -12245 => x"0000bf48", -12246 => x"0000bf50", -12247 => x"0000bf50", -12248 => x"0000bf58", -12249 => x"0000bf58", -12250 => x"0000bf60", -12251 => x"0000bf60", -12252 => x"0000bf68", -12253 => x"0000bf68", -12254 => x"0000bf70", -12255 => x"0000bf70", -12256 => x"0000bf78", -12257 => x"0000bf78", -12258 => x"0000bf80", -12259 => x"0000bf80", -12260 => x"0000bf88", -12261 => x"0000bf88", -12262 => x"0000bf90", -12263 => x"0000bf90", -12264 => x"0000bf98", -12265 => x"0000bf98", -12266 => x"0000bfa0", -12267 => x"0000bfa0", -12268 => x"0000bfa8", -12269 => x"0000bfa8", -12270 => x"0000bfb0", -12271 => x"0000bfb0", -12272 => x"0000bfb8", -12273 => x"0000bfb8", -12274 => x"0000bfc0", -12275 => x"0000bfc0", -12276 => x"0000bfc8", -12277 => x"0000bfc8", -12278 => x"0000bfd0", -12279 => x"0000bfd0", -12280 => x"0000bfd8", -12281 => x"0000bfd8", -12282 => x"0000bfe0", -12283 => x"0000bfe0", -12284 => x"0000bfe8", -12285 => x"0000bfe8", -12286 => x"0000bff0", -12287 => x"0000bff0", -12288 => x"0000bff8", -12289 => x"0000bff8", -12290 => x"0000c000", -12291 => x"0000c000", -12292 => x"0000c008", -12293 => x"0000c008", -12294 => x"0000c010", -12295 => x"0000c010", -12296 => x"0000c018", -12297 => x"0000c018", -12298 => x"0000c020", -12299 => x"0000c020", -12300 => x"0000c028", -12301 => x"0000c028", -12302 => x"0000c030", -12303 => x"0000c030", -12304 => x"0000c038", -12305 => x"0000c038", -12306 => x"0000c040", -12307 => x"0000c040", -12308 => x"0000c048", -12309 => x"0000c048", -12310 => x"0000c050", -12311 => x"0000c050", -12312 => x"0000c058", -12313 => x"0000c058", -12314 => x"0000c060", -12315 => x"0000c060", -12316 => x"0000c068", -12317 => x"0000c068", -12318 => x"0000c070", -12319 => x"0000c070", -12320 => x"0000c078", -12321 => x"0000c078", -12322 => x"0000c080", -12323 => x"0000c080", -12324 => x"0000c088", -12325 => x"0000c088", -12326 => x"0000c090", -12327 => x"0000c090", -12328 => x"0000c098", -12329 => x"0000c098", -12330 => x"0000c0a0", -12331 => x"0000c0a0", -12332 => x"0000c0a8", -12333 => x"0000c0a8", -12334 => x"0000c0b0", -12335 => x"0000c0b0", -12336 => x"0000c0b8", -12337 => x"0000c0b8", -12338 => x"0000c0c0", -12339 => x"0000c0c0", -12340 => x"0000c0c8", -12341 => x"0000c0c8", -12342 => x"0000c0d0", -12343 => x"0000c0d0", -12344 => x"0000c0d8", -12345 => x"0000c0d8", -12346 => x"0000c0e0", -12347 => x"0000c0e0", -12348 => x"0000c0e8", -12349 => x"0000c0e8", -12350 => x"0000c0f0", -12351 => x"0000c0f0", -12352 => x"0000c0f8", -12353 => x"0000c0f8", -12354 => x"0000c100", -12355 => x"0000c100", -12356 => x"0000c108", -12357 => x"0000c108", -12358 => x"0000c110", -12359 => x"0000c110", -12360 => x"0000c118", -12361 => x"0000c118", -12362 => x"0000c120", -12363 => x"0000c120", -12364 => x"0000c128", -12365 => x"0000c128", -12366 => x"0000c130", -12367 => x"0000c130", -12368 => x"0000c138", -12369 => x"0000c138", -12370 => x"0000c140", -12371 => x"0000c140", -12372 => x"0000c148", -12373 => x"0000c148", -12374 => x"0000c150", -12375 => x"0000c150", -12376 => x"0000c158", -12377 => x"0000c158", -12378 => x"0000c160", -12379 => x"0000c160", -12380 => x"0000c168", -12381 => x"0000c168", -12382 => x"0000c170", -12383 => x"0000c170", -12384 => x"0000c178", -12385 => x"0000c178", -12386 => x"0000c180", -12387 => x"0000c180", -12388 => x"0000c188", -12389 => x"0000c188", -12390 => x"0000c190", -12391 => x"0000c190", -12392 => x"0000c198", -12393 => x"0000c198", -12394 => x"0000c1a0", -12395 => x"0000c1a0", -12396 => x"0000c1a8", -12397 => x"0000c1a8", -12398 => x"0000c1b0", -12399 => x"0000c1b0", -12400 => x"0000c1b8", -12401 => x"0000c1b8", -12402 => x"0000c1c0", -12403 => x"0000c1c0", -12404 => x"0000c1c8", -12405 => x"0000c1c8", -12406 => x"0000c1d0", -12407 => x"0000c1d0", -12408 => x"0000c1d8", -12409 => x"0000c1d8", -12410 => x"0000c1e0", -12411 => x"0000c1e0", -12412 => x"0000c1e8", -12413 => x"0000c1e8", -12414 => x"0000c1f0", -12415 => x"0000c1f0", -12416 => x"0000c1f8", -12417 => x"0000c1f8", -12418 => x"0000c200", -12419 => x"0000c200", -12420 => x"0000c208", -12421 => x"0000c208", -12422 => x"0000c210", -12423 => x"0000c210", -12424 => x"0000c218", -12425 => x"0000c218", -12426 => x"0000c220", -12427 => x"0000c220", -12428 => x"0000c228", -12429 => x"0000c228", -12430 => x"0000c230", -12431 => x"0000c230", -12432 => x"0000c238", -12433 => x"0000c238", -12434 => x"0000c240", -12435 => x"0000c240", -12436 => x"0000ba2c", -12437 => x"ffffffff", -12438 => x"00000000", -12439 => x"ffffffff", -12440 => x"00000000", +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"fe3d0d0b", +281 => x"0b80dfc0", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c0085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"d408802e", +299 => x"a43880cf", +300 => x"d808822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc00c", +304 => x"82a0800b", +305 => x"80dfc40c", +306 => x"8290800b", +307 => x"80dfc80c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc0", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfc40cf8", +314 => x"80808480", +315 => x"0b80dfc8", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c00c80c0", +320 => x"a880940b", +321 => x"80dfc40c", +322 => x"0b0b80cf", +323 => x"8c0b80df", +324 => x"c80c0470", +325 => x"7080dfcc", +326 => x"335170a7", +327 => x"3880cfe0", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe00c", +332 => x"702d80cf", +333 => x"e0087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfcc3450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"bc08802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfbc510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"fe3d0d89", +349 => x"5380cf90", +350 => x"5182c13f", +351 => x"80cfa051", +352 => x"82ba3f81", +353 => x"0a0b80df", +354 => x"d80cff0b", +355 => x"80dfdc0c", +356 => x"ff135372", +357 => x"8025de38", +358 => x"72800c84", +359 => x"3d0d04fb", +360 => x"3d0d7779", +361 => x"55558056", +362 => x"757524ab", +363 => x"38807424", +364 => x"9d388053", +365 => x"73527451", +366 => x"80e13f80", +367 => x"08547580", +368 => x"2e853880", +369 => x"08305473", +370 => x"800c873d", +371 => x"0d047330", +372 => x"76813257", +373 => x"54dc3974", +374 => x"30558156", +375 => x"738025d2", +376 => x"38ec39fa", +377 => x"3d0d787a", +378 => x"57558057", +379 => x"767524a4", +380 => x"38759f2c", +381 => x"54815375", +382 => x"74327431", +383 => x"5274519b", +384 => x"3f800854", +385 => x"76802e85", +386 => x"38800830", +387 => x"5473800c", +388 => x"883d0d04", +389 => x"74305581", +390 => x"57d739fc", +391 => x"3d0d7678", +392 => x"53548153", +393 => x"80747326", +394 => x"52557280", +395 => x"2e983870", +396 => x"802eab38", +397 => x"807224a6", +398 => x"38711073", +399 => x"10757226", +400 => x"53545272", +401 => x"ea387351", +402 => x"78833874", +403 => x"5170800c", +404 => x"863d0d04", +405 => x"720a100a", +406 => x"720a100a", +407 => x"53537280", +408 => x"2ee43871", +409 => x"7426ed38", +410 => x"73723175", +411 => x"7407740a", +412 => x"100a740a", +413 => x"100a5555", +414 => x"5654e339", +415 => x"f73d0d7c", +416 => x"70525380", +417 => x"f93f7254", +418 => x"80085580", +419 => x"cfb05681", +420 => x"57800881", +421 => x"055a8b3d", +422 => x"e4115953", +423 => x"8259f413", +424 => x"527b8811", +425 => x"08525381", +426 => x"b23f8008", +427 => x"30708008", +428 => x"079f2c8a", +429 => x"07800c53", +430 => x"8b3d0d04", +431 => x"f63d0d7c", +432 => x"80cfe408", +433 => x"71535553", +434 => x"b53f7255", +435 => x"80085680", +436 => x"cfb05781", +437 => x"58800881", +438 => x"055b8c3d", +439 => x"e4115a53", +440 => x"825af413", +441 => x"52881408", +442 => x"5180f03f", +443 => x"80083070", +444 => x"8008079f", +445 => x"2c8a0780", +446 => x"0c548c3d", +447 => x"0d047070", +448 => x"70707570", +449 => x"71830653", +450 => x"555270b4", +451 => x"38717008", +452 => x"7009f7fb", +453 => x"fdff1206", +454 => x"f8848281", +455 => x"80065452", +456 => x"53719b38", +457 => x"84137008", +458 => x"7009f7fb", +459 => x"fdff1206", +460 => x"f8848281", +461 => x"80065452", +462 => x"5371802e", +463 => x"e7387252", +464 => x"71335372", +465 => x"802e8a38", +466 => x"81127033", +467 => x"545272f8", +468 => x"38717431", +469 => x"800c5050", +470 => x"505004f2", +471 => x"3d0d6062", +472 => x"88110870", +473 => x"58565f5a", +474 => x"73802e81", +475 => x"8c388c1a", +476 => x"2270832a", +477 => x"81328106", +478 => x"56587486", +479 => x"38901a08", +480 => x"91387951", +481 => x"90b73fff", +482 => x"55800880", +483 => x"ec388c1a", +484 => x"22587d08", +485 => x"55807883", +486 => x"ffff0670", +487 => x"0a100a81", +488 => x"06415c57", +489 => x"7e772e80", +490 => x"d7387690", +491 => x"38740884", +492 => x"16088817", +493 => x"57585676", +494 => x"802ef238", +495 => x"76548880", +496 => x"77278438", +497 => x"88805473", +498 => x"5375529c", +499 => x"1a0851a4", +500 => x"1a085877", +501 => x"2d800b80", +502 => x"082582e0", +503 => x"38800816", +504 => x"77800831", +505 => x"7f880508", +506 => x"80083170", +507 => x"6188050c", +508 => x"5b585678", +509 => x"ffb43880", +510 => x"5574800c", +511 => x"903d0d04", +512 => x"7a813281", +513 => x"06774056", +514 => x"75802e81", +515 => x"bd387690", +516 => x"38740884", +517 => x"16088817", +518 => x"57585976", +519 => x"802ef238", +520 => x"881a0878", +521 => x"83ffff06", +522 => x"70892a81", +523 => x"06565956", +524 => x"73802e82", +525 => x"f8387577", +526 => x"278b3877", +527 => x"872a8106", +528 => x"5c7b82b5", +529 => x"38767627", +530 => x"83387656", +531 => x"75537852", +532 => x"79085185", +533 => x"833f881a", +534 => x"08763188", +535 => x"1b0c7908", +536 => x"167a0c76", +537 => x"56751977", +538 => x"77317f88", +539 => x"05087831", +540 => x"70618805", +541 => x"0c415859", +542 => x"7e802efe", +543 => x"fa388c1a", +544 => x"2258ff8a", +545 => x"39787954", +546 => x"7c537b52", +547 => x"5684c93f", +548 => x"881a0879", +549 => x"31881b0c", +550 => x"7908197a", +551 => x"0c7c7631", +552 => x"5d7c8e38", +553 => x"79518ff2", +554 => x"3f800881", +555 => x"8f388008", +556 => x"5f751c77", +557 => x"77317f88", +558 => x"05087831", +559 => x"70618805", +560 => x"0c5d585c", +561 => x"7a802efe", +562 => x"ae387681", +563 => x"83387408", +564 => x"84160888", +565 => x"1757585c", +566 => x"76802ef2", +567 => x"3876538a", +568 => x"527b5182", +569 => x"d33f8008", +570 => x"7c318105", +571 => x"5d800884", +572 => x"3881175d", +573 => x"815f7c59", +574 => x"767d2783", +575 => x"38765994", +576 => x"1a08881b", +577 => x"08115758", +578 => x"807a085c", +579 => x"54901a08", +580 => x"7b278338", +581 => x"81547579", +582 => x"25843873", +583 => x"ba387779", +584 => x"24fee238", +585 => x"77537b52", +586 => x"9c1a0851", +587 => x"a41a0859", +588 => x"782d8008", +589 => x"56800880", +590 => x"24fee238", +591 => x"8c1a2280", +592 => x"c0075e7d", +593 => x"8c1b23ff", +594 => x"5574800c", +595 => x"903d0d04", +596 => x"7effa338", +597 => x"ff873975", +598 => x"537b527a", +599 => x"5182f93f", +600 => x"7908167a", +601 => x"0c79518e", +602 => x"b13f8008", +603 => x"cf387c76", +604 => x"315d7cfe", +605 => x"bc38feac", +606 => x"39901a08", +607 => x"7a087131", +608 => x"78117056", +609 => x"5a575280", +610 => x"cfe40851", +611 => x"84943f80", +612 => x"08802eff", +613 => x"a7388008", +614 => x"901b0c80", +615 => x"08167a0c", +616 => x"77941b0c", +617 => x"76881b0c", +618 => x"7656fd99", +619 => x"39790858", +620 => x"901a0878", +621 => x"27833881", +622 => x"54757727", +623 => x"843873b3", +624 => x"38941a08", +625 => x"54737726", +626 => x"80d33873", +627 => x"5378529c", +628 => x"1a0851a4", +629 => x"1a085877", +630 => x"2d800856", +631 => x"80088024", +632 => x"fd83388c", +633 => x"1a2280c0", +634 => x"075e7d8c", +635 => x"1b23ff55", +636 => x"fed73975", +637 => x"53785277", +638 => x"5181dd3f", +639 => x"7908167a", +640 => x"0c79518d", +641 => x"953f8008", +642 => x"802efcd9", +643 => x"388c1a22", +644 => x"80c0075e", +645 => x"7d8c1b23", +646 => x"ff55fead", +647 => x"39767754", +648 => x"79537852", +649 => x"5681b13f", +650 => x"881a0877", +651 => x"31881b0c", +652 => x"7908177a", +653 => x"0cfcae39", +654 => x"fa3d0d7a", +655 => x"79028805", +656 => x"a7053355", +657 => x"53548374", +658 => x"2780df38", +659 => x"71830651", +660 => x"7080d738", +661 => x"71715755", +662 => x"83517582", +663 => x"802913ff", +664 => x"12525670", +665 => x"8025f338", +666 => x"837427bc", +667 => x"38740876", +668 => x"327009f7", +669 => x"fbfdff12", +670 => x"06f88482", +671 => x"81800651", +672 => x"5170802e", +673 => x"98387451", +674 => x"80527033", +675 => x"5772772e", +676 => x"b9388111", +677 => x"81135351", +678 => x"837227ee", +679 => x"38fc1484", +680 => x"16565473", +681 => x"8326c638", +682 => x"7452ff14", +683 => x"5170ff2e", +684 => x"97387133", +685 => x"5472742e", +686 => x"98388112", +687 => x"ff125252", +688 => x"70ff2e09", +689 => x"8106eb38", +690 => x"80517080", +691 => x"0c883d0d", +692 => x"0471800c", +693 => x"883d0d04", +694 => x"fa3d0d78", +695 => x"7a7c7272", +696 => x"72595755", +697 => x"58565774", +698 => x"7727b238", +699 => x"75155176", +700 => x"7127aa38", +701 => x"707618ff", +702 => x"18535353", +703 => x"70ff2e96", +704 => x"38ff12ff", +705 => x"14545272", +706 => x"337234ff", +707 => x"115170ff", +708 => x"2e098106", +709 => x"ec387680", +710 => x"0c883d0d", +711 => x"048f7627", +712 => x"80e63874", +713 => x"77078306", +714 => x"517080dc", +715 => x"38767552", +716 => x"53707084", +717 => x"05520873", +718 => x"70840555", +719 => x"0c727170", +720 => x"84055308", +721 => x"71708405", +722 => x"530c7170", +723 => x"84055308", +724 => x"71708405", +725 => x"530c7170", +726 => x"84055308", +727 => x"71708405", +728 => x"530cf015", +729 => x"5553738f", +730 => x"26c73883", +731 => x"74279538", +732 => x"70708405", +733 => x"52087370", +734 => x"8405550c", +735 => x"fc145473", +736 => x"8326ed38", +737 => x"72715452", +738 => x"ff145170", +739 => x"ff2eff86", +740 => x"38727081", +741 => x"05543372", +742 => x"70810554", +743 => x"34ff1151", +744 => x"ea39ef3d", +745 => x"0d636567", +746 => x"405d427b", +747 => x"802e8582", +748 => x"386151a9", +749 => x"e73ff81c", +750 => x"70841208", +751 => x"70fc0670", +752 => x"628b0570", +753 => x"f8064159", +754 => x"455c5f41", +755 => x"57967427", +756 => x"82c53880", +757 => x"7b247e7c", +758 => x"26075880", +759 => x"5477742e", +760 => x"09810682", +761 => x"ab38787b", +762 => x"2581fe38", +763 => x"781780d7", +764 => x"a00b8805", +765 => x"085b5679", +766 => x"762e84c5", +767 => x"38841608", +768 => x"70fe0617", +769 => x"84110881", +770 => x"06415555", +771 => x"7e828d38", +772 => x"74fc0658", +773 => x"79762e84", +774 => x"e3387818", +775 => x"5f7e7b25", +776 => x"81ff387c", +777 => x"81065473", +778 => x"82c13876", +779 => x"77083184", +780 => x"1108fc06", +781 => x"56577580", +782 => x"2e913879", +783 => x"762e84f0", +784 => x"38741819", +785 => x"58777b25", +786 => x"84913876", +787 => x"802e829b", +788 => x"38781556", +789 => x"7a762482", +790 => x"92388c17", +791 => x"08881808", +792 => x"718c120c", +793 => x"88120c5e", +794 => x"75598817", +795 => x"61fc055b", +796 => x"5679a426", +797 => x"85ff387b", +798 => x"76595593", +799 => x"7a2780c9", +800 => x"387b7084", +801 => x"055d087c", +802 => x"56760c74", +803 => x"70840556", +804 => x"088c180c", +805 => x"9017589b", +806 => x"7a27ae38", +807 => x"74708405", +808 => x"5608780c", +809 => x"74708405", +810 => x"56089418", +811 => x"0c981758", +812 => x"a37a2795", +813 => x"38747084", +814 => x"05560878", +815 => x"0c747084", +816 => x"0556089c", +817 => x"180ca017", +818 => x"58747084", +819 => x"05560875", +820 => x"5f787084", +821 => x"055a0c77", +822 => x"7e708405", +823 => x"40087170", +824 => x"8405530c", +825 => x"7e08710c", +826 => x"5d787b31", +827 => x"56758f26", +828 => x"80c93884", +829 => x"17088106", +830 => x"79078418", +831 => x"0c781784", +832 => x"11088107", +833 => x"84120c5b", +834 => x"6151a791", +835 => x"3f881754", +836 => x"73800c93", +837 => x"3d0d0490", +838 => x"5bfdb839", +839 => x"7756fe83", +840 => x"398c1608", +841 => x"88170871", +842 => x"8c120c88", +843 => x"120c587e", +844 => x"707c3157", +845 => x"598f7627", +846 => x"ffb9387a", +847 => x"17841808", +848 => x"81067c07", +849 => x"84190c76", +850 => x"81078412", +851 => x"0c761184", +852 => x"11088107", +853 => x"84120c5b", +854 => x"88055261", +855 => x"518fda3f", +856 => x"6151a6b9", +857 => x"3f881754", +858 => x"ffa6397d", +859 => x"52615197", +860 => x"d73f8008", +861 => x"5a800880", +862 => x"2e81ab38", +863 => x"8008f805", +864 => x"60840508", +865 => x"fe066105", +866 => x"58557477", +867 => x"2e83f238", +868 => x"fc195877", +869 => x"a42681b0", +870 => x"387b8008", +871 => x"56579378", +872 => x"2780dc38", +873 => x"7b707084", +874 => x"05520880", +875 => x"08708405", +876 => x"800c0c80", +877 => x"08717084", +878 => x"0553085d", +879 => x"567b7670", +880 => x"8405580c", +881 => x"579b7827", +882 => x"b6387670", +883 => x"84055808", +884 => x"75708405", +885 => x"570c7670", +886 => x"84055808", +887 => x"75708405", +888 => x"570ca378", +889 => x"27993876", +890 => x"70840558", +891 => x"08757084", +892 => x"05570c76", +893 => x"70840558", +894 => x"08757084", +895 => x"05570c76", +896 => x"70840558", +897 => x"08775e75", +898 => x"70840557", +899 => x"0c747d70", +900 => x"84055f08", +901 => x"71708405", +902 => x"530c7d08", +903 => x"710c5f7b", +904 => x"5261518e", +905 => x"943f6151", +906 => x"a4f33f79", +907 => x"800c933d", +908 => x"0d047d52", +909 => x"61519690", +910 => x"3f800880", +911 => x"0c933d0d", +912 => x"04841608", +913 => x"55fbc939", +914 => x"77537b52", +915 => x"800851a2", +916 => x"a53f7b52", +917 => x"61518de1", +918 => x"3fcc398c", +919 => x"16088817", +920 => x"08718c12", +921 => x"0c88120c", +922 => x"5d8c1708", +923 => x"88180871", +924 => x"8c120c88", +925 => x"120c5977", +926 => x"59fbef39", +927 => x"7818901c", +928 => x"40557e75", +929 => x"24fb9c38", +930 => x"7a177080", +931 => x"d7a00b88", +932 => x"050c757c", +933 => x"31810784", +934 => x"120c5684", +935 => x"17088106", +936 => x"7b078418", +937 => x"0c6151a3", +938 => x"f43f8817", +939 => x"54fce139", +940 => x"74181990", +941 => x"1c5e5a7c", +942 => x"7a24fb8f", +943 => x"388c1708", +944 => x"88180871", +945 => x"8c120c88", +946 => x"120c5e88", +947 => x"1761fc05", +948 => x"575975a4", +949 => x"2681b638", +950 => x"7b795955", +951 => x"93762780", +952 => x"c9387b70", +953 => x"84055d08", +954 => x"7c56790c", +955 => x"74708405", +956 => x"56088c18", +957 => x"0c901758", +958 => x"9b7627ae", +959 => x"38747084", +960 => x"05560878", +961 => x"0c747084", +962 => x"05560894", +963 => x"180c9817", +964 => x"58a37627", +965 => x"95387470", +966 => x"84055608", +967 => x"780c7470", +968 => x"84055608", +969 => x"9c180ca0", +970 => x"17587470", +971 => x"84055608", +972 => x"75417870", +973 => x"84055a0c", +974 => x"77607084", +975 => x"05420871", +976 => x"70840553", +977 => x"0c600871", +978 => x"0c5e7a17", +979 => x"7080d7a0", +980 => x"0b88050c", +981 => x"7a7c3181", +982 => x"0784120c", +983 => x"58841708", +984 => x"81067b07", +985 => x"84180c61", +986 => x"51a2b23f", +987 => x"78547380", +988 => x"0c933d0d", +989 => x"0479537b", +990 => x"5275519f", +991 => x"f93ffae9", +992 => x"39841508", +993 => x"fc061960", +994 => x"5859fadd", +995 => x"3975537b", +996 => x"5278519f", +997 => x"e13f7a17", +998 => x"7080d7a0", +999 => x"0b88050c", +1000 => x"7a7c3181", +1001 => x"0784120c", +1002 => x"58841708", +1003 => x"81067b07", +1004 => x"84180c61", +1005 => x"51a1e63f", +1006 => x"7854ffb2", +1007 => x"39fa3d0d", +1008 => x"7880cfe4", +1009 => x"085455b8", +1010 => x"1308802e", +1011 => x"81af388c", +1012 => x"15227083", +1013 => x"ffff0670", +1014 => x"832a8132", +1015 => x"81065555", +1016 => x"5672802e", +1017 => x"80da3873", +1018 => x"842a8132", +1019 => x"810657ff", +1020 => x"537680f2", +1021 => x"3873822a", +1022 => x"81065473", +1023 => x"802eb938", +1024 => x"b0150854", +1025 => x"73802e9c", +1026 => x"3880c015", +1027 => x"5373732e", +1028 => x"8f387352", +1029 => x"80cfe408", +1030 => x"518a9e3f", +1031 => x"8c152256", +1032 => x"76b0160c", +1033 => x"75db0657", +1034 => x"768c1623", +1035 => x"800b8416", +1036 => x"0c901508", +1037 => x"750c7656", +1038 => x"75880754", +1039 => x"738c1623", +1040 => x"90150880", +1041 => x"2ebf388c", +1042 => x"15227081", +1043 => x"06555373", +1044 => x"9c38720a", +1045 => x"100a8106", +1046 => x"56758538", +1047 => x"94150854", +1048 => x"7388160c", +1049 => x"80537280", +1050 => x"0c883d0d", +1051 => x"04800b88", +1052 => x"160c9415", +1053 => x"08309816", +1054 => x"0c8053ea", +1055 => x"39725182", +1056 => x"a63ffecb", +1057 => x"3974518f", +1058 => x"bc3f8c15", +1059 => x"22708106", +1060 => x"55537380", +1061 => x"2effbb38", +1062 => x"d439f83d", +1063 => x"0d7a5776", +1064 => x"802e8197", +1065 => x"3880cfe4", +1066 => x"0854b814", +1067 => x"08802e80", +1068 => x"eb388c17", +1069 => x"2270902b", +1070 => x"70902c70", +1071 => x"832a8132", +1072 => x"81065b5b", +1073 => x"57557780", +1074 => x"cb389017", +1075 => x"08567580", +1076 => x"2e80c138", +1077 => x"76087631", +1078 => x"76780c79", +1079 => x"83065555", +1080 => x"73853894", +1081 => x"17085877", +1082 => x"88180c80", +1083 => x"7525a538", +1084 => x"74537552", +1085 => x"9c170851", +1086 => x"a4170854", +1087 => x"732d800b", +1088 => x"80082580", +1089 => x"c9388008", +1090 => x"16758008", +1091 => x"31565674", +1092 => x"8024dd38", +1093 => x"800b800c", +1094 => x"8a3d0d04", +1095 => x"73518187", +1096 => x"3f8c1722", +1097 => x"70902b70", +1098 => x"902c7083", +1099 => x"2a813281", +1100 => x"065b5b57", +1101 => x"5577dd38", +1102 => x"ff9039a1", +1103 => x"9a5280cf", +1104 => x"e408518c", +1105 => x"d03f8008", +1106 => x"800c8a3d", +1107 => x"0d048c17", +1108 => x"2280c007", +1109 => x"58778c18", +1110 => x"23ff0b80", +1111 => x"0c8a3d0d", +1112 => x"04fa3d0d", +1113 => x"797080dc", +1114 => x"298c1154", +1115 => x"7a535657", +1116 => x"8fd63f80", +1117 => x"08800855", +1118 => x"56800880", +1119 => x"2ea23880", +1120 => x"088c0554", +1121 => x"800b8008", +1122 => x"0c768008", +1123 => x"84050c73", +1124 => x"80088805", +1125 => x"0c745380", +1126 => x"5273519c", +1127 => x"f53f7554", +1128 => x"73800c88", +1129 => x"3d0d0470", +1130 => x"707074a8", +1131 => x"e60bbc12", +1132 => x"0c53810b", +1133 => x"b8140c80", +1134 => x"0b84dc14", +1135 => x"0c830b84", +1136 => x"e0140c84", +1137 => x"e81384e4", +1138 => x"140c8413", +1139 => x"08518070", +1140 => x"720c7084", +1141 => x"130c7088", +1142 => x"130c5284", +1143 => x"0b8c1223", +1144 => x"718e1223", +1145 => x"7190120c", +1146 => x"7194120c", +1147 => x"7198120c", +1148 => x"709c120c", +1149 => x"80c1d50b", +1150 => x"a0120c80", +1151 => x"c2a10ba4", +1152 => x"120c80c3", +1153 => x"9d0ba812", +1154 => x"0c80c3ee", +1155 => x"0bac120c", +1156 => x"88130872", +1157 => x"710c7284", +1158 => x"120c7288", +1159 => x"120c5189", +1160 => x"0b8c1223", +1161 => x"810b8e12", +1162 => x"23719012", +1163 => x"0c719412", +1164 => x"0c719812", +1165 => x"0c709c12", +1166 => x"0c80c1d5", +1167 => x"0ba0120c", +1168 => x"80c2a10b", +1169 => x"a4120c80", +1170 => x"c39d0ba8", +1171 => x"120c80c3", +1172 => x"ee0bac12", +1173 => x"0c8c1308", +1174 => x"72710c72", +1175 => x"84120c72", +1176 => x"88120c51", +1177 => x"8a0b8c12", +1178 => x"23820b8e", +1179 => x"12237190", +1180 => x"120c7194", +1181 => x"120c7198", +1182 => x"120c709c", +1183 => x"120c80c1", +1184 => x"d50ba012", +1185 => x"0c80c2a1", +1186 => x"0ba4120c", +1187 => x"80c39d0b", +1188 => x"a8120c80", +1189 => x"c3ee0bac", +1190 => x"120c5050", +1191 => x"5004f83d", +1192 => x"0d7a80cf", +1193 => x"e408b811", +1194 => x"08575758", +1195 => x"7481ec38", +1196 => x"a8e60bbc", +1197 => x"170c810b", +1198 => x"b8170c74", +1199 => x"84dc170c", +1200 => x"830b84e0", +1201 => x"170c84e8", +1202 => x"1684e417", +1203 => x"0c841608", +1204 => x"75710c75", +1205 => x"84120c75", +1206 => x"88120c59", +1207 => x"840b8c1a", +1208 => x"23748e1a", +1209 => x"2374901a", +1210 => x"0c74941a", +1211 => x"0c74981a", +1212 => x"0c789c1a", +1213 => x"0c80c1d5", +1214 => x"0ba01a0c", +1215 => x"80c2a10b", +1216 => x"a41a0c80", +1217 => x"c39d0ba8", +1218 => x"1a0c80c3", +1219 => x"ee0bac1a", +1220 => x"0c881608", +1221 => x"75710c75", +1222 => x"84120c75", +1223 => x"88120c57", +1224 => x"890b8c18", +1225 => x"23810b8e", +1226 => x"18237490", +1227 => x"180c7494", +1228 => x"180c7498", +1229 => x"180c769c", +1230 => x"180c80c1", +1231 => x"d50ba018", +1232 => x"0c80c2a1", +1233 => x"0ba4180c", +1234 => x"80c39d0b", +1235 => x"a8180c80", +1236 => x"c3ee0bac", +1237 => x"180c8c16", +1238 => x"0875710c", +1239 => x"7584120c", +1240 => x"7588120c", +1241 => x"548a0b8c", +1242 => x"1523820b", +1243 => x"8e152374", +1244 => x"90150c74", +1245 => x"94150c74", +1246 => x"98150c73", +1247 => x"9c150c80", +1248 => x"c1d50ba0", +1249 => x"150c80c2", +1250 => x"a10ba415", +1251 => x"0c80c39d", +1252 => x"0ba8150c", +1253 => x"80c3ee0b", +1254 => x"ac150c84", +1255 => x"dc168811", +1256 => x"08841208", +1257 => x"ff055757", +1258 => x"57807524", +1259 => x"9f388c16", +1260 => x"2270902b", +1261 => x"70902c51", +1262 => x"55597380", +1263 => x"2e80ed38", +1264 => x"80dc16ff", +1265 => x"16565674", +1266 => x"8025e338", +1267 => x"76085574", +1268 => x"802e8f38", +1269 => x"74881108", +1270 => x"841208ff", +1271 => x"05575757", +1272 => x"c83982fc", +1273 => x"5277518a", +1274 => x"df3f8008", +1275 => x"80085556", +1276 => x"8008802e", +1277 => x"a3388008", +1278 => x"8c057580", +1279 => x"080c5484", +1280 => x"0b800884", +1281 => x"050c7380", +1282 => x"0888050c", +1283 => x"82f05374", +1284 => x"52735197", +1285 => x"fd3f7554", +1286 => x"7374780c", +1287 => x"5573ffb4", +1288 => x"388c780c", +1289 => x"800b800c", +1290 => x"8a3d0d04", +1291 => x"810b8c17", +1292 => x"2373760c", +1293 => x"7388170c", +1294 => x"7384170c", +1295 => x"7390170c", +1296 => x"7394170c", +1297 => x"7398170c", +1298 => x"ff0b8e17", +1299 => x"2373b017", +1300 => x"0c73b417", +1301 => x"0c7380c4", +1302 => x"170c7380", +1303 => x"c8170c75", +1304 => x"800c8a3d", +1305 => x"0d047070", +1306 => x"a19a5273", +1307 => x"5186a63f", +1308 => x"50500470", +1309 => x"70a19a52", +1310 => x"80cfe408", +1311 => x"5186963f", +1312 => x"505004fb", +1313 => x"3d0d7770", +1314 => x"52569890", +1315 => x"3f80d7a0", +1316 => x"0b880508", +1317 => x"841108fc", +1318 => x"06707b31", +1319 => x"9fef05e0", +1320 => x"8006e080", +1321 => x"05525555", +1322 => x"a0807524", +1323 => x"94388052", +1324 => x"755197ea", +1325 => x"3f80d7a8", +1326 => x"08145372", +1327 => x"80082e8f", +1328 => x"38755197", +1329 => x"d83f8053", +1330 => x"72800c87", +1331 => x"3d0d0474", +1332 => x"30527551", +1333 => x"97c83f80", +1334 => x"08ff2ea8", +1335 => x"3880d7a0", +1336 => x"0b880508", +1337 => x"74763181", +1338 => x"0784120c", +1339 => x"5380d6e4", +1340 => x"08753180", +1341 => x"d6e40c75", +1342 => x"5197a23f", +1343 => x"810b800c", +1344 => x"873d0d04", +1345 => x"80527551", +1346 => x"97943f80", +1347 => x"d7a00b88", +1348 => x"05088008", +1349 => x"71315454", +1350 => x"8f7325ff", +1351 => x"a4388008", +1352 => x"80d79408", +1353 => x"3180d6e4", +1354 => x"0c728107", +1355 => x"84150c75", +1356 => x"5196ea3f", +1357 => x"8053ff90", +1358 => x"39f73d0d", +1359 => x"7b7d545a", +1360 => x"72802e82", +1361 => x"83387951", +1362 => x"96d23ff8", +1363 => x"13841108", +1364 => x"70fe0670", +1365 => x"13841108", +1366 => x"fc065c57", +1367 => x"58545780", +1368 => x"d7a80874", +1369 => x"2e82de38", +1370 => x"7784150c", +1371 => x"80738106", +1372 => x"56597479", +1373 => x"2e81d538", +1374 => x"77148411", +1375 => x"08810656", +1376 => x"5374a038", +1377 => x"77165678", +1378 => x"81e63888", +1379 => x"14085574", +1380 => x"80d7a82e", +1381 => x"82f9388c", +1382 => x"1408708c", +1383 => x"170c7588", +1384 => x"120c5875", +1385 => x"81078418", +1386 => x"0c751776", +1387 => x"710c5478", +1388 => x"81913883", +1389 => x"ff762781", +1390 => x"c8387589", +1391 => x"2a76832a", +1392 => x"54547380", +1393 => x"2ebf3875", +1394 => x"862ab805", +1395 => x"53847427", +1396 => x"b43880db", +1397 => x"14539474", +1398 => x"27ab3875", +1399 => x"8c2a80ee", +1400 => x"055380d4", +1401 => x"74279e38", +1402 => x"758f2a80", +1403 => x"f7055382", +1404 => x"d4742791", +1405 => x"3875922a", +1406 => x"80fc0553", +1407 => x"8ad47427", +1408 => x"843880fe", +1409 => x"53721010", +1410 => x"1080d7a0", +1411 => x"05881108", +1412 => x"55557375", +1413 => x"2e82bf38", +1414 => x"841408fc", +1415 => x"06597579", +1416 => x"278d3888", +1417 => x"14085473", +1418 => x"752e0981", +1419 => x"06ea388c", +1420 => x"1408708c", +1421 => x"190c7488", +1422 => x"190c7788", +1423 => x"120c5576", +1424 => x"8c150c79", +1425 => x"5194d63f", +1426 => x"8b3d0d04", +1427 => x"76087771", +1428 => x"31587605", +1429 => x"88180856", +1430 => x"567480d7", +1431 => x"a82e80e0", +1432 => x"388c1708", +1433 => x"708c170c", +1434 => x"7588120c", +1435 => x"53fe8939", +1436 => x"8814088c", +1437 => x"1508708c", +1438 => x"130c5988", +1439 => x"190cfea3", +1440 => x"3975832a", +1441 => x"70545480", +1442 => x"74248198", +1443 => x"3872822c", +1444 => x"81712b80", +1445 => x"d7a40807", +1446 => x"80d7a00b", +1447 => x"84050c74", +1448 => x"10101080", +1449 => x"d7a00588", +1450 => x"1108718c", +1451 => x"1b0c7088", +1452 => x"1b0c7988", +1453 => x"130c565a", +1454 => x"55768c15", +1455 => x"0cff8439", +1456 => x"8159fdb4", +1457 => x"39771673", +1458 => x"81065455", +1459 => x"72983876", +1460 => x"08777131", +1461 => x"5875058c", +1462 => x"18088819", +1463 => x"08718c12", +1464 => x"0c88120c", +1465 => x"55557481", +1466 => x"0784180c", +1467 => x"7680d7a0", +1468 => x"0b88050c", +1469 => x"80d79c08", +1470 => x"7526fec7", +1471 => x"3880d798", +1472 => x"08527951", +1473 => x"fafd3f79", +1474 => x"5193923f", +1475 => x"feba3981", +1476 => x"778c170c", +1477 => x"7788170c", +1478 => x"758c190c", +1479 => x"7588190c", +1480 => x"59fd8039", +1481 => x"83147082", +1482 => x"2c81712b", +1483 => x"80d7a408", +1484 => x"0780d7a0", +1485 => x"0b84050c", +1486 => x"75101010", +1487 => x"80d7a005", +1488 => x"88110871", +1489 => x"8c1c0c70", +1490 => x"881c0c7a", +1491 => x"88130c57", +1492 => x"5b5653fe", +1493 => x"e4398073", +1494 => x"24a33872", +1495 => x"822c8171", +1496 => x"2b80d7a4", +1497 => x"080780d7", +1498 => x"a00b8405", +1499 => x"0c58748c", +1500 => x"180c7388", +1501 => x"180c7688", +1502 => x"160cfdc3", +1503 => x"39831370", +1504 => x"822c8171", +1505 => x"2b80d7a4", +1506 => x"080780d7", +1507 => x"a00b8405", +1508 => x"0c5953da", +1509 => x"39f93d0d", +1510 => x"797b5853", +1511 => x"800b80cf", +1512 => x"e4085356", +1513 => x"72722ebc", +1514 => x"3884dc13", +1515 => x"5574762e", +1516 => x"b3388815", +1517 => x"08841608", +1518 => x"ff055454", +1519 => x"80732499", +1520 => x"388c1422", +1521 => x"70902b53", +1522 => x"587180d4", +1523 => x"3880dc14", +1524 => x"ff145454", +1525 => x"728025e9", +1526 => x"38740855", +1527 => x"74d43880", +1528 => x"cfe40852", +1529 => x"84dc1255", +1530 => x"74802ead", +1531 => x"38881508", +1532 => x"841608ff", +1533 => x"05545480", +1534 => x"73249838", +1535 => x"8c142270", +1536 => x"902b5358", +1537 => x"71ad3880", +1538 => x"dc14ff14", +1539 => x"54547280", +1540 => x"25ea3874", +1541 => x"085574d5", +1542 => x"3875800c", +1543 => x"893d0d04", +1544 => x"7351762d", +1545 => x"75800807", +1546 => x"80dc15ff", +1547 => x"15555556", +1548 => x"ffa23973", +1549 => x"51762d75", +1550 => x"80080780", +1551 => x"dc15ff15", +1552 => x"555556ca", +1553 => x"39ea3d0d", +1554 => x"688c1122", +1555 => x"700a100a", +1556 => x"81065758", +1557 => x"567480e4", +1558 => x"388e1622", +1559 => x"70902b70", +1560 => x"902c5155", +1561 => x"58807424", +1562 => x"b138983d", +1563 => x"c4055373", +1564 => x"5280cfe4", +1565 => x"08519481", +1566 => x"3f800b80", +1567 => x"08249738", +1568 => x"7983e080", +1569 => x"06547380", +1570 => x"c0802e81", +1571 => x"8f387382", +1572 => x"80802e81", +1573 => x"91388c16", +1574 => x"22577690", +1575 => x"80075473", +1576 => x"8c172388", +1577 => x"805280cf", +1578 => x"e4085181", +1579 => x"9b3f8008", +1580 => x"9d388c16", +1581 => x"22820755", +1582 => x"748c1723", +1583 => x"80c31670", +1584 => x"770c9017", +1585 => x"0c810b94", +1586 => x"170c983d", +1587 => x"0d0480cf", +1588 => x"e408a8e6", +1589 => x"0bbc120c", +1590 => x"588c1622", +1591 => x"81800754", +1592 => x"738c1723", +1593 => x"8008760c", +1594 => x"80089017", +1595 => x"0c88800b", +1596 => x"94170c74", +1597 => x"802ed338", +1598 => x"8e162270", +1599 => x"902b7090", +1600 => x"2c535654", +1601 => x"9afe3f80", +1602 => x"08802eff", +1603 => x"bd388c16", +1604 => x"22810757", +1605 => x"768c1723", +1606 => x"983d0d04", +1607 => x"810b8c17", +1608 => x"225855fe", +1609 => x"f539a816", +1610 => x"0880c39d", +1611 => x"2e098106", +1612 => x"fee4388c", +1613 => x"16228880", +1614 => x"0754738c", +1615 => x"17238880", +1616 => x"0b80cc17", +1617 => x"0cfedc39", +1618 => x"f43d0d7e", +1619 => x"608b1170", +1620 => x"f8065b55", +1621 => x"555d7296", +1622 => x"26833890", +1623 => x"58807824", +1624 => x"74792607", +1625 => x"55805474", +1626 => x"742e0981", +1627 => x"0680ca38", +1628 => x"7c518ea8", +1629 => x"3f7783f7", +1630 => x"2680c538", +1631 => x"77832a70", +1632 => x"10101080", +1633 => x"d7a0058c", +1634 => x"11085858", +1635 => x"5475772e", +1636 => x"81f03884", +1637 => x"1608fc06", +1638 => x"8c170888", +1639 => x"1808718c", +1640 => x"120c8812", +1641 => x"0c5b7605", +1642 => x"84110881", +1643 => x"0784120c", +1644 => x"537c518d", +1645 => x"e83f8816", +1646 => x"5473800c", +1647 => x"8e3d0d04", +1648 => x"77892a78", +1649 => x"832a5854", +1650 => x"73802ebf", +1651 => x"3877862a", +1652 => x"b8055784", +1653 => x"7427b438", +1654 => x"80db1457", +1655 => x"947427ab", +1656 => x"38778c2a", +1657 => x"80ee0557", +1658 => x"80d47427", +1659 => x"9e38778f", +1660 => x"2a80f705", +1661 => x"5782d474", +1662 => x"27913877", +1663 => x"922a80fc", +1664 => x"05578ad4", +1665 => x"74278438", +1666 => x"80fe5776", +1667 => x"10101080", +1668 => x"d7a0058c", +1669 => x"11085653", +1670 => x"74732ea3", +1671 => x"38841508", +1672 => x"fc067079", +1673 => x"31555673", +1674 => x"8f2488e4", +1675 => x"38738025", +1676 => x"88e6388c", +1677 => x"15085574", +1678 => x"732e0981", +1679 => x"06df3881", +1680 => x"175980d7", +1681 => x"b0085675", +1682 => x"80d7a82e", +1683 => x"82cc3884", +1684 => x"1608fc06", +1685 => x"70793155", +1686 => x"55738f24", +1687 => x"bb3880d7", +1688 => x"a80b80d7", +1689 => x"b40c80d7", +1690 => x"a80b80d7", +1691 => x"b00c8074", +1692 => x"2480db38", +1693 => x"74168411", +1694 => x"08810784", +1695 => x"120c53fe", +1696 => x"b0398816", +1697 => x"8c110857", +1698 => x"5975792e", +1699 => x"098106fe", +1700 => x"82388214", +1701 => x"59ffab39", +1702 => x"77167881", +1703 => x"0784180c", +1704 => x"7080d7b4", +1705 => x"0c7080d7", +1706 => x"b00c80d7", +1707 => x"a80b8c12", +1708 => x"0c8c1108", +1709 => x"88120c74", +1710 => x"81078412", +1711 => x"0c740574", +1712 => x"710c5b7c", +1713 => x"518bd63f", +1714 => x"881654fd", +1715 => x"ec3983ff", +1716 => x"75278391", +1717 => x"3874892a", +1718 => x"75832a54", +1719 => x"5473802e", +1720 => x"bf387486", +1721 => x"2ab80553", +1722 => x"847427b4", +1723 => x"3880db14", +1724 => x"53947427", +1725 => x"ab38748c", +1726 => x"2a80ee05", +1727 => x"5380d474", +1728 => x"279e3874", +1729 => x"8f2a80f7", +1730 => x"055382d4", +1731 => x"74279138", +1732 => x"74922a80", +1733 => x"fc05538a", +1734 => x"d4742784", +1735 => x"3880fe53", +1736 => x"72101010", +1737 => x"80d7a005", +1738 => x"88110855", +1739 => x"5773772e", +1740 => x"868b3884", +1741 => x"1408fc06", +1742 => x"5b747b27", +1743 => x"8d388814", +1744 => x"08547377", +1745 => x"2e098106", +1746 => x"ea388c14", +1747 => x"0880d7a0", +1748 => x"0b840508", +1749 => x"718c190c", +1750 => x"7588190c", +1751 => x"7788130c", +1752 => x"5c57758c", +1753 => x"150c7853", +1754 => x"80792483", +1755 => x"98387282", +1756 => x"2c81712b", +1757 => x"5656747b", +1758 => x"2680ca38", +1759 => x"7a750657", +1760 => x"7682a338", +1761 => x"78fc0684", +1762 => x"05597410", +1763 => x"707c0655", +1764 => x"55738292", +1765 => x"38841959", +1766 => x"f13980d7", +1767 => x"a00b8405", +1768 => x"0879545b", +1769 => x"788025c6", +1770 => x"3882da39", +1771 => x"74097b06", +1772 => x"7080d7a0", +1773 => x"0b84050c", +1774 => x"5b741055", +1775 => x"747b2685", +1776 => x"387485bc", +1777 => x"3880d7a0", +1778 => x"0b880508", +1779 => x"70841208", +1780 => x"fc06707b", +1781 => x"317b7226", +1782 => x"8f722507", +1783 => x"5d575c5c", +1784 => x"5578802e", +1785 => x"80d93879", +1786 => x"1580d798", +1787 => x"08199011", +1788 => x"59545680", +1789 => x"d79408ff", +1790 => x"2e8838a0", +1791 => x"8f13e080", +1792 => x"06577652", +1793 => x"7c518996", +1794 => x"3f800854", +1795 => x"8008ff2e", +1796 => x"90388008", +1797 => x"762782a7", +1798 => x"387480d7", +1799 => x"a02e829f", +1800 => x"3880d7a0", +1801 => x"0b880508", +1802 => x"55841508", +1803 => x"fc067079", +1804 => x"31797226", +1805 => x"8f722507", +1806 => x"5d555a7a", +1807 => x"83f23877", +1808 => x"81078416", +1809 => x"0c771570", +1810 => x"80d7a00b", +1811 => x"88050c74", +1812 => x"81078412", +1813 => x"0c567c51", +1814 => x"88c33f88", +1815 => x"15547380", +1816 => x"0c8e3d0d", +1817 => x"0474832a", +1818 => x"70545480", +1819 => x"7424819b", +1820 => x"3872822c", +1821 => x"81712b80", +1822 => x"d7a40807", +1823 => x"7080d7a0", +1824 => x"0b84050c", +1825 => x"75101010", +1826 => x"80d7a005", +1827 => x"88110871", +1828 => x"8c1b0c70", +1829 => x"881b0c79", +1830 => x"88130c57", +1831 => x"555c5575", +1832 => x"8c150cfd", +1833 => x"c1397879", +1834 => x"10101080", +1835 => x"d7a00570", +1836 => x"565b5c8c", +1837 => x"14085675", +1838 => x"742ea338", +1839 => x"841608fc", +1840 => x"06707931", +1841 => x"5853768f", +1842 => x"2483f138", +1843 => x"76802584", +1844 => x"af388c16", +1845 => x"08567574", +1846 => x"2e098106", +1847 => x"df388814", +1848 => x"811a7083", +1849 => x"06555a54", +1850 => x"72c9387b", +1851 => x"83065675", +1852 => x"802efdb8", +1853 => x"38ff1cf8", +1854 => x"1b5b5c88", +1855 => x"1a087a2e", +1856 => x"ea38fdb5", +1857 => x"39831953", +1858 => x"fce43983", +1859 => x"1470822c", +1860 => x"81712b80", +1861 => x"d7a40807", +1862 => x"7080d7a0", +1863 => x"0b84050c", +1864 => x"76101010", +1865 => x"80d7a005", +1866 => x"88110871", +1867 => x"8c1c0c70", +1868 => x"881c0c7a", +1869 => x"88130c58", +1870 => x"535d5653", +1871 => x"fee13980", +1872 => x"d6e40817", +1873 => x"59800876", +1874 => x"2e818b38", +1875 => x"80d79408", +1876 => x"ff2e848e", +1877 => x"38737631", +1878 => x"1980d6e4", +1879 => x"0c738706", +1880 => x"70565372", +1881 => x"802e8838", +1882 => x"88733170", +1883 => x"15555576", +1884 => x"149fff06", +1885 => x"a0807131", +1886 => x"1670547e", +1887 => x"53515386", +1888 => x"9d3f8008", +1889 => x"568008ff", +1890 => x"2e819e38", +1891 => x"80d6e408", +1892 => x"137080d6", +1893 => x"e40c7475", +1894 => x"80d7a00b", +1895 => x"88050c77", +1896 => x"76311581", +1897 => x"07555659", +1898 => x"7a80d7a0", +1899 => x"2e83c038", +1900 => x"798f2682", +1901 => x"ef38810b", +1902 => x"84150c84", +1903 => x"1508fc06", +1904 => x"70793179", +1905 => x"72268f72", +1906 => x"25075d55", +1907 => x"5a7a802e", +1908 => x"fced3880", +1909 => x"db398008", +1910 => x"9fff0655", +1911 => x"74feed38", +1912 => x"7880d6e4", +1913 => x"0c80d7a0", +1914 => x"0b880508", +1915 => x"7a188107", +1916 => x"84120c55", +1917 => x"80d79008", +1918 => x"79278638", +1919 => x"7880d790", +1920 => x"0c80d78c", +1921 => x"087927fc", +1922 => x"a0387880", +1923 => x"d78c0c84", +1924 => x"1508fc06", +1925 => x"70793179", +1926 => x"72268f72", +1927 => x"25075d55", +1928 => x"5a7a802e", +1929 => x"fc993888", +1930 => x"39807457", +1931 => x"53fedd39", +1932 => x"7c5184e9", +1933 => x"3f800b80", +1934 => x"0c8e3d0d", +1935 => x"04807324", +1936 => x"a5387282", +1937 => x"2c81712b", +1938 => x"80d7a408", +1939 => x"077080d7", +1940 => x"a00b8405", +1941 => x"0c5c5a76", +1942 => x"8c170c73", +1943 => x"88170c75", +1944 => x"88180cf9", +1945 => x"fd398313", +1946 => x"70822c81", +1947 => x"712b80d7", +1948 => x"a4080770", +1949 => x"80d7a00b", +1950 => x"84050c5d", +1951 => x"5b53d839", +1952 => x"7a75065c", +1953 => x"7bfc9f38", +1954 => x"84197510", +1955 => x"5659f139", +1956 => x"ff178105", +1957 => x"59f7ab39", +1958 => x"8c150888", +1959 => x"1608718c", +1960 => x"120c8812", +1961 => x"0c597515", +1962 => x"84110881", +1963 => x"0784120c", +1964 => x"587c5183", +1965 => x"e83f8815", +1966 => x"54fba339", +1967 => x"77167881", +1968 => x"0784180c", +1969 => x"8c170888", +1970 => x"1808718c", +1971 => x"120c8812", +1972 => x"0c5c7080", +1973 => x"d7b40c70", +1974 => x"80d7b00c", +1975 => x"80d7a80b", +1976 => x"8c120c8c", +1977 => x"11088812", +1978 => x"0c778107", +1979 => x"84120c77", +1980 => x"0577710c", +1981 => x"557c5183", +1982 => x"a43f8816", +1983 => x"54f5ba39", +1984 => x"72168411", +1985 => x"08810784", +1986 => x"120c588c", +1987 => x"16088817", +1988 => x"08718c12", +1989 => x"0c88120c", +1990 => x"577c5183", +1991 => x"803f8816", +1992 => x"54f59639", +1993 => x"7284150c", +1994 => x"f41af806", +1995 => x"70841d08", +1996 => x"81060784", +1997 => x"1d0c701c", +1998 => x"5556850b", +1999 => x"84150c85", +2000 => x"0b88150c", +2001 => x"8f7627fd", +2002 => x"ab38881b", +2003 => x"527c51eb", +2004 => x"e83f80d7", +2005 => x"a00b8805", +2006 => x"0880d6e4", +2007 => x"085a55fd", +2008 => x"93397880", +2009 => x"d6e40c73", +2010 => x"80d7940c", +2011 => x"fbef3972", +2012 => x"84150cfc", +2013 => x"ff39fb3d", +2014 => x"0d77707a", +2015 => x"7c585553", +2016 => x"568f7527", +2017 => x"80e63872", +2018 => x"76078306", +2019 => x"517080dc", +2020 => x"38757352", +2021 => x"54707084", +2022 => x"05520874", +2023 => x"70840556", +2024 => x"0c737170", +2025 => x"84055308", +2026 => x"71708405", +2027 => x"530c7170", +2028 => x"84055308", +2029 => x"71708405", +2030 => x"530c7170", +2031 => x"84055308", +2032 => x"71708405", +2033 => x"530cf016", +2034 => x"5654748f", +2035 => x"26c73883", +2036 => x"75279538", +2037 => x"70708405", +2038 => x"52087470", +2039 => x"8405560c", +2040 => x"fc155574", +2041 => x"8326ed38", +2042 => x"73715452", +2043 => x"ff155170", +2044 => x"ff2e9838", +2045 => x"72708105", +2046 => x"54337270", +2047 => x"81055434", +2048 => x"ff115170", +2049 => x"ff2e0981", +2050 => x"06ea3875", +2051 => x"800c873d", +2052 => x"0d04fb3d", +2053 => x"0d777a71", +2054 => x"028c05a3", +2055 => x"05335854", +2056 => x"54568373", +2057 => x"2780d438", +2058 => x"75830651", +2059 => x"7080cc38", +2060 => x"74882b75", +2061 => x"07707190", +2062 => x"2b075551", +2063 => x"8f7327a7", +2064 => x"38737270", +2065 => x"8405540c", +2066 => x"71747170", +2067 => x"8405530c", +2068 => x"74717084", +2069 => x"05530c74", +2070 => x"71708405", +2071 => x"530cf014", +2072 => x"5452728f", +2073 => x"26db3883", +2074 => x"73279038", +2075 => x"73727084", +2076 => x"05540cfc", +2077 => x"13537283", +2078 => x"26f238ff", +2079 => x"135170ff", +2080 => x"2e933874", +2081 => x"72708105", +2082 => x"5434ff11", +2083 => x"5170ff2e", +2084 => x"098106ef", +2085 => x"3875800c", +2086 => x"873d0d04", +2087 => x"04047070", +2088 => x"7070800b", +2089 => x"80dfe00c", +2090 => x"765184f3", +2091 => x"3f800853", +2092 => x"8008ff2e", +2093 => x"89387280", +2094 => x"0c505050", +2095 => x"500480df", +2096 => x"e0085473", +2097 => x"802eef38", +2098 => x"7574710c", +2099 => x"5272800c", +2100 => x"50505050", +2101 => x"04f93d0d", +2102 => x"797c557b", +2103 => x"548e1122", +2104 => x"70902b70", +2105 => x"902c5557", +2106 => x"80cfe408", +2107 => x"53585683", +2108 => x"f63f8008", +2109 => x"57800b80", +2110 => x"08249338", +2111 => x"80d01608", +2112 => x"80080580", +2113 => x"d0170c76", +2114 => x"800c893d", +2115 => x"0d048c16", +2116 => x"2283dfff", +2117 => x"0655748c", +2118 => x"17237680", +2119 => x"0c893d0d", +2120 => x"04fa3d0d", +2121 => x"788c1122", +2122 => x"70882a70", +2123 => x"81065157", +2124 => x"585674a9", +2125 => x"388c1622", +2126 => x"83dfff06", +2127 => x"55748c17", +2128 => x"237a5479", +2129 => x"538e1622", +2130 => x"70902b70", +2131 => x"902c5456", +2132 => x"80cfe408", +2133 => x"525681b2", +2134 => x"3f883d0d", +2135 => x"04825480", +2136 => x"538e1622", +2137 => x"70902b70", +2138 => x"902c5456", +2139 => x"80cfe408", +2140 => x"525782bb", +2141 => x"3f8c1622", +2142 => x"83dfff06", +2143 => x"55748c17", +2144 => x"237a5479", +2145 => x"538e1622", +2146 => x"70902b70", +2147 => x"902c5456", +2148 => x"80cfe408", +2149 => x"525680f2", +2150 => x"3f883d0d", +2151 => x"04f93d0d", +2152 => x"797c557b", +2153 => x"548e1122", +2154 => x"70902b70", +2155 => x"902c5557", +2156 => x"80cfe408", +2157 => x"53585681", +2158 => x"f63f8008", +2159 => x"578008ff", +2160 => x"2e99388c", +2161 => x"1622a080", +2162 => x"0755748c", +2163 => x"17238008", +2164 => x"80d0170c", +2165 => x"76800c89", +2166 => x"3d0d048c", +2167 => x"162283df", +2168 => x"ff065574", +2169 => x"8c172376", +2170 => x"800c893d", +2171 => x"0d047070", +2172 => x"70748e11", +2173 => x"2270902b", +2174 => x"70902c55", +2175 => x"51515380", +2176 => x"cfe40851", +2177 => x"bd3f5050", +2178 => x"5004fb3d", +2179 => x"0d800b80", +2180 => x"dfe00c7a", +2181 => x"53795278", +2182 => x"5182ff3f", +2183 => x"80085580", +2184 => x"08ff2e88", +2185 => x"3874800c", +2186 => x"873d0d04", +2187 => x"80dfe008", +2188 => x"5675802e", +2189 => x"f0387776", +2190 => x"710c5474", +2191 => x"800c873d", +2192 => x"0d047070", +2193 => x"7070800b", +2194 => x"80dfe00c", +2195 => x"765184cc", +2196 => x"3f800853", +2197 => x"8008ff2e", +2198 => x"89387280", +2199 => x"0c505050", +2200 => x"500480df", +2201 => x"e0085473", +2202 => x"802eef38", +2203 => x"7574710c", +2204 => x"5272800c", +2205 => x"50505050", +2206 => x"04fc3d0d", +2207 => x"800b80df", +2208 => x"e00c7852", +2209 => x"775187b3", +2210 => x"3f800854", +2211 => x"8008ff2e", +2212 => x"88387380", +2213 => x"0c863d0d", +2214 => x"0480dfe0", +2215 => x"08557480", +2216 => x"2ef03876", +2217 => x"75710c53", +2218 => x"73800c86", +2219 => x"3d0d04fb", +2220 => x"3d0d800b", +2221 => x"80dfe00c", +2222 => x"7a537952", +2223 => x"7851848e", +2224 => x"3f800855", +2225 => x"8008ff2e", +2226 => x"88387480", +2227 => x"0c873d0d", +2228 => x"0480dfe0", +2229 => x"08567580", +2230 => x"2ef03877", +2231 => x"76710c54", +2232 => x"74800c87", +2233 => x"3d0d04fb", +2234 => x"3d0d800b", +2235 => x"80dfe00c", +2236 => x"7a537952", +2237 => x"78518296", +2238 => x"3f800855", +2239 => x"8008ff2e", +2240 => x"88387480", +2241 => x"0c873d0d", +2242 => x"0480dfe0", +2243 => x"08567580", +2244 => x"2ef03877", +2245 => x"76710c54", +2246 => x"74800c87", +2247 => x"3d0d0470", +2248 => x"707080df", +2249 => x"d0088938", +2250 => x"80dfe40b", +2251 => x"80dfd00c", +2252 => x"80dfd008", +2253 => x"75115252", +2254 => x"ff537087", +2255 => x"fb808026", +2256 => x"88387080", +2257 => x"dfd00c71", +2258 => x"5372800c", +2259 => x"50505004", +2260 => x"fd3d0d80", +2261 => x"0b80cfd8", +2262 => x"08545472", +2263 => x"812e9b38", +2264 => x"7380dfd4", +2265 => x"0cc2bf3f", +2266 => x"c1963f80", +2267 => x"dfa85281", +2268 => x"51c3fd3f", +2269 => x"80085186", +2270 => x"c23f7280", +2271 => x"dfd40cc2", +2272 => x"a53fc0fc", +2273 => x"3f80dfa8", +2274 => x"528151c3", +2275 => x"e33f8008", +2276 => x"5186a83f", +2277 => x"00ff3900", +2278 => x"ff39f53d", +2279 => x"0d7e6080", +2280 => x"dfd40870", +2281 => x"5b585b5b", +2282 => x"7580c238", +2283 => x"777a25a1", +2284 => x"38771b70", +2285 => x"337081ff", +2286 => x"06585859", +2287 => x"758a2e98", +2288 => x"387681ff", +2289 => x"0651c1bd", +2290 => x"3f811858", +2291 => x"797824e1", +2292 => x"3879800c", +2293 => x"8d3d0d04", +2294 => x"8d51c1a9", +2295 => x"3f783370", +2296 => x"81ff0652", +2297 => x"57c19e3f", +2298 => x"811858e0", +2299 => x"3979557a", +2300 => x"547d5385", +2301 => x"528d3dfc", +2302 => x"0551c0c6", +2303 => x"3f800856", +2304 => x"85b23f7b", +2305 => x"80080c75", +2306 => x"800c8d3d", +2307 => x"0d04f63d", +2308 => x"0d7d7f80", +2309 => x"dfd40870", +2310 => x"5b585a5a", +2311 => x"7580c138", +2312 => x"777925b3", +2313 => x"38c0b93f", +2314 => x"800881ff", +2315 => x"06708d32", +2316 => x"7030709f", +2317 => x"2a515157", +2318 => x"57768a2e", +2319 => x"80c43875", +2320 => x"802ebf38", +2321 => x"771a5676", +2322 => x"76347651", +2323 => x"c0b73f81", +2324 => x"18587878", +2325 => x"24cf3877", +2326 => x"5675800c", +2327 => x"8c3d0d04", +2328 => x"78557954", +2329 => x"7c538452", +2330 => x"8c3dfc05", +2331 => x"51ffbfd2", +2332 => x"3f800856", +2333 => x"84be3f7a", +2334 => x"80080c75", +2335 => x"800c8c3d", +2336 => x"0d04771a", +2337 => x"598a7934", +2338 => x"8118588d", +2339 => x"51ffbff5", +2340 => x"3f8a51ff", +2341 => x"bfef3f77", +2342 => x"56ffbe39", +2343 => x"fb3d0d80", +2344 => x"dfd40870", +2345 => x"56547388", +2346 => x"3874800c", +2347 => x"873d0d04", +2348 => x"77538352", +2349 => x"873dfc05", +2350 => x"51ffbf86", +2351 => x"3f800854", +2352 => x"83f23f75", +2353 => x"80080c73", +2354 => x"800c873d", +2355 => x"0d04fa3d", +2356 => x"0d80dfd4", +2357 => x"08802ea3", +2358 => x"387a5579", +2359 => x"54785386", +2360 => x"52883dfc", +2361 => x"0551ffbe", +2362 => x"d93f8008", +2363 => x"5683c53f", +2364 => x"7680080c", +2365 => x"75800c88", +2366 => x"3d0d0483", +2367 => x"b73f9d0b", +2368 => x"80080cff", +2369 => x"0b800c88", +2370 => x"3d0d04f7", +2371 => x"3d0d7b7d", +2372 => x"5b59bc53", +2373 => x"80527951", +2374 => x"f5f83f80", +2375 => x"70565798", +2376 => x"56741970", +2377 => x"3370782b", +2378 => x"79078118", +2379 => x"f81a5a58", +2380 => x"59555884", +2381 => x"7524ea38", +2382 => x"767a2384", +2383 => x"19588070", +2384 => x"56579856", +2385 => x"74187033", +2386 => x"70782b79", +2387 => x"078118f8", +2388 => x"1a5a5859", +2389 => x"51548475", +2390 => x"24ea3876", +2391 => x"821b2388", +2392 => x"19588070", +2393 => x"56579856", +2394 => x"74187033", +2395 => x"70782b79", +2396 => x"078118f8", +2397 => x"1a5a5859", +2398 => x"51548475", +2399 => x"24ea3876", +2400 => x"841b0c8c", +2401 => x"19588070", +2402 => x"56579856", +2403 => x"74187033", +2404 => x"70782b79", +2405 => x"078118f8", +2406 => x"1a5a5859", +2407 => x"51548475", +2408 => x"24ea3876", +2409 => x"881b2390", +2410 => x"19588070", +2411 => x"56579856", +2412 => x"74187033", +2413 => x"70782b79", +2414 => x"078118f8", +2415 => x"1a5a5859", +2416 => x"51548475", +2417 => x"24ea3876", +2418 => x"8a1b2394", +2419 => x"19588070", +2420 => x"56579856", +2421 => x"74187033", +2422 => x"70782b79", +2423 => x"078118f8", +2424 => x"1a5a5859", +2425 => x"51548475", +2426 => x"24ea3876", +2427 => x"8c1b2398", +2428 => x"19588070", +2429 => x"56579856", +2430 => x"74187033", +2431 => x"70782b79", +2432 => x"078118f8", +2433 => x"1a5a5859", +2434 => x"51548475", +2435 => x"24ea3876", +2436 => x"8e1b239c", +2437 => x"19588070", +2438 => x"5657b856", +2439 => x"74187033", +2440 => x"70782b79", +2441 => x"078118f8", +2442 => x"1a5a5859", +2443 => x"5a548875", +2444 => x"24ea3876", +2445 => x"901b0c8b", +2446 => x"3d0d04e9", +2447 => x"3d0d6a80", +2448 => x"dfd40857", +2449 => x"57759338", +2450 => x"80c0800b", +2451 => x"84180c75", +2452 => x"ac180c75", +2453 => x"800c993d", +2454 => x"0d04893d", +2455 => x"70556a54", +2456 => x"558a5299", +2457 => x"3dffbc05", +2458 => x"51ffbbd6", +2459 => x"3f800877", +2460 => x"53755256", +2461 => x"fd953fbc", +2462 => x"3f778008", +2463 => x"0c75800c", +2464 => x"993d0d04", +2465 => x"fc3d0d81", +2466 => x"5480dfd4", +2467 => x"08883873", +2468 => x"800c863d", +2469 => x"0d047653", +2470 => x"97b95286", +2471 => x"3dfc0551", +2472 => x"ffbb9f3f", +2473 => x"8008548c", +2474 => x"3f748008", +2475 => x"0c73800c", +2476 => x"863d0d04", +2477 => x"80cfe408", +2478 => x"800c04f7", +2479 => x"3d0d7b80", +2480 => x"cfe40882", +2481 => x"c811085a", +2482 => x"545a7780", +2483 => x"2e80da38", +2484 => x"81881884", +2485 => x"1908ff05", +2486 => x"81712b59", +2487 => x"55598074", +2488 => x"2480ea38", +2489 => x"807424b5", +2490 => x"3873822b", +2491 => x"78118805", +2492 => x"56568180", +2493 => x"19087706", +2494 => x"5372802e", +2495 => x"b6387816", +2496 => x"70085353", +2497 => x"79517408", +2498 => x"53722dff", +2499 => x"14fc17fc", +2500 => x"1779812c", +2501 => x"5a575754", +2502 => x"738025d6", +2503 => x"38770858", +2504 => x"77ffad38", +2505 => x"80cfe408", +2506 => x"53bc1308", +2507 => x"a5387951", +2508 => x"f8e23f74", +2509 => x"0853722d", +2510 => x"ff14fc17", +2511 => x"fc177981", +2512 => x"2c5a5757", +2513 => x"54738025", +2514 => x"ffa838d1", +2515 => x"398057ff", +2516 => x"93397251", +2517 => x"bc130854", +2518 => x"732d7951", +2519 => x"f8b63f70", +2520 => x"7080dfb0", +2521 => x"0bfc0570", +2522 => x"08525270", +2523 => x"ff2e9138", +2524 => x"702dfc12", +2525 => x"70085252", +2526 => x"70ff2e09", +2527 => x"8106f138", +2528 => x"50500404", +2529 => x"ffbb8c3f", +2530 => x"04000000", +2531 => x"00000040", +2532 => x"48656c6c", +2533 => x"6f20776f", +2534 => x"726c6420", +2535 => x"310a0000", +2536 => x"48656c6c", +2537 => x"6f20776f", +2538 => x"726c6420", +2539 => x"320a0000", +2540 => x"0a000000", +2541 => x"43000000", +2542 => x"64756d6d", +2543 => x"792e6578", +2544 => x"65000000", +2545 => x"00ffffff", +2546 => x"ff00ffff", +2547 => x"ffff00ff", +2548 => x"ffffff00", +2549 => x"00000000", +2550 => x"00000000", +2551 => x"00000000", +2552 => x"00002fb8", +2553 => x"000027e8", +2554 => x"00000000", +2555 => x"00002a50", +2556 => x"00002aac", +2557 => x"00002b08", +2558 => x"00000000", +2559 => x"00000000", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"000027b4", +2568 => x"00000000", +2569 => x"00000000", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000001", +2597 => x"330eabcd", +2598 => x"1234e66d", +2599 => x"deec0005", +2600 => x"000b0000", +2601 => x"00000000", +2602 => x"00000000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00000000", +2663 => x"00000000", +2664 => x"00000000", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", +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"00000000", +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"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", +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"ffffffff", +2790 => x"00000000", +2791 => x"00020000", +2792 => x"00000000", +2793 => x"00000000", +2794 => x"00002ba0", +2795 => x"00002ba0", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", +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"000027b8", +3051 => x"ffffffff", +3052 => x"00000000", +3053 => x"ffffffff", +3054 => x"00000000", others => x"00000000" ); diff --git a/zpu/hdl/example/log.txt b/zpu/hdl/example/log.txt index 6954a81..6966062 100644 --- a/zpu/hdl/example/log.txt +++ b/zpu/hdl/example/log.txt @@ -9,7 +9,27 @@ o r l d -! + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 diff --git a/zpu/hdl/example/simzpu.do b/zpu/hdl/example/simzpu.do deleted file mode 100644 index 083187f..0000000 --- a/zpu/hdl/example/simzpu.do +++ /dev/null @@ -1,29 +0,0 @@ -# Xilinx WebPack modelsim script -# -# 1. Change directory to this source directory -# cd C:/workspace/zpunew/hdl/example -# "do zimzpu.do" - -set BreakOnAssertion 1 -vlib work - -vcom -93 -explicit zpu_config.vhd -vcom -93 -explicit ../zpu4/src/zpupkg.vhd -vcom -93 -explicit ../zpu4/src/txt_util.vhd -vcom -93 -explicit sim_fpga_top.vhd -vcom -93 -explicit ../zpu4/src/zpu_core_small.vhd -vcom -93 -explicit helloworld.vhd -vcom -93 -explicit ../zpu4/src/timer.vhd -vcom -93 -explicit io.vhd -vcom -93 -explicit ../zpu4/src/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 10 ms diff --git a/zpu/hdl/example/simzpu_small.do b/zpu/hdl/example/simzpu_small.do new file mode 100644 index 0000000..5fb906d --- /dev/null +++ b/zpu/hdl/example/simzpu_small.do @@ -0,0 +1,29 @@ +# Xilinx WebPack modelsim script +# +# +# cd C:/workspace/zpu/zpu/hdl/example +# do simzpu_small.do + +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config.vhd +vcom -93 -explicit ../zpu4/src/zpupkg.vhd +vcom -93 -explicit ../zpu4/src/txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit ../zpu4/src/zpu_core_small.vhd +vcom -93 -explicit helloworld.vhd +vcom -93 -explicit ../zpu4/src/timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit ../zpu4/src/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 10 ms diff --git a/zpu/hdl/index.html b/zpu/hdl/index.html index 271d46a..d5bc256 100644 --- a/zpu/hdl/index.html +++ b/zpu/hdl/index.html @@ -4,7 +4,8 @@ The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART is a good place to start.

    -You'll find a working simulation script in hdl/example/simzpu.do. +You'll find a working simulation script in hdl/example/simzpu_small.do and hdl/zpu4/src/simzpu_medium.do, which +show simulation of the small(zpu_core_small.vhd) and medium sized ZPU(zpu_core.vhd).

    When implementing the ZPU, copy the following files and modify them to your needs:

      @@ -23,10 +24,10 @@ java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam he The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt:
      1. cd c:/<installfolder>/hdl/example -
      2. do zpusim.do +
      3. do zpusim_small.do

      -After running the hello world simulation (see zpusim.do), two files are written to the hdl/exmaple directory: +After running the hello world simulation (see zpusim.do), two files are written to the hdl/example directory:

      1. log.txt - contains the "Hello world!" text written to the debug channel/simplified UART.
      2. trace.txt - a trace file for the CPU. The instruction set simulator has the capability of taking diff --git a/zpu/hdl/zpu4/src/dram_hello.vhd b/zpu/hdl/zpu4/src/dram_hello.vhd index dc46dbb..3f7788a 100644 --- a/zpu/hdl/zpu4/src/dram_hello.vhd +++ b/zpu/hdl/zpu4/src/dram_hello.vhd @@ -9,6 +9,7 @@ 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); @@ -21,21 +22,21 @@ 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); +type ram_type is array(0 to ((2**(maxAddrBitDRAM+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", +1 => x"82700b0b", +2 => x"80cfd80c", 3 => x"3a0b0b80", -4 => x"c8b20400", +4 => x"c6d00400", 5 => x"00000000", 6 => x"00000000", 7 => x"00000000", 8 => x"80088408", 9 => x"88080b0b", -10 => x"80c8fb2d", +10 => x"80c7972d", 11 => x"880c840c", 12 => x"800c0400", 13 => x"00000000", @@ -186,8 +187,8 @@ shared variable ram : ram_type := 158 => x"00000000", 159 => x"00000000", 160 => x"71fc0608", -161 => x"0b0b80d2", -162 => x"fc738306", +161 => x"0b0b80cf", +162 => x"c4738306", 163 => x"10100508", 164 => x"060b0b0b", 165 => x"88aa0400", @@ -195,16 +196,16 @@ shared variable ram : ram_type := 167 => x"00000000", 168 => x"80088408", 169 => x"88087575", -170 => x"0b0b0b8d", -171 => x"872d5050", +170 => x"0b0b0b8b", +171 => x"9f2d5050", 172 => x"80085688", 173 => x"0c840c80", 174 => x"0c510400", 175 => x"00000000", 176 => x"80088408", 177 => x"88087575", -178 => x"0b0b0b8d", -179 => x"cb2d5050", +178 => x"0b0b0b8b", +179 => x"e32d5050", 180 => x"80085688", 181 => x"0c840c80", 182 => x"0c510400", @@ -234,7 +235,7 @@ shared variable ram : ram_type := 206 => x"00000000", 207 => x"00000000", 208 => x"810b0b0b", -209 => x"80d38c0c", +209 => x"80cfd40c", 210 => x"51040000", 211 => x"00000000", 212 => x"00000000", @@ -281,8 +282,8 @@ shared variable ram : ram_type := 253 => x"00000000", 254 => x"00000000", 255 => x"00000000", -256 => x"83d93f80", -257 => x"ca953f04", +256 => x"82c53f80", +257 => x"c6d93f04", 258 => x"10101010", 259 => x"10101010", 260 => x"10101010", @@ -305,2394 +306,2394 @@ shared variable ram : ram_type := 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", +280 => x"fe3d0d0b", +281 => x"0b80dfc0", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c0085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"d408802e", +299 => x"a43880cf", +300 => x"d808822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc00c", +304 => x"82a0800b", +305 => x"80dfc40c", +306 => x"8290800b", +307 => x"80dfc80c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc0", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfc40cf8", +314 => x"80808480", +315 => x"0b80dfc8", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c00c80c0", +320 => x"a880940b", +321 => x"80dfc40c", +322 => x"0b0b80cf", +323 => x"8c0b80df", +324 => x"c80c0470", +325 => x"7080dfcc", +326 => x"335170a7", +327 => x"3880cfe0", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe00c", +332 => x"702d80cf", +333 => x"e0087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfcc3450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"bc08802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfbc510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"fe3d0d89", +349 => x"5380cf90", +350 => x"5182c13f", +351 => x"80cfa051", +352 => x"82ba3f81", +353 => x"0a0b80df", +354 => x"d80cff0b", +355 => x"80dfdc0c", +356 => x"ff135372", +357 => x"8025de38", +358 => x"72800c84", +359 => x"3d0d04fb", +360 => x"3d0d7779", +361 => x"55558056", +362 => x"757524ab", +363 => x"38807424", +364 => x"9d388053", +365 => x"73527451", +366 => x"80e13f80", +367 => x"08547580", +368 => x"2e853880", +369 => x"08305473", +370 => x"800c873d", +371 => x"0d047330", +372 => x"76813257", +373 => x"54dc3974", +374 => x"30558156", +375 => x"738025d2", +376 => x"38ec39fa", +377 => x"3d0d787a", +378 => x"57558057", +379 => x"767524a4", +380 => x"38759f2c", +381 => x"54815375", +382 => x"74327431", +383 => x"5274519b", +384 => x"3f800854", +385 => x"76802e85", +386 => x"38800830", +387 => x"5473800c", +388 => x"883d0d04", +389 => x"74305581", +390 => x"57d739fc", +391 => x"3d0d7678", +392 => x"53548153", +393 => x"80747326", +394 => x"52557280", +395 => x"2e983870", +396 => x"802eab38", +397 => x"807224a6", +398 => x"38711073", +399 => x"10757226", +400 => x"53545272", +401 => x"ea387351", +402 => x"78833874", +403 => x"5170800c", +404 => x"863d0d04", +405 => x"720a100a", +406 => x"720a100a", +407 => x"53537280", +408 => x"2ee43871", +409 => x"7426ed38", +410 => x"73723175", +411 => x"7407740a", +412 => x"100a740a", +413 => x"100a5555", +414 => x"5654e339", +415 => x"f73d0d7c", +416 => x"70525380", +417 => x"f93f7254", +418 => x"80085580", +419 => x"cfb05681", +420 => x"57800881", +421 => x"055a8b3d", +422 => x"e4115953", +423 => x"8259f413", +424 => x"527b8811", +425 => x"08525381", +426 => x"b23f8008", +427 => x"30708008", +428 => x"079f2c8a", +429 => x"07800c53", +430 => x"8b3d0d04", +431 => x"f63d0d7c", +432 => x"80cfe408", +433 => x"71535553", +434 => x"b53f7255", +435 => x"80085680", +436 => x"cfb05781", +437 => x"58800881", +438 => x"055b8c3d", +439 => x"e4115a53", +440 => x"825af413", +441 => x"52881408", +442 => x"5180f03f", +443 => x"80083070", +444 => x"8008079f", +445 => x"2c8a0780", +446 => x"0c548c3d", +447 => x"0d047070", +448 => x"70707570", +449 => x"71830653", +450 => x"555270b4", +451 => x"38717008", +452 => x"7009f7fb", +453 => x"fdff1206", +454 => x"f8848281", +455 => x"80065452", +456 => x"53719b38", +457 => x"84137008", +458 => x"7009f7fb", +459 => x"fdff1206", +460 => x"f8848281", +461 => x"80065452", +462 => x"5371802e", +463 => x"e7387252", +464 => x"71335372", +465 => x"802e8a38", +466 => x"81127033", +467 => x"545272f8", +468 => x"38717431", +469 => x"800c5050", +470 => x"505004f2", +471 => x"3d0d6062", +472 => x"88110870", +473 => x"58565f5a", +474 => x"73802e81", +475 => x"8c388c1a", +476 => x"2270832a", +477 => x"81328106", +478 => x"56587486", +479 => x"38901a08", +480 => x"91387951", +481 => x"90b73fff", +482 => x"55800880", +483 => x"ec388c1a", +484 => x"22587d08", +485 => x"55807883", +486 => x"ffff0670", +487 => x"0a100a81", +488 => x"06415c57", +489 => x"7e772e80", +490 => x"d7387690", +491 => x"38740884", +492 => x"16088817", +493 => x"57585676", +494 => x"802ef238", +495 => x"76548880", +496 => x"77278438", +497 => x"88805473", +498 => x"5375529c", +499 => x"1a0851a4", +500 => x"1a085877", +501 => x"2d800b80", +502 => x"082582e0", +503 => x"38800816", +504 => x"77800831", +505 => x"7f880508", +506 => x"80083170", +507 => x"6188050c", +508 => x"5b585678", +509 => x"ffb43880", +510 => x"5574800c", +511 => x"903d0d04", +512 => x"7a813281", +513 => x"06774056", +514 => x"75802e81", +515 => x"bd387690", +516 => x"38740884", +517 => x"16088817", +518 => x"57585976", +519 => x"802ef238", +520 => x"881a0878", +521 => x"83ffff06", +522 => x"70892a81", +523 => x"06565956", +524 => x"73802e82", +525 => x"f8387577", +526 => x"278b3877", +527 => x"872a8106", +528 => x"5c7b82b5", +529 => x"38767627", +530 => x"83387656", +531 => x"75537852", +532 => x"79085185", +533 => x"833f881a", +534 => x"08763188", +535 => x"1b0c7908", +536 => x"167a0c76", +537 => x"56751977", +538 => x"77317f88", +539 => x"05087831", +540 => x"70618805", +541 => x"0c415859", +542 => x"7e802efe", +543 => x"fa388c1a", +544 => x"2258ff8a", +545 => x"39787954", +546 => x"7c537b52", +547 => x"5684c93f", +548 => x"881a0879", +549 => x"31881b0c", +550 => x"7908197a", +551 => x"0c7c7631", +552 => x"5d7c8e38", +553 => x"79518ff2", +554 => x"3f800881", +555 => x"8f388008", +556 => x"5f751c77", +557 => x"77317f88", +558 => x"05087831", +559 => x"70618805", +560 => x"0c5d585c", +561 => x"7a802efe", +562 => x"ae387681", +563 => x"83387408", +564 => x"84160888", +565 => x"1757585c", +566 => x"76802ef2", +567 => x"3876538a", +568 => x"527b5182", +569 => x"d33f8008", +570 => x"7c318105", +571 => x"5d800884", +572 => x"3881175d", +573 => x"815f7c59", +574 => x"767d2783", +575 => x"38765994", +576 => x"1a08881b", +577 => x"08115758", +578 => x"807a085c", +579 => x"54901a08", +580 => x"7b278338", +581 => x"81547579", +582 => x"25843873", +583 => x"ba387779", +584 => x"24fee238", +585 => x"77537b52", +586 => x"9c1a0851", +587 => x"a41a0859", +588 => x"782d8008", +589 => x"56800880", +590 => x"24fee238", +591 => x"8c1a2280", +592 => x"c0075e7d", +593 => x"8c1b23ff", +594 => x"5574800c", +595 => x"903d0d04", +596 => x"7effa338", +597 => x"ff873975", +598 => x"537b527a", +599 => x"5182f93f", +600 => x"7908167a", +601 => x"0c79518e", +602 => x"b13f8008", +603 => x"cf387c76", +604 => x"315d7cfe", +605 => x"bc38feac", +606 => x"39901a08", +607 => x"7a087131", +608 => x"78117056", +609 => x"5a575280", +610 => x"cfe40851", +611 => x"84943f80", +612 => x"08802eff", +613 => x"a7388008", +614 => x"901b0c80", +615 => x"08167a0c", +616 => x"77941b0c", +617 => x"76881b0c", +618 => x"7656fd99", +619 => x"39790858", +620 => x"901a0878", +621 => x"27833881", +622 => x"54757727", +623 => x"843873b3", +624 => x"38941a08", +625 => x"54737726", +626 => x"80d33873", +627 => x"5378529c", +628 => x"1a0851a4", +629 => x"1a085877", +630 => x"2d800856", +631 => x"80088024", +632 => x"fd83388c", +633 => x"1a2280c0", +634 => x"075e7d8c", +635 => x"1b23ff55", +636 => x"fed73975", +637 => x"53785277", +638 => x"5181dd3f", +639 => x"7908167a", +640 => x"0c79518d", +641 => x"953f8008", +642 => x"802efcd9", +643 => x"388c1a22", +644 => x"80c0075e", +645 => x"7d8c1b23", +646 => x"ff55fead", +647 => x"39767754", +648 => x"79537852", +649 => x"5681b13f", +650 => x"881a0877", +651 => x"31881b0c", +652 => x"7908177a", +653 => x"0cfcae39", +654 => x"fa3d0d7a", +655 => x"79028805", +656 => x"a7053355", +657 => x"53548374", +658 => x"2780df38", +659 => x"71830651", +660 => x"7080d738", +661 => x"71715755", +662 => x"83517582", +663 => x"802913ff", +664 => x"12525670", +665 => x"8025f338", +666 => x"837427bc", +667 => x"38740876", +668 => x"327009f7", +669 => x"fbfdff12", +670 => x"06f88482", +671 => x"81800651", +672 => x"5170802e", +673 => x"98387451", +674 => x"80527033", +675 => x"5772772e", +676 => x"b9388111", +677 => x"81135351", +678 => x"837227ee", +679 => x"38fc1484", +680 => x"16565473", +681 => x"8326c638", +682 => x"7452ff14", +683 => x"5170ff2e", +684 => x"97387133", +685 => x"5472742e", +686 => x"98388112", +687 => x"ff125252", +688 => x"70ff2e09", +689 => x"8106eb38", +690 => x"80517080", +691 => x"0c883d0d", +692 => x"0471800c", +693 => x"883d0d04", +694 => x"fa3d0d78", +695 => x"7a7c7272", +696 => x"72595755", +697 => x"58565774", +698 => x"7727b238", +699 => x"75155176", +700 => x"7127aa38", +701 => x"707618ff", +702 => x"18535353", +703 => x"70ff2e96", +704 => x"38ff12ff", +705 => x"14545272", +706 => x"337234ff", +707 => x"115170ff", +708 => x"2e098106", +709 => x"ec387680", +710 => x"0c883d0d", +711 => x"048f7627", +712 => x"80e63874", +713 => x"77078306", +714 => x"517080dc", +715 => x"38767552", +716 => x"53707084", +717 => x"05520873", +718 => x"70840555", +719 => x"0c727170", +720 => x"84055308", +721 => x"71708405", +722 => x"530c7170", +723 => x"84055308", +724 => x"71708405", +725 => x"530c7170", +726 => x"84055308", +727 => x"71708405", +728 => x"530cf015", +729 => x"5553738f", +730 => x"26c73883", +731 => x"74279538", +732 => x"70708405", +733 => x"52087370", +734 => x"8405550c", +735 => x"fc145473", +736 => x"8326ed38", +737 => x"72715452", +738 => x"ff145170", +739 => x"ff2eff86", +740 => x"38727081", +741 => x"05543372", +742 => x"70810554", +743 => x"34ff1151", +744 => x"ea39ef3d", +745 => x"0d636567", +746 => x"405d427b", +747 => x"802e8582", +748 => x"386151a9", +749 => x"e73ff81c", +750 => x"70841208", +751 => x"70fc0670", +752 => x"628b0570", +753 => x"f8064159", +754 => x"455c5f41", +755 => x"57967427", +756 => x"82c53880", +757 => x"7b247e7c", +758 => x"26075880", +759 => x"5477742e", +760 => x"09810682", +761 => x"ab38787b", +762 => x"2581fe38", +763 => x"781780d7", +764 => x"a00b8805", +765 => x"085b5679", +766 => x"762e84c5", +767 => x"38841608", +768 => x"70fe0617", +769 => x"84110881", +770 => x"06415555", +771 => x"7e828d38", +772 => x"74fc0658", +773 => x"79762e84", +774 => x"e3387818", +775 => x"5f7e7b25", +776 => x"81ff387c", +777 => x"81065473", +778 => x"82c13876", +779 => x"77083184", +780 => x"1108fc06", +781 => x"56577580", +782 => x"2e913879", +783 => x"762e84f0", +784 => x"38741819", +785 => x"58777b25", +786 => x"84913876", +787 => x"802e829b", +788 => x"38781556", +789 => x"7a762482", +790 => x"92388c17", +791 => x"08881808", +792 => x"718c120c", +793 => x"88120c5e", +794 => x"75598817", +795 => x"61fc055b", +796 => x"5679a426", +797 => x"85ff387b", +798 => x"76595593", +799 => x"7a2780c9", +800 => x"387b7084", +801 => x"055d087c", +802 => x"56760c74", +803 => x"70840556", +804 => x"088c180c", +805 => x"9017589b", +806 => x"7a27ae38", +807 => x"74708405", +808 => x"5608780c", +809 => x"74708405", +810 => x"56089418", +811 => x"0c981758", +812 => x"a37a2795", +813 => x"38747084", +814 => x"05560878", +815 => x"0c747084", +816 => x"0556089c", +817 => x"180ca017", +818 => x"58747084", +819 => x"05560875", +820 => x"5f787084", +821 => x"055a0c77", +822 => x"7e708405", +823 => x"40087170", +824 => x"8405530c", +825 => x"7e08710c", +826 => x"5d787b31", +827 => x"56758f26", +828 => x"80c93884", +829 => x"17088106", +830 => x"79078418", +831 => x"0c781784", +832 => x"11088107", +833 => x"84120c5b", +834 => x"6151a791", +835 => x"3f881754", +836 => x"73800c93", +837 => x"3d0d0490", +838 => x"5bfdb839", +839 => x"7756fe83", +840 => x"398c1608", +841 => x"88170871", +842 => x"8c120c88", +843 => x"120c587e", +844 => x"707c3157", +845 => x"598f7627", +846 => x"ffb9387a", +847 => x"17841808", +848 => x"81067c07", +849 => x"84190c76", +850 => x"81078412", +851 => x"0c761184", +852 => x"11088107", +853 => x"84120c5b", +854 => x"88055261", +855 => x"518fda3f", +856 => x"6151a6b9", +857 => x"3f881754", +858 => x"ffa6397d", +859 => x"52615197", +860 => x"d73f8008", +861 => x"5a800880", +862 => x"2e81ab38", +863 => x"8008f805", +864 => x"60840508", +865 => x"fe066105", +866 => x"58557477", +867 => x"2e83f238", +868 => x"fc195877", +869 => x"a42681b0", +870 => x"387b8008", +871 => x"56579378", +872 => x"2780dc38", +873 => x"7b707084", +874 => x"05520880", +875 => x"08708405", +876 => x"800c0c80", +877 => x"08717084", +878 => x"0553085d", +879 => x"567b7670", +880 => x"8405580c", +881 => x"579b7827", +882 => x"b6387670", +883 => x"84055808", +884 => x"75708405", +885 => x"570c7670", +886 => x"84055808", +887 => x"75708405", +888 => x"570ca378", +889 => x"27993876", +890 => x"70840558", +891 => x"08757084", +892 => x"05570c76", +893 => x"70840558", +894 => x"08757084", +895 => x"05570c76", +896 => x"70840558", +897 => x"08775e75", +898 => x"70840557", +899 => x"0c747d70", +900 => x"84055f08", +901 => x"71708405", +902 => x"530c7d08", +903 => x"710c5f7b", +904 => x"5261518e", +905 => x"943f6151", +906 => x"a4f33f79", +907 => x"800c933d", +908 => x"0d047d52", +909 => x"61519690", +910 => x"3f800880", +911 => x"0c933d0d", +912 => x"04841608", +913 => x"55fbc939", +914 => x"77537b52", +915 => x"800851a2", +916 => x"a53f7b52", +917 => x"61518de1", +918 => x"3fcc398c", +919 => x"16088817", +920 => x"08718c12", +921 => x"0c88120c", +922 => x"5d8c1708", +923 => x"88180871", +924 => x"8c120c88", +925 => x"120c5977", +926 => x"59fbef39", +927 => x"7818901c", +928 => x"40557e75", +929 => x"24fb9c38", +930 => x"7a177080", +931 => x"d7a00b88", +932 => x"050c757c", +933 => x"31810784", +934 => x"120c5684", +935 => x"17088106", +936 => x"7b078418", +937 => x"0c6151a3", +938 => x"f43f8817", +939 => x"54fce139", +940 => x"74181990", +941 => x"1c5e5a7c", +942 => x"7a24fb8f", +943 => x"388c1708", +944 => x"88180871", +945 => x"8c120c88", +946 => x"120c5e88", +947 => x"1761fc05", +948 => x"575975a4", +949 => x"2681b638", +950 => x"7b795955", +951 => x"93762780", +952 => x"c9387b70", +953 => x"84055d08", +954 => x"7c56790c", +955 => x"74708405", +956 => x"56088c18", +957 => x"0c901758", +958 => x"9b7627ae", +959 => x"38747084", +960 => x"05560878", +961 => x"0c747084", +962 => x"05560894", +963 => x"180c9817", +964 => x"58a37627", +965 => x"95387470", +966 => x"84055608", +967 => x"780c7470", +968 => x"84055608", +969 => x"9c180ca0", +970 => x"17587470", +971 => x"84055608", +972 => x"75417870", +973 => x"84055a0c", +974 => x"77607084", +975 => x"05420871", +976 => x"70840553", +977 => x"0c600871", +978 => x"0c5e7a17", +979 => x"7080d7a0", +980 => x"0b88050c", +981 => x"7a7c3181", +982 => x"0784120c", +983 => x"58841708", +984 => x"81067b07", +985 => x"84180c61", +986 => x"51a2b23f", +987 => x"78547380", +988 => x"0c933d0d", +989 => x"0479537b", +990 => x"5275519f", +991 => x"f93ffae9", +992 => x"39841508", +993 => x"fc061960", +994 => x"5859fadd", +995 => x"3975537b", +996 => x"5278519f", +997 => x"e13f7a17", +998 => x"7080d7a0", +999 => x"0b88050c", +1000 => x"7a7c3181", +1001 => x"0784120c", +1002 => x"58841708", +1003 => x"81067b07", +1004 => x"84180c61", +1005 => x"51a1e63f", +1006 => x"7854ffb2", +1007 => x"39fa3d0d", +1008 => x"7880cfe4", +1009 => x"085455b8", +1010 => x"1308802e", +1011 => x"81af388c", +1012 => x"15227083", +1013 => x"ffff0670", +1014 => x"832a8132", +1015 => x"81065555", +1016 => x"5672802e", +1017 => x"80da3873", +1018 => x"842a8132", +1019 => x"810657ff", +1020 => x"537680f2", +1021 => x"3873822a", +1022 => x"81065473", +1023 => x"802eb938", +1024 => x"b0150854", +1025 => x"73802e9c", +1026 => x"3880c015", +1027 => x"5373732e", +1028 => x"8f387352", +1029 => x"80cfe408", +1030 => x"518a9e3f", +1031 => x"8c152256", +1032 => x"76b0160c", +1033 => x"75db0657", +1034 => x"768c1623", +1035 => x"800b8416", +1036 => x"0c901508", +1037 => x"750c7656", +1038 => x"75880754", +1039 => x"738c1623", +1040 => x"90150880", +1041 => x"2ebf388c", +1042 => x"15227081", +1043 => x"06555373", +1044 => x"9c38720a", +1045 => x"100a8106", +1046 => x"56758538", +1047 => x"94150854", +1048 => x"7388160c", +1049 => x"80537280", +1050 => x"0c883d0d", +1051 => x"04800b88", +1052 => x"160c9415", +1053 => x"08309816", +1054 => x"0c8053ea", +1055 => x"39725182", +1056 => x"a63ffecb", +1057 => x"3974518f", +1058 => x"bc3f8c15", +1059 => x"22708106", +1060 => x"55537380", +1061 => x"2effbb38", +1062 => x"d439f83d", +1063 => x"0d7a5776", +1064 => x"802e8197", +1065 => x"3880cfe4", +1066 => x"0854b814", +1067 => x"08802e80", +1068 => x"eb388c17", +1069 => x"2270902b", +1070 => x"70902c70", +1071 => x"832a8132", +1072 => x"81065b5b", +1073 => x"57557780", +1074 => x"cb389017", +1075 => x"08567580", +1076 => x"2e80c138", +1077 => x"76087631", +1078 => x"76780c79", +1079 => x"83065555", +1080 => x"73853894", +1081 => x"17085877", +1082 => x"88180c80", +1083 => x"7525a538", +1084 => x"74537552", +1085 => x"9c170851", +1086 => x"a4170854", +1087 => x"732d800b", +1088 => x"80082580", +1089 => x"c9388008", +1090 => x"16758008", +1091 => x"31565674", +1092 => x"8024dd38", +1093 => x"800b800c", +1094 => x"8a3d0d04", +1095 => x"73518187", +1096 => x"3f8c1722", +1097 => x"70902b70", +1098 => x"902c7083", +1099 => x"2a813281", +1100 => x"065b5b57", +1101 => x"5577dd38", +1102 => x"ff9039a1", +1103 => x"9a5280cf", +1104 => x"e408518c", +1105 => x"d03f8008", +1106 => x"800c8a3d", +1107 => x"0d048c17", +1108 => x"2280c007", +1109 => x"58778c18", +1110 => x"23ff0b80", +1111 => x"0c8a3d0d", +1112 => x"04fa3d0d", +1113 => x"797080dc", +1114 => x"298c1154", +1115 => x"7a535657", +1116 => x"8fd63f80", +1117 => x"08800855", +1118 => x"56800880", +1119 => x"2ea23880", +1120 => x"088c0554", +1121 => x"800b8008", +1122 => x"0c768008", +1123 => x"84050c73", +1124 => x"80088805", +1125 => x"0c745380", +1126 => x"5273519c", +1127 => x"f53f7554", +1128 => x"73800c88", +1129 => x"3d0d0470", +1130 => x"707074a8", +1131 => x"e60bbc12", +1132 => x"0c53810b", +1133 => x"b8140c80", +1134 => x"0b84dc14", +1135 => x"0c830b84", +1136 => x"e0140c84", +1137 => x"e81384e4", +1138 => x"140c8413", +1139 => x"08518070", +1140 => x"720c7084", +1141 => x"130c7088", +1142 => x"130c5284", +1143 => x"0b8c1223", +1144 => x"718e1223", +1145 => x"7190120c", +1146 => x"7194120c", +1147 => x"7198120c", +1148 => x"709c120c", +1149 => x"80c1d50b", +1150 => x"a0120c80", +1151 => x"c2a10ba4", +1152 => x"120c80c3", +1153 => x"9d0ba812", +1154 => x"0c80c3ee", +1155 => x"0bac120c", +1156 => x"88130872", +1157 => x"710c7284", +1158 => x"120c7288", +1159 => x"120c5189", +1160 => x"0b8c1223", +1161 => x"810b8e12", +1162 => x"23719012", +1163 => x"0c719412", +1164 => x"0c719812", +1165 => x"0c709c12", +1166 => x"0c80c1d5", +1167 => x"0ba0120c", +1168 => x"80c2a10b", +1169 => x"a4120c80", +1170 => x"c39d0ba8", +1171 => x"120c80c3", +1172 => x"ee0bac12", +1173 => x"0c8c1308", +1174 => x"72710c72", +1175 => x"84120c72", +1176 => x"88120c51", +1177 => x"8a0b8c12", +1178 => x"23820b8e", +1179 => x"12237190", +1180 => x"120c7194", +1181 => x"120c7198", +1182 => x"120c709c", +1183 => x"120c80c1", +1184 => x"d50ba012", +1185 => x"0c80c2a1", +1186 => x"0ba4120c", +1187 => x"80c39d0b", +1188 => x"a8120c80", +1189 => x"c3ee0bac", +1190 => x"120c5050", +1191 => x"5004f83d", +1192 => x"0d7a80cf", +1193 => x"e408b811", +1194 => x"08575758", +1195 => x"7481ec38", +1196 => x"a8e60bbc", +1197 => x"170c810b", +1198 => x"b8170c74", +1199 => x"84dc170c", +1200 => x"830b84e0", +1201 => x"170c84e8", +1202 => x"1684e417", +1203 => x"0c841608", +1204 => x"75710c75", +1205 => x"84120c75", +1206 => x"88120c59", +1207 => x"840b8c1a", +1208 => x"23748e1a", +1209 => x"2374901a", +1210 => x"0c74941a", +1211 => x"0c74981a", +1212 => x"0c789c1a", +1213 => x"0c80c1d5", +1214 => x"0ba01a0c", +1215 => x"80c2a10b", +1216 => x"a41a0c80", +1217 => x"c39d0ba8", +1218 => x"1a0c80c3", +1219 => x"ee0bac1a", +1220 => x"0c881608", +1221 => x"75710c75", +1222 => x"84120c75", +1223 => x"88120c57", +1224 => x"890b8c18", +1225 => x"23810b8e", +1226 => x"18237490", +1227 => x"180c7494", +1228 => x"180c7498", +1229 => x"180c769c", +1230 => x"180c80c1", +1231 => x"d50ba018", +1232 => x"0c80c2a1", +1233 => x"0ba4180c", +1234 => x"80c39d0b", +1235 => x"a8180c80", +1236 => x"c3ee0bac", +1237 => x"180c8c16", +1238 => x"0875710c", +1239 => x"7584120c", +1240 => x"7588120c", +1241 => x"548a0b8c", +1242 => x"1523820b", +1243 => x"8e152374", +1244 => x"90150c74", +1245 => x"94150c74", +1246 => x"98150c73", +1247 => x"9c150c80", +1248 => x"c1d50ba0", +1249 => x"150c80c2", +1250 => x"a10ba415", +1251 => x"0c80c39d", +1252 => x"0ba8150c", +1253 => x"80c3ee0b", +1254 => x"ac150c84", +1255 => x"dc168811", +1256 => x"08841208", +1257 => x"ff055757", +1258 => x"57807524", +1259 => x"9f388c16", +1260 => x"2270902b", +1261 => x"70902c51", +1262 => x"55597380", +1263 => x"2e80ed38", +1264 => x"80dc16ff", +1265 => x"16565674", +1266 => x"8025e338", +1267 => x"76085574", +1268 => x"802e8f38", +1269 => x"74881108", +1270 => x"841208ff", +1271 => x"05575757", +1272 => x"c83982fc", +1273 => x"5277518a", +1274 => x"df3f8008", +1275 => x"80085556", +1276 => x"8008802e", +1277 => x"a3388008", +1278 => x"8c057580", +1279 => x"080c5484", +1280 => x"0b800884", +1281 => x"050c7380", +1282 => x"0888050c", +1283 => x"82f05374", +1284 => x"52735197", +1285 => x"fd3f7554", +1286 => x"7374780c", +1287 => x"5573ffb4", +1288 => x"388c780c", +1289 => x"800b800c", +1290 => x"8a3d0d04", +1291 => x"810b8c17", +1292 => x"2373760c", +1293 => x"7388170c", +1294 => x"7384170c", +1295 => x"7390170c", +1296 => x"7394170c", +1297 => x"7398170c", +1298 => x"ff0b8e17", +1299 => x"2373b017", +1300 => x"0c73b417", +1301 => x"0c7380c4", +1302 => x"170c7380", +1303 => x"c8170c75", +1304 => x"800c8a3d", +1305 => x"0d047070", +1306 => x"a19a5273", +1307 => x"5186a63f", +1308 => x"50500470", +1309 => x"70a19a52", +1310 => x"80cfe408", +1311 => x"5186963f", +1312 => x"505004fb", +1313 => x"3d0d7770", +1314 => x"52569890", +1315 => x"3f80d7a0", +1316 => x"0b880508", +1317 => x"841108fc", +1318 => x"06707b31", +1319 => x"9fef05e0", +1320 => x"8006e080", +1321 => x"05525555", +1322 => x"a0807524", +1323 => x"94388052", +1324 => x"755197ea", +1325 => x"3f80d7a8", +1326 => x"08145372", +1327 => x"80082e8f", +1328 => x"38755197", +1329 => x"d83f8053", +1330 => x"72800c87", +1331 => x"3d0d0474", +1332 => x"30527551", +1333 => x"97c83f80", +1334 => x"08ff2ea8", +1335 => x"3880d7a0", +1336 => x"0b880508", +1337 => x"74763181", +1338 => x"0784120c", +1339 => x"5380d6e4", +1340 => x"08753180", +1341 => x"d6e40c75", +1342 => x"5197a23f", +1343 => x"810b800c", +1344 => x"873d0d04", +1345 => x"80527551", +1346 => x"97943f80", +1347 => x"d7a00b88", +1348 => x"05088008", +1349 => x"71315454", +1350 => x"8f7325ff", +1351 => x"a4388008", +1352 => x"80d79408", +1353 => x"3180d6e4", +1354 => x"0c728107", +1355 => x"84150c75", +1356 => x"5196ea3f", +1357 => x"8053ff90", +1358 => x"39f73d0d", +1359 => x"7b7d545a", +1360 => x"72802e82", +1361 => x"83387951", +1362 => x"96d23ff8", +1363 => x"13841108", +1364 => x"70fe0670", +1365 => x"13841108", +1366 => x"fc065c57", +1367 => x"58545780", +1368 => x"d7a80874", +1369 => x"2e82de38", +1370 => x"7784150c", +1371 => x"80738106", +1372 => x"56597479", +1373 => x"2e81d538", +1374 => x"77148411", +1375 => x"08810656", +1376 => x"5374a038", +1377 => x"77165678", +1378 => x"81e63888", +1379 => x"14085574", +1380 => x"80d7a82e", +1381 => x"82f9388c", +1382 => x"1408708c", +1383 => x"170c7588", +1384 => x"120c5875", +1385 => x"81078418", +1386 => x"0c751776", +1387 => x"710c5478", +1388 => x"81913883", +1389 => x"ff762781", +1390 => x"c8387589", +1391 => x"2a76832a", +1392 => x"54547380", +1393 => x"2ebf3875", +1394 => x"862ab805", +1395 => x"53847427", +1396 => x"b43880db", +1397 => x"14539474", +1398 => x"27ab3875", +1399 => x"8c2a80ee", +1400 => x"055380d4", +1401 => x"74279e38", +1402 => x"758f2a80", +1403 => x"f7055382", +1404 => x"d4742791", +1405 => x"3875922a", +1406 => x"80fc0553", +1407 => x"8ad47427", +1408 => x"843880fe", +1409 => x"53721010", +1410 => x"1080d7a0", +1411 => x"05881108", +1412 => x"55557375", +1413 => x"2e82bf38", +1414 => x"841408fc", +1415 => x"06597579", +1416 => x"278d3888", +1417 => x"14085473", +1418 => x"752e0981", +1419 => x"06ea388c", +1420 => x"1408708c", +1421 => x"190c7488", +1422 => x"190c7788", +1423 => x"120c5576", +1424 => x"8c150c79", +1425 => x"5194d63f", +1426 => x"8b3d0d04", +1427 => x"76087771", +1428 => x"31587605", +1429 => x"88180856", +1430 => x"567480d7", +1431 => x"a82e80e0", +1432 => x"388c1708", +1433 => x"708c170c", +1434 => x"7588120c", +1435 => x"53fe8939", +1436 => x"8814088c", +1437 => x"1508708c", +1438 => x"130c5988", +1439 => x"190cfea3", +1440 => x"3975832a", +1441 => x"70545480", +1442 => x"74248198", +1443 => x"3872822c", +1444 => x"81712b80", +1445 => x"d7a40807", +1446 => x"80d7a00b", +1447 => x"84050c74", +1448 => x"10101080", +1449 => x"d7a00588", +1450 => x"1108718c", +1451 => x"1b0c7088", +1452 => x"1b0c7988", +1453 => x"130c565a", +1454 => x"55768c15", +1455 => x"0cff8439", +1456 => x"8159fdb4", +1457 => x"39771673", +1458 => x"81065455", +1459 => x"72983876", +1460 => x"08777131", +1461 => x"5875058c", +1462 => x"18088819", +1463 => x"08718c12", +1464 => x"0c88120c", +1465 => x"55557481", +1466 => x"0784180c", +1467 => x"7680d7a0", +1468 => x"0b88050c", +1469 => x"80d79c08", +1470 => x"7526fec7", +1471 => x"3880d798", +1472 => x"08527951", +1473 => x"fafd3f79", +1474 => x"5193923f", +1475 => x"feba3981", +1476 => x"778c170c", +1477 => x"7788170c", +1478 => x"758c190c", +1479 => x"7588190c", +1480 => x"59fd8039", +1481 => x"83147082", +1482 => x"2c81712b", +1483 => x"80d7a408", +1484 => x"0780d7a0", +1485 => x"0b84050c", +1486 => x"75101010", +1487 => x"80d7a005", +1488 => x"88110871", +1489 => x"8c1c0c70", +1490 => x"881c0c7a", +1491 => x"88130c57", +1492 => x"5b5653fe", +1493 => x"e4398073", +1494 => x"24a33872", +1495 => x"822c8171", +1496 => x"2b80d7a4", +1497 => x"080780d7", +1498 => x"a00b8405", +1499 => x"0c58748c", +1500 => x"180c7388", +1501 => x"180c7688", +1502 => x"160cfdc3", +1503 => x"39831370", +1504 => x"822c8171", +1505 => x"2b80d7a4", +1506 => x"080780d7", +1507 => x"a00b8405", +1508 => x"0c5953da", +1509 => x"39f93d0d", +1510 => x"797b5853", +1511 => x"800b80cf", +1512 => x"e4085356", +1513 => x"72722ebc", +1514 => x"3884dc13", +1515 => x"5574762e", +1516 => x"b3388815", +1517 => x"08841608", +1518 => x"ff055454", +1519 => x"80732499", +1520 => x"388c1422", +1521 => x"70902b53", +1522 => x"587180d4", +1523 => x"3880dc14", +1524 => x"ff145454", +1525 => x"728025e9", +1526 => x"38740855", +1527 => x"74d43880", +1528 => x"cfe40852", +1529 => x"84dc1255", +1530 => x"74802ead", +1531 => x"38881508", +1532 => x"841608ff", +1533 => x"05545480", +1534 => x"73249838", +1535 => x"8c142270", +1536 => x"902b5358", +1537 => x"71ad3880", +1538 => x"dc14ff14", +1539 => x"54547280", +1540 => x"25ea3874", +1541 => x"085574d5", +1542 => x"3875800c", +1543 => x"893d0d04", +1544 => x"7351762d", +1545 => x"75800807", +1546 => x"80dc15ff", +1547 => x"15555556", +1548 => x"ffa23973", +1549 => x"51762d75", +1550 => x"80080780", +1551 => x"dc15ff15", +1552 => x"555556ca", +1553 => x"39ea3d0d", +1554 => x"688c1122", +1555 => x"700a100a", +1556 => x"81065758", +1557 => x"567480e4", +1558 => x"388e1622", +1559 => x"70902b70", +1560 => x"902c5155", +1561 => x"58807424", +1562 => x"b138983d", +1563 => x"c4055373", +1564 => x"5280cfe4", +1565 => x"08519481", +1566 => x"3f800b80", +1567 => x"08249738", +1568 => x"7983e080", +1569 => x"06547380", +1570 => x"c0802e81", +1571 => x"8f387382", +1572 => x"80802e81", +1573 => x"91388c16", +1574 => x"22577690", +1575 => x"80075473", +1576 => x"8c172388", +1577 => x"805280cf", +1578 => x"e4085181", +1579 => x"9b3f8008", +1580 => x"9d388c16", +1581 => x"22820755", +1582 => x"748c1723", +1583 => x"80c31670", +1584 => x"770c9017", +1585 => x"0c810b94", +1586 => x"170c983d", +1587 => x"0d0480cf", +1588 => x"e408a8e6", +1589 => x"0bbc120c", +1590 => x"588c1622", +1591 => x"81800754", +1592 => x"738c1723", +1593 => x"8008760c", +1594 => x"80089017", +1595 => x"0c88800b", +1596 => x"94170c74", +1597 => x"802ed338", +1598 => x"8e162270", +1599 => x"902b7090", +1600 => x"2c535654", +1601 => x"9afe3f80", +1602 => x"08802eff", +1603 => x"bd388c16", +1604 => x"22810757", +1605 => x"768c1723", +1606 => x"983d0d04", +1607 => x"810b8c17", +1608 => x"225855fe", +1609 => x"f539a816", +1610 => x"0880c39d", +1611 => x"2e098106", +1612 => x"fee4388c", +1613 => x"16228880", +1614 => x"0754738c", +1615 => x"17238880", +1616 => x"0b80cc17", +1617 => x"0cfedc39", +1618 => x"f43d0d7e", +1619 => x"608b1170", +1620 => x"f8065b55", +1621 => x"555d7296", +1622 => x"26833890", +1623 => x"58807824", +1624 => x"74792607", +1625 => x"55805474", +1626 => x"742e0981", +1627 => x"0680ca38", +1628 => x"7c518ea8", +1629 => x"3f7783f7", +1630 => x"2680c538", +1631 => x"77832a70", +1632 => x"10101080", +1633 => x"d7a0058c", +1634 => x"11085858", +1635 => x"5475772e", +1636 => x"81f03884", +1637 => x"1608fc06", +1638 => x"8c170888", +1639 => x"1808718c", +1640 => x"120c8812", +1641 => x"0c5b7605", +1642 => x"84110881", +1643 => x"0784120c", +1644 => x"537c518d", +1645 => x"e83f8816", +1646 => x"5473800c", +1647 => x"8e3d0d04", +1648 => x"77892a78", +1649 => x"832a5854", +1650 => x"73802ebf", +1651 => x"3877862a", +1652 => x"b8055784", +1653 => x"7427b438", +1654 => x"80db1457", +1655 => x"947427ab", +1656 => x"38778c2a", +1657 => x"80ee0557", +1658 => x"80d47427", +1659 => x"9e38778f", +1660 => x"2a80f705", +1661 => x"5782d474", +1662 => x"27913877", +1663 => x"922a80fc", +1664 => x"05578ad4", +1665 => x"74278438", +1666 => x"80fe5776", +1667 => x"10101080", +1668 => x"d7a0058c", +1669 => x"11085653", +1670 => x"74732ea3", +1671 => x"38841508", +1672 => x"fc067079", +1673 => x"31555673", +1674 => x"8f2488e4", +1675 => x"38738025", +1676 => x"88e6388c", +1677 => x"15085574", +1678 => x"732e0981", +1679 => x"06df3881", +1680 => x"175980d7", +1681 => x"b0085675", +1682 => x"80d7a82e", +1683 => x"82cc3884", +1684 => x"1608fc06", +1685 => x"70793155", +1686 => x"55738f24", +1687 => x"bb3880d7", +1688 => x"a80b80d7", +1689 => x"b40c80d7", +1690 => x"a80b80d7", +1691 => x"b00c8074", +1692 => x"2480db38", +1693 => x"74168411", +1694 => x"08810784", +1695 => x"120c53fe", +1696 => x"b0398816", +1697 => x"8c110857", +1698 => x"5975792e", +1699 => x"098106fe", +1700 => x"82388214", +1701 => x"59ffab39", +1702 => x"77167881", +1703 => x"0784180c", +1704 => x"7080d7b4", +1705 => x"0c7080d7", +1706 => x"b00c80d7", +1707 => x"a80b8c12", +1708 => x"0c8c1108", +1709 => x"88120c74", +1710 => x"81078412", +1711 => x"0c740574", +1712 => x"710c5b7c", +1713 => x"518bd63f", +1714 => x"881654fd", +1715 => x"ec3983ff", +1716 => x"75278391", +1717 => x"3874892a", +1718 => x"75832a54", +1719 => x"5473802e", +1720 => x"bf387486", +1721 => x"2ab80553", +1722 => x"847427b4", +1723 => x"3880db14", +1724 => x"53947427", +1725 => x"ab38748c", +1726 => x"2a80ee05", +1727 => x"5380d474", +1728 => x"279e3874", +1729 => x"8f2a80f7", +1730 => x"055382d4", +1731 => x"74279138", +1732 => x"74922a80", +1733 => x"fc05538a", +1734 => x"d4742784", +1735 => x"3880fe53", +1736 => x"72101010", +1737 => x"80d7a005", +1738 => x"88110855", +1739 => x"5773772e", +1740 => x"868b3884", +1741 => x"1408fc06", +1742 => x"5b747b27", +1743 => x"8d388814", +1744 => x"08547377", +1745 => x"2e098106", +1746 => x"ea388c14", +1747 => x"0880d7a0", +1748 => x"0b840508", +1749 => x"718c190c", +1750 => x"7588190c", +1751 => x"7788130c", +1752 => x"5c57758c", +1753 => x"150c7853", +1754 => x"80792483", +1755 => x"98387282", +1756 => x"2c81712b", +1757 => x"5656747b", +1758 => x"2680ca38", +1759 => x"7a750657", +1760 => x"7682a338", +1761 => x"78fc0684", +1762 => x"05597410", +1763 => x"707c0655", +1764 => x"55738292", +1765 => x"38841959", +1766 => x"f13980d7", +1767 => x"a00b8405", +1768 => x"0879545b", +1769 => x"788025c6", +1770 => x"3882da39", +1771 => x"74097b06", +1772 => x"7080d7a0", +1773 => x"0b84050c", +1774 => x"5b741055", +1775 => x"747b2685", +1776 => x"387485bc", +1777 => x"3880d7a0", +1778 => x"0b880508", +1779 => x"70841208", +1780 => x"fc06707b", +1781 => x"317b7226", +1782 => x"8f722507", +1783 => x"5d575c5c", +1784 => x"5578802e", +1785 => x"80d93879", +1786 => x"1580d798", +1787 => x"08199011", +1788 => x"59545680", +1789 => x"d79408ff", +1790 => x"2e8838a0", +1791 => x"8f13e080", +1792 => x"06577652", +1793 => x"7c518996", +1794 => x"3f800854", +1795 => x"8008ff2e", +1796 => x"90388008", +1797 => x"762782a7", +1798 => x"387480d7", +1799 => x"a02e829f", +1800 => x"3880d7a0", +1801 => x"0b880508", +1802 => x"55841508", +1803 => x"fc067079", +1804 => x"31797226", +1805 => x"8f722507", +1806 => x"5d555a7a", +1807 => x"83f23877", +1808 => x"81078416", +1809 => x"0c771570", +1810 => x"80d7a00b", +1811 => x"88050c74", +1812 => x"81078412", +1813 => x"0c567c51", +1814 => x"88c33f88", +1815 => x"15547380", +1816 => x"0c8e3d0d", +1817 => x"0474832a", +1818 => x"70545480", +1819 => x"7424819b", +1820 => x"3872822c", +1821 => x"81712b80", +1822 => x"d7a40807", +1823 => x"7080d7a0", +1824 => x"0b84050c", +1825 => x"75101010", +1826 => x"80d7a005", +1827 => x"88110871", +1828 => x"8c1b0c70", +1829 => x"881b0c79", +1830 => x"88130c57", +1831 => x"555c5575", +1832 => x"8c150cfd", +1833 => x"c1397879", +1834 => x"10101080", +1835 => x"d7a00570", +1836 => x"565b5c8c", +1837 => x"14085675", +1838 => x"742ea338", +1839 => x"841608fc", +1840 => x"06707931", +1841 => x"5853768f", +1842 => x"2483f138", +1843 => x"76802584", +1844 => x"af388c16", +1845 => x"08567574", +1846 => x"2e098106", +1847 => x"df388814", +1848 => x"811a7083", +1849 => x"06555a54", +1850 => x"72c9387b", +1851 => x"83065675", +1852 => x"802efdb8", +1853 => x"38ff1cf8", +1854 => x"1b5b5c88", +1855 => x"1a087a2e", +1856 => x"ea38fdb5", +1857 => x"39831953", +1858 => x"fce43983", +1859 => x"1470822c", +1860 => x"81712b80", +1861 => x"d7a40807", +1862 => x"7080d7a0", +1863 => x"0b84050c", +1864 => x"76101010", +1865 => x"80d7a005", +1866 => x"88110871", +1867 => x"8c1c0c70", +1868 => x"881c0c7a", +1869 => x"88130c58", +1870 => x"535d5653", +1871 => x"fee13980", +1872 => x"d6e40817", +1873 => x"59800876", +1874 => x"2e818b38", +1875 => x"80d79408", +1876 => x"ff2e848e", +1877 => x"38737631", +1878 => x"1980d6e4", +1879 => x"0c738706", +1880 => x"70565372", +1881 => x"802e8838", +1882 => x"88733170", +1883 => x"15555576", +1884 => x"149fff06", +1885 => x"a0807131", +1886 => x"1670547e", +1887 => x"53515386", +1888 => x"9d3f8008", +1889 => x"568008ff", +1890 => x"2e819e38", +1891 => x"80d6e408", +1892 => x"137080d6", +1893 => x"e40c7475", +1894 => x"80d7a00b", +1895 => x"88050c77", +1896 => x"76311581", +1897 => x"07555659", +1898 => x"7a80d7a0", +1899 => x"2e83c038", +1900 => x"798f2682", +1901 => x"ef38810b", +1902 => x"84150c84", +1903 => x"1508fc06", +1904 => x"70793179", +1905 => x"72268f72", +1906 => x"25075d55", +1907 => x"5a7a802e", +1908 => x"fced3880", +1909 => x"db398008", +1910 => x"9fff0655", +1911 => x"74feed38", +1912 => x"7880d6e4", +1913 => x"0c80d7a0", +1914 => x"0b880508", +1915 => x"7a188107", +1916 => x"84120c55", +1917 => x"80d79008", +1918 => x"79278638", +1919 => x"7880d790", +1920 => x"0c80d78c", +1921 => x"087927fc", +1922 => x"a0387880", +1923 => x"d78c0c84", +1924 => x"1508fc06", +1925 => x"70793179", +1926 => x"72268f72", +1927 => x"25075d55", +1928 => x"5a7a802e", +1929 => x"fc993888", +1930 => x"39807457", +1931 => x"53fedd39", +1932 => x"7c5184e9", +1933 => x"3f800b80", +1934 => x"0c8e3d0d", +1935 => x"04807324", +1936 => x"a5387282", +1937 => x"2c81712b", +1938 => x"80d7a408", +1939 => x"077080d7", +1940 => x"a00b8405", +1941 => x"0c5c5a76", +1942 => x"8c170c73", +1943 => x"88170c75", +1944 => x"88180cf9", +1945 => x"fd398313", +1946 => x"70822c81", +1947 => x"712b80d7", +1948 => x"a4080770", +1949 => x"80d7a00b", +1950 => x"84050c5d", +1951 => x"5b53d839", +1952 => x"7a75065c", +1953 => x"7bfc9f38", +1954 => x"84197510", +1955 => x"5659f139", +1956 => x"ff178105", +1957 => x"59f7ab39", +1958 => x"8c150888", +1959 => x"1608718c", +1960 => x"120c8812", +1961 => x"0c597515", +1962 => x"84110881", +1963 => x"0784120c", +1964 => x"587c5183", +1965 => x"e83f8815", +1966 => x"54fba339", +1967 => x"77167881", +1968 => x"0784180c", +1969 => x"8c170888", +1970 => x"1808718c", +1971 => x"120c8812", +1972 => x"0c5c7080", +1973 => x"d7b40c70", +1974 => x"80d7b00c", +1975 => x"80d7a80b", +1976 => x"8c120c8c", +1977 => x"11088812", +1978 => x"0c778107", +1979 => x"84120c77", +1980 => x"0577710c", +1981 => x"557c5183", +1982 => x"a43f8816", +1983 => x"54f5ba39", +1984 => x"72168411", +1985 => x"08810784", +1986 => x"120c588c", +1987 => x"16088817", +1988 => x"08718c12", +1989 => x"0c88120c", +1990 => x"577c5183", +1991 => x"803f8816", +1992 => x"54f59639", +1993 => x"7284150c", +1994 => x"f41af806", +1995 => x"70841d08", +1996 => x"81060784", +1997 => x"1d0c701c", +1998 => x"5556850b", +1999 => x"84150c85", +2000 => x"0b88150c", +2001 => x"8f7627fd", +2002 => x"ab38881b", +2003 => x"527c51eb", +2004 => x"e83f80d7", +2005 => x"a00b8805", +2006 => x"0880d6e4", +2007 => x"085a55fd", +2008 => x"93397880", +2009 => x"d6e40c73", +2010 => x"80d7940c", +2011 => x"fbef3972", +2012 => x"84150cfc", +2013 => x"ff39fb3d", +2014 => x"0d77707a", +2015 => x"7c585553", +2016 => x"568f7527", +2017 => x"80e63872", +2018 => x"76078306", +2019 => x"517080dc", +2020 => x"38757352", +2021 => x"54707084", +2022 => x"05520874", +2023 => x"70840556", +2024 => x"0c737170", +2025 => x"84055308", +2026 => x"71708405", +2027 => x"530c7170", +2028 => x"84055308", +2029 => x"71708405", +2030 => x"530c7170", +2031 => x"84055308", +2032 => x"71708405", +2033 => x"530cf016", +2034 => x"5654748f", +2035 => x"26c73883", +2036 => x"75279538", +2037 => x"70708405", +2038 => x"52087470", +2039 => x"8405560c", +2040 => x"fc155574", +2041 => x"8326ed38", +2042 => x"73715452", +2043 => x"ff155170", +2044 => x"ff2e9838", +2045 => x"72708105", +2046 => x"54337270", +2047 => x"81055434", +2048 => x"ff115170", +2049 => x"ff2e0981", +2050 => x"06ea3875", +2051 => x"800c873d", +2052 => x"0d04fb3d", +2053 => x"0d777a71", +2054 => x"028c05a3", +2055 => x"05335854", +2056 => x"54568373", +2057 => x"2780d438", +2058 => x"75830651", +2059 => x"7080cc38", +2060 => x"74882b75", +2061 => x"07707190", +2062 => x"2b075551", +2063 => x"8f7327a7", +2064 => x"38737270", +2065 => x"8405540c", +2066 => x"71747170", +2067 => x"8405530c", +2068 => x"74717084", +2069 => x"05530c74", +2070 => x"71708405", +2071 => x"530cf014", +2072 => x"5452728f", +2073 => x"26db3883", +2074 => x"73279038", +2075 => x"73727084", +2076 => x"05540cfc", +2077 => x"13537283", +2078 => x"26f238ff", +2079 => x"135170ff", +2080 => x"2e933874", +2081 => x"72708105", +2082 => x"5434ff11", +2083 => x"5170ff2e", +2084 => x"098106ef", +2085 => x"3875800c", +2086 => x"873d0d04", +2087 => x"04047070", +2088 => x"7070800b", +2089 => x"80dfe00c", +2090 => x"765184f3", +2091 => x"3f800853", +2092 => x"8008ff2e", +2093 => x"89387280", +2094 => x"0c505050", +2095 => x"500480df", +2096 => x"e0085473", +2097 => x"802eef38", +2098 => x"7574710c", +2099 => x"5272800c", +2100 => x"50505050", +2101 => x"04f93d0d", +2102 => x"797c557b", +2103 => x"548e1122", +2104 => x"70902b70", +2105 => x"902c5557", +2106 => x"80cfe408", +2107 => x"53585683", +2108 => x"f63f8008", +2109 => x"57800b80", +2110 => x"08249338", +2111 => x"80d01608", +2112 => x"80080580", +2113 => x"d0170c76", +2114 => x"800c893d", +2115 => x"0d048c16", +2116 => x"2283dfff", +2117 => x"0655748c", +2118 => x"17237680", +2119 => x"0c893d0d", +2120 => x"04fa3d0d", +2121 => x"788c1122", +2122 => x"70882a70", +2123 => x"81065157", +2124 => x"585674a9", +2125 => x"388c1622", +2126 => x"83dfff06", +2127 => x"55748c17", +2128 => x"237a5479", +2129 => x"538e1622", +2130 => x"70902b70", +2131 => x"902c5456", +2132 => x"80cfe408", +2133 => x"525681b2", +2134 => x"3f883d0d", +2135 => x"04825480", +2136 => x"538e1622", +2137 => x"70902b70", +2138 => x"902c5456", +2139 => x"80cfe408", +2140 => x"525782bb", +2141 => x"3f8c1622", +2142 => x"83dfff06", +2143 => x"55748c17", +2144 => x"237a5479", +2145 => x"538e1622", +2146 => x"70902b70", +2147 => x"902c5456", +2148 => x"80cfe408", +2149 => x"525680f2", +2150 => x"3f883d0d", +2151 => x"04f93d0d", +2152 => x"797c557b", +2153 => x"548e1122", +2154 => x"70902b70", +2155 => x"902c5557", +2156 => x"80cfe408", +2157 => x"53585681", +2158 => x"f63f8008", +2159 => x"578008ff", +2160 => x"2e99388c", +2161 => x"1622a080", +2162 => x"0755748c", +2163 => x"17238008", +2164 => x"80d0170c", +2165 => x"76800c89", +2166 => x"3d0d048c", +2167 => x"162283df", +2168 => x"ff065574", +2169 => x"8c172376", +2170 => x"800c893d", +2171 => x"0d047070", +2172 => x"70748e11", +2173 => x"2270902b", +2174 => x"70902c55", +2175 => x"51515380", +2176 => x"cfe40851", +2177 => x"bd3f5050", +2178 => x"5004fb3d", +2179 => x"0d800b80", +2180 => x"dfe00c7a", +2181 => x"53795278", +2182 => x"5182ff3f", +2183 => x"80085580", +2184 => x"08ff2e88", +2185 => x"3874800c", +2186 => x"873d0d04", +2187 => x"80dfe008", +2188 => x"5675802e", +2189 => x"f0387776", +2190 => x"710c5474", +2191 => x"800c873d", +2192 => x"0d047070", +2193 => x"7070800b", +2194 => x"80dfe00c", +2195 => x"765184cc", +2196 => x"3f800853", +2197 => x"8008ff2e", +2198 => x"89387280", +2199 => x"0c505050", +2200 => x"500480df", +2201 => x"e0085473", +2202 => x"802eef38", +2203 => x"7574710c", +2204 => x"5272800c", +2205 => x"50505050", +2206 => x"04fc3d0d", +2207 => x"800b80df", +2208 => x"e00c7852", +2209 => x"775187b3", +2210 => x"3f800854", +2211 => x"8008ff2e", +2212 => x"88387380", +2213 => x"0c863d0d", +2214 => x"0480dfe0", +2215 => x"08557480", +2216 => x"2ef03876", +2217 => x"75710c53", +2218 => x"73800c86", +2219 => x"3d0d04fb", +2220 => x"3d0d800b", +2221 => x"80dfe00c", +2222 => x"7a537952", +2223 => x"7851848e", +2224 => x"3f800855", +2225 => x"8008ff2e", +2226 => x"88387480", +2227 => x"0c873d0d", +2228 => x"0480dfe0", +2229 => x"08567580", +2230 => x"2ef03877", +2231 => x"76710c54", +2232 => x"74800c87", +2233 => x"3d0d04fb", +2234 => x"3d0d800b", +2235 => x"80dfe00c", +2236 => x"7a537952", +2237 => x"78518296", +2238 => x"3f800855", +2239 => x"8008ff2e", +2240 => x"88387480", +2241 => x"0c873d0d", +2242 => x"0480dfe0", +2243 => x"08567580", +2244 => x"2ef03877", +2245 => x"76710c54", +2246 => x"74800c87", +2247 => x"3d0d0470", +2248 => x"707080df", +2249 => x"d0088938", +2250 => x"80dfe40b", +2251 => x"80dfd00c", +2252 => x"80dfd008", +2253 => x"75115252", +2254 => x"ff537087", +2255 => x"fb808026", +2256 => x"88387080", +2257 => x"dfd00c71", +2258 => x"5372800c", +2259 => x"50505004", +2260 => x"fd3d0d80", +2261 => x"0b80cfd8", +2262 => x"08545472", +2263 => x"812e9b38", +2264 => x"7380dfd4", +2265 => x"0cc2bf3f", +2266 => x"c1963f80", +2267 => x"dfa85281", +2268 => x"51c3fd3f", +2269 => x"80085186", +2270 => x"c23f7280", +2271 => x"dfd40cc2", +2272 => x"a53fc0fc", +2273 => x"3f80dfa8", +2274 => x"528151c3", +2275 => x"e33f8008", +2276 => x"5186a83f", +2277 => x"00ff3900", +2278 => x"ff39f53d", +2279 => x"0d7e6080", +2280 => x"dfd40870", +2281 => x"5b585b5b", +2282 => x"7580c238", +2283 => x"777a25a1", +2284 => x"38771b70", +2285 => x"337081ff", +2286 => x"06585859", +2287 => x"758a2e98", +2288 => x"387681ff", +2289 => x"0651c1bd", +2290 => x"3f811858", +2291 => x"797824e1", +2292 => x"3879800c", +2293 => x"8d3d0d04", +2294 => x"8d51c1a9", +2295 => x"3f783370", +2296 => x"81ff0652", +2297 => x"57c19e3f", +2298 => x"811858e0", +2299 => x"3979557a", +2300 => x"547d5385", +2301 => x"528d3dfc", +2302 => x"0551c0c6", +2303 => x"3f800856", +2304 => x"85b23f7b", +2305 => x"80080c75", +2306 => x"800c8d3d", +2307 => x"0d04f63d", +2308 => x"0d7d7f80", +2309 => x"dfd40870", +2310 => x"5b585a5a", +2311 => x"7580c138", +2312 => x"777925b3", +2313 => x"38c0b93f", +2314 => x"800881ff", +2315 => x"06708d32", +2316 => x"7030709f", +2317 => x"2a515157", +2318 => x"57768a2e", +2319 => x"80c43875", +2320 => x"802ebf38", +2321 => x"771a5676", +2322 => x"76347651", +2323 => x"c0b73f81", +2324 => x"18587878", +2325 => x"24cf3877", +2326 => x"5675800c", +2327 => x"8c3d0d04", +2328 => x"78557954", +2329 => x"7c538452", +2330 => x"8c3dfc05", +2331 => x"51ffbfd2", +2332 => x"3f800856", +2333 => x"84be3f7a", +2334 => x"80080c75", +2335 => x"800c8c3d", +2336 => x"0d04771a", +2337 => x"598a7934", +2338 => x"8118588d", +2339 => x"51ffbff5", +2340 => x"3f8a51ff", +2341 => x"bfef3f77", +2342 => x"56ffbe39", +2343 => x"fb3d0d80", +2344 => x"dfd40870", +2345 => x"56547388", +2346 => x"3874800c", +2347 => x"873d0d04", +2348 => x"77538352", +2349 => x"873dfc05", +2350 => x"51ffbf86", +2351 => x"3f800854", +2352 => x"83f23f75", +2353 => x"80080c73", +2354 => x"800c873d", +2355 => x"0d04fa3d", +2356 => x"0d80dfd4", +2357 => x"08802ea3", +2358 => x"387a5579", +2359 => x"54785386", +2360 => x"52883dfc", +2361 => x"0551ffbe", +2362 => x"d93f8008", +2363 => x"5683c53f", +2364 => x"7680080c", +2365 => x"75800c88", +2366 => x"3d0d0483", +2367 => x"b73f9d0b", +2368 => x"80080cff", +2369 => x"0b800c88", +2370 => x"3d0d04f7", +2371 => x"3d0d7b7d", +2372 => x"5b59bc53", +2373 => x"80527951", +2374 => x"f5f83f80", +2375 => x"70565798", +2376 => x"56741970", +2377 => x"3370782b", +2378 => x"79078118", +2379 => x"f81a5a58", +2380 => x"59555884", +2381 => x"7524ea38", +2382 => x"767a2384", +2383 => x"19588070", +2384 => x"56579856", +2385 => x"74187033", +2386 => x"70782b79", +2387 => x"078118f8", +2388 => x"1a5a5859", +2389 => x"51548475", +2390 => x"24ea3876", +2391 => x"821b2388", +2392 => x"19588070", +2393 => x"56579856", +2394 => x"74187033", +2395 => x"70782b79", +2396 => x"078118f8", +2397 => x"1a5a5859", +2398 => x"51548475", +2399 => x"24ea3876", +2400 => x"841b0c8c", +2401 => x"19588070", +2402 => x"56579856", +2403 => x"74187033", +2404 => x"70782b79", +2405 => x"078118f8", +2406 => x"1a5a5859", +2407 => x"51548475", +2408 => x"24ea3876", +2409 => x"881b2390", +2410 => x"19588070", +2411 => x"56579856", +2412 => x"74187033", +2413 => x"70782b79", +2414 => x"078118f8", +2415 => x"1a5a5859", +2416 => x"51548475", +2417 => x"24ea3876", +2418 => x"8a1b2394", +2419 => x"19588070", +2420 => x"56579856", +2421 => x"74187033", +2422 => x"70782b79", +2423 => x"078118f8", +2424 => x"1a5a5859", +2425 => x"51548475", +2426 => x"24ea3876", +2427 => x"8c1b2398", +2428 => x"19588070", +2429 => x"56579856", +2430 => x"74187033", +2431 => x"70782b79", +2432 => x"078118f8", +2433 => x"1a5a5859", +2434 => x"51548475", +2435 => x"24ea3876", +2436 => x"8e1b239c", +2437 => x"19588070", +2438 => x"5657b856", +2439 => x"74187033", +2440 => x"70782b79", +2441 => x"078118f8", +2442 => x"1a5a5859", +2443 => x"5a548875", +2444 => x"24ea3876", +2445 => x"901b0c8b", +2446 => x"3d0d04e9", +2447 => x"3d0d6a80", +2448 => x"dfd40857", +2449 => x"57759338", +2450 => x"80c0800b", +2451 => x"84180c75", +2452 => x"ac180c75", +2453 => x"800c993d", +2454 => x"0d04893d", +2455 => x"70556a54", +2456 => x"558a5299", +2457 => x"3dffbc05", +2458 => x"51ffbbd6", +2459 => x"3f800877", +2460 => x"53755256", +2461 => x"fd953fbc", +2462 => x"3f778008", +2463 => x"0c75800c", +2464 => x"993d0d04", +2465 => x"fc3d0d81", +2466 => x"5480dfd4", +2467 => x"08883873", +2468 => x"800c863d", +2469 => x"0d047653", +2470 => x"97b95286", +2471 => x"3dfc0551", +2472 => x"ffbb9f3f", +2473 => x"8008548c", +2474 => x"3f748008", +2475 => x"0c73800c", +2476 => x"863d0d04", +2477 => x"80cfe408", +2478 => x"800c04f7", +2479 => x"3d0d7b80", +2480 => x"cfe40882", +2481 => x"c811085a", +2482 => x"545a7780", +2483 => x"2e80da38", +2484 => x"81881884", +2485 => x"1908ff05", +2486 => x"81712b59", +2487 => x"55598074", +2488 => x"2480ea38", +2489 => x"807424b5", +2490 => x"3873822b", +2491 => x"78118805", +2492 => x"56568180", +2493 => x"19087706", +2494 => x"5372802e", +2495 => x"b6387816", +2496 => x"70085353", +2497 => x"79517408", +2498 => x"53722dff", +2499 => x"14fc17fc", +2500 => x"1779812c", +2501 => x"5a575754", +2502 => x"738025d6", +2503 => x"38770858", +2504 => x"77ffad38", +2505 => x"80cfe408", +2506 => x"53bc1308", +2507 => x"a5387951", +2508 => x"f8e23f74", +2509 => x"0853722d", +2510 => x"ff14fc17", +2511 => x"fc177981", +2512 => x"2c5a5757", +2513 => x"54738025", +2514 => x"ffa838d1", +2515 => x"398057ff", +2516 => x"93397251", +2517 => x"bc130854", +2518 => x"732d7951", +2519 => x"f8b63f70", +2520 => x"7080dfb0", +2521 => x"0bfc0570", +2522 => x"08525270", +2523 => x"ff2e9138", +2524 => x"702dfc12", +2525 => x"70085252", +2526 => x"70ff2e09", +2527 => x"8106f138", +2528 => x"50500404", +2529 => x"ffbb8c3f", +2530 => x"04000000", +2531 => x"00000040", +2532 => x"48656c6c", +2533 => x"6f20776f", +2534 => x"726c6420", +2535 => x"310a0000", +2536 => x"48656c6c", +2537 => x"6f20776f", +2538 => x"726c6420", +2539 => x"320a0000", +2540 => x"0a000000", +2541 => x"43000000", +2542 => x"64756d6d", +2543 => x"792e6578", +2544 => x"65000000", +2545 => x"00ffffff", +2546 => x"ff00ffff", +2547 => x"ffff00ff", +2548 => x"ffffff00", +2549 => x"00000000", +2550 => x"00000000", +2551 => x"00000000", +2552 => x"00002fb8", +2553 => x"000027e8", +2554 => x"00000000", +2555 => x"00002a50", +2556 => x"00002aac", +2557 => x"00002b08", +2558 => x"00000000", +2559 => x"00000000", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"000027b4", +2568 => x"00000000", +2569 => x"00000000", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000001", +2597 => x"330eabcd", +2598 => x"1234e66d", +2599 => x"deec0005", +2600 => x"000b0000", +2601 => x"00000000", +2602 => x"00000000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", 2659 => x"00000000", 2660 => x"00000000", 2661 => x"00000000", -2662 => x"00003170", -2663 => x"000029a0", +2662 => x"00000000", +2663 => x"00000000", 2664 => x"00000000", -2665 => x"00002c08", -2666 => x"00002c64", -2667 => x"00002cc0", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", 2668 => x"00000000", 2669 => x"00000000", 2670 => x"00000000", @@ -2702,7 +2703,7 @@ shared variable ram : ram_type := 2674 => x"00000000", 2675 => x"00000000", 2676 => x"00000000", -2677 => x"0000296c", +2677 => x"00000000", 2678 => x"00000000", 2679 => x"00000000", 2680 => x"00000000", @@ -2731,11 +2732,11 @@ shared variable ram : ram_type := 2703 => x"00000000", 2704 => x"00000000", 2705 => x"00000000", -2706 => x"00000001", -2707 => x"330eabcd", -2708 => x"1234e66d", -2709 => x"deec0005", -2710 => x"000b0000", +2706 => x"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", 2711 => x"00000000", 2712 => x"00000000", 2713 => x"00000000", @@ -2814,121 +2815,121 @@ shared variable ram : ram_type := 2786 => x"00000000", 2787 => x"00000000", 2788 => x"00000000", -2789 => x"00000000", +2789 => x"ffffffff", 2790 => x"00000000", -2791 => x"00000000", +2791 => x"00020000", 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", +2794 => x"00002ba0", +2795 => x"00002ba0", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", 2904 => x"00002d58", 2905 => x"00002d58", 2906 => x"00002d60", @@ -3075,133 +3076,25 @@ shared variable ram : ram_type := 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", +3050 => x"000027b8", +3051 => x"ffffffff", +3052 => x"00000000", +3053 => x"ffffffff", +3054 => x"00000000", others => x"00000000" ); begin -process (clk) +mem_busy<=mem_readEnable; -- we're done on the cycle after we serve the read request + +process (clk, areset) 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 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; if (mem_readEnable = '1') then mem_read <= ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))); end if; diff --git a/zpu/hdl/zpu4/src/fasthello.do b/zpu/hdl/zpu4/src/fasthello.do new file mode 100644 index 0000000..d49aeab --- /dev/null +++ b/zpu/hdl/zpu4/src/fasthello.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_hello.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/io.vhd b/zpu/hdl/zpu4/src/io.vhd index b5465d1..7dbe36f 100644 --- a/zpu/hdl/zpu4/src/io.vhd +++ b/zpu/hdl/zpu4/src/io.vhd @@ -19,8 +19,8 @@ entity zpu_io is 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); + write : in std_logic_vector(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 downto 0); addr : in std_logic_vector(maxAddrBit downto minAddrBit) ); end zpu_io; @@ -45,7 +45,7 @@ begin clk => clk, areset => areset, we => timer_we, - din => write, + din => write(7 downto 0), adr => addr(4 downto 2), dout => timer_read); @@ -60,7 +60,7 @@ begin -- timer_we <= '0'; if writeEnable = '1' then -- external interface - if addr=x"1000" then + if addr=x"2028003" then -- Write to UART -- report "" & character'image(conv_integer(memBint)) severity note; print(l_file, character'val(conv_integer(write))); @@ -68,20 +68,25 @@ begin -- report "xxx" severity failure; -- timer_we <= '1'; else - report "Illegal IO write" severity failure; + print(l_file, character'val(conv_integer(write))); + report "Illegal IO write" severity warning; end if; end if; - read <= (others => 'U'); + read <= (others => '0'); if (readEnable = '1') then if addr=x"1001" then read <= (0=>'1', others => '0'); -- recieve empty elsif addr(12)='1' then - read <= timer_read; + read(7 downto 0) <= timer_read; elsif addr(11)='1' then - read <= ZPU_Frequency; + read(7 downto 0) <= ZPU_Frequency; + elsif addr=x"2028003" then + read <= (others => '0'); else - report "Illegal IO read" severity failure; + read <= (others => '0'); + read(8) <= '1'; + report "Illegal IO read" severity warning; end if; end if; end if; diff --git a/zpu/hdl/zpu4/src/log.txt b/zpu/hdl/zpu4/src/log.txt index af58c93..10f0eaa 100644 --- a/zpu/hdl/zpu4/src/log.txt +++ b/zpu/hdl/zpu4/src/log.txt @@ -11,10 +11,10 @@ l d 1 + - - + H @@ -30,10 +30,10 @@ l d 2 + - - + H @@ -49,10 +49,10 @@ l d 1 + - - + H @@ -68,10 +68,10 @@ l d 2 + - - + H @@ -87,10 +87,10 @@ l d 1 + - - + H @@ -106,10 +106,10 @@ l d 2 + - - + H @@ -125,10 +125,10 @@ l d 1 + - - + H @@ -144,10 +144,10 @@ l d 2 + - - + H @@ -163,10 +163,10 @@ l d 1 + - - + H @@ -182,10 +182,10 @@ l d 2 + - - + H @@ -201,10 +201,10 @@ l d 1 + - - + H @@ -220,10 +220,10 @@ l d 2 + - - + H @@ -239,10 +239,10 @@ l d 1 + - - + H @@ -258,10 +258,10 @@ l d 2 + - - + H @@ -277,10 +277,10 @@ l d 1 + - - + H @@ -296,85 +296,10 @@ 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/sim_fpga_top.vhd b/zpu/hdl/zpu4/src/sim_fpga_top.vhd index 2905505..4defc82 100644 --- a/zpu/hdl/zpu4/src/sim_fpga_top.vhd +++ b/zpu/hdl/zpu4/src/sim_fpga_top.vhd @@ -52,8 +52,8 @@ component zpu_io is 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); + write : in std_logic_vector(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 downto 0); addr : in std_logic_vector(maxAddrBit downto minAddrBit) ); end component; @@ -82,7 +82,7 @@ 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_read : std_logic_vector(wordSize-1 downto 0); signal io_mem_writeEnable : std_logic; signal io_mem_readEnable : std_logic; @@ -131,7 +131,7 @@ begin busy => io_busy, writeEnable => io_mem_writeEnable, readEnable => io_mem_readEnable, - write => mem_write(7 downto 0), + write => mem_write(wordSize-1 downto 0), read => io_mem_read, addr => mem_addr(maxAddrBit downto minAddrBit) ); @@ -154,8 +154,7 @@ begin end if; if io_ready='1' then - mem_read <= (others => '0'); - mem_read(7 downto 0) <= io_mem_read; + mem_read <= io_mem_read; end if; end process; diff --git a/zpu/hdl/zpu4/src/simzpu.do b/zpu/hdl/zpu4/src/simzpu.do deleted file mode 100644 index e6e3068..0000000 --- a/zpu/hdl/zpu4/src/simzpu.do +++ /dev/null @@ -1,23 +0,0 @@ -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 deleted file mode 100644 index cec4873..0000000 --- a/zpu/hdl/zpu4/src/simzpu_intstack.do +++ /dev/null @@ -1,23 +0,0 @@ -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/simzpu_medium.do b/zpu/hdl/zpu4/src/simzpu_medium.do new file mode 100644 index 0000000..a6c1fe2 --- /dev/null +++ b/zpu/hdl/zpu4/src/simzpu_medium.do @@ -0,0 +1,28 @@ +# Xilinx WebPack modelsim script +# +# cd C:/workspace/zpu/zpu/hdl/zpu4/src +# do simzpu_medium.do + +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_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 1000 ms diff --git a/zpu/hdl/zpu4/src/zpu_config_trace.vhd b/zpu/hdl/zpu4/src/zpu_config_trace.vhd index d1bbbbb..a2d7d9d 100644 --- a/zpu/hdl/zpu4/src/zpu_config_trace.vhd +++ b/zpu/hdl/zpu4/src/zpu_config_trace.vhd @@ -5,11 +5,13 @@ use ieee.std_logic_unsigned.all; package zpu_config is constant Generate_Trace : boolean := true; - constant wordPower : integer := 5; + 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; + constant maxAddrBitIncIO : integer := 27; + constant maxAddrBitDRAM : integer := 16; + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8"; end zpu_config; diff --git a/zpu/hdl/zpu4/src/zpu_core.vhd b/zpu/hdl/zpu4/src/zpu_core.vhd index c7093e2..a603fe9 100644 --- a/zpu/hdl/zpu4/src/zpu_core.vhd +++ b/zpu/hdl/zpu4/src/zpu_core.vhd @@ -210,9 +210,7 @@ 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'); + sp <= spStart(maxAddrBitIncIO downto minAddrBit); pc <= (others => '0'); idim_flag <= '0'; diff --git a/zpu/hdl/zpu4/src/zpu_core_small.vhd b/zpu/hdl/zpu4/src/zpu_core_small.vhd index 4d73f88..8ebd40d 100644 --- a/zpu/hdl/zpu4/src/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/src/zpu_core_small.vhd @@ -27,6 +27,19 @@ end zpu_core; architecture behave of zpu_core is +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; + + signal readIO : std_logic; diff --git a/zpu/hdl/zpu4/src/zpuio.vhd b/zpu/hdl/zpu4/src/zpuio.vhd index d14629e..09a1ddd 100644 --- a/zpu/hdl/zpu4/src/zpuio.vhd +++ b/zpu/hdl/zpu4/src/zpuio.vhd @@ -115,30 +115,6 @@ ram_imp: dram port map ( 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) @@ -158,7 +134,7 @@ ram_imp: dram port map ( end if; if io_writeEnable = '1' then - if io_addr=x"1000" then + if io_addr=x"2028003" then -- Write to UART uartData <= mem_write(7 downto 0); uartTXPending <= '1'; @@ -167,11 +143,11 @@ ram_imp: dram port map ( timer_we <= '1'; io_busy <= '1'; else - report "Illegal IO write" severity failure; +-- report "Illegal IO write" severity failure; end if; end if; if (io_readEnable = '1') then - if io_addr=x"1001" then + if io_addr=x"2028003" then io_read <= (0=>'1', -- recieve empty 1 => uartTXPending, -- tx full others => '0'); @@ -183,7 +159,7 @@ ram_imp: dram port map ( io_read <= ZPU_Frequency; io_busy <= '1'; else - report "Illegal IO read" severity failure; +-- report "Illegal IO read" severity failure; end if; else diff --git a/zpu/hdl/zpu4/src/zpupkg.vhd b/zpu/hdl/zpu4/src/zpupkg.vhd index 30c3e46..fd00b9e 100644 --- a/zpu/hdl/zpu4/src/zpupkg.vhd +++ b/zpu/hdl/zpu4/src/zpupkg.vhd @@ -23,17 +23,6 @@ package zpupkg is 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; diff --git a/zpu/hdl/zpu4/test/dmips/build.sh b/zpu/hdl/zpu4/test/dmips/build.sh index 51ff3de..161c748 100644 --- a/zpu/hdl/zpu4/test/dmips/build.sh +++ b/zpu/hdl/zpu4/test/dmips/build.sh @@ -1,3 +1,4 @@ zpu-elf-gcc -DTIME $ZPUDIR/dhrystone/dhry_*.c -O3 -Wl,--gc-sections -Wl,--relax -abel -o dmips.elf zpu-elf-objdump --disassemble-all >dmips.dis dmips.elf zpu-elf-objcopy -O binary dmips.elf dmips.bin +java -classpath ../../../../sw/simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam dmips.bin >dmips.ram diff --git a/zpu/hdl/zpu4/test/dmips/dmips.ram b/zpu/hdl/zpu4/test/dmips/dmips.ram index 27b991d..89047d5 100644 --- a/zpu/hdl/zpu4/test/dmips/dmips.ram +++ b/zpu/hdl/zpu4/test/dmips/dmips.ram @@ -1,14 +1,14 @@ 0 => x"0b0b0b0b", 1 => x"80700b0b", -2 => x"80dde00c", -3 => x"3a0b0b0b", -4 => x"b9990400", +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"0bb9e02d", +10 => x"80c7c32d", 11 => x"880c840c", 12 => x"800c0400", 13 => x"00000000", @@ -159,8 +159,8 @@ 158 => x"00000000", 159 => x"00000000", 160 => x"71fc0608", -161 => x"0b0b80dd", -162 => x"cc738306", +161 => x"0b0b80e2", +162 => x"90738306", 163 => x"10100508", 164 => x"060b0b0b", 165 => x"88aa0400", @@ -168,16 +168,16 @@ 167 => x"00000000", 168 => x"80088408", 169 => x"88087575", -170 => x"0b0b0ba1", -171 => x"c92d5050", +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"0b0b0ba2", -179 => x"8d2d5050", +178 => x"0b0b0baf", +179 => x"f02d5050", 180 => x"80085688", 181 => x"0c840c80", 182 => x"0c510400", @@ -207,7 +207,7 @@ 206 => x"00000000", 207 => x"00000000", 208 => x"810b0b0b", -209 => x"80dddc0c", +209 => x"80e2a00c", 210 => x"51040000", 211 => x"00000000", 212 => x"00000000", @@ -255,7 +255,7 @@ 254 => x"00000000", 255 => x"00000000", 256 => x"83d93f80", -257 => x"c78e3f04", +257 => x"cbcf3f04", 258 => x"10101010", 259 => x"10101010", 260 => x"10101010", @@ -279,7 +279,7 @@ 278 => x"72ed3851", 279 => x"51535104", 280 => x"ff3d0d0b", -281 => x"0b80edd0", +281 => x"0b80f294", 282 => x"08528412", 283 => x"08708106", 284 => x"515170f6", @@ -287,44 +287,44 @@ 286 => x"ff06800c", 287 => x"833d0d04", 288 => x"ff3d0d0b", -289 => x"0b80edd0", +289 => x"0b80f294", 290 => x"08528412", 291 => x"08700a10", 292 => x"0a708106", 293 => x"51515170", 294 => x"f1387372", 295 => x"0c833d0d", -296 => x"0480dddc", +296 => x"0480e2a0", 297 => x"08802ea8", 298 => x"38838080", 299 => x"0b0b0b80", -300 => x"edd00c82", +300 => x"f2940c82", 301 => x"a0800b0b", -302 => x"0b80edd4", +302 => x"0b80f298", 303 => x"0c829080", -304 => x"0b80ede4", +304 => x"0b80f2a8", 305 => x"0c0b0b80", -306 => x"edd80b80", -307 => x"ede80c04", +306 => x"f29c0b80", +307 => x"f2ac0c04", 308 => x"f8808080", 309 => x"a40b0b0b", -310 => x"80edd00c", +310 => x"80f2940c", 311 => x"f8808082", 312 => x"800b0b0b", -313 => x"80edd40c", +313 => x"80f2980c", 314 => x"f8808084", -315 => x"800b80ed", -316 => x"e40cf880", +315 => x"800b80f2", +316 => x"a80cf880", 317 => x"8080940b", -318 => x"80ede80c", +318 => x"80f2ac0c", 319 => x"f8808080", -320 => x"9c0b80ed", -321 => x"e00cf880", +320 => x"9c0b80f2", +321 => x"a40cf880", 322 => x"8080a00b", -323 => x"80edec0c", +323 => x"80f2b00c", 324 => x"04f23d0d", 325 => x"600b0b80", -326 => x"edd40856", +326 => x"f2980856", 327 => x"5d82750c", 328 => x"8059805a", 329 => x"800b8f3d", @@ -334,7 +334,7 @@ 333 => x"81ff067c", 334 => x"832b5658", 335 => x"5276537b", -336 => x"5196bc3f", +336 => x"519af33f", 337 => x"7d7f7a72", 338 => x"077c7207", 339 => x"71716081", @@ -342,14 +342,14 @@ 341 => x"5b595755", 342 => x"7a8724bb", 343 => x"380b0b80", -344 => x"edd4087b", +344 => x"f298087b", 345 => x"10101170", 346 => x"08585155", 347 => x"807681ff", 348 => x"067c832b", 349 => x"56585276", -350 => x"537b5196", -351 => x"823f7d7f", +350 => x"537b519a", +351 => x"b93f7d7f", 352 => x"7a72077c", 353 => x"72077171", 354 => x"60810541", @@ -360,28 +360,28 @@ 359 => x"1e0c7c80", 360 => x"0c903d0d", 361 => x"04ff3d0d", -362 => x"80eddc33", +362 => x"80f2a033", 363 => x"5170a738", -364 => x"80dde808", +364 => x"80e2ac08", 365 => x"70085252", 366 => x"70802e94", 367 => x"38841280", -368 => x"dde80c70", -369 => x"2d80dde8", +368 => x"e2ac0c70", +369 => x"2d80e2ac", 370 => x"08700852", 371 => x"5270ee38", -372 => x"810b80ed", -373 => x"dc34833d", +372 => x"810b80f2", +373 => x"a034833d", 374 => x"0d040480", 375 => x"3d0d0b0b", -376 => x"80edcc08", +376 => x"80f29008", 377 => x"802e8e38", 378 => x"0b0b0b0b", 379 => x"800b802e", 380 => x"09810685", 381 => x"38823d0d", 382 => x"040b0b80", -383 => x"edcc510b", +383 => x"f290510b", 384 => x"0b0bf3fc", 385 => x"3f823d0d", 386 => x"0404ff3d", @@ -477,116 +477,116 @@ 476 => x"56758024", 477 => x"fef338fe", 478 => x"8f398a52", -479 => x"7351938d", +479 => x"7351a0f0", 480 => x"3f80080b", -481 => x"0b80cfc0", +481 => x"0b80d484", 482 => x"05337670", 483 => x"81055834", 484 => x"8a527351", -485 => x"92b33f80", +485 => x"a0963f80", 486 => x"08548008", 487 => x"802effac", 488 => x"388a5273", -489 => x"5192e63f", +489 => x"51a0c93f", 490 => x"80080b0b", -491 => x"80cfc005", +491 => x"80d48405", 492 => x"33767081", 493 => x"0558348a", -494 => x"52735192", -495 => x"8c3f8008", +494 => x"5273519f", +495 => x"ef3f8008", 496 => x"548008ff", 497 => x"b538ff84", 498 => x"39745276", 499 => x"53b43dff", -500 => x"b8055190", -501 => x"ff3fa33d", +500 => x"b8055195", +501 => x"b63fa33d", 502 => x"0856fed9", 503 => x"39803d0d", 504 => x"80c10b81", -505 => x"bc9c3480", -506 => x"0b81bdf4", +505 => x"c0f43480", +506 => x"0b81c2d0", 507 => x"0c70800c", 508 => x"823d0d04", 509 => x"ff3d0d80", -510 => x"0b81bc9c", +510 => x"0b81c0f4", 511 => x"33525270", 512 => x"80c12e99", -513 => x"387181bd", -514 => x"f4080781", -515 => x"bdf40c80", -516 => x"c20b81bc", -517 => x"a0347080", +513 => x"387181c2", +514 => x"d0080781", +515 => x"c2d00c80", +516 => x"c20b81c0", +517 => x"f8347080", 518 => x"0c833d0d", 519 => x"04810b81", -520 => x"bdf40807", -521 => x"81bdf40c", +520 => x"c2d00807", +521 => x"81c2d00c", 522 => x"80c20b81", -523 => x"bca03470", +523 => x"c0f83470", 524 => x"800c833d", 525 => x"0d04fd3d", 526 => x"0d757008", 527 => x"8a055353", -528 => x"81bc9c33", +528 => x"81c0f433", 529 => x"517080c1", 530 => x"2e8b3873", 531 => x"f3387080", 532 => x"0c853d0d", 533 => x"04ff1270", -534 => x"81bc9808", +534 => x"81c0f008", 535 => x"31740c80", 536 => x"0c853d0d", 537 => x"04fc3d0d", -538 => x"81bca408", +538 => x"81c0fc08", 539 => x"5574802e", 540 => x"8c387675", 541 => x"08710c81", -542 => x"bca40856", +542 => x"c0fc0856", 543 => x"548c1553", -544 => x"81bc9808", -545 => x"528a518d", -546 => x"b83f7380", +544 => x"81c0f008", +545 => x"528a5190", +546 => x"f03f7380", 547 => x"0c863d0d", 548 => x"04fb3d0d", 549 => x"77700856", 550 => x"56b05381", -551 => x"bca40852", -552 => x"74519ed1", +551 => x"c0fc0852", +552 => x"7451acb4", 553 => x"3f850b8c", 554 => x"170c850b", 555 => x"8c160c75", 556 => x"08750c81", -557 => x"bca40854", +557 => x"c0fc0854", 558 => x"73802e8a", 559 => x"38730875", -560 => x"0c81bca4", +560 => x"0c81c0fc", 561 => x"08548c14", -562 => x"5381bc98", +562 => x"5381c0f0", 563 => x"08528a51", -564 => x"8cef3f84", +564 => x"90a73f84", 565 => x"1508ad38", 566 => x"860b8c16", 567 => x"0c881552", 568 => x"88160851", -569 => x"8bfb3f81", -570 => x"bca40870", +569 => x"8fb33f81", +570 => x"c0fc0870", 571 => x"08760c54", 572 => x"8c157054", 573 => x"548a5273", -574 => x"08518cc5", +574 => x"08518ffd", 575 => x"3f73800c", 576 => x"873d0d04", 577 => x"750854b0", 578 => x"53735275", -579 => x"519de63f", +579 => x"51abc93f", 580 => x"73800c87", -581 => x"3d0d04e1", +581 => x"3d0d04d9", 582 => x"3d0db051", -583 => x"91883f80", -584 => x"0881bc94", -585 => x"0cb05190", -586 => x"fd3f8008", -587 => x"81bca40c", -588 => x"81bc9408", +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", @@ -594,2838 +594,2838 @@ 593 => x"0ca80b80", 594 => x"088c050c", 595 => x"9f530b0b", -596 => x"80cfcc52", +596 => x"80d49052", 597 => x"80089005", -598 => x"519d9a3f", -599 => x"993d5c9f", +598 => x"51aafd3f", +599 => x"a13d5e9f", 600 => x"530b0b80", -601 => x"cfec527b", -602 => x"519d8a3f", -603 => x"8a0b80fa", -604 => x"dc0c0b0b", -605 => x"80da9051", +601 => x"d4b0527d", +602 => x"51aaed3f", +603 => x"8a0b80ff", +604 => x"b00c0b0b", +605 => x"80ded451", 606 => x"f9b43f0b", -607 => x"0b80d08c", +607 => x"0b80d4d0", 608 => x"51f9ab3f", -609 => x"0b0b80da", -610 => x"9051f9a2", -611 => x"3f80ddf0", -612 => x"08802e89", -613 => x"aa380b0b", -614 => x"80d0bc51", +609 => x"0b0b80de", +610 => x"d451f9a2", +611 => x"3f80e2b4", +612 => x"08802e8a", +613 => x"cf380b0b", +614 => x"80d58051", 615 => x"f9903f0b", -616 => x"0b80da90", +616 => x"0b80ded4", 617 => x"51f9873f", -618 => x"80ddec08", +618 => x"80e2b008", 619 => x"520b0b80", -620 => x"d0e851f8", -621 => x"f93f8051", -622 => x"aecb3f80", -623 => x"0880edfc", -624 => x"0c810b92", -625 => x"3d5c5880", -626 => x"0b80ddec", -627 => x"082582d5", -628 => x"388e3d5d", -629 => x"80c10b81", -630 => x"bc9c3481", -631 => x"0b81bdf4", -632 => x"0c80c20b", -633 => x"81bca034", -634 => x"825e835a", -635 => x"9f530b0b", -636 => x"80d19852", -637 => x"7a519bfd", -638 => x"3f815f80", -639 => x"7b537c52", -640 => x"558be23f", -641 => x"8008752e", -642 => x"09810683", -643 => x"38815574", -644 => x"81bdf40c", -645 => x"7d705755", -646 => x"748325a1", -647 => x"38741010", -648 => x"15fd0540", -649 => x"a13dffbc", -650 => x"05538352", -651 => x"75518a91", -652 => x"3f811e70", -653 => x"5f705755", -654 => x"837524e1", -655 => x"387f5474", -656 => x"5380ee80", -657 => x"5281bcac", -658 => x"518a863f", -659 => x"81bca408", -660 => x"70085757", -661 => x"b0537652", -662 => x"75519b99", -663 => x"3f850b8c", -664 => x"180c850b", -665 => x"8c170c76", -666 => x"08760c81", -667 => x"bca40855", -668 => x"74802e8a", -669 => x"38740876", -670 => x"0c81bca4", -671 => x"08558c15", -672 => x"5381bc98", -673 => x"08528a51", -674 => x"89b73f84", -675 => x"160887b8", -676 => x"38860b8c", -677 => x"170c8816", -678 => x"52881708", -679 => x"5188c23f", -680 => x"81bca408", -681 => x"7008770c", -682 => x"578c1670", -683 => x"54558a52", -684 => x"74085189", -685 => x"8c3f80c1", -686 => x"0b81bca0", -687 => x"33565675", -688 => x"7526a238", -689 => x"80c35275", -690 => x"5189f03f", -691 => x"80087f2e", -692 => x"87b13881", -693 => x"167081ff", -694 => x"0681bca0", -695 => x"33525755", -696 => x"747627e0", -697 => x"38797e29", -698 => x"60705471", -699 => x"5358558b", -700 => x"d83f8008", -701 => x"5e747731", -702 => x"70872980", -703 => x"08318008", -704 => x"8a0581bc", -705 => x"9c3381bc", -706 => x"98085a5a", -707 => x"525b5576", -708 => x"80c12e87", -709 => x"9d3878f7", -710 => x"38811858", -711 => x"80ddec08", -712 => x"7825fdb0", -713 => x"388051ab", -714 => x"dc3f8008", -715 => x"81bc900c", -716 => x"0b0b80d1", -717 => x"b851f5f6", -718 => x"3f0b0b80", -719 => x"da9051f5", -720 => x"ed3f0b0b", -721 => x"80d1c851", -722 => x"f5e43f0b", -723 => x"0b80da90", -724 => x"51f5db3f", -725 => x"81bc9808", -726 => x"520b0b80", -727 => x"d28051f5", -728 => x"cd3f8552", -729 => x"0b0b80d2", -730 => x"9c51f5c2", -731 => x"3f81bdf4", -732 => x"08520b0b", -733 => x"80d2b851", -734 => x"f5b43f81", -735 => x"520b0b80", -736 => x"d29c51f5", -737 => x"a93f81bc", -738 => x"9c33520b", -739 => x"0b80d2d4", -740 => x"51f59b3f", -741 => x"80c1520b", -742 => x"0b80d2f0", -743 => x"51f58f3f", -744 => x"81bca033", -745 => x"520b0b80", -746 => x"d38c51f5", -747 => x"813f80c2", -748 => x"520b0b80", -749 => x"d2f051f4", -750 => x"f53f81bc", -751 => x"cc08520b", -752 => x"0b80d3a8", -753 => x"51f4e73f", -754 => x"87520b0b", -755 => x"80d29c51", -756 => x"f4dc3f80", -757 => x"fadc0852", -758 => x"0b0b80d3", -759 => x"c451f4ce", -760 => x"3f0b0b80", -761 => x"d3e051f4", -762 => x"c53f0b0b", -763 => x"80d48c51", -764 => x"f4bc3f81", -765 => x"bca40870", -766 => x"0853560b", -767 => x"0b80d498", -768 => x"51f4ab3f", -769 => x"0b0b80d4", -770 => x"b451f4a2", -771 => x"3f81bca4", -772 => x"08841108", -773 => x"535d0b0b", -774 => x"80d4e851", -775 => x"f4903f80", -776 => x"520b0b80", -777 => x"d29c51f4", -778 => x"853f81bc", -779 => x"a4088811", -780 => x"0853580b", -781 => x"0b80d584", -782 => x"51f3f33f", -783 => x"82520b0b", -784 => x"80d29c51", -785 => x"f3e83f81", -786 => x"bca4088c", -787 => x"11085359", -788 => x"0b0b80d5", -789 => x"a051f3d6", -790 => x"3f91520b", -791 => x"0b80d29c", -792 => x"51f3cb3f", -793 => x"81bca408", -794 => x"9005520b", -795 => x"0b80d5bc", -796 => x"51f3bb3f", -797 => x"0b0b80d5", -798 => x"d851f3b2", -799 => x"3f0b0b80", -800 => x"d69051f3", -801 => x"a93f81bc", -802 => x"94087008", -803 => x"53570b0b", -804 => x"80d49851", -805 => x"f3983f0b", -806 => x"0b80d6a4", -807 => x"51f38f3f", -808 => x"81bc9408", -809 => x"84110853", -810 => x"550b0b80", -811 => x"d4e851f2", -812 => x"fd3f8052", -813 => x"0b0b80d2", -814 => x"9c51f2f2", -815 => x"3f81bc94", -816 => x"08881108", -817 => x"53560b0b", -818 => x"80d58451", -819 => x"f2e03f81", -820 => x"520b0b80", -821 => x"d29c51f2", -822 => x"d53f81bc", -823 => x"94088c11", -824 => x"08535d0b", -825 => x"0b80d5a0", -826 => x"51f2c33f", -827 => x"92520b0b", -828 => x"80d29c51", -829 => x"f2b83f81", -830 => x"bc940890", -831 => x"05520b0b", -832 => x"80d5bc51", -833 => x"f2a83f0b", -834 => x"0b80d5d8", -835 => x"51f29f3f", -836 => x"7d520b0b", -837 => x"80d6e451", -838 => x"f2943f85", -839 => x"520b0b80", -840 => x"d29c51f2", -841 => x"893f7952", -842 => x"0b0b80d7", -843 => x"8051f1fe", -844 => x"3f8d520b", -845 => x"0b80d29c", -846 => x"51f1f33f", -847 => x"7f520b0b", -848 => x"80d79c51", -849 => x"f1e83f87", -850 => x"520b0b80", -851 => x"d29c51f1", -852 => x"dd3f7e52", -853 => x"0b0b80d7", -854 => x"b851f1d2", -855 => x"3f81520b", -856 => x"0b80d29c", -857 => x"51f1c73f", -858 => x"7b520b0b", -859 => x"80d7d451", -860 => x"f1bc3f0b", -861 => x"0b80d7f0", -862 => x"51f1b33f", -863 => x"7a520b0b", -864 => x"80d8a851", -865 => x"f1a83f0b", -866 => x"0b80d8c4", -867 => x"51f19f3f", -868 => x"0b0b80da", -869 => x"9051f196", -870 => x"3f81bc90", -871 => x"0880edfc", -872 => x"08317080", -873 => x"edf80c52", -874 => x"0b0b80d8", -875 => x"fc51f0fe", -876 => x"3f80edf8", -877 => x"08568176", -878 => x"2581a538", -879 => x"80ddec08", -880 => x"705376bd", -881 => x"84c02952", -882 => x"5b85fe3f", -883 => x"800880ed", -884 => x"f00c7552", -885 => x"7a5185f1", -886 => x"3f800880", -887 => x"edf40c75", -888 => x"8ddd2952", -889 => x"7a87e829", -890 => x"5185de3f", -891 => x"800881bc", -892 => x"a80c0b0b", -893 => x"80d98c51", -894 => x"f0b43f80", -895 => x"edf00852", -896 => x"0b0b80d9", -897 => x"bc51f0a6", -898 => x"3f0b0b80", -899 => x"d9c451f0", -900 => x"9d3f80ed", -901 => x"f408520b", -902 => x"0b80d9bc", -903 => x"51f08f3f", -904 => x"81bca808", -905 => x"520b0b80", -906 => x"d9f451f0", -907 => x"813f0b0b", -908 => x"80da9051", -909 => x"eff83f80", -910 => x"0b800ca1", -911 => x"3d0d040b", -912 => x"0b80da94", -913 => x"51f6d539", -914 => x"760856b0", -915 => x"53755276", -916 => x"5193a23f", -917 => x"80c10b81", -918 => x"bca03356", -919 => x"56f8e039", -920 => x"0b0b80da", -921 => x"c451efc6", -922 => x"3f0b0b80", -923 => x"dafc51ef", -924 => x"bd3f0b0b", -925 => x"80da9051", -926 => x"efb43f80", -927 => x"0b800ca1", -928 => x"3d0d04a1", -929 => x"3dffb805", -930 => x"52805180", -931 => x"d43f9f53", -932 => x"0b0b80db", -933 => x"9c527a51", -934 => x"92db3f77", -935 => x"7881bc98", -936 => x"0c811770", -937 => x"81ff0681", -938 => x"bca03352", -939 => x"58565af8", -940 => x"af39ff15", -941 => x"7077317e", -942 => x"0c59800b", -943 => x"81195959", -944 => x"80ddec08", -945 => x"7825f68c", -946 => x"38f8da39", -947 => x"ff3d0d73", -948 => x"82327030", -949 => x"70720780", -950 => x"25800c52", -951 => x"52833d0d", -952 => x"04fe3d0d", -953 => x"74767153", -954 => x"54527182", -955 => x"2e833883", -956 => x"5171812e", -957 => x"9a388172", -958 => x"269f3871", -959 => x"822eb838", -960 => x"71842ea9", -961 => x"3870730c", -962 => x"70800c84", -963 => x"3d0d0480", -964 => x"e40b81bc", -965 => x"9808258b", -966 => x"3880730c", -967 => x"70800c84", -968 => x"3d0d0483", -969 => x"730c7080", -970 => x"0c843d0d", -971 => x"0482730c", -972 => x"70800c84", -973 => x"3d0d0481", -974 => x"730c7080", -975 => x"0c843d0d", -976 => x"04803d0d", -977 => x"74741482", -978 => x"05710c80", -979 => x"0c823d0d", -980 => x"04f73d0d", -981 => x"7b7d7f61", -982 => x"85127082", -983 => x"2b751170", -984 => x"74717084", -985 => x"05530c5a", -986 => x"5a5d5b76", -987 => x"0c7980f8", -988 => x"180c7986", -989 => x"12525758", -990 => x"5a5a7676", -991 => x"24993876", -992 => x"b329822b", -993 => x"79115153", -994 => x"76737084", -995 => x"05550c81", -996 => x"14547574", -997 => x"25f23876", -998 => x"81cc2919", -999 => x"fc110881", -1000 => x"05fc120c", -1001 => x"7a197008", -1002 => x"9fa0130c", -1003 => x"5856850b", -1004 => x"81bc980c", -1005 => x"75800c8b", -1006 => x"3d0d04fe", -1007 => x"3d0d0293", -1008 => x"05335180", -1009 => x"02840597", -1010 => x"05335452", -1011 => x"70732e88", -1012 => x"3871800c", -1013 => x"843d0d04", -1014 => x"7081bc9c", -1015 => x"34810b80", -1016 => x"0c843d0d", -1017 => x"04f83d0d", -1018 => x"7a7c5956", -1019 => x"820b8319", -1020 => x"55557416", -1021 => x"70337533", -1022 => x"5b515372", -1023 => x"792e80c6", -1024 => x"3880c10b", -1025 => x"81168116", -1026 => x"56565782", -1027 => x"7525e338", -1028 => x"ffa91770", -1029 => x"81ff0655", -1030 => x"59738226", -1031 => x"83388755", -1032 => x"81537680", -1033 => x"d22e9838", -1034 => x"77527551", -1035 => x"91993f80", -1036 => x"53728008", -1037 => x"25893887", -1038 => x"1581bc98", -1039 => x"0c815372", -1040 => x"800c8a3d", -1041 => x"0d047281", -1042 => x"bc9c3482", -1043 => x"7525ffa2", -1044 => x"38ffbd39", -1045 => x"f93d0d79", -1046 => x"7b7d5458", -1047 => x"72597730", -1048 => x"79703070", -1049 => x"72079f2a", -1050 => x"7371315a", -1051 => x"52597779", -1052 => x"56730c53", -1053 => x"7384130c", -1054 => x"54800c89", -1055 => x"3d0d04f9", -1056 => x"3d0d797b", -1057 => x"7d7f5654", -1058 => x"52547280", -1059 => x"2ea03870", -1060 => x"577158a0", -1061 => x"73315280", -1062 => x"7225a138", -1063 => x"7770742b", -1064 => x"5770732a", -1065 => x"78752b07", -1066 => x"56517476", -1067 => x"53517074", -1068 => x"0c718415", -1069 => x"0c73800c", -1070 => x"893d0d04", -1071 => x"80567772", -1072 => x"302b5574", -1073 => x"765351e6", -1074 => x"39fb3d0d", -1075 => x"77795555", -1076 => x"80567575", -1077 => x"24ab3880", -1078 => x"74249d38", -1079 => x"80537352", -1080 => x"745180e1", -1081 => x"3f800854", -1082 => x"75802e85", -1083 => x"38800830", -1084 => x"5473800c", -1085 => x"873d0d04", -1086 => x"73307681", -1087 => x"325754dc", -1088 => x"39743055", -1089 => x"81567380", -1090 => x"25d238ec", -1091 => x"39fa3d0d", -1092 => x"787a5755", -1093 => x"80577675", -1094 => x"24a43875", -1095 => x"9f2c5481", -1096 => x"53757432", -1097 => x"74315274", -1098 => x"519b3f80", -1099 => x"08547680", -1100 => x"2e853880", -1101 => x"08305473", -1102 => x"800c883d", -1103 => x"0d047430", -1104 => x"558157d7", -1105 => x"39fc3d0d", -1106 => x"76785354", -1107 => x"81538074", -1108 => x"73265255", -1109 => x"72802e98", -1110 => x"3870802e", -1111 => x"ab388072", -1112 => x"24a63871", -1113 => x"10731075", -1114 => x"72265354", -1115 => x"5272ea38", -1116 => x"73517883", -1117 => x"38745170", -1118 => x"800c863d", -1119 => x"0d04720a", -1120 => x"100a720a", -1121 => x"100a5353", -1122 => x"72802ee4", -1123 => x"38717426", -1124 => x"ed387372", -1125 => x"31757407", -1126 => x"740a100a", -1127 => x"740a100a", -1128 => x"55555654", -1129 => x"e339ff3d", -1130 => x"0d735280", -1131 => x"e6b80851", -1132 => x"963f833d", -1133 => x"0d04ff3d", -1134 => x"0d735280", -1135 => x"e6b80851", -1136 => x"90cc3f83", -1137 => x"3d0d04f4", -1138 => x"3d0d7e60", -1139 => x"8b1170f8", -1140 => x"065b5555", -1141 => x"5d729626", -1142 => x"83389058", -1143 => x"80782474", -1144 => x"79260755", -1145 => x"80547474", -1146 => x"2e098106", -1147 => x"80ca387c", -1148 => x"518d9e3f", -1149 => x"7783f726", -1150 => x"80c53877", -1151 => x"832a7010", -1152 => x"101080de", -1153 => x"b0058c11", -1154 => x"08585854", -1155 => x"75772e81", -1156 => x"f0388416", -1157 => x"08fc068c", -1158 => x"17088818", -1159 => x"08718c12", -1160 => x"0c88120c", -1161 => x"5b760584", -1162 => x"11088107", -1163 => x"84120c53", -1164 => x"7c518cde", -1165 => x"3f881654", -1166 => x"73800c8e", -1167 => x"3d0d0477", -1168 => x"892a7883", -1169 => x"2a585473", -1170 => x"802ebf38", -1171 => x"77862ab8", -1172 => x"05578474", -1173 => x"27b43880", -1174 => x"db145794", -1175 => x"7427ab38", -1176 => x"778c2a80", -1177 => x"ee055780", -1178 => x"d474279e", -1179 => x"38778f2a", -1180 => x"80f70557", -1181 => x"82d47427", -1182 => x"91387792", -1183 => x"2a80fc05", -1184 => x"578ad474", -1185 => x"27843880", -1186 => x"fe577610", -1187 => x"101080de", -1188 => x"b0058c11", -1189 => x"08565374", -1190 => x"732ea338", -1191 => x"841508fc", -1192 => x"06707931", -1193 => x"5556738f", -1194 => x"2488e438", -1195 => x"73802588", -1196 => x"e6388c15", -1197 => x"08557473", -1198 => x"2e098106", -1199 => x"df388117", -1200 => x"5980dec0", -1201 => x"08567580", -1202 => x"deb82e82", -1203 => x"cc388416", -1204 => x"08fc0670", -1205 => x"79315555", -1206 => x"738f24bb", -1207 => x"3880deb8", -1208 => x"0b80dec4", -1209 => x"0c80deb8", -1210 => x"0b80dec0", -1211 => x"0c807424", -1212 => x"80db3874", -1213 => x"16841108", -1214 => x"81078412", -1215 => x"0c53feb0", -1216 => x"3988168c", -1217 => x"11085759", -1218 => x"75792e09", -1219 => x"8106fe82", -1220 => x"38821459", -1221 => x"ffab3977", -1222 => x"16788107", -1223 => x"84180c70", -1224 => x"80dec40c", -1225 => x"7080dec0", -1226 => x"0c80deb8", -1227 => x"0b8c120c", -1228 => x"8c110888", -1229 => x"120c7481", -1230 => x"0784120c", -1231 => x"74057471", -1232 => x"0c5b7c51", -1233 => x"8acc3f88", -1234 => x"1654fdec", -1235 => x"3983ff75", -1236 => x"27839138", -1237 => x"74892a75", -1238 => x"832a5454", -1239 => x"73802ebf", -1240 => x"3874862a", -1241 => x"b8055384", -1242 => x"7427b438", -1243 => x"80db1453", -1244 => x"947427ab", -1245 => x"38748c2a", -1246 => x"80ee0553", -1247 => x"80d47427", -1248 => x"9e38748f", -1249 => x"2a80f705", -1250 => x"5382d474", -1251 => x"27913874", -1252 => x"922a80fc", -1253 => x"05538ad4", -1254 => x"74278438", -1255 => x"80fe5372", -1256 => x"10101080", -1257 => x"deb00588", -1258 => x"11085557", -1259 => x"73772e86", -1260 => x"8b388414", -1261 => x"08fc065b", -1262 => x"747b278d", -1263 => x"38881408", -1264 => x"5473772e", -1265 => x"098106ea", -1266 => x"388c1408", -1267 => x"80deb00b", -1268 => x"84050871", -1269 => x"8c190c75", -1270 => x"88190c77", -1271 => x"88130c5c", -1272 => x"57758c15", -1273 => x"0c785380", -1274 => x"79248398", -1275 => x"3872822c", -1276 => x"81712b56", -1277 => x"56747b26", -1278 => x"80ca387a", -1279 => x"75065776", -1280 => x"82a33878", -1281 => x"fc068405", -1282 => x"59741070", -1283 => x"7c065555", -1284 => x"73829238", -1285 => x"841959f1", -1286 => x"3980deb0", -1287 => x"0b840508", -1288 => x"79545b78", -1289 => x"8025c638", -1290 => x"82da3974", -1291 => x"097b0670", -1292 => x"80deb00b", -1293 => x"84050c5b", -1294 => x"74105574", -1295 => x"7b268538", -1296 => x"7485bc38", -1297 => x"80deb00b", -1298 => x"88050870", -1299 => x"841208fc", -1300 => x"06707b31", -1301 => x"7b72268f", -1302 => x"7225075d", -1303 => x"575c5c55", -1304 => x"78802e80", -1305 => x"d9387915", -1306 => x"80dea808", -1307 => x"19901159", -1308 => x"545680de", -1309 => x"a408ff2e", -1310 => x"8838a08f", -1311 => x"13e08006", -1312 => x"5776527c", -1313 => x"51888c3f", -1314 => x"80085480", -1315 => x"08ff2e90", -1316 => x"38800876", -1317 => x"2782a738", -1318 => x"7480deb0", -1319 => x"2e829f38", -1320 => x"80deb00b", -1321 => x"88050855", -1322 => x"841508fc", -1323 => x"06707931", -1324 => x"7972268f", -1325 => x"7225075d", -1326 => x"555a7a83", -1327 => x"f2387781", -1328 => x"0784160c", -1329 => x"77157080", -1330 => x"deb00b88", -1331 => x"050c7481", -1332 => x"0784120c", -1333 => x"567c5187", -1334 => x"b93f8815", -1335 => x"5473800c", -1336 => x"8e3d0d04", -1337 => x"74832a70", -1338 => x"54548074", -1339 => x"24819b38", -1340 => x"72822c81", -1341 => x"712b80de", -1342 => x"b4080770", -1343 => x"80deb00b", -1344 => x"84050c75", -1345 => x"10101080", -1346 => x"deb00588", -1347 => x"1108718c", -1348 => x"1b0c7088", -1349 => x"1b0c7988", -1350 => x"130c5755", -1351 => x"5c55758c", -1352 => x"150cfdc1", -1353 => x"39787910", -1354 => x"101080de", -1355 => x"b0057056", -1356 => x"5b5c8c14", -1357 => x"08567574", -1358 => x"2ea33884", -1359 => x"1608fc06", -1360 => x"70793158", -1361 => x"53768f24", -1362 => x"83f13876", -1363 => x"802584af", -1364 => x"388c1608", -1365 => x"5675742e", -1366 => x"098106df", -1367 => x"38881481", -1368 => x"1a708306", -1369 => x"555a5472", -1370 => x"c9387b83", -1371 => x"06567580", -1372 => x"2efdb838", -1373 => x"ff1cf81b", -1374 => x"5b5c881a", -1375 => x"087a2eea", -1376 => x"38fdb539", -1377 => x"831953fc", -1378 => x"e4398314", -1379 => x"70822c81", -1380 => x"712b80de", -1381 => x"b4080770", -1382 => x"80deb00b", -1383 => x"84050c76", -1384 => x"10101080", -1385 => x"deb00588", -1386 => x"1108718c", -1387 => x"1c0c7088", -1388 => x"1c0c7a88", -1389 => x"130c5853", -1390 => x"5d5653fe", -1391 => x"e13980dd", -1392 => x"f4081759", -1393 => x"8008762e", -1394 => x"818b3880", -1395 => x"dea408ff", -1396 => x"2e848e38", -1397 => x"73763119", -1398 => x"80ddf40c", -1399 => x"73870670", -1400 => x"56537280", -1401 => x"2e883888", -1402 => x"73317015", -1403 => x"55557614", -1404 => x"9fff06a0", -1405 => x"80713116", -1406 => x"70547e53", -1407 => x"51538593", -1408 => x"3f800856", -1409 => x"8008ff2e", -1410 => x"819e3880", -1411 => x"ddf40813", -1412 => x"7080ddf4", -1413 => x"0c747580", -1414 => x"deb00b88", -1415 => x"050c7776", -1416 => x"31158107", -1417 => x"5556597a", -1418 => x"80deb02e", -1419 => x"83c03879", -1420 => x"8f2682ef", -1421 => x"38810b84", -1422 => x"150c8415", -1423 => x"08fc0670", -1424 => x"79317972", -1425 => x"268f7225", -1426 => x"075d555a", -1427 => x"7a802efc", -1428 => x"ed3880db", -1429 => x"3980089f", -1430 => x"ff065574", -1431 => x"feed3878", -1432 => x"80ddf40c", -1433 => x"80deb00b", -1434 => x"8805087a", -1435 => x"18810784", -1436 => x"120c5580", -1437 => x"dea00879", -1438 => x"27863878", -1439 => x"80dea00c", -1440 => x"80de9c08", -1441 => x"7927fca0", -1442 => x"387880de", -1443 => x"9c0c8415", -1444 => x"08fc0670", -1445 => x"79317972", -1446 => x"268f7225", -1447 => x"075d555a", -1448 => x"7a802efc", -1449 => x"99388839", -1450 => x"80745753", -1451 => x"fedd397c", -1452 => x"5183df3f", -1453 => x"800b800c", -1454 => x"8e3d0d04", -1455 => x"807324a5", -1456 => x"3872822c", -1457 => x"81712b80", -1458 => x"deb40807", -1459 => x"7080deb0", -1460 => x"0b84050c", -1461 => x"5c5a768c", -1462 => x"170c7388", -1463 => x"170c7588", -1464 => x"180cf9fd", -1465 => x"39831370", -1466 => x"822c8171", -1467 => x"2b80deb4", -1468 => x"08077080", -1469 => x"deb00b84", -1470 => x"050c5d5b", -1471 => x"53d8397a", -1472 => x"75065c7b", -1473 => x"fc9f3884", -1474 => x"19751056", -1475 => x"59f139ff", -1476 => x"17810559", -1477 => x"f7ab398c", -1478 => x"15088816", -1479 => x"08718c12", -1480 => x"0c88120c", -1481 => x"59751584", -1482 => x"11088107", -1483 => x"84120c58", -1484 => x"7c5182de", -1485 => x"3f881554", -1486 => x"fba33977", -1487 => x"16788107", -1488 => x"84180c8c", -1489 => x"17088818", -1490 => x"08718c12", -1491 => x"0c88120c", -1492 => x"5c7080de", -1493 => x"c40c7080", -1494 => x"dec00c80", -1495 => x"deb80b8c", -1496 => x"120c8c11", -1497 => x"0888120c", -1498 => x"77810784", -1499 => x"120c7705", -1500 => x"77710c55", -1501 => x"7c51829a", -1502 => x"3f881654", -1503 => x"f5ba3972", -1504 => x"16841108", -1505 => x"81078412", -1506 => x"0c588c16", -1507 => x"08881708", -1508 => x"718c120c", -1509 => x"88120c57", -1510 => x"7c5181f6", -1511 => x"3f881654", -1512 => x"f5963972", -1513 => x"84150cf4", -1514 => x"1af80670", -1515 => x"841d0881", -1516 => x"0607841d", -1517 => x"0c701c55", -1518 => x"56850b84", -1519 => x"150c850b", -1520 => x"88150c8f", -1521 => x"7627fdab", -1522 => x"38881b52", -1523 => x"7c5184be", -1524 => x"3f80deb0", -1525 => x"0b880508", -1526 => x"80ddf408", -1527 => x"5a55fd93", -1528 => x"397880dd", -1529 => x"f40c7380", -1530 => x"dea40cfb", -1531 => x"ef397284", -1532 => x"150cfcff", -1533 => x"39fb3d0d", -1534 => x"77707a7c", -1535 => x"58555356", -1536 => x"8f752780", -1537 => x"e6387276", -1538 => x"07830651", -1539 => x"7080dc38", -1540 => x"75735254", -1541 => x"70708405", -1542 => x"52087470", -1543 => x"8405560c", -1544 => x"73717084", -1545 => x"05530871", -1546 => x"70840553", -1547 => x"0c717084", -1548 => x"05530871", -1549 => x"70840553", -1550 => x"0c717084", -1551 => x"05530871", -1552 => x"70840553", -1553 => x"0cf01656", -1554 => x"54748f26", -1555 => x"c7388375", -1556 => x"27953870", -1557 => x"70840552", -1558 => x"08747084", -1559 => x"05560cfc", -1560 => x"15557483", -1561 => x"26ed3873", -1562 => x"715452ff", -1563 => x"155170ff", -1564 => x"2e983872", -1565 => x"70810554", -1566 => x"33727081", -1567 => x"055434ff", -1568 => x"115170ff", -1569 => x"2e098106", -1570 => x"ea387580", -1571 => x"0c873d0d", -1572 => x"040404fd", -1573 => x"3d0d800b", -1574 => x"81bdf80c", -1575 => x"765187ca", -1576 => x"3f800853", -1577 => x"8008ff2e", -1578 => x"88387280", -1579 => x"0c853d0d", -1580 => x"0481bdf8", -1581 => x"08547380", -1582 => x"2ef03875", -1583 => x"74710c52", -1584 => x"72800c85", -1585 => x"3d0d04fb", -1586 => x"3d0d7779", -1587 => x"70720783", -1588 => x"06535452", -1589 => x"70933871", -1590 => x"73730854", -1591 => x"56547173", -1592 => x"082e80c4", -1593 => x"38737554", -1594 => x"52713370", -1595 => x"81ff0652", -1596 => x"5470802e", -1597 => x"9d387233", -1598 => x"5570752e", -1599 => x"09810695", -1600 => x"38811281", -1601 => x"14713370", -1602 => x"81ff0654", -1603 => x"56545270", -1604 => x"e5387233", -1605 => x"557381ff", -1606 => x"067581ff", -1607 => x"06717131", -1608 => x"800c5552", -1609 => x"873d0d04", -1610 => x"7109f7fb", -1611 => x"fdff1306", -1612 => x"f8848281", -1613 => x"80065271", -1614 => x"97388414", -1615 => x"84167108", -1616 => x"54565471", -1617 => x"75082ee0", -1618 => x"38737554", -1619 => x"52ff9a39", -1620 => x"800b800c", -1621 => x"873d0d04", -1622 => x"fb3d0d77", -1623 => x"705256fe", -1624 => x"b03f80de", -1625 => x"b00b8805", -1626 => x"08841108", -1627 => x"fc06707b", -1628 => x"319fef05", -1629 => x"e08006e0", -1630 => x"80055255", -1631 => x"55a08075", -1632 => x"24943880", -1633 => x"527551fe", -1634 => x"8a3f80de", -1635 => x"b8081453", -1636 => x"7280082e", -1637 => x"8f387551", -1638 => x"fdf83f80", -1639 => x"5372800c", -1640 => x"873d0d04", -1641 => x"74305275", -1642 => x"51fde83f", -1643 => x"8008ff2e", -1644 => x"a83880de", -1645 => x"b00b8805", -1646 => x"08747631", -1647 => x"81078412", -1648 => x"0c5380dd", -1649 => x"f4087531", -1650 => x"80ddf40c", -1651 => x"7551fdc2", -1652 => x"3f810b80", -1653 => x"0c873d0d", -1654 => x"04805275", -1655 => x"51fdb43f", -1656 => x"80deb00b", -1657 => x"88050880", -1658 => x"08713154", -1659 => x"548f7325", -1660 => x"ffa43880", -1661 => x"0880dea4", -1662 => x"083180dd", -1663 => x"f40c7281", -1664 => x"0784150c", -1665 => x"7551fd8a", -1666 => x"3f8053ff", -1667 => x"9039f73d", -1668 => x"0d7b7d54", -1669 => x"5a72802e", -1670 => x"82833879", -1671 => x"51fcf23f", -1672 => x"f8138411", -1673 => x"0870fe06", -1674 => x"70138411", -1675 => x"08fc065c", -1676 => x"57585457", -1677 => x"80deb808", -1678 => x"742e82de", -1679 => x"38778415", -1680 => x"0c807381", -1681 => x"06565974", -1682 => x"792e81d5", -1683 => x"38771484", -1684 => x"11088106", -1685 => x"565374a0", -1686 => x"38771656", -1687 => x"7881e638", -1688 => x"88140855", -1689 => x"7480deb8", -1690 => x"2e82f938", -1691 => x"8c140870", -1692 => x"8c170c75", -1693 => x"88120c58", -1694 => x"75810784", -1695 => x"180c7517", -1696 => x"76710c54", -1697 => x"78819138", -1698 => x"83ff7627", -1699 => x"81c83875", -1700 => x"892a7683", -1701 => x"2a545473", -1702 => x"802ebf38", -1703 => x"75862ab8", -1704 => x"05538474", -1705 => x"27b43880", -1706 => x"db145394", -1707 => x"7427ab38", -1708 => x"758c2a80", -1709 => x"ee055380", -1710 => x"d474279e", -1711 => x"38758f2a", -1712 => x"80f70553", -1713 => x"82d47427", -1714 => x"91387592", -1715 => x"2a80fc05", -1716 => x"538ad474", -1717 => x"27843880", -1718 => x"fe537210", -1719 => x"101080de", -1720 => x"b0058811", -1721 => x"08555573", -1722 => x"752e82bf", -1723 => x"38841408", -1724 => x"fc065975", -1725 => x"79278d38", -1726 => x"88140854", -1727 => x"73752e09", -1728 => x"8106ea38", -1729 => x"8c140870", -1730 => x"8c190c74", -1731 => x"88190c77", -1732 => x"88120c55", -1733 => x"768c150c", -1734 => x"7951faf6", -1735 => x"3f8b3d0d", -1736 => x"04760877", -1737 => x"71315876", -1738 => x"05881808", -1739 => x"56567480", -1740 => x"deb82e80", -1741 => x"e0388c17", -1742 => x"08708c17", -1743 => x"0c758812", -1744 => x"0c53fe89", -1745 => x"39881408", -1746 => x"8c150870", -1747 => x"8c130c59", -1748 => x"88190cfe", -1749 => x"a3397583", -1750 => x"2a705454", -1751 => x"80742481", -1752 => x"98387282", -1753 => x"2c81712b", -1754 => x"80deb408", -1755 => x"0780deb0", -1756 => x"0b84050c", -1757 => x"74101010", -1758 => x"80deb005", -1759 => x"88110871", -1760 => x"8c1b0c70", -1761 => x"881b0c79", -1762 => x"88130c56", -1763 => x"5a55768c", -1764 => x"150cff84", -1765 => x"398159fd", -1766 => x"b4397716", -1767 => x"73810654", -1768 => x"55729838", -1769 => x"76087771", -1770 => x"31587505", -1771 => x"8c180888", -1772 => x"1908718c", -1773 => x"120c8812", -1774 => x"0c555574", -1775 => x"81078418", -1776 => x"0c7680de", -1777 => x"b00b8805", -1778 => x"0c80deac", -1779 => x"087526fe", -1780 => x"c73880de", -1781 => x"a8085279", -1782 => x"51fafd3f", -1783 => x"7951f9b2", -1784 => x"3ffeba39", -1785 => x"81778c17", -1786 => x"0c778817", -1787 => x"0c758c19", -1788 => x"0c758819", -1789 => x"0c59fd80", -1790 => x"39831470", -1791 => x"822c8171", -1792 => x"2b80deb4", -1793 => x"080780de", -1794 => x"b00b8405", -1795 => x"0c751010", -1796 => x"1080deb0", -1797 => x"05881108", -1798 => x"718c1c0c", -1799 => x"70881c0c", -1800 => x"7a88130c", -1801 => x"575b5653", -1802 => x"fee43980", -1803 => x"7324a338", -1804 => x"72822c81", -1805 => x"712b80de", -1806 => x"b4080780", -1807 => x"deb00b84", -1808 => x"050c5874", -1809 => x"8c180c73", -1810 => x"88180c76", -1811 => x"88160cfd", -1812 => x"c3398313", -1813 => x"70822c81", -1814 => x"712b80de", -1815 => x"b4080780", -1816 => x"deb00b84", -1817 => x"050c5953", -1818 => x"da39fe3d", -1819 => x"0d81bdfc", -1820 => x"0851708a", -1821 => x"3881be84", -1822 => x"7081bdfc", -1823 => x"0c517411", -1824 => x"52ff5371", -1825 => x"87fb8080", -1826 => x"26883871", -1827 => x"81bdfc0c", -1828 => x"70537280", -1829 => x"0c843d0d", -1830 => x"04fd3d0d", -1831 => x"800b80dd", -1832 => x"e0085454", -1833 => x"72812e9b", -1834 => x"387381be", -1835 => x"800ccff1", -1836 => x"3fcecd3f", -1837 => x"80edb852", -1838 => x"8151d8db", -1839 => x"3f800851", -1840 => x"899d3f72", -1841 => x"81be800c", -1842 => x"cfd73fce", -1843 => x"b33f80ed", -1844 => x"b8528151", -1845 => x"d8c13f80", -1846 => x"08518983", -1847 => x"3f00ff39", -1848 => x"00ff39f5", -1849 => x"3d0d7e60", -1850 => x"81be8008", -1851 => x"705b585b", -1852 => x"5b7580c2", -1853 => x"38777a25", -1854 => x"a138771b", -1855 => x"70337081", -1856 => x"ff065858", -1857 => x"59758a2e", -1858 => x"98387681", -1859 => x"ff0651ce", -1860 => x"ef3f8118", -1861 => x"58797824", -1862 => x"e1387980", -1863 => x"0c8d3d0d", -1864 => x"048d51ce", -1865 => x"db3f7833", -1866 => x"7081ff06", -1867 => x"5257ced0", -1868 => x"3f811858", -1869 => x"e0397955", -1870 => x"7a547d53", -1871 => x"85528d3d", -1872 => x"fc0551cd", -1873 => x"fd3f8008", -1874 => x"56888d3f", -1875 => x"7b80080c", -1876 => x"75800c8d", -1877 => x"3d0d04f6", -1878 => x"3d0d7d7f", -1879 => x"81be8008", -1880 => x"705a585a", -1881 => x"5a7580c3", -1882 => x"38767925", -1883 => x"b138761a", -1884 => x"58cded3f", -1885 => x"80087834", -1886 => x"800b8008", -1887 => x"81ff0657", -1888 => x"58758a2e", -1889 => x"a238758d", -1890 => x"32703070", -1891 => x"80257a07", -1892 => x"51515675", -1893 => x"b7388117", -1894 => x"57787724", -1895 => x"d1387656", -1896 => x"75800c8c", -1897 => x"3d0d0481", -1898 => x"58dc3978", -1899 => x"5579547c", -1900 => x"5384528c", -1901 => x"3dfc0551", -1902 => x"cd883f80", -1903 => x"08568798", -1904 => x"3f7a8008", -1905 => x"0c75800c", -1906 => x"8c3d0d04", -1907 => x"811756d0", -1908 => x"39f93d0d", -1909 => x"795781be", -1910 => x"8008802e", -1911 => x"ac387651", -1912 => x"89ab3f7b", -1913 => x"567a5580", -1914 => x"08810554", -1915 => x"76538252", -1916 => x"893dfc05", -1917 => x"51cccb3f", -1918 => x"80085786", -1919 => x"db3f7780", -1920 => x"080c7680", -1921 => x"0c893d0d", -1922 => x"0486cd3f", -1923 => x"850b8008", -1924 => x"0cff0b80", -1925 => x"0c893d0d", -1926 => x"04fb3d0d", -1927 => x"81be8008", -1928 => x"70565473", -1929 => x"88387480", -1930 => x"0c873d0d", -1931 => x"04775383", -1932 => x"52873dfc", -1933 => x"0551cc8a", -1934 => x"3f800854", -1935 => x"869a3f75", -1936 => x"80080c73", -1937 => x"800c873d", -1938 => x"0d04ff0b", -1939 => x"800c04fb", -1940 => x"3d0d7755", -1941 => x"81be8008", -1942 => x"802ea838", -1943 => x"745188ad", -1944 => x"3f800881", -1945 => x"05547453", -1946 => x"8752873d", -1947 => x"fc0551cb", -1948 => x"d13f8008", -1949 => x"5585e13f", -1950 => x"7580080c", -1951 => x"74800c87", -1952 => x"3d0d0485", -1953 => x"d33f850b", -1954 => x"80080cff", -1955 => x"0b800c87", -1956 => x"3d0d04fa", -1957 => x"3d0d81be", -1958 => x"8008802e", -1959 => x"a2387a55", -1960 => x"79547853", -1961 => x"8652883d", -1962 => x"fc0551cb", -1963 => x"953f8008", -1964 => x"5685a53f", -1965 => x"7680080c", -1966 => x"75800c88", -1967 => x"3d0d0485", -1968 => x"973f9d0b", -1969 => x"80080cff", -1970 => x"0b800c88", -1971 => x"3d0d04f7", -1972 => x"3d0d7b7d", -1973 => x"5b59bc53", -1974 => x"80527951", -1975 => x"86a53f80", -1976 => x"70565798", -1977 => x"56741970", -1978 => x"3370782b", -1979 => x"79078118", -1980 => x"f81a5a58", -1981 => x"59555884", -1982 => x"7524ea38", -1983 => x"767a2384", -1984 => x"19588070", -1985 => x"56579856", -1986 => x"74187033", -1987 => x"70782b79", -1988 => x"078118f8", -1989 => x"1a5a5859", -1990 => x"51548475", -1991 => x"24ea3876", -1992 => x"821b2388", -1993 => x"19588070", -1994 => x"56579856", -1995 => x"74187033", -1996 => x"70782b79", -1997 => x"078118f8", -1998 => x"1a5a5859", -1999 => x"51548475", -2000 => x"24ea3876", -2001 => x"841b0c8c", -2002 => x"19588070", -2003 => x"56579856", -2004 => x"74187033", -2005 => x"70782b79", -2006 => x"078118f8", -2007 => x"1a5a5859", -2008 => x"51548475", -2009 => x"24ea3876", -2010 => x"881b2390", -2011 => x"19588070", -2012 => x"56579856", -2013 => x"74187033", -2014 => x"70782b79", -2015 => x"078118f8", -2016 => x"1a5a5859", -2017 => x"51548475", -2018 => x"24ea3876", -2019 => x"8a1b2394", -2020 => x"19588070", -2021 => x"56579856", -2022 => x"74187033", -2023 => x"70782b79", -2024 => x"078118f8", -2025 => x"1a5a5859", -2026 => x"51548475", -2027 => x"24ea3876", -2028 => x"8c1b2398", -2029 => x"19588070", -2030 => x"56579856", -2031 => x"74187033", -2032 => x"70782b79", -2033 => x"078118f8", -2034 => x"1a5a5859", -2035 => x"51548475", -2036 => x"24ea3876", -2037 => x"8e1b239c", -2038 => x"19588070", -2039 => x"5657b856", -2040 => x"74187033", -2041 => x"70782b79", -2042 => x"078118f8", -2043 => x"1a5a5859", -2044 => x"5a548875", -2045 => x"24ea3876", -2046 => x"901b0c8b", -2047 => x"3d0d04e9", -2048 => x"3d0d6a81", -2049 => x"be800857", -2050 => x"57759338", -2051 => x"80c0800b", -2052 => x"84180c75", -2053 => x"ac180c75", -2054 => x"800c993d", -2055 => x"0d04893d", -2056 => x"70556a54", -2057 => x"558a5299", -2058 => x"3dffbc05", -2059 => x"51c8933f", -2060 => x"80087753", -2061 => x"755256fd", -2062 => x"963f829c", -2063 => x"3f778008", -2064 => x"0c75800c", -2065 => x"993d0d04", -2066 => x"e93d0d69", -2067 => x"5781be80", -2068 => x"08802eb5", -2069 => x"38765184", -2070 => x"b43f893d", -2071 => x"70568008", -2072 => x"81055577", -2073 => x"54568f52", -2074 => x"993dffbc", -2075 => x"0551c7d2", -2076 => x"3f80086b", -2077 => x"53765257", -2078 => x"fcd53f81", -2079 => x"db3f7780", -2080 => x"080c7680", -2081 => x"0c993d0d", -2082 => x"0481cd3f", -2083 => x"850b8008", -2084 => x"0cff0b80", -2085 => x"0c993d0d", -2086 => x"04fc3d0d", -2087 => x"815481be", -2088 => x"80088838", -2089 => x"73800c86", -2090 => x"3d0d0476", -2091 => x"5397b952", -2092 => x"863dfc05", -2093 => x"51c78b3f", -2094 => x"80085481", -2095 => x"9b3f7480", -2096 => x"080c7380", -2097 => x"0c863d0d", -2098 => x"04f43d0d", -2099 => x"7e80ede4", -2100 => x"08700881", -2101 => x"ff06913d", -2102 => x"f8055451", -2103 => x"5959c8b1", -2104 => x"3f775780", -2105 => x"5476557b", -2106 => x"7d585276", -2107 => x"538e3df0", -2108 => x"055183f4", -2109 => x"3f797b58", -2110 => x"790c7684", -2111 => x"1a0c7880", -2112 => x"0c8e3d0d", -2113 => x"04f43d0d", -2114 => x"7e80ede4", -2115 => x"08700870", -2116 => x"81ff0692", -2117 => x"3df80555", -2118 => x"515a5759", -2119 => x"c7f33f77", -2120 => x"57800b8b", -2121 => x"3d595476", -2122 => x"557b7d58", -2123 => x"52765377", -2124 => x"5183b53f", -2125 => x"8056bd84", -2126 => x"c0765555", -2127 => x"797b5852", -2128 => x"76537751", -2129 => x"83a23f7a", -2130 => x"5778802e", -2131 => x"84387679", -2132 => x"0c76800c", -2133 => x"8e3d0d04", -2134 => x"80e6b808", -2135 => x"800c04f7", -2136 => x"3d0d7b80", -2137 => x"e6b80882", -2138 => x"c811085a", -2139 => x"545a7780", -2140 => x"2e80da38", -2141 => x"81881884", -2142 => x"1908ff05", -2143 => x"81712b59", -2144 => x"55598074", -2145 => x"2480ea38", -2146 => x"807424b5", -2147 => x"3873822b", -2148 => x"78118805", -2149 => x"56568180", -2150 => x"19087706", -2151 => x"5372802e", -2152 => x"b6387816", -2153 => x"70085353", -2154 => x"79517408", -2155 => x"53722dff", -2156 => x"14fc17fc", -2157 => x"1779812c", -2158 => x"5a575754", -2159 => x"738025d6", -2160 => x"38770858", -2161 => x"77ffad38", -2162 => x"80e6b808", -2163 => x"53bc1308", -2164 => x"a5387951", -2165 => x"f6873f74", -2166 => x"0853722d", -2167 => x"ff14fc17", -2168 => x"fc177981", -2169 => x"2c5a5757", -2170 => x"54738025", -2171 => x"ffa838d1", -2172 => x"398057ff", -2173 => x"93397251", -2174 => x"bc130854", -2175 => x"732d7951", -2176 => x"f5db3ffb", -2177 => x"3d0d777a", -2178 => x"71028c05", -2179 => x"a3053358", -2180 => x"54545683", -2181 => x"732780d4", -2182 => x"38758306", -2183 => x"517080cc", -2184 => x"3874882b", -2185 => x"75077071", -2186 => x"902b0755", -2187 => x"518f7327", -2188 => x"a7387372", -2189 => x"70840554", -2190 => x"0c717471", -2191 => x"70840553", -2192 => x"0c747170", -2193 => x"8405530c", -2194 => x"74717084", -2195 => x"05530cf0", -2196 => x"14545272", -2197 => x"8f26db38", -2198 => x"83732790", -2199 => x"38737270", -2200 => x"8405540c", -2201 => x"fc135372", -2202 => x"8326f238", -2203 => x"ff135170", -2204 => x"ff2e9338", -2205 => x"74727081", -2206 => x"055434ff", -2207 => x"115170ff", -2208 => x"2e098106", -2209 => x"ef387580", -2210 => x"0c873d0d", -2211 => x"04fd3d0d", -2212 => x"75707183", -2213 => x"06535552", -2214 => x"70b43871", -2215 => x"70087009", -2216 => x"f7fbfdff", -2217 => x"1206f884", -2218 => x"82818006", -2219 => x"54525371", -2220 => x"9b388413", -2221 => x"70087009", -2222 => x"f7fbfdff", -2223 => x"1206f884", -2224 => x"82818006", -2225 => x"54525371", -2226 => x"802ee738", -2227 => x"72527133", -2228 => x"5372802e", -2229 => x"8a388112", -2230 => x"70335452", -2231 => x"72f83871", -2232 => x"7431800c", -2233 => x"853d0d04", -2234 => x"e43d0d6e", -2235 => x"a13d08a3", -2236 => x"3d085957", -2237 => x"5f80764d", -2238 => x"774ea33d", -2239 => x"08a53d08", -2240 => x"574b754c", -2241 => x"5e7d6c24", -2242 => x"86fb3880", -2243 => x"6a24878f", -2244 => x"38696b58", -2245 => x"566b6d5d", -2246 => x"467b4775", -2247 => x"44764564", -2248 => x"6468685c", -2249 => x"5c565674", -2250 => x"81e73878", -2251 => x"762782c7", -2252 => x"387581ff", -2253 => x"26832b55", -2254 => x"83ffff76", -2255 => x"278c3890", -2256 => x"55fe800a", -2257 => x"76278338", -2258 => x"98557575", -2259 => x"2a80dbcc", -2260 => x"057033a0", -2261 => x"77317131", -2262 => x"57555774", -2263 => x"802e9538", -2264 => x"75752ba0", -2265 => x"76317a77", -2266 => x"2b7c722a", -2267 => x"077c782b", -2268 => x"5d5b5956", -2269 => x"75902a76", -2270 => x"83ffff06", -2271 => x"71547a53", -2272 => x"59578880", -2273 => x"3f80085b", -2274 => x"87ea3f80", -2275 => x"08800879", -2276 => x"297c902b", -2277 => x"7c902a07", -2278 => x"56565973", -2279 => x"75279438", -2280 => x"8008ff05", -2281 => x"76155559", -2282 => x"75742687", -2283 => x"38747426", -2284 => x"87b93876", -2285 => x"52737531", -2286 => x"5187c93f", -2287 => x"80085587", -2288 => x"b33f8008", -2289 => x"80087929", -2290 => x"7b83ffff", -2291 => x"0677902b", -2292 => x"07565957", -2293 => x"73782796", -2294 => x"388008ff", -2295 => x"05761555", -2296 => x"57757426", -2297 => x"89387774", -2298 => x"26777131", -2299 => x"58567890", -2300 => x"2b770758", -2301 => x"805b7a40", -2302 => x"77417f61", -2303 => x"56547d80", -2304 => x"d938737f", -2305 => x"0c747f84", -2306 => x"050c7e80", -2307 => x"0c9e3d0d", -2308 => x"0480705c", -2309 => x"58747926", -2310 => x"dd387481", -2311 => x"ff26832b", -2312 => x"577483ff", -2313 => x"ff2682a5", -2314 => x"3874772a", -2315 => x"80dbcc05", -2316 => x"7033a079", -2317 => x"31713159", -2318 => x"5c5d7682", -2319 => x"b3387654", -2320 => x"74792783", -2321 => x"38815479", -2322 => x"76277407", -2323 => x"59815878", -2324 => x"ffa23876", -2325 => x"58805bff", -2326 => x"9d397352", -2327 => x"74539e3d", -2328 => x"e80551d7", -2329 => x"ef3f6769", -2330 => x"567f0c74", -2331 => x"7f84050c", -2332 => x"7e800c9e", -2333 => x"3d0d0475", -2334 => x"802e81c4", -2335 => x"387581ff", -2336 => x"26832b55", -2337 => x"83ffff76", -2338 => x"278c3890", -2339 => x"55fe800a", -2340 => x"76278338", -2341 => x"98557575", -2342 => x"2a80dbcc", -2343 => x"057033a0", -2344 => x"77317131", -2345 => x"575e5474", -2346 => x"84913878", -2347 => x"76315481", -2348 => x"76902a77", -2349 => x"83ffff06", -2350 => x"5f5d5b7b", -2351 => x"52735185", -2352 => x"c33f8008", -2353 => x"5785ad3f", -2354 => x"80088008", -2355 => x"7e297890", -2356 => x"2b7c902a", -2357 => x"07565659", -2358 => x"73752794", -2359 => x"388008ff", -2360 => x"05761555", -2361 => x"59757426", -2362 => x"87387474", -2363 => x"2684f338", -2364 => x"7b527375", -2365 => x"3151858c", -2366 => x"3f800855", -2367 => x"84f63f80", -2368 => x"0880087e", -2369 => x"297b83ff", -2370 => x"ff067790", -2371 => x"2b075659", -2372 => x"57737827", -2373 => x"96388008", -2374 => x"ff057615", -2375 => x"55577574", -2376 => x"26893877", -2377 => x"74267771", -2378 => x"31585a78", -2379 => x"902b7707", -2380 => x"7b41417f", -2381 => x"6156547d", -2382 => x"802efdc6", -2383 => x"38fe9b39", -2384 => x"75528151", -2385 => x"84ae3f80", -2386 => x"0856feb1", -2387 => x"399057fe", -2388 => x"800a7527", -2389 => x"fdd33898", -2390 => x"75712a80", -2391 => x"dbcc0570", -2392 => x"33a07331", -2393 => x"7131535d", -2394 => x"5e577680", -2395 => x"2efdcf38", -2396 => x"a0773175", -2397 => x"782b7772", -2398 => x"2a077779", -2399 => x"2b7b7a2b", -2400 => x"7d742a07", -2401 => x"7d7b2b73", -2402 => x"902a7483", -2403 => x"ffff0671", -2404 => x"597f772a", -2405 => x"585e5c41", -2406 => x"5f585c54", -2407 => x"83e63f80", -2408 => x"085483d0", -2409 => x"3f800880", -2410 => x"08792975", -2411 => x"902b7e90", -2412 => x"2a075656", -2413 => x"59737527", -2414 => x"99388008", -2415 => x"ff057b15", -2416 => x"55597a74", -2417 => x"268c3873", -2418 => x"75278738", -2419 => x"ff197b15", -2420 => x"55597652", -2421 => x"73753151", -2422 => x"83aa3f80", -2423 => x"08558394", -2424 => x"3f800880", -2425 => x"0879297d", -2426 => x"83ffff06", -2427 => x"77902b07", -2428 => x"56595773", -2429 => x"78279938", -2430 => x"8008ff05", -2431 => x"7b155557", -2432 => x"7a74268c", -2433 => x"38737827", -2434 => x"8738ff17", -2435 => x"7b155557", -2436 => x"73783179", -2437 => x"902b7807", -2438 => x"7083ffff", -2439 => x"0671902a", -2440 => x"7983ffff", -2441 => x"067a902a", -2442 => x"73722973", -2443 => x"73297473", -2444 => x"29767429", -2445 => x"73902a05", -2446 => x"72055755", -2447 => x"435f5b58", -2448 => x"5a57595a", -2449 => x"747c2786", -2450 => x"38848080", -2451 => x"17577490", -2452 => x"2a177983", -2453 => x"ffff0676", -2454 => x"84808029", -2455 => x"05575776", -2456 => x"7a269a38", -2457 => x"767a3270", -2458 => x"30707207", -2459 => x"8025565a", -2460 => x"5b7c7627", -2461 => x"fafe3873", -2462 => x"802efaf8", -2463 => x"38ff1858", -2464 => x"805bfaf2", -2465 => x"39ff7653", -2466 => x"77549f3d", -2467 => x"e805525e", -2468 => x"d3c23f67", -2469 => x"69574c75", -2470 => x"4d698025", -2471 => x"f8f3387d", -2472 => x"096a6c5c", -2473 => x"537a549f", -2474 => x"3de80552", -2475 => x"5ed3a53f", -2476 => x"6769714c", -2477 => x"704d5856", -2478 => x"f8db39a0", -2479 => x"75317676", -2480 => x"2b7a772b", -2481 => x"7c732a07", -2482 => x"7c782b72", -2483 => x"902a7383", -2484 => x"ffff0671", -2485 => x"587e762a", -2486 => x"5742405d", -2487 => x"5d575881", -2488 => x"a33f8008", -2489 => x"57818d3f", -2490 => x"80088008", -2491 => x"7e297890", -2492 => x"2b7d902a", -2493 => x"07565659", -2494 => x"73752799", -2495 => x"388008ff", -2496 => x"05761555", -2497 => x"59757426", -2498 => x"8c387375", -2499 => x"278738ff", -2500 => x"19761555", -2501 => x"597b5273", -2502 => x"75315180", -2503 => x"e73f8008", -2504 => x"5580d13f", -2505 => x"80088008", -2506 => x"7e297c83", -2507 => x"ffff0670", -2508 => x"78902b07", -2509 => x"51565858", -2510 => x"73772799", -2511 => x"388008ff", -2512 => x"05761555", -2513 => x"58757426", -2514 => x"8c387377", -2515 => x"278738ff", -2516 => x"18761555", -2517 => x"5878902b", -2518 => x"78077478", -2519 => x"31555bfa", -2520 => x"da39ff19", -2521 => x"76155559", -2522 => x"fb8639ff", -2523 => x"19761555", -2524 => x"59f8c039", -2525 => x"fe3d0d80", -2526 => x"53755274", -2527 => x"51d3c63f", -2528 => x"843d0d04", -2529 => x"fe3d0d81", -2530 => x"53755274", -2531 => x"51d3b63f", -2532 => x"843d0d04", -2533 => x"ff3d0d80", -2534 => x"edc00bfc", -2535 => x"05700852", -2536 => x"5270ff2e", -2537 => x"9138702d", -2538 => x"fc127008", -2539 => x"525270ff", -2540 => x"2e098106", -2541 => x"f138833d", -2542 => x"0d0404ff", -2543 => x"bbe73f04", -2544 => x"30313233", -2545 => x"34353637", -2546 => x"38390000", -2547 => x"44485259", -2548 => x"53544f4e", -2549 => x"45205052", -2550 => x"4f475241", -2551 => x"4d2c2053", -2552 => x"4f4d4520", -2553 => x"53545249", -2554 => x"4e470000", -2555 => x"44485259", -2556 => x"53544f4e", -2557 => x"45205052", -2558 => x"4f475241", -2559 => x"4d2c2031", -2560 => x"27535420", -2561 => x"53545249", -2562 => x"4e470000", -2563 => x"44687279", -2564 => x"73746f6e", -2565 => x"65204265", -2566 => x"6e63686d", -2567 => x"61726b2c", -2568 => x"20566572", -2569 => x"73696f6e", -2570 => x"20322e31", -2571 => x"20284c61", -2572 => x"6e677561", -2573 => x"67653a20", -2574 => x"43290a00", -2575 => x"50726f67", -2576 => x"72616d20", -2577 => x"636f6d70", -2578 => x"696c6564", -2579 => x"20776974", -2580 => x"68202772", -2581 => x"65676973", -2582 => x"74657227", -2583 => x"20617474", -2584 => x"72696275", -2585 => x"74650a00", -2586 => x"45786563", -2587 => x"7574696f", -2588 => x"6e207374", -2589 => x"61727473", -2590 => x"2c202564", -2591 => x"2072756e", -2592 => x"73207468", -2593 => x"726f7567", -2594 => x"68204468", -2595 => x"72797374", -2596 => x"6f6e650a", -2597 => x"00000000", -2598 => x"44485259", -2599 => x"53544f4e", -2600 => x"45205052", -2601 => x"4f475241", -2602 => x"4d2c2032", -2603 => x"274e4420", -2604 => x"53545249", -2605 => x"4e470000", -2606 => x"45786563", -2607 => x"7574696f", -2608 => x"6e20656e", -2609 => x"64730a00", -2610 => x"46696e61", -2611 => x"6c207661", -2612 => x"6c756573", -2613 => x"206f6620", -2614 => x"74686520", -2615 => x"76617269", -2616 => x"61626c65", -2617 => x"73207573", -2618 => x"65642069", -2619 => x"6e207468", -2620 => x"65206265", -2621 => x"6e63686d", -2622 => x"61726b3a", -2623 => x"0a000000", -2624 => x"496e745f", -2625 => x"476c6f62", -2626 => x"3a202020", -2627 => x"20202020", -2628 => x"20202020", -2629 => x"2025640a", -2630 => x"00000000", -2631 => x"20202020", -2632 => x"20202020", -2633 => x"73686f75", -2634 => x"6c642062", -2635 => x"653a2020", -2636 => x"2025640a", -2637 => x"00000000", -2638 => x"426f6f6c", -2639 => x"5f476c6f", -2640 => x"623a2020", -2641 => x"20202020", -2642 => x"20202020", -2643 => x"2025640a", -2644 => x"00000000", -2645 => x"43685f31", -2646 => x"5f476c6f", -2647 => x"623a2020", -2648 => x"20202020", -2649 => x"20202020", -2650 => x"2025630a", -2651 => x"00000000", -2652 => x"20202020", -2653 => x"20202020", -2654 => x"73686f75", -2655 => x"6c642062", -2656 => x"653a2020", -2657 => x"2025630a", -2658 => x"00000000", -2659 => x"43685f32", -2660 => x"5f476c6f", -2661 => x"623a2020", -2662 => x"20202020", -2663 => x"20202020", -2664 => x"2025630a", -2665 => x"00000000", -2666 => x"4172725f", -2667 => x"315f476c", -2668 => x"6f625b38", -2669 => x"5d3a2020", -2670 => x"20202020", -2671 => x"2025640a", -2672 => x"00000000", -2673 => x"4172725f", -2674 => x"325f476c", -2675 => x"6f625b38", -2676 => x"5d5b375d", -2677 => x"3a202020", -2678 => x"2025640a", -2679 => x"00000000", -2680 => x"20202020", -2681 => x"20202020", -2682 => x"73686f75", -2683 => x"6c642062", -2684 => x"653a2020", -2685 => x"204e756d", -2686 => x"6265725f", -2687 => x"4f665f52", -2688 => x"756e7320", -2689 => x"2b203130", -2690 => x"0a000000", -2691 => x"5074725f", -2692 => x"476c6f62", -2693 => x"2d3e0a00", -2694 => x"20205074", -2695 => x"725f436f", -2696 => x"6d703a20", -2697 => x"20202020", -2698 => x"20202020", -2699 => x"2025640a", -2700 => x"00000000", -2701 => x"20202020", -2702 => x"20202020", -2703 => x"73686f75", -2704 => x"6c642062", -2705 => x"653a2020", -2706 => x"2028696d", -2707 => x"706c656d", -2708 => x"656e7461", -2709 => x"74696f6e", -2710 => x"2d646570", -2711 => x"656e6465", -2712 => x"6e74290a", -2713 => x"00000000", -2714 => x"20204469", -2715 => x"7363723a", -2716 => x"20202020", -2717 => x"20202020", -2718 => x"20202020", -2719 => x"2025640a", -2720 => x"00000000", -2721 => x"2020456e", -2722 => x"756d5f43", -2723 => x"6f6d703a", -2724 => x"20202020", -2725 => x"20202020", -2726 => x"2025640a", -2727 => x"00000000", -2728 => x"2020496e", -2729 => x"745f436f", -2730 => x"6d703a20", -2731 => x"20202020", -2732 => x"20202020", -2733 => x"2025640a", -2734 => x"00000000", -2735 => x"20205374", -2736 => x"725f436f", -2737 => x"6d703a20", -2738 => x"20202020", -2739 => x"20202020", -2740 => x"2025730a", -2741 => x"00000000", -2742 => x"20202020", -2743 => x"20202020", -2744 => x"73686f75", -2745 => x"6c642062", -2746 => x"653a2020", -2747 => x"20444852", -2748 => x"5953544f", -2749 => x"4e452050", -2750 => x"524f4752", -2751 => x"414d2c20", -2752 => x"534f4d45", -2753 => x"20535452", -2754 => x"494e470a", -2755 => x"00000000", -2756 => x"4e657874", -2757 => x"5f507472", -2758 => x"5f476c6f", -2759 => x"622d3e0a", -2760 => x"00000000", -2761 => x"20202020", -2762 => x"20202020", -2763 => x"73686f75", -2764 => x"6c642062", -2765 => x"653a2020", -2766 => x"2028696d", -2767 => x"706c656d", -2768 => x"656e7461", -2769 => x"74696f6e", -2770 => x"2d646570", -2771 => x"656e6465", -2772 => x"6e74292c", -2773 => x"2073616d", -2774 => x"65206173", -2775 => x"2061626f", -2776 => x"76650a00", -2777 => x"496e745f", -2778 => x"315f4c6f", -2779 => x"633a2020", -2780 => x"20202020", -2781 => x"20202020", -2782 => x"2025640a", -2783 => x"00000000", -2784 => x"496e745f", -2785 => x"325f4c6f", -2786 => x"633a2020", +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"20202020", -2789 => x"2025640a", -2790 => x"00000000", -2791 => x"496e745f", -2792 => x"335f4c6f", -2793 => x"633a2020", +2788 => x"2025640a", +2789 => x"00000000", +2790 => x"43685f31", +2791 => x"5f476c6f", +2792 => x"623a2020", +2793 => x"20202020", 2794 => x"20202020", -2795 => x"20202020", -2796 => x"2025640a", -2797 => x"00000000", -2798 => x"456e756d", -2799 => x"5f4c6f63", -2800 => x"3a202020", -2801 => x"20202020", -2802 => x"20202020", -2803 => x"2025640a", -2804 => x"00000000", -2805 => x"5374725f", -2806 => x"315f4c6f", -2807 => x"633a2020", +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"20202020", -2810 => x"2025730a", -2811 => x"00000000", -2812 => x"20202020", -2813 => x"20202020", -2814 => x"73686f75", -2815 => x"6c642062", -2816 => x"653a2020", -2817 => x"20444852", -2818 => x"5953544f", -2819 => x"4e452050", -2820 => x"524f4752", -2821 => x"414d2c20", -2822 => x"31275354", -2823 => x"20535452", -2824 => x"494e470a", -2825 => x"00000000", -2826 => x"5374725f", -2827 => x"325f4c6f", -2828 => x"633a2020", -2829 => x"20202020", -2830 => x"20202020", -2831 => x"2025730a", -2832 => x"00000000", -2833 => x"20202020", -2834 => x"20202020", -2835 => x"73686f75", -2836 => x"6c642062", -2837 => x"653a2020", -2838 => x"20444852", -2839 => x"5953544f", -2840 => x"4e452050", -2841 => x"524f4752", -2842 => x"414d2c20", -2843 => x"32274e44", -2844 => x"20535452", -2845 => x"494e470a", -2846 => x"00000000", -2847 => x"55736572", -2848 => x"2074696d", -2849 => x"653a2025", -2850 => x"640a0000", -2851 => x"4d696372", -2852 => x"6f736563", -2853 => x"6f6e6473", -2854 => x"20666f72", -2855 => x"206f6e65", -2856 => x"2072756e", -2857 => x"20746872", -2858 => x"6f756768", -2859 => x"20446872", -2860 => x"7973746f", -2861 => x"6e653a20", -2862 => x"00000000", -2863 => x"2564200a", -2864 => x"00000000", -2865 => x"44687279", -2866 => x"73746f6e", -2867 => x"65732070", -2868 => x"65722053", -2869 => x"65636f6e", -2870 => x"643a2020", -2871 => x"20202020", -2872 => x"20202020", -2873 => x"20202020", -2874 => x"20202020", -2875 => x"20202020", -2876 => x"00000000", -2877 => x"56415820", -2878 => x"4d495053", -2879 => x"20726174", -2880 => x"696e6720", -2881 => x"2a203130", -2882 => x"3030203d", -2883 => x"20256420", -2884 => x"0a000000", -2885 => x"50726f67", -2886 => x"72616d20", -2887 => x"636f6d70", -2888 => x"696c6564", -2889 => x"20776974", -2890 => x"686f7574", -2891 => x"20277265", -2892 => x"67697374", -2893 => x"65722720", -2894 => x"61747472", -2895 => x"69627574", -2896 => x"650a0000", -2897 => x"4d656173", -2898 => x"75726564", -2899 => x"2074696d", -2900 => x"6520746f", -2901 => x"6f20736d", -2902 => x"616c6c20", -2903 => x"746f206f", -2904 => x"62746169", -2905 => x"6e206d65", -2906 => x"616e696e", -2907 => x"6766756c", -2908 => x"20726573", -2909 => x"756c7473", -2910 => x"0a000000", -2911 => x"506c6561", -2912 => x"73652069", -2913 => x"6e637265", -2914 => x"61736520", -2915 => x"6e756d62", -2916 => x"6572206f", -2917 => x"66207275", -2918 => x"6e730a00", -2919 => x"44485259", -2920 => x"53544f4e", -2921 => x"45205052", -2922 => x"4f475241", -2923 => x"4d2c2033", -2924 => x"27524420", -2925 => x"53545249", -2926 => x"4e470000", -2927 => x"43000000", -2928 => x"64756d6d", -2929 => x"792e6578", -2930 => x"65000000", -2931 => x"00010202", -2932 => x"03030303", -2933 => x"04040404", -2934 => x"04040404", -2935 => x"05050505", -2936 => x"05050505", -2937 => x"05050505", -2938 => x"05050505", -2939 => x"06060606", -2940 => x"06060606", -2941 => x"06060606", -2942 => x"06060606", -2943 => x"06060606", -2944 => x"06060606", -2945 => x"06060606", -2946 => x"06060606", -2947 => x"07070707", -2948 => x"07070707", -2949 => x"07070707", -2950 => x"07070707", -2951 => x"07070707", -2952 => x"07070707", -2953 => x"07070707", -2954 => x"07070707", -2955 => x"07070707", -2956 => x"07070707", -2957 => x"07070707", -2958 => x"07070707", -2959 => x"07070707", -2960 => x"07070707", -2961 => x"07070707", -2962 => x"07070707", -2963 => x"08080808", -2964 => x"08080808", -2965 => x"08080808", -2966 => x"08080808", -2967 => x"08080808", -2968 => x"08080808", -2969 => x"08080808", -2970 => x"08080808", -2971 => x"08080808", -2972 => x"08080808", -2973 => x"08080808", -2974 => x"08080808", -2975 => x"08080808", -2976 => x"08080808", -2977 => x"08080808", -2978 => x"08080808", -2979 => x"08080808", -2980 => x"08080808", -2981 => x"08080808", -2982 => x"08080808", -2983 => x"08080808", -2984 => x"08080808", -2985 => x"08080808", -2986 => x"08080808", -2987 => x"08080808", -2988 => x"08080808", -2989 => x"08080808", -2990 => x"08080808", -2991 => x"08080808", -2992 => x"08080808", -2993 => x"08080808", -2994 => x"08080808", -2995 => x"00ffffff", -2996 => x"ff00ffff", -2997 => x"ffff00ff", -2998 => x"ffffff00", -2999 => x"00000000", -3000 => x"00000000", -3001 => x"00000000", -3002 => x"000036c8", -3003 => x"000927c0", -3004 => x"00000000", -3005 => x"00000000", -3006 => x"00000000", +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"00000000", +3008 => x"2564200a", 3009 => x"00000000", -3010 => x"00000000", -3011 => x"00000000", -3012 => x"00000000", -3013 => x"00000000", -3014 => x"00000000", -3015 => x"00000000", -3016 => x"00000000", -3017 => x"ffffffff", -3018 => x"00000000", -3019 => x"00020000", -3020 => 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"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"00003158", -3161 => x"00003158", -3162 => x"00003160", -3163 => x"00003160", -3164 => x"00003168", -3165 => x"00003168", -3166 => x"00003170", -3167 => x"00003170", -3168 => x"00003178", -3169 => x"00003178", -3170 => x"00003180", -3171 => x"00003180", -3172 => x"00003188", -3173 => x"00003188", -3174 => x"00003190", -3175 => x"00003190", -3176 => x"00003198", -3177 => x"00003198", -3178 => x"000031a0", -3179 => x"000031a0", -3180 => x"000031a8", -3181 => x"000031a8", -3182 => x"000031b0", -3183 => x"000031b0", -3184 => x"000031b8", -3185 => x"000031b8", -3186 => x"000031c0", -3187 => x"000031c0", -3188 => x"000031c8", -3189 => x"000031c8", -3190 => x"000031d0", -3191 => x"000031d0", -3192 => x"000031d8", -3193 => x"000031d8", -3194 => x"000031e0", -3195 => x"000031e0", -3196 => x"000031e8", -3197 => x"000031e8", -3198 => x"000031f0", -3199 => x"000031f0", -3200 => x"000031f8", -3201 => x"000031f8", -3202 => x"00003200", -3203 => x"00003200", -3204 => x"00003208", -3205 => x"00003208", -3206 => x"00003210", -3207 => x"00003210", -3208 => x"00003218", -3209 => x"00003218", -3210 => x"00003220", -3211 => x"00003220", -3212 => x"00003228", -3213 => x"00003228", -3214 => x"00003230", -3215 => x"00003230", -3216 => x"00003238", -3217 => x"00003238", -3218 => x"00003240", -3219 => x"00003240", -3220 => x"00003248", -3221 => x"00003248", -3222 => x"00003250", -3223 => x"00003250", -3224 => x"00003258", -3225 => x"00003258", -3226 => x"00003260", -3227 => x"00003260", -3228 => x"00003268", -3229 => x"00003268", -3230 => x"00003270", -3231 => x"00003270", -3232 => x"00003278", -3233 => x"00003278", -3234 => x"00003280", -3235 => x"00003280", -3236 => x"00003288", -3237 => x"00003288", -3238 => x"00003290", -3239 => x"00003290", -3240 => x"00003298", -3241 => x"00003298", -3242 => x"000032a0", -3243 => x"000032a0", -3244 => x"000032a8", -3245 => x"000032a8", -3246 => x"000032b0", -3247 => x"000032b0", -3248 => x"000032b8", -3249 => x"000032b8", -3250 => x"000032c0", -3251 => x"000032c0", -3252 => x"000032c8", -3253 => x"000032c8", -3254 => x"000032d0", -3255 => x"000032d0", -3256 => x"000032d8", -3257 => x"000032d8", -3258 => x"000032e0", -3259 => x"000032e0", -3260 => x"000032e8", -3261 => x"000032e8", -3262 => x"000032f0", -3263 => x"000032f0", -3264 => x"000032f8", -3265 => x"000032f8", -3266 => x"00003300", -3267 => x"00003300", -3268 => x"00003308", -3269 => x"00003308", -3270 => x"00003310", -3271 => x"00003310", -3272 => x"00003318", -3273 => x"00003318", -3274 => x"00003320", -3275 => x"00003320", -3276 => x"00003328", -3277 => x"00003328", -3278 => x"0000333c", -3279 => x"00000000", -3280 => x"000035a4", -3281 => x"00003600", -3282 => x"0000365c", -3283 => x"00000000", -3284 => x"00000000", -3285 => x"00000000", -3286 => x"00000000", -3287 => x"00000000", -3288 => x"00000000", -3289 => x"00000000", -3290 => x"00000000", -3291 => x"00000000", -3292 => x"00002dbc", -3293 => x"00000000", -3294 => x"00000000", -3295 => x"00000000", -3296 => x"00000000", -3297 => x"00000000", -3298 => x"00000000", -3299 => x"00000000", -3300 => x"00000000", -3301 => x"00000000", -3302 => x"00000000", -3303 => x"00000000", -3304 => x"00000000", -3305 => x"00000000", -3306 => x"00000000", -3307 => x"00000000", -3308 => x"00000000", -3309 => x"00000000", -3310 => x"00000000", -3311 => x"00000000", -3312 => x"00000000", -3313 => x"00000000", -3314 => x"00000000", -3315 => x"00000000", -3316 => x"00000000", -3317 => x"00000000", -3318 => x"00000000", -3319 => x"00000000", -3320 => x"00000000", -3321 => x"00000001", -3322 => x"330eabcd", -3323 => x"1234e66d", -3324 => x"deec0005", -3325 => x"000b0000", -3326 => x"00000000", -3327 => x"00000000", -3328 => x"00000000", -3329 => x"00000000", -3330 => x"00000000", -3331 => x"00000000", -3332 => x"00000000", -3333 => x"00000000", -3334 => x"00000000", -3335 => x"00000000", -3336 => x"00000000", -3337 => x"00000000", -3338 => x"00000000", -3339 => x"00000000", -3340 => x"00000000", -3341 => x"00000000", -3342 => x"00000000", -3343 => x"00000000", -3344 => x"00000000", -3345 => x"00000000", -3346 => x"00000000", -3347 => x"00000000", -3348 => x"00000000", -3349 => x"00000000", -3350 => x"00000000", -3351 => x"00000000", -3352 => x"00000000", -3353 => x"00000000", -3354 => x"00000000", -3355 => x"00000000", -3356 => x"00000000", -3357 => x"00000000", -3358 => x"00000000", -3359 => x"00000000", -3360 => x"00000000", -3361 => x"00000000", -3362 => x"00000000", -3363 => x"00000000", -3364 => x"00000000", -3365 => x"00000000", -3366 => x"00000000", -3367 => x"00000000", -3368 => x"00000000", -3369 => x"00000000", -3370 => x"00000000", -3371 => x"00000000", -3372 => x"00000000", -3373 => x"00000000", -3374 => x"00000000", -3375 => x"00000000", -3376 => x"00000000", -3377 => x"00000000", -3378 => x"00000000", -3379 => x"00000000", -3380 => x"00000000", -3381 => x"00000000", -3382 => x"00000000", -3383 => x"00000000", -3384 => x"00000000", -3385 => x"00000000", -3386 => x"00000000", -3387 => x"00000000", -3388 => x"00000000", -3389 => x"00000000", -3390 => x"00000000", -3391 => x"00000000", -3392 => x"00000000", -3393 => x"00000000", -3394 => x"00000000", -3395 => x"00000000", -3396 => x"00000000", -3397 => x"00000000", -3398 => x"00000000", -3399 => x"00000000", -3400 => x"00000000", -3401 => x"00000000", -3402 => x"00000000", -3403 => x"00000000", -3404 => x"00000000", -3405 => x"00000000", -3406 => x"00000000", -3407 => x"00000000", -3408 => x"00000000", -3409 => x"00000000", -3410 => x"00000000", -3411 => x"00000000", -3412 => x"00000000", -3413 => x"00000000", -3414 => x"00000000", -3415 => x"00000000", -3416 => x"00000000", -3417 => x"00000000", -3418 => x"00000000", -3419 => x"00000000", -3420 => x"00000000", -3421 => x"00000000", -3422 => x"00000000", -3423 => 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", +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"00000000", -3426 => x"00000000", -3427 => x"00000000", +3425 => x"000037e8", +3426 => x"00003844", +3427 => x"000038a0", 3428 => x"00000000", 3429 => x"00000000", 3430 => x"00000000", @@ -3435,7 +3435,7 @@ 3434 => x"00000000", 3435 => x"00000000", 3436 => x"00000000", -3437 => x"00000000", +3437 => x"00003100", 3438 => x"00000000", 3439 => x"00000000", 3440 => x"00000000", @@ -3464,11 +3464,11 @@ 3463 => x"00000000", 3464 => x"00000000", 3465 => x"00000000", -3466 => x"00000000", -3467 => x"00000000", -3468 => x"00000000", -3469 => x"00000000", -3470 => 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", @@ -3500,8 +3500,153 @@ 3499 => x"00000000", 3500 => x"00000000", 3501 => x"00000000", -3502 => x"00002dc0", -3503 => x"ffffffff", +3502 => x"00000000", +3503 => x"00000000", 3504 => x"00000000", -3505 => x"ffffffff", +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", diff --git a/zpu/hdl/zpu4/test/hello/build.sh b/zpu/hdl/zpu4/test/hello/build.sh index 0d81138..dd87410 100644 --- a/zpu/hdl/zpu4/test/hello/build.sh +++ b/zpu/hdl/zpu4/test/hello/build.sh @@ -1,3 +1,4 @@ -zpu-elf-gcc -O3 -abel `pwd`/hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections -g +zpu-elf-gcc -O3 -phi `pwd`/hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections -g zpu-elf-objdump --disassemble-all >hello.dis hello.elf zpu-elf-objcopy -O binary hello.elf hello.bin +java -classpath ../../../../sw/simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.ram diff --git a/zpu/hdl/zpu4/test/hello/hello.bin b/zpu/hdl/zpu4/test/hello/hello.bin index fe17308..7c37759 100644 Binary files a/zpu/hdl/zpu4/test/hello/hello.bin and b/zpu/hdl/zpu4/test/hello/hello.bin differ diff --git a/zpu/hdl/zpu4/test/hello/hello.c b/zpu/hdl/zpu4/test/hello/hello.c index ea3dbb8..609c163 100644 --- a/zpu/hdl/zpu4/test/hello/hello.c +++ b/zpu/hdl/zpu4/test/hello/hello.c @@ -1,10 +1,6 @@ /* - -zpu-elf-gcc -abel `pwd`/hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections -g -zpu-elf-objdump --disassemble-all >hello.dis hello.elf -zpu-elf-objcopy -O binary hello.elf hello.bin - - * */ + * Small hello world example, does not use printf() + */ #include int j; diff --git a/zpu/hdl/zpu4/test/hello/hello.elf b/zpu/hdl/zpu4/test/hello/hello.elf index 999b9a3..73d28e7 100644 Binary files a/zpu/hdl/zpu4/test/hello/hello.elf and b/zpu/hdl/zpu4/test/hello/hello.elf differ diff --git a/zpu/hdl/zpu4/test/hello/hello.ram b/zpu/hdl/zpu4/test/hello/hello.ram index f310151..175d3a8 100644 --- a/zpu/hdl/zpu4/test/hello/hello.ram +++ b/zpu/hdl/zpu4/test/hello/hello.ram @@ -1,14 +1,14 @@ 0 => x"0b0b0b0b", -1 => x"80700b0b", -2 => x"80d3900c", +1 => x"82700b0b", +2 => x"80cfd80c", 3 => x"3a0b0b80", -4 => x"c8b20400", +4 => x"c6d00400", 5 => x"00000000", 6 => x"00000000", 7 => x"00000000", 8 => x"80088408", 9 => x"88080b0b", -10 => x"80c8fb2d", +10 => x"80c7972d", 11 => x"880c840c", 12 => x"800c0400", 13 => x"00000000", @@ -159,8 +159,8 @@ 158 => x"00000000", 159 => x"00000000", 160 => x"71fc0608", -161 => x"0b0b80d2", -162 => x"fc738306", +161 => x"0b0b80cf", +162 => x"c4738306", 163 => x"10100508", 164 => x"060b0b0b", 165 => x"88aa0400", @@ -168,16 +168,16 @@ 167 => x"00000000", 168 => x"80088408", 169 => x"88087575", -170 => x"0b0b0b8d", -171 => x"872d5050", +170 => x"0b0b0b8b", +171 => x"9f2d5050", 172 => x"80085688", 173 => x"0c840c80", 174 => x"0c510400", 175 => x"00000000", 176 => x"80088408", 177 => x"88087575", -178 => x"0b0b0b8d", -179 => x"cb2d5050", +178 => x"0b0b0b8b", +179 => x"e32d5050", 180 => x"80085688", 181 => x"0c840c80", 182 => x"0c510400", @@ -207,7 +207,7 @@ 206 => x"00000000", 207 => x"00000000", 208 => x"810b0b0b", -209 => x"80d38c0c", +209 => x"80cfd40c", 210 => x"51040000", 211 => x"00000000", 212 => x"00000000", @@ -254,8 +254,8 @@ 253 => x"00000000", 254 => x"00000000", 255 => x"00000000", -256 => x"83d93f80", -257 => x"ca953f04", +256 => x"82c53f80", +257 => x"c6d93f04", 258 => x"10101010", 259 => x"10101010", 260 => x"10101010", @@ -278,2394 +278,2394 @@ 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", +280 => x"fe3d0d0b", +281 => x"0b80dfc0", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c0085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"d408802e", +299 => x"a43880cf", +300 => x"d808822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc00c", +304 => x"82a0800b", +305 => x"80dfc40c", +306 => x"8290800b", +307 => x"80dfc80c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc0", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfc40cf8", +314 => x"80808480", +315 => x"0b80dfc8", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c00c80c0", +320 => x"a880940b", +321 => x"80dfc40c", +322 => x"0b0b80cf", +323 => x"8c0b80df", +324 => x"c80c0470", +325 => x"7080dfcc", +326 => x"335170a7", +327 => x"3880cfe0", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe00c", +332 => x"702d80cf", +333 => x"e0087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfcc3450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"bc08802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfbc510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"fe3d0d89", +349 => x"5380cf90", +350 => x"5182c13f", +351 => x"80cfa051", +352 => x"82ba3f81", +353 => x"0a0b80df", +354 => x"d80cff0b", +355 => x"80dfdc0c", +356 => x"ff135372", +357 => x"8025de38", +358 => x"72800c84", +359 => x"3d0d04fb", +360 => x"3d0d7779", +361 => x"55558056", +362 => x"757524ab", +363 => x"38807424", +364 => x"9d388053", +365 => x"73527451", +366 => x"80e13f80", +367 => x"08547580", +368 => x"2e853880", +369 => x"08305473", +370 => x"800c873d", +371 => x"0d047330", +372 => x"76813257", +373 => x"54dc3974", +374 => x"30558156", +375 => x"738025d2", +376 => x"38ec39fa", +377 => x"3d0d787a", +378 => x"57558057", +379 => x"767524a4", +380 => x"38759f2c", +381 => x"54815375", +382 => x"74327431", +383 => x"5274519b", +384 => x"3f800854", +385 => x"76802e85", +386 => x"38800830", +387 => x"5473800c", +388 => x"883d0d04", +389 => x"74305581", +390 => x"57d739fc", +391 => x"3d0d7678", +392 => x"53548153", +393 => x"80747326", +394 => x"52557280", +395 => x"2e983870", +396 => x"802eab38", +397 => x"807224a6", +398 => x"38711073", +399 => x"10757226", +400 => x"53545272", +401 => x"ea387351", +402 => x"78833874", +403 => x"5170800c", +404 => x"863d0d04", +405 => x"720a100a", +406 => x"720a100a", +407 => x"53537280", +408 => x"2ee43871", +409 => x"7426ed38", +410 => x"73723175", +411 => x"7407740a", +412 => x"100a740a", +413 => x"100a5555", +414 => x"5654e339", +415 => x"f73d0d7c", +416 => x"70525380", +417 => x"f93f7254", +418 => x"80085580", +419 => x"cfb05681", +420 => x"57800881", +421 => x"055a8b3d", +422 => x"e4115953", +423 => x"8259f413", +424 => x"527b8811", +425 => x"08525381", +426 => x"b23f8008", +427 => x"30708008", +428 => x"079f2c8a", +429 => x"07800c53", +430 => x"8b3d0d04", +431 => x"f63d0d7c", +432 => x"80cfe408", +433 => x"71535553", +434 => x"b53f7255", +435 => x"80085680", +436 => x"cfb05781", +437 => x"58800881", +438 => x"055b8c3d", +439 => x"e4115a53", +440 => x"825af413", +441 => x"52881408", +442 => x"5180f03f", +443 => x"80083070", +444 => x"8008079f", +445 => x"2c8a0780", +446 => x"0c548c3d", +447 => x"0d047070", +448 => x"70707570", +449 => x"71830653", +450 => x"555270b4", +451 => x"38717008", +452 => x"7009f7fb", +453 => x"fdff1206", +454 => x"f8848281", +455 => x"80065452", +456 => x"53719b38", +457 => x"84137008", +458 => x"7009f7fb", +459 => x"fdff1206", +460 => x"f8848281", +461 => x"80065452", +462 => x"5371802e", +463 => x"e7387252", +464 => x"71335372", +465 => x"802e8a38", +466 => x"81127033", +467 => x"545272f8", +468 => x"38717431", +469 => x"800c5050", +470 => x"505004f2", +471 => x"3d0d6062", +472 => x"88110870", +473 => x"58565f5a", +474 => x"73802e81", +475 => x"8c388c1a", +476 => x"2270832a", +477 => x"81328106", +478 => x"56587486", +479 => x"38901a08", +480 => x"91387951", +481 => x"90b73fff", +482 => x"55800880", +483 => x"ec388c1a", +484 => x"22587d08", +485 => x"55807883", +486 => x"ffff0670", +487 => x"0a100a81", +488 => x"06415c57", +489 => x"7e772e80", +490 => x"d7387690", +491 => x"38740884", +492 => x"16088817", +493 => x"57585676", +494 => x"802ef238", +495 => x"76548880", +496 => x"77278438", +497 => x"88805473", +498 => x"5375529c", +499 => x"1a0851a4", +500 => x"1a085877", +501 => x"2d800b80", +502 => x"082582e0", +503 => x"38800816", +504 => x"77800831", +505 => x"7f880508", +506 => x"80083170", +507 => x"6188050c", +508 => x"5b585678", +509 => x"ffb43880", +510 => x"5574800c", +511 => x"903d0d04", +512 => x"7a813281", +513 => x"06774056", +514 => x"75802e81", +515 => x"bd387690", +516 => x"38740884", +517 => x"16088817", +518 => x"57585976", +519 => x"802ef238", +520 => x"881a0878", +521 => x"83ffff06", +522 => x"70892a81", +523 => x"06565956", +524 => x"73802e82", +525 => x"f8387577", +526 => x"278b3877", +527 => x"872a8106", +528 => x"5c7b82b5", +529 => x"38767627", +530 => x"83387656", +531 => x"75537852", +532 => x"79085185", +533 => x"833f881a", +534 => x"08763188", +535 => x"1b0c7908", +536 => x"167a0c76", +537 => x"56751977", +538 => x"77317f88", +539 => x"05087831", +540 => x"70618805", +541 => x"0c415859", +542 => x"7e802efe", +543 => x"fa388c1a", +544 => x"2258ff8a", +545 => x"39787954", +546 => x"7c537b52", +547 => x"5684c93f", +548 => x"881a0879", +549 => x"31881b0c", +550 => x"7908197a", +551 => x"0c7c7631", +552 => x"5d7c8e38", +553 => x"79518ff2", +554 => x"3f800881", +555 => x"8f388008", +556 => x"5f751c77", +557 => x"77317f88", +558 => x"05087831", +559 => x"70618805", +560 => x"0c5d585c", +561 => x"7a802efe", +562 => x"ae387681", +563 => x"83387408", +564 => x"84160888", +565 => x"1757585c", +566 => x"76802ef2", +567 => x"3876538a", +568 => x"527b5182", +569 => x"d33f8008", +570 => x"7c318105", +571 => x"5d800884", +572 => x"3881175d", +573 => x"815f7c59", +574 => x"767d2783", +575 => x"38765994", +576 => x"1a08881b", +577 => x"08115758", +578 => x"807a085c", +579 => x"54901a08", +580 => x"7b278338", +581 => x"81547579", +582 => x"25843873", +583 => x"ba387779", +584 => x"24fee238", +585 => x"77537b52", +586 => x"9c1a0851", +587 => x"a41a0859", +588 => x"782d8008", +589 => x"56800880", +590 => x"24fee238", +591 => x"8c1a2280", +592 => x"c0075e7d", +593 => x"8c1b23ff", +594 => x"5574800c", +595 => x"903d0d04", +596 => x"7effa338", +597 => x"ff873975", +598 => x"537b527a", +599 => x"5182f93f", +600 => x"7908167a", +601 => x"0c79518e", +602 => x"b13f8008", +603 => x"cf387c76", +604 => x"315d7cfe", +605 => x"bc38feac", +606 => x"39901a08", +607 => x"7a087131", +608 => x"78117056", +609 => x"5a575280", +610 => x"cfe40851", +611 => x"84943f80", +612 => x"08802eff", +613 => x"a7388008", +614 => x"901b0c80", +615 => x"08167a0c", +616 => x"77941b0c", +617 => x"76881b0c", +618 => x"7656fd99", +619 => x"39790858", +620 => x"901a0878", +621 => x"27833881", +622 => x"54757727", +623 => x"843873b3", +624 => x"38941a08", +625 => x"54737726", +626 => x"80d33873", +627 => x"5378529c", +628 => x"1a0851a4", +629 => x"1a085877", +630 => x"2d800856", +631 => x"80088024", +632 => x"fd83388c", +633 => x"1a2280c0", +634 => x"075e7d8c", +635 => x"1b23ff55", +636 => x"fed73975", +637 => x"53785277", +638 => x"5181dd3f", +639 => x"7908167a", +640 => x"0c79518d", +641 => x"953f8008", +642 => x"802efcd9", +643 => x"388c1a22", +644 => x"80c0075e", +645 => x"7d8c1b23", +646 => x"ff55fead", +647 => x"39767754", +648 => x"79537852", +649 => x"5681b13f", +650 => x"881a0877", +651 => x"31881b0c", +652 => x"7908177a", +653 => x"0cfcae39", +654 => x"fa3d0d7a", +655 => x"79028805", +656 => x"a7053355", +657 => x"53548374", +658 => x"2780df38", +659 => x"71830651", +660 => x"7080d738", +661 => x"71715755", +662 => x"83517582", +663 => x"802913ff", +664 => x"12525670", +665 => x"8025f338", +666 => x"837427bc", +667 => x"38740876", +668 => x"327009f7", +669 => x"fbfdff12", +670 => x"06f88482", +671 => x"81800651", +672 => x"5170802e", +673 => x"98387451", +674 => x"80527033", +675 => x"5772772e", +676 => x"b9388111", +677 => x"81135351", +678 => x"837227ee", +679 => x"38fc1484", +680 => x"16565473", +681 => x"8326c638", +682 => x"7452ff14", +683 => x"5170ff2e", +684 => x"97387133", +685 => x"5472742e", +686 => x"98388112", +687 => x"ff125252", +688 => x"70ff2e09", +689 => x"8106eb38", +690 => x"80517080", +691 => x"0c883d0d", +692 => x"0471800c", +693 => x"883d0d04", +694 => x"fa3d0d78", +695 => x"7a7c7272", +696 => x"72595755", +697 => x"58565774", +698 => x"7727b238", +699 => x"75155176", +700 => x"7127aa38", +701 => x"707618ff", +702 => x"18535353", +703 => x"70ff2e96", +704 => x"38ff12ff", +705 => x"14545272", +706 => x"337234ff", +707 => x"115170ff", +708 => x"2e098106", +709 => x"ec387680", +710 => x"0c883d0d", +711 => x"048f7627", +712 => x"80e63874", +713 => x"77078306", +714 => x"517080dc", +715 => x"38767552", +716 => x"53707084", +717 => x"05520873", +718 => x"70840555", +719 => x"0c727170", +720 => x"84055308", +721 => x"71708405", +722 => x"530c7170", +723 => x"84055308", +724 => x"71708405", +725 => x"530c7170", +726 => x"84055308", +727 => x"71708405", +728 => x"530cf015", +729 => x"5553738f", +730 => x"26c73883", +731 => x"74279538", +732 => x"70708405", +733 => x"52087370", +734 => x"8405550c", +735 => x"fc145473", +736 => x"8326ed38", +737 => x"72715452", +738 => x"ff145170", +739 => x"ff2eff86", +740 => x"38727081", +741 => x"05543372", +742 => x"70810554", +743 => x"34ff1151", +744 => x"ea39ef3d", +745 => x"0d636567", +746 => x"405d427b", +747 => x"802e8582", +748 => x"386151a9", +749 => x"e73ff81c", +750 => x"70841208", +751 => x"70fc0670", +752 => x"628b0570", +753 => x"f8064159", +754 => x"455c5f41", +755 => x"57967427", +756 => x"82c53880", +757 => x"7b247e7c", +758 => x"26075880", +759 => x"5477742e", +760 => x"09810682", +761 => x"ab38787b", +762 => x"2581fe38", +763 => x"781780d7", +764 => x"a00b8805", +765 => x"085b5679", +766 => x"762e84c5", +767 => x"38841608", +768 => x"70fe0617", +769 => x"84110881", +770 => x"06415555", +771 => x"7e828d38", +772 => x"74fc0658", +773 => x"79762e84", +774 => x"e3387818", +775 => x"5f7e7b25", +776 => x"81ff387c", +777 => x"81065473", +778 => x"82c13876", +779 => x"77083184", +780 => x"1108fc06", +781 => x"56577580", +782 => x"2e913879", +783 => x"762e84f0", +784 => x"38741819", +785 => x"58777b25", +786 => x"84913876", +787 => x"802e829b", +788 => x"38781556", +789 => x"7a762482", +790 => x"92388c17", +791 => x"08881808", +792 => x"718c120c", +793 => x"88120c5e", +794 => x"75598817", +795 => x"61fc055b", +796 => x"5679a426", +797 => x"85ff387b", +798 => x"76595593", +799 => x"7a2780c9", +800 => x"387b7084", +801 => x"055d087c", +802 => x"56760c74", +803 => x"70840556", +804 => x"088c180c", +805 => x"9017589b", +806 => x"7a27ae38", +807 => x"74708405", +808 => x"5608780c", +809 => x"74708405", +810 => x"56089418", +811 => x"0c981758", +812 => x"a37a2795", +813 => x"38747084", +814 => x"05560878", +815 => x"0c747084", +816 => x"0556089c", +817 => x"180ca017", +818 => x"58747084", +819 => x"05560875", +820 => x"5f787084", +821 => x"055a0c77", +822 => x"7e708405", +823 => x"40087170", +824 => x"8405530c", +825 => x"7e08710c", +826 => x"5d787b31", +827 => x"56758f26", +828 => x"80c93884", +829 => x"17088106", +830 => x"79078418", +831 => x"0c781784", +832 => x"11088107", +833 => x"84120c5b", +834 => x"6151a791", +835 => x"3f881754", +836 => x"73800c93", +837 => x"3d0d0490", +838 => x"5bfdb839", +839 => x"7756fe83", +840 => x"398c1608", +841 => x"88170871", +842 => x"8c120c88", +843 => x"120c587e", +844 => x"707c3157", +845 => x"598f7627", +846 => x"ffb9387a", +847 => x"17841808", +848 => x"81067c07", +849 => x"84190c76", +850 => x"81078412", +851 => x"0c761184", +852 => x"11088107", +853 => x"84120c5b", +854 => x"88055261", +855 => x"518fda3f", +856 => x"6151a6b9", +857 => x"3f881754", +858 => x"ffa6397d", +859 => x"52615197", +860 => x"d73f8008", +861 => x"5a800880", +862 => x"2e81ab38", +863 => x"8008f805", +864 => x"60840508", +865 => x"fe066105", +866 => x"58557477", +867 => x"2e83f238", +868 => x"fc195877", +869 => x"a42681b0", +870 => x"387b8008", +871 => x"56579378", +872 => x"2780dc38", +873 => x"7b707084", +874 => x"05520880", +875 => x"08708405", +876 => x"800c0c80", +877 => x"08717084", +878 => x"0553085d", +879 => x"567b7670", +880 => x"8405580c", +881 => x"579b7827", +882 => x"b6387670", +883 => x"84055808", +884 => x"75708405", +885 => x"570c7670", +886 => x"84055808", +887 => x"75708405", +888 => x"570ca378", +889 => x"27993876", +890 => x"70840558", +891 => x"08757084", +892 => x"05570c76", +893 => x"70840558", +894 => x"08757084", +895 => x"05570c76", +896 => x"70840558", +897 => x"08775e75", +898 => x"70840557", +899 => x"0c747d70", +900 => x"84055f08", +901 => x"71708405", +902 => x"530c7d08", +903 => x"710c5f7b", +904 => x"5261518e", +905 => x"943f6151", +906 => x"a4f33f79", +907 => x"800c933d", +908 => x"0d047d52", +909 => x"61519690", +910 => x"3f800880", +911 => x"0c933d0d", +912 => x"04841608", +913 => x"55fbc939", +914 => x"77537b52", +915 => x"800851a2", +916 => x"a53f7b52", +917 => x"61518de1", +918 => x"3fcc398c", +919 => x"16088817", +920 => x"08718c12", +921 => x"0c88120c", +922 => x"5d8c1708", +923 => x"88180871", +924 => x"8c120c88", +925 => x"120c5977", +926 => x"59fbef39", +927 => x"7818901c", +928 => x"40557e75", +929 => x"24fb9c38", +930 => x"7a177080", +931 => x"d7a00b88", +932 => x"050c757c", +933 => x"31810784", +934 => x"120c5684", +935 => x"17088106", +936 => x"7b078418", +937 => x"0c6151a3", +938 => x"f43f8817", +939 => x"54fce139", +940 => x"74181990", +941 => x"1c5e5a7c", +942 => x"7a24fb8f", +943 => x"388c1708", +944 => x"88180871", +945 => x"8c120c88", +946 => x"120c5e88", +947 => x"1761fc05", +948 => x"575975a4", +949 => x"2681b638", +950 => x"7b795955", +951 => x"93762780", +952 => x"c9387b70", +953 => x"84055d08", +954 => x"7c56790c", +955 => x"74708405", +956 => x"56088c18", +957 => x"0c901758", +958 => x"9b7627ae", +959 => x"38747084", +960 => x"05560878", +961 => x"0c747084", +962 => x"05560894", +963 => x"180c9817", +964 => x"58a37627", +965 => x"95387470", +966 => x"84055608", +967 => x"780c7470", +968 => x"84055608", +969 => x"9c180ca0", +970 => x"17587470", +971 => x"84055608", +972 => x"75417870", +973 => x"84055a0c", +974 => x"77607084", +975 => x"05420871", +976 => x"70840553", +977 => x"0c600871", +978 => x"0c5e7a17", +979 => x"7080d7a0", +980 => x"0b88050c", +981 => x"7a7c3181", +982 => x"0784120c", +983 => x"58841708", +984 => x"81067b07", +985 => x"84180c61", +986 => x"51a2b23f", +987 => x"78547380", +988 => x"0c933d0d", +989 => x"0479537b", +990 => x"5275519f", +991 => x"f93ffae9", +992 => x"39841508", +993 => x"fc061960", +994 => x"5859fadd", +995 => x"3975537b", +996 => x"5278519f", +997 => x"e13f7a17", +998 => x"7080d7a0", +999 => x"0b88050c", +1000 => x"7a7c3181", +1001 => x"0784120c", +1002 => x"58841708", +1003 => x"81067b07", +1004 => x"84180c61", +1005 => x"51a1e63f", +1006 => x"7854ffb2", +1007 => x"39fa3d0d", +1008 => x"7880cfe4", +1009 => x"085455b8", +1010 => x"1308802e", +1011 => x"81af388c", +1012 => x"15227083", +1013 => x"ffff0670", +1014 => x"832a8132", +1015 => x"81065555", +1016 => x"5672802e", +1017 => x"80da3873", +1018 => x"842a8132", +1019 => x"810657ff", +1020 => x"537680f2", +1021 => x"3873822a", +1022 => x"81065473", +1023 => x"802eb938", +1024 => x"b0150854", +1025 => x"73802e9c", +1026 => x"3880c015", +1027 => x"5373732e", +1028 => x"8f387352", +1029 => x"80cfe408", +1030 => x"518a9e3f", +1031 => x"8c152256", +1032 => x"76b0160c", +1033 => x"75db0657", +1034 => x"768c1623", +1035 => x"800b8416", +1036 => x"0c901508", +1037 => x"750c7656", +1038 => x"75880754", +1039 => x"738c1623", +1040 => x"90150880", +1041 => x"2ebf388c", +1042 => x"15227081", +1043 => x"06555373", +1044 => x"9c38720a", +1045 => x"100a8106", +1046 => x"56758538", +1047 => x"94150854", +1048 => x"7388160c", +1049 => x"80537280", +1050 => x"0c883d0d", +1051 => x"04800b88", +1052 => x"160c9415", +1053 => x"08309816", +1054 => x"0c8053ea", +1055 => x"39725182", +1056 => x"a63ffecb", +1057 => x"3974518f", +1058 => x"bc3f8c15", +1059 => x"22708106", +1060 => x"55537380", +1061 => x"2effbb38", +1062 => x"d439f83d", +1063 => x"0d7a5776", +1064 => x"802e8197", +1065 => x"3880cfe4", +1066 => x"0854b814", +1067 => x"08802e80", +1068 => x"eb388c17", +1069 => x"2270902b", +1070 => x"70902c70", +1071 => x"832a8132", +1072 => x"81065b5b", +1073 => x"57557780", +1074 => x"cb389017", +1075 => x"08567580", +1076 => x"2e80c138", +1077 => x"76087631", +1078 => x"76780c79", +1079 => x"83065555", +1080 => x"73853894", +1081 => x"17085877", +1082 => x"88180c80", +1083 => x"7525a538", +1084 => x"74537552", +1085 => x"9c170851", +1086 => x"a4170854", +1087 => x"732d800b", +1088 => x"80082580", +1089 => x"c9388008", +1090 => x"16758008", +1091 => x"31565674", +1092 => x"8024dd38", +1093 => x"800b800c", +1094 => x"8a3d0d04", +1095 => x"73518187", +1096 => x"3f8c1722", +1097 => x"70902b70", +1098 => x"902c7083", +1099 => x"2a813281", +1100 => x"065b5b57", +1101 => x"5577dd38", +1102 => x"ff9039a1", +1103 => x"9a5280cf", +1104 => x"e408518c", +1105 => x"d03f8008", +1106 => x"800c8a3d", +1107 => x"0d048c17", +1108 => x"2280c007", +1109 => x"58778c18", +1110 => x"23ff0b80", +1111 => x"0c8a3d0d", +1112 => x"04fa3d0d", +1113 => x"797080dc", +1114 => x"298c1154", +1115 => x"7a535657", +1116 => x"8fd63f80", +1117 => x"08800855", +1118 => x"56800880", +1119 => x"2ea23880", +1120 => x"088c0554", +1121 => x"800b8008", +1122 => x"0c768008", +1123 => x"84050c73", +1124 => x"80088805", +1125 => x"0c745380", +1126 => x"5273519c", +1127 => x"f53f7554", +1128 => x"73800c88", +1129 => x"3d0d0470", +1130 => x"707074a8", +1131 => x"e60bbc12", +1132 => x"0c53810b", +1133 => x"b8140c80", +1134 => x"0b84dc14", +1135 => x"0c830b84", +1136 => x"e0140c84", +1137 => x"e81384e4", +1138 => x"140c8413", +1139 => x"08518070", +1140 => x"720c7084", +1141 => x"130c7088", +1142 => x"130c5284", +1143 => x"0b8c1223", +1144 => x"718e1223", +1145 => x"7190120c", +1146 => x"7194120c", +1147 => x"7198120c", +1148 => x"709c120c", +1149 => x"80c1d50b", +1150 => x"a0120c80", +1151 => x"c2a10ba4", +1152 => x"120c80c3", +1153 => x"9d0ba812", +1154 => x"0c80c3ee", +1155 => x"0bac120c", +1156 => x"88130872", +1157 => x"710c7284", +1158 => x"120c7288", +1159 => x"120c5189", +1160 => x"0b8c1223", +1161 => x"810b8e12", +1162 => x"23719012", +1163 => x"0c719412", +1164 => x"0c719812", +1165 => x"0c709c12", +1166 => x"0c80c1d5", +1167 => x"0ba0120c", +1168 => x"80c2a10b", +1169 => x"a4120c80", +1170 => x"c39d0ba8", +1171 => x"120c80c3", +1172 => x"ee0bac12", +1173 => x"0c8c1308", +1174 => x"72710c72", +1175 => x"84120c72", +1176 => x"88120c51", +1177 => x"8a0b8c12", +1178 => x"23820b8e", +1179 => x"12237190", +1180 => x"120c7194", +1181 => x"120c7198", +1182 => x"120c709c", +1183 => x"120c80c1", +1184 => x"d50ba012", +1185 => x"0c80c2a1", +1186 => x"0ba4120c", +1187 => x"80c39d0b", +1188 => x"a8120c80", +1189 => x"c3ee0bac", +1190 => x"120c5050", +1191 => x"5004f83d", +1192 => x"0d7a80cf", +1193 => x"e408b811", +1194 => x"08575758", +1195 => x"7481ec38", +1196 => x"a8e60bbc", +1197 => x"170c810b", +1198 => x"b8170c74", +1199 => x"84dc170c", +1200 => x"830b84e0", +1201 => x"170c84e8", +1202 => x"1684e417", +1203 => x"0c841608", +1204 => x"75710c75", +1205 => x"84120c75", +1206 => x"88120c59", +1207 => x"840b8c1a", +1208 => x"23748e1a", +1209 => x"2374901a", +1210 => x"0c74941a", +1211 => x"0c74981a", +1212 => x"0c789c1a", +1213 => x"0c80c1d5", +1214 => x"0ba01a0c", +1215 => x"80c2a10b", +1216 => x"a41a0c80", +1217 => x"c39d0ba8", +1218 => x"1a0c80c3", +1219 => x"ee0bac1a", +1220 => x"0c881608", +1221 => x"75710c75", +1222 => x"84120c75", +1223 => x"88120c57", +1224 => x"890b8c18", +1225 => x"23810b8e", +1226 => x"18237490", +1227 => x"180c7494", +1228 => x"180c7498", +1229 => x"180c769c", +1230 => x"180c80c1", +1231 => x"d50ba018", +1232 => x"0c80c2a1", +1233 => x"0ba4180c", +1234 => x"80c39d0b", +1235 => x"a8180c80", +1236 => x"c3ee0bac", +1237 => x"180c8c16", +1238 => x"0875710c", +1239 => x"7584120c", +1240 => x"7588120c", +1241 => x"548a0b8c", +1242 => x"1523820b", +1243 => x"8e152374", +1244 => x"90150c74", +1245 => x"94150c74", +1246 => x"98150c73", +1247 => x"9c150c80", +1248 => x"c1d50ba0", +1249 => x"150c80c2", +1250 => x"a10ba415", +1251 => x"0c80c39d", +1252 => x"0ba8150c", +1253 => x"80c3ee0b", +1254 => x"ac150c84", +1255 => x"dc168811", +1256 => x"08841208", +1257 => x"ff055757", +1258 => x"57807524", +1259 => x"9f388c16", +1260 => x"2270902b", +1261 => x"70902c51", +1262 => x"55597380", +1263 => x"2e80ed38", +1264 => x"80dc16ff", +1265 => x"16565674", +1266 => x"8025e338", +1267 => x"76085574", +1268 => x"802e8f38", +1269 => x"74881108", +1270 => x"841208ff", +1271 => x"05575757", +1272 => x"c83982fc", +1273 => x"5277518a", +1274 => x"df3f8008", +1275 => x"80085556", +1276 => x"8008802e", +1277 => x"a3388008", +1278 => x"8c057580", +1279 => x"080c5484", +1280 => x"0b800884", +1281 => x"050c7380", +1282 => x"0888050c", +1283 => x"82f05374", +1284 => x"52735197", +1285 => x"fd3f7554", +1286 => x"7374780c", +1287 => x"5573ffb4", +1288 => x"388c780c", +1289 => x"800b800c", +1290 => x"8a3d0d04", +1291 => x"810b8c17", +1292 => x"2373760c", +1293 => x"7388170c", +1294 => x"7384170c", +1295 => x"7390170c", +1296 => x"7394170c", +1297 => x"7398170c", +1298 => x"ff0b8e17", +1299 => x"2373b017", +1300 => x"0c73b417", +1301 => x"0c7380c4", +1302 => x"170c7380", +1303 => x"c8170c75", +1304 => x"800c8a3d", +1305 => x"0d047070", +1306 => x"a19a5273", +1307 => x"5186a63f", +1308 => x"50500470", +1309 => x"70a19a52", +1310 => x"80cfe408", +1311 => x"5186963f", +1312 => x"505004fb", +1313 => x"3d0d7770", +1314 => x"52569890", +1315 => x"3f80d7a0", +1316 => x"0b880508", +1317 => x"841108fc", +1318 => x"06707b31", +1319 => x"9fef05e0", +1320 => x"8006e080", +1321 => x"05525555", +1322 => x"a0807524", +1323 => x"94388052", +1324 => x"755197ea", +1325 => x"3f80d7a8", +1326 => x"08145372", +1327 => x"80082e8f", +1328 => x"38755197", +1329 => x"d83f8053", +1330 => x"72800c87", +1331 => x"3d0d0474", +1332 => x"30527551", +1333 => x"97c83f80", +1334 => x"08ff2ea8", +1335 => x"3880d7a0", +1336 => x"0b880508", +1337 => x"74763181", +1338 => x"0784120c", +1339 => x"5380d6e4", +1340 => x"08753180", +1341 => x"d6e40c75", +1342 => x"5197a23f", +1343 => x"810b800c", +1344 => x"873d0d04", +1345 => x"80527551", +1346 => x"97943f80", +1347 => x"d7a00b88", +1348 => x"05088008", +1349 => x"71315454", +1350 => x"8f7325ff", +1351 => x"a4388008", +1352 => x"80d79408", +1353 => x"3180d6e4", +1354 => x"0c728107", +1355 => x"84150c75", +1356 => x"5196ea3f", +1357 => x"8053ff90", +1358 => x"39f73d0d", +1359 => x"7b7d545a", +1360 => x"72802e82", +1361 => x"83387951", +1362 => x"96d23ff8", +1363 => x"13841108", +1364 => x"70fe0670", +1365 => x"13841108", +1366 => x"fc065c57", +1367 => x"58545780", +1368 => x"d7a80874", +1369 => x"2e82de38", +1370 => x"7784150c", +1371 => x"80738106", +1372 => x"56597479", +1373 => x"2e81d538", +1374 => x"77148411", +1375 => x"08810656", +1376 => x"5374a038", +1377 => x"77165678", +1378 => x"81e63888", +1379 => x"14085574", +1380 => x"80d7a82e", +1381 => x"82f9388c", +1382 => x"1408708c", +1383 => x"170c7588", +1384 => x"120c5875", +1385 => x"81078418", +1386 => x"0c751776", +1387 => x"710c5478", +1388 => x"81913883", +1389 => x"ff762781", +1390 => x"c8387589", +1391 => x"2a76832a", +1392 => x"54547380", +1393 => x"2ebf3875", +1394 => x"862ab805", +1395 => x"53847427", +1396 => x"b43880db", +1397 => x"14539474", +1398 => x"27ab3875", +1399 => x"8c2a80ee", +1400 => x"055380d4", +1401 => x"74279e38", +1402 => x"758f2a80", +1403 => x"f7055382", +1404 => x"d4742791", +1405 => x"3875922a", +1406 => x"80fc0553", +1407 => x"8ad47427", +1408 => x"843880fe", +1409 => x"53721010", +1410 => x"1080d7a0", +1411 => x"05881108", +1412 => x"55557375", +1413 => x"2e82bf38", +1414 => x"841408fc", +1415 => x"06597579", +1416 => x"278d3888", +1417 => x"14085473", +1418 => x"752e0981", +1419 => x"06ea388c", +1420 => x"1408708c", +1421 => x"190c7488", +1422 => x"190c7788", +1423 => x"120c5576", +1424 => x"8c150c79", +1425 => x"5194d63f", +1426 => x"8b3d0d04", +1427 => x"76087771", +1428 => x"31587605", +1429 => x"88180856", +1430 => x"567480d7", +1431 => x"a82e80e0", +1432 => x"388c1708", +1433 => x"708c170c", +1434 => x"7588120c", +1435 => x"53fe8939", +1436 => x"8814088c", +1437 => x"1508708c", +1438 => x"130c5988", +1439 => x"190cfea3", +1440 => x"3975832a", +1441 => x"70545480", +1442 => x"74248198", +1443 => x"3872822c", +1444 => x"81712b80", +1445 => x"d7a40807", +1446 => x"80d7a00b", +1447 => x"84050c74", +1448 => x"10101080", +1449 => x"d7a00588", +1450 => x"1108718c", +1451 => x"1b0c7088", +1452 => x"1b0c7988", +1453 => x"130c565a", +1454 => x"55768c15", +1455 => x"0cff8439", +1456 => x"8159fdb4", +1457 => x"39771673", +1458 => x"81065455", +1459 => x"72983876", +1460 => x"08777131", +1461 => x"5875058c", +1462 => x"18088819", +1463 => x"08718c12", +1464 => x"0c88120c", +1465 => x"55557481", +1466 => x"0784180c", +1467 => x"7680d7a0", +1468 => x"0b88050c", +1469 => x"80d79c08", +1470 => x"7526fec7", +1471 => x"3880d798", +1472 => x"08527951", +1473 => x"fafd3f79", +1474 => x"5193923f", +1475 => x"feba3981", +1476 => x"778c170c", +1477 => x"7788170c", +1478 => x"758c190c", +1479 => x"7588190c", +1480 => x"59fd8039", +1481 => x"83147082", +1482 => x"2c81712b", +1483 => x"80d7a408", +1484 => x"0780d7a0", +1485 => x"0b84050c", +1486 => x"75101010", +1487 => x"80d7a005", +1488 => x"88110871", +1489 => x"8c1c0c70", +1490 => x"881c0c7a", +1491 => x"88130c57", +1492 => x"5b5653fe", +1493 => x"e4398073", +1494 => x"24a33872", +1495 => x"822c8171", +1496 => x"2b80d7a4", +1497 => x"080780d7", +1498 => x"a00b8405", +1499 => x"0c58748c", +1500 => x"180c7388", +1501 => x"180c7688", +1502 => x"160cfdc3", +1503 => x"39831370", +1504 => x"822c8171", +1505 => x"2b80d7a4", +1506 => x"080780d7", +1507 => x"a00b8405", +1508 => x"0c5953da", +1509 => x"39f93d0d", +1510 => x"797b5853", +1511 => x"800b80cf", +1512 => x"e4085356", +1513 => x"72722ebc", +1514 => x"3884dc13", +1515 => x"5574762e", +1516 => x"b3388815", +1517 => x"08841608", +1518 => x"ff055454", +1519 => x"80732499", +1520 => x"388c1422", +1521 => x"70902b53", +1522 => x"587180d4", +1523 => x"3880dc14", +1524 => x"ff145454", +1525 => x"728025e9", +1526 => x"38740855", +1527 => x"74d43880", +1528 => x"cfe40852", +1529 => x"84dc1255", +1530 => x"74802ead", +1531 => x"38881508", +1532 => x"841608ff", +1533 => x"05545480", +1534 => x"73249838", +1535 => x"8c142270", +1536 => x"902b5358", +1537 => x"71ad3880", +1538 => x"dc14ff14", +1539 => x"54547280", +1540 => x"25ea3874", +1541 => x"085574d5", +1542 => x"3875800c", +1543 => x"893d0d04", +1544 => x"7351762d", +1545 => x"75800807", +1546 => x"80dc15ff", +1547 => x"15555556", +1548 => x"ffa23973", +1549 => x"51762d75", +1550 => x"80080780", +1551 => x"dc15ff15", +1552 => x"555556ca", +1553 => x"39ea3d0d", +1554 => x"688c1122", +1555 => x"700a100a", +1556 => x"81065758", +1557 => x"567480e4", +1558 => x"388e1622", +1559 => x"70902b70", +1560 => x"902c5155", +1561 => x"58807424", +1562 => x"b138983d", +1563 => x"c4055373", +1564 => x"5280cfe4", +1565 => x"08519481", +1566 => x"3f800b80", +1567 => x"08249738", +1568 => x"7983e080", +1569 => x"06547380", +1570 => x"c0802e81", +1571 => x"8f387382", +1572 => x"80802e81", +1573 => x"91388c16", +1574 => x"22577690", +1575 => x"80075473", +1576 => x"8c172388", +1577 => x"805280cf", +1578 => x"e4085181", +1579 => x"9b3f8008", +1580 => x"9d388c16", +1581 => x"22820755", +1582 => x"748c1723", +1583 => x"80c31670", +1584 => x"770c9017", +1585 => x"0c810b94", +1586 => x"170c983d", +1587 => x"0d0480cf", +1588 => x"e408a8e6", +1589 => x"0bbc120c", +1590 => x"588c1622", +1591 => x"81800754", +1592 => x"738c1723", +1593 => x"8008760c", +1594 => x"80089017", +1595 => x"0c88800b", +1596 => x"94170c74", +1597 => x"802ed338", +1598 => x"8e162270", +1599 => x"902b7090", +1600 => x"2c535654", +1601 => x"9afe3f80", +1602 => x"08802eff", +1603 => x"bd388c16", +1604 => x"22810757", +1605 => x"768c1723", +1606 => x"983d0d04", +1607 => x"810b8c17", +1608 => x"225855fe", +1609 => x"f539a816", +1610 => x"0880c39d", +1611 => x"2e098106", +1612 => x"fee4388c", +1613 => x"16228880", +1614 => x"0754738c", +1615 => x"17238880", +1616 => x"0b80cc17", +1617 => x"0cfedc39", +1618 => x"f43d0d7e", +1619 => x"608b1170", +1620 => x"f8065b55", +1621 => x"555d7296", +1622 => x"26833890", +1623 => x"58807824", +1624 => x"74792607", +1625 => x"55805474", +1626 => x"742e0981", +1627 => x"0680ca38", +1628 => x"7c518ea8", +1629 => x"3f7783f7", +1630 => x"2680c538", +1631 => x"77832a70", +1632 => x"10101080", +1633 => x"d7a0058c", +1634 => x"11085858", +1635 => x"5475772e", +1636 => x"81f03884", +1637 => x"1608fc06", +1638 => x"8c170888", +1639 => x"1808718c", +1640 => x"120c8812", +1641 => x"0c5b7605", +1642 => x"84110881", +1643 => x"0784120c", +1644 => x"537c518d", +1645 => x"e83f8816", +1646 => x"5473800c", +1647 => x"8e3d0d04", +1648 => x"77892a78", +1649 => x"832a5854", +1650 => x"73802ebf", +1651 => x"3877862a", +1652 => x"b8055784", +1653 => x"7427b438", +1654 => x"80db1457", +1655 => x"947427ab", +1656 => x"38778c2a", +1657 => x"80ee0557", +1658 => x"80d47427", +1659 => x"9e38778f", +1660 => x"2a80f705", +1661 => x"5782d474", +1662 => x"27913877", +1663 => x"922a80fc", +1664 => x"05578ad4", +1665 => x"74278438", +1666 => x"80fe5776", +1667 => x"10101080", +1668 => x"d7a0058c", +1669 => x"11085653", +1670 => x"74732ea3", +1671 => x"38841508", +1672 => x"fc067079", +1673 => x"31555673", +1674 => x"8f2488e4", +1675 => x"38738025", +1676 => x"88e6388c", +1677 => x"15085574", +1678 => x"732e0981", +1679 => x"06df3881", +1680 => x"175980d7", +1681 => x"b0085675", +1682 => x"80d7a82e", +1683 => x"82cc3884", +1684 => x"1608fc06", +1685 => x"70793155", +1686 => x"55738f24", +1687 => x"bb3880d7", +1688 => x"a80b80d7", +1689 => x"b40c80d7", +1690 => x"a80b80d7", +1691 => x"b00c8074", +1692 => x"2480db38", +1693 => x"74168411", +1694 => x"08810784", +1695 => x"120c53fe", +1696 => x"b0398816", +1697 => x"8c110857", +1698 => x"5975792e", +1699 => x"098106fe", +1700 => x"82388214", +1701 => x"59ffab39", +1702 => x"77167881", +1703 => x"0784180c", +1704 => x"7080d7b4", +1705 => x"0c7080d7", +1706 => x"b00c80d7", +1707 => x"a80b8c12", +1708 => x"0c8c1108", +1709 => x"88120c74", +1710 => x"81078412", +1711 => x"0c740574", +1712 => x"710c5b7c", +1713 => x"518bd63f", +1714 => x"881654fd", +1715 => x"ec3983ff", +1716 => x"75278391", +1717 => x"3874892a", +1718 => x"75832a54", +1719 => x"5473802e", +1720 => x"bf387486", +1721 => x"2ab80553", +1722 => x"847427b4", +1723 => x"3880db14", +1724 => x"53947427", +1725 => x"ab38748c", +1726 => x"2a80ee05", +1727 => x"5380d474", +1728 => x"279e3874", +1729 => x"8f2a80f7", +1730 => x"055382d4", +1731 => x"74279138", +1732 => x"74922a80", +1733 => x"fc05538a", +1734 => x"d4742784", +1735 => x"3880fe53", +1736 => x"72101010", +1737 => x"80d7a005", +1738 => x"88110855", +1739 => x"5773772e", +1740 => x"868b3884", +1741 => x"1408fc06", +1742 => x"5b747b27", +1743 => x"8d388814", +1744 => x"08547377", +1745 => x"2e098106", +1746 => x"ea388c14", +1747 => x"0880d7a0", +1748 => x"0b840508", +1749 => x"718c190c", +1750 => x"7588190c", +1751 => x"7788130c", +1752 => x"5c57758c", +1753 => x"150c7853", +1754 => x"80792483", +1755 => x"98387282", +1756 => x"2c81712b", +1757 => x"5656747b", +1758 => x"2680ca38", +1759 => x"7a750657", +1760 => x"7682a338", +1761 => x"78fc0684", +1762 => x"05597410", +1763 => x"707c0655", +1764 => x"55738292", +1765 => x"38841959", +1766 => x"f13980d7", +1767 => x"a00b8405", +1768 => x"0879545b", +1769 => x"788025c6", +1770 => x"3882da39", +1771 => x"74097b06", +1772 => x"7080d7a0", +1773 => x"0b84050c", +1774 => x"5b741055", +1775 => x"747b2685", +1776 => x"387485bc", +1777 => x"3880d7a0", +1778 => x"0b880508", +1779 => x"70841208", +1780 => x"fc06707b", +1781 => x"317b7226", +1782 => x"8f722507", +1783 => x"5d575c5c", +1784 => x"5578802e", +1785 => x"80d93879", +1786 => x"1580d798", +1787 => x"08199011", +1788 => x"59545680", +1789 => x"d79408ff", +1790 => x"2e8838a0", +1791 => x"8f13e080", +1792 => x"06577652", +1793 => x"7c518996", +1794 => x"3f800854", +1795 => x"8008ff2e", +1796 => x"90388008", +1797 => x"762782a7", +1798 => x"387480d7", +1799 => x"a02e829f", +1800 => x"3880d7a0", +1801 => x"0b880508", +1802 => x"55841508", +1803 => x"fc067079", +1804 => x"31797226", +1805 => x"8f722507", +1806 => x"5d555a7a", +1807 => x"83f23877", +1808 => x"81078416", +1809 => x"0c771570", +1810 => x"80d7a00b", +1811 => x"88050c74", +1812 => x"81078412", +1813 => x"0c567c51", +1814 => x"88c33f88", +1815 => x"15547380", +1816 => x"0c8e3d0d", +1817 => x"0474832a", +1818 => x"70545480", +1819 => x"7424819b", +1820 => x"3872822c", +1821 => x"81712b80", +1822 => x"d7a40807", +1823 => x"7080d7a0", +1824 => x"0b84050c", +1825 => x"75101010", +1826 => x"80d7a005", +1827 => x"88110871", +1828 => x"8c1b0c70", +1829 => x"881b0c79", +1830 => x"88130c57", +1831 => x"555c5575", +1832 => x"8c150cfd", +1833 => x"c1397879", +1834 => x"10101080", +1835 => x"d7a00570", +1836 => x"565b5c8c", +1837 => x"14085675", +1838 => x"742ea338", +1839 => x"841608fc", +1840 => x"06707931", +1841 => x"5853768f", +1842 => x"2483f138", +1843 => x"76802584", +1844 => x"af388c16", +1845 => x"08567574", +1846 => x"2e098106", +1847 => x"df388814", +1848 => x"811a7083", +1849 => x"06555a54", +1850 => x"72c9387b", +1851 => x"83065675", +1852 => x"802efdb8", +1853 => x"38ff1cf8", +1854 => x"1b5b5c88", +1855 => x"1a087a2e", +1856 => x"ea38fdb5", +1857 => x"39831953", +1858 => x"fce43983", +1859 => x"1470822c", +1860 => x"81712b80", +1861 => x"d7a40807", +1862 => x"7080d7a0", +1863 => x"0b84050c", +1864 => x"76101010", +1865 => x"80d7a005", +1866 => x"88110871", +1867 => x"8c1c0c70", +1868 => x"881c0c7a", +1869 => x"88130c58", +1870 => x"535d5653", +1871 => x"fee13980", +1872 => x"d6e40817", +1873 => x"59800876", +1874 => x"2e818b38", +1875 => x"80d79408", +1876 => x"ff2e848e", +1877 => x"38737631", +1878 => x"1980d6e4", +1879 => x"0c738706", +1880 => x"70565372", +1881 => x"802e8838", +1882 => x"88733170", +1883 => x"15555576", +1884 => x"149fff06", +1885 => x"a0807131", +1886 => x"1670547e", +1887 => x"53515386", +1888 => x"9d3f8008", +1889 => x"568008ff", +1890 => x"2e819e38", +1891 => x"80d6e408", +1892 => x"137080d6", +1893 => x"e40c7475", +1894 => x"80d7a00b", +1895 => x"88050c77", +1896 => x"76311581", +1897 => x"07555659", +1898 => x"7a80d7a0", +1899 => x"2e83c038", +1900 => x"798f2682", +1901 => x"ef38810b", +1902 => x"84150c84", +1903 => x"1508fc06", +1904 => x"70793179", +1905 => x"72268f72", +1906 => x"25075d55", +1907 => x"5a7a802e", +1908 => x"fced3880", +1909 => x"db398008", +1910 => x"9fff0655", +1911 => x"74feed38", +1912 => x"7880d6e4", +1913 => x"0c80d7a0", +1914 => x"0b880508", +1915 => x"7a188107", +1916 => x"84120c55", +1917 => x"80d79008", +1918 => x"79278638", +1919 => x"7880d790", +1920 => x"0c80d78c", +1921 => x"087927fc", +1922 => x"a0387880", +1923 => x"d78c0c84", +1924 => x"1508fc06", +1925 => x"70793179", +1926 => x"72268f72", +1927 => x"25075d55", +1928 => x"5a7a802e", +1929 => x"fc993888", +1930 => x"39807457", +1931 => x"53fedd39", +1932 => x"7c5184e9", +1933 => x"3f800b80", +1934 => x"0c8e3d0d", +1935 => x"04807324", +1936 => x"a5387282", +1937 => x"2c81712b", +1938 => x"80d7a408", +1939 => x"077080d7", +1940 => x"a00b8405", +1941 => x"0c5c5a76", +1942 => x"8c170c73", +1943 => x"88170c75", +1944 => x"88180cf9", +1945 => x"fd398313", +1946 => x"70822c81", +1947 => x"712b80d7", +1948 => x"a4080770", +1949 => x"80d7a00b", +1950 => x"84050c5d", +1951 => x"5b53d839", +1952 => x"7a75065c", +1953 => x"7bfc9f38", +1954 => x"84197510", +1955 => x"5659f139", +1956 => x"ff178105", +1957 => x"59f7ab39", +1958 => x"8c150888", +1959 => x"1608718c", +1960 => x"120c8812", +1961 => x"0c597515", +1962 => x"84110881", +1963 => x"0784120c", +1964 => x"587c5183", +1965 => x"e83f8815", +1966 => x"54fba339", +1967 => x"77167881", +1968 => x"0784180c", +1969 => x"8c170888", +1970 => x"1808718c", +1971 => x"120c8812", +1972 => x"0c5c7080", +1973 => x"d7b40c70", +1974 => x"80d7b00c", +1975 => x"80d7a80b", +1976 => x"8c120c8c", +1977 => x"11088812", +1978 => x"0c778107", +1979 => x"84120c77", +1980 => x"0577710c", +1981 => x"557c5183", +1982 => x"a43f8816", +1983 => x"54f5ba39", +1984 => x"72168411", +1985 => x"08810784", +1986 => x"120c588c", +1987 => x"16088817", +1988 => x"08718c12", +1989 => x"0c88120c", +1990 => x"577c5183", +1991 => x"803f8816", +1992 => x"54f59639", +1993 => x"7284150c", +1994 => x"f41af806", +1995 => x"70841d08", +1996 => x"81060784", +1997 => x"1d0c701c", +1998 => x"5556850b", +1999 => x"84150c85", +2000 => x"0b88150c", +2001 => x"8f7627fd", +2002 => x"ab38881b", +2003 => x"527c51eb", +2004 => x"e83f80d7", +2005 => x"a00b8805", +2006 => x"0880d6e4", +2007 => x"085a55fd", +2008 => x"93397880", +2009 => x"d6e40c73", +2010 => x"80d7940c", +2011 => x"fbef3972", +2012 => x"84150cfc", +2013 => x"ff39fb3d", +2014 => x"0d77707a", +2015 => x"7c585553", +2016 => x"568f7527", +2017 => x"80e63872", +2018 => x"76078306", +2019 => x"517080dc", +2020 => x"38757352", +2021 => x"54707084", +2022 => x"05520874", +2023 => x"70840556", +2024 => x"0c737170", +2025 => x"84055308", +2026 => x"71708405", +2027 => x"530c7170", +2028 => x"84055308", +2029 => x"71708405", +2030 => x"530c7170", +2031 => x"84055308", +2032 => x"71708405", +2033 => x"530cf016", +2034 => x"5654748f", +2035 => x"26c73883", +2036 => x"75279538", +2037 => x"70708405", +2038 => x"52087470", +2039 => x"8405560c", +2040 => x"fc155574", +2041 => x"8326ed38", +2042 => x"73715452", +2043 => x"ff155170", +2044 => x"ff2e9838", +2045 => x"72708105", +2046 => x"54337270", +2047 => x"81055434", +2048 => x"ff115170", +2049 => x"ff2e0981", +2050 => x"06ea3875", +2051 => x"800c873d", +2052 => x"0d04fb3d", +2053 => x"0d777a71", +2054 => x"028c05a3", +2055 => x"05335854", +2056 => x"54568373", +2057 => x"2780d438", +2058 => x"75830651", +2059 => x"7080cc38", +2060 => x"74882b75", +2061 => x"07707190", +2062 => x"2b075551", +2063 => x"8f7327a7", +2064 => x"38737270", +2065 => x"8405540c", +2066 => x"71747170", +2067 => x"8405530c", +2068 => x"74717084", +2069 => x"05530c74", +2070 => x"71708405", +2071 => x"530cf014", +2072 => x"5452728f", +2073 => x"26db3883", +2074 => x"73279038", +2075 => x"73727084", +2076 => x"05540cfc", +2077 => x"13537283", +2078 => x"26f238ff", +2079 => x"135170ff", +2080 => x"2e933874", +2081 => x"72708105", +2082 => x"5434ff11", +2083 => x"5170ff2e", +2084 => x"098106ef", +2085 => x"3875800c", +2086 => x"873d0d04", +2087 => x"04047070", +2088 => x"7070800b", +2089 => x"80dfe00c", +2090 => x"765184f3", +2091 => x"3f800853", +2092 => x"8008ff2e", +2093 => x"89387280", +2094 => x"0c505050", +2095 => x"500480df", +2096 => x"e0085473", +2097 => x"802eef38", +2098 => x"7574710c", +2099 => x"5272800c", +2100 => x"50505050", +2101 => x"04f93d0d", +2102 => x"797c557b", +2103 => x"548e1122", +2104 => x"70902b70", +2105 => x"902c5557", +2106 => x"80cfe408", +2107 => x"53585683", +2108 => x"f63f8008", +2109 => x"57800b80", +2110 => x"08249338", +2111 => x"80d01608", +2112 => x"80080580", +2113 => x"d0170c76", +2114 => x"800c893d", +2115 => x"0d048c16", +2116 => x"2283dfff", +2117 => x"0655748c", +2118 => x"17237680", +2119 => x"0c893d0d", +2120 => x"04fa3d0d", +2121 => x"788c1122", +2122 => x"70882a70", +2123 => x"81065157", +2124 => x"585674a9", +2125 => x"388c1622", +2126 => x"83dfff06", +2127 => x"55748c17", +2128 => x"237a5479", +2129 => x"538e1622", +2130 => x"70902b70", +2131 => x"902c5456", +2132 => x"80cfe408", +2133 => x"525681b2", +2134 => x"3f883d0d", +2135 => x"04825480", +2136 => x"538e1622", +2137 => x"70902b70", +2138 => x"902c5456", +2139 => x"80cfe408", +2140 => x"525782bb", +2141 => x"3f8c1622", +2142 => x"83dfff06", +2143 => x"55748c17", +2144 => x"237a5479", +2145 => x"538e1622", +2146 => x"70902b70", +2147 => x"902c5456", +2148 => x"80cfe408", +2149 => x"525680f2", +2150 => x"3f883d0d", +2151 => x"04f93d0d", +2152 => x"797c557b", +2153 => x"548e1122", +2154 => x"70902b70", +2155 => x"902c5557", +2156 => x"80cfe408", +2157 => x"53585681", +2158 => x"f63f8008", +2159 => x"578008ff", +2160 => x"2e99388c", +2161 => x"1622a080", +2162 => x"0755748c", +2163 => x"17238008", +2164 => x"80d0170c", +2165 => x"76800c89", +2166 => x"3d0d048c", +2167 => x"162283df", +2168 => x"ff065574", +2169 => x"8c172376", +2170 => x"800c893d", +2171 => x"0d047070", +2172 => x"70748e11", +2173 => x"2270902b", +2174 => x"70902c55", +2175 => x"51515380", +2176 => x"cfe40851", +2177 => x"bd3f5050", +2178 => x"5004fb3d", +2179 => x"0d800b80", +2180 => x"dfe00c7a", +2181 => x"53795278", +2182 => x"5182ff3f", +2183 => x"80085580", +2184 => x"08ff2e88", +2185 => x"3874800c", +2186 => x"873d0d04", +2187 => x"80dfe008", +2188 => x"5675802e", +2189 => x"f0387776", +2190 => x"710c5474", +2191 => x"800c873d", +2192 => x"0d047070", +2193 => x"7070800b", +2194 => x"80dfe00c", +2195 => x"765184cc", +2196 => x"3f800853", +2197 => x"8008ff2e", +2198 => x"89387280", +2199 => x"0c505050", +2200 => x"500480df", +2201 => x"e0085473", +2202 => x"802eef38", +2203 => x"7574710c", +2204 => x"5272800c", +2205 => x"50505050", +2206 => x"04fc3d0d", +2207 => x"800b80df", +2208 => x"e00c7852", +2209 => x"775187b3", +2210 => x"3f800854", +2211 => x"8008ff2e", +2212 => x"88387380", +2213 => x"0c863d0d", +2214 => x"0480dfe0", +2215 => x"08557480", +2216 => x"2ef03876", +2217 => x"75710c53", +2218 => x"73800c86", +2219 => x"3d0d04fb", +2220 => x"3d0d800b", +2221 => x"80dfe00c", +2222 => x"7a537952", +2223 => x"7851848e", +2224 => x"3f800855", +2225 => x"8008ff2e", +2226 => x"88387480", +2227 => x"0c873d0d", +2228 => x"0480dfe0", +2229 => x"08567580", +2230 => x"2ef03877", +2231 => x"76710c54", +2232 => x"74800c87", +2233 => x"3d0d04fb", +2234 => x"3d0d800b", +2235 => x"80dfe00c", +2236 => x"7a537952", +2237 => x"78518296", +2238 => x"3f800855", +2239 => x"8008ff2e", +2240 => x"88387480", +2241 => x"0c873d0d", +2242 => x"0480dfe0", +2243 => x"08567580", +2244 => x"2ef03877", +2245 => x"76710c54", +2246 => x"74800c87", +2247 => x"3d0d0470", +2248 => x"707080df", +2249 => x"d0088938", +2250 => x"80dfe40b", +2251 => x"80dfd00c", +2252 => x"80dfd008", +2253 => x"75115252", +2254 => x"ff537087", +2255 => x"fb808026", +2256 => x"88387080", +2257 => x"dfd00c71", +2258 => x"5372800c", +2259 => x"50505004", +2260 => x"fd3d0d80", +2261 => x"0b80cfd8", +2262 => x"08545472", +2263 => x"812e9b38", +2264 => x"7380dfd4", +2265 => x"0cc2bf3f", +2266 => x"c1963f80", +2267 => x"dfa85281", +2268 => x"51c3fd3f", +2269 => x"80085186", +2270 => x"c23f7280", +2271 => x"dfd40cc2", +2272 => x"a53fc0fc", +2273 => x"3f80dfa8", +2274 => x"528151c3", +2275 => x"e33f8008", +2276 => x"5186a83f", +2277 => x"00ff3900", +2278 => x"ff39f53d", +2279 => x"0d7e6080", +2280 => x"dfd40870", +2281 => x"5b585b5b", +2282 => x"7580c238", +2283 => x"777a25a1", +2284 => x"38771b70", +2285 => x"337081ff", +2286 => x"06585859", +2287 => x"758a2e98", +2288 => x"387681ff", +2289 => x"0651c1bd", +2290 => x"3f811858", +2291 => x"797824e1", +2292 => x"3879800c", +2293 => x"8d3d0d04", +2294 => x"8d51c1a9", +2295 => x"3f783370", +2296 => x"81ff0652", +2297 => x"57c19e3f", +2298 => x"811858e0", +2299 => x"3979557a", +2300 => x"547d5385", +2301 => x"528d3dfc", +2302 => x"0551c0c6", +2303 => x"3f800856", +2304 => x"85b23f7b", +2305 => x"80080c75", +2306 => x"800c8d3d", +2307 => x"0d04f63d", +2308 => x"0d7d7f80", +2309 => x"dfd40870", +2310 => x"5b585a5a", +2311 => x"7580c138", +2312 => x"777925b3", +2313 => x"38c0b93f", +2314 => x"800881ff", +2315 => x"06708d32", +2316 => x"7030709f", +2317 => x"2a515157", +2318 => x"57768a2e", +2319 => x"80c43875", +2320 => x"802ebf38", +2321 => x"771a5676", +2322 => x"76347651", +2323 => x"c0b73f81", +2324 => x"18587878", +2325 => x"24cf3877", +2326 => x"5675800c", +2327 => x"8c3d0d04", +2328 => x"78557954", +2329 => x"7c538452", +2330 => x"8c3dfc05", +2331 => x"51ffbfd2", +2332 => x"3f800856", +2333 => x"84be3f7a", +2334 => x"80080c75", +2335 => x"800c8c3d", +2336 => x"0d04771a", +2337 => x"598a7934", +2338 => x"8118588d", +2339 => x"51ffbff5", +2340 => x"3f8a51ff", +2341 => x"bfef3f77", +2342 => x"56ffbe39", +2343 => x"fb3d0d80", +2344 => x"dfd40870", +2345 => x"56547388", +2346 => x"3874800c", +2347 => x"873d0d04", +2348 => x"77538352", +2349 => x"873dfc05", +2350 => x"51ffbf86", +2351 => x"3f800854", +2352 => x"83f23f75", +2353 => x"80080c73", +2354 => x"800c873d", +2355 => x"0d04fa3d", +2356 => x"0d80dfd4", +2357 => x"08802ea3", +2358 => x"387a5579", +2359 => x"54785386", +2360 => x"52883dfc", +2361 => x"0551ffbe", +2362 => x"d93f8008", +2363 => x"5683c53f", +2364 => x"7680080c", +2365 => x"75800c88", +2366 => x"3d0d0483", +2367 => x"b73f9d0b", +2368 => x"80080cff", +2369 => x"0b800c88", +2370 => x"3d0d04f7", +2371 => x"3d0d7b7d", +2372 => x"5b59bc53", +2373 => x"80527951", +2374 => x"f5f83f80", +2375 => x"70565798", +2376 => x"56741970", +2377 => x"3370782b", +2378 => x"79078118", +2379 => x"f81a5a58", +2380 => x"59555884", +2381 => x"7524ea38", +2382 => x"767a2384", +2383 => x"19588070", +2384 => x"56579856", +2385 => x"74187033", +2386 => x"70782b79", +2387 => x"078118f8", +2388 => x"1a5a5859", +2389 => x"51548475", +2390 => x"24ea3876", +2391 => x"821b2388", +2392 => x"19588070", +2393 => x"56579856", +2394 => x"74187033", +2395 => x"70782b79", +2396 => x"078118f8", +2397 => x"1a5a5859", +2398 => x"51548475", +2399 => x"24ea3876", +2400 => x"841b0c8c", +2401 => x"19588070", +2402 => x"56579856", +2403 => x"74187033", +2404 => x"70782b79", +2405 => x"078118f8", +2406 => x"1a5a5859", +2407 => x"51548475", +2408 => x"24ea3876", +2409 => x"881b2390", +2410 => x"19588070", +2411 => x"56579856", +2412 => x"74187033", +2413 => x"70782b79", +2414 => x"078118f8", +2415 => x"1a5a5859", +2416 => x"51548475", +2417 => x"24ea3876", +2418 => x"8a1b2394", +2419 => x"19588070", +2420 => x"56579856", +2421 => x"74187033", +2422 => x"70782b79", +2423 => x"078118f8", +2424 => x"1a5a5859", +2425 => x"51548475", +2426 => x"24ea3876", +2427 => x"8c1b2398", +2428 => x"19588070", +2429 => x"56579856", +2430 => x"74187033", +2431 => x"70782b79", +2432 => x"078118f8", +2433 => x"1a5a5859", +2434 => x"51548475", +2435 => x"24ea3876", +2436 => x"8e1b239c", +2437 => x"19588070", +2438 => x"5657b856", +2439 => x"74187033", +2440 => x"70782b79", +2441 => x"078118f8", +2442 => x"1a5a5859", +2443 => x"5a548875", +2444 => x"24ea3876", +2445 => x"901b0c8b", +2446 => x"3d0d04e9", +2447 => x"3d0d6a80", +2448 => x"dfd40857", +2449 => x"57759338", +2450 => x"80c0800b", +2451 => x"84180c75", +2452 => x"ac180c75", +2453 => x"800c993d", +2454 => x"0d04893d", +2455 => x"70556a54", +2456 => x"558a5299", +2457 => x"3dffbc05", +2458 => x"51ffbbd6", +2459 => x"3f800877", +2460 => x"53755256", +2461 => x"fd953fbc", +2462 => x"3f778008", +2463 => x"0c75800c", +2464 => x"993d0d04", +2465 => x"fc3d0d81", +2466 => x"5480dfd4", +2467 => x"08883873", +2468 => x"800c863d", +2469 => x"0d047653", +2470 => x"97b95286", +2471 => x"3dfc0551", +2472 => x"ffbb9f3f", +2473 => x"8008548c", +2474 => x"3f748008", +2475 => x"0c73800c", +2476 => x"863d0d04", +2477 => x"80cfe408", +2478 => x"800c04f7", +2479 => x"3d0d7b80", +2480 => x"cfe40882", +2481 => x"c811085a", +2482 => x"545a7780", +2483 => x"2e80da38", +2484 => x"81881884", +2485 => x"1908ff05", +2486 => x"81712b59", +2487 => x"55598074", +2488 => x"2480ea38", +2489 => x"807424b5", +2490 => x"3873822b", +2491 => x"78118805", +2492 => x"56568180", +2493 => x"19087706", +2494 => x"5372802e", +2495 => x"b6387816", +2496 => x"70085353", +2497 => x"79517408", +2498 => x"53722dff", +2499 => x"14fc17fc", +2500 => x"1779812c", +2501 => x"5a575754", +2502 => x"738025d6", +2503 => x"38770858", +2504 => x"77ffad38", +2505 => x"80cfe408", +2506 => x"53bc1308", +2507 => x"a5387951", +2508 => x"f8e23f74", +2509 => x"0853722d", +2510 => x"ff14fc17", +2511 => x"fc177981", +2512 => x"2c5a5757", +2513 => x"54738025", +2514 => x"ffa838d1", +2515 => x"398057ff", +2516 => x"93397251", +2517 => x"bc130854", +2518 => x"732d7951", +2519 => x"f8b63f70", +2520 => x"7080dfb0", +2521 => x"0bfc0570", +2522 => x"08525270", +2523 => x"ff2e9138", +2524 => x"702dfc12", +2525 => x"70085252", +2526 => x"70ff2e09", +2527 => x"8106f138", +2528 => x"50500404", +2529 => x"ffbb8c3f", +2530 => x"04000000", +2531 => x"00000040", +2532 => x"48656c6c", +2533 => x"6f20776f", +2534 => x"726c6420", +2535 => x"310a0000", +2536 => x"48656c6c", +2537 => x"6f20776f", +2538 => x"726c6420", +2539 => x"320a0000", +2540 => x"0a000000", +2541 => x"43000000", +2542 => x"64756d6d", +2543 => x"792e6578", +2544 => x"65000000", +2545 => x"00ffffff", +2546 => x"ff00ffff", +2547 => x"ffff00ff", +2548 => x"ffffff00", +2549 => x"00000000", +2550 => x"00000000", +2551 => x"00000000", +2552 => x"00002fb8", +2553 => x"000027e8", +2554 => x"00000000", +2555 => x"00002a50", +2556 => x"00002aac", +2557 => x"00002b08", +2558 => x"00000000", +2559 => x"00000000", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"000027b4", +2568 => x"00000000", +2569 => x"00000000", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000001", +2597 => x"330eabcd", +2598 => x"1234e66d", +2599 => x"deec0005", +2600 => x"000b0000", +2601 => x"00000000", +2602 => x"00000000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", 2659 => x"00000000", 2660 => x"00000000", 2661 => x"00000000", -2662 => x"00003170", -2663 => x"000029a0", +2662 => x"00000000", +2663 => x"00000000", 2664 => x"00000000", -2665 => x"00002c08", -2666 => x"00002c64", -2667 => x"00002cc0", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", 2668 => x"00000000", 2669 => x"00000000", 2670 => x"00000000", @@ -2675,7 +2675,7 @@ 2674 => x"00000000", 2675 => x"00000000", 2676 => x"00000000", -2677 => x"0000296c", +2677 => x"00000000", 2678 => x"00000000", 2679 => x"00000000", 2680 => x"00000000", @@ -2704,11 +2704,11 @@ 2703 => x"00000000", 2704 => x"00000000", 2705 => x"00000000", -2706 => x"00000001", -2707 => x"330eabcd", -2708 => x"1234e66d", -2709 => x"deec0005", -2710 => x"000b0000", +2706 => x"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", 2711 => x"00000000", 2712 => x"00000000", 2713 => x"00000000", @@ -2787,121 +2787,121 @@ 2786 => x"00000000", 2787 => x"00000000", 2788 => x"00000000", -2789 => x"00000000", +2789 => x"ffffffff", 2790 => x"00000000", -2791 => x"00000000", +2791 => x"00020000", 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", +2794 => x"00002ba0", +2795 => x"00002ba0", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", 2904 => x"00002d58", 2905 => x"00002d58", 2906 => x"00002d60", @@ -3048,118 +3048,8 @@ 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", +3050 => x"000027b8", +3051 => x"ffffffff", +3052 => x"00000000", +3053 => x"ffffffff", +3054 => x"00000000", -- cgit v1.1 From e5627082149dbce408555bd3a128fd5d128880d2 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 21 Feb 2008 19:17:03 +0000 Subject: * zpu/zpu/sw/index.html. Changed it a bit to make installation easier. --- zpu/ChangeLog | 1 + zpu/hdl/zpu4/src/dmipstrace.do | 5 + zpu/hdl/zpu4/src/dmipstraceintstack.do | 25 - zpu/hdl/zpu4/src/dram_dmips.vhd | 6374 +++++++++++++++---------------- zpu/hdl/zpu4/src/fastdmips.do | 19 - zpu/hdl/zpu4/src/fastdmipsintstack.do | 19 - zpu/hdl/zpu4/src/fastdmipssmall.do | 21 - zpu/hdl/zpu4/src/fasthello.do | 19 - zpu/hdl/zpu4/src/fastsimzpu.do | 19 - zpu/hdl/zpu4/src/log.txt | 347 +- zpu/hdl/zpu4/src/zpu_config_fastsim.vhd | 15 - zpu/hdl/zpu4/test/dmips/build.sh | 2 +- zpu/hdl/zpu4/test/dmips/dmips.bin | Bin 14612 -> 13028 bytes zpu/hdl/zpu4/test/dmips/dmips.elf | Bin 89778 -> 82460 bytes zpu/hdl/zpu4/test/dmips/dmips.ram | 6370 +++++++++++++++--------------- zpu/sw/env.sh | 2 + zpu/sw/index.html | 8 +- zpu/sw/setup.sh | 6 + 18 files changed, 6095 insertions(+), 7157 deletions(-) delete mode 100644 zpu/hdl/zpu4/src/dmipstraceintstack.do delete mode 100644 zpu/hdl/zpu4/src/fastdmips.do delete mode 100644 zpu/hdl/zpu4/src/fastdmipsintstack.do delete mode 100644 zpu/hdl/zpu4/src/fastdmipssmall.do delete mode 100644 zpu/hdl/zpu4/src/fasthello.do delete mode 100644 zpu/hdl/zpu4/src/fastsimzpu.do delete mode 100644 zpu/hdl/zpu4/src/zpu_config_fastsim.vhd create mode 100644 zpu/sw/env.sh create mode 100644 zpu/sw/setup.sh diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 9a6495b..1e5545b 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,4 +1,5 @@ 2008-02-21 Øyvind Harboe + * zpu/zpu/sw/index.html. Changed it a bit to make installation easier. * zpu/zpu/hdl/index.html. Sharpened instructions and shows two working examples. Small & medium ZPU. * got zpu4/src/simzpu_medium.do working again. diff --git a/zpu/hdl/zpu4/src/dmipstrace.do b/zpu/hdl/zpu4/src/dmipstrace.do index 8d5f430..64cf8fd 100644 --- a/zpu/hdl/zpu4/src/dmipstrace.do +++ b/zpu/hdl/zpu4/src/dmipstrace.do @@ -1,3 +1,8 @@ +# Xilinx WebPack modelsim script +# +# cd C:/workspace/zpu/zpu/hdl/zpu4/src +# do dmipstrace.do + set BreakOnAssertion 1 vlib work diff --git a/zpu/hdl/zpu4/src/dmipstraceintstack.do b/zpu/hdl/zpu4/src/dmipstraceintstack.do deleted file mode 100644 index b2addb4..0000000 --- a/zpu/hdl/zpu4/src/dmipstraceintstack.do +++ /dev/null @@ -1,25 +0,0 @@ -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 index e63a27a..a289fd7 100644 --- a/zpu/hdl/zpu4/src/dram_dmips.vhd +++ b/zpu/hdl/zpu4/src/dram_dmips.vhd @@ -22,21 +22,21 @@ 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); +type ram_type is array(0 to ((2**(maxAddrBitDRAM+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", +1 => x"82700b0b", +2 => x"80d5f40c", 3 => x"3a0b0b80", -4 => x"c6fc0400", +4 => x"c4fb0400", 5 => x"00000000", 6 => x"00000000", 7 => x"00000000", 8 => x"80088408", 9 => x"88080b0b", -10 => x"80c7c32d", +10 => x"80c5c22d", 11 => x"880c840c", 12 => x"800c0400", 13 => x"00000000", @@ -99,7 +99,7 @@ shared variable ram : ram_type := 70 => x"00000000", 71 => x"00000000", 72 => x"0b0b0b88", -73 => x"c4040000", +73 => x"c3040000", 74 => x"00000000", 75 => x"00000000", 76 => x"00000000", @@ -116,7 +116,7 @@ shared variable ram : ram_type := 87 => x"00000000", 88 => x"72729f06", 89 => x"0981050b", -90 => x"0b0b88a7", +90 => x"0b0b88a6", 91 => x"05040000", 92 => x"00000000", 93 => x"00000000", @@ -187,25 +187,25 @@ shared variable ram : ram_type := 158 => x"00000000", 159 => x"00000000", 160 => x"71fc0608", -161 => x"0b0b80e2", -162 => x"90738306", +161 => x"0b0b80d5", +162 => x"e0738306", 163 => x"10100508", 164 => x"060b0b0b", -165 => x"88aa0400", +165 => x"88a90400", 166 => x"00000000", 167 => x"00000000", 168 => x"80088408", 169 => x"88087575", -170 => x"0b0b0baf", -171 => x"ac2d5050", +170 => x"0b0b0bad", +171 => x"aa2d5050", 172 => x"80085688", 173 => x"0c840c80", 174 => x"0c510400", 175 => x"00000000", 176 => x"80088408", 177 => x"88087575", -178 => x"0b0b0baf", -179 => x"f02d5050", +178 => x"0b0b0bad", +179 => x"ee2d5050", 180 => x"80085688", 181 => x"0c840c80", 182 => x"0c510400", @@ -235,7 +235,7 @@ shared variable ram : ram_type := 206 => x"00000000", 207 => x"00000000", 208 => x"810b0b0b", -209 => x"80e2a00c", +209 => x"80d5f00c", 210 => x"51040000", 211 => x"00000000", 212 => x"00000000", @@ -282,8 +282,8 @@ shared variable ram : ram_type := 253 => x"00000000", 254 => x"00000000", 255 => x"00000000", -256 => x"83d93f80", -257 => x"cbcf3f04", +256 => x"82fd3fbf", +257 => x"a03f0410", 258 => x"10101010", 259 => x"10101010", 260 => x"10101010", @@ -291,2890 +291,2890 @@ shared variable ram : ram_type := 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", +265 => x"10105351", +266 => x"047381ff", +267 => x"06738306", +268 => x"09810583", +269 => x"05101010", +270 => x"2b0772fc", +271 => x"060c5151", +272 => x"043c0472", +273 => x"72807281", +274 => x"06ff0509", +275 => x"72060571", +276 => x"1052720a", +277 => x"100a5372", +278 => x"ed385151", +279 => x"535104ff", +280 => x"3d0d0b0b", +281 => x"80e5e408", +282 => x"52710870", +283 => x"882a8132", +284 => x"70810651", +285 => x"515170f1", +286 => x"3873720c", 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", +288 => x"80d5f008", +289 => x"802ea438", +290 => x"80d5f408", +291 => x"822ebd38", +292 => x"8380800b", +293 => x"0b0b80e5", +294 => x"e40c82a0", +295 => x"800b80e5", +296 => x"e80c8290", +297 => x"800b80e5", +298 => x"ec0c04f8", +299 => x"808080a4", +300 => x"0b0b0b80", +301 => x"e5e40cf8", +302 => x"80808280", +303 => x"0b80e5e8", +304 => x"0cf88080", +305 => x"84800b80", +306 => x"e5ec0c04", +307 => x"80c0a880", +308 => x"8c0b0b0b", +309 => x"80e5e40c", +310 => x"80c0a880", +311 => x"940b80e5", +312 => x"e80c0b0b", +313 => x"80c7d00b", +314 => x"80e5ec0c", +315 => x"04f23d0d", +316 => x"6080e5e8", +317 => x"08565d82", +318 => x"750c8059", +319 => x"805a800b", +320 => x"8f3d5d5b", +321 => x"7a101015", +322 => x"70087108", +323 => x"719f2c7e", +324 => x"852b5855", +325 => x"557d5359", +326 => x"5799993f", +327 => x"7d7f7a72", +328 => x"077c7207", +329 => x"71716081", +330 => x"05415f5d", +331 => x"5b595755", +332 => x"817b278f", +333 => x"38767d0c", +334 => x"77841e0c", +335 => x"7c800c90", +336 => x"3d0d0480", +337 => x"e5e80855", +338 => x"ffba3970", +339 => x"7080e5f0", +340 => x"335170a7", +341 => x"3880d5fc", +342 => x"08700852", +343 => x"5270802e", +344 => x"94388412", +345 => x"80d5fc0c", +346 => x"702d80d5", +347 => x"fc087008", +348 => x"525270ee", +349 => x"38810b80", +350 => x"e5f03450", +351 => x"50040470", +352 => x"0b0b80e5", +353 => x"e008802e", +354 => x"8e380b0b", +355 => x"0b0b800b", +356 => x"802e0981", +357 => x"06833850", +358 => x"040b0b80", +359 => x"e5e0510b", +360 => x"0b0bf4dc", +361 => x"3f500404", +362 => x"ff3d0d02", +363 => x"8f053352", +364 => x"718a2e8a", +365 => x"387151fd", +366 => x"a63f833d", +367 => x"0d048d51", +368 => x"fd9d3f71", +369 => x"51fd983f", +370 => x"833d0d04", +371 => x"ce3d0db5", +372 => x"3d707084", +373 => x"0552088b", +374 => x"a85c56a5", +375 => x"3d5e5c80", +376 => x"75708105", +377 => x"5733765b", +378 => x"55587378", +379 => x"2e80c138", +380 => x"8e3d5b73", +381 => x"a52e0981", +382 => x"0680c538", +383 => x"78708105", +384 => x"5a335473", +385 => x"80e42e81", +386 => x"b6387380", +387 => x"e42480c6", +388 => x"387380e3", +389 => x"2ea13880", +390 => x"52a55179", +391 => x"2d805273", +392 => x"51792d82", +393 => x"18587870", +394 => x"81055a33", +395 => x"5473c438", +396 => x"77800cb4", +397 => x"3d0d047b", +398 => x"841d8312", +399 => x"33565d57", +400 => x"80527351", +401 => x"792d8118", +402 => x"79708105", +403 => x"5b335558", +404 => x"73ffa038", +405 => x"db397380", +406 => x"f32e0981", +407 => x"06ffb838", +408 => x"7b841d71", +409 => x"08595d56", +410 => x"80773355", +411 => x"5673762e", +412 => x"8d388116", +413 => x"70187033", +414 => x"57555674", +415 => x"f538ff16", +416 => x"55807625", +417 => x"ffa03876", +418 => x"70810558", +419 => x"33548052", +420 => x"7351792d", +421 => x"811875ff", +422 => x"17575758", +423 => x"807625ff", +424 => x"85387670", +425 => x"81055833", +426 => x"54805273", +427 => x"51792d81", +428 => x"1875ff17", +429 => x"57575875", +430 => x"8024cc38", +431 => x"fee8397b", +432 => x"841d7108", +433 => x"70719f2c", +434 => x"5953595d", +435 => x"56807524", +436 => x"81913875", +437 => x"7d7c5856", +438 => x"54805773", +439 => x"772e0981", +440 => x"06b638b0", +441 => x"7b3402b5", +442 => x"05567a76", +443 => x"2e9738ff", +444 => x"16567533", +445 => x"75708105", +446 => x"57348117", +447 => x"577a762e", +448 => x"098106eb", +449 => x"38807534", +450 => x"767dff12", +451 => x"57585675", +452 => x"8024fef3", +453 => x"38fe8f39", +454 => x"8a527351", +455 => x"9fd03f80", +456 => x"0880c7d4", +457 => x"05337670", +458 => x"81055834", +459 => x"8a527351", +460 => x"9ef83f80", +461 => x"08548008", +462 => x"802effae", +463 => x"388a5273", +464 => x"519fab3f", +465 => x"800880c7", +466 => x"d4053376", +467 => x"70810558", +468 => x"348a5273", +469 => x"519ed33f", +470 => x"80085480", +471 => x"08ffb938", +472 => x"ff883974", +473 => x"527653b4", +474 => x"3dffb805", +475 => x"51949a3f", +476 => x"a33d0856", +477 => x"fedd3980", +478 => x"3d0d80c1", +479 => x"0b81b4bc", +480 => x"34800b81", +481 => x"b6980c70", +482 => x"800c823d", +483 => x"0d04ff3d", +484 => x"0d800b81", +485 => x"b4bc3352", +486 => x"527080c1", +487 => x"2e993871", +488 => x"81b69808", +489 => x"0781b698", +490 => x"0c80c20b", +491 => x"81b4c034", +492 => x"70800c83", +493 => x"3d0d0481", +494 => x"0b81b698", +495 => x"080781b6", +496 => x"980c80c2", +497 => x"0b81b4c0", +498 => x"3470800c", +499 => x"833d0d04", +500 => x"fd3d0d75", +501 => x"70088a05", +502 => x"535381b4", +503 => x"bc335170", +504 => x"80c12e8b", +505 => x"3873f338", +506 => x"70800c85", +507 => x"3d0d04ff", +508 => x"127081b4", +509 => x"b8083174", +510 => x"0c800c85", +511 => x"3d0d04fc", +512 => x"3d0d81b4", +513 => x"c4085574", +514 => x"802e8c38", +515 => x"76750871", +516 => x"0c81b4c4", +517 => x"0856548c", +518 => x"155381b4", +519 => x"b808528a", +520 => x"518fd43f", +521 => x"73800c86", +522 => x"3d0d04fb", +523 => x"3d0d7770", +524 => x"085656b0", +525 => x"5381b4c4", +526 => x"08527451", +527 => x"ab943f85", +528 => x"0b8c170c", +529 => x"850b8c16", +530 => x"0c750875", +531 => x"0c81b4c4", +532 => x"08547380", +533 => x"2e8a3873", +534 => x"08750c81", +535 => x"b4c40854", +536 => x"8c145381", +537 => x"b4b80852", +538 => x"8a518f8b", +539 => x"3f841508", +540 => x"ad38860b", +541 => x"8c160c88", +542 => x"15528816", +543 => x"08518e97", +544 => x"3f81b4c4", +545 => x"08700876", +546 => x"0c548c15", +547 => x"7054548a", +548 => x"52730851", +549 => x"8ee13f73", +550 => x"800c873d", +551 => x"0d047508", +552 => x"54b05373", +553 => x"527551aa", +554 => x"a93f7380", +555 => x"0c873d0d", +556 => x"04d93d0d", +557 => x"b0519dcf", +558 => x"3f800881", +559 => x"b4b40cb0", +560 => x"519dc43f", +561 => x"800881b4", +562 => x"c40c81b4", +563 => x"b4088008", +564 => x"0c800b80", +565 => x"0884050c", +566 => x"820b8008", +567 => x"88050ca8", +568 => x"0b80088c", +569 => x"050c9f53", +570 => x"80c7e052", +571 => x"80089005", +572 => x"51a9df3f", +573 => x"a13d5e9f", +574 => x"5380c880", +575 => x"527d51a9", +576 => x"d13f8a0b", +577 => x"80f2f80c", +578 => x"80d2a451", +579 => x"f9be3f80", +580 => x"c8a051f9", +581 => x"b73f80d2", +582 => x"a451f9b0", +583 => x"3f80d684", +584 => x"08802e89", +585 => x"d33880c8", +586 => x"d051f9a0", +587 => x"3f80d2a4", +588 => x"51f9993f", +589 => x"80d68008", +590 => x"5280c8fc", +591 => x"51f98d3f", +592 => x"80e69451", +593 => x"b2ff3f81", +594 => x"0b9a3d5e", +595 => x"5b800b80", +596 => x"d6800825", +597 => x"82d43890", +598 => x"3d5f80c1", +599 => x"0b81b4bc", +600 => x"34810b81", +601 => x"b6980c80", +602 => x"c20b81b4", +603 => x"c0348240", +604 => x"835a9f53", +605 => x"80c9ac52", +606 => x"7c51a8d6", +607 => x"3f814180", +608 => x"7d537e52", +609 => x"568e943f", +610 => x"8008762e", +611 => x"09810683", +612 => x"38815675", +613 => x"81b6980c", +614 => x"7f705856", +615 => x"758325a2", +616 => x"38751010", +617 => x"16fd0542", +618 => x"a93dffa4", +619 => x"05538352", +620 => x"76518cc3", +621 => x"3f7f8105", +622 => x"70417058", +623 => x"56837624", +624 => x"e0386154", +625 => x"755380e6", +626 => x"9c5281b4", +627 => x"d0518cb7", +628 => x"3f81b4c4", +629 => x"08700858", +630 => x"58b05377", +631 => x"527651a7", +632 => x"f13f850b", +633 => x"8c190c85", +634 => x"0b8c180c", +635 => x"7708770c", +636 => x"81b4c408", +637 => x"5675802e", +638 => x"8a387508", +639 => x"770c81b4", +640 => x"c408568c", +641 => x"165381b4", +642 => x"b808528a", +643 => x"518be83f", +644 => x"84170887", +645 => x"ea38860b", +646 => x"8c180c88", +647 => x"17528818", +648 => x"08518af3", +649 => x"3f81b4c4", +650 => x"08700878", +651 => x"0c568c17", +652 => x"7054598a", +653 => x"52780851", +654 => x"8bbd3f80", +655 => x"c10b81b4", +656 => x"c0335757", +657 => x"767626a2", +658 => x"3880c352", +659 => x"76518ca1", +660 => x"3f800861", +661 => x"2e89e438", +662 => x"81177081", +663 => x"ff0681b4", +664 => x"c0335858", +665 => x"58757727", +666 => x"e0387960", +667 => x"29627054", +668 => x"71535b59", +669 => x"98b43f80", +670 => x"0840787a", +671 => x"31708729", +672 => x"80083180", +673 => x"088a0581", +674 => x"b4bc3381", +675 => x"b4b8085e", +676 => x"5b525a56", +677 => x"7780c12e", +678 => x"89ce387b", +679 => x"f738811b", +680 => x"5b80d680", +681 => x"087b25fd", +682 => x"b13881b4", +683 => x"ac51b095", +684 => x"3f80c9cc", +685 => x"51f6953f", +686 => x"80d2a451", +687 => x"f68e3f80", +688 => x"c9dc51f6", +689 => x"873f80d2", +690 => x"a451f680", +691 => x"3f81b4b8", +692 => x"085280ca", +693 => x"9451f5f4", +694 => x"3f855280", +695 => x"cab051f5", +696 => x"eb3f81b6", +697 => x"98085280", +698 => x"cacc51f5", +699 => x"df3f8152", +700 => x"80cab051", +701 => x"f5d63f81", +702 => x"b4bc3352", +703 => x"80cae851", +704 => x"f5ca3f80", +705 => x"c15280cb", +706 => x"8451f5c0", +707 => x"3f81b4c0", +708 => x"335280cb", +709 => x"a051f5b4", +710 => x"3f80c252", +711 => x"80cb8451", +712 => x"f5aa3f81", +713 => x"b4f00852", +714 => x"80cbbc51", +715 => x"f59e3f87", +716 => x"5280cab0", +717 => x"51f5953f", +718 => x"80f2f808", +719 => x"5280cbd8", +720 => x"51f5893f", +721 => x"80cbf451", +722 => x"f5823f80", +723 => x"cca051f4", +724 => x"fb3f81b4", +725 => x"c4087008", +726 => x"535a80cc", +727 => x"ac51f4ec", +728 => x"3f80ccc8", +729 => x"51f4e53f", +730 => x"81b4c408", +731 => x"84110853", +732 => x"5680ccfc", +733 => x"51f4d53f", +734 => x"805280ca", +735 => x"b051f4cc", +736 => x"3f81b4c4", +737 => x"08881108", +738 => x"535880cd", +739 => x"9851f4bc", +740 => x"3f825280", +741 => x"cab051f4", +742 => x"b33f81b4", +743 => x"c4088c11", +744 => x"08535780", +745 => x"cdb451f4", +746 => x"a33f9152", +747 => x"80cab051", +748 => x"f49a3f81", +749 => x"b4c40890", +750 => x"055280cd", +751 => x"d051f48c", +752 => x"3f80cdec", +753 => x"51f4853f", +754 => x"80cea451", +755 => x"f3fe3f81", +756 => x"b4b40870", +757 => x"08535f80", +758 => x"ccac51f3", +759 => x"ef3f80ce", +760 => x"b851f3e8", +761 => x"3f81b4b4", +762 => x"08841108", +763 => x"535b80cc", +764 => x"fc51f3d8", +765 => x"3f805280", +766 => x"cab051f3", +767 => x"cf3f81b4", +768 => x"b4088811", +769 => x"08535c80", +770 => x"cd9851f3", +771 => x"bf3f8152", +772 => x"80cab051", +773 => x"f3b63f81", +774 => x"b4b4088c", +775 => x"1108535a", +776 => x"80cdb451", +777 => x"f3a63f92", +778 => x"5280cab0", +779 => x"51f39d3f", +780 => x"81b4b408", +781 => x"90055280", +782 => x"cdd051f3", +783 => x"8f3f80cd", +784 => x"ec51f388", +785 => x"3f7f5280", +786 => x"cef851f2", +787 => x"ff3f8552", +788 => x"80cab051", +789 => x"f2f63f78", +790 => x"5280cf94", +791 => x"51f2ed3f", +792 => x"8d5280ca", +793 => x"b051f2e4", +794 => x"3f615280", +795 => x"cfb051f2", +796 => x"db3f8752", +797 => x"80cab051", +798 => x"f2d23f60", +799 => x"5280cfcc", +800 => x"51f2c93f", +801 => x"815280ca", +802 => x"b051f2c0", +803 => x"3f7d5280", +804 => x"cfe851f2", +805 => x"b73f80d0", +806 => x"8451f2b0", +807 => x"3f7c5280", +808 => x"d0bc51f2", +809 => x"a73f80d0", +810 => x"d851f2a0", +811 => x"3f80d2a4", +812 => x"51f2993f", +813 => x"81b4ac08", +814 => x"81b4b008", +815 => x"80e69408", +816 => x"80e69808", +817 => x"72713170", +818 => x"74267574", +819 => x"31707231", +820 => x"80e68c0c", +821 => x"444480e6", +822 => x"900c80e6", +823 => x"90085680", +824 => x"d190555c", +825 => x"595758f1", +826 => x"e33f80e6", +827 => x"8c085680", +828 => x"762582a3", +829 => x"3880d680", +830 => x"0870719f", +831 => x"2c9a3d53", +832 => x"565680e6", +833 => x"8c0880e6", +834 => x"90084153", +835 => x"7f547052", +836 => x"5a89eb3f", +837 => x"66685f80", +838 => x"e5fc0c7d", +839 => x"80e6800c", +840 => x"80d68008", +841 => x"709f2c58", +842 => x"568058bd", +843 => x"84c07855", +844 => x"55765275", +845 => x"53795187", +846 => x"d13f953d", +847 => x"80e68c08", +848 => x"80e69008", +849 => x"41557f56", +850 => x"67694053", +851 => x"7e547052", +852 => x"5c89ab3f", +853 => x"64665e80", +854 => x"e6840c7c", +855 => x"80e6880c", +856 => x"80d68008", +857 => x"709f2c40", +858 => x"58805783", +859 => x"dceb9480", +860 => x"7755557e", +861 => x"5277537b", +862 => x"51878f3f", +863 => x"64665d5b", +864 => x"805e8ddd", +865 => x"7e555580", +866 => x"e68c0880", +867 => x"e6900859", +868 => x"52775379", +869 => x"5186f33f", +870 => x"66684054", +871 => x"7e557a52", +872 => x"7b53a93d", +873 => x"ffa80551", +874 => x"88d43f62", +875 => x"645e81b4", +876 => x"c80c7c81", +877 => x"b4cc0c80", +878 => x"d1a051f0", +879 => x"8f3f80e6", +880 => x"80085280", +881 => x"d1d051f0", +882 => x"833f80d1", +883 => x"d851effc", +884 => x"3f80e688", +885 => x"085280d1", +886 => x"d051eff0", +887 => x"3f81b4cc", +888 => x"085280d2", +889 => x"8851efe4", +890 => x"3f80d2a4", +891 => x"51efdd3f", +892 => x"800b800c", +893 => x"a93d0d04", +894 => x"80d2a851", +895 => x"f6ac3977", +896 => x"0857b053", +897 => x"76527751", +898 => x"9fc83f80", +899 => x"c10b81b4", +900 => x"c0335757", +901 => x"f8ae3975", +902 => x"8a3880e6", +903 => x"90088126", +904 => x"fdd33880", +905 => x"d2d851ef", +906 => x"a33f80d3", +907 => x"9051ef9c", +908 => x"3f80d2a4", +909 => x"51ef953f", +910 => x"80d68008", +911 => x"70719f2c", +912 => x"9a3d5356", +913 => x"5680e68c", +914 => x"0880e690", +915 => x"0841537f", +916 => x"5470525a", +917 => x"87a83f66", +918 => x"685f80e5", +919 => x"fc0c7d80", +920 => x"e6800c80", +921 => x"d6800870", +922 => x"9f2c5856", +923 => x"8058bd84", +924 => x"c0785555", +925 => x"76527553", +926 => x"7951858e", +927 => x"3f953d80", +928 => x"e68c0880", +929 => x"e6900841", +930 => x"557f5667", +931 => x"6940537e", +932 => x"5470525c", +933 => x"86e83f64", +934 => x"665e80e6", +935 => x"840c7c80", +936 => x"e6880c80", +937 => x"d6800870", +938 => x"9f2c4058", +939 => x"805783dc", +940 => x"eb948077", +941 => x"55557e52", +942 => x"77537b51", +943 => x"84cc3f64", +944 => x"665d5b80", +945 => x"5e8ddd7e", +946 => x"555580e6", +947 => x"8c0880e6", +948 => x"90085952", +949 => x"77537951", +950 => x"84b03f66", +951 => x"6840547e", +952 => x"557a527b", +953 => x"53a93dff", +954 => x"a8055186", +955 => x"913f6264", +956 => x"5e81b4c8", +957 => x"0c7c81b4", +958 => x"cc0c80d1", +959 => x"a051edcc", +960 => x"3f80e680", +961 => x"085280d1", +962 => x"d051edc0", +963 => x"3f80d1d8", +964 => x"51edb93f", +965 => x"80e68808", +966 => x"5280d1d0", +967 => x"51edad3f", +968 => x"81b4cc08", +969 => x"5280d288", +970 => x"51eda13f", +971 => x"80d2a451", +972 => x"ed9a3f80", +973 => x"0b800ca9", +974 => x"3d0d04a9", +975 => x"3dffa005", +976 => x"52805180", +977 => x"d23f9f53", +978 => x"80d3b052", +979 => x"7c519d82", +980 => x"3f7a7b81", +981 => x"b4b80c81", +982 => x"187081ff", +983 => x"0681b4c0", +984 => x"33595959", +985 => x"5af5fe39", +986 => x"ff16707b", +987 => x"31600c5c", +988 => x"800b811c", +989 => x"5c5c80d6", +990 => x"80087b25", +991 => x"f3dc38f6", +992 => x"a939ff3d", +993 => x"0d738232", +994 => x"70307072", +995 => x"07802580", +996 => x"0c525283", +997 => x"3d0d04fe", +998 => x"3d0d7476", +999 => x"71535452", +1000 => x"71822e83", +1001 => x"38835171", +1002 => x"812e9a38", +1003 => x"8172269f", +1004 => x"3871822e", +1005 => x"b8387184", +1006 => x"2ea93870", +1007 => x"730c7080", +1008 => x"0c843d0d", +1009 => x"0480e40b", +1010 => x"81b4b808", +1011 => x"258b3880", +1012 => x"730c7080", +1013 => x"0c843d0d", +1014 => x"0483730c", +1015 => x"70800c84", +1016 => x"3d0d0482", +1017 => x"730c7080", +1018 => x"0c843d0d", +1019 => x"0481730c", +1020 => x"70800c84", +1021 => x"3d0d0480", +1022 => x"3d0d7474", +1023 => x"14820571", +1024 => x"0c800c82", +1025 => x"3d0d04f7", +1026 => x"3d0d7b7d", +1027 => x"7f618512", +1028 => x"70822b75", +1029 => x"11707471", +1030 => x"70840553", +1031 => x"0c5a5a5d", +1032 => x"5b760c79", +1033 => x"80f8180c", +1034 => x"79861252", +1035 => x"57585a5a", +1036 => x"76762499", +1037 => x"3876b329", +1038 => x"822b7911", +1039 => x"51537673", +1040 => x"70840555", +1041 => x"0c811454", +1042 => x"757425f2", +1043 => x"387681cc", +1044 => x"2919fc11", +1045 => x"088105fc", +1046 => x"120c7a19", +1047 => x"70089fa0", +1048 => x"130c5856", +1049 => x"850b81b4", +1050 => x"b80c7580", +1051 => x"0c8b3d0d", +1052 => x"04fe3d0d", +1053 => x"02930533", +1054 => x"51800284", +1055 => x"05970533", +1056 => x"54527073", +1057 => x"2e883871", +1058 => x"800c843d", +1059 => x"0d047081", +1060 => x"b4bc3481", +1061 => x"0b800c84", +1062 => x"3d0d04f8", +1063 => x"3d0d7a7c", +1064 => x"5956820b", +1065 => x"83195555", +1066 => x"74167033", +1067 => x"75335b51", +1068 => x"5372792e", +1069 => x"80c63880", +1070 => x"c10b8116", +1071 => x"81165656", +1072 => x"57827525", +1073 => x"e338ffa9", +1074 => x"177081ff", +1075 => x"06555973", +1076 => x"82268338", +1077 => x"87558153", +1078 => x"7680d22e", +1079 => x"98387752", +1080 => x"75519bc3", +1081 => x"3f805372", +1082 => x"80082589", +1083 => x"38871581", +1084 => x"b4b80c81", +1085 => x"5372800c", +1086 => x"8a3d0d04", +1087 => x"7281b4bc", +1088 => x"34827525", +1089 => x"ffa238ff", +1090 => x"bd39ef3d", +1091 => x"0d636567", +1092 => x"5b427943", +1093 => x"67695940", +1094 => x"77415a80", +1095 => x"5d805e61", +1096 => x"7083ffff", +1097 => x"0671902a", +1098 => x"627083ff", +1099 => x"ff067190", +1100 => x"2a747229", +1101 => x"74732975", +1102 => x"73297774", +1103 => x"2973902a", +1104 => x"05721151", +1105 => x"5856535f", +1106 => x"5a575a58", +1107 => x"55587373", +1108 => x"27863884", +1109 => x"80801656", +1110 => x"73902a16", +1111 => x"5b7883ff", +1112 => x"ff067484", +1113 => x"80802905", +1114 => x"5c7a7c5a", +1115 => x"5d785e77", +1116 => x"7f296178", +1117 => x"29057d05", +1118 => x"5d7c7e56", +1119 => x"7a0c7484", +1120 => x"1b0c7980", +1121 => x"0c933d0d", +1122 => x"04f93d0d", +1123 => x"797b7d54", +1124 => x"58725977", +1125 => x"30797030", +1126 => x"7072079f", +1127 => x"2a737131", +1128 => x"5a525977", +1129 => x"7956730c", +1130 => x"53738413", +1131 => x"0c54800c", +1132 => x"893d0d04", +1133 => x"f93d0d79", +1134 => x"7b7d7f56", +1135 => x"54525472", +1136 => x"802ea038", +1137 => x"70577158", +1138 => x"a0733152", +1139 => x"807225a1", +1140 => x"38777074", +1141 => x"2b577073", +1142 => x"2a78752b", +1143 => x"07565174", +1144 => x"76535170", +1145 => x"740c7184", +1146 => x"150c7380", +1147 => x"0c893d0d", +1148 => x"04805677", +1149 => x"72302b55", +1150 => x"74765351", +1151 => x"e639e43d", +1152 => x"0d6ea13d", +1153 => x"08a33d08", +1154 => x"59575f80", +1155 => x"764d774e", +1156 => x"a33d08a5", +1157 => x"3d08574b", +1158 => x"754c5e7d", +1159 => x"6c2486fb", +1160 => x"38806a24", +1161 => x"878f3869", +1162 => x"6b58566b", +1163 => x"6d5d467b", +1164 => x"47754476", +1165 => x"45646468", +1166 => x"685c5c56", +1167 => x"567481e7", +1168 => x"38787627", +1169 => x"82c73875", +1170 => x"81ff2683", +1171 => x"2b5583ff", +1172 => x"ff76278c", +1173 => x"389055fe", +1174 => x"800a7627", +1175 => x"83389855", +1176 => x"75752a80", +1177 => x"d3d00570", +1178 => x"33a07731", +1179 => x"71315755", +1180 => x"5774802e", +1181 => x"95387575", +1182 => x"2ba07631", +1183 => x"7a772b7c", +1184 => x"722a077c", +1185 => x"782b5d5b", +1186 => x"59567590", +1187 => x"2a7683ff", +1188 => x"ff067154", +1189 => x"7a535957", +1190 => x"88803f80", +1191 => x"085b87ea", +1192 => x"3f800880", +1193 => x"0879297c", +1194 => x"902b7c90", +1195 => x"2a075656", +1196 => x"59737527", +1197 => x"94388008", +1198 => x"ff057615", +1199 => x"55597574", +1200 => x"26873874", +1201 => x"742687b9", +1202 => x"38765273", +1203 => x"75315187", +1204 => x"c93f8008", +1205 => x"5587b33f", +1206 => x"80088008", +1207 => x"79297b83", +1208 => x"ffff0677", +1209 => x"902b0756", +1210 => x"59577378", +1211 => x"27963880", +1212 => x"08ff0576", +1213 => x"15555775", +1214 => x"74268938", +1215 => x"77742677", +1216 => x"71315856", +1217 => x"78902b77", +1218 => x"0758805b", +1219 => x"7a407741", +1220 => x"7f615654", +1221 => x"7d80d938", +1222 => x"737f0c74", +1223 => x"7f84050c", +1224 => x"7e800c9e", +1225 => x"3d0d0480", +1226 => x"705c5874", +1227 => x"7926dd38", +1228 => x"7481ff26", +1229 => x"832b5774", +1230 => x"83ffff26", +1231 => x"82a53874", +1232 => x"772a80d3", +1233 => x"d0057033", +1234 => x"a0793171", +1235 => x"31595c5d", +1236 => x"7682b338", +1237 => x"76547479", +1238 => x"27833881", +1239 => x"54797627", +1240 => x"74075981", +1241 => x"5878ffa2", +1242 => x"38765880", +1243 => x"5bff9d39", +1244 => x"73527453", +1245 => x"9e3de805", +1246 => x"51fc8e3f", +1247 => x"6769567f", +1248 => x"0c747f84", +1249 => x"050c7e80", +1250 => x"0c9e3d0d", +1251 => x"0475802e", +1252 => x"81c43875", +1253 => x"81ff2683", +1254 => x"2b5583ff", +1255 => x"ff76278c", +1256 => x"389055fe", +1257 => x"800a7627", +1258 => x"83389855", +1259 => x"75752a80", +1260 => x"d3d00570", +1261 => x"33a07731", +1262 => x"7131575e", +1263 => x"54748491", +1264 => x"38787631", +1265 => x"54817690", +1266 => x"2a7783ff", +1267 => x"ff065f5d", +1268 => x"5b7b5273", +1269 => x"5185c33f", +1270 => x"80085785", +1271 => x"ad3f8008", +1272 => x"80087e29", +1273 => x"78902b7c", +1274 => x"902a0756", +1275 => x"56597375", +1276 => x"27943880", +1277 => x"08ff0576", +1278 => x"15555975", +1279 => x"74268738", +1280 => x"74742684", +1281 => x"f3387b52", +1282 => x"73753151", +1283 => x"858c3f80", +1284 => x"085584f6", +1285 => x"3f800880", +1286 => x"087e297b", +1287 => x"83ffff06", +1288 => x"77902b07", +1289 => x"56595773", +1290 => x"78279638", +1291 => x"8008ff05", +1292 => x"76155557", +1293 => x"75742689", +1294 => x"38777426", +1295 => x"77713158", +1296 => x"5a78902b", +1297 => x"77077b41", +1298 => x"417f6156", +1299 => x"547d802e", +1300 => x"fdc638fe", +1301 => x"9b397552", +1302 => x"815184ae", +1303 => x"3f800856", +1304 => x"feb13990", +1305 => x"57fe800a", +1306 => x"7527fdd3", +1307 => x"38987571", +1308 => x"2a80d3d0", +1309 => x"057033a0", +1310 => x"73317131", +1311 => x"535d5e57", +1312 => x"76802efd", +1313 => x"cf38a077", +1314 => x"3175782b", +1315 => x"77722a07", +1316 => x"77792b7b", +1317 => x"7a2b7d74", +1318 => x"2a077d7b", +1319 => x"2b73902a", +1320 => x"7483ffff", +1321 => x"0671597f", +1322 => x"772a585e", +1323 => x"5c415f58", +1324 => x"5c5483e6", +1325 => x"3f800854", +1326 => x"83d03f80", +1327 => x"08800879", +1328 => x"2975902b", +1329 => x"7e902a07", +1330 => x"56565973", +1331 => x"75279938", +1332 => x"8008ff05", +1333 => x"7b155559", +1334 => x"7a74268c", +1335 => x"38737527", +1336 => x"8738ff19", +1337 => x"7b155559", +1338 => x"76527375", +1339 => x"315183aa", +1340 => x"3f800855", +1341 => x"83943f80", +1342 => x"08800879", +1343 => x"297d83ff", +1344 => x"ff067790", +1345 => x"2b075659", +1346 => x"57737827", +1347 => x"99388008", +1348 => x"ff057b15", +1349 => x"55577a74", +1350 => x"268c3873", +1351 => x"78278738", +1352 => x"ff177b15", +1353 => x"55577378", +1354 => x"3179902b", +1355 => x"78077083", +1356 => x"ffff0671", +1357 => x"902a7983", +1358 => x"ffff067a", +1359 => x"902a7372", +1360 => x"29737329", +1361 => x"74732976", +1362 => x"74297390", +1363 => x"2a057205", +1364 => x"5755435f", +1365 => x"5b585a57", +1366 => x"595a747c", +1367 => x"27863884", +1368 => x"80801757", +1369 => x"74902a17", +1370 => x"7983ffff", +1371 => x"06768480", +1372 => x"80290557", +1373 => x"57767a26", +1374 => x"9a38767a", +1375 => x"32703070", +1376 => x"72078025", +1377 => x"565a5b7c", +1378 => x"7627fafe", +1379 => x"3873802e", +1380 => x"faf838ff", +1381 => x"1858805b", +1382 => x"faf239ff", +1383 => x"76537754", +1384 => x"9f3de805", +1385 => x"525ef7e1", +1386 => x"3f676957", +1387 => x"4c754d69", +1388 => x"8025f8f3", +1389 => x"387d096a", +1390 => x"6c5c537a", +1391 => x"549f3de8", +1392 => x"05525ef7", +1393 => x"c43f6769", +1394 => x"714c704d", +1395 => x"5856f8db", +1396 => x"39a07531", +1397 => x"76762b7a", +1398 => x"772b7c73", +1399 => x"2a077c78", +1400 => x"2b72902a", +1401 => x"7383ffff", +1402 => x"0671587e", +1403 => x"762a5742", +1404 => x"405d5d57", +1405 => x"5881a33f", +1406 => x"80085781", +1407 => x"8d3f8008", +1408 => x"80087e29", +1409 => x"78902b7d", +1410 => x"902a0756", +1411 => x"56597375", +1412 => x"27993880", +1413 => x"08ff0576", +1414 => x"15555975", +1415 => x"74268c38", +1416 => x"73752787", +1417 => x"38ff1976", +1418 => x"1555597b", +1419 => x"52737531", +1420 => x"5180e73f", +1421 => x"80085580", +1422 => x"d13f8008", +1423 => x"80087e29", +1424 => x"7c83ffff", +1425 => x"06707890", +1426 => x"2b075156", +1427 => x"58587377", +1428 => x"27993880", +1429 => x"08ff0576", +1430 => x"15555875", +1431 => x"74268c38", +1432 => x"73772787", +1433 => x"38ff1876", +1434 => x"15555878", +1435 => x"902b7807", +1436 => x"74783155", +1437 => x"5bfada39", +1438 => x"ff197615", +1439 => x"5559fb86", +1440 => x"39ff1976", +1441 => x"155559f8", +1442 => x"c0397070", +1443 => x"70805375", +1444 => x"52745181", +1445 => x"913f5050", +1446 => x"50047070", +1447 => x"70815375", +1448 => x"52745181", +1449 => x"813f5050", +1450 => x"5004fb3d", +1451 => x"0d777955", +1452 => x"55805675", +1453 => x"7524ab38", +1454 => x"8074249d", +1455 => x"38805373", +1456 => x"52745180", +1457 => x"e13f8008", +1458 => x"5475802e", +1459 => x"85388008", +1460 => x"30547380", +1461 => x"0c873d0d", +1462 => x"04733076", +1463 => x"81325754", +1464 => x"dc397430", +1465 => x"55815673", +1466 => x"8025d238", +1467 => x"ec39fa3d", +1468 => x"0d787a57", +1469 => x"55805776", +1470 => x"7524a438", +1471 => x"759f2c54", +1472 => x"81537574", +1473 => x"32743152", +1474 => x"74519b3f", +1475 => x"80085476", +1476 => x"802e8538", +1477 => x"80083054", +1478 => x"73800c88", +1479 => x"3d0d0474", +1480 => x"30558157", +1481 => x"d739fc3d", +1482 => x"0d767853", +1483 => x"54815380", +1484 => x"74732652", +1485 => x"5572802e", +1486 => x"98387080", +1487 => x"2eab3880", +1488 => x"7224a638", +1489 => x"71107310", +1490 => x"75722653", +1491 => x"545272ea", +1492 => x"38735178", +1493 => x"83387451", +1494 => x"70800c86", +1495 => x"3d0d0472", +1496 => x"0a100a72", +1497 => x"0a100a53", +1498 => x"5372802e", +1499 => x"e4387174", +1500 => x"26ed3873", +1501 => x"72317574", +1502 => x"07740a10", +1503 => x"0a740a10", +1504 => x"0a555556", +1505 => x"54e33970", +1506 => x"70735280", +1507 => x"decc0851", +1508 => x"933f5050", +1509 => x"04707073", +1510 => x"5280decc", +1511 => x"085190ce", +1512 => x"3f505004", +1513 => x"f43d0d7e", +1514 => x"608b1170", +1515 => x"f8065b55", +1516 => x"555d7296", +1517 => x"26833890", +1518 => x"58807824", +1519 => x"74792607", +1520 => x"55805474", +1521 => x"742e0981", +1522 => x"0680ca38", +1523 => x"7c518d9e", +1524 => x"3f7783f7", +1525 => x"2680c538", +1526 => x"77832a70", +1527 => x"10101080", +1528 => x"d6c4058c", +1529 => x"11085858", +1530 => x"5475772e", +1531 => x"81f03884", +1532 => x"1608fc06", +1533 => x"8c170888", +1534 => x"1808718c", +1535 => x"120c8812", +1536 => x"0c5b7605", +1537 => x"84110881", +1538 => x"0784120c", +1539 => x"537c518c", +1540 => x"de3f8816", +1541 => x"5473800c", +1542 => x"8e3d0d04", +1543 => x"77892a78", +1544 => x"832a5854", +1545 => x"73802ebf", +1546 => x"3877862a", +1547 => x"b8055784", +1548 => x"7427b438", +1549 => x"80db1457", +1550 => x"947427ab", +1551 => x"38778c2a", +1552 => x"80ee0557", +1553 => x"80d47427", +1554 => x"9e38778f", +1555 => x"2a80f705", +1556 => x"5782d474", +1557 => x"27913877", +1558 => x"922a80fc", +1559 => x"05578ad4", +1560 => x"74278438", +1561 => x"80fe5776", +1562 => x"10101080", +1563 => x"d6c4058c", +1564 => x"11085653", +1565 => x"74732ea3", +1566 => x"38841508", +1567 => x"fc067079", +1568 => x"31555673", +1569 => x"8f2488e4", +1570 => x"38738025", +1571 => x"88e6388c", +1572 => x"15085574", +1573 => x"732e0981", +1574 => x"06df3881", +1575 => x"175980d6", +1576 => x"d4085675", +1577 => x"80d6cc2e", +1578 => x"82cc3884", +1579 => x"1608fc06", +1580 => x"70793155", +1581 => x"55738f24", +1582 => x"bb3880d6", +1583 => x"cc0b80d6", +1584 => x"d80c80d6", +1585 => x"cc0b80d6", +1586 => x"d40c8074", +1587 => x"2480db38", +1588 => x"74168411", +1589 => x"08810784", +1590 => x"120c53fe", +1591 => x"b0398816", +1592 => x"8c110857", +1593 => x"5975792e", +1594 => x"098106fe", +1595 => x"82388214", +1596 => x"59ffab39", +1597 => x"77167881", +1598 => x"0784180c", +1599 => x"7080d6d8", +1600 => x"0c7080d6", +1601 => x"d40c80d6", +1602 => x"cc0b8c12", +1603 => x"0c8c1108", +1604 => x"88120c74", +1605 => x"81078412", +1606 => x"0c740574", +1607 => x"710c5b7c", +1608 => x"518acc3f", +1609 => x"881654fd", +1610 => x"ec3983ff", +1611 => x"75278391", +1612 => x"3874892a", +1613 => x"75832a54", +1614 => x"5473802e", +1615 => x"bf387486", +1616 => x"2ab80553", +1617 => x"847427b4", +1618 => x"3880db14", +1619 => x"53947427", +1620 => x"ab38748c", +1621 => x"2a80ee05", +1622 => x"5380d474", +1623 => x"279e3874", +1624 => x"8f2a80f7", +1625 => x"055382d4", +1626 => x"74279138", +1627 => x"74922a80", +1628 => x"fc05538a", +1629 => x"d4742784", +1630 => x"3880fe53", +1631 => x"72101010", +1632 => x"80d6c405", +1633 => x"88110855", +1634 => x"5773772e", +1635 => x"868b3884", +1636 => x"1408fc06", +1637 => x"5b747b27", +1638 => x"8d388814", +1639 => x"08547377", +1640 => x"2e098106", +1641 => x"ea388c14", +1642 => x"0880d6c4", +1643 => x"0b840508", +1644 => x"718c190c", +1645 => x"7588190c", +1646 => x"7788130c", +1647 => x"5c57758c", +1648 => x"150c7853", +1649 => x"80792483", +1650 => x"98387282", +1651 => x"2c81712b", +1652 => x"5656747b", +1653 => x"2680ca38", +1654 => x"7a750657", +1655 => x"7682a338", +1656 => x"78fc0684", +1657 => x"05597410", +1658 => x"707c0655", +1659 => x"55738292", +1660 => x"38841959", +1661 => x"f13980d6", +1662 => x"c40b8405", +1663 => x"0879545b", +1664 => x"788025c6", +1665 => x"3882da39", +1666 => x"74097b06", +1667 => x"7080d6c4", +1668 => x"0b84050c", +1669 => x"5b741055", +1670 => x"747b2685", +1671 => x"387485bc", +1672 => x"3880d6c4", +1673 => x"0b880508", +1674 => x"70841208", +1675 => x"fc06707b", +1676 => x"317b7226", +1677 => x"8f722507", +1678 => x"5d575c5c", +1679 => x"5578802e", +1680 => x"80d93879", +1681 => x"1580d6bc", +1682 => x"08199011", +1683 => x"59545680", +1684 => x"d6b808ff", +1685 => x"2e8838a0", +1686 => x"8f13e080", +1687 => x"06577652", +1688 => x"7c51888c", +1689 => x"3f800854", +1690 => x"8008ff2e", +1691 => x"90388008", +1692 => x"762782a7", +1693 => x"387480d6", +1694 => x"c42e829f", +1695 => x"3880d6c4", +1696 => x"0b880508", +1697 => x"55841508", +1698 => x"fc067079", +1699 => x"31797226", +1700 => x"8f722507", +1701 => x"5d555a7a", +1702 => x"83f23877", +1703 => x"81078416", +1704 => x"0c771570", +1705 => x"80d6c40b", +1706 => x"88050c74", +1707 => x"81078412", +1708 => x"0c567c51", +1709 => x"87b93f88", +1710 => x"15547380", +1711 => x"0c8e3d0d", +1712 => x"0474832a", +1713 => x"70545480", +1714 => x"7424819b", +1715 => x"3872822c", +1716 => x"81712b80", +1717 => x"d6c80807", +1718 => x"7080d6c4", +1719 => x"0b84050c", +1720 => x"75101010", +1721 => x"80d6c405", +1722 => x"88110871", +1723 => x"8c1b0c70", +1724 => x"881b0c79", +1725 => x"88130c57", +1726 => x"555c5575", +1727 => x"8c150cfd", +1728 => x"c1397879", +1729 => x"10101080", +1730 => x"d6c40570", +1731 => x"565b5c8c", +1732 => x"14085675", +1733 => x"742ea338", +1734 => x"841608fc", +1735 => x"06707931", +1736 => x"5853768f", +1737 => x"2483f138", +1738 => x"76802584", +1739 => x"af388c16", +1740 => x"08567574", +1741 => x"2e098106", +1742 => x"df388814", +1743 => x"811a7083", +1744 => x"06555a54", +1745 => x"72c9387b", +1746 => x"83065675", +1747 => x"802efdb8", +1748 => x"38ff1cf8", +1749 => x"1b5b5c88", +1750 => x"1a087a2e", +1751 => x"ea38fdb5", +1752 => x"39831953", +1753 => x"fce43983", +1754 => x"1470822c", +1755 => x"81712b80", +1756 => x"d6c80807", +1757 => x"7080d6c4", +1758 => x"0b84050c", +1759 => x"76101010", +1760 => x"80d6c405", +1761 => x"88110871", +1762 => x"8c1c0c70", +1763 => x"881c0c7a", +1764 => x"88130c58", +1765 => x"535d5653", +1766 => x"fee13980", +1767 => x"d6880817", +1768 => x"59800876", +1769 => x"2e818b38", +1770 => x"80d6b808", +1771 => x"ff2e848e", +1772 => x"38737631", +1773 => x"1980d688", +1774 => x"0c738706", +1775 => x"70565372", +1776 => x"802e8838", +1777 => x"88733170", +1778 => x"15555576", +1779 => x"149fff06", +1780 => x"a0807131", +1781 => x"1670547e", +1782 => x"53515385", +1783 => x"933f8008", +1784 => x"568008ff", +1785 => x"2e819e38", +1786 => x"80d68808", +1787 => x"137080d6", +1788 => x"880c7475", +1789 => x"80d6c40b", +1790 => x"88050c77", +1791 => x"76311581", +1792 => x"07555659", +1793 => x"7a80d6c4", +1794 => x"2e83c038", +1795 => x"798f2682", +1796 => x"ef38810b", +1797 => x"84150c84", +1798 => x"1508fc06", +1799 => x"70793179", +1800 => x"72268f72", +1801 => x"25075d55", +1802 => x"5a7a802e", +1803 => x"fced3880", +1804 => x"db398008", +1805 => x"9fff0655", +1806 => x"74feed38", +1807 => x"7880d688", +1808 => x"0c80d6c4", +1809 => x"0b880508", +1810 => x"7a188107", +1811 => x"84120c55", +1812 => x"80d6b408", +1813 => x"79278638", +1814 => x"7880d6b4", +1815 => x"0c80d6b0", +1816 => x"087927fc", +1817 => x"a0387880", +1818 => x"d6b00c84", +1819 => x"1508fc06", +1820 => x"70793179", +1821 => x"72268f72", +1822 => x"25075d55", +1823 => x"5a7a802e", +1824 => x"fc993888", +1825 => x"39807457", +1826 => x"53fedd39", +1827 => x"7c5183df", +1828 => x"3f800b80", +1829 => x"0c8e3d0d", +1830 => x"04807324", +1831 => x"a5387282", +1832 => x"2c81712b", +1833 => x"80d6c808", +1834 => x"077080d6", +1835 => x"c40b8405", +1836 => x"0c5c5a76", +1837 => x"8c170c73", +1838 => x"88170c75", +1839 => x"88180cf9", +1840 => x"fd398313", +1841 => x"70822c81", +1842 => x"712b80d6", +1843 => x"c8080770", +1844 => x"80d6c40b", +1845 => x"84050c5d", +1846 => x"5b53d839", +1847 => x"7a75065c", +1848 => x"7bfc9f38", +1849 => x"84197510", +1850 => x"5659f139", +1851 => x"ff178105", +1852 => x"59f7ab39", +1853 => x"8c150888", +1854 => x"1608718c", +1855 => x"120c8812", +1856 => x"0c597515", +1857 => x"84110881", +1858 => x"0784120c", +1859 => x"587c5182", +1860 => x"de3f8815", +1861 => x"54fba339", +1862 => x"77167881", +1863 => x"0784180c", +1864 => x"8c170888", +1865 => x"1808718c", +1866 => x"120c8812", +1867 => x"0c5c7080", +1868 => x"d6d80c70", +1869 => x"80d6d40c", +1870 => x"80d6cc0b", +1871 => x"8c120c8c", +1872 => x"11088812", +1873 => x"0c778107", +1874 => x"84120c77", +1875 => x"0577710c", +1876 => x"557c5182", +1877 => x"9a3f8816", +1878 => x"54f5ba39", +1879 => x"72168411", +1880 => x"08810784", +1881 => x"120c588c", +1882 => x"16088817", +1883 => x"08718c12", +1884 => x"0c88120c", +1885 => x"577c5181", +1886 => x"f63f8816", +1887 => x"54f59639", +1888 => x"7284150c", +1889 => x"f41af806", +1890 => x"70841d08", +1891 => x"81060784", +1892 => x"1d0c701c", +1893 => x"5556850b", +1894 => x"84150c85", +1895 => x"0b88150c", +1896 => x"8f7627fd", +1897 => x"ab38881b", +1898 => x"527c5184", +1899 => x"c13f80d6", +1900 => x"c40b8805", +1901 => x"0880d688", +1902 => x"085a55fd", +1903 => x"93397880", +1904 => x"d6880c73", +1905 => x"80d6b80c", +1906 => x"fbef3972", +1907 => x"84150cfc", +1908 => x"ff39fb3d", +1909 => x"0d77707a", +1910 => x"7c585553", +1911 => x"568f7527", +1912 => x"80e63872", +1913 => x"76078306", +1914 => x"517080dc", +1915 => x"38757352", +1916 => x"54707084", +1917 => x"05520874", +1918 => x"70840556", +1919 => x"0c737170", +1920 => x"84055308", +1921 => x"71708405", +1922 => x"530c7170", +1923 => x"84055308", +1924 => x"71708405", +1925 => x"530c7170", +1926 => x"84055308", +1927 => x"71708405", +1928 => x"530cf016", +1929 => x"5654748f", +1930 => x"26c73883", +1931 => x"75279538", +1932 => x"70708405", +1933 => x"52087470", +1934 => x"8405560c", +1935 => x"fc155574", +1936 => x"8326ed38", +1937 => x"73715452", +1938 => x"ff155170", +1939 => x"ff2e9838", +1940 => x"72708105", +1941 => x"54337270", +1942 => x"81055434", +1943 => x"ff115170", +1944 => x"ff2e0981", +1945 => x"06ea3875", +1946 => x"800c873d", +1947 => x"0d040404", +1948 => x"70707070", +1949 => x"800b81b6", +1950 => x"9c0c7651", +1951 => x"87cc3f80", +1952 => x"08538008", +1953 => x"ff2e8938", +1954 => x"72800c50", +1955 => x"50505004", +1956 => x"81b69c08", +1957 => x"5473802e", +1958 => x"ef387574", +1959 => x"710c5272", +1960 => x"800c5050", +1961 => x"505004fb", +1962 => x"3d0d7779", +1963 => x"70720783", +1964 => x"06535452", +1965 => x"70933871", +1966 => x"73730854", +1967 => x"56547173", +1968 => x"082e80c4", +1969 => x"38737554", +1970 => x"52713370", +1971 => x"81ff0652", +1972 => x"5470802e", +1973 => x"9d387233", +1974 => x"5570752e", +1975 => x"09810695", +1976 => x"38811281", +1977 => x"14713370", +1978 => x"81ff0654", +1979 => x"56545270", +1980 => x"e5387233", +1981 => x"557381ff", +1982 => x"067581ff", +1983 => x"06717131", +1984 => x"800c5552", +1985 => x"873d0d04", +1986 => x"7109f7fb", +1987 => x"fdff1306", +1988 => x"f8848281", +1989 => x"80065271", +1990 => x"97388414", +1991 => x"84167108", +1992 => x"54565471", +1993 => x"75082ee0", +1994 => x"38737554", +1995 => x"52ff9a39", +1996 => x"800b800c", +1997 => x"873d0d04", +1998 => x"fb3d0d77", +1999 => x"705256fe", +2000 => x"ad3f80d6", +2001 => x"c40b8805", +2002 => x"08841108", +2003 => x"fc06707b", +2004 => x"319fef05", +2005 => x"e08006e0", +2006 => x"80055255", +2007 => x"55a08075", +2008 => x"24943880", +2009 => x"527551fe", +2010 => x"873f80d6", +2011 => x"cc081453", +2012 => x"7280082e", +2013 => x"8f387551", +2014 => x"fdf53f80", +2015 => x"5372800c", +2016 => x"873d0d04", +2017 => x"74305275", +2018 => x"51fde53f", +2019 => x"8008ff2e", +2020 => x"a83880d6", +2021 => x"c40b8805", +2022 => x"08747631", +2023 => x"81078412", +2024 => x"0c5380d6", +2025 => x"88087531", +2026 => x"80d6880c", +2027 => x"7551fdbf", +2028 => x"3f810b80", +2029 => x"0c873d0d", +2030 => x"04805275", +2031 => x"51fdb13f", +2032 => x"80d6c40b", +2033 => x"88050880", +2034 => x"08713154", +2035 => x"548f7325", +2036 => x"ffa43880", +2037 => x"0880d6b8", +2038 => x"083180d6", +2039 => x"880c7281", +2040 => x"0784150c", +2041 => x"7551fd87", +2042 => x"3f8053ff", +2043 => x"9039f73d", +2044 => x"0d7b7d54", +2045 => x"5a72802e", +2046 => x"82833879", +2047 => x"51fcef3f", +2048 => x"f8138411", +2049 => x"0870fe06", +2050 => x"70138411", +2051 => x"08fc065c", +2052 => x"57585457", +2053 => x"80d6cc08", +2054 => x"742e82de", +2055 => x"38778415", +2056 => x"0c807381", +2057 => x"06565974", +2058 => x"792e81d5", +2059 => x"38771484", +2060 => x"11088106", +2061 => x"565374a0", +2062 => x"38771656", +2063 => x"7881e638", +2064 => x"88140855", +2065 => x"7480d6cc", +2066 => x"2e82f938", +2067 => x"8c140870", +2068 => x"8c170c75", +2069 => x"88120c58", +2070 => x"75810784", +2071 => x"180c7517", +2072 => x"76710c54", +2073 => x"78819138", +2074 => x"83ff7627", +2075 => x"81c83875", +2076 => x"892a7683", +2077 => x"2a545473", +2078 => x"802ebf38", +2079 => x"75862ab8", +2080 => x"05538474", +2081 => x"27b43880", +2082 => x"db145394", +2083 => x"7427ab38", +2084 => x"758c2a80", +2085 => x"ee055380", +2086 => x"d474279e", +2087 => x"38758f2a", +2088 => x"80f70553", +2089 => x"82d47427", +2090 => x"91387592", +2091 => x"2a80fc05", +2092 => x"538ad474", +2093 => x"27843880", +2094 => x"fe537210", +2095 => x"101080d6", +2096 => x"c4058811", +2097 => x"08555573", +2098 => x"752e82bf", +2099 => x"38841408", +2100 => x"fc065975", +2101 => x"79278d38", +2102 => x"88140854", +2103 => x"73752e09", +2104 => x"8106ea38", +2105 => x"8c140870", +2106 => x"8c190c74", +2107 => x"88190c77", +2108 => x"88120c55", +2109 => x"768c150c", +2110 => x"7951faf3", +2111 => x"3f8b3d0d", +2112 => x"04760877", +2113 => x"71315876", +2114 => x"05881808", +2115 => x"56567480", +2116 => x"d6cc2e80", +2117 => x"e0388c17", +2118 => x"08708c17", +2119 => x"0c758812", +2120 => x"0c53fe89", +2121 => x"39881408", +2122 => x"8c150870", +2123 => x"8c130c59", +2124 => x"88190cfe", +2125 => x"a3397583", +2126 => x"2a705454", +2127 => x"80742481", +2128 => x"98387282", +2129 => x"2c81712b", +2130 => x"80d6c808", +2131 => x"0780d6c4", +2132 => x"0b84050c", +2133 => x"74101010", +2134 => x"80d6c405", +2135 => x"88110871", +2136 => x"8c1b0c70", +2137 => x"881b0c79", +2138 => x"88130c56", +2139 => x"5a55768c", +2140 => x"150cff84", +2141 => x"398159fd", +2142 => x"b4397716", +2143 => x"73810654", +2144 => x"55729838", +2145 => x"76087771", +2146 => x"31587505", +2147 => x"8c180888", +2148 => x"1908718c", +2149 => x"120c8812", +2150 => x"0c555574", +2151 => x"81078418", +2152 => x"0c7680d6", +2153 => x"c40b8805", +2154 => x"0c80d6c0", +2155 => x"087526fe", +2156 => x"c73880d6", +2157 => x"bc085279", +2158 => x"51fafd3f", +2159 => x"7951f9af", +2160 => x"3ffeba39", +2161 => x"81778c17", +2162 => x"0c778817", +2163 => x"0c758c19", +2164 => x"0c758819", +2165 => x"0c59fd80", +2166 => x"39831470", +2167 => x"822c8171", +2168 => x"2b80d6c8", +2169 => x"080780d6", +2170 => x"c40b8405", +2171 => x"0c751010", +2172 => x"1080d6c4", +2173 => x"05881108", +2174 => x"718c1c0c", +2175 => x"70881c0c", +2176 => x"7a88130c", +2177 => x"575b5653", +2178 => x"fee43980", +2179 => x"7324a338", +2180 => x"72822c81", +2181 => x"712b80d6", +2182 => x"c8080780", +2183 => x"d6c40b84", +2184 => x"050c5874", +2185 => x"8c180c73", +2186 => x"88180c76", +2187 => x"88160cfd", +2188 => x"c3398313", +2189 => x"70822c81", +2190 => x"712b80d6", +2191 => x"c8080780", +2192 => x"d6c40b84", +2193 => x"050c5953", +2194 => x"da397070", +2195 => x"7080e5f4", +2196 => x"08893881", +2197 => x"b6a00b80", +2198 => x"e5f40c80", +2199 => x"e5f40875", +2200 => x"115252ff", +2201 => x"537087fb", +2202 => x"80802688", +2203 => x"387080e5", +2204 => x"f40c7153", +2205 => x"72800c50", +2206 => x"505004fd", +2207 => x"3d0d800b", +2208 => x"80d5f408", +2209 => x"54547281", +2210 => x"2e9b3873", +2211 => x"80e5f80c", +2212 => x"c3ee3fc2", +2213 => x"eb3f80e5", +2214 => x"cc528151", +2215 => x"cc933f80", +2216 => x"085180dd", +2217 => x"3f7280e5", +2218 => x"f80cc3d4", +2219 => x"3fc2d13f", +2220 => x"80e5cc52", +2221 => x"8151cbf9", +2222 => x"3f800851", +2223 => x"80c33f00", +2224 => x"ff3900ff", +2225 => x"39f43d0d", +2226 => x"7e80e5ec", +2227 => x"08700870", +2228 => x"81ff0692", +2229 => x"3df80555", +2230 => x"515a5759", +2231 => x"c48f3f80", +2232 => x"5477557b", +2233 => x"7d585276", +2234 => x"538e3df0", +2235 => x"0551de8e", +2236 => x"3f797b58", +2237 => x"790c7684", +2238 => x"1a0c7880", +2239 => x"0c8e3d0d", +2240 => x"04f73d0d", +2241 => x"7b80decc", +2242 => x"0882c811", +2243 => x"085a545a", +2244 => x"77802e80", +2245 => x"da388188", +2246 => x"18841908", +2247 => x"ff058171", +2248 => x"2b595559", +2249 => x"80742480", +2250 => x"ea388074", +2251 => x"24b53873", +2252 => x"822b7811", +2253 => x"88055656", +2254 => x"81801908", +2255 => x"77065372", +2256 => x"802eb638", +2257 => x"78167008", +2258 => x"53537951", +2259 => x"74085372", +2260 => x"2dff14fc", +2261 => x"17fc1779", +2262 => x"812c5a57", +2263 => x"57547380", +2264 => x"25d63877", +2265 => x"085877ff", +2266 => x"ad3880de", +2267 => x"cc0853bc", +2268 => x"1308a538", +2269 => x"7951fec7", +2270 => x"3f740853", +2271 => x"722dff14", +2272 => x"fc17fc17", +2273 => x"79812c5a", +2274 => x"57575473", +2275 => x"8025ffa8", +2276 => x"38d13980", +2277 => x"57ff9339", +2278 => x"7251bc13", +2279 => x"0854732d", +2280 => x"7951fe9b", +2281 => x"3f707080", +2282 => x"e5d40bfc", +2283 => x"05700852", +2284 => x"5270ff2e", +2285 => x"9138702d", +2286 => x"fc127008", +2287 => x"525270ff", +2288 => x"2e098106", +2289 => x"f1385050", +2290 => x"0404c2ff", +2291 => x"3f040000", +2292 => x"00000040", +2293 => x"30313233", +2294 => x"34353637", +2295 => x"38390000", +2296 => x"44485259", +2297 => x"53544f4e", +2298 => x"45205052", +2299 => x"4f475241", +2300 => x"4d2c2053", +2301 => x"4f4d4520", +2302 => x"53545249", +2303 => x"4e470000", +2304 => x"44485259", +2305 => x"53544f4e", +2306 => x"45205052", +2307 => x"4f475241", +2308 => x"4d2c2031", +2309 => x"27535420", +2310 => x"53545249", +2311 => x"4e470000", +2312 => x"44687279", +2313 => x"73746f6e", +2314 => x"65204265", +2315 => x"6e63686d", +2316 => x"61726b2c", +2317 => x"20566572", +2318 => x"73696f6e", +2319 => x"20322e31", +2320 => x"20284c61", +2321 => x"6e677561", +2322 => x"67653a20", +2323 => x"43290a00", +2324 => x"50726f67", +2325 => x"72616d20", +2326 => x"636f6d70", +2327 => x"696c6564", +2328 => x"20776974", +2329 => x"68202772", +2330 => x"65676973", +2331 => x"74657227", +2332 => x"20617474", +2333 => x"72696275", +2334 => x"74650a00", +2335 => x"45786563", +2336 => x"7574696f", +2337 => x"6e207374", +2338 => x"61727473", +2339 => x"2c202564", +2340 => x"2072756e", +2341 => x"73207468", +2342 => x"726f7567", +2343 => x"68204468", +2344 => x"72797374", +2345 => x"6f6e650a", +2346 => x"00000000", +2347 => x"44485259", +2348 => x"53544f4e", +2349 => x"45205052", +2350 => x"4f475241", +2351 => x"4d2c2032", +2352 => x"274e4420", +2353 => x"53545249", +2354 => x"4e470000", +2355 => x"45786563", +2356 => x"7574696f", +2357 => x"6e20656e", +2358 => x"64730a00", +2359 => x"46696e61", +2360 => x"6c207661", +2361 => x"6c756573", +2362 => x"206f6620", +2363 => x"74686520", +2364 => x"76617269", +2365 => x"61626c65", +2366 => x"73207573", +2367 => x"65642069", +2368 => x"6e207468", +2369 => x"65206265", +2370 => x"6e63686d", +2371 => x"61726b3a", +2372 => x"0a000000", +2373 => x"496e745f", +2374 => x"476c6f62", +2375 => x"3a202020", +2376 => x"20202020", +2377 => x"20202020", +2378 => x"2025640a", +2379 => x"00000000", +2380 => x"20202020", +2381 => x"20202020", +2382 => x"73686f75", +2383 => x"6c642062", +2384 => x"653a2020", +2385 => x"2025640a", +2386 => x"00000000", +2387 => x"426f6f6c", +2388 => x"5f476c6f", +2389 => x"623a2020", +2390 => x"20202020", +2391 => x"20202020", +2392 => x"2025640a", +2393 => x"00000000", +2394 => x"43685f31", +2395 => x"5f476c6f", +2396 => x"623a2020", +2397 => x"20202020", +2398 => x"20202020", +2399 => x"2025630a", +2400 => x"00000000", +2401 => x"20202020", +2402 => x"20202020", +2403 => x"73686f75", +2404 => x"6c642062", +2405 => x"653a2020", +2406 => x"2025630a", +2407 => x"00000000", +2408 => x"43685f32", +2409 => x"5f476c6f", +2410 => x"623a2020", +2411 => x"20202020", +2412 => x"20202020", +2413 => x"2025630a", +2414 => x"00000000", +2415 => x"4172725f", +2416 => x"315f476c", +2417 => x"6f625b38", +2418 => x"5d3a2020", +2419 => x"20202020", +2420 => x"2025640a", +2421 => x"00000000", +2422 => x"4172725f", +2423 => x"325f476c", +2424 => x"6f625b38", +2425 => x"5d5b375d", +2426 => x"3a202020", +2427 => x"2025640a", +2428 => x"00000000", +2429 => x"20202020", +2430 => x"20202020", +2431 => x"73686f75", +2432 => x"6c642062", +2433 => x"653a2020", +2434 => x"204e756d", +2435 => x"6265725f", +2436 => x"4f665f52", +2437 => x"756e7320", +2438 => x"2b203130", +2439 => x"0a000000", +2440 => x"5074725f", +2441 => x"476c6f62", +2442 => x"2d3e0a00", +2443 => x"20205074", +2444 => x"725f436f", +2445 => x"6d703a20", +2446 => x"20202020", +2447 => x"20202020", +2448 => x"2025640a", +2449 => x"00000000", +2450 => x"20202020", +2451 => x"20202020", +2452 => x"73686f75", +2453 => x"6c642062", +2454 => x"653a2020", +2455 => x"2028696d", +2456 => x"706c656d", +2457 => x"656e7461", +2458 => x"74696f6e", +2459 => x"2d646570", +2460 => x"656e6465", +2461 => x"6e74290a", +2462 => x"00000000", +2463 => x"20204469", +2464 => x"7363723a", +2465 => x"20202020", +2466 => x"20202020", +2467 => x"20202020", +2468 => x"2025640a", +2469 => x"00000000", +2470 => x"2020456e", +2471 => x"756d5f43", +2472 => x"6f6d703a", +2473 => x"20202020", +2474 => x"20202020", +2475 => x"2025640a", +2476 => x"00000000", +2477 => x"2020496e", +2478 => x"745f436f", +2479 => x"6d703a20", +2480 => x"20202020", +2481 => x"20202020", +2482 => x"2025640a", +2483 => x"00000000", +2484 => x"20205374", +2485 => x"725f436f", +2486 => x"6d703a20", +2487 => x"20202020", +2488 => x"20202020", +2489 => x"2025730a", +2490 => x"00000000", +2491 => x"20202020", +2492 => x"20202020", +2493 => x"73686f75", +2494 => x"6c642062", +2495 => x"653a2020", +2496 => x"20444852", +2497 => x"5953544f", +2498 => x"4e452050", +2499 => x"524f4752", +2500 => x"414d2c20", +2501 => x"534f4d45", +2502 => x"20535452", +2503 => x"494e470a", +2504 => x"00000000", +2505 => x"4e657874", +2506 => x"5f507472", +2507 => x"5f476c6f", +2508 => x"622d3e0a", +2509 => x"00000000", +2510 => x"20202020", +2511 => x"20202020", +2512 => x"73686f75", +2513 => x"6c642062", +2514 => x"653a2020", +2515 => x"2028696d", +2516 => x"706c656d", +2517 => x"656e7461", +2518 => x"74696f6e", +2519 => x"2d646570", +2520 => x"656e6465", +2521 => x"6e74292c", +2522 => x"2073616d", +2523 => x"65206173", +2524 => x"2061626f", +2525 => x"76650a00", +2526 => x"496e745f", +2527 => x"315f4c6f", +2528 => x"633a2020", +2529 => x"20202020", +2530 => x"20202020", +2531 => x"2025640a", +2532 => x"00000000", +2533 => x"496e745f", +2534 => x"325f4c6f", +2535 => x"633a2020", +2536 => x"20202020", +2537 => x"20202020", +2538 => x"2025640a", +2539 => x"00000000", +2540 => x"496e745f", +2541 => x"335f4c6f", +2542 => x"633a2020", +2543 => x"20202020", +2544 => x"20202020", +2545 => x"2025640a", +2546 => x"00000000", +2547 => x"456e756d", +2548 => x"5f4c6f63", +2549 => x"3a202020", +2550 => x"20202020", +2551 => x"20202020", +2552 => x"2025640a", +2553 => x"00000000", +2554 => x"5374725f", +2555 => x"315f4c6f", +2556 => x"633a2020", +2557 => x"20202020", +2558 => x"20202020", +2559 => x"2025730a", +2560 => x"00000000", +2561 => x"20202020", +2562 => x"20202020", +2563 => x"73686f75", +2564 => x"6c642062", +2565 => x"653a2020", +2566 => x"20444852", +2567 => x"5953544f", +2568 => x"4e452050", +2569 => x"524f4752", +2570 => x"414d2c20", +2571 => x"31275354", +2572 => x"20535452", +2573 => x"494e470a", +2574 => x"00000000", +2575 => x"5374725f", +2576 => x"325f4c6f", +2577 => x"633a2020", +2578 => x"20202020", +2579 => x"20202020", +2580 => x"2025730a", +2581 => x"00000000", +2582 => x"20202020", +2583 => x"20202020", +2584 => x"73686f75", +2585 => x"6c642062", +2586 => x"653a2020", +2587 => x"20444852", +2588 => x"5953544f", +2589 => x"4e452050", +2590 => x"524f4752", +2591 => x"414d2c20", +2592 => x"32274e44", +2593 => x"20535452", +2594 => x"494e470a", +2595 => x"00000000", +2596 => x"55736572", +2597 => x"2074696d", +2598 => x"653a2025", +2599 => x"640a0000", +2600 => x"4d696372", +2601 => x"6f736563", +2602 => x"6f6e6473", +2603 => x"20666f72", +2604 => x"206f6e65", +2605 => x"2072756e", +2606 => x"20746872", +2607 => x"6f756768", +2608 => x"20446872", +2609 => x"7973746f", +2610 => x"6e653a20", +2611 => x"00000000", +2612 => x"2564200a", +2613 => x"00000000", +2614 => x"44687279", +2615 => x"73746f6e", +2616 => x"65732070", +2617 => x"65722053", +2618 => x"65636f6e", +2619 => x"643a2020", +2620 => x"20202020", +2621 => x"20202020", +2622 => x"20202020", +2623 => x"20202020", +2624 => x"20202020", +2625 => x"00000000", +2626 => x"56415820", +2627 => x"4d495053", +2628 => x"20726174", +2629 => x"696e6720", +2630 => x"2a203130", +2631 => x"3030203d", +2632 => x"20256420", +2633 => x"0a000000", +2634 => x"50726f67", +2635 => x"72616d20", +2636 => x"636f6d70", +2637 => x"696c6564", +2638 => x"20776974", +2639 => x"686f7574", +2640 => x"20277265", +2641 => x"67697374", +2642 => x"65722720", +2643 => x"61747472", +2644 => x"69627574", +2645 => x"650a0000", +2646 => x"4d656173", +2647 => x"75726564", +2648 => x"2074696d", +2649 => x"6520746f", +2650 => x"6f20736d", +2651 => x"616c6c20", +2652 => x"746f206f", +2653 => x"62746169", +2654 => x"6e206d65", +2655 => x"616e696e", +2656 => x"6766756c", +2657 => x"20726573", +2658 => x"756c7473", +2659 => x"0a000000", +2660 => x"506c6561", +2661 => x"73652069", +2662 => x"6e637265", +2663 => x"61736520", +2664 => x"6e756d62", +2665 => x"6572206f", +2666 => x"66207275", +2667 => x"6e730a00", +2668 => x"44485259", +2669 => x"53544f4e", +2670 => x"45205052", +2671 => x"4f475241", +2672 => x"4d2c2033", +2673 => x"27524420", +2674 => x"53545249", +2675 => x"4e470000", +2676 => x"00010202", +2677 => x"03030303", +2678 => x"04040404", +2679 => x"04040404", +2680 => x"05050505", +2681 => x"05050505", +2682 => x"05050505", +2683 => x"05050505", +2684 => x"06060606", +2685 => x"06060606", +2686 => x"06060606", +2687 => x"06060606", +2688 => x"06060606", +2689 => x"06060606", +2690 => x"06060606", +2691 => x"06060606", +2692 => x"07070707", +2693 => x"07070707", +2694 => x"07070707", +2695 => x"07070707", +2696 => x"07070707", +2697 => x"07070707", +2698 => x"07070707", +2699 => x"07070707", +2700 => x"07070707", +2701 => x"07070707", +2702 => x"07070707", +2703 => x"07070707", +2704 => x"07070707", +2705 => x"07070707", +2706 => x"07070707", +2707 => x"07070707", +2708 => x"08080808", +2709 => x"08080808", +2710 => x"08080808", +2711 => x"08080808", +2712 => x"08080808", +2713 => x"08080808", +2714 => x"08080808", +2715 => x"08080808", +2716 => x"08080808", +2717 => x"08080808", +2718 => x"08080808", +2719 => x"08080808", +2720 => x"08080808", +2721 => x"08080808", +2722 => x"08080808", +2723 => x"08080808", +2724 => x"08080808", +2725 => x"08080808", +2726 => x"08080808", +2727 => x"08080808", +2728 => x"08080808", +2729 => x"08080808", +2730 => x"08080808", +2731 => x"08080808", +2732 => x"08080808", +2733 => x"08080808", +2734 => x"08080808", +2735 => x"08080808", +2736 => x"08080808", +2737 => x"08080808", +2738 => x"08080808", +2739 => x"08080808", +2740 => x"43000000", +2741 => x"64756d6d", +2742 => x"792e6578", +2743 => x"65000000", +2744 => x"00ffffff", +2745 => x"ff00ffff", +2746 => x"ffff00ff", +2747 => x"ffffff00", +2748 => x"00000000", +2749 => x"00000000", +2750 => x"00000000", +2751 => x"000032dc", +2752 => x"0000c350", +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"ffffffff", +2767 => x"00000000", +2768 => x"00020000", +2769 => x"00000000", +2770 => x"00000000", +2771 => x"00002b44", +2772 => x"00002b44", +2773 => x"00002b4c", +2774 => x"00002b4c", +2775 => x"00002b54", +2776 => x"00002b54", +2777 => x"00002b5c", +2778 => x"00002b5c", +2779 => x"00002b64", +2780 => x"00002b64", +2781 => x"00002b6c", +2782 => x"00002b6c", +2783 => x"00002b74", +2784 => x"00002b74", +2785 => x"00002b7c", +2786 => x"00002b7c", +2787 => x"00002b84", +2788 => x"00002b84", +2789 => x"00002b8c", +2790 => x"00002b8c", +2791 => x"00002b94", +2792 => x"00002b94", +2793 => x"00002b9c", +2794 => x"00002b9c", +2795 => x"00002ba4", +2796 => x"00002ba4", +2797 => x"00002bac", +2798 => x"00002bac", +2799 => x"00002bb4", +2800 => x"00002bb4", +2801 => x"00002bbc", +2802 => x"00002bbc", +2803 => x"00002bc4", +2804 => x"00002bc4", +2805 => x"00002bcc", +2806 => x"00002bcc", +2807 => x"00002bd4", +2808 => x"00002bd4", +2809 => x"00002bdc", +2810 => x"00002bdc", +2811 => x"00002be4", +2812 => x"00002be4", +2813 => x"00002bec", +2814 => x"00002bec", +2815 => x"00002bf4", +2816 => x"00002bf4", +2817 => x"00002bfc", +2818 => x"00002bfc", +2819 => x"00002c04", +2820 => x"00002c04", +2821 => x"00002c0c", +2822 => x"00002c0c", +2823 => x"00002c14", +2824 => x"00002c14", +2825 => x"00002c1c", +2826 => x"00002c1c", +2827 => x"00002c24", +2828 => x"00002c24", +2829 => x"00002c2c", +2830 => x"00002c2c", +2831 => x"00002c34", +2832 => x"00002c34", +2833 => x"00002c3c", +2834 => x"00002c3c", +2835 => x"00002c44", +2836 => x"00002c44", +2837 => x"00002c4c", +2838 => x"00002c4c", +2839 => x"00002c54", +2840 => x"00002c54", +2841 => x"00002c5c", +2842 => x"00002c5c", +2843 => x"00002c64", +2844 => x"00002c64", +2845 => x"00002c6c", +2846 => x"00002c6c", +2847 => x"00002c74", +2848 => x"00002c74", +2849 => x"00002c7c", +2850 => x"00002c7c", +2851 => x"00002c84", +2852 => x"00002c84", +2853 => x"00002c8c", +2854 => x"00002c8c", +2855 => x"00002c94", +2856 => x"00002c94", +2857 => x"00002c9c", +2858 => x"00002c9c", +2859 => x"00002ca4", +2860 => x"00002ca4", +2861 => x"00002cac", +2862 => x"00002cac", +2863 => x"00002cb4", +2864 => x"00002cb4", +2865 => x"00002cbc", +2866 => x"00002cbc", +2867 => x"00002cc4", +2868 => x"00002cc4", +2869 => x"00002ccc", +2870 => x"00002ccc", +2871 => x"00002cd4", +2872 => x"00002cd4", +2873 => x"00002cdc", +2874 => x"00002cdc", +2875 => x"00002ce4", +2876 => x"00002ce4", +2877 => x"00002cec", +2878 => x"00002cec", +2879 => x"00002cf4", +2880 => x"00002cf4", +2881 => x"00002cfc", +2882 => x"00002cfc", +2883 => x"00002d04", +2884 => x"00002d04", +2885 => x"00002d0c", +2886 => x"00002d0c", +2887 => x"00002d14", +2888 => x"00002d14", +2889 => x"00002d1c", +2890 => x"00002d1c", +2891 => x"00002d24", +2892 => x"00002d24", +2893 => x"00002d2c", +2894 => x"00002d2c", +2895 => x"00002d34", +2896 => x"00002d34", +2897 => x"00002d3c", +2898 => x"00002d3c", +2899 => x"00002d44", +2900 => x"00002d44", +2901 => x"00002d4c", +2902 => x"00002d4c", +2903 => x"00002d54", +2904 => x"00002d54", +2905 => x"00002d5c", +2906 => x"00002d5c", +2907 => x"00002d64", +2908 => x"00002d64", +2909 => x"00002d6c", +2910 => x"00002d6c", +2911 => x"00002d74", +2912 => x"00002d74", +2913 => x"00002d7c", +2914 => x"00002d7c", +2915 => x"00002d84", +2916 => x"00002d84", +2917 => x"00002d8c", +2918 => x"00002d8c", +2919 => x"00002d94", +2920 => x"00002d94", +2921 => x"00002d9c", +2922 => x"00002d9c", +2923 => x"00002da4", +2924 => x"00002da4", +2925 => x"00002dac", +2926 => x"00002dac", +2927 => x"00002db4", +2928 => x"00002db4", +2929 => x"00002dbc", +2930 => x"00002dbc", +2931 => x"00002dc4", +2932 => x"00002dc4", +2933 => x"00002dcc", +2934 => x"00002dcc", +2935 => x"00002dd4", +2936 => x"00002dd4", +2937 => x"00002ddc", +2938 => x"00002ddc", +2939 => x"00002de4", +2940 => x"00002de4", +2941 => x"00002dec", +2942 => x"00002dec", +2943 => x"00002df4", +2944 => x"00002df4", +2945 => x"00002dfc", +2946 => x"00002dfc", +2947 => x"00002e04", +2948 => x"00002e04", +2949 => x"00002e0c", +2950 => x"00002e0c", +2951 => x"00002e14", +2952 => x"00002e14", +2953 => x"00002e1c", +2954 => x"00002e1c", +2955 => x"00002e24", +2956 => x"00002e24", +2957 => x"00002e2c", +2958 => x"00002e2c", +2959 => x"00002e34", +2960 => x"00002e34", +2961 => x"00002e3c", +2962 => x"00002e3c", +2963 => x"00002e44", +2964 => x"00002e44", +2965 => x"00002e4c", +2966 => x"00002e4c", +2967 => x"00002e54", +2968 => x"00002e54", +2969 => x"00002e5c", +2970 => x"00002e5c", +2971 => x"00002e64", +2972 => x"00002e64", +2973 => x"00002e6c", +2974 => x"00002e6c", +2975 => x"00002e74", +2976 => x"00002e74", +2977 => x"00002e7c", +2978 => x"00002e7c", +2979 => x"00002e84", +2980 => x"00002e84", +2981 => x"00002e8c", +2982 => x"00002e8c", +2983 => x"00002e94", +2984 => x"00002e94", +2985 => x"00002e9c", +2986 => x"00002e9c", +2987 => x"00002ea4", +2988 => x"00002ea4", +2989 => x"00002eac", +2990 => x"00002eac", +2991 => x"00002eb4", +2992 => x"00002eb4", +2993 => x"00002ebc", +2994 => x"00002ebc", +2995 => x"00002ec4", +2996 => x"00002ec4", +2997 => x"00002ecc", +2998 => x"00002ecc", +2999 => x"00002ed4", +3000 => x"00002ed4", +3001 => x"00002edc", +3002 => x"00002edc", +3003 => x"00002ee4", +3004 => x"00002ee4", +3005 => x"00002eec", +3006 => x"00002eec", +3007 => x"00002ef4", +3008 => x"00002ef4", +3009 => x"00002efc", +3010 => x"00002efc", +3011 => x"00002f04", +3012 => x"00002f04", +3013 => x"00002f0c", +3014 => x"00002f0c", +3015 => x"00002f14", +3016 => x"00002f14", +3017 => x"00002f1c", +3018 => x"00002f1c", +3019 => x"00002f24", +3020 => x"00002f24", +3021 => x"00002f2c", +3022 => x"00002f2c", +3023 => x"00002f34", +3024 => x"00002f34", +3025 => x"00002f3c", +3026 => x"00002f3c", +3027 => x"00002f50", +3028 => x"00000000", +3029 => x"000031b8", +3030 => x"00003214", +3031 => x"00003270", +3032 => x"00000000", +3033 => x"00000000", +3034 => x"00000000", +3035 => x"00000000", +3036 => x"00000000", +3037 => x"00000000", +3038 => x"00000000", +3039 => x"00000000", +3040 => x"00000000", +3041 => x"00002ad0", +3042 => x"00000000", +3043 => x"00000000", +3044 => x"00000000", +3045 => x"00000000", +3046 => x"00000000", +3047 => x"00000000", +3048 => x"00000000", +3049 => x"00000000", +3050 => x"00000000", +3051 => x"00000000", +3052 => x"00000000", +3053 => x"00000000", +3054 => x"00000000", +3055 => x"00000000", +3056 => x"00000000", +3057 => x"00000000", +3058 => x"00000000", +3059 => x"00000000", +3060 => x"00000000", +3061 => x"00000000", +3062 => x"00000000", +3063 => x"00000000", +3064 => x"00000000", +3065 => x"00000000", +3066 => x"00000000", +3067 => x"00000000", +3068 => x"00000000", +3069 => x"00000000", +3070 => x"00000001", +3071 => x"330eabcd", +3072 => x"1234e66d", +3073 => x"deec0005", +3074 => x"000b0000", +3075 => x"00000000", +3076 => x"00000000", +3077 => x"00000000", +3078 => x"00000000", +3079 => x"00000000", +3080 => x"00000000", +3081 => x"00000000", +3082 => x"00000000", +3083 => x"00000000", +3084 => x"00000000", +3085 => x"00000000", +3086 => x"00000000", +3087 => x"00000000", +3088 => x"00000000", +3089 => x"00000000", +3090 => x"00000000", +3091 => x"00000000", +3092 => x"00000000", +3093 => x"00000000", +3094 => x"00000000", +3095 => x"00000000", +3096 => x"00000000", +3097 => x"00000000", +3098 => x"00000000", +3099 => x"00000000", +3100 => x"00000000", +3101 => x"00000000", +3102 => x"00000000", +3103 => x"00000000", +3104 => x"00000000", +3105 => x"00000000", +3106 => x"00000000", +3107 => x"00000000", +3108 => x"00000000", +3109 => x"00000000", +3110 => x"00000000", +3111 => x"00000000", +3112 => x"00000000", +3113 => x"00000000", +3114 => x"00000000", +3115 => x"00000000", +3116 => x"00000000", +3117 => x"00000000", +3118 => x"00000000", +3119 => x"00000000", +3120 => x"00000000", +3121 => x"00000000", +3122 => x"00000000", +3123 => x"00000000", +3124 => x"00000000", +3125 => x"00000000", +3126 => x"00000000", +3127 => x"00000000", +3128 => x"00000000", +3129 => x"00000000", +3130 => x"00000000", +3131 => x"00000000", +3132 => x"00000000", +3133 => x"00000000", +3134 => x"00000000", +3135 => x"00000000", +3136 => x"00000000", +3137 => x"00000000", +3138 => x"00000000", +3139 => x"00000000", +3140 => x"00000000", +3141 => x"00000000", +3142 => x"00000000", +3143 => x"00000000", 3144 => x"00000000", 3145 => x"00000000", 3146 => x"00000000", -3147 => x"0000390c", -3148 => x"000004d2", -- iterations 0x4d2=1234 +3147 => x"00000000", +3148 => x"00000000", 3149 => x"00000000", 3150 => x"00000000", 3151 => x"00000000", @@ -3188,496 +3188,100 @@ shared variable ram : ram_type := 3159 => x"00000000", 3160 => x"00000000", 3161 => x"00000000", -3162 => x"ffffffff", +3162 => x"00000000", 3163 => x"00000000", -3164 => x"00020000", +3164 => x"00000000", 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", +3167 => x"00000000", +3168 => x"00000000", +3169 => x"00000000", +3170 => x"00000000", +3171 => x"00000000", +3172 => x"00000000", +3173 => x"00000000", +3174 => x"00000000", +3175 => x"00000000", +3176 => x"00000000", +3177 => x"00000000", +3178 => x"00000000", +3179 => x"00000000", +3180 => x"00000000", +3181 => x"00000000", +3182 => x"00000000", +3183 => x"00000000", +3184 => x"00000000", +3185 => x"00000000", +3186 => x"00000000", +3187 => x"00000000", +3188 => x"00000000", +3189 => x"00000000", +3190 => x"00000000", +3191 => x"00000000", +3192 => x"00000000", +3193 => x"00000000", +3194 => x"00000000", +3195 => x"00000000", +3196 => x"00000000", +3197 => x"00000000", +3198 => x"00000000", +3199 => x"00000000", +3200 => x"00000000", +3201 => x"00000000", +3202 => x"00000000", +3203 => x"00000000", +3204 => x"00000000", +3205 => x"00000000", +3206 => x"00000000", +3207 => x"00000000", +3208 => x"00000000", +3209 => x"00000000", +3210 => x"00000000", +3211 => x"00000000", +3212 => x"00000000", +3213 => x"00000000", +3214 => x"00000000", +3215 => x"00000000", +3216 => x"00000000", +3217 => x"00000000", +3218 => x"00000000", +3219 => x"00000000", +3220 => x"00000000", +3221 => x"00000000", +3222 => x"00000000", +3223 => x"00000000", +3224 => x"00000000", +3225 => x"00000000", +3226 => x"00000000", +3227 => x"00000000", +3228 => x"00000000", +3229 => x"00000000", +3230 => x"00000000", +3231 => x"00000000", +3232 => x"00000000", +3233 => x"00000000", +3234 => x"00000000", +3235 => x"00000000", +3236 => x"00000000", +3237 => x"00000000", +3238 => x"00000000", +3239 => x"00000000", +3240 => x"00000000", +3241 => x"00000000", +3242 => x"00000000", +3243 => x"00000000", +3244 => x"00000000", +3245 => x"00000000", +3246 => x"00000000", +3247 => x"00000000", +3248 => x"00000000", +3249 => x"00000000", +3250 => x"00000000", +3251 => x"00002ad4", +3252 => x"ffffffff", +3253 => x"00000000", +3254 => x"ffffffff", +3255 => x"00000000", others => x"00000000" ); @@ -3692,7 +3296,9 @@ begin 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; diff --git a/zpu/hdl/zpu4/src/fastdmips.do b/zpu/hdl/zpu4/src/fastdmips.do deleted file mode 100644 index 504bf60..0000000 --- a/zpu/hdl/zpu4/src/fastdmips.do +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index ee9571e..0000000 --- a/zpu/hdl/zpu4/src/fastdmipsintstack.do +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 3eaa083..0000000 --- a/zpu/hdl/zpu4/src/fastdmipssmall.do +++ /dev/null @@ -1,21 +0,0 @@ -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/fasthello.do b/zpu/hdl/zpu4/src/fasthello.do deleted file mode 100644 index d49aeab..0000000 --- a/zpu/hdl/zpu4/src/fasthello.do +++ /dev/null @@ -1,19 +0,0 @@ -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_hello.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 deleted file mode 100644 index 504bf60..0000000 --- a/zpu/hdl/zpu4/src/fastsimzpu.do +++ /dev/null @@ -1,19 +0,0 @@ -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/log.txt b/zpu/hdl/zpu4/src/log.txt index 10f0eaa..47b8a65 100644 --- a/zpu/hdl/zpu4/src/log.txt +++ b/zpu/hdl/zpu4/src/log.txt @@ -1,305 +1,156 @@ -H -e -l -l -o - -w -o -r -l -d - -1 - - - -H -e -l -l -o - -w -o +D +h r -l -d - -2 - - - - - - -H -e -l -l +y +s +t o - -w -o -r -l -d - -1 - - - - - - -H +n e -l -l -o -w -o -r -l -d - -2 - - - - - - -H +B e -l -l -o - -w -o +n +c +h +m +a r -l -d +k +, -1 - - - - - - -H +V e -l -l -o - -w -o r -l -d - -2 - - - - - - -H -e -l -l +s +i o +n -w -o -r -l -d - +2 +. 1 - - - - - - -H -e -l -l -o -w -o -r -l -d - -2 - - - - - - -H +( +L +a +n +g +u +a +g e -l -l -o - -w -o -r -l -d +: -1 +C +) -H -e -l -l -o - -w -o +P r -l -d - -2 - - - - - - -H -e -l -l o +g +r +a +m -w +c o -r +m +p +i l -d - -1 - - - - - - -H e -l -l -o +d w +i +t +h o -r -l -d +u +t -2 - - - - - - -H +' +r +e +g +i +s +t e -l -l -o - -w -o r -l -d +' -1 +a +t +t +r +i +b +u +t +e -H +E +x e -l -l +c +u +t +i o +n -w -o +s +t +a r -l -d +t +s +, -2 - - - - - - -H -e -l -l -o +5 +0 +0 +0 +0 -w -o r -l -d +u +n +s -1 - - - - - - -H -e -l -l +t +h +r o +u +g +h -w -o +D +h r -l -d - -2 - - - +y +s +t +o +n +e -H + diff --git a/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd b/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd deleted file mode 100644 index d39c9e9..0000000 --- a/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd +++ /dev/null @@ -1,15 +0,0 @@ -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/test/dmips/build.sh b/zpu/hdl/zpu4/test/dmips/build.sh index 161c748..44ead41 100644 --- a/zpu/hdl/zpu4/test/dmips/build.sh +++ b/zpu/hdl/zpu4/test/dmips/build.sh @@ -1,4 +1,4 @@ -zpu-elf-gcc -DTIME $ZPUDIR/dhrystone/dhry_*.c -O3 -Wl,--gc-sections -Wl,--relax -abel -o dmips.elf +zpu-elf-gcc -DTIME ../../../../../../roadshow/dhrystone/dhry_*.c -O3 -Wl,--gc-sections -Wl,--relax -phi -o dmips.elf zpu-elf-objdump --disassemble-all >dmips.dis dmips.elf zpu-elf-objcopy -O binary dmips.elf dmips.bin java -classpath ../../../../sw/simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam dmips.bin >dmips.ram diff --git a/zpu/hdl/zpu4/test/dmips/dmips.bin b/zpu/hdl/zpu4/test/dmips/dmips.bin index 1330fe3..ee1a6fe 100644 Binary files a/zpu/hdl/zpu4/test/dmips/dmips.bin and b/zpu/hdl/zpu4/test/dmips/dmips.bin differ diff --git a/zpu/hdl/zpu4/test/dmips/dmips.elf b/zpu/hdl/zpu4/test/dmips/dmips.elf index 7254a5d..3a04a5b 100644 Binary files a/zpu/hdl/zpu4/test/dmips/dmips.elf and b/zpu/hdl/zpu4/test/dmips/dmips.elf differ diff --git a/zpu/hdl/zpu4/test/dmips/dmips.ram b/zpu/hdl/zpu4/test/dmips/dmips.ram index 89047d5..0919ce1 100644 --- a/zpu/hdl/zpu4/test/dmips/dmips.ram +++ b/zpu/hdl/zpu4/test/dmips/dmips.ram @@ -1,14 +1,14 @@ 0 => x"0b0b0b0b", -1 => x"80700b0b", -2 => x"80e2a40c", +1 => x"82700b0b", +2 => x"80d5f40c", 3 => x"3a0b0b80", -4 => x"c6fc0400", +4 => x"c4fb0400", 5 => x"00000000", 6 => x"00000000", 7 => x"00000000", 8 => x"80088408", 9 => x"88080b0b", -10 => x"80c7c32d", +10 => x"80c5c22d", 11 => x"880c840c", 12 => x"800c0400", 13 => x"00000000", @@ -71,7 +71,7 @@ 70 => x"00000000", 71 => x"00000000", 72 => x"0b0b0b88", -73 => x"c4040000", +73 => x"c3040000", 74 => x"00000000", 75 => x"00000000", 76 => x"00000000", @@ -88,7 +88,7 @@ 87 => x"00000000", 88 => x"72729f06", 89 => x"0981050b", -90 => x"0b0b88a7", +90 => x"0b0b88a6", 91 => x"05040000", 92 => x"00000000", 93 => x"00000000", @@ -159,25 +159,25 @@ 158 => x"00000000", 159 => x"00000000", 160 => x"71fc0608", -161 => x"0b0b80e2", -162 => x"90738306", +161 => x"0b0b80d5", +162 => x"e0738306", 163 => x"10100508", 164 => x"060b0b0b", -165 => x"88aa0400", +165 => x"88a90400", 166 => x"00000000", 167 => x"00000000", 168 => x"80088408", 169 => x"88087575", -170 => x"0b0b0baf", -171 => x"ac2d5050", +170 => x"0b0b0bad", +171 => x"aa2d5050", 172 => x"80085688", 173 => x"0c840c80", 174 => x"0c510400", 175 => x"00000000", 176 => x"80088408", 177 => x"88087575", -178 => x"0b0b0baf", -179 => x"f02d5050", +178 => x"0b0b0bad", +179 => x"ee2d5050", 180 => x"80085688", 181 => x"0c840c80", 182 => x"0c510400", @@ -207,7 +207,7 @@ 206 => x"00000000", 207 => x"00000000", 208 => x"810b0b0b", -209 => x"80e2a00c", +209 => x"80d5f00c", 210 => x"51040000", 211 => x"00000000", 212 => x"00000000", @@ -254,8 +254,8 @@ 253 => x"00000000", 254 => x"00000000", 255 => x"00000000", -256 => x"83d93f80", -257 => x"cbcf3f04", +256 => x"82fd3fbf", +257 => x"a03f0410", 258 => x"10101010", 259 => x"10101010", 260 => x"10101010", @@ -263,2890 +263,2890 @@ 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", +265 => x"10105351", +266 => x"047381ff", +267 => x"06738306", +268 => x"09810583", +269 => x"05101010", +270 => x"2b0772fc", +271 => x"060c5151", +272 => x"043c0472", +273 => x"72807281", +274 => x"06ff0509", +275 => x"72060571", +276 => x"1052720a", +277 => x"100a5372", +278 => x"ed385151", +279 => x"535104ff", +280 => x"3d0d0b0b", +281 => x"80e5e408", +282 => x"52710870", +283 => x"882a8132", +284 => x"70810651", +285 => x"515170f1", +286 => x"3873720c", 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", +288 => x"80d5f008", +289 => x"802ea438", +290 => x"80d5f408", +291 => x"822ebd38", +292 => x"8380800b", +293 => x"0b0b80e5", +294 => x"e40c82a0", +295 => x"800b80e5", +296 => x"e80c8290", +297 => x"800b80e5", +298 => x"ec0c04f8", +299 => x"808080a4", +300 => x"0b0b0b80", +301 => x"e5e40cf8", +302 => x"80808280", +303 => x"0b80e5e8", +304 => x"0cf88080", +305 => x"84800b80", +306 => x"e5ec0c04", +307 => x"80c0a880", +308 => x"8c0b0b0b", +309 => x"80e5e40c", +310 => x"80c0a880", +311 => x"940b80e5", +312 => x"e80c0b0b", +313 => x"80c7d00b", +314 => x"80e5ec0c", +315 => x"04f23d0d", +316 => x"6080e5e8", +317 => x"08565d82", +318 => x"750c8059", +319 => x"805a800b", +320 => x"8f3d5d5b", +321 => x"7a101015", +322 => x"70087108", +323 => x"719f2c7e", +324 => x"852b5855", +325 => x"557d5359", +326 => x"5799993f", +327 => x"7d7f7a72", +328 => x"077c7207", +329 => x"71716081", +330 => x"05415f5d", +331 => x"5b595755", +332 => x"817b278f", +333 => x"38767d0c", +334 => x"77841e0c", +335 => x"7c800c90", +336 => x"3d0d0480", +337 => x"e5e80855", +338 => x"ffba3970", +339 => x"7080e5f0", +340 => x"335170a7", +341 => x"3880d5fc", +342 => x"08700852", +343 => x"5270802e", +344 => x"94388412", +345 => x"80d5fc0c", +346 => x"702d80d5", +347 => x"fc087008", +348 => x"525270ee", +349 => x"38810b80", +350 => x"e5f03450", +351 => x"50040470", +352 => x"0b0b80e5", +353 => x"e008802e", +354 => x"8e380b0b", +355 => x"0b0b800b", +356 => x"802e0981", +357 => x"06833850", +358 => x"040b0b80", +359 => x"e5e0510b", +360 => x"0b0bf4dc", +361 => x"3f500404", +362 => x"ff3d0d02", +363 => x"8f053352", +364 => x"718a2e8a", +365 => x"387151fd", +366 => x"a63f833d", +367 => x"0d048d51", +368 => x"fd9d3f71", +369 => x"51fd983f", +370 => x"833d0d04", +371 => x"ce3d0db5", +372 => x"3d707084", +373 => x"0552088b", +374 => x"a85c56a5", +375 => x"3d5e5c80", +376 => x"75708105", +377 => x"5733765b", +378 => x"55587378", +379 => x"2e80c138", +380 => x"8e3d5b73", +381 => x"a52e0981", +382 => x"0680c538", +383 => x"78708105", +384 => x"5a335473", +385 => x"80e42e81", +386 => x"b6387380", +387 => x"e42480c6", +388 => x"387380e3", +389 => x"2ea13880", +390 => x"52a55179", +391 => x"2d805273", +392 => x"51792d82", +393 => x"18587870", +394 => x"81055a33", +395 => x"5473c438", +396 => x"77800cb4", +397 => x"3d0d047b", +398 => x"841d8312", +399 => x"33565d57", +400 => x"80527351", +401 => x"792d8118", +402 => x"79708105", +403 => x"5b335558", +404 => x"73ffa038", +405 => x"db397380", +406 => x"f32e0981", +407 => x"06ffb838", +408 => x"7b841d71", +409 => x"08595d56", +410 => x"80773355", +411 => x"5673762e", +412 => x"8d388116", +413 => x"70187033", +414 => x"57555674", +415 => x"f538ff16", +416 => x"55807625", +417 => x"ffa03876", +418 => x"70810558", +419 => x"33548052", +420 => x"7351792d", +421 => x"811875ff", +422 => x"17575758", +423 => x"807625ff", +424 => x"85387670", +425 => x"81055833", +426 => x"54805273", +427 => x"51792d81", +428 => x"1875ff17", +429 => x"57575875", +430 => x"8024cc38", +431 => x"fee8397b", +432 => x"841d7108", +433 => x"70719f2c", +434 => x"5953595d", +435 => x"56807524", +436 => x"81913875", +437 => x"7d7c5856", +438 => x"54805773", +439 => x"772e0981", +440 => x"06b638b0", +441 => x"7b3402b5", +442 => x"05567a76", +443 => x"2e9738ff", +444 => x"16567533", +445 => x"75708105", +446 => x"57348117", +447 => x"577a762e", +448 => x"098106eb", +449 => x"38807534", +450 => x"767dff12", +451 => x"57585675", +452 => x"8024fef3", +453 => x"38fe8f39", +454 => x"8a527351", +455 => x"9fd03f80", +456 => x"0880c7d4", +457 => x"05337670", +458 => x"81055834", +459 => x"8a527351", +460 => x"9ef83f80", +461 => x"08548008", +462 => x"802effae", +463 => x"388a5273", +464 => x"519fab3f", +465 => x"800880c7", +466 => x"d4053376", +467 => x"70810558", +468 => x"348a5273", +469 => x"519ed33f", +470 => x"80085480", +471 => x"08ffb938", +472 => x"ff883974", +473 => x"527653b4", +474 => x"3dffb805", +475 => x"51949a3f", +476 => x"a33d0856", +477 => x"fedd3980", +478 => x"3d0d80c1", +479 => x"0b81b4bc", +480 => x"34800b81", +481 => x"b6980c70", +482 => x"800c823d", +483 => x"0d04ff3d", +484 => x"0d800b81", +485 => x"b4bc3352", +486 => x"527080c1", +487 => x"2e993871", +488 => x"81b69808", +489 => x"0781b698", +490 => x"0c80c20b", +491 => x"81b4c034", +492 => x"70800c83", +493 => x"3d0d0481", +494 => x"0b81b698", +495 => x"080781b6", +496 => x"980c80c2", +497 => x"0b81b4c0", +498 => x"3470800c", +499 => x"833d0d04", +500 => x"fd3d0d75", +501 => x"70088a05", +502 => x"535381b4", +503 => x"bc335170", +504 => x"80c12e8b", +505 => x"3873f338", +506 => x"70800c85", +507 => x"3d0d04ff", +508 => x"127081b4", +509 => x"b8083174", +510 => x"0c800c85", +511 => x"3d0d04fc", +512 => x"3d0d81b4", +513 => x"c4085574", +514 => x"802e8c38", +515 => x"76750871", +516 => x"0c81b4c4", +517 => x"0856548c", +518 => x"155381b4", +519 => x"b808528a", +520 => x"518fd43f", +521 => x"73800c86", +522 => x"3d0d04fb", +523 => x"3d0d7770", +524 => x"085656b0", +525 => x"5381b4c4", +526 => x"08527451", +527 => x"ab943f85", +528 => x"0b8c170c", +529 => x"850b8c16", +530 => x"0c750875", +531 => x"0c81b4c4", +532 => x"08547380", +533 => x"2e8a3873", +534 => x"08750c81", +535 => x"b4c40854", +536 => x"8c145381", +537 => x"b4b80852", +538 => x"8a518f8b", +539 => x"3f841508", +540 => x"ad38860b", +541 => x"8c160c88", +542 => x"15528816", +543 => x"08518e97", +544 => x"3f81b4c4", +545 => x"08700876", +546 => x"0c548c15", +547 => x"7054548a", +548 => x"52730851", +549 => x"8ee13f73", +550 => x"800c873d", +551 => x"0d047508", +552 => x"54b05373", +553 => x"527551aa", +554 => x"a93f7380", +555 => x"0c873d0d", +556 => x"04d93d0d", +557 => x"b0519dcf", +558 => x"3f800881", +559 => x"b4b40cb0", +560 => x"519dc43f", +561 => x"800881b4", +562 => x"c40c81b4", +563 => x"b4088008", +564 => x"0c800b80", +565 => x"0884050c", +566 => x"820b8008", +567 => x"88050ca8", +568 => x"0b80088c", +569 => x"050c9f53", +570 => x"80c7e052", +571 => x"80089005", +572 => x"51a9df3f", +573 => x"a13d5e9f", +574 => x"5380c880", +575 => x"527d51a9", +576 => x"d13f8a0b", +577 => x"80f2f80c", +578 => x"80d2a451", +579 => x"f9be3f80", +580 => x"c8a051f9", +581 => x"b73f80d2", +582 => x"a451f9b0", +583 => x"3f80d684", +584 => x"08802e89", +585 => x"d33880c8", +586 => x"d051f9a0", +587 => x"3f80d2a4", +588 => x"51f9993f", +589 => x"80d68008", +590 => x"5280c8fc", +591 => x"51f98d3f", +592 => x"80e69451", +593 => x"b2ff3f81", +594 => x"0b9a3d5e", +595 => x"5b800b80", +596 => x"d6800825", +597 => x"82d43890", +598 => x"3d5f80c1", +599 => x"0b81b4bc", +600 => x"34810b81", +601 => x"b6980c80", +602 => x"c20b81b4", +603 => x"c0348240", +604 => x"835a9f53", +605 => x"80c9ac52", +606 => x"7c51a8d6", +607 => x"3f814180", +608 => x"7d537e52", +609 => x"568e943f", +610 => x"8008762e", +611 => x"09810683", +612 => x"38815675", +613 => x"81b6980c", +614 => x"7f705856", +615 => x"758325a2", +616 => x"38751010", +617 => x"16fd0542", +618 => x"a93dffa4", +619 => x"05538352", +620 => x"76518cc3", +621 => x"3f7f8105", +622 => x"70417058", +623 => x"56837624", +624 => x"e0386154", +625 => x"755380e6", +626 => x"9c5281b4", +627 => x"d0518cb7", +628 => x"3f81b4c4", +629 => x"08700858", +630 => x"58b05377", +631 => x"527651a7", +632 => x"f13f850b", +633 => x"8c190c85", +634 => x"0b8c180c", +635 => x"7708770c", +636 => x"81b4c408", +637 => x"5675802e", +638 => x"8a387508", +639 => x"770c81b4", +640 => x"c408568c", +641 => x"165381b4", +642 => x"b808528a", +643 => x"518be83f", +644 => x"84170887", +645 => x"ea38860b", +646 => x"8c180c88", +647 => x"17528818", +648 => x"08518af3", +649 => x"3f81b4c4", +650 => x"08700878", +651 => x"0c568c17", +652 => x"7054598a", +653 => x"52780851", +654 => x"8bbd3f80", +655 => x"c10b81b4", +656 => x"c0335757", +657 => x"767626a2", +658 => x"3880c352", +659 => x"76518ca1", +660 => x"3f800861", +661 => x"2e89e438", +662 => x"81177081", +663 => x"ff0681b4", +664 => x"c0335858", +665 => x"58757727", +666 => x"e0387960", +667 => x"29627054", +668 => x"71535b59", +669 => x"98b43f80", +670 => x"0840787a", +671 => x"31708729", +672 => x"80083180", +673 => x"088a0581", +674 => x"b4bc3381", +675 => x"b4b8085e", +676 => x"5b525a56", +677 => x"7780c12e", +678 => x"89ce387b", +679 => x"f738811b", +680 => x"5b80d680", +681 => x"087b25fd", +682 => x"b13881b4", +683 => x"ac51b095", +684 => x"3f80c9cc", +685 => x"51f6953f", +686 => x"80d2a451", +687 => x"f68e3f80", +688 => x"c9dc51f6", +689 => x"873f80d2", +690 => x"a451f680", +691 => x"3f81b4b8", +692 => x"085280ca", +693 => x"9451f5f4", +694 => x"3f855280", +695 => x"cab051f5", +696 => x"eb3f81b6", +697 => x"98085280", +698 => x"cacc51f5", +699 => x"df3f8152", +700 => x"80cab051", +701 => x"f5d63f81", +702 => x"b4bc3352", +703 => x"80cae851", +704 => x"f5ca3f80", +705 => x"c15280cb", +706 => x"8451f5c0", +707 => x"3f81b4c0", +708 => x"335280cb", +709 => x"a051f5b4", +710 => x"3f80c252", +711 => x"80cb8451", +712 => x"f5aa3f81", +713 => x"b4f00852", +714 => x"80cbbc51", +715 => x"f59e3f87", +716 => x"5280cab0", +717 => x"51f5953f", +718 => x"80f2f808", +719 => x"5280cbd8", +720 => x"51f5893f", +721 => x"80cbf451", +722 => x"f5823f80", +723 => x"cca051f4", +724 => x"fb3f81b4", +725 => x"c4087008", +726 => x"535a80cc", +727 => x"ac51f4ec", +728 => x"3f80ccc8", +729 => x"51f4e53f", +730 => x"81b4c408", +731 => x"84110853", +732 => x"5680ccfc", +733 => x"51f4d53f", +734 => x"805280ca", +735 => x"b051f4cc", +736 => x"3f81b4c4", +737 => x"08881108", +738 => x"535880cd", +739 => x"9851f4bc", +740 => x"3f825280", +741 => x"cab051f4", +742 => x"b33f81b4", +743 => x"c4088c11", +744 => x"08535780", +745 => x"cdb451f4", +746 => x"a33f9152", +747 => x"80cab051", +748 => x"f49a3f81", +749 => x"b4c40890", +750 => x"055280cd", +751 => x"d051f48c", +752 => x"3f80cdec", +753 => x"51f4853f", +754 => x"80cea451", +755 => x"f3fe3f81", +756 => x"b4b40870", +757 => x"08535f80", +758 => x"ccac51f3", +759 => x"ef3f80ce", +760 => x"b851f3e8", +761 => x"3f81b4b4", +762 => x"08841108", +763 => x"535b80cc", +764 => x"fc51f3d8", +765 => x"3f805280", +766 => x"cab051f3", +767 => x"cf3f81b4", +768 => x"b4088811", +769 => x"08535c80", +770 => x"cd9851f3", +771 => x"bf3f8152", +772 => x"80cab051", +773 => x"f3b63f81", +774 => x"b4b4088c", +775 => x"1108535a", +776 => x"80cdb451", +777 => x"f3a63f92", +778 => x"5280cab0", +779 => x"51f39d3f", +780 => x"81b4b408", +781 => x"90055280", +782 => x"cdd051f3", +783 => x"8f3f80cd", +784 => x"ec51f388", +785 => x"3f7f5280", +786 => x"cef851f2", +787 => x"ff3f8552", +788 => x"80cab051", +789 => x"f2f63f78", +790 => x"5280cf94", +791 => x"51f2ed3f", +792 => x"8d5280ca", +793 => x"b051f2e4", +794 => x"3f615280", +795 => x"cfb051f2", +796 => x"db3f8752", +797 => x"80cab051", +798 => x"f2d23f60", +799 => x"5280cfcc", +800 => x"51f2c93f", +801 => x"815280ca", +802 => x"b051f2c0", +803 => x"3f7d5280", +804 => x"cfe851f2", +805 => x"b73f80d0", +806 => x"8451f2b0", +807 => x"3f7c5280", +808 => x"d0bc51f2", +809 => x"a73f80d0", +810 => x"d851f2a0", +811 => x"3f80d2a4", +812 => x"51f2993f", +813 => x"81b4ac08", +814 => x"81b4b008", +815 => x"80e69408", +816 => x"80e69808", +817 => x"72713170", +818 => x"74267574", +819 => x"31707231", +820 => x"80e68c0c", +821 => x"444480e6", +822 => x"900c80e6", +823 => x"90085680", +824 => x"d190555c", +825 => x"595758f1", +826 => x"e33f80e6", +827 => x"8c085680", +828 => x"762582a3", +829 => x"3880d680", +830 => x"0870719f", +831 => x"2c9a3d53", +832 => x"565680e6", +833 => x"8c0880e6", +834 => x"90084153", +835 => x"7f547052", +836 => x"5a89eb3f", +837 => x"66685f80", +838 => x"e5fc0c7d", +839 => x"80e6800c", +840 => x"80d68008", +841 => x"709f2c58", +842 => x"568058bd", +843 => x"84c07855", +844 => x"55765275", +845 => x"53795187", +846 => x"d13f953d", +847 => x"80e68c08", +848 => x"80e69008", +849 => x"41557f56", +850 => x"67694053", +851 => x"7e547052", +852 => x"5c89ab3f", +853 => x"64665e80", +854 => x"e6840c7c", +855 => x"80e6880c", +856 => x"80d68008", +857 => x"709f2c40", +858 => x"58805783", +859 => x"dceb9480", +860 => x"7755557e", +861 => x"5277537b", +862 => x"51878f3f", +863 => x"64665d5b", +864 => x"805e8ddd", +865 => x"7e555580", +866 => x"e68c0880", +867 => x"e6900859", +868 => x"52775379", +869 => x"5186f33f", +870 => x"66684054", +871 => x"7e557a52", +872 => x"7b53a93d", +873 => x"ffa80551", +874 => x"88d43f62", +875 => x"645e81b4", +876 => x"c80c7c81", +877 => x"b4cc0c80", +878 => x"d1a051f0", +879 => x"8f3f80e6", +880 => x"80085280", +881 => x"d1d051f0", +882 => x"833f80d1", +883 => x"d851effc", +884 => x"3f80e688", +885 => x"085280d1", +886 => x"d051eff0", +887 => x"3f81b4cc", +888 => x"085280d2", +889 => x"8851efe4", +890 => x"3f80d2a4", +891 => x"51efdd3f", +892 => x"800b800c", +893 => x"a93d0d04", +894 => x"80d2a851", +895 => x"f6ac3977", +896 => x"0857b053", +897 => x"76527751", +898 => x"9fc83f80", +899 => x"c10b81b4", +900 => x"c0335757", +901 => x"f8ae3975", +902 => x"8a3880e6", +903 => x"90088126", +904 => x"fdd33880", +905 => x"d2d851ef", +906 => x"a33f80d3", +907 => x"9051ef9c", +908 => x"3f80d2a4", +909 => x"51ef953f", +910 => x"80d68008", +911 => x"70719f2c", +912 => x"9a3d5356", +913 => x"5680e68c", +914 => x"0880e690", +915 => x"0841537f", +916 => x"5470525a", +917 => x"87a83f66", +918 => x"685f80e5", +919 => x"fc0c7d80", +920 => x"e6800c80", +921 => x"d6800870", +922 => x"9f2c5856", +923 => x"8058bd84", +924 => x"c0785555", +925 => x"76527553", +926 => x"7951858e", +927 => x"3f953d80", +928 => x"e68c0880", +929 => x"e6900841", +930 => x"557f5667", +931 => x"6940537e", +932 => x"5470525c", +933 => x"86e83f64", +934 => x"665e80e6", +935 => x"840c7c80", +936 => x"e6880c80", +937 => x"d6800870", +938 => x"9f2c4058", +939 => x"805783dc", +940 => x"eb948077", +941 => x"55557e52", +942 => x"77537b51", +943 => x"84cc3f64", +944 => x"665d5b80", +945 => x"5e8ddd7e", +946 => x"555580e6", +947 => x"8c0880e6", +948 => x"90085952", +949 => x"77537951", +950 => x"84b03f66", +951 => x"6840547e", +952 => x"557a527b", +953 => x"53a93dff", +954 => x"a8055186", +955 => x"913f6264", +956 => x"5e81b4c8", +957 => x"0c7c81b4", +958 => x"cc0c80d1", +959 => x"a051edcc", +960 => x"3f80e680", +961 => x"085280d1", +962 => x"d051edc0", +963 => x"3f80d1d8", +964 => x"51edb93f", +965 => x"80e68808", +966 => x"5280d1d0", +967 => x"51edad3f", +968 => x"81b4cc08", +969 => x"5280d288", +970 => x"51eda13f", +971 => x"80d2a451", +972 => x"ed9a3f80", +973 => x"0b800ca9", +974 => x"3d0d04a9", +975 => x"3dffa005", +976 => x"52805180", +977 => x"d23f9f53", +978 => x"80d3b052", +979 => x"7c519d82", +980 => x"3f7a7b81", +981 => x"b4b80c81", +982 => x"187081ff", +983 => x"0681b4c0", +984 => x"33595959", +985 => x"5af5fe39", +986 => x"ff16707b", +987 => x"31600c5c", +988 => x"800b811c", +989 => x"5c5c80d6", +990 => x"80087b25", +991 => x"f3dc38f6", +992 => x"a939ff3d", +993 => x"0d738232", +994 => x"70307072", +995 => x"07802580", +996 => x"0c525283", +997 => x"3d0d04fe", +998 => x"3d0d7476", +999 => x"71535452", +1000 => x"71822e83", +1001 => x"38835171", +1002 => x"812e9a38", +1003 => x"8172269f", +1004 => x"3871822e", +1005 => x"b8387184", +1006 => x"2ea93870", +1007 => x"730c7080", +1008 => x"0c843d0d", +1009 => x"0480e40b", +1010 => x"81b4b808", +1011 => x"258b3880", +1012 => x"730c7080", +1013 => x"0c843d0d", +1014 => x"0483730c", +1015 => x"70800c84", +1016 => x"3d0d0482", +1017 => x"730c7080", +1018 => x"0c843d0d", +1019 => x"0481730c", +1020 => x"70800c84", +1021 => x"3d0d0480", +1022 => x"3d0d7474", +1023 => x"14820571", +1024 => x"0c800c82", +1025 => x"3d0d04f7", +1026 => x"3d0d7b7d", +1027 => x"7f618512", +1028 => x"70822b75", +1029 => x"11707471", +1030 => x"70840553", +1031 => x"0c5a5a5d", +1032 => x"5b760c79", +1033 => x"80f8180c", +1034 => x"79861252", +1035 => x"57585a5a", +1036 => x"76762499", +1037 => x"3876b329", +1038 => x"822b7911", +1039 => x"51537673", +1040 => x"70840555", +1041 => x"0c811454", +1042 => x"757425f2", +1043 => x"387681cc", +1044 => x"2919fc11", +1045 => x"088105fc", +1046 => x"120c7a19", +1047 => x"70089fa0", +1048 => x"130c5856", +1049 => x"850b81b4", +1050 => x"b80c7580", +1051 => x"0c8b3d0d", +1052 => x"04fe3d0d", +1053 => x"02930533", +1054 => x"51800284", +1055 => x"05970533", +1056 => x"54527073", +1057 => x"2e883871", +1058 => x"800c843d", +1059 => x"0d047081", +1060 => x"b4bc3481", +1061 => x"0b800c84", +1062 => x"3d0d04f8", +1063 => x"3d0d7a7c", +1064 => x"5956820b", +1065 => x"83195555", +1066 => x"74167033", +1067 => x"75335b51", +1068 => x"5372792e", +1069 => x"80c63880", +1070 => x"c10b8116", +1071 => x"81165656", +1072 => x"57827525", +1073 => x"e338ffa9", +1074 => x"177081ff", +1075 => x"06555973", +1076 => x"82268338", +1077 => x"87558153", +1078 => x"7680d22e", +1079 => x"98387752", +1080 => x"75519bc3", +1081 => x"3f805372", +1082 => x"80082589", +1083 => x"38871581", +1084 => x"b4b80c81", +1085 => x"5372800c", +1086 => x"8a3d0d04", +1087 => x"7281b4bc", +1088 => x"34827525", +1089 => x"ffa238ff", +1090 => x"bd39ef3d", +1091 => x"0d636567", +1092 => x"5b427943", +1093 => x"67695940", +1094 => x"77415a80", +1095 => x"5d805e61", +1096 => x"7083ffff", +1097 => x"0671902a", +1098 => x"627083ff", +1099 => x"ff067190", +1100 => x"2a747229", +1101 => x"74732975", +1102 => x"73297774", +1103 => x"2973902a", +1104 => x"05721151", +1105 => x"5856535f", +1106 => x"5a575a58", +1107 => x"55587373", +1108 => x"27863884", +1109 => x"80801656", +1110 => x"73902a16", +1111 => x"5b7883ff", +1112 => x"ff067484", +1113 => x"80802905", +1114 => x"5c7a7c5a", +1115 => x"5d785e77", +1116 => x"7f296178", +1117 => x"29057d05", +1118 => x"5d7c7e56", +1119 => x"7a0c7484", +1120 => x"1b0c7980", +1121 => x"0c933d0d", +1122 => x"04f93d0d", +1123 => x"797b7d54", +1124 => x"58725977", +1125 => x"30797030", +1126 => x"7072079f", +1127 => x"2a737131", +1128 => x"5a525977", +1129 => x"7956730c", +1130 => x"53738413", +1131 => x"0c54800c", +1132 => x"893d0d04", +1133 => x"f93d0d79", +1134 => x"7b7d7f56", +1135 => x"54525472", +1136 => x"802ea038", +1137 => x"70577158", +1138 => x"a0733152", +1139 => x"807225a1", +1140 => x"38777074", +1141 => x"2b577073", +1142 => x"2a78752b", +1143 => x"07565174", +1144 => x"76535170", +1145 => x"740c7184", +1146 => x"150c7380", +1147 => x"0c893d0d", +1148 => x"04805677", +1149 => x"72302b55", +1150 => x"74765351", +1151 => x"e639e43d", +1152 => x"0d6ea13d", +1153 => x"08a33d08", +1154 => x"59575f80", +1155 => x"764d774e", +1156 => x"a33d08a5", +1157 => x"3d08574b", +1158 => x"754c5e7d", +1159 => x"6c2486fb", +1160 => x"38806a24", +1161 => x"878f3869", +1162 => x"6b58566b", +1163 => x"6d5d467b", +1164 => x"47754476", +1165 => x"45646468", +1166 => x"685c5c56", +1167 => x"567481e7", +1168 => x"38787627", +1169 => x"82c73875", +1170 => x"81ff2683", +1171 => x"2b5583ff", +1172 => x"ff76278c", +1173 => x"389055fe", +1174 => x"800a7627", +1175 => x"83389855", +1176 => x"75752a80", +1177 => x"d3d00570", +1178 => x"33a07731", +1179 => x"71315755", +1180 => x"5774802e", +1181 => x"95387575", +1182 => x"2ba07631", +1183 => x"7a772b7c", +1184 => x"722a077c", +1185 => x"782b5d5b", +1186 => x"59567590", +1187 => x"2a7683ff", +1188 => x"ff067154", +1189 => x"7a535957", +1190 => x"88803f80", +1191 => x"085b87ea", +1192 => x"3f800880", +1193 => x"0879297c", +1194 => x"902b7c90", +1195 => x"2a075656", +1196 => x"59737527", +1197 => x"94388008", +1198 => x"ff057615", +1199 => x"55597574", +1200 => x"26873874", +1201 => x"742687b9", +1202 => x"38765273", +1203 => x"75315187", +1204 => x"c93f8008", +1205 => x"5587b33f", +1206 => x"80088008", +1207 => x"79297b83", +1208 => x"ffff0677", +1209 => x"902b0756", +1210 => x"59577378", +1211 => x"27963880", +1212 => x"08ff0576", +1213 => x"15555775", +1214 => x"74268938", +1215 => x"77742677", +1216 => x"71315856", +1217 => x"78902b77", +1218 => x"0758805b", +1219 => x"7a407741", +1220 => x"7f615654", +1221 => x"7d80d938", +1222 => x"737f0c74", +1223 => x"7f84050c", +1224 => x"7e800c9e", +1225 => x"3d0d0480", +1226 => x"705c5874", +1227 => x"7926dd38", +1228 => x"7481ff26", +1229 => x"832b5774", +1230 => x"83ffff26", +1231 => x"82a53874", +1232 => x"772a80d3", +1233 => x"d0057033", +1234 => x"a0793171", +1235 => x"31595c5d", +1236 => x"7682b338", +1237 => x"76547479", +1238 => x"27833881", +1239 => x"54797627", +1240 => x"74075981", +1241 => x"5878ffa2", +1242 => x"38765880", +1243 => x"5bff9d39", +1244 => x"73527453", +1245 => x"9e3de805", +1246 => x"51fc8e3f", +1247 => x"6769567f", +1248 => x"0c747f84", +1249 => x"050c7e80", +1250 => x"0c9e3d0d", +1251 => x"0475802e", +1252 => x"81c43875", +1253 => x"81ff2683", +1254 => x"2b5583ff", +1255 => x"ff76278c", +1256 => x"389055fe", +1257 => x"800a7627", +1258 => x"83389855", +1259 => x"75752a80", +1260 => x"d3d00570", +1261 => x"33a07731", +1262 => x"7131575e", +1263 => x"54748491", +1264 => x"38787631", +1265 => x"54817690", +1266 => x"2a7783ff", +1267 => x"ff065f5d", +1268 => x"5b7b5273", +1269 => x"5185c33f", +1270 => x"80085785", +1271 => x"ad3f8008", +1272 => x"80087e29", +1273 => x"78902b7c", +1274 => x"902a0756", +1275 => x"56597375", +1276 => x"27943880", +1277 => x"08ff0576", +1278 => x"15555975", +1279 => x"74268738", +1280 => x"74742684", +1281 => x"f3387b52", +1282 => x"73753151", +1283 => x"858c3f80", +1284 => x"085584f6", +1285 => x"3f800880", +1286 => x"087e297b", +1287 => x"83ffff06", +1288 => x"77902b07", +1289 => x"56595773", +1290 => x"78279638", +1291 => x"8008ff05", +1292 => x"76155557", +1293 => x"75742689", +1294 => x"38777426", +1295 => x"77713158", +1296 => x"5a78902b", +1297 => x"77077b41", +1298 => x"417f6156", +1299 => x"547d802e", +1300 => x"fdc638fe", +1301 => x"9b397552", +1302 => x"815184ae", +1303 => x"3f800856", +1304 => x"feb13990", +1305 => x"57fe800a", +1306 => x"7527fdd3", +1307 => x"38987571", +1308 => x"2a80d3d0", +1309 => x"057033a0", +1310 => x"73317131", +1311 => x"535d5e57", +1312 => x"76802efd", +1313 => x"cf38a077", +1314 => x"3175782b", +1315 => x"77722a07", +1316 => x"77792b7b", +1317 => x"7a2b7d74", +1318 => x"2a077d7b", +1319 => x"2b73902a", +1320 => x"7483ffff", +1321 => x"0671597f", +1322 => x"772a585e", +1323 => x"5c415f58", +1324 => x"5c5483e6", +1325 => x"3f800854", +1326 => x"83d03f80", +1327 => x"08800879", +1328 => x"2975902b", +1329 => x"7e902a07", +1330 => x"56565973", +1331 => x"75279938", +1332 => x"8008ff05", +1333 => x"7b155559", +1334 => x"7a74268c", +1335 => x"38737527", +1336 => x"8738ff19", +1337 => x"7b155559", +1338 => x"76527375", +1339 => x"315183aa", +1340 => x"3f800855", +1341 => x"83943f80", +1342 => x"08800879", +1343 => x"297d83ff", +1344 => x"ff067790", +1345 => x"2b075659", +1346 => x"57737827", +1347 => x"99388008", +1348 => x"ff057b15", +1349 => x"55577a74", +1350 => x"268c3873", +1351 => x"78278738", +1352 => x"ff177b15", +1353 => x"55577378", +1354 => x"3179902b", +1355 => x"78077083", +1356 => x"ffff0671", +1357 => x"902a7983", +1358 => x"ffff067a", +1359 => x"902a7372", +1360 => x"29737329", +1361 => x"74732976", +1362 => x"74297390", +1363 => x"2a057205", +1364 => x"5755435f", +1365 => x"5b585a57", +1366 => x"595a747c", +1367 => x"27863884", +1368 => x"80801757", +1369 => x"74902a17", +1370 => x"7983ffff", +1371 => x"06768480", +1372 => x"80290557", +1373 => x"57767a26", +1374 => x"9a38767a", +1375 => x"32703070", +1376 => x"72078025", +1377 => x"565a5b7c", +1378 => x"7627fafe", +1379 => x"3873802e", +1380 => x"faf838ff", +1381 => x"1858805b", +1382 => x"faf239ff", +1383 => x"76537754", +1384 => x"9f3de805", +1385 => x"525ef7e1", +1386 => x"3f676957", +1387 => x"4c754d69", +1388 => x"8025f8f3", +1389 => x"387d096a", +1390 => x"6c5c537a", +1391 => x"549f3de8", +1392 => x"05525ef7", +1393 => x"c43f6769", +1394 => x"714c704d", +1395 => x"5856f8db", +1396 => x"39a07531", +1397 => x"76762b7a", +1398 => x"772b7c73", +1399 => x"2a077c78", +1400 => x"2b72902a", +1401 => x"7383ffff", +1402 => x"0671587e", +1403 => x"762a5742", +1404 => x"405d5d57", +1405 => x"5881a33f", +1406 => x"80085781", +1407 => x"8d3f8008", +1408 => x"80087e29", +1409 => x"78902b7d", +1410 => x"902a0756", +1411 => x"56597375", +1412 => x"27993880", +1413 => x"08ff0576", +1414 => x"15555975", +1415 => x"74268c38", +1416 => x"73752787", +1417 => x"38ff1976", +1418 => x"1555597b", +1419 => x"52737531", +1420 => x"5180e73f", +1421 => x"80085580", +1422 => x"d13f8008", +1423 => x"80087e29", +1424 => x"7c83ffff", +1425 => x"06707890", +1426 => x"2b075156", +1427 => x"58587377", +1428 => x"27993880", +1429 => x"08ff0576", +1430 => x"15555875", +1431 => x"74268c38", +1432 => x"73772787", +1433 => x"38ff1876", +1434 => x"15555878", +1435 => x"902b7807", +1436 => x"74783155", +1437 => x"5bfada39", +1438 => x"ff197615", +1439 => x"5559fb86", +1440 => x"39ff1976", +1441 => x"155559f8", +1442 => x"c0397070", +1443 => x"70805375", +1444 => x"52745181", +1445 => x"913f5050", +1446 => x"50047070", +1447 => x"70815375", +1448 => x"52745181", +1449 => x"813f5050", +1450 => x"5004fb3d", +1451 => x"0d777955", +1452 => x"55805675", +1453 => x"7524ab38", +1454 => x"8074249d", +1455 => x"38805373", +1456 => x"52745180", +1457 => x"e13f8008", +1458 => x"5475802e", +1459 => x"85388008", +1460 => x"30547380", +1461 => x"0c873d0d", +1462 => x"04733076", +1463 => x"81325754", +1464 => x"dc397430", +1465 => x"55815673", +1466 => x"8025d238", +1467 => x"ec39fa3d", +1468 => x"0d787a57", +1469 => x"55805776", +1470 => x"7524a438", +1471 => x"759f2c54", +1472 => x"81537574", +1473 => x"32743152", +1474 => x"74519b3f", +1475 => x"80085476", +1476 => x"802e8538", +1477 => x"80083054", +1478 => x"73800c88", +1479 => x"3d0d0474", +1480 => x"30558157", +1481 => x"d739fc3d", +1482 => x"0d767853", +1483 => x"54815380", +1484 => x"74732652", +1485 => x"5572802e", +1486 => x"98387080", +1487 => x"2eab3880", +1488 => x"7224a638", +1489 => x"71107310", +1490 => x"75722653", +1491 => x"545272ea", +1492 => x"38735178", +1493 => x"83387451", +1494 => x"70800c86", +1495 => x"3d0d0472", +1496 => x"0a100a72", +1497 => x"0a100a53", +1498 => x"5372802e", +1499 => x"e4387174", +1500 => x"26ed3873", +1501 => x"72317574", +1502 => x"07740a10", +1503 => x"0a740a10", +1504 => x"0a555556", +1505 => x"54e33970", +1506 => x"70735280", +1507 => x"decc0851", +1508 => x"933f5050", +1509 => x"04707073", +1510 => x"5280decc", +1511 => x"085190ce", +1512 => x"3f505004", +1513 => x"f43d0d7e", +1514 => x"608b1170", +1515 => x"f8065b55", +1516 => x"555d7296", +1517 => x"26833890", +1518 => x"58807824", +1519 => x"74792607", +1520 => x"55805474", +1521 => x"742e0981", +1522 => x"0680ca38", +1523 => x"7c518d9e", +1524 => x"3f7783f7", +1525 => x"2680c538", +1526 => x"77832a70", +1527 => x"10101080", +1528 => x"d6c4058c", +1529 => x"11085858", +1530 => x"5475772e", +1531 => x"81f03884", +1532 => x"1608fc06", +1533 => x"8c170888", +1534 => x"1808718c", +1535 => x"120c8812", +1536 => x"0c5b7605", +1537 => x"84110881", +1538 => x"0784120c", +1539 => x"537c518c", +1540 => x"de3f8816", +1541 => x"5473800c", +1542 => x"8e3d0d04", +1543 => x"77892a78", +1544 => x"832a5854", +1545 => x"73802ebf", +1546 => x"3877862a", +1547 => x"b8055784", +1548 => x"7427b438", +1549 => x"80db1457", +1550 => x"947427ab", +1551 => x"38778c2a", +1552 => x"80ee0557", +1553 => x"80d47427", +1554 => x"9e38778f", +1555 => x"2a80f705", +1556 => x"5782d474", +1557 => x"27913877", +1558 => x"922a80fc", +1559 => x"05578ad4", +1560 => x"74278438", +1561 => x"80fe5776", +1562 => x"10101080", +1563 => x"d6c4058c", +1564 => x"11085653", +1565 => x"74732ea3", +1566 => x"38841508", +1567 => x"fc067079", +1568 => x"31555673", +1569 => x"8f2488e4", +1570 => x"38738025", +1571 => x"88e6388c", +1572 => x"15085574", +1573 => x"732e0981", +1574 => x"06df3881", +1575 => x"175980d6", +1576 => x"d4085675", +1577 => x"80d6cc2e", +1578 => x"82cc3884", +1579 => x"1608fc06", +1580 => x"70793155", +1581 => x"55738f24", +1582 => x"bb3880d6", +1583 => x"cc0b80d6", +1584 => x"d80c80d6", +1585 => x"cc0b80d6", +1586 => x"d40c8074", +1587 => x"2480db38", +1588 => x"74168411", +1589 => x"08810784", +1590 => x"120c53fe", +1591 => x"b0398816", +1592 => x"8c110857", +1593 => x"5975792e", +1594 => x"098106fe", +1595 => x"82388214", +1596 => x"59ffab39", +1597 => x"77167881", +1598 => x"0784180c", +1599 => x"7080d6d8", +1600 => x"0c7080d6", +1601 => x"d40c80d6", +1602 => x"cc0b8c12", +1603 => x"0c8c1108", +1604 => x"88120c74", +1605 => x"81078412", +1606 => x"0c740574", +1607 => x"710c5b7c", +1608 => x"518acc3f", +1609 => x"881654fd", +1610 => x"ec3983ff", +1611 => x"75278391", +1612 => x"3874892a", +1613 => x"75832a54", +1614 => x"5473802e", +1615 => x"bf387486", +1616 => x"2ab80553", +1617 => x"847427b4", +1618 => x"3880db14", +1619 => x"53947427", +1620 => x"ab38748c", +1621 => x"2a80ee05", +1622 => x"5380d474", +1623 => x"279e3874", +1624 => x"8f2a80f7", +1625 => x"055382d4", +1626 => x"74279138", +1627 => x"74922a80", +1628 => x"fc05538a", +1629 => x"d4742784", +1630 => x"3880fe53", +1631 => x"72101010", +1632 => x"80d6c405", +1633 => x"88110855", +1634 => x"5773772e", +1635 => x"868b3884", +1636 => x"1408fc06", +1637 => x"5b747b27", +1638 => x"8d388814", +1639 => x"08547377", +1640 => x"2e098106", +1641 => x"ea388c14", +1642 => x"0880d6c4", +1643 => x"0b840508", +1644 => x"718c190c", +1645 => x"7588190c", +1646 => x"7788130c", +1647 => x"5c57758c", +1648 => x"150c7853", +1649 => x"80792483", +1650 => x"98387282", +1651 => x"2c81712b", +1652 => x"5656747b", +1653 => x"2680ca38", +1654 => x"7a750657", +1655 => x"7682a338", +1656 => x"78fc0684", +1657 => x"05597410", +1658 => x"707c0655", +1659 => x"55738292", +1660 => x"38841959", +1661 => x"f13980d6", +1662 => x"c40b8405", +1663 => x"0879545b", +1664 => x"788025c6", +1665 => x"3882da39", +1666 => x"74097b06", +1667 => x"7080d6c4", +1668 => x"0b84050c", +1669 => x"5b741055", +1670 => x"747b2685", +1671 => x"387485bc", +1672 => x"3880d6c4", +1673 => x"0b880508", +1674 => x"70841208", +1675 => x"fc06707b", +1676 => x"317b7226", +1677 => x"8f722507", +1678 => x"5d575c5c", +1679 => x"5578802e", +1680 => x"80d93879", +1681 => x"1580d6bc", +1682 => x"08199011", +1683 => x"59545680", +1684 => x"d6b808ff", +1685 => x"2e8838a0", +1686 => x"8f13e080", +1687 => x"06577652", +1688 => x"7c51888c", +1689 => x"3f800854", +1690 => x"8008ff2e", +1691 => x"90388008", +1692 => x"762782a7", +1693 => x"387480d6", +1694 => x"c42e829f", +1695 => x"3880d6c4", +1696 => x"0b880508", +1697 => x"55841508", +1698 => x"fc067079", +1699 => x"31797226", +1700 => x"8f722507", +1701 => x"5d555a7a", +1702 => x"83f23877", +1703 => x"81078416", +1704 => x"0c771570", +1705 => x"80d6c40b", +1706 => x"88050c74", +1707 => x"81078412", +1708 => x"0c567c51", +1709 => x"87b93f88", +1710 => x"15547380", +1711 => x"0c8e3d0d", +1712 => x"0474832a", +1713 => x"70545480", +1714 => x"7424819b", +1715 => x"3872822c", +1716 => x"81712b80", +1717 => x"d6c80807", +1718 => x"7080d6c4", +1719 => x"0b84050c", +1720 => x"75101010", +1721 => x"80d6c405", +1722 => x"88110871", +1723 => x"8c1b0c70", +1724 => x"881b0c79", +1725 => x"88130c57", +1726 => x"555c5575", +1727 => x"8c150cfd", +1728 => x"c1397879", +1729 => x"10101080", +1730 => x"d6c40570", +1731 => x"565b5c8c", +1732 => x"14085675", +1733 => x"742ea338", +1734 => x"841608fc", +1735 => x"06707931", +1736 => x"5853768f", +1737 => x"2483f138", +1738 => x"76802584", +1739 => x"af388c16", +1740 => x"08567574", +1741 => x"2e098106", +1742 => x"df388814", +1743 => x"811a7083", +1744 => x"06555a54", +1745 => x"72c9387b", +1746 => x"83065675", +1747 => x"802efdb8", +1748 => x"38ff1cf8", +1749 => x"1b5b5c88", +1750 => x"1a087a2e", +1751 => x"ea38fdb5", +1752 => x"39831953", +1753 => x"fce43983", +1754 => x"1470822c", +1755 => x"81712b80", +1756 => x"d6c80807", +1757 => x"7080d6c4", +1758 => x"0b84050c", +1759 => x"76101010", +1760 => x"80d6c405", +1761 => x"88110871", +1762 => x"8c1c0c70", +1763 => x"881c0c7a", +1764 => x"88130c58", +1765 => x"535d5653", +1766 => x"fee13980", +1767 => x"d6880817", +1768 => x"59800876", +1769 => x"2e818b38", +1770 => x"80d6b808", +1771 => x"ff2e848e", +1772 => x"38737631", +1773 => x"1980d688", +1774 => x"0c738706", +1775 => x"70565372", +1776 => x"802e8838", +1777 => x"88733170", +1778 => x"15555576", +1779 => x"149fff06", +1780 => x"a0807131", +1781 => x"1670547e", +1782 => x"53515385", +1783 => x"933f8008", +1784 => x"568008ff", +1785 => x"2e819e38", +1786 => x"80d68808", +1787 => x"137080d6", +1788 => x"880c7475", +1789 => x"80d6c40b", +1790 => x"88050c77", +1791 => x"76311581", +1792 => x"07555659", +1793 => x"7a80d6c4", +1794 => x"2e83c038", +1795 => x"798f2682", +1796 => x"ef38810b", +1797 => x"84150c84", +1798 => x"1508fc06", +1799 => x"70793179", +1800 => x"72268f72", +1801 => x"25075d55", +1802 => x"5a7a802e", +1803 => x"fced3880", +1804 => x"db398008", +1805 => x"9fff0655", +1806 => x"74feed38", +1807 => x"7880d688", +1808 => x"0c80d6c4", +1809 => x"0b880508", +1810 => x"7a188107", +1811 => x"84120c55", +1812 => x"80d6b408", +1813 => x"79278638", +1814 => x"7880d6b4", +1815 => x"0c80d6b0", +1816 => x"087927fc", +1817 => x"a0387880", +1818 => x"d6b00c84", +1819 => x"1508fc06", +1820 => x"70793179", +1821 => x"72268f72", +1822 => x"25075d55", +1823 => x"5a7a802e", +1824 => x"fc993888", +1825 => x"39807457", +1826 => x"53fedd39", +1827 => x"7c5183df", +1828 => x"3f800b80", +1829 => x"0c8e3d0d", +1830 => x"04807324", +1831 => x"a5387282", +1832 => x"2c81712b", +1833 => x"80d6c808", +1834 => x"077080d6", +1835 => x"c40b8405", +1836 => x"0c5c5a76", +1837 => x"8c170c73", +1838 => x"88170c75", +1839 => x"88180cf9", +1840 => x"fd398313", +1841 => x"70822c81", +1842 => x"712b80d6", +1843 => x"c8080770", +1844 => x"80d6c40b", +1845 => x"84050c5d", +1846 => x"5b53d839", +1847 => x"7a75065c", +1848 => x"7bfc9f38", +1849 => x"84197510", +1850 => x"5659f139", +1851 => x"ff178105", +1852 => x"59f7ab39", +1853 => x"8c150888", +1854 => x"1608718c", +1855 => x"120c8812", +1856 => x"0c597515", +1857 => x"84110881", +1858 => x"0784120c", +1859 => x"587c5182", +1860 => x"de3f8815", +1861 => x"54fba339", +1862 => x"77167881", +1863 => x"0784180c", +1864 => x"8c170888", +1865 => x"1808718c", +1866 => x"120c8812", +1867 => x"0c5c7080", +1868 => x"d6d80c70", +1869 => x"80d6d40c", +1870 => x"80d6cc0b", +1871 => x"8c120c8c", +1872 => x"11088812", +1873 => x"0c778107", +1874 => x"84120c77", +1875 => x"0577710c", +1876 => x"557c5182", +1877 => x"9a3f8816", +1878 => x"54f5ba39", +1879 => x"72168411", +1880 => x"08810784", +1881 => x"120c588c", +1882 => x"16088817", +1883 => x"08718c12", +1884 => x"0c88120c", +1885 => x"577c5181", +1886 => x"f63f8816", +1887 => x"54f59639", +1888 => x"7284150c", +1889 => x"f41af806", +1890 => x"70841d08", +1891 => x"81060784", +1892 => x"1d0c701c", +1893 => x"5556850b", +1894 => x"84150c85", +1895 => x"0b88150c", +1896 => x"8f7627fd", +1897 => x"ab38881b", +1898 => x"527c5184", +1899 => x"c13f80d6", +1900 => x"c40b8805", +1901 => x"0880d688", +1902 => x"085a55fd", +1903 => x"93397880", +1904 => x"d6880c73", +1905 => x"80d6b80c", +1906 => x"fbef3972", +1907 => x"84150cfc", +1908 => x"ff39fb3d", +1909 => x"0d77707a", +1910 => x"7c585553", +1911 => x"568f7527", +1912 => x"80e63872", +1913 => x"76078306", +1914 => x"517080dc", +1915 => x"38757352", +1916 => x"54707084", +1917 => x"05520874", +1918 => x"70840556", +1919 => x"0c737170", +1920 => x"84055308", +1921 => x"71708405", +1922 => x"530c7170", +1923 => x"84055308", +1924 => x"71708405", +1925 => x"530c7170", +1926 => x"84055308", +1927 => x"71708405", +1928 => x"530cf016", +1929 => x"5654748f", +1930 => x"26c73883", +1931 => x"75279538", +1932 => x"70708405", +1933 => x"52087470", +1934 => x"8405560c", +1935 => x"fc155574", +1936 => x"8326ed38", +1937 => x"73715452", +1938 => x"ff155170", +1939 => x"ff2e9838", +1940 => x"72708105", +1941 => x"54337270", +1942 => x"81055434", +1943 => x"ff115170", +1944 => x"ff2e0981", +1945 => x"06ea3875", +1946 => x"800c873d", +1947 => x"0d040404", +1948 => x"70707070", +1949 => x"800b81b6", +1950 => x"9c0c7651", +1951 => x"87cc3f80", +1952 => x"08538008", +1953 => x"ff2e8938", +1954 => x"72800c50", +1955 => x"50505004", +1956 => x"81b69c08", +1957 => x"5473802e", +1958 => x"ef387574", +1959 => x"710c5272", +1960 => x"800c5050", +1961 => x"505004fb", +1962 => x"3d0d7779", +1963 => x"70720783", +1964 => x"06535452", +1965 => x"70933871", +1966 => x"73730854", +1967 => x"56547173", +1968 => x"082e80c4", +1969 => x"38737554", +1970 => x"52713370", +1971 => x"81ff0652", +1972 => x"5470802e", +1973 => x"9d387233", +1974 => x"5570752e", +1975 => x"09810695", +1976 => x"38811281", +1977 => x"14713370", +1978 => x"81ff0654", +1979 => x"56545270", +1980 => x"e5387233", +1981 => x"557381ff", +1982 => x"067581ff", +1983 => x"06717131", +1984 => x"800c5552", +1985 => x"873d0d04", +1986 => x"7109f7fb", +1987 => x"fdff1306", +1988 => x"f8848281", +1989 => x"80065271", +1990 => x"97388414", +1991 => x"84167108", +1992 => x"54565471", +1993 => x"75082ee0", +1994 => x"38737554", +1995 => x"52ff9a39", +1996 => x"800b800c", +1997 => x"873d0d04", +1998 => x"fb3d0d77", +1999 => x"705256fe", +2000 => x"ad3f80d6", +2001 => x"c40b8805", +2002 => x"08841108", +2003 => x"fc06707b", +2004 => x"319fef05", +2005 => x"e08006e0", +2006 => x"80055255", +2007 => x"55a08075", +2008 => x"24943880", +2009 => x"527551fe", +2010 => x"873f80d6", +2011 => x"cc081453", +2012 => x"7280082e", +2013 => x"8f387551", +2014 => x"fdf53f80", +2015 => x"5372800c", +2016 => x"873d0d04", +2017 => x"74305275", +2018 => x"51fde53f", +2019 => x"8008ff2e", +2020 => x"a83880d6", +2021 => x"c40b8805", +2022 => x"08747631", +2023 => x"81078412", +2024 => x"0c5380d6", +2025 => x"88087531", +2026 => x"80d6880c", +2027 => x"7551fdbf", +2028 => x"3f810b80", +2029 => x"0c873d0d", +2030 => x"04805275", +2031 => x"51fdb13f", +2032 => x"80d6c40b", +2033 => x"88050880", +2034 => x"08713154", +2035 => x"548f7325", +2036 => x"ffa43880", +2037 => x"0880d6b8", +2038 => x"083180d6", +2039 => x"880c7281", +2040 => x"0784150c", +2041 => x"7551fd87", +2042 => x"3f8053ff", +2043 => x"9039f73d", +2044 => x"0d7b7d54", +2045 => x"5a72802e", +2046 => x"82833879", +2047 => x"51fcef3f", +2048 => x"f8138411", +2049 => x"0870fe06", +2050 => x"70138411", +2051 => x"08fc065c", +2052 => x"57585457", +2053 => x"80d6cc08", +2054 => x"742e82de", +2055 => x"38778415", +2056 => x"0c807381", +2057 => x"06565974", +2058 => x"792e81d5", +2059 => x"38771484", +2060 => x"11088106", +2061 => x"565374a0", +2062 => x"38771656", +2063 => x"7881e638", +2064 => x"88140855", +2065 => x"7480d6cc", +2066 => x"2e82f938", +2067 => x"8c140870", +2068 => x"8c170c75", +2069 => x"88120c58", +2070 => x"75810784", +2071 => x"180c7517", +2072 => x"76710c54", +2073 => x"78819138", +2074 => x"83ff7627", +2075 => x"81c83875", +2076 => x"892a7683", +2077 => x"2a545473", +2078 => x"802ebf38", +2079 => x"75862ab8", +2080 => x"05538474", +2081 => x"27b43880", +2082 => x"db145394", +2083 => x"7427ab38", +2084 => x"758c2a80", +2085 => x"ee055380", +2086 => x"d474279e", +2087 => x"38758f2a", +2088 => x"80f70553", +2089 => x"82d47427", +2090 => x"91387592", +2091 => x"2a80fc05", +2092 => x"538ad474", +2093 => x"27843880", +2094 => x"fe537210", +2095 => x"101080d6", +2096 => x"c4058811", +2097 => x"08555573", +2098 => x"752e82bf", +2099 => x"38841408", +2100 => x"fc065975", +2101 => x"79278d38", +2102 => x"88140854", +2103 => x"73752e09", +2104 => x"8106ea38", +2105 => x"8c140870", +2106 => x"8c190c74", +2107 => x"88190c77", +2108 => x"88120c55", +2109 => x"768c150c", +2110 => x"7951faf3", +2111 => x"3f8b3d0d", +2112 => x"04760877", +2113 => x"71315876", +2114 => x"05881808", +2115 => x"56567480", +2116 => x"d6cc2e80", +2117 => x"e0388c17", +2118 => x"08708c17", +2119 => x"0c758812", +2120 => x"0c53fe89", +2121 => x"39881408", +2122 => x"8c150870", +2123 => x"8c130c59", +2124 => x"88190cfe", +2125 => x"a3397583", +2126 => x"2a705454", +2127 => x"80742481", +2128 => x"98387282", +2129 => x"2c81712b", +2130 => x"80d6c808", +2131 => x"0780d6c4", +2132 => x"0b84050c", +2133 => x"74101010", +2134 => x"80d6c405", +2135 => x"88110871", +2136 => x"8c1b0c70", +2137 => x"881b0c79", +2138 => x"88130c56", +2139 => x"5a55768c", +2140 => x"150cff84", +2141 => x"398159fd", +2142 => x"b4397716", +2143 => x"73810654", +2144 => x"55729838", +2145 => x"76087771", +2146 => x"31587505", +2147 => x"8c180888", +2148 => x"1908718c", +2149 => x"120c8812", +2150 => x"0c555574", +2151 => x"81078418", +2152 => x"0c7680d6", +2153 => x"c40b8805", +2154 => x"0c80d6c0", +2155 => x"087526fe", +2156 => x"c73880d6", +2157 => x"bc085279", +2158 => x"51fafd3f", +2159 => x"7951f9af", +2160 => x"3ffeba39", +2161 => x"81778c17", +2162 => x"0c778817", +2163 => x"0c758c19", +2164 => x"0c758819", +2165 => x"0c59fd80", +2166 => x"39831470", +2167 => x"822c8171", +2168 => x"2b80d6c8", +2169 => x"080780d6", +2170 => x"c40b8405", +2171 => x"0c751010", +2172 => x"1080d6c4", +2173 => x"05881108", +2174 => x"718c1c0c", +2175 => x"70881c0c", +2176 => x"7a88130c", +2177 => x"575b5653", +2178 => x"fee43980", +2179 => x"7324a338", +2180 => x"72822c81", +2181 => x"712b80d6", +2182 => x"c8080780", +2183 => x"d6c40b84", +2184 => x"050c5874", +2185 => x"8c180c73", +2186 => x"88180c76", +2187 => x"88160cfd", +2188 => x"c3398313", +2189 => x"70822c81", +2190 => x"712b80d6", +2191 => x"c8080780", +2192 => x"d6c40b84", +2193 => x"050c5953", +2194 => x"da397070", +2195 => x"7080e5f4", +2196 => x"08893881", +2197 => x"b6a00b80", +2198 => x"e5f40c80", +2199 => x"e5f40875", +2200 => x"115252ff", +2201 => x"537087fb", +2202 => x"80802688", +2203 => x"387080e5", +2204 => x"f40c7153", +2205 => x"72800c50", +2206 => x"505004fd", +2207 => x"3d0d800b", +2208 => x"80d5f408", +2209 => x"54547281", +2210 => x"2e9b3873", +2211 => x"80e5f80c", +2212 => x"c3ee3fc2", +2213 => x"eb3f80e5", +2214 => x"cc528151", +2215 => x"cc933f80", +2216 => x"085180dd", +2217 => x"3f7280e5", +2218 => x"f80cc3d4", +2219 => x"3fc2d13f", +2220 => x"80e5cc52", +2221 => x"8151cbf9", +2222 => x"3f800851", +2223 => x"80c33f00", +2224 => x"ff3900ff", +2225 => x"39f43d0d", +2226 => x"7e80e5ec", +2227 => x"08700870", +2228 => x"81ff0692", +2229 => x"3df80555", +2230 => x"515a5759", +2231 => x"c48f3f80", +2232 => x"5477557b", +2233 => x"7d585276", +2234 => x"538e3df0", +2235 => x"0551de8e", +2236 => x"3f797b58", +2237 => x"790c7684", +2238 => x"1a0c7880", +2239 => x"0c8e3d0d", +2240 => x"04f73d0d", +2241 => x"7b80decc", +2242 => x"0882c811", +2243 => x"085a545a", +2244 => x"77802e80", +2245 => x"da388188", +2246 => x"18841908", +2247 => x"ff058171", +2248 => x"2b595559", +2249 => x"80742480", +2250 => x"ea388074", +2251 => x"24b53873", +2252 => x"822b7811", +2253 => x"88055656", +2254 => x"81801908", +2255 => x"77065372", +2256 => x"802eb638", +2257 => x"78167008", +2258 => x"53537951", +2259 => x"74085372", +2260 => x"2dff14fc", +2261 => x"17fc1779", +2262 => x"812c5a57", +2263 => x"57547380", +2264 => x"25d63877", +2265 => x"085877ff", +2266 => x"ad3880de", +2267 => x"cc0853bc", +2268 => x"1308a538", +2269 => x"7951fec7", +2270 => x"3f740853", +2271 => x"722dff14", +2272 => x"fc17fc17", +2273 => x"79812c5a", +2274 => x"57575473", +2275 => x"8025ffa8", +2276 => x"38d13980", +2277 => x"57ff9339", +2278 => x"7251bc13", +2279 => x"0854732d", +2280 => x"7951fe9b", +2281 => x"3f707080", +2282 => x"e5d40bfc", +2283 => x"05700852", +2284 => x"5270ff2e", +2285 => x"9138702d", +2286 => x"fc127008", +2287 => x"525270ff", +2288 => x"2e098106", +2289 => x"f1385050", +2290 => x"0404c2ff", +2291 => x"3f040000", +2292 => x"00000040", +2293 => x"30313233", +2294 => x"34353637", +2295 => x"38390000", +2296 => x"44485259", +2297 => x"53544f4e", +2298 => x"45205052", +2299 => x"4f475241", +2300 => x"4d2c2053", +2301 => x"4f4d4520", +2302 => x"53545249", +2303 => x"4e470000", +2304 => x"44485259", +2305 => x"53544f4e", +2306 => x"45205052", +2307 => x"4f475241", +2308 => x"4d2c2031", +2309 => x"27535420", +2310 => x"53545249", +2311 => x"4e470000", +2312 => x"44687279", +2313 => x"73746f6e", +2314 => x"65204265", +2315 => x"6e63686d", +2316 => x"61726b2c", +2317 => x"20566572", +2318 => x"73696f6e", +2319 => x"20322e31", +2320 => x"20284c61", +2321 => x"6e677561", +2322 => x"67653a20", +2323 => x"43290a00", +2324 => x"50726f67", +2325 => x"72616d20", +2326 => x"636f6d70", +2327 => x"696c6564", +2328 => x"20776974", +2329 => x"68202772", +2330 => x"65676973", +2331 => x"74657227", +2332 => x"20617474", +2333 => x"72696275", +2334 => x"74650a00", +2335 => x"45786563", +2336 => x"7574696f", +2337 => x"6e207374", +2338 => x"61727473", +2339 => x"2c202564", +2340 => x"2072756e", +2341 => x"73207468", +2342 => x"726f7567", +2343 => x"68204468", +2344 => x"72797374", +2345 => x"6f6e650a", +2346 => x"00000000", +2347 => x"44485259", +2348 => x"53544f4e", +2349 => x"45205052", +2350 => x"4f475241", +2351 => x"4d2c2032", +2352 => x"274e4420", +2353 => x"53545249", +2354 => x"4e470000", +2355 => x"45786563", +2356 => x"7574696f", +2357 => x"6e20656e", +2358 => x"64730a00", +2359 => x"46696e61", +2360 => x"6c207661", +2361 => x"6c756573", +2362 => x"206f6620", +2363 => x"74686520", +2364 => x"76617269", +2365 => x"61626c65", +2366 => x"73207573", +2367 => x"65642069", +2368 => x"6e207468", +2369 => x"65206265", +2370 => x"6e63686d", +2371 => x"61726b3a", +2372 => x"0a000000", +2373 => x"496e745f", +2374 => x"476c6f62", +2375 => x"3a202020", +2376 => x"20202020", +2377 => x"20202020", +2378 => x"2025640a", +2379 => x"00000000", +2380 => x"20202020", +2381 => x"20202020", +2382 => x"73686f75", +2383 => x"6c642062", +2384 => x"653a2020", +2385 => x"2025640a", +2386 => x"00000000", +2387 => x"426f6f6c", +2388 => x"5f476c6f", +2389 => x"623a2020", +2390 => x"20202020", +2391 => x"20202020", +2392 => x"2025640a", +2393 => x"00000000", +2394 => x"43685f31", +2395 => x"5f476c6f", +2396 => x"623a2020", +2397 => x"20202020", +2398 => x"20202020", +2399 => x"2025630a", +2400 => x"00000000", +2401 => x"20202020", +2402 => x"20202020", +2403 => x"73686f75", +2404 => x"6c642062", +2405 => x"653a2020", +2406 => x"2025630a", +2407 => x"00000000", +2408 => x"43685f32", +2409 => x"5f476c6f", +2410 => x"623a2020", +2411 => x"20202020", +2412 => x"20202020", +2413 => x"2025630a", +2414 => x"00000000", +2415 => x"4172725f", +2416 => x"315f476c", +2417 => x"6f625b38", +2418 => x"5d3a2020", +2419 => x"20202020", +2420 => x"2025640a", +2421 => x"00000000", +2422 => x"4172725f", +2423 => x"325f476c", +2424 => x"6f625b38", +2425 => x"5d5b375d", +2426 => x"3a202020", +2427 => x"2025640a", +2428 => x"00000000", +2429 => x"20202020", +2430 => x"20202020", +2431 => x"73686f75", +2432 => x"6c642062", +2433 => x"653a2020", +2434 => x"204e756d", +2435 => x"6265725f", +2436 => x"4f665f52", +2437 => x"756e7320", +2438 => x"2b203130", +2439 => x"0a000000", +2440 => x"5074725f", +2441 => x"476c6f62", +2442 => x"2d3e0a00", +2443 => x"20205074", +2444 => x"725f436f", +2445 => x"6d703a20", +2446 => x"20202020", +2447 => x"20202020", +2448 => x"2025640a", +2449 => x"00000000", +2450 => x"20202020", +2451 => x"20202020", +2452 => x"73686f75", +2453 => x"6c642062", +2454 => x"653a2020", +2455 => x"2028696d", +2456 => x"706c656d", +2457 => x"656e7461", +2458 => x"74696f6e", +2459 => x"2d646570", +2460 => x"656e6465", +2461 => x"6e74290a", +2462 => x"00000000", +2463 => x"20204469", +2464 => x"7363723a", +2465 => x"20202020", +2466 => x"20202020", +2467 => x"20202020", +2468 => x"2025640a", +2469 => x"00000000", +2470 => x"2020456e", +2471 => x"756d5f43", +2472 => x"6f6d703a", +2473 => x"20202020", +2474 => x"20202020", +2475 => x"2025640a", +2476 => x"00000000", +2477 => x"2020496e", +2478 => x"745f436f", +2479 => x"6d703a20", +2480 => x"20202020", +2481 => x"20202020", +2482 => x"2025640a", +2483 => x"00000000", +2484 => x"20205374", +2485 => x"725f436f", +2486 => x"6d703a20", +2487 => x"20202020", +2488 => x"20202020", +2489 => x"2025730a", +2490 => x"00000000", +2491 => x"20202020", +2492 => x"20202020", +2493 => x"73686f75", +2494 => x"6c642062", +2495 => x"653a2020", +2496 => x"20444852", +2497 => x"5953544f", +2498 => x"4e452050", +2499 => x"524f4752", +2500 => x"414d2c20", +2501 => x"534f4d45", +2502 => x"20535452", +2503 => x"494e470a", +2504 => x"00000000", +2505 => x"4e657874", +2506 => x"5f507472", +2507 => x"5f476c6f", +2508 => x"622d3e0a", +2509 => x"00000000", +2510 => x"20202020", +2511 => x"20202020", +2512 => x"73686f75", +2513 => x"6c642062", +2514 => x"653a2020", +2515 => x"2028696d", +2516 => x"706c656d", +2517 => x"656e7461", +2518 => x"74696f6e", +2519 => x"2d646570", +2520 => x"656e6465", +2521 => x"6e74292c", +2522 => x"2073616d", +2523 => x"65206173", +2524 => x"2061626f", +2525 => x"76650a00", +2526 => x"496e745f", +2527 => x"315f4c6f", +2528 => x"633a2020", +2529 => x"20202020", +2530 => x"20202020", +2531 => x"2025640a", +2532 => x"00000000", +2533 => x"496e745f", +2534 => x"325f4c6f", +2535 => x"633a2020", +2536 => x"20202020", +2537 => x"20202020", +2538 => x"2025640a", +2539 => x"00000000", +2540 => x"496e745f", +2541 => x"335f4c6f", +2542 => x"633a2020", +2543 => x"20202020", +2544 => x"20202020", +2545 => x"2025640a", +2546 => x"00000000", +2547 => x"456e756d", +2548 => x"5f4c6f63", +2549 => x"3a202020", +2550 => x"20202020", +2551 => x"20202020", +2552 => x"2025640a", +2553 => x"00000000", +2554 => x"5374725f", +2555 => x"315f4c6f", +2556 => x"633a2020", +2557 => x"20202020", +2558 => x"20202020", +2559 => x"2025730a", +2560 => x"00000000", +2561 => x"20202020", +2562 => x"20202020", +2563 => x"73686f75", +2564 => x"6c642062", +2565 => x"653a2020", +2566 => x"20444852", +2567 => x"5953544f", +2568 => x"4e452050", +2569 => x"524f4752", +2570 => x"414d2c20", +2571 => x"31275354", +2572 => x"20535452", +2573 => x"494e470a", +2574 => x"00000000", +2575 => x"5374725f", +2576 => x"325f4c6f", +2577 => x"633a2020", +2578 => x"20202020", +2579 => x"20202020", +2580 => x"2025730a", +2581 => x"00000000", +2582 => x"20202020", +2583 => x"20202020", +2584 => x"73686f75", +2585 => x"6c642062", +2586 => x"653a2020", +2587 => x"20444852", +2588 => x"5953544f", +2589 => x"4e452050", +2590 => x"524f4752", +2591 => x"414d2c20", +2592 => x"32274e44", +2593 => x"20535452", +2594 => x"494e470a", +2595 => x"00000000", +2596 => x"55736572", +2597 => x"2074696d", +2598 => x"653a2025", +2599 => x"640a0000", +2600 => x"4d696372", +2601 => x"6f736563", +2602 => x"6f6e6473", +2603 => x"20666f72", +2604 => x"206f6e65", +2605 => x"2072756e", +2606 => x"20746872", +2607 => x"6f756768", +2608 => x"20446872", +2609 => x"7973746f", +2610 => x"6e653a20", +2611 => x"00000000", +2612 => x"2564200a", +2613 => x"00000000", +2614 => x"44687279", +2615 => x"73746f6e", +2616 => x"65732070", +2617 => x"65722053", +2618 => x"65636f6e", +2619 => x"643a2020", +2620 => x"20202020", +2621 => x"20202020", +2622 => x"20202020", +2623 => x"20202020", +2624 => x"20202020", +2625 => x"00000000", +2626 => x"56415820", +2627 => x"4d495053", +2628 => x"20726174", +2629 => x"696e6720", +2630 => x"2a203130", +2631 => x"3030203d", +2632 => x"20256420", +2633 => x"0a000000", +2634 => x"50726f67", +2635 => x"72616d20", +2636 => x"636f6d70", +2637 => x"696c6564", +2638 => x"20776974", +2639 => x"686f7574", +2640 => x"20277265", +2641 => x"67697374", +2642 => x"65722720", +2643 => x"61747472", +2644 => x"69627574", +2645 => x"650a0000", +2646 => x"4d656173", +2647 => x"75726564", +2648 => x"2074696d", +2649 => x"6520746f", +2650 => x"6f20736d", +2651 => x"616c6c20", +2652 => x"746f206f", +2653 => x"62746169", +2654 => x"6e206d65", +2655 => x"616e696e", +2656 => x"6766756c", +2657 => x"20726573", +2658 => x"756c7473", +2659 => x"0a000000", +2660 => x"506c6561", +2661 => x"73652069", +2662 => x"6e637265", +2663 => x"61736520", +2664 => x"6e756d62", +2665 => x"6572206f", +2666 => x"66207275", +2667 => x"6e730a00", +2668 => x"44485259", +2669 => x"53544f4e", +2670 => x"45205052", +2671 => x"4f475241", +2672 => x"4d2c2033", +2673 => x"27524420", +2674 => x"53545249", +2675 => x"4e470000", +2676 => x"00010202", +2677 => x"03030303", +2678 => x"04040404", +2679 => x"04040404", +2680 => x"05050505", +2681 => x"05050505", +2682 => x"05050505", +2683 => x"05050505", +2684 => x"06060606", +2685 => x"06060606", +2686 => x"06060606", +2687 => x"06060606", +2688 => x"06060606", +2689 => x"06060606", +2690 => x"06060606", +2691 => x"06060606", +2692 => x"07070707", +2693 => x"07070707", +2694 => x"07070707", +2695 => x"07070707", +2696 => x"07070707", +2697 => x"07070707", +2698 => x"07070707", +2699 => x"07070707", +2700 => x"07070707", +2701 => x"07070707", +2702 => x"07070707", +2703 => x"07070707", +2704 => x"07070707", +2705 => x"07070707", +2706 => x"07070707", +2707 => x"07070707", +2708 => x"08080808", +2709 => x"08080808", +2710 => x"08080808", +2711 => x"08080808", +2712 => x"08080808", +2713 => x"08080808", +2714 => x"08080808", +2715 => x"08080808", +2716 => x"08080808", +2717 => x"08080808", +2718 => x"08080808", +2719 => x"08080808", +2720 => x"08080808", +2721 => x"08080808", +2722 => x"08080808", +2723 => x"08080808", +2724 => x"08080808", +2725 => x"08080808", +2726 => x"08080808", +2727 => x"08080808", +2728 => x"08080808", +2729 => x"08080808", +2730 => x"08080808", +2731 => x"08080808", +2732 => x"08080808", +2733 => x"08080808", +2734 => x"08080808", +2735 => x"08080808", +2736 => x"08080808", +2737 => x"08080808", +2738 => x"08080808", +2739 => x"08080808", +2740 => x"43000000", +2741 => x"64756d6d", +2742 => x"792e6578", +2743 => x"65000000", +2744 => x"00ffffff", +2745 => x"ff00ffff", +2746 => x"ffff00ff", +2747 => x"ffffff00", +2748 => x"00000000", +2749 => x"00000000", +2750 => x"00000000", +2751 => x"000032dc", +2752 => x"0000c350", +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"ffffffff", +2767 => x"00000000", +2768 => x"00020000", +2769 => x"00000000", +2770 => x"00000000", +2771 => x"00002b44", +2772 => x"00002b44", +2773 => x"00002b4c", +2774 => x"00002b4c", +2775 => x"00002b54", +2776 => x"00002b54", +2777 => x"00002b5c", +2778 => x"00002b5c", +2779 => x"00002b64", +2780 => x"00002b64", +2781 => x"00002b6c", +2782 => x"00002b6c", +2783 => x"00002b74", +2784 => x"00002b74", +2785 => x"00002b7c", +2786 => x"00002b7c", +2787 => x"00002b84", +2788 => x"00002b84", +2789 => x"00002b8c", +2790 => x"00002b8c", +2791 => x"00002b94", +2792 => x"00002b94", +2793 => x"00002b9c", +2794 => x"00002b9c", +2795 => x"00002ba4", +2796 => x"00002ba4", +2797 => x"00002bac", +2798 => x"00002bac", +2799 => x"00002bb4", +2800 => x"00002bb4", +2801 => x"00002bbc", +2802 => x"00002bbc", +2803 => x"00002bc4", +2804 => x"00002bc4", +2805 => x"00002bcc", +2806 => x"00002bcc", +2807 => x"00002bd4", +2808 => x"00002bd4", +2809 => x"00002bdc", +2810 => x"00002bdc", +2811 => x"00002be4", +2812 => x"00002be4", +2813 => x"00002bec", +2814 => x"00002bec", +2815 => x"00002bf4", +2816 => x"00002bf4", +2817 => x"00002bfc", +2818 => x"00002bfc", +2819 => x"00002c04", +2820 => x"00002c04", +2821 => x"00002c0c", +2822 => x"00002c0c", +2823 => x"00002c14", +2824 => x"00002c14", +2825 => x"00002c1c", +2826 => x"00002c1c", +2827 => x"00002c24", +2828 => x"00002c24", +2829 => x"00002c2c", +2830 => x"00002c2c", +2831 => x"00002c34", +2832 => x"00002c34", +2833 => x"00002c3c", +2834 => x"00002c3c", +2835 => x"00002c44", +2836 => x"00002c44", +2837 => x"00002c4c", +2838 => x"00002c4c", +2839 => x"00002c54", +2840 => x"00002c54", +2841 => x"00002c5c", +2842 => x"00002c5c", +2843 => x"00002c64", +2844 => x"00002c64", +2845 => x"00002c6c", +2846 => x"00002c6c", +2847 => x"00002c74", +2848 => x"00002c74", +2849 => x"00002c7c", +2850 => x"00002c7c", +2851 => x"00002c84", +2852 => x"00002c84", +2853 => x"00002c8c", +2854 => x"00002c8c", +2855 => x"00002c94", +2856 => x"00002c94", +2857 => x"00002c9c", +2858 => x"00002c9c", +2859 => x"00002ca4", +2860 => x"00002ca4", +2861 => x"00002cac", +2862 => x"00002cac", +2863 => x"00002cb4", +2864 => x"00002cb4", +2865 => x"00002cbc", +2866 => x"00002cbc", +2867 => x"00002cc4", +2868 => x"00002cc4", +2869 => x"00002ccc", +2870 => x"00002ccc", +2871 => x"00002cd4", +2872 => x"00002cd4", +2873 => x"00002cdc", +2874 => x"00002cdc", +2875 => x"00002ce4", +2876 => x"00002ce4", +2877 => x"00002cec", +2878 => x"00002cec", +2879 => x"00002cf4", +2880 => x"00002cf4", +2881 => x"00002cfc", +2882 => x"00002cfc", +2883 => x"00002d04", +2884 => x"00002d04", +2885 => x"00002d0c", +2886 => x"00002d0c", +2887 => x"00002d14", +2888 => x"00002d14", +2889 => x"00002d1c", +2890 => x"00002d1c", +2891 => x"00002d24", +2892 => x"00002d24", +2893 => x"00002d2c", +2894 => x"00002d2c", +2895 => x"00002d34", +2896 => x"00002d34", +2897 => x"00002d3c", +2898 => x"00002d3c", +2899 => x"00002d44", +2900 => x"00002d44", +2901 => x"00002d4c", +2902 => x"00002d4c", +2903 => x"00002d54", +2904 => x"00002d54", +2905 => x"00002d5c", +2906 => x"00002d5c", +2907 => x"00002d64", +2908 => x"00002d64", +2909 => x"00002d6c", +2910 => x"00002d6c", +2911 => x"00002d74", +2912 => x"00002d74", +2913 => x"00002d7c", +2914 => x"00002d7c", +2915 => x"00002d84", +2916 => x"00002d84", +2917 => x"00002d8c", +2918 => x"00002d8c", +2919 => x"00002d94", +2920 => x"00002d94", +2921 => x"00002d9c", +2922 => x"00002d9c", +2923 => x"00002da4", +2924 => x"00002da4", +2925 => x"00002dac", +2926 => x"00002dac", +2927 => x"00002db4", +2928 => x"00002db4", +2929 => x"00002dbc", +2930 => x"00002dbc", +2931 => x"00002dc4", +2932 => x"00002dc4", +2933 => x"00002dcc", +2934 => x"00002dcc", +2935 => x"00002dd4", +2936 => x"00002dd4", +2937 => x"00002ddc", +2938 => x"00002ddc", +2939 => x"00002de4", +2940 => x"00002de4", +2941 => x"00002dec", +2942 => x"00002dec", +2943 => x"00002df4", +2944 => x"00002df4", +2945 => x"00002dfc", +2946 => x"00002dfc", +2947 => x"00002e04", +2948 => x"00002e04", +2949 => x"00002e0c", +2950 => x"00002e0c", +2951 => x"00002e14", +2952 => x"00002e14", +2953 => x"00002e1c", +2954 => x"00002e1c", +2955 => x"00002e24", +2956 => x"00002e24", +2957 => x"00002e2c", +2958 => x"00002e2c", +2959 => x"00002e34", +2960 => x"00002e34", +2961 => x"00002e3c", +2962 => x"00002e3c", +2963 => x"00002e44", +2964 => x"00002e44", +2965 => x"00002e4c", +2966 => x"00002e4c", +2967 => x"00002e54", +2968 => x"00002e54", +2969 => x"00002e5c", +2970 => x"00002e5c", +2971 => x"00002e64", +2972 => x"00002e64", +2973 => x"00002e6c", +2974 => x"00002e6c", +2975 => x"00002e74", +2976 => x"00002e74", +2977 => x"00002e7c", +2978 => x"00002e7c", +2979 => x"00002e84", +2980 => x"00002e84", +2981 => x"00002e8c", +2982 => x"00002e8c", +2983 => x"00002e94", +2984 => x"00002e94", +2985 => x"00002e9c", +2986 => x"00002e9c", +2987 => x"00002ea4", +2988 => x"00002ea4", +2989 => x"00002eac", +2990 => x"00002eac", +2991 => x"00002eb4", +2992 => x"00002eb4", +2993 => x"00002ebc", +2994 => x"00002ebc", +2995 => x"00002ec4", +2996 => x"00002ec4", +2997 => x"00002ecc", +2998 => x"00002ecc", +2999 => x"00002ed4", +3000 => x"00002ed4", +3001 => x"00002edc", +3002 => x"00002edc", +3003 => x"00002ee4", +3004 => x"00002ee4", +3005 => x"00002eec", +3006 => x"00002eec", +3007 => x"00002ef4", +3008 => x"00002ef4", +3009 => x"00002efc", +3010 => x"00002efc", +3011 => x"00002f04", +3012 => x"00002f04", +3013 => x"00002f0c", +3014 => x"00002f0c", +3015 => x"00002f14", +3016 => x"00002f14", +3017 => x"00002f1c", +3018 => x"00002f1c", +3019 => x"00002f24", +3020 => x"00002f24", +3021 => x"00002f2c", +3022 => x"00002f2c", +3023 => x"00002f34", +3024 => x"00002f34", +3025 => x"00002f3c", +3026 => x"00002f3c", +3027 => x"00002f50", +3028 => x"00000000", +3029 => x"000031b8", +3030 => x"00003214", +3031 => x"00003270", +3032 => x"00000000", +3033 => x"00000000", +3034 => x"00000000", +3035 => x"00000000", +3036 => x"00000000", +3037 => x"00000000", +3038 => x"00000000", +3039 => x"00000000", +3040 => x"00000000", +3041 => x"00002ad0", +3042 => x"00000000", +3043 => x"00000000", +3044 => x"00000000", +3045 => x"00000000", +3046 => x"00000000", +3047 => x"00000000", +3048 => x"00000000", +3049 => x"00000000", +3050 => x"00000000", +3051 => x"00000000", +3052 => x"00000000", +3053 => x"00000000", +3054 => x"00000000", +3055 => x"00000000", +3056 => x"00000000", +3057 => x"00000000", +3058 => x"00000000", +3059 => x"00000000", +3060 => x"00000000", +3061 => x"00000000", +3062 => x"00000000", +3063 => x"00000000", +3064 => x"00000000", +3065 => x"00000000", +3066 => x"00000000", +3067 => x"00000000", +3068 => x"00000000", +3069 => x"00000000", +3070 => x"00000001", +3071 => x"330eabcd", +3072 => x"1234e66d", +3073 => x"deec0005", +3074 => x"000b0000", +3075 => x"00000000", +3076 => x"00000000", +3077 => x"00000000", +3078 => x"00000000", +3079 => x"00000000", +3080 => x"00000000", +3081 => x"00000000", +3082 => x"00000000", +3083 => x"00000000", +3084 => x"00000000", +3085 => x"00000000", +3086 => x"00000000", +3087 => x"00000000", +3088 => x"00000000", +3089 => x"00000000", +3090 => x"00000000", +3091 => x"00000000", +3092 => x"00000000", +3093 => x"00000000", +3094 => x"00000000", +3095 => x"00000000", +3096 => x"00000000", +3097 => x"00000000", +3098 => x"00000000", +3099 => x"00000000", +3100 => x"00000000", +3101 => x"00000000", +3102 => x"00000000", +3103 => x"00000000", +3104 => x"00000000", +3105 => x"00000000", +3106 => x"00000000", +3107 => x"00000000", +3108 => x"00000000", +3109 => x"00000000", +3110 => x"00000000", +3111 => x"00000000", +3112 => x"00000000", +3113 => x"00000000", +3114 => x"00000000", +3115 => x"00000000", +3116 => x"00000000", +3117 => x"00000000", +3118 => x"00000000", +3119 => x"00000000", +3120 => x"00000000", +3121 => x"00000000", +3122 => x"00000000", +3123 => x"00000000", +3124 => x"00000000", +3125 => x"00000000", +3126 => x"00000000", +3127 => x"00000000", +3128 => x"00000000", +3129 => x"00000000", +3130 => x"00000000", +3131 => x"00000000", +3132 => x"00000000", +3133 => x"00000000", +3134 => x"00000000", +3135 => x"00000000", +3136 => x"00000000", +3137 => x"00000000", +3138 => x"00000000", +3139 => x"00000000", +3140 => x"00000000", +3141 => x"00000000", +3142 => x"00000000", +3143 => x"00000000", 3144 => x"00000000", 3145 => x"00000000", 3146 => x"00000000", -3147 => x"0000390c", -3148 => x"000004d2", +3147 => x"00000000", +3148 => x"00000000", 3149 => x"00000000", 3150 => x"00000000", 3151 => x"00000000", @@ -3160,493 +3160,97 @@ 3159 => x"00000000", 3160 => x"00000000", 3161 => x"00000000", -3162 => x"ffffffff", +3162 => x"00000000", 3163 => x"00000000", -3164 => x"00020000", +3164 => x"00000000", 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", +3167 => x"00000000", +3168 => x"00000000", +3169 => x"00000000", +3170 => x"00000000", +3171 => x"00000000", +3172 => x"00000000", +3173 => x"00000000", +3174 => x"00000000", +3175 => x"00000000", +3176 => x"00000000", +3177 => x"00000000", +3178 => x"00000000", +3179 => x"00000000", +3180 => x"00000000", +3181 => x"00000000", +3182 => x"00000000", +3183 => x"00000000", +3184 => x"00000000", +3185 => x"00000000", +3186 => x"00000000", +3187 => x"00000000", +3188 => x"00000000", +3189 => x"00000000", +3190 => x"00000000", +3191 => x"00000000", +3192 => x"00000000", +3193 => x"00000000", +3194 => x"00000000", +3195 => x"00000000", +3196 => x"00000000", +3197 => x"00000000", +3198 => x"00000000", +3199 => x"00000000", +3200 => x"00000000", +3201 => x"00000000", +3202 => x"00000000", +3203 => x"00000000", +3204 => x"00000000", +3205 => x"00000000", +3206 => x"00000000", +3207 => x"00000000", +3208 => x"00000000", +3209 => x"00000000", +3210 => x"00000000", +3211 => x"00000000", +3212 => x"00000000", +3213 => x"00000000", +3214 => x"00000000", +3215 => x"00000000", +3216 => x"00000000", +3217 => x"00000000", +3218 => x"00000000", +3219 => x"00000000", +3220 => x"00000000", +3221 => x"00000000", +3222 => x"00000000", +3223 => x"00000000", +3224 => x"00000000", +3225 => x"00000000", +3226 => x"00000000", +3227 => x"00000000", +3228 => x"00000000", +3229 => x"00000000", +3230 => x"00000000", +3231 => x"00000000", +3232 => x"00000000", +3233 => x"00000000", +3234 => x"00000000", +3235 => x"00000000", +3236 => x"00000000", +3237 => x"00000000", +3238 => x"00000000", +3239 => x"00000000", +3240 => x"00000000", +3241 => x"00000000", +3242 => x"00000000", +3243 => x"00000000", +3244 => x"00000000", +3245 => x"00000000", +3246 => x"00000000", +3247 => x"00000000", +3248 => x"00000000", +3249 => x"00000000", +3250 => x"00000000", +3251 => x"00002ad4", +3252 => x"ffffffff", +3253 => x"00000000", +3254 => x"ffffffff", +3255 => x"00000000", diff --git a/zpu/sw/env.sh b/zpu/sw/env.sh new file mode 100644 index 0000000..8ed43f0 --- /dev/null +++ b/zpu/sw/env.sh @@ -0,0 +1,2 @@ +export ZPUSW=`pwd` +export PATH=$PATH:/tmp/zpu/install/bin diff --git a/zpu/sw/index.html b/zpu/sw/index.html index 6c860a9..fd0a1b4 100644 --- a/zpu/sw/index.html +++ b/zpu/sw/index.html @@ -9,10 +9,10 @@ some very basic peripherals defined: counter, timer interrupt and a debug output
      3. Install Java
      4. Start Cygwin bash
      5. cd zpu/sw -
      6. unzip tools/zputoolchain.zip -
      7. zpu/sw/install/bin now has the .exe files for the GCC toolchain & GDB -
      8. You may want to add install/bin from zputoolchain.zip to PATH.
        -export PATH=$PATH:<unzipdir>/install/bin +
      9. sh setup.sh +
      10. /tmp/zpu/install/bin now has the .exe files for the GCC toolchain & GDB +
      11. Optionally you may set up PATH variables to point to /tmp/zpu/install/bin
        +source env.sh

      Hello world example

      The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. diff --git a/zpu/sw/setup.sh b/zpu/sw/setup.sh new file mode 100644 index 0000000..57747f8 --- /dev/null +++ b/zpu/sw/setup.sh @@ -0,0 +1,6 @@ +. env.sh +rm -rf /tmp/zpu +mkdir -p /tmp/zpu/install/bin +cd /tmp/zpu +unzip $ZPUSW/tools/zputoolchain.zip + -- cgit v1.1 From fbe743288c676e94b52849f083a9f3d5015a13ed Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 22 Feb 2008 07:57:20 +0000 Subject: wip porting zpu_core_bram.vhd from ZPU3. --- zpu/hdl/zpu4/src/bram_dmips.vhd | 6 +- zpu/hdl/zpu4/src/simzpu_bram.do | 28 ++ zpu/hdl/zpu4/src/zpu_config_trace.vhd | 1 + zpu/hdl/zpu4/src/zpu_core_bram.vhd | 780 ++++++++++++++++++++++++++++++++++ zpu/hdl/zpu4/src/zpu_core_small.vhd | 13 - zpu/hdl/zpu4/src/zpupkg.vhd | 13 + 6 files changed, 825 insertions(+), 16 deletions(-) create mode 100644 zpu/hdl/zpu4/src/simzpu_bram.do create mode 100644 zpu/hdl/zpu4/src/zpu_core_bram.vhd diff --git a/zpu/hdl/zpu4/src/bram_dmips.vhd b/zpu/hdl/zpu4/src/bram_dmips.vhd index 1c85e0d..83bfc28 100644 --- a/zpu/hdl/zpu4/src/bram_dmips.vhd +++ b/zpu/hdl/zpu4/src/bram_dmips.vhd @@ -10,11 +10,11 @@ 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); + 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(maxAddrBit downto minAddrBit); + 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 dualport_ram; @@ -22,7 +22,7 @@ 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); +type ram_type is array(0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); shared variable ram : ram_type := ( diff --git a/zpu/hdl/zpu4/src/simzpu_bram.do b/zpu/hdl/zpu4/src/simzpu_bram.do new file mode 100644 index 0000000..1c8673d --- /dev/null +++ b/zpu/hdl/zpu4/src/simzpu_bram.do @@ -0,0 +1,28 @@ +# Xilinx WebPack modelsim script +# +# cd C:/workspace/zpu/zpu/hdl/zpu4/src +# do simzpu_bram.do + +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_bram.vhd +vcom -93 -explicit bram_dmips.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 1us diff --git a/zpu/hdl/zpu4/src/zpu_config_trace.vhd b/zpu/hdl/zpu4/src/zpu_config_trace.vhd index a2d7d9d..4d0f15f 100644 --- a/zpu/hdl/zpu4/src/zpu_config_trace.vhd +++ b/zpu/hdl/zpu4/src/zpu_config_trace.vhd @@ -12,6 +12,7 @@ package zpu_config is constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64"; constant maxAddrBitIncIO : integer := 27; constant maxAddrBitDRAM : integer := 16; + constant maxAddrBitBRAM : integer := 16; constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8"; end zpu_config; diff --git a/zpu/hdl/zpu4/src/zpu_core_bram.vhd b/zpu/hdl/zpu4/src/zpu_core_bram.vhd new file mode 100644 index 0000000..0bedba3 --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_core_bram.vhd @@ -0,0 +1,780 @@ +-- Company: ZPU3 +-- 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; + + +-- io_busy : in std_logic; +-- io_read : in std_logic_vector(7 downto 0); +-- io_write : out std_logic_vector(7 downto 0); +-- io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); +-- io_writeEnable : out std_logic; +-- io_readEnable : out std_logic; + + +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_ResyncDecode, +State_WriteIODone, +State_Execute, +State_StoreToStack, +State_Add, +State_Or, +State_And, +State_Store, +State_ReadIO, +State_WriteIO, +State_Load, +State_ResyncStack, +State_AddSP, +State_ReadIODone, +State_Decode, +State_LoadByte1, +State_LoadByte2, +State_StoreByte1, +State_StoreByte2, +State_Mult1, +State_Mult2, +State_Mult3 +); + +type DecodedOpcodeType is +( +Decoded_Nop, +Decoded_Im, +Decoded_ImShift, +Decoded_LoadSP, +Decoded_StoreSP, +Decoded_AddSP, +Decoded_Emulate, +Decoded_Break, +Decoded_PushPC, +Decoded_PushSP, +Decoded_PopPC, +Decoded_Add, +Decoded_Or, +Decoded_And, +Decoded_Load, +Decoded_Not, +Decoded_Flip, +Decoded_Store, +Decoded_PopSP, +Decoded_Ashiftleft, +Decoded_Ashiftright, +Decoded_Lshiftright, +Decoded_Eqbranch, +Decoded_Neqbranch, +Decoded_Eq, +Decoded_Neq, +Decoded_Loadb, +Decoded_Lessthan, +Decoded_Lessthanorequal, +Decoded_Ulessthan, +Decoded_Ulessthanorequal, +Decoded_Storeb, +Decoded_Lshift2, +Decoded_DoubleIm, +Decoded_AddIm, +Decoded_Mult16x16, +Decoded_Swap, +Decoded_Callpcrel, +Decoded_Pushspadd +); + + +signal mult1 : std_logic_vector(wordSize/2-1 downto 0); +signal mult2 : std_logic_vector(wordSize/2-1 downto 0); +signal multResult : std_logic_vector(wordSize-1 downto 0); + +signal storeByte : std_logic_vector(7 downto 0); +signal byteSelect : std_logic_vector(minAddrBit-1 downto 0); + +signal opcode : std_logic_vector(OpCode_Size-1 downto 0); +signal opcode2 : std_logic_vector(OpCode_Size-1 downto 0); + +signal decodedOpcode : 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 + ); + + + + process(clk, areset) + begin + if (clk'event and clk = '1') then + multResult <= mult1 * mult2; + end if; + end process; + + + + opcodeControl: + process(clk, areset) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + variable tOpcode2 : std_logic_vector(OpCode_Size-1 downto 0); + variable spOffset : std_logic_vector(4 downto 0); + variable spOffset2 : std_logic_vector(4 downto 0); + variable nextPC : std_logic_vector(maxAddrBit downto 0); + variable pushspaddTemp : std_logic_vector(maxAddrBit downto minAddrBit); + variable tempVal : std_logic_vector(wordSize-1 downto 0); + variable compareA : signed(wordSize-1 downto 0); + variable compareB : signed(wordSize-1 downto 0); + begin + if areset = '1' then + mult1 <= (others => '0'); + mult2 <= (others => '0'); + state <= State_ResyncDecode; + 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'; + decodedOpcode <= Decoded_Break; + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + opcode <= (others => '0'); + out_mem_addr <= (others => '0'); + mem_write <= (others => '0'); + elsif (clk'event and clk = '1') then + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + + out_mem_writeEnable <= '0'; + out_mem_readEnable <= '0'; + out_mem_addr <= memARead(maxAddrBitIncIO downto 0); + begin_inst <= '0'; + + case state is + when State_Decode => + nextPC:=pc+1; + case pc(1 downto 0) is + when "00" => tOpcode := memARead(31 downto 24); + when "01" => tOpcode := memARead(23 downto 16); + when "10" => tOpcode := memARead(15 downto 8); + when others => tOpcode := memARead(7 downto 0); + end case; + case nextPC(1 downto 0) is + when "00" => tOpcode2 := memBRead(31 downto 24); + when "01" => tOpcode2 := memBRead(23 downto 16); + when "10" => tOpcode2 := memBRead(15 downto 8); + when others => tOpcode2 := memBRead(7 downto 0); + end case; + idim_flag <= tOpcode(7); + opcode <= tOpcode; + opcode2 <= tOpcode2; + if (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 4)=0 and tOpcode2(3 downto 0)=Opcode_Add and idim_flag='0') then + idim_flag <= '0'; + decodedOpcode <= Decoded_AddIm; + nextPC := pc + 2; + elsif (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 7)=OpCode_Im and idim_flag='0') then + decodedOpcode <= Decoded_DoubleIm; + nextPC := pc + 2; + elsif (tOpcode(7 downto 4)=OpCode_AddSP and tOpcode(3 downto 0)=0 and + tOpcode2(7 downto 4)=OpCode_AddSP and tOpcode2(3 downto 0)=0) then + decodedOpcode <= Decoded_Lshift2; + nextPC := pc + 2; + elsif (tOpcode(7 downto 7)=OpCode_Im) then + if (idim_flag='1') then + decodedOpcode<=Decoded_ImShift; + else + decodedOpcode<=Decoded_Im; + end if; + elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then + decodedOpcode<=Decoded_StoreSP; + elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then + decodedOpcode<=Decoded_LoadSP; + elsif (tOpcode(7 downto 5)=OpCode_Emulate) then + if tOpcode(5 downto 0)=OpCode_Eqbranch then + decodedOpcode <= Decoded_Eqbranch; + elsif tOpcode(5 downto 0)=OpCode_Neqbranch then + decodedOpcode <= Decoded_Neqbranch; + elsif tOpcode(5 downto 0)=OpCode_Eq then + decodedOpcode <= Decoded_Eq; + elsif tOpcode(5 downto 0)=OpCode_Neq then + decodedOpcode <= Decoded_Neq; + elsif tOpcode(5 downto 0)=OpCode_Lessthan then + decodedOpcode <= Decoded_Lessthan; + elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then + decodedOpcode <= Decoded_Lessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Ulessthan then + decodedOpcode <= Decoded_Ulessthan; + elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then + decodedOpcode <= Decoded_Ulessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Loadb then + decodedOpcode <= Decoded_Loadb; + elsif tOpcode(5 downto 0)=OpCode_Storeb then + decodedOpcode <= Decoded_Storeb; + elsif tOpcode(5 downto 0)=OpCode_Mult16x16 then + decodedOpcode <= Decoded_Mult16x16; + elsif tOpcode(5 downto 0)=OpCode_Swap then + decodedOpcode <= Decoded_Swap; + elsif tOpcode(5 downto 0)=OpCode_Callpcrel then + decodedOpcode <= Decoded_Callpcrel; + elsif tOpcode(5 downto 0)=OpCode_Pushspadd then + decodedOpcode <= Decoded_Pushspadd; +-- elsif tOpcode(5 downto 0)=OpCode_Lshiftright then +-- decodedOpcode <= Decoded_Lshiftright; +-- elsif tOpcode(5 downto 0)=OpCode_Ashiftleft then +-- decodedOpcode <= Decoded_Ashiftleft; +-- elsif tOpcode(5 downto 0)=OpCode_Ashiftright then +-- decodedOpcode <= Decoded_Ashiftright; + else + decodedOpcode<=Decoded_Emulate; + end if; + elsif (tOpcode(7 downto 4)=OpCode_AddSP) then + decodedOpcode<=Decoded_AddSP; + else + case tOpcode(3 downto 0) is + when OpCode_PushSP => + decodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + decodedOpcode<=Decoded_PopPC; + when OpCode_Add => + decodedOpcode<=Decoded_Add; + when OpCode_Or => + decodedOpcode<=Decoded_Or; + when OpCode_And => + decodedOpcode<=Decoded_And; + when OpCode_Load => + decodedOpcode<=Decoded_Load; + when OpCode_Not => + decodedOpcode<=Decoded_Not; + when OpCode_Flip => + decodedOpcode<=Decoded_Flip; + when OpCode_Store => + decodedOpcode<=Decoded_Store; + when OpCode_PopSP => + decodedOpcode<=Decoded_PopSP; + when OpCode_Break => + decodedOpcode<=Decoded_Break; + when others => + decodedOpcode<=Decoded_Nop; + end case; + end if; + -- Fetch the two next opcodes... :-) + memAAddr <= nextPC(maxAddrBit downto minAddrBit); + nextPC:=nextPC+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Execute; + when State_Execute => + state <= State_Decode; + -- 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_sp <= (others => '0'); + trace_sp(maxAddrBit downto minAddrBit) <= sp; + trace_opcode <= opcode; + 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); + spOffset2(4):=not opcode2(4); + spOffset2(3 downto 0):=opcode2(3 downto 0); + + case decodedOpcode is + + when Decoded_DoubleIm => + memAWriteEnable <= '1'; + sp <= sp - 1; + memAAddr <= sp-1; + for i in wordSize-1 downto 14 loop + memAWrite(i) <= opcode(6); + end loop; + memAWrite(13 downto 7) <= opcode(6 downto 0); + memAWrite(6 downto 0) <= opcode2(6 downto 0); + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + pc <= pc + 2; + when Decoded_Im => + memAWriteEnable <= '1'; + 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); + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_ImShift => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= opcode(6 downto 0); + memBAddr <= sp + 1; + when Decoded_StoreSP => + memAWriteEnable <= '1'; + memAAddr <= sp+spOffset; + memAWrite <= memARead; + -- avoid address crashes. + memBAddr <= sp - 1; + sp <= sp + 1; + state <= State_ResyncDecode; + when Decoded_LoadSP => + sp <= sp - 1; + if (spOffset = 0) then + -- This is a duplicate instruction. + memAAddr <= sp-1; + memAWriteEnable <= '1'; + memAWrite <= memARead; + else + memAAddr <= sp+spOffset; + end if; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_Callpcrel => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc + 1; + memBAddr <= sp+1; + pc <= pc + memARead(maxAddrBit downto 0); + state <= State_ResyncDecode; + when Decoded_Emulate => + sp <= sp - 1; + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc + 1; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + pc <= (others => '0'); + pc(9 downto 5) <= opcode(4 downto 0); + state <= State_ResyncDecode; + when Decoded_AddSP => + if spOffset=0 then + -- avoid address line crashes... + -- FIX!!! is this an issue? + -- oh-well. While we are at it, we've got a faster + -- shift operation without updating the toolchain. + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= memARead + memARead; + memBAddr <= sp+1; + else + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= memARead; + memBAddr <= sp+spOffset; + state <= State_AddSP; + end if; + 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; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_Pushspadd => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => DontCareValue); + pushspaddTemp := memARead(maxAddrBit-minAddrBit downto 0); + memAWrite(maxAddrBit downto minAddrBit) <= sp+pushspaddTemp; + memBAddr <= sp+1; + when Decoded_PopPC => + memAAddr <= sp; + pc <= memARead(maxAddrBit downto 0); + sp <= sp + 1; + state <= State_ResyncDecode; + when Decoded_AddIm => + memAWriteEnable <= '1'; + memAAddr <= sp; + tempVal(wordSize-1 downto 7) := (others => tOpcode(6)); + tempVal(6 downto 0) := tOpcode(6 downto 0); + memAWrite <= memARead + tempVal; + memBAddr <= sp + 1; + pc <= pc + 2; + when Decoded_Add => + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Or => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAWrite <= memARead or memBRead; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + when Decoded_And => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAWrite <= memARead and memBRead; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + 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); + memBAddr <= sp + 1; + end if; + when Decoded_Swap => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize/2-1 downto 0) <= memARead(wordSize-1 downto wordSize/2); + memAWrite(wordSize-1 downto wordSize/2) <= memARead(wordSize/2-1 downto 0); + memBAddr <= sp + 1; + when Decoded_Not => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= not memARead; + memBAddr <= sp + 1; + when Decoded_Flip => + memAAddr <= sp; + memAWriteEnable <= '1'; + for i in 0 to wordSize-1 loop + memAWrite(i) <= memARead(wordSize-1-i); + end loop; + memBAddr <= sp + 1; + when Decoded_Lshift2 => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(1 downto 0) <= (others => '0'); + memAWrite(wordSize-1 downto 2) <= memARead(wordSize-1-2 downto 0); + memBAddr <= sp + 1; + pc <= pc + 2; + when Decoded_Store => + sp <= sp + 2; + if (memARead(ioBit)='1') then + out_mem_writeEnable <= '1'; + out_mem_addr <= memARead(maxAddrBitIncIO downto 0); + mem_write <= memBRead; + state <= State_WriteIO; + else + memAWriteEnable <= '1'; + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memAWrite <= memBRead; + state <= State_ResyncDecode; + end if; + when Decoded_PopSP => + sp <= memARead(maxAddrBit downto minAddrBit); + state <= State_ResyncDecode; + when Decoded_Ashiftleft => + memAWrite(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))) <= + memBRead(wordSize-conv_integer(memARead(wordPower-1 downto 0))-1 downto 0); + if memARead(wordPower-1 downto 0)/=0 then + memAWrite(conv_integer(memARead(wordPower-1 downto 0))-1 downto 0) <= (others => '0'); + end if; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Ashiftright | Decoded_Lshiftright => + memAWrite(wordSize-1-conv_integer(memARead(wordPower-1 downto 0)) downto 0) <= + memBRead(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))); + if memARead(wordPower-1 downto 0)/=0 then + if decodedOpcode=Decoded_Ashiftright and memBRead(wordSize-1)='1' then + memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '1'); + else + memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '0'); + end if; + end if; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Eqbranch => + sp <= sp + 2; + if (memBRead=0) then + pc <= memARead(maxAddrBit downto 0) + pc; + end if; + state <= State_ResyncDecode; + when Decoded_Neqbranch => + sp <= sp + 2; + if (memBRead/=0) then + pc <= memARead(maxAddrBit downto 0) + pc; + end if; + state <= State_ResyncDecode; + when Decoded_Eq => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Neq => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead/=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Ulessthan => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead<=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Lessthan => + sp <= sp + 1; + memAWrite <= (others => '0'); + compareA := signed(memARead); + compareB := signed(memBRead); + if (compareA + sp <= sp + 1; + memAWrite <= (others => '0'); + compareA := signed(memARead); + compareB := signed(memBRead); + if (compareA<=compareB) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Loadb => + byteSelect <= memARead(minAddrBit-1 downto 0); + memAAddr <= memARead(maxAddrBit downto minAddrBit); + state <= State_LoadByte1; + when Decoded_Storeb => + sp <= sp + 2; + byteSelect <= memARead(minAddrBit-1 downto 0); + storeByte <= memBRead(7 downto 0); + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memBAddr <= sp; + state <= State_StoreByte1; + when Decoded_Mult16x16 => + mult1 <= memARead(wordSize/2-1 downto 0); + mult2 <= memBRead(wordSize/2-1 downto 0); + sp <= sp + 1; + state <= State_Mult1; + when others => + -- nop. Here we persist whatever was loaded into + -- memARead + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead; + memBAddr <= sp + 1; + + end case; + when State_ReadIO => + state <= State_ReadIODone; + when State_ReadIODone => + if (in_mem_busy = '0') then + state <= State_ResyncDecode; + memAWriteEnable <= '1'; + memAWrite <= (others => '0'); + memAWrite <= mem_read; + memAAddr <= sp; + end if; + when State_WriteIO => + state <= State_WriteIODone; + when State_WriteIODone => + if (in_mem_busy = '0') then + state <= State_ResyncDecode; + end if; + when State_ResyncDecode => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_ResyncStack; + when State_ResyncStack => + memAAddr <= sp; + memBAddr <= sp+1; + state <= State_Decode; + when State_AddSP => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Add; + when State_Add => + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + when State_LoadByte1 => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_LoadByte2; + when State_LoadByte2 => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => '0'); + case byteSelect is + when "00" => memAWrite(7 downto 0) <= memARead(31 downto 24); + when "01" => memAWrite(7 downto 0) <= memARead(23 downto 16); + when "10" => memAWrite(7 downto 0) <= memARead(15 downto 8); + when others => memAWrite(7 downto 0) <= memARead(7 downto 0); + end case; + memBAddr <= sp + 1; + state <= State_Decode; + when State_StoreByte1 => + state <= State_StoreByte2; + when State_StoreByte2 => + memAWriteEnable <= '1'; + memAAddr <= memBRead(maxAddrBit downto minAddrBit); + memAWrite <= memARead; + case byteSelect is + when "00" => memAWrite(31 downto 24) <= storeByte; + when "01" => memAWrite(23 downto 16) <= storeByte; + when "10" => memAWrite(15 downto 8) <= storeByte; + when others => memAWrite(7 downto 0) <= storeByte; + end case; + state <= State_ResyncDecode; + when State_Mult1 => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Mult2; + when State_Mult2 => + memAWriteEnable <= '1'; + memAWrite <= multResult; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + + when others => + null; + 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 index 8ebd40d..4d73f88 100644 --- a/zpu/hdl/zpu4/src/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/src/zpu_core_small.vhd @@ -27,19 +27,6 @@ end zpu_core; architecture behave of zpu_core is -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; - - signal readIO : std_logic; diff --git a/zpu/hdl/zpu4/src/zpupkg.vhd b/zpu/hdl/zpu4/src/zpupkg.vhd index fd00b9e..32e162b 100644 --- a/zpu/hdl/zpu4/src/zpupkg.vhd +++ b/zpu/hdl/zpu4/src/zpupkg.vhd @@ -24,6 +24,19 @@ package zpupkg is 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; -- cgit v1.1 From 648a70893907a9cb446f1546d4fd39cf6457f0e8 Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 22 Feb 2008 12:38:46 +0000 Subject: * Hooked up support for the simulator to the Zylin Embedded CDT --- zpu/sw/simulator/.classpath | 1 + zpu/sw/simulator/.project | 11 + zpu/sw/simulator/ChangeLog | 2 + zpu/sw/simulator/META-INF/MANIFEST.MF | 11 + zpu/sw/simulator/build.properties | 3 + zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java | 2 +- .../simulator/com/zylin/zpu/simulator/SimApp.java | 93 +++++- .../com/zylin/zpu/simulator/Simulator.java | 2 + .../simulator/exceptions/EndSessionException.java | 24 ++ .../com/zylin/zpu/simulator/gdb/GDBServer.java | 313 +++------------------ .../com/zylin/zpu/simulator/gdb/Packet.java | 23 +- 11 files changed, 188 insertions(+), 297 deletions(-) create mode 100644 zpu/sw/simulator/META-INF/MANIFEST.MF create mode 100644 zpu/sw/simulator/build.properties diff --git a/zpu/sw/simulator/.classpath b/zpu/sw/simulator/.classpath index 617be7e..5e4fa9f 100644 --- a/zpu/sw/simulator/.classpath +++ b/zpu/sw/simulator/.classpath @@ -2,5 +2,6 @@ + diff --git a/zpu/sw/simulator/.project b/zpu/sw/simulator/.project index 9cd2fd7..29c7a4f 100644 --- a/zpu/sw/simulator/.project +++ b/zpu/sw/simulator/.project @@ -10,8 +10,19 @@ + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + org.eclipse.jdt.core.javanature + org.eclipse.pde.PluginNature diff --git a/zpu/sw/simulator/ChangeLog b/zpu/sw/simulator/ChangeLog index c645841..18b0981 100644 --- a/zpu/sw/simulator/ChangeLog +++ b/zpu/sw/simulator/ChangeLog @@ -1,2 +1,4 @@ +2008-02-22 Øyvind Harboe + * Hooked up support for the simulator to the Zylin Embedded CDT 2007-08-04 Øyvind Harboe * First version after open sourcing ZPU diff --git a/zpu/sw/simulator/META-INF/MANIFEST.MF b/zpu/sw/simulator/META-INF/MANIFEST.MF new file mode 100644 index 0000000..b0ad5b9 --- /dev/null +++ b/zpu/sw/simulator/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: ZPU simulator +Bundle-SymbolicName: com.zylin.zpu.simulator +Bundle-Version: 1.0.0 +Export-Package: com.zylin.zpu.simulator, + com.zylin.zpu.simulator.applet, + com.zylin.zpu.simulator.exceptions, + com.zylin.zpu.simulator.gdb, + com.zylin.zpu.simulator.tools, + com.zylin.zpu.stats diff --git a/zpu/sw/simulator/build.properties b/zpu/sw/simulator/build.properties new file mode 100644 index 0000000..19c7019 --- /dev/null +++ b/zpu/sw/simulator/build.properties @@ -0,0 +1,3 @@ +source.. = . +bin.includes = META-INF/,\ + . diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java index 862deae..0e3e7a1 100644 --- a/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java @@ -98,7 +98,7 @@ public class Phi extends Simulator } } - Phi() throws CPUException + public Phi() throws CPUException { } diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/SimApp.java b/zpu/sw/simulator/com/zylin/zpu/simulator/SimApp.java index 8008275..3f6e1a9 100644 --- a/zpu/sw/simulator/com/zylin/zpu/simulator/SimApp.java +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/SimApp.java @@ -2,6 +2,8 @@ package com.zylin.zpu.simulator; import java.io.IOException; import java.net.InetSocketAddress; +import java.net.ServerSocket; +import java.net.Socket; import java.nio.channels.ServerSocketChannel; import com.zylin.zpu.simulator.exceptions.CPUException; @@ -10,7 +12,6 @@ import com.zylin.zpu.simulator.gdb.GDBServer; public class SimApp { private static Simulator simulator; - public ServerSocketChannel channel; private String[] args; private int portNumber; private SimFactory simFactory; @@ -40,39 +41,65 @@ public class SimApp void run(String[] args) { this.args=args; + createSimulator(); parseArgs(); + moreParse(); + runSimAndGDB(); + } + Object launched=new Object(); + private boolean doneLaunching; + private boolean manyGDBSessions; + public ServerSocket serverSocket; + public void runSimAndGDB() + { try { - channel = ServerSocketChannel.open(); + serverSocket = new ServerSocket(portNumber); try { + serverSocket.setReuseAddress(true); System.out.println("Listening on port " + portNumber); - channel.socket().bind(new InetSocketAddress(portNumber)); - for (;;) - { + setLaunchedFlag(); + do + { try { - simulator=simFactory.create(); - simulator.suspend(); - moreParse(); - run(); + runGDBServer(); } catch (CPUException e) { e.printStackTrace(); - } - } + } + } while (manyGDBSessions); } finally { - channel.close(); + serverSocket.close(); } } catch (IOException e1) { e1.printStackTrace(); + } finally + { + setLaunchedFlag(); } } - private void run() throws CPUException + private void setLaunchedFlag() + { + synchronized(launched) + { + doneLaunching=true; + launched.notify(); + } + } + + public void createSimulator() + { + simulator=simFactory.create(); + simulator.suspend(); + } + + private void runGDBServer() throws CPUException { final GDBServer gdbServer=new GDBServer(simulator, this); simulator.setSyscall(gdbServer); @@ -98,7 +125,6 @@ public class SimApp } finally { - try { thread.join(); @@ -109,4 +135,43 @@ public class SimApp } } + + public Simulator getSimulator() + { + return simulator; + } + + public void setPort(int i) + { + portNumber=i; + } + + /** synchronous launch of GDB server */ + public void launchGDBServer() + { + Thread t=new Thread(new Runnable() + { + + public void run() + { + runSimAndGDB(); + } + }); + t.start(); + synchronized (launched) + { + while (!doneLaunching) + { + try + { + launched.wait(2000); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + } + + + } } diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java index c1b86d4..791e253 100644 --- a/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java @@ -268,6 +268,8 @@ public class Simulator implements ZPU, Machine, Sim **/ private void dumpGmon() { + if (memory==null) + return; try { ByteArrayOutputStream b=new ByteArrayOutputStream(); diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/EndSessionException.java b/zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/EndSessionException.java index 7dd27e0..13fc875 100644 --- a/zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/EndSessionException.java +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/EndSessionException.java @@ -15,6 +15,30 @@ package com.zylin.zpu.simulator.exceptions; public class EndSessionException extends Exception { + public EndSessionException() + { + super(); + // TODO Auto-generated constructor stub + } + + public EndSessionException(String arg0, Throwable arg1) + { + super(arg0, arg1); + // TODO Auto-generated constructor stub + } + + public EndSessionException(String arg0) + { + super(arg0); + // TODO Auto-generated constructor stub + } + + public EndSessionException(Throwable arg0) + { + super(arg0); + // TODO Auto-generated constructor stub + } + /** * */ diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/GDBServer.java b/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/GDBServer.java index 2580ded..182e426 100644 --- a/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/GDBServer.java +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/GDBServer.java @@ -5,6 +5,7 @@ package com.zylin.zpu.simulator.gdb; import java.io.IOException; +import java.net.Socket; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; @@ -23,30 +24,25 @@ import com.zylin.zpu.simulator.exceptions.UnsupportedSyscallException; public class GDBServer implements Host { + /* logging filter */ static final boolean UNKNOWN=false; static final boolean ALL=false; static final boolean CPUEXCEPTION = false; static protected boolean MINIMAL=true; - static boolean PACKET=false; - static boolean REPLY=false; + static boolean PACKET=true; + static boolean REPLY=true; static protected boolean IGNOREDEXCEPTIONS=false; + + + protected Throwable packetException; protected Object packetReady=new Object(); private Packet packet; boolean done; - private Thread asyncMessage; - private Object listenBreak=new Object(); - private boolean listenForBreak; - private boolean sleeping; - private ByteBuffer readBuffer; - private ByteBuffer writeBuffer; - private SocketChannel sc; - private Selector selectorRead; - private Selector selectorWrite; + private Socket sc; public boolean alive; static private int sessionNr; private SimApp app; - private boolean stopAsyncMessage; Sim simulator; public GDBServer(Sim simulator, SimApp app) @@ -66,39 +62,10 @@ public class GDBServer implements Host /** infinite loop that waits for debug sessions to be initiated via TCP/IP */ public void gdbServer() throws MemoryAccessException, IOException, GDBServerException, EndSessionException { + sc=app.serverSocket.accept(); try { - asyncMessage = new Thread(new Runnable() - { - public void run() - { - asyncMessage(); - } - }); - asyncMessage.start(); - try - { - readBuffer = ByteBuffer.allocate(1); - writeBuffer = ByteBuffer.allocate(128); - debugSession(); - } - finally - { - /* tell it to stop waiting for break chars and wake up the thread */ - stopAsyncMessage = true; - synchronized(listenBreak) - { - listenBreak.notify(); - } - - try - { - asyncMessage.join(); - } catch (InterruptedException e3) - { - e3.printStackTrace(); - } - } + debugSession(); } catch (IOException e) { // the session failed... @@ -119,111 +86,12 @@ public class GDBServer implements Host { // some terrible unforseen failure. e.printStackTrace(); - } - } - - /** - * We have to wait for break, but as soon as the main thread wants to wait - * for packets again, we have to stop waiting for a break. - * - * Tricky.... - */ - private void asyncMessage() - { - for (;;) + } finally { - synchronized(listenBreak) - { - if (stopAsyncMessage) - { - /* shutting down */ - return; - } - try - { - sleeping=true; - listenBreak.notify(); - - listenBreak.wait(); - sleeping=false; - listenBreak.notify(); - } catch (InterruptedException e) - { - e.printStackTrace(); - } - if (stopAsyncMessage) - { - /* shutting down */ - return; - } - } - - while (listenForBreak) - { - try - { - if (waitSelect(selectorRead, true)) - { - int t = read(); - if (t == 0x03) - { - // We received a ctrl-c while processing a package, - // this - // would be a suspend - simulator.suspend(); - } else - { - // ignore garbage. Shouldn't happen. - } - } else - { - // we've been awoken since we're ready to send - // the reply to the package... -// int x=0; - } - } catch (IOException e) - { - // Perfectly normal. This would happen if the connection - // is terminated. - } - } + sc.close(); } } - /** wait for read/write ready */ - private boolean waitSelect(Selector selector, boolean read) throws IOException - { - boolean gotit=false; - - selector.select(1000); - if (!sc.isOpen()) - { - throw new IOException("Channel closed"); - } - if (!sc.isConnected()) - { - throw new IOException("Channel not connected"); - } - - // Get list of selection keys with pending events - Iterator it = selector.selectedKeys().iterator(); - // Process each key at a time - while (it.hasNext()) - { - // Get the selection key - SelectionKey selKey = (SelectionKey) it.next(); - // Remove it from the list to indicate that it is being - // processed - it.remove(); - if (selKey.isValid() && - ((read && selKey.isReadable()) || (!read && selKey.isWritable()))) - { - gotit=true; - } - - } - return gotit; - } protected void sleepABit() @@ -243,44 +111,18 @@ public class GDBServer implements Host { print(MINIMAL, "GDB server waiting for connection " + sessionNr++ + "..."); - writeBuffer.clear(); - readBuffer.clear(); - - - selectorRead = Selector.open(); try { - selectorWrite = Selector.open(); - try - { - sc = app.channel.accept(); - try - { - sc.socket().setKeepAlive(true); - sc.configureBlocking(false); - sc.register(selectorRead, SelectionKey.OP_READ); - sc.register(selectorWrite, SelectionKey.OP_WRITE); - - sessionStarted(); - - expect('+'); // connection ack. - - sessionLoop(); - } finally - { - sc.close(); - - print(MINIMAL, "Session ended"); - } - } finally - { - selectorWrite.close(); - } + sessionStarted(); + + expect('+'); // connection ack. + + sessionLoop(); } finally { - selectorRead.close(); + print(MINIMAL, "Session ended"); } - + } private void sessionStarted() @@ -301,19 +143,8 @@ public class GDBServer implements Host packet=new Packet(this); packet.receive(); - enterListenForCtrlC(); - - try - { - // During execution we can receive an abort/suspend command... - packet.parseAndExecute(); - } - finally - { - leaveListenForCtrlC(); - } - - packet.sendReply(); + // During execution we can receive an abort/suspend command... + packet.parseAndExecute(); if (!alive) throw new EndSessionException(); @@ -337,41 +168,6 @@ public class GDBServer implements Host } } - private void enterListenForCtrlC() - { - setBreakListen(true); - } - - private void leaveListenForCtrlC() - { - /* we don't want to wait for the select to time out as that would make - * the protocol excruciatingly slow */ - setBreakListen(false); - selectorRead.wakeup(); - synchronized(listenBreak) - { - try - { - while (!sleeping) - { - listenBreak.notify(); - listenBreak.wait(); - } - } catch (InterruptedException e) - { - e.printStackTrace(); - } - } - } - - private void setBreakListen(boolean state) - { - synchronized(listenBreak) - { - listenForBreak=state; - listenBreak.notify(); - } - } @@ -387,19 +183,9 @@ public class GDBServer implements Host int read() throws IOException { flush(); - readBuffer.clear(); - for (;;) - { - int n; - n = sc.read(readBuffer); - if (n == 1) - { - break; - } - while (!waitSelect(selectorRead, true)); - } - readBuffer.flip(); - int t = readBuffer.get(0); + int t=sc.getInputStream().read(); + if (t==-1) + throw new IOException(); return t; } @@ -429,42 +215,12 @@ public class GDBServer implements Host public void write(byte[] bytes) throws IOException { - int i=0; - while (i0) - { - writeBuffer.flip(); - int len=writeBuffer.limit(); - - int j=0; - while (j Date: Fri, 22 Feb 2008 17:38:08 +0000 Subject: * reduced memory for Phi to 2mByte to avoid Java heap out of memory. Why does Java have trouble allocating a meagre 32mByte long array? :-) --- zpu/sw/simulator/ChangeLog | 2 ++ zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java | 2 +- zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/zpu/sw/simulator/ChangeLog b/zpu/sw/simulator/ChangeLog index 18b0981..2f54967 100644 --- a/zpu/sw/simulator/ChangeLog +++ b/zpu/sw/simulator/ChangeLog @@ -1,4 +1,6 @@ 2008-02-22 Øyvind Harboe + * reduced memory for Phi to 2mByte to avoid Java heap out of memory. + Why does Java have trouble allocating a meagre 32mByte long array? :-) * Hooked up support for the simulator to the Zylin Embedded CDT 2007-08-04 Øyvind Harboe * First version after open sourcing ZPU diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java index 0e3e7a1..663e68f 100644 --- a/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java @@ -114,7 +114,7 @@ public class Phi extends Simulator protected int getRAMSIZE() { - return 32*1024*1024; + return 2*1024*1024; } diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java index 791e253..cf6cf41 100644 --- a/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java @@ -1942,7 +1942,7 @@ public class Simulator implements ZPU, Machine, Sim protected int getRAMSIZE() { - return (16*1024*1024); + return (2*1024*1024); } protected int getStartStack() -- cgit v1.1 From d2ee4c79d7b0abdfd70eaf2e46da54183a2caeaa Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 6 Mar 2008 20:04:57 +0000 Subject: * zpu/zpu/hdl/example/zpuromgen.c - generate rom files without java --- zpu/ChangeLog | 3 +++ zpu/hdl/example/zpuromgen.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 zpu/hdl/example/zpuromgen.c diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 1e5545b..7878ea1 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,6 @@ +2008-03-06 Adam Pierce + * zpu/zpu/hdl/example/zpuromgen.c - generate rom files + without java 2008-02-21 Øyvind Harboe * zpu/zpu/sw/index.html. Changed it a bit to make installation easier. * zpu/zpu/hdl/index.html. Sharpened instructions and shows two working diff --git a/zpu/hdl/example/zpuromgen.c b/zpu/hdl/example/zpuromgen.c new file mode 100644 index 0000000..fb8c4ba --- /dev/null +++ b/zpu/hdl/example/zpuromgen.c @@ -0,0 +1,59 @@ +// zpuromgen.c +// +// Program to turn a binary file into a VHDL lookup table. +// by Adam Pierce +// 29-Feb-2008 +// +// This software is free to use by anyone for any purpose. +// + +#include +#include + +typedef uint8_t BYTE; + +main(int argc, char **argv) +{ + BYTE opcode[4]; + int fd; + int addr = 0; + ssize_t s; + +// Check the user has given us an input file. + if(argc < 2) + { + printf("Usage: %s \n\n", argv[0]); + return 1; + } + +// Open the input file. + fd = open(argv[1], 0); + if(fd == -1) + { + perror("File Open"); + return 2; + } + + while(1) + { + // Read 32 bits. + s = read(fd, opcode, 4); + if(s == -1) + { + perror("File read"); + return 3; + } + + if(s == 0) + break; // End of file. + + // Output to STDOUT. + printf("%6d => x\"%02x%02x%02x%02x\",\n", + addr++, opcode[0], opcode[1], + opcode[2], opcode[3]); + } + + close(fd); + return 0; +} + -- cgit v1.1 From 830f2d5f90f9a864ad76a9d43a8fcf362ac2b18e Mon Sep 17 00:00:00 2001 From: oharboe Date: Sat, 5 Apr 2008 05:45:13 +0000 Subject: * zpu/docs/zpuphiregs.odt - ZPU Phi register overview --- zpu/.cvsignore | 1 + zpu/ChangeLog | 2 ++ zpu/docs/zpuphiregs.odt | Bin 0 -> 27013 bytes 3 files changed, 3 insertions(+) create mode 100644 zpu/.cvsignore create mode 100644 zpu/docs/zpuphiregs.odt diff --git a/zpu/.cvsignore b/zpu/.cvsignore new file mode 100644 index 0000000..7c32f55 --- /dev/null +++ b/zpu/.cvsignore @@ -0,0 +1 @@ +install diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 7878ea1..8cc3b5b 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,5 @@ +2008-04-05 Øyvind Harboe + * zpu/docs/zpuphiregs.odt - ZPU Phi register overview 2008-03-06 Adam Pierce * zpu/zpu/hdl/example/zpuromgen.c - generate rom files without java diff --git a/zpu/docs/zpuphiregs.odt b/zpu/docs/zpuphiregs.odt new file mode 100644 index 0000000..4b64d50 Binary files /dev/null and b/zpu/docs/zpuphiregs.odt differ -- cgit v1.1 From 4f29574821f2931771b30ee8e2be33030e7695a8 Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 15 Apr 2008 05:58:32 +0000 Subject: * zpu/simzpu_bram.do - retired. * zpu/zpu_core_bram.vhd - retired * zpu/hdl/zpu3 - retired --- zpu/ChangeLog | 4 + zpu/hdl/zpu3/src/.cvsignore | 1 - zpu/hdl/zpu3/src/build.xml | 114 - zpu/hdl/zpu3/src/clocks.vhd | 246 -- zpu/hdl/zpu3/src/ddr_bridge.vhd | 203 -- zpu/hdl/zpu3/src/dmips_ram.vhd | 3824 -------------------- zpu/hdl/zpu3/src/dualport_ram.vhd | 4996 ------------------------- zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd | 5012 -------------------------- zpu/hdl/zpu3/src/helloworld_ram.vhd | 3345 ----------------- zpu/hdl/zpu3/src/ic300.bitgen | 27 - zpu/hdl/zpu3/src/ic300.lso | 1 - zpu/hdl/zpu3/src/ic300.ucf | 146 - zpu/hdl/zpu3/src/ic300.vhd | 144 - zpu/hdl/zpu3/src/ic300_config.vhd | 20 - zpu/hdl/zpu3/src/ic300pkg.vhd | 88 - zpu/hdl/zpu3/src/io.vhd | 95 - zpu/hdl/zpu3/src/log.txt | 156 - zpu/hdl/zpu3/src/niltrace.vhd | 26 - zpu/hdl/zpu3/src/sim_fpga_top.vhd | 127 - zpu/hdl/zpu3/src/status.txt | 67 - zpu/hdl/zpu3/src/testlut.vhd | 106 - zpu/hdl/zpu3/src/timer.vhd | 157 - zpu/hdl/zpu3/src/trace.vhd | 80 - zpu/hdl/zpu3/src/txt_util.vhd | 586 --- zpu/hdl/zpu3/src/xilinx_dualport.vhd | 1482 -------- zpu/hdl/zpu3/src/xmake.filelist | 5 - zpu/hdl/zpu3/src/xmake.xst | 53 - zpu/hdl/zpu3/src/zpu_config.vhd | 25 - zpu/hdl/zpu3/src/zpu_pipelined.vhd | 852 ----- zpu/hdl/zpu3/src/zpu_top.vhd | 421 --- zpu/hdl/zpu3/src/zpu_top_medium.vhd | 768 ---- zpu/hdl/zpu3/src/zpuio.vhd | 180 - zpu/hdl/zpu3/src/zpupkg.vhd | 130 - zpu/hdl/zpu4/src/simzpu_bram.do | 28 - zpu/hdl/zpu4/src/zpu_core_bram.vhd | 780 ---- zpu/roadshow/roadshow/helloworld/test.c | 1 + 36 files changed, 5 insertions(+), 24291 deletions(-) delete mode 100644 zpu/hdl/zpu3/src/.cvsignore delete mode 100644 zpu/hdl/zpu3/src/build.xml delete mode 100644 zpu/hdl/zpu3/src/clocks.vhd delete mode 100644 zpu/hdl/zpu3/src/ddr_bridge.vhd delete mode 100644 zpu/hdl/zpu3/src/dmips_ram.vhd delete mode 100644 zpu/hdl/zpu3/src/dualport_ram.vhd delete mode 100644 zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd delete mode 100644 zpu/hdl/zpu3/src/helloworld_ram.vhd delete mode 100644 zpu/hdl/zpu3/src/ic300.bitgen delete mode 100644 zpu/hdl/zpu3/src/ic300.lso delete mode 100644 zpu/hdl/zpu3/src/ic300.ucf delete mode 100644 zpu/hdl/zpu3/src/ic300.vhd delete mode 100644 zpu/hdl/zpu3/src/ic300_config.vhd delete mode 100644 zpu/hdl/zpu3/src/ic300pkg.vhd delete mode 100644 zpu/hdl/zpu3/src/io.vhd delete mode 100644 zpu/hdl/zpu3/src/log.txt delete mode 100644 zpu/hdl/zpu3/src/niltrace.vhd delete mode 100644 zpu/hdl/zpu3/src/sim_fpga_top.vhd delete mode 100644 zpu/hdl/zpu3/src/status.txt delete mode 100644 zpu/hdl/zpu3/src/testlut.vhd delete mode 100644 zpu/hdl/zpu3/src/timer.vhd delete mode 100644 zpu/hdl/zpu3/src/trace.vhd delete mode 100644 zpu/hdl/zpu3/src/txt_util.vhd delete mode 100644 zpu/hdl/zpu3/src/xilinx_dualport.vhd delete mode 100644 zpu/hdl/zpu3/src/xmake.filelist delete mode 100644 zpu/hdl/zpu3/src/xmake.xst delete mode 100644 zpu/hdl/zpu3/src/zpu_config.vhd delete mode 100644 zpu/hdl/zpu3/src/zpu_pipelined.vhd delete mode 100644 zpu/hdl/zpu3/src/zpu_top.vhd delete mode 100644 zpu/hdl/zpu3/src/zpu_top_medium.vhd delete mode 100644 zpu/hdl/zpu3/src/zpuio.vhd delete mode 100644 zpu/hdl/zpu3/src/zpupkg.vhd delete mode 100644 zpu/hdl/zpu4/src/simzpu_bram.do delete mode 100644 zpu/hdl/zpu4/src/zpu_core_bram.vhd diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 8cc3b5b..e883d0d 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,7 @@ +2008-04-15 Øyvind Harboe + * zpu/simzpu_bram.do - retired. + * zpu/zpu_core_bram.vhd - retired + * zpu/hdl/zpu3 - retired 2008-04-05 Øyvind Harboe * zpu/docs/zpuphiregs.odt - ZPU Phi register overview 2008-03-06 Adam Pierce diff --git a/zpu/hdl/zpu3/src/.cvsignore b/zpu/hdl/zpu3/src/.cvsignore deleted file mode 100644 index 760be11..0000000 --- a/zpu/hdl/zpu3/src/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -xilinx_device_details.xml diff --git a/zpu/hdl/zpu3/src/build.xml b/zpu/hdl/zpu3/src/build.xml deleted file mode 100644 index e1b268a..0000000 --- a/zpu/hdl/zpu3/src/build.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - eCosBoard firmware build file - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/zpu/hdl/zpu3/src/clocks.vhd b/zpu/hdl/zpu3/src/clocks.vhd deleted file mode 100644 index a352b3c..0000000 --- a/zpu/hdl/zpu3/src/clocks.vhd +++ /dev/null @@ -1,246 +0,0 @@ -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/zpu3/src/ddr_bridge.vhd b/zpu/hdl/zpu3/src/ddr_bridge.vhd deleted file mode 100644 index 7dece76..0000000 --- a/zpu/hdl/zpu3/src/ddr_bridge.vhd +++ /dev/null @@ -1,203 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -library UNISIM; -use UNISIM.vcomponents.all; - -library zylin; -use zylin.ddr.all; - -library work; -use work.phi_config.all; - -entity 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 ddr_bridge; - -architecture behave of ddr_bridge is - -signal refresh_en : std_logic; -signal ddr_command_we : std_logic; -signal ddr_command : std_logic_vector(15 downto 0); - -signal ddr_req : std_logic; -signal ddr_req_adr : std_logic_vector(23 downto 1); -signal ddr_rd_wr_n : std_logic; -signal ddr_req_len : std_logic; - -signal ddr_read_en : std_logic; -signal ddr_write_en : std_logic; -signal ddr_data_read : std_logic_vector(31 downto 0); -signal ddr_data_write : std_logic_vector(35 downto 0); - -signal ddr_read_smp : std_logic_vector(31 downto 0); -signal ddr_read_delay : std_logic_vector(15 downto 0); - -signal ddr_write_smp : std_logic_vector(15 downto 0); -signal ddr_addr_smp : std_logic_vector(15 downto 0); - -signal ddr_req_type_smp : std_logic; -signal ddr_req_on : std_logic; -signal ddr_req_off : std_logic; -signal ddr_req_int : std_logic; - -constant Sim_Delay : time := 1.0 ns; - -begin - - ddr_req_len <= '0'; - ddr_data_write <= "0000" & ddr_write_smp & ddr_write_smp; - ddr_req_adr <= "0000000" & ddr_addr_smp; - ddr_rd_wr_n <= ddr_req_type_smp; - ddr_req <= ddr_req_int; - - process(cpu_clk, areset) -- CPU writeable registers - begin - if areset = '1' then - refresh_en <= '0'; - ddr_command_we <= '0'; - ddr_command <= "0000000000000000"; - ddr_write_smp <= "0000000000000000"; - ddr_req_type_smp <= '0'; - ddr_req_on <= '0'; - elsif (cpu_clk'event and cpu_clk = '1') then - - if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Ctrl_Reg_Addr then - refresh_en <= cpu_din(0); - else - refresh_en <= refresh_en; - end if; - - if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Mode_Reg_Addr then - ddr_command <= cpu_din; - ddr_command_we <= '1'; - else - ddr_command <= ddr_command; - ddr_command_we <= '0'; - end if; - - if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr then - ddr_write_smp <= cpu_din; - else - ddr_write_smp <= ddr_write_smp; - end if; - - if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Addr_Reg_Addr then - ddr_addr_smp <= cpu_din; - else - ddr_addr_smp <= ddr_addr_smp; - end if; - - if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Req_Reg_Addr then - ddr_req_type_smp <= cpu_din(0); - ddr_req_on <= '1'; - else - ddr_req_type_smp <= ddr_req_type_smp; - ddr_req_on <= '0'; - end if; - - end if; - end process; - - -- CPU readable registers - cpu_dout <= ddr_read_delay when (cpu_re = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr) else "ZZZZZZZZZZZZZZZZ"; - - -- Capture data read from DDR - process(cpu_clk_2x, areset) - begin - if areset = '1' then - ddr_read_smp <= (others => '0'); - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - if ddr_read_en = '1' then - ddr_read_smp <= ddr_data_read after Sim_Delay; - else - ddr_read_smp <= ddr_read_smp after Sim_Delay; - end if; - end if; - end process; - - -- Move captured data from DDR to cpu_clk domain (for better routing timing) - process(cpu_clk, areset) - begin - if areset = '1' then - ddr_read_delay <= "0000000000000000"; - elsif (cpu_clk'event and cpu_clk = '1') then - ddr_read_delay <= ddr_read_smp(15 downto 0); - end if; - end process; - - process(cpu_clk_2x, areset) - begin - if areset = '1' then - ddr_req_int <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - if ddr_req_on = '1' then - ddr_req_int <= '1' after Sim_Delay; - elsif ddr_read_en = '1' or ddr_write_en = '1' then - ddr_req_int <= '0' after Sim_Delay; - else - ddr_req_int <= ddr_req_int after Sim_Delay; - end if; - end if; - end process; - - - ddr_interface: - ddr_top port map( - areset => areset, - cpu_clk => cpu_clk, - cpu_clk_2x => cpu_clk_2x, - cpu_clk_4x => cpu_clk_4x, - ddr_in_clk => ddr_in_clk, - ddr_in_clk_2x => ddr_in_clk_2x, - ddr_command => ddr_command, - ddr_command_we => ddr_command_we, - refresh_en => refresh_en, - ddr_data_read => ddr_data_read, - ddr_data_write => ddr_data_write, - ddr_req => ddr_req, - ddr_req_adr => ddr_req_adr, - ddr_rd_wr_n => ddr_rd_wr_n, - ddr_req_len => ddr_req_len, - ddr_read_en => ddr_read_en, - ddr_write_en => ddr_write_en, - sdr_clk_p => sdr_clk_p, - sdr_clk_n_p => sdr_clk_n_p, - cke_q_p => cke_q_p, - cs_qn_p => cs_qn_p, - ras_qn_p => ras_qn_p, - cas_qn_p => cas_qn_p, - we_qn_p => we_qn_p, - dm_q_p => dm_q_p, - dqs_q_p => dqs_q_p, - ba_q_p => ba_q_p, - sdr_a_p => sdr_a_p, - sdr_d_p => sdr_d_p); - - -end behave; diff --git a/zpu/hdl/zpu3/src/dmips_ram.vhd b/zpu/hdl/zpu3/src/dmips_ram.vhd deleted file mode 100644 index f472653..0000000 --- a/zpu/hdl/zpu3/src/dmips_ram.vhd +++ /dev/null @@ -1,3824 +0,0 @@ -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 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"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 - -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/zpu3/src/dualport_ram.vhd b/zpu/hdl/zpu3/src/dualport_ram.vhd deleted file mode 100644 index 54380ce..0000000 --- a/zpu/hdl/zpu3/src/dualport_ram.vhd +++ /dev/null @@ -1,4996 +0,0 @@ -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 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"800b0b0b", -1 => x"0b0b8070", -2 => x"0b0b818a", -3 => x"880c3a0b", -4 => x"0b80fae8", -5 => x"04000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80fbba2d", -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"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"72728072", -73 => x"8106ff05", -74 => x"09720605", -75 => x"71105272", -76 => x"0a100a53", -77 => x"0b0b72eb", -78 => x"38515153", -79 => x"0b0b5104", -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"52040000", -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"04000000", -158 => x"00000000", -159 => x"00000000", -160 => x"71fc0608", -161 => x"0b0b8189", -162 => x"f4738306", -163 => x"10100508", -164 => x"060b0b0b", -165 => x"88ac0400", -166 => x"00000000", -167 => x"00000000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0b8f", -171 => x"e42d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0b91", -179 => x"9c2d5050", -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"818a840c", -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"0571530b", -250 => x"0b510400", -251 => x"00000000", -252 => x"00000000", -253 => x"00000000", -254 => x"00000000", -255 => x"00000000", -256 => x"83cd3f80", -257 => x"fd803f04", -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"3c047070", -274 => x"0b0b819a", -275 => x"90085284", -276 => x"0b720508", -277 => x"70810651", -278 => x"510b0b70", -279 => x"f2387108", -280 => x"81ff0680", -281 => x"0c505004", -282 => x"70700b0b", -283 => x"819a9008", -284 => x"52840b72", -285 => x"0508700a", -286 => x"100a7081", -287 => x"06515151", -288 => x"0b0b70ed", -289 => x"3873720c", -290 => x"50500481", -291 => x"8a840880", -292 => x"2ea83883", -293 => x"80800b0b", -294 => x"0b819a90", -295 => x"0c82a080", -296 => x"0b0b0b81", -297 => x"9a940c82", -298 => x"90800b81", -299 => x"9aa40c0b", -300 => x"0b819a98", -301 => x"0b819aa8", -302 => x"0c04f880", -303 => x"8080a40b", -304 => x"0b0b819a", -305 => x"900cf880", -306 => x"8082800b", -307 => x"0b0b819a", -308 => x"940cf880", -309 => x"8084800b", -310 => x"819aa40c", -311 => x"f8808080", -312 => x"940b819a", -313 => x"a80cf880", -314 => x"80809c0b", -315 => x"819aa00c", -316 => x"f8808080", -317 => x"a00b819a", -318 => x"ac0c04f2", -319 => x"3d0d600b", -320 => x"0b819a94", -321 => x"08565d82", -322 => x"750c8059", -323 => x"805a800b", -324 => x"8f3d7110", -325 => x"10177008", -326 => x"5a575d5b", -327 => x"807781ff", -328 => x"067c832b", -329 => x"5658520b", -330 => x"76530b0b", -331 => x"7b5183ae", -332 => x"3f7d7f7a", -333 => x"72077c72", -334 => x"07717160", -335 => x"8105415f", -336 => x"5d5b5957", -337 => x"557a8724", -338 => x"bf380b0b", -339 => x"819a9408", -340 => x"7b101071", -341 => x"05700859", -342 => x"51558077", -343 => x"81ff067c", -344 => x"832b5658", -345 => x"520b7653", -346 => x"0b0b7b51", -347 => x"82f03f7d", -348 => x"7f7a7207", -349 => x"7c720771", -350 => x"71608105", -351 => x"415f5d5b", -352 => x"59575587", -353 => x"7b25c338", -354 => x"767d0c77", -355 => x"841e0c7c", -356 => x"800c903d", -357 => x"0d047070", -358 => x"819a9c33", -359 => x"510b0b70", -360 => x"aa38818a", -361 => x"90087008", -362 => x"52520b70", -363 => x"802e9638", -364 => x"84720581", -365 => x"8a900c70", -366 => x"2d818a90", -367 => x"08700852", -368 => x"520b70ec", -369 => x"38810b81", -370 => x"9a9c3450", -371 => x"50040470", -372 => x"0b0b819a", -373 => x"8c08802e", -374 => x"8e380b0b", -375 => x"0b0b800b", -376 => x"802e0981", -377 => x"06833850", -378 => x"040b0b81", -379 => x"9a8c510b", -380 => x"0b0bf48c", -381 => x"3f500404", -382 => x"8c08028c", -383 => x"0cfa3d0d", -384 => x"800b8c08", -385 => x"fc050c8c", -386 => x"08fc0508", -387 => x"892481b9", -388 => x"388c08f0", -389 => x"05705253", -390 => x"0b0bfddf", -391 => x"3f8c08f4", -392 => x"05088c08", -393 => x"f8050c8c", -394 => x"08f80508", -395 => x"520b0b81", -396 => x"85b45187", -397 => x"c53f0b0b", -398 => x"8185c051", -399 => x"8a8b3f0b", -400 => x"0b8185d0", -401 => x"518a823f", -402 => x"fc0b819a", -403 => x"b00c819a", -404 => x"b008812c", -405 => x"530b0b72", -406 => x"fe2e8438", -407 => x"87903f8a", -408 => x"0b819ab4", -409 => x"0c819ab4", -410 => x"08819ab0", -411 => x"0829530b", -412 => x"0b72d82e", -413 => x"843886f6", -414 => x"3f8a0b81", -415 => x"9ab00c84", -416 => x"e2ad800b", -417 => x"819ab40c", -418 => x"819ab408", -419 => x"819ab008", -420 => x"29530b0b", -421 => x"72afd7c2", -422 => x"802e8438", -423 => x"86d03f81", -424 => x"0a0b819a", -425 => x"b00cff0b", -426 => x"819ab40c", -427 => x"819ab408", -428 => x"819ab008", -429 => x"25843886", -430 => x"b53f8c08", -431 => x"fc050881", -432 => x"058c08fc", -433 => x"050cfebf", -434 => x"398c08fc", -435 => x"05088a2e", -436 => x"8438869a", -437 => x"3f72800c", -438 => x"883d0d8c", -439 => x"0c048c08", -440 => x"028c0cf5", -441 => x"3d0d8c08", -442 => x"9405089f", -443 => x"388c088c", -444 => x"05088c08", -445 => x"9005088c", -446 => x"08880508", -447 => x"5856540b", -448 => x"0b73760c", -449 => x"7484170c", -450 => x"81cd3980", -451 => x"0b8c08f0", -452 => x"050c800b", -453 => x"8c08f405", -454 => x"0c8c088c", -455 => x"05088c08", -456 => x"90050856", -457 => x"540b0b73", -458 => x"8c08f005", -459 => x"0c748c08", -460 => x"f4050c8c", -461 => x"08f8058c", -462 => x"08f00556", -463 => x"56887054", -464 => x"0b0b7553", -465 => x"0b0b7652", -466 => x"540b0b85", -467 => x"ef3fa00b", -468 => x"8c089405", -469 => x"08318c08", -470 => x"ec050c8c", -471 => x"08ec0508", -472 => x"80249f38", -473 => x"800b8c08", -474 => x"f4050c8c", -475 => x"08ec0508", -476 => x"308c08fc", -477 => x"0508712b", -478 => x"8c08f005", -479 => x"0c540b0b", -480 => x"bb398c08", -481 => x"fc05088c", -482 => x"08ec0508", -483 => x"2a8c08e8", -484 => x"050c8c08", -485 => x"fc05088c", -486 => x"08940508", -487 => x"2b8c08f4", -488 => x"050c8c08", -489 => x"f805088c", -490 => x"08940508", -491 => x"2b708c08", -492 => x"e8050807", -493 => x"8c08f005", -494 => x"0c540b0b", -495 => x"8c08f005", -496 => x"088c08f4", -497 => x"05088c08", -498 => x"88050858", -499 => x"56540b0b", -500 => x"73760c74", -501 => x"84170c8c", -502 => x"08880508", -503 => x"800c8d3d", -504 => x"0d8c0c04", -505 => x"8c08028c", -506 => x"0cf93d0d", -507 => x"800b8c08", -508 => x"fc050c8c", -509 => x"08880508", -510 => x"8025ab38", -511 => x"8c088805", -512 => x"08308c08", -513 => x"88050c80", -514 => x"0b8c08f4", -515 => x"050c8c08", -516 => x"fc050888", -517 => x"38810b8c", -518 => x"08f4050c", -519 => x"8c08f405", -520 => x"088c08fc", -521 => x"050c8c08", -522 => x"8c050880", -523 => x"25ab388c", -524 => x"088c0508", -525 => x"308c088c", -526 => x"050c800b", -527 => x"8c08f005", -528 => x"0c8c08fc", -529 => x"05088838", -530 => x"810b8c08", -531 => x"f0050c8c", -532 => x"08f00508", -533 => x"8c08fc05", -534 => x"0c80530b", -535 => x"0b8c088c", -536 => x"0508528c", -537 => x"08880508", -538 => x"5181b13f", -539 => x"8008708c", -540 => x"08f8050c", -541 => x"540b0b8c", -542 => x"08fc0508", -543 => x"802e8c38", -544 => x"8c08f805", -545 => x"08308c08", -546 => x"f8050c8c", -547 => x"08f80508", -548 => x"70800c54", -549 => x"0b0b893d", -550 => x"0d8c0c04", -551 => x"8c08028c", -552 => x"0cfb3d0d", -553 => x"800b8c08", -554 => x"fc050c8c", -555 => x"08880508", -556 => x"80259338", -557 => x"8c088805", -558 => x"08308c08", -559 => x"88050c81", -560 => x"0b8c08fc", -561 => x"050c8c08", -562 => x"8c050880", -563 => x"258c388c", -564 => x"088c0508", -565 => x"308c088c", -566 => x"050c8153", -567 => x"0b0b8c08", -568 => x"8c050852", -569 => x"8c088805", -570 => x"0851b13f", -571 => x"8008708c", -572 => x"08f8050c", -573 => x"540b0b8c", -574 => x"08fc0508", -575 => x"802e8c38", -576 => x"8c08f805", -577 => x"08308c08", -578 => x"f8050c8c", -579 => x"08f80508", -580 => x"70800c54", -581 => x"0b0b873d", -582 => x"0d8c0c04", -583 => x"8c08028c", -584 => x"0c707070", -585 => x"70810b8c", -586 => x"08fc050c", -587 => x"800b8c08", -588 => x"f8050c8c", -589 => x"088c0508", -590 => x"8c088805", -591 => x"0827ac38", -592 => x"8c08fc05", -593 => x"08802ea3", -594 => x"38800b8c", -595 => x"088c0508", -596 => x"2499388c", -597 => x"088c0508", -598 => x"108c088c", -599 => x"050c8c08", -600 => x"fc050810", -601 => x"8c08fc05", -602 => x"0cc9398c", -603 => x"08fc0508", -604 => x"802e80c9", -605 => x"388c088c", -606 => x"05088c08", -607 => x"88050826", -608 => x"a1388c08", -609 => x"8805088c", -610 => x"088c0508", -611 => x"318c0888", -612 => x"050c8c08", -613 => x"f805088c", -614 => x"08fc0508", -615 => x"078c08f8", -616 => x"050c8c08", -617 => x"fc050881", -618 => x"2a8c08fc", -619 => x"050c8c08", -620 => x"8c050881", -621 => x"2a8c088c", -622 => x"050cffaf", -623 => x"398c0890", -624 => x"0508802e", -625 => x"8f388c08", -626 => x"88050870", -627 => x"8c08f405", -628 => x"0c518d39", -629 => x"8c08f805", -630 => x"08708c08", -631 => x"f4050c51", -632 => x"8c08f405", -633 => x"08800c50", -634 => x"5050508c", -635 => x"0c047086", -636 => x"5186a03f", -637 => x"815180e7", -638 => x"be3ffc3d", -639 => x"0d873d70", -640 => x"70840552", -641 => x"0856530b", -642 => x"0b745281", -643 => x"8a940888", -644 => x"71050852", -645 => x"540b0b9f", -646 => x"e73f863d", -647 => x"0d047070", -648 => x"7070863d", -649 => x"8805530b", -650 => x"0b765275", -651 => x"88710508", -652 => x"52540b0b", -653 => x"9fca3f50", -654 => x"50505004", -655 => x"fc3d0d76", -656 => x"70797b55", -657 => x"5555558f", -658 => x"72278e38", -659 => x"72750783", -660 => x"06510b0b", -661 => x"70802eaf", -662 => x"38ff7205", -663 => x"520b0b71", -664 => x"ff2e9d38", -665 => x"72708105", -666 => x"540b0b33", -667 => x"74708105", -668 => x"5634ff72", -669 => x"05520b0b", -670 => x"71ff2e09", -671 => x"8106e538", -672 => x"74800c86", -673 => x"3d0d0474", -674 => x"51727084", -675 => x"05540b0b", -676 => x"08717084", -677 => x"05530b0b", -678 => x"0c727084", -679 => x"05540b0b", -680 => x"08717084", -681 => x"05530b0b", -682 => x"0c727084", -683 => x"05540b0b", -684 => x"08717084", -685 => x"05530b0b", -686 => x"0c727084", -687 => x"05540b0b", -688 => x"08717084", -689 => x"05530b0b", -690 => x"0cf07205", -691 => x"520b0b71", -692 => x"8f26ffb5", -693 => x"38837227", -694 => x"9c387270", -695 => x"8405540b", -696 => x"0b087170", -697 => x"8405530b", -698 => x"0b0cfc72", -699 => x"05520b0b", -700 => x"718326e6", -701 => x"3870540b", -702 => x"0bfede39", -703 => x"f73d0d7c", -704 => x"7052530b", -705 => x"0b858c3f", -706 => x"72540b0b", -707 => x"80085581", -708 => x"85e05681", -709 => x"57800881", -710 => x"055a8b3d", -711 => x"e4710559", -712 => x"530b0b82", -713 => x"59f47305", -714 => x"527b8871", -715 => x"05085253", -716 => x"0b0bb7ce", -717 => x"3f800830", -718 => x"70800807", -719 => x"9f2c8a07", -720 => x"800c530b", -721 => x"0b8b3d0d", -722 => x"04707073", -723 => x"52818a94", -724 => x"0851ffa8", -725 => x"3f505004", -726 => x"70707070", -727 => x"75530b0b", -728 => x"84d87305", -729 => x"08802e8d", -730 => x"3880530b", -731 => x"0b72800c", -732 => x"50505050", -733 => x"04818052", -734 => x"725180c1", -735 => x"cc3f8008", -736 => x"84d8140c", -737 => x"ff530b0b", -738 => x"8008802e", -739 => x"e0388008", -740 => x"540b0b9f", -741 => x"530b0b80", -742 => x"74708405", -743 => x"560cff73", -744 => x"05530b0b", -745 => x"807324c1", -746 => x"38807470", -747 => x"8405560c", -748 => x"ff730553", -749 => x"0b0b7280", -750 => x"25dd38ff", -751 => x"ac397070", -752 => x"70707577", -753 => x"55530b0b", -754 => x"9f742790", -755 => x"3896730c", -756 => x"ff520b0b", -757 => x"71800c50", -758 => x"50505004", -759 => x"84d87305", -760 => x"08520b0b", -761 => x"71802e97", -762 => x"38731010", -763 => x"72057008", -764 => x"79720c51", -765 => x"520b0b71", -766 => x"800c5050", -767 => x"50500472", -768 => x"51fed53f", -769 => x"ff528008", -770 => x"c93884d8", -771 => x"73050874", -772 => x"10107105", -773 => x"70087a72", -774 => x"0c515152", -775 => x"d839f93d", -776 => x"0d797b58", -777 => x"560b769f", -778 => x"2680f138", -779 => x"84d81608", -780 => x"540b0b73", -781 => x"802ead38", -782 => x"76101014", -783 => x"70085555", -784 => x"0b73802e", -785 => x"be388058", -786 => x"73812e8f", -787 => x"3873ff2e", -788 => x"a7388075", -789 => x"0c765173", -790 => x"2d80580b", -791 => x"0b77800c", -792 => x"893d0d04", -793 => x"7551fdf0", -794 => x"3fff5880", -795 => x"08ed3884", -796 => x"d8160854", -797 => x"0b0bc139", -798 => x"96760c81", -799 => x"0b800c89", -800 => x"3d0d0475", -801 => x"5182873f", -802 => x"76530b0b", -803 => x"80085275", -804 => x"5181be3f", -805 => x"8008800c", -806 => x"893d0d04", -807 => x"96760cff", -808 => x"0b800c89", -809 => x"3d0d04fc", -810 => x"3d0d7678", -811 => x"56530b0b", -812 => x"ff540b0b", -813 => x"749f2680", -814 => x"c13884d8", -815 => x"73050852", -816 => x"0b0b7180", -817 => x"2ebb3874", -818 => x"10107205", -819 => x"7008530b", -820 => x"0b530b0b", -821 => x"81540b0b", -822 => x"71802e9e", -823 => x"3882540b", -824 => x"0b71ff2e", -825 => x"95388354", -826 => x"0b0b7181", -827 => x"2e8c3880", -828 => x"730c7451", -829 => x"712d8054", -830 => x"0b0b7380", -831 => x"0c863d0d", -832 => x"047251fc", -833 => x"d33f8008", -834 => x"f13884d8", -835 => x"73050852", -836 => x"ffb53970", -837 => x"70735281", -838 => x"8a940851", -839 => x"fe803f50", -840 => x"50047070", -841 => x"7075530b", -842 => x"0b745281", -843 => x"8a940851", -844 => x"fd8c3f50", -845 => x"50500470", -846 => x"818a9408", -847 => x"51fc993f", -848 => x"50047070", -849 => x"7352818a", -850 => x"940851fe", -851 => x"da3f5050", -852 => x"04fc3d0d", -853 => x"800b819a", -854 => x"b80c7852", -855 => x"775180df", -856 => x"bc3f8008", -857 => x"540b0b80", -858 => x"08ff2e88", -859 => x"3873800c", -860 => x"863d0d04", -861 => x"819ab808", -862 => x"550b0b74", -863 => x"802eee38", -864 => x"7675710c", -865 => x"530b0b73", -866 => x"800c863d", -867 => x"0d0480df", -868 => x"873f0470", -869 => x"70707075", -870 => x"70718306", -871 => x"530b0b55", -872 => x"5270bf38", -873 => x"71700870", -874 => x"09f7fbfd", -875 => x"ff720506", -876 => x"70f88482", -877 => x"81800651", -878 => x"5152530b", -879 => x"0b70a138", -880 => x"84730570", -881 => x"087009f7", -882 => x"fbfdff72", -883 => x"050670f8", -884 => x"84828180", -885 => x"06515152", -886 => x"530b0b70", -887 => x"802ee138", -888 => x"72520b0b", -889 => x"7133510b", -890 => x"0b70802e", -891 => x"8c388172", -892 => x"05703352", -893 => x"520b70f6", -894 => x"38717431", -895 => x"800c5050", -896 => x"50500470", -897 => x"70707076", -898 => x"88710508", -899 => x"540b0b54", -900 => x"0b0b728d", -901 => x"38728415", -902 => x"0c72800c", -903 => x"50505050", -904 => x"04735275", -905 => x"51b1db3f", -906 => x"800b8815", -907 => x"0c800b84", -908 => x"150c8008", -909 => x"800c5050", -910 => x"505004fd", -911 => x"ad3d0d82", -912 => x"d63d0882", -913 => x"d83d0882", -914 => x"da3d0882", -915 => x"dc3d0844", -916 => x"5b454980", -917 => x"70658c05", -918 => x"2270832a", -919 => x"81327081", -920 => x"06515959", -921 => x"4947750b", -922 => x"672e0981", -923 => x"068c3863", -924 => x"90050867", -925 => x"2e098106", -926 => x"92386351", -927 => x"a2e03fff", -928 => x"56800881", -929 => x"ec38638c", -930 => x"0522570b", -931 => x"0b769a06", -932 => x"560b0b75", -933 => x"8a2ebf38", -934 => x"82c13d70", -935 => x"7182d43d", -936 => x"0c5b4380", -937 => x"0b82d43d", -938 => x"0c800b82", -939 => x"d33d0c80", -940 => x"46785b80", -941 => x"79337081", -942 => x"ff065959", -943 => x"56760b76", -944 => x"2e833881", -945 => x"5676a52e", -946 => x"81b13875", -947 => x"802e81ab", -948 => x"38811959", -949 => x"de39638e", -950 => x"05227090", -951 => x"2b575880", -952 => x"7624ffb4", -953 => x"3876fd06", -954 => x"560b0b75", -955 => x"82a33d23", -956 => x"77028405", -957 => x"89860523", -958 => x"639c0508", -959 => x"82a73d0c", -960 => x"63a40508", -961 => x"82a93d0c", -962 => x"9f3d7082", -963 => x"a13d0c82", -964 => x"a43d0c88", -965 => x"800b82a2", -966 => x"3d0c8880", -967 => x"0b82a53d", -968 => x"0c800b82", -969 => x"a63d0c60", -970 => x"530b0b78", -971 => x"52829f3d", -972 => x"70525695", -973 => x"cb3f8008", -974 => x"57800b80", -975 => x"08248e38", -976 => x"7551a39b", -977 => x"3f800880", -978 => x"2e8338ff", -979 => x"5782a23d", -980 => x"2270862a", -981 => x"70810651", -982 => x"57580b75", -983 => x"802e9038", -984 => x"638c0522", -985 => x"80c00756", -986 => x"0b0b7564", -987 => x"8c052376", -988 => x"560b0b75", -989 => x"800c82d5", -990 => x"3d0d0478", -991 => x"7b31570b", -992 => x"0b76802e", -993 => x"b1387a7a", -994 => x"0c76841b", -995 => x"0c82d33d", -996 => x"081782d4", -997 => x"3d0c881a", -998 => x"82d33d08", -999 => x"81710582", -1000 => x"d53d0c81", -1001 => x"71055157", -1002 => x"5a0b7587", -1003 => x"2480cb38", -1004 => x"65177933", -1005 => x"59460b77", -1006 => x"81ff0656", -1007 => x"0b0b7580", -1008 => x"2e93fe38", -1009 => x"81195980", -1010 => x"70714743", -1011 => x"5fff5e7e", -1012 => x"82d53d34", -1013 => x"7833580b", -1014 => x"0b7781ff", -1015 => x"06811a5a", -1016 => x"5de01d56", -1017 => x"0b0b7580", -1018 => x"d82687a1", -1019 => x"38751010", -1020 => x"81868405", -1021 => x"560b0b75", -1022 => x"080482d5", -1023 => x"3df00552", -1024 => x"6351fbff", -1025 => x"3f80088a", -1026 => x"a5386266", -1027 => x"187a335a", -1028 => x"475affa2", -1029 => x"397e9007", -1030 => x"5f0b0b7e", -1031 => x"842a7081", -1032 => x"0651560b", -1033 => x"0b7592ba", -1034 => x"387e862a", -1035 => x"70810651", -1036 => x"560b0b75", -1037 => x"802e92aa", -1038 => x"38606184", -1039 => x"05827205", -1040 => x"225a4256", -1041 => x"815c800b", -1042 => x"82d53d34", -1043 => x"7d42807e", -1044 => x"2486387e", -1045 => x"feff065f", -1046 => x"62783070", -1047 => x"7a079f2a", -1048 => x"64307066", -1049 => x"079f2a72", -1050 => x"07525951", -1051 => x"585b0b76", -1052 => x"802e918d", -1053 => x"387b812e", -1054 => x"8b9d3881", -1055 => x"7c259281", -1056 => x"387b822e", -1057 => x"8bd63881", -1058 => x"88e85b0b", -1059 => x"0b7a51fa", -1060 => x"823f8008", -1061 => x"5c0b0b7b", -1062 => x"5e7b6225", -1063 => x"8338615e", -1064 => x"82d43d33", -1065 => x"7081ff06", -1066 => x"57580b75", -1067 => x"802e90ba", -1068 => x"38811e5e", -1069 => x"7e818406", -1070 => x"400b0b7f", -1071 => x"80fa3864", -1072 => x"7e315780", -1073 => x"0b772580", -1074 => x"ef389077", -1075 => x"25b93881", -1076 => x"85e47a0c", -1077 => x"900b841b", -1078 => x"0c82d33d", -1079 => x"08900582", -1080 => x"d43d0c88", -1081 => x"1a82d33d", -1082 => x"08817105", -1083 => x"82d53d0c", -1084 => x"81710551", -1085 => x"575a0b75", -1086 => x"872485aa", -1087 => x"38f01757", -1088 => x"0b0b7690", -1089 => x"24c93881", -1090 => x"85e47a0c", -1091 => x"76841b0c", -1092 => x"82d33d08", -1093 => x"1782d43d", -1094 => x"0c881a82", -1095 => x"d33d0881", -1096 => x"710582d5", -1097 => x"3d0c8171", -1098 => x"0551575a", -1099 => x"0b758724", -1100 => x"8ff63882", -1101 => x"d43d3358", -1102 => x"0b0b7781", -1103 => x"ff06560b", -1104 => x"0b75802e", -1105 => x"86e83882", -1106 => x"d53dfc71", -1107 => x"057b0c58", -1108 => x"810b841b", -1109 => x"0c82d33d", -1110 => x"08810582", -1111 => x"d43d0c88", -1112 => x"1a82d33d", -1113 => x"08817105", -1114 => x"82d53d0c", -1115 => x"81710551", -1116 => x"575a0b75", -1117 => x"87248789", -1118 => x"387f8180", -1119 => x"2e84d738", -1120 => x"617c3157", -1121 => x"800b7725", -1122 => x"80fa3890", -1123 => x"7725b938", -1124 => x"8185f47a", -1125 => x"0c900b84", -1126 => x"1b0c82d3", -1127 => x"3d089005", -1128 => x"82d43d0c", -1129 => x"881a82d3", -1130 => x"3d088171", -1131 => x"0582d53d", -1132 => x"0c817105", -1133 => x"51575a0b", -1134 => x"75872484", -1135 => x"8138f017", -1136 => x"570b0b76", -1137 => x"9024c938", -1138 => x"8185f47a", -1139 => x"0c76841b", -1140 => x"0c82d33d", -1141 => x"081782d4", -1142 => x"3d0c881a", -1143 => x"82d33d08", -1144 => x"81710582", -1145 => x"d53d0c81", -1146 => x"71055157", -1147 => x"5a877625", -1148 => x"933882d5", -1149 => x"3df00552", -1150 => x"6351f887", -1151 => x"3f800886", -1152 => x"ad38625a", -1153 => x"7a0b7a0c", -1154 => x"7b841b0c", -1155 => x"82d33d08", -1156 => x"1c82d43d", -1157 => x"0c881a82", -1158 => x"d33d0881", -1159 => x"710582d5", -1160 => x"3d0c8171", -1161 => x"0551575a", -1162 => x"0b758724", -1163 => x"84eb387e", -1164 => x"822a7081", -1165 => x"0651560b", -1166 => x"0b75802e", -1167 => x"81813864", -1168 => x"7e315780", -1169 => x"0b772580", -1170 => x"f6389077", -1171 => x"25b93881", -1172 => x"85e47a0c", -1173 => x"900b841b", -1174 => x"0c82d33d", -1175 => x"08900582", -1176 => x"d43d0c88", -1177 => x"1a82d33d", -1178 => x"08817105", -1179 => x"82d53d0c", -1180 => x"81710551", -1181 => x"575a0b75", -1182 => x"87248485", -1183 => x"38f01757", -1184 => x"0b0b7690", -1185 => x"24c93881", -1186 => x"85e47a0c", -1187 => x"76841b0c", -1188 => x"82d33d08", -1189 => x"1782d43d", -1190 => x"0c82d23d", -1191 => x"08817105", -1192 => x"82d43d0c", -1193 => x"81710551", -1194 => x"56870b76", -1195 => x"25913882", -1196 => x"d53df005", -1197 => x"526351f6", -1198 => x"ca3f8008", -1199 => x"84f0387d", -1200 => x"567d6525", -1201 => x"83386456", -1202 => x"65164682", -1203 => x"d33d0884", -1204 => x"cb38800b", -1205 => x"82d33d0c", -1206 => x"625a6680", -1207 => x"2ef7d238", -1208 => x"6651b2d6", -1209 => x"3f80795c", -1210 => x"47f7c839", -1211 => x"7e90075f", -1212 => x"0b0b7e84", -1213 => x"2a708106", -1214 => x"51560b0b", -1215 => x"758cd538", -1216 => x"7e862a70", -1217 => x"81065156", -1218 => x"0b0b7580", -1219 => x"2e8cc538", -1220 => x"60618405", -1221 => x"82720522", -1222 => x"5a425680", -1223 => x"5c800b82", -1224 => x"d53d34fa", -1225 => x"a7397e90", -1226 => x"075f0b0b", -1227 => x"7e842a70", -1228 => x"81065156", -1229 => x"0b0b758c", -1230 => x"89387e86", -1231 => x"2a708106", -1232 => x"51560b0b", -1233 => x"75802e8b", -1234 => x"f9386061", -1235 => x"84057108", -1236 => x"902b7090", -1237 => x"2c515a42", -1238 => x"56807824", -1239 => x"89ac3881", -1240 => x"5cf9e939", -1241 => x"60618405", -1242 => x"71084742", -1243 => x"56648025", -1244 => x"f8e23864", -1245 => x"30457e84", -1246 => x"07793359", -1247 => x"5ff8d839", -1248 => x"8119597e", -1249 => x"90077933", -1250 => x"595ff8cb", -1251 => x"397c802e", -1252 => x"8caf3882", -1253 => x"b73d5b7c", -1254 => x"0b7b3481", -1255 => x"5c800b82", -1256 => x"d53d34f9", -1257 => x"f03982d5", -1258 => x"3df00552", -1259 => x"6351f4d3", -1260 => x"3f800882", -1261 => x"f93862f0", -1262 => x"18585afa", -1263 => x"c33982d5", -1264 => x"3df00552", -1265 => x"6351f4bb", -1266 => x"3f800882", -1267 => x"e13862f0", -1268 => x"18585afb", -1269 => x"ec39647e", -1270 => x"3157800b", -1271 => x"7725fba0", -1272 => x"38907725", -1273 => x"b9388185", -1274 => x"f47a0c90", -1275 => x"0b841b0c", -1276 => x"82d33d08", -1277 => x"900582d4", -1278 => x"3d0c881a", -1279 => x"82d33d08", -1280 => x"81710582", -1281 => x"d53d0c81", -1282 => x"71055157", -1283 => x"5a0b7587", -1284 => x"2480d638", -1285 => x"f017570b", -1286 => x"0b769024", -1287 => x"c9388185", -1288 => x"f47a0c76", -1289 => x"841b0c82", -1290 => x"d33d0817", -1291 => x"82d43d0c", -1292 => x"881a82d3", -1293 => x"3d088171", -1294 => x"0582d53d", -1295 => x"0c817105", -1296 => x"51575a87", -1297 => x"7625fab8", -1298 => x"3882d53d", -1299 => x"f0055263", -1300 => x"51f3b03f", -1301 => x"800881d6", -1302 => x"3862627d", -1303 => x"31585a0b", -1304 => x"768024fa", -1305 => x"a638fb9c", -1306 => x"3982d53d", -1307 => x"f0055263", -1308 => x"51f3903f", -1309 => x"800881b6", -1310 => x"3862f018", -1311 => x"585aff97", -1312 => x"3982d53d", -1313 => x"f0055263", -1314 => x"51f2f83f", -1315 => x"8008819e", -1316 => x"3862f018", -1317 => x"585afbe8", -1318 => x"3982d53d", -1319 => x"f0055263", -1320 => x"51f2e03f", -1321 => x"80088186", -1322 => x"38625afb", -1323 => x"82397e0a", -1324 => x"100a7081", -1325 => x"0651560b", -1326 => x"0b75802e", -1327 => x"f9bb38b0", -1328 => x"0b82b73d", -1329 => x"347c0284", -1330 => x"0589d505", -1331 => x"3482d53d", -1332 => x"ff84057a", -1333 => x"0c820b84", -1334 => x"1b0c82d3", -1335 => x"3d088205", -1336 => x"82d43d0c", -1337 => x"881a82d3", -1338 => x"3d088171", -1339 => x"0582d53d", -1340 => x"0c817105", -1341 => x"51575a87", -1342 => x"7625f8fd", -1343 => x"3882d53d", -1344 => x"58f01852", -1345 => x"6351f1fb", -1346 => x"3f8008a2", -1347 => x"38625a7f", -1348 => x"81802e09", -1349 => x"8106f8e8", -1350 => x"38fdbb39", -1351 => x"82d53df0", -1352 => x"05526351", -1353 => x"f1dd3f80", -1354 => x"08802efb", -1355 => x"a5386680", -1356 => x"2e863866", -1357 => x"51ae833f", -1358 => x"638c0522", -1359 => x"70862a70", -1360 => x"8106685a", -1361 => x"5157440b", -1362 => x"75802ef4", -1363 => x"a238ff56", -1364 => x"f49f3980", -1365 => x"0b82d53d", -1366 => x"34606184", -1367 => x"0571085d", -1368 => x"42567a80", -1369 => x"2e88d138", -1370 => x"7c80d32e", -1371 => x"85aa387e", -1372 => x"842a7081", -1373 => x"0651560b", -1374 => x"0b75859c", -1375 => x"38807e24", -1376 => x"f689387d", -1377 => x"530b0b75", -1378 => x"527a51ba", -1379 => x"d03f7d5c", -1380 => x"8008802e", -1381 => x"f5ff3880", -1382 => x"087b315c", -1383 => x"7d0b7c25", -1384 => x"f5f3387d", -1385 => x"5cf5ee39", -1386 => x"7e842a70", -1387 => x"81065156", -1388 => x"0b0b7587", -1389 => x"bb387e86", -1390 => x"2a708106", -1391 => x"51560b0b", -1392 => x"75802e87", -1393 => x"ab386061", -1394 => x"84057108", -1395 => x"52425665", -1396 => x"0b762378", -1397 => x"5bf1dc39", -1398 => x"78337081", -1399 => x"ff065758", -1400 => x"0b7580ec", -1401 => x"2efb9938", -1402 => x"7e900778", -1403 => x"81ff0681", -1404 => x"1b5b5e5f", -1405 => x"f3eb3960", -1406 => x"61840571", -1407 => x"085a4256", -1408 => x"820b8189", -1409 => x"84607207", -1410 => x"41495c80", -1411 => x"f85d800b", -1412 => x"82d53d34", -1413 => x"f4b63989", -1414 => x"7827a838", -1415 => x"ff1b5b8a", -1416 => x"52775180", -1417 => x"d8b43f80", -1418 => x"08b00556", -1419 => x"0b0b757b", -1420 => x"348a5277", -1421 => x"5180d7f6", -1422 => x"3f800858", -1423 => x"0b0b7789", -1424 => x"26da38ff", -1425 => x"1bb01957", -1426 => x"5b0b750b", -1427 => x"7b3482d5", -1428 => x"3d707c31", -1429 => x"ffb0055d", -1430 => x"56f4ba39", -1431 => x"ff1b788f", -1432 => x"06690557", -1433 => x"5b0b7533", -1434 => x"7b347784", -1435 => x"2a580b0b", -1436 => x"77802eda", -1437 => x"38ff1b78", -1438 => x"8f066905", -1439 => x"575b0b75", -1440 => x"337b3477", -1441 => x"842a580b", -1442 => x"0b77d138", -1443 => x"c1397e80", -1444 => x"c0077933", -1445 => x"595ff2bf", -1446 => x"3982b73d", -1447 => x"5b7c80c3", -1448 => x"2e91387e", -1449 => x"842a7081", -1450 => x"0651560b", -1451 => x"0b75802e", -1452 => x"82c83888", -1453 => x"530b0b80", -1454 => x"529d3d70", -1455 => x"5256bbcf", -1456 => x"3f75540b", -1457 => x"0b606184", -1458 => x"05710855", -1459 => x"7c540b0b", -1460 => x"6a530b0b", -1461 => x"425686e8", -1462 => x"3f80085c", -1463 => x"8008ff2e", -1464 => x"fccc3880", -1465 => x"0b82d53d", -1466 => x"34f3aa39", -1467 => x"78708105", -1468 => x"5a335d0b", -1469 => x"0b7caa2e", -1470 => x"85ef3880", -1471 => x"0bd01e71", -1472 => x"4057570b", -1473 => x"758926f1", -1474 => x"d8387610", -1475 => x"10107710", -1476 => x"057d05d0", -1477 => x"05797081", -1478 => x"055b33d0", -1479 => x"7105585e", -1480 => x"57897627", -1481 => x"e538765e", -1482 => x"76ff25f1", -1483 => x"b438ff5e", -1484 => x"f1af3981", -1485 => x"89987f84", -1486 => x"2a708106", -1487 => x"5157480b", -1488 => x"75818a38", -1489 => x"7e862a70", -1490 => x"81065156", -1491 => x"0b0b7580", -1492 => x"2e80fa38", -1493 => x"60618405", -1494 => x"82720522", -1495 => x"5a425682", -1496 => x"7f810657", -1497 => x"5c77802e", -1498 => x"f1dc3875", -1499 => x"802ef1d6", -1500 => x"387e7c07", -1501 => x"5f800b82", -1502 => x"d53d34f1", -1503 => x"cf39ab0b", -1504 => x"82d53d34", -1505 => x"783358f0", -1506 => x"ce398057", -1507 => x"0b0b7610", -1508 => x"10107710", -1509 => x"057d05d0", -1510 => x"05797081", -1511 => x"055b33d0", -1512 => x"7105585e", -1513 => x"57897627", -1514 => x"e3387645", -1515 => x"f0b3397e", -1516 => x"81800779", -1517 => x"33595ff0", -1518 => x"9e398189", -1519 => x"847f842a", -1520 => x"70810651", -1521 => x"57480b75", -1522 => x"802efef8", -1523 => x"38606184", -1524 => x"0571085a", -1525 => x"4256ff87", -1526 => x"397e8107", -1527 => x"7933595f", -1528 => x"eff53982", -1529 => x"d43d3356", -1530 => x"0b0b75ef", -1531 => x"e738a00b", -1532 => x"82d53d34", -1533 => x"783358ef", -1534 => x"de396061", -1535 => x"84054256", -1536 => x"8316337b", -1537 => x"34815cf7", -1538 => x"94397730", -1539 => x"58ad0b82", -1540 => x"d53d3481", -1541 => x"5cf0b539", -1542 => x"7a4a8070", -1543 => x"585c8853", -1544 => x"0b0b7b52", -1545 => x"9b3d7052", -1546 => x"58b8e43f", -1547 => x"7b7e2481", -1548 => x"94387610", -1549 => x"106a0556", -1550 => x"0b0b7508", -1551 => x"802eb638", -1552 => x"77540b0b", -1553 => x"7508530b", -1554 => x"0b82d53d", -1555 => x"ff880552", -1556 => x"685183ec", -1557 => x"3f8008ff", -1558 => x"2ef9d338", -1559 => x"80081c56", -1560 => x"0b0b757e", -1561 => x"248f3881", -1562 => x"17765d57", -1563 => x"757e2e09", -1564 => x"8106ffbe", -1565 => x"387b802e", -1566 => x"f09b3881", -1567 => x"1c526851", -1568 => x"a7c73f80", -1569 => x"08478008", -1570 => x"802ef9ac", -1571 => x"3888530b", -1572 => x"0b805277", -1573 => x"51b7f83f", -1574 => x"77557b54", -1575 => x"0b0b82d5", -1576 => x"3df69405", -1577 => x"530b0b66", -1578 => x"52685184", -1579 => x"8a3f8008", -1580 => x"7c2e0981", -1581 => x"06f8f738", -1582 => x"66678008", -1583 => x"05575b80", -1584 => x"7634efd1", -1585 => x"3977557b", -1586 => x"540b0b82", -1587 => x"d53df694", -1588 => x"05530b0b", -1589 => x"7b526851", -1590 => x"83dd3f80", -1591 => x"085c8008", -1592 => x"ff2ef8ca", -1593 => x"387a4aff", -1594 => x"8c397e0a", -1595 => x"100a7081", -1596 => x"0651560b", -1597 => x"0b75802e", -1598 => x"efba3882", -1599 => x"1e5eefb4", -1600 => x"397bfaca", -1601 => x"387e8106", -1602 => x"560b0b75", -1603 => x"802efabe", -1604 => x"380289ff", -1605 => x"055bb00b", -1606 => x"7b3482d5", -1607 => x"3d707c31", -1608 => x"ffb0055d", -1609 => x"56eeee39", -1610 => x"82d53df0", -1611 => x"05526351", -1612 => x"e9d13f80", -1613 => x"08f7f738", -1614 => x"6282d53d", -1615 => x"33595aef", -1616 => x"f7396061", -1617 => x"84057108", -1618 => x"5a425677", -1619 => x"8025f48f", -1620 => x"38fdb739", -1621 => x"60618405", -1622 => x"71085a42", -1623 => x"56805cf3", -1624 => x"bc396061", -1625 => x"84057108", -1626 => x"5a425681", -1627 => x"5cedd739", -1628 => x"60618405", -1629 => x"71086871", -1630 => x"0c527a5d", -1631 => x"4256eab3", -1632 => x"397bee83", -1633 => x"38ff1b78", -1634 => x"b706b007", -1635 => x"585b0b76", -1636 => x"0b7b3477", -1637 => x"832a580b", -1638 => x"0b77ea38", -1639 => x"7e810656", -1640 => x"0b0b7580", -1641 => x"2ef9a738", -1642 => x"76b02ef9", -1643 => x"a138ff1b", -1644 => x"5bb00b7b", -1645 => x"34fee339", -1646 => x"8189ac5b", -1647 => x"865cedd5", -1648 => x"3982d33d", -1649 => x"088a3880", -1650 => x"0b82d33d", -1651 => x"0cf6df39", -1652 => x"82d53df0", -1653 => x"05526351", -1654 => x"e8a93f80", -1655 => x"08f6cf38", -1656 => x"800b82d3", -1657 => x"3d0cf6c6", -1658 => x"39606184", -1659 => x"05710840", -1660 => x"42567d80", -1661 => x"25ebdd38", -1662 => x"ff793359", -1663 => x"5eebd839", -1664 => x"fc3d0d81", -1665 => x"8a940855", -1666 => x"b8150880", -1667 => x"2e973878", -1668 => x"540b0b77", -1669 => x"530b0b76", -1670 => x"52818a94", -1671 => x"0851e89b", -1672 => x"3f863d0d", -1673 => x"04745190", -1674 => x"c13f7854", -1675 => x"0b0b7753", -1676 => x"0b0b7652", -1677 => x"818a9408", -1678 => x"51e8803f", -1679 => x"863d0d04", -1680 => x"f63d0d7c", -1681 => x"7e615956", -1682 => x"58805674", -1683 => x"0b762ea0", -1684 => x"3876540b", -1685 => x"0b7e530b", -1686 => x"0b745277", -1687 => x"5182d53f", -1688 => x"80085580", -1689 => x"08ff2ea6", -1690 => x"3874800c", -1691 => x"8c3d0d04", -1692 => x"76540b0b", -1693 => x"75530b0b", -1694 => x"8c3df405", -1695 => x"52775182", -1696 => x"b33f8008", -1697 => x"558008ff", -1698 => x"2e098106", -1699 => x"dc388077", -1700 => x"0c818a78", -1701 => x"0c74800c", -1702 => x"8c3d0d04", -1703 => x"70707070", -1704 => x"77540b0b", -1705 => x"76530b0b", -1706 => x"7552818a", -1707 => x"940851ff", -1708 => x"8f3f5050", -1709 => x"505004ec", -1710 => x"3d0d6668", -1711 => x"6a6c6e73", -1712 => x"5c405d42", -1713 => x"42420b60", -1714 => x"802e819b", -1715 => x"38806008", -1716 => x"5a5d0b0b", -1717 => x"7c7a2781", -1718 => x"8338933d", -1719 => x"5b7b0884", -1720 => x"1d087d56", -1721 => x"7a08557c", -1722 => x"540b0b63", -1723 => x"530b0b40", -1724 => x"5efecd3f", -1725 => x"80085880", -1726 => x"08ff2e80", -1727 => x"fa38807a", -1728 => x"80083156", -1729 => x"567c7526", -1730 => x"83388156", -1731 => x"80087a27", -1732 => x"80da3875", -1733 => x"802e80d4", -1734 => x"3880081d", -1735 => x"5d60802e", -1736 => x"a7388056", -1737 => x"0b0b7580", -1738 => x"08259738", -1739 => x"751b550b", -1740 => x"0b743377", -1741 => x"70810559", -1742 => x"34811656", -1743 => x"770b7624", -1744 => x"eb387f08", -1745 => x"8405600c", -1746 => x"78708405", -1747 => x"5a08550b", -1748 => x"0b74802e", -1749 => x"b138797d", -1750 => x"26ff8238", -1751 => x"7c550b0b", -1752 => x"74800c96", -1753 => x"3d0d04ff", -1754 => x"5afee239", -1755 => x"7d7c0c7e", -1756 => x"841d0c7c", -1757 => x"55e83981", -1758 => x"8a620c80", -1759 => x"7c0c8008", -1760 => x"800c963d", -1761 => x"0d046080", -1762 => x"2e843874", -1763 => x"600c747c", -1764 => x"0cff1d80", -1765 => x"0c963d0d", -1766 => x"04fc3d0d", -1767 => x"79557854", -1768 => x"0b0b7753", -1769 => x"0b0b7652", -1770 => x"818a9408", -1771 => x"51fe883f", -1772 => x"863d0d04", -1773 => x"f83d0d7b", -1774 => x"7d7f8191", -1775 => x"94540b0b", -1776 => x"595755e3", -1777 => x"ce3f8008", -1778 => x"81269838", -1779 => x"74540b0b", -1780 => x"74802e88", -1781 => x"38757534", -1782 => x"81540b0b", -1783 => x"73800c8a", -1784 => x"3d0d0481", -1785 => x"89b45281", -1786 => x"919451be", -1787 => x"c93f8008", -1788 => x"81d93880", -1789 => x"08540b0b", -1790 => x"74802ee0", -1791 => x"3880ff76", -1792 => x"25d338ff", -1793 => x"8016530b", -1794 => x"0b8eff73", -1795 => x"2785b838", -1796 => x"f0801653", -1797 => x"0b0b83ef", -1798 => x"ff732782", -1799 => x"d038fc80", -1800 => x"8016530b", -1801 => x"0b80fbff", -1802 => x"ff732785", -1803 => x"c2388fff", -1804 => x"0a16530b", -1805 => x"0bf7c00a", -1806 => x"73278689", -1807 => x"38ff540b", -1808 => x"0bc00a76", -1809 => x"25ff9538", -1810 => x"75820a06", -1811 => x"709e2c70", -1812 => x"fc075151", -1813 => x"530b0b72", -1814 => x"75708105", -1815 => x"57347581", -1816 => x"fc0a0670", -1817 => x"982aff80", -1818 => x"0751530b", -1819 => x"0b727570", -1820 => x"81055734", -1821 => x"7587f080", -1822 => x"80067092", -1823 => x"2aff8007", -1824 => x"51530b0b", -1825 => x"72757081", -1826 => x"05573475", -1827 => x"8fe08006", -1828 => x"708c2aff", -1829 => x"80075153", -1830 => x"0b0b7275", -1831 => x"70810557", -1832 => x"34759fc0", -1833 => x"0670862a", -1834 => x"ff800751", -1835 => x"530b0b72", -1836 => x"75708105", -1837 => x"573475ff", -1838 => x"bf06ff80", -1839 => x"07530b0b", -1840 => x"72753486", -1841 => x"0b800c8a", -1842 => x"3d0d0481", -1843 => x"89bc5281", -1844 => x"919451bc", -1845 => x"e13f8008", -1846 => x"81f93875", -1847 => x"81ff0676", -1848 => x"882c7081", -1849 => x"ff068008", -1850 => x"5759540b", -1851 => x"0b587480", -1852 => x"2efde938", -1853 => x"76802efd", -1854 => x"d3388008", -1855 => x"80ff1870", -1856 => x"81ff0651", -1857 => x"540b0b56", -1858 => x"729e2683", -1859 => x"38815680", -1860 => x"08a01870", -1861 => x"81ff0651", -1862 => x"540b0b54", -1863 => x"0b0b728f", -1864 => x"26853881", -1865 => x"540b0b75", -1866 => x"7407530b", -1867 => x"0b72802e", -1868 => x"b4388008", -1869 => x"c019540b", -1870 => x"0b5672be", -1871 => x"26833881", -1872 => x"568008ff", -1873 => x"80197081", -1874 => x"ff065154", -1875 => x"0b0b540b", -1876 => x"0b7280fc", -1877 => x"26853881", -1878 => x"540b0b75", -1879 => x"7407530b", -1880 => x"0b7280da", -1881 => x"38ff0b80", -1882 => x"0c8a3d0d", -1883 => x"04fcd080", -1884 => x"16530b0b", -1885 => x"ff540b0b", -1886 => x"8fff7327", -1887 => x"fcde3875", -1888 => x"83e08006", -1889 => x"708c2ae0", -1890 => x"0751530b", -1891 => x"0b727570", -1892 => x"81055734", -1893 => x"759fc006", -1894 => x"70862aff", -1895 => x"80075153", -1896 => x"0b0b7275", -1897 => x"70810557", -1898 => x"3475ffbf", -1899 => x"06ff8007", -1900 => x"530b0b72", -1901 => x"7534830b", -1902 => x"800c8a3d", -1903 => x"0d047675", -1904 => x"70810557", -1905 => x"34777534", -1906 => x"82540b0b", -1907 => x"73800c8a", -1908 => x"3d0d0481", -1909 => x"89c45281", -1910 => x"919451ba", -1911 => x"d93f8008", -1912 => x"80eb3875", -1913 => x"81ff0676", -1914 => x"882c7081", -1915 => x"ff068008", -1916 => x"5759540b", -1917 => x"0b587480", -1918 => x"2efbe138", -1919 => x"76802efb", -1920 => x"cb388008", -1921 => x"530b0b81", -1922 => x"a0772785", -1923 => x"3881530b", -1924 => x"0b7681ff", -1925 => x"2efece38", -1926 => x"81707406", -1927 => x"540b0b54", -1928 => x"0b0b7280", -1929 => x"2efebe38", -1930 => x"8008530b", -1931 => x"0b81a078", -1932 => x"27853873", -1933 => x"530b0b77", -1934 => x"81ff2efe", -1935 => x"a8387274", -1936 => x"06530b0b", -1937 => x"72802efe", -1938 => x"9c38fef2", -1939 => x"398189cc", -1940 => x"52819194", -1941 => x"51b9df3f", -1942 => x"8008faf0", -1943 => x"38800876", -1944 => x"81ff0677", -1945 => x"882c7081", -1946 => x"ff065955", -1947 => x"59598154", -1948 => x"0b0b7480", -1949 => x"2efae538", -1950 => x"75802e82", -1951 => x"b438df16", -1952 => x"530b0b72", -1953 => x"80dd26fd", -1954 => x"dc38df18", -1955 => x"530b0b72", -1956 => x"80dd26fd", -1957 => x"d0387608", -1958 => x"9c387377", -1959 => x"0c9b7570", -1960 => x"81055734", -1961 => x"a4757081", -1962 => x"05573480", -1963 => x"c2757081", -1964 => x"05573483", -1965 => x"59757570", -1966 => x"81055734", -1967 => x"77753482", -1968 => x"19800c8a", -1969 => x"3d0d0475", -1970 => x"8fc00670", -1971 => x"862ac007", -1972 => x"51530b0b", -1973 => x"72757081", -1974 => x"05573475", -1975 => x"ffbf06ff", -1976 => x"8007530b", -1977 => x"0b727534", -1978 => x"82540b0b", -1979 => x"fdde3975", -1980 => x"80f08080", -1981 => x"0670922a", -1982 => x"f0075153", -1983 => x"0b0b7275", -1984 => x"70810557", -1985 => x"34758fe0", -1986 => x"8006708c", -1987 => x"2aff8007", -1988 => x"51530b0b", -1989 => x"72757081", -1990 => x"05573475", -1991 => x"9fc00670", -1992 => x"862aff80", -1993 => x"0751530b", -1994 => x"0b727570", -1995 => x"81055734", -1996 => x"75ffbf06", -1997 => x"ff800753", -1998 => x"0b0b7275", -1999 => x"34840b80", -2000 => x"0c8a3d0d", -2001 => x"047581c0", -2002 => x"0a067098", -2003 => x"2af80751", -2004 => x"530b0b72", -2005 => x"75708105", -2006 => x"57347587", -2007 => x"f0808006", -2008 => x"70922aff", -2009 => x"80075153", -2010 => x"0b0b7275", -2011 => x"70810557", -2012 => x"34758fe0", -2013 => x"8006708c", -2014 => x"2aff8007", -2015 => x"51530b0b", -2016 => x"72757081", -2017 => x"05573475", -2018 => x"9fc00670", -2019 => x"862aff80", -2020 => x"0751530b", -2021 => x"0b727570", -2022 => x"81055734", -2023 => x"75ffbf06", -2024 => x"ff800753", -2025 => x"0b0b7275", -2026 => x"34850b80", -2027 => x"0c8a3d0d", -2028 => x"04760880", -2029 => x"2e9d3880", -2030 => x"08770c9b", -2031 => x"75708105", -2032 => x"5734a875", -2033 => x"70810557", -2034 => x"3480c275", -2035 => x"70810557", -2036 => x"34835977", -2037 => x"75348119", -2038 => x"800c8a3d", -2039 => x"0d04fa3d", -2040 => x"0d78818a", -2041 => x"9408540b", -2042 => x"0b55b873", -2043 => x"0508802e", -2044 => x"81ce388c", -2045 => x"15227083", -2046 => x"ffff0670", -2047 => x"832a8132", -2048 => x"70810651", -2049 => x"55555672", -2050 => x"802e80ea", -2051 => x"3873842a", -2052 => x"81328106", -2053 => x"57ff530b", -2054 => x"0b76818b", -2055 => x"3873822a", -2056 => x"70810651", -2057 => x"530b0b72", -2058 => x"802ebf38", -2059 => x"b0150854", -2060 => x"0b0b7380", -2061 => x"2e9e3880", -2062 => x"c015530b", -2063 => x"0b73732e", -2064 => x"8f387352", -2065 => x"818a9408", -2066 => x"5188a53f", -2067 => x"8c152256", -2068 => x"76b0160c", -2069 => x"75db0653", -2070 => x"0b0b728c", -2071 => x"1623800b", -2072 => x"84160c90", -2073 => x"1508750c", -2074 => x"72560b0b", -2075 => x"75880753", -2076 => x"0b0b728c", -2077 => x"16239015", -2078 => x"08802e80", -2079 => x"cb388c15", -2080 => x"22708106", -2081 => x"55530b0b", -2082 => x"73a43872", -2083 => x"0a100a70", -2084 => x"81065153", -2085 => x"0b0b7287", -2086 => x"38941508", -2087 => x"540b0b73", -2088 => x"88160c80", -2089 => x"530b0b72", -2090 => x"800c883d", -2091 => x"0d04800b", -2092 => x"88160c94", -2093 => x"15083098", -2094 => x"160c8053", -2095 => x"0b0be839", -2096 => x"725183a6", -2097 => x"3ffeac39", -2098 => x"745194c6", -2099 => x"3f8c1522", -2100 => x"70810655", -2101 => x"530b0b73", -2102 => x"802effaf", -2103 => x"38d039f8", -2104 => x"3d0d7a58", -2105 => x"0b0b7780", -2106 => x"2e81a938", -2107 => x"818a9408", -2108 => x"540b0bb8", -2109 => x"1408802e", -2110 => x"80f9388c", -2111 => x"18227090", -2112 => x"2b70902c", -2113 => x"70832a81", -2114 => x"3281065c", -2115 => x"5157540b", -2116 => x"0b7880d7", -2117 => x"38901808", -2118 => x"570b0b76", -2119 => x"802e80cb", -2120 => x"38770877", -2121 => x"3177790c", -2122 => x"7683067a", -2123 => x"5855550b", -2124 => x"73853894", -2125 => x"1808560b", -2126 => x"0b758819", -2127 => x"0c807525", -2128 => x"aa387453", -2129 => x"0b0b7652", -2130 => x"9c180851", -2131 => x"a4180854", -2132 => x"0b0b732d", -2133 => x"800b8008", -2134 => x"2580cd38", -2135 => x"80081775", -2136 => x"80083156", -2137 => x"570b7480", -2138 => x"24d83880", -2139 => x"0b800c8a", -2140 => x"3d0d0473", -2141 => x"5181f33f", -2142 => x"8c182270", -2143 => x"902b7090", -2144 => x"2c70832a", -2145 => x"81328106", -2146 => x"5c515754", -2147 => x"0b0b78db", -2148 => x"38ff8239", -2149 => x"80c1df52", -2150 => x"818a9408", -2151 => x"5191973f", -2152 => x"8008800c", -2153 => x"8a3d0d04", -2154 => x"8c182280", -2155 => x"c007540b", -2156 => x"0b738c19", -2157 => x"23ff0b80", -2158 => x"0c8a3d0d", -2159 => x"04707251", -2160 => x"800b710c", -2161 => x"800b8472", -2162 => x"050c800b", -2163 => x"8872050c", -2164 => x"028e0522", -2165 => x"8c720523", -2166 => x"02920522", -2167 => x"8e720523", -2168 => x"800b9072", -2169 => x"050c800b", -2170 => x"9472050c", -2171 => x"800b9872", -2172 => x"050c709c", -2173 => x"72050c80", -2174 => x"f3d60ba0", -2175 => x"72050c80", -2176 => x"f4a90ba4", -2177 => x"72050c80", -2178 => x"f5bc0ba8", -2179 => x"72050c80", -2180 => x"f6960bac", -2181 => x"72050c50", -2182 => x"04fa3d0d", -2183 => x"797080dc", -2184 => x"298c7105", -2185 => x"540b0b7a", -2186 => x"530b0b56", -2187 => x"57949a3f", -2188 => x"80088008", -2189 => x"55568008", -2190 => x"802ea838", -2191 => x"80088c05", -2192 => x"540b0b80", -2193 => x"0b80080c", -2194 => x"76800884", -2195 => x"050c7380", -2196 => x"0888050c", -2197 => x"74530b0b", -2198 => x"80527351", -2199 => x"a4b13f75", -2200 => x"540b0b73", -2201 => x"800c883d", -2202 => x"0d04fc3d", -2203 => x"0d7680c7", -2204 => x"940bbc72", -2205 => x"050c5581", -2206 => x"0bb8160c", -2207 => x"800b84dc", -2208 => x"160c830b", -2209 => x"84e0160c", -2210 => x"84e81584", -2211 => x"e4160c74", -2212 => x"540b0b80", -2213 => x"530b0b84", -2214 => x"52841508", -2215 => x"51fe9e3f", -2216 => x"74540b0b", -2217 => x"81530b0b", -2218 => x"89528815", -2219 => x"0851fe8d", -2220 => x"3f74540b", -2221 => x"0b82530b", -2222 => x"0b8a528c", -2223 => x"150851fd", -2224 => x"fc3f863d", -2225 => x"0d04f93d", -2226 => x"0d79818a", -2227 => x"9408540b", -2228 => x"0b57b873", -2229 => x"0508802e", -2230 => x"80ce3884", -2231 => x"dc730556", -2232 => x"88160884", -2233 => x"1708ff05", -2234 => x"55558074", -2235 => x"24a2388c", -2236 => x"15227090", -2237 => x"2b70902c", -2238 => x"51540b0b", -2239 => x"5872802e", -2240 => x"80cd3880", -2241 => x"dc15ff15", -2242 => x"55550b73", -2243 => x"8025e038", -2244 => x"7508530b", -2245 => x"0b72802e", -2246 => x"9f387256", -2247 => x"88160884", -2248 => x"1708ff05", -2249 => x"5555c339", -2250 => x"7251febe", -2251 => x"3f818a94", -2252 => x"0884dc05", -2253 => x"56ffa939", -2254 => x"84527651", -2255 => x"fddb3f80", -2256 => x"08760c80", -2257 => x"08802e80", -2258 => x"c0388008", -2259 => x"56ce3981", -2260 => x"0b8c1623", -2261 => x"72750c72", -2262 => x"88160c72", -2263 => x"84160c72", -2264 => x"90160c72", -2265 => x"94160c72", -2266 => x"98160cff", -2267 => x"0b8e1623", -2268 => x"72b0160c", -2269 => x"72b4160c", -2270 => x"7280c416", -2271 => x"0c7280c8", -2272 => x"160c7480", -2273 => x"0c893d0d", -2274 => x"048c770c", -2275 => x"800b800c", -2276 => x"893d0d04", -2277 => x"707080c1", -2278 => x"df527351", -2279 => x"8d983f50", -2280 => x"50047081", -2281 => x"8a940851", -2282 => x"eb3f5004", -2283 => x"fb3d0d77", -2284 => x"705256a3", -2285 => x"873f8191", -2286 => x"f00b8805", -2287 => x"08847105", -2288 => x"08fc0670", -2289 => x"7b319fef", -2290 => x"05e08006", -2291 => x"e0800556", -2292 => x"56530b0b", -2293 => x"a0807424", -2294 => x"96388052", -2295 => x"7551abbb", -2296 => x"3f8191f8", -2297 => x"0815530b", -2298 => x"0b728008", -2299 => x"2e913875", -2300 => x"51a2ca3f", -2301 => x"80530b0b", -2302 => x"72800c87", -2303 => x"3d0d0473", -2304 => x"30527551", -2305 => x"ab953f80", -2306 => x"08ff2eab", -2307 => x"388191f0", -2308 => x"0b880508", -2309 => x"75753181", -2310 => x"07847205", -2311 => x"0c530b0b", -2312 => x"8191b408", -2313 => x"74318191", -2314 => x"b40c7551", -2315 => x"a28f3f81", -2316 => x"0b800c87", -2317 => x"3d0d0480", -2318 => x"527551aa", -2319 => x"de3f8191", -2320 => x"f00b8805", -2321 => x"08800871", -2322 => x"3156530b", -2323 => x"0b8f7525", -2324 => x"ff9d3880", -2325 => x"088191e4", -2326 => x"08318191", -2327 => x"b40c7481", -2328 => x"0784140c", -2329 => x"7551a1d5", -2330 => x"3f80530b", -2331 => x"0bff8939", -2332 => x"f63d0d7c", -2333 => x"7e540b0b", -2334 => x"5b72802e", -2335 => x"82a2387a", -2336 => x"51a1b93f", -2337 => x"f8730584", -2338 => x"71050870", -2339 => x"fe067073", -2340 => x"05847105", -2341 => x"08fc065d", -2342 => x"5859540b", -2343 => x"0b588191", -2344 => x"f808752e", -2345 => x"83833878", -2346 => x"84160c80", -2347 => x"73810654", -2348 => x"0b0b5a72", -2349 => x"0b7a2e81", -2350 => x"eb387815", -2351 => x"84710508", -2352 => x"81065153", -2353 => x"0b0b72a3", -2354 => x"38781757", -2355 => x"7981fc38", -2356 => x"88150853", -2357 => x"0b0b7281", -2358 => x"91f82e83", -2359 => x"9c388c15", -2360 => x"08708c15", -2361 => x"0c738872", -2362 => x"050c5676", -2363 => x"81078419", -2364 => x"0c761877", -2365 => x"710c530b", -2366 => x"0b79819f", -2367 => x"3883ff77", -2368 => x"2781da38", -2369 => x"76892a77", -2370 => x"832a5653", -2371 => x"0b0b7280", -2372 => x"2e80c038", -2373 => x"76862ab8", -2374 => x"05558473", -2375 => x"27b53880", -2376 => x"db730555", -2377 => x"947327ab", -2378 => x"38768c2a", -2379 => x"80ee0555", -2380 => x"80d47327", -2381 => x"9e38768f", -2382 => x"2a80f705", -2383 => x"5582d473", -2384 => x"27913876", -2385 => x"922a80fc", -2386 => x"05558ad4", -2387 => x"73278438", -2388 => x"80fe550b", -2389 => x"0b741010", -2390 => x"108191f0", -2391 => x"05887105", -2392 => x"0855560b", -2393 => x"730b762e", -2394 => x"82cd3884", -2395 => x"1408fc06", -2396 => x"530b0b76", -2397 => x"73278f38", -2398 => x"88140854", -2399 => x"0b0b7376", -2400 => x"2e098106", -2401 => x"e6388c14", -2402 => x"08708c1a", -2403 => x"0c74881a", -2404 => x"0c788872", -2405 => x"050c5677", -2406 => x"8c150c7a", -2407 => x"519f9e3f", -2408 => x"8c3d0d04", -2409 => x"77087871", -2410 => x"31597705", -2411 => x"88190854", -2412 => x"0b0b5772", -2413 => x"8191f82e", -2414 => x"80ea388c", -2415 => x"1808708c", -2416 => x"150c7388", -2417 => x"72050c56", -2418 => x"fdf03988", -2419 => x"15088c16", -2420 => x"08708c73", -2421 => x"050c5788", -2422 => x"170cfe8f", -2423 => x"3976832a", -2424 => x"70540b0b", -2425 => x"55800b75", -2426 => x"2481a338", -2427 => x"72822c81", -2428 => x"712b8191", -2429 => x"f4080781", -2430 => x"91f00b84", -2431 => x"050c530b", -2432 => x"0b741010", -2433 => x"108191f0", -2434 => x"05887105", -2435 => x"0855560b", -2436 => x"0b758c19", -2437 => x"0c738819", -2438 => x"0c778817", -2439 => x"0c778c15", -2440 => x"0cfef839", -2441 => x"815afd92", -2442 => x"39781773", -2443 => x"8106540b", -2444 => x"0b57729a", -2445 => x"38770878", -2446 => x"71315977", -2447 => x"058c1908", -2448 => x"881a0871", -2449 => x"8c72050c", -2450 => x"8872050c", -2451 => x"57570b0b", -2452 => x"76810784", -2453 => x"190c7781", -2454 => x"91f00b88", -2455 => x"050c8191", -2456 => x"ec087726", -2457 => x"feb53881", -2458 => x"91e80852", -2459 => x"7a51fabc", -2460 => x"3f7a519d", -2461 => x"c83ffea8", -2462 => x"3981788c", -2463 => x"150c7888", -2464 => x"150c738c", -2465 => x"1a0c7388", -2466 => x"1a0c5afc", -2467 => x"de398315", -2468 => x"70822c81", -2469 => x"712b8191", -2470 => x"f4080781", -2471 => x"91f00b84", -2472 => x"050c5153", -2473 => x"0b0b7410", -2474 => x"10108191", -2475 => x"f0058871", -2476 => x"05085556", -2477 => x"fed93974", -2478 => x"530b0b80", -2479 => x"7524a938", -2480 => x"72822c81", -2481 => x"712b8191", -2482 => x"f4080781", -2483 => x"91f00b84", -2484 => x"050c530b", -2485 => x"0b758c19", -2486 => x"0c738819", -2487 => x"0c778817", -2488 => x"0c778c15", -2489 => x"0cfdb439", -2490 => x"83157082", -2491 => x"2c81712b", -2492 => x"8191f408", -2493 => x"078191f0", -2494 => x"0b84050c", -2495 => x"51530b0b", -2496 => x"d439f23d", -2497 => x"0d606288", -2498 => x"71050870", -2499 => x"57575f5a", -2500 => x"74802e81", -2501 => x"9f388c1a", -2502 => x"2270832a", -2503 => x"81327081", -2504 => x"06515558", -2505 => x"0b738638", -2506 => x"901a0893", -2507 => x"387951f1", -2508 => x"ad3fff54", -2509 => x"0b0b8008", -2510 => x"80fa388c", -2511 => x"1a22587d", -2512 => x"08578078", -2513 => x"83ffff06", -2514 => x"700a100a", -2515 => x"70810651", -2516 => x"56575573", -2517 => x"0b752e80", -2518 => x"e2387491", -2519 => x"38760884", -2520 => x"18088819", -2521 => x"5956590b", -2522 => x"74802ef1", -2523 => x"3874540b", -2524 => x"0b888075", -2525 => x"27863888", -2526 => x"80540b0b", -2527 => x"73530b0b", -2528 => x"78529c1a", -2529 => x"0851a41a", -2530 => x"08540b0b", -2531 => x"732d800b", -2532 => x"80082583", -2533 => x"86388008", -2534 => x"19758008", -2535 => x"317f8805", -2536 => x"08800831", -2537 => x"70618805", -2538 => x"0c565659", -2539 => x"73ffab38", -2540 => x"80540b0b", -2541 => x"73800c90", -2542 => x"3d0d0475", -2543 => x"81327081", -2544 => x"06764151", -2545 => x"540b0b73", -2546 => x"802e81d0", -2547 => x"38749138", -2548 => x"76088418", -2549 => x"08881959", -2550 => x"56590b74", -2551 => x"802ef138", -2552 => x"881a0878", -2553 => x"83ffff06", -2554 => x"70892a70", -2555 => x"81065156", -2556 => x"59567380", -2557 => x"2e839e38", -2558 => x"7575278f", -2559 => x"3877872a", -2560 => x"70810651", -2561 => x"540b0b73", -2562 => x"82d63874", -2563 => x"76278338", -2564 => x"74560b0b", -2565 => x"75530b0b", -2566 => x"78527908", -2567 => x"5196f93f", -2568 => x"881a0876", -2569 => x"31881b0c", -2570 => x"7908167a", -2571 => x"0c74560b", -2572 => x"0b751975", -2573 => x"77317f88", -2574 => x"05087831", -2575 => x"70618805", -2576 => x"0c565659", -2577 => x"73802efe", -2578 => x"e7388c1a", -2579 => x"2258fefd", -2580 => x"39777854", -2581 => x"0b0b7953", -2582 => x"0b0b7b52", -2583 => x"5696b93f", -2584 => x"881a0878", -2585 => x"31881b0c", -2586 => x"7908187a", -2587 => x"0c7c7631", -2588 => x"5d0b0b7c", -2589 => x"8e387951", -2590 => x"f0e53f80", -2591 => x"08819c38", -2592 => x"80085f75", -2593 => x"19757731", -2594 => x"7f880508", -2595 => x"78317061", -2596 => x"88050c56", -2597 => x"56597380", -2598 => x"2efe9538", -2599 => x"74819438", -2600 => x"76088418", -2601 => x"08881959", -2602 => x"56590b74", -2603 => x"802ef138", -2604 => x"74530b0b", -2605 => x"8a527851", -2606 => x"94a33f80", -2607 => x"08793181", -2608 => x"055d8008", -2609 => x"84388115", -2610 => x"5d815f7c", -2611 => x"58747d27", -2612 => x"83387458", -2613 => x"941a0888", -2614 => x"1b087105", -2615 => x"575c807a", -2616 => x"085c540b", -2617 => x"0b901a08", -2618 => x"7b278538", -2619 => x"81540b0b", -2620 => x"75782585", -2621 => x"387380c2", -2622 => x"387b7824", -2623 => x"fed3387b", -2624 => x"530b0b78", -2625 => x"529c1a08", -2626 => x"51a41a08", -2627 => x"540b0b73", -2628 => x"2d800856", -2629 => x"80088024", -2630 => x"fed3388c", -2631 => x"1a2280c0", -2632 => x"07540b0b", -2633 => x"738c1b23", -2634 => x"ff540b0b", -2635 => x"73800c90", -2636 => x"3d0d047e", -2637 => x"ff9538fe", -2638 => x"f7397553", -2639 => x"0b0b7852", -2640 => x"7a5194d4", -2641 => x"3f790816", -2642 => x"7a0c7951", -2643 => x"ef913f80", -2644 => x"08c9387c", -2645 => x"76315d0b", -2646 => x"0b7cfea7", -2647 => x"38fe9739", -2648 => x"901a087a", -2649 => x"08713176", -2650 => x"71057056", -2651 => x"5a575281", -2652 => x"8a940851", -2653 => x"97c83f80", -2654 => x"08802eff", -2655 => x"9e388008", -2656 => x"901b0c80", -2657 => x"08167a0c", -2658 => x"77941b0c", -2659 => x"74881b0c", -2660 => x"7456fcf7", -2661 => x"39790858", -2662 => x"901a0878", -2663 => x"27853881", -2664 => x"540b0b75", -2665 => x"75278438", -2666 => x"73bd3894", -2667 => x"1a08560b", -2668 => x"0b757526", -2669 => x"80e13875", -2670 => x"530b0b78", -2671 => x"529c1a08", -2672 => x"51a41a08", -2673 => x"540b0b73", -2674 => x"2d800856", -2675 => x"80088024", -2676 => x"fcdd388c", -2677 => x"1a2280c0", -2678 => x"07540b0b", -2679 => x"738c1b23", -2680 => x"ff540b0b", -2681 => x"fec63975", -2682 => x"530b0b78", -2683 => x"52775193", -2684 => x"a73f7908", -2685 => x"167a0c79", -2686 => x"51ede43f", -2687 => x"8008802e", -2688 => x"fcad388c", -2689 => x"1a2280c0", -2690 => x"07540b0b", -2691 => x"738c1b23", -2692 => x"ff540b0b", -2693 => x"fe963974", -2694 => x"75540b0b", -2695 => x"79530b0b", -2696 => x"78525692", -2697 => x"f33f881a", -2698 => x"08753188", -2699 => x"1b0c7908", -2700 => x"157a0cfb", -2701 => x"fa39f93d", -2702 => x"0d797b58", -2703 => x"530b0b80", -2704 => x"0b818a94", -2705 => x"08530b0b", -2706 => x"5672722e", -2707 => x"80d03884", -2708 => x"dc730555", -2709 => x"0b0b7476", -2710 => x"2e80c338", -2711 => x"88150884", -2712 => x"1608ff05", -2713 => x"540b0b54", -2714 => x"0b0b8073", -2715 => x"24a3388c", -2716 => x"14227090", -2717 => x"2b70902c", -2718 => x"51530b0b", -2719 => x"587180ed", -2720 => x"3880dc14", -2721 => x"ff14540b", -2722 => x"0b540b0b", -2723 => x"728025df", -2724 => x"38740855", -2725 => x"0b0b74c4", -2726 => x"38818a94", -2727 => x"085284dc", -2728 => x"7205550b", -2729 => x"0b74802e", -2730 => x"bd388815", -2731 => x"08841608", -2732 => x"ff05540b", -2733 => x"0b540b0b", -2734 => x"807324a2", -2735 => x"388c1422", -2736 => x"70902b70", -2737 => x"902c5153", -2738 => x"0b0b5871", -2739 => x"b33880dc", -2740 => x"14ff1454", -2741 => x"0b0b540b", -2742 => x"0b728025", -2743 => x"e0387408", -2744 => x"550b0b74", -2745 => x"c5387580", -2746 => x"0c893d0d", -2747 => x"04735176", -2748 => x"2d758008", -2749 => x"0780dc15", -2750 => x"ff155555", -2751 => x"56ff8d39", -2752 => x"7351762d", -2753 => x"75800807", -2754 => x"80dc15ff", -2755 => x"15555556", -2756 => x"c839ea3d", -2757 => x"0d688c71", -2758 => x"0522700a", -2759 => x"100a8106", -2760 => x"57585674", -2761 => x"80ee388e", -2762 => x"16227090", -2763 => x"2b70902c", -2764 => x"51555880", -2765 => x"7424b538", -2766 => x"983dc405", -2767 => x"530b0b73", -2768 => x"52818a94", -2769 => x"0851a298", -2770 => x"3f800b80", -2771 => x"08249938", -2772 => x"7983e080", -2773 => x"06540b0b", -2774 => x"7380c080", -2775 => x"2e819f38", -2776 => x"73828080", -2777 => x"2e81a138", -2778 => x"8c162257", -2779 => x"0b0b7690", -2780 => x"8007540b", -2781 => x"0b738c17", -2782 => x"23888052", -2783 => x"818a9408", -2784 => x"5181c63f", -2785 => x"80089f38", -2786 => x"8c162282", -2787 => x"07540b0b", -2788 => x"738c1723", -2789 => x"80c31670", -2790 => x"770c9017", -2791 => x"0c810b94", -2792 => x"170c983d", -2793 => x"0d04818a", -2794 => x"940880c7", -2795 => x"940bbc72", -2796 => x"050c540b", -2797 => x"0b8c1622", -2798 => x"81800754", -2799 => x"0b0b738c", -2800 => x"17238008", -2801 => x"760c8008", -2802 => x"90170c88", -2803 => x"800b9417", -2804 => x"0c74802e", -2805 => x"cd388e16", -2806 => x"2270902b", -2807 => x"70902c53", -2808 => x"0b0b5558", -2809 => x"aacb3f80", -2810 => x"08802eff", -2811 => x"b5388c16", -2812 => x"22810754", -2813 => x"0b0b738c", -2814 => x"1723983d", -2815 => x"0d04810b", -2816 => x"8c172258", -2817 => x"55fee539", -2818 => x"a8160880", -2819 => x"f5bc2e09", -2820 => x"8106fed4", -2821 => x"388c1622", -2822 => x"88800754", -2823 => x"0b0b738c", -2824 => x"17238880", -2825 => x"0b80cc17", -2826 => x"0cfece39", -2827 => x"70707352", -2828 => x"818a9408", -2829 => x"51933f50", -2830 => x"50047070", -2831 => x"7352818a", -2832 => x"940851f0", -2833 => x"ab3f5050", -2834 => x"04f33d0d", -2835 => x"7f618b71", -2836 => x"0570f806", -2837 => x"5c55555e", -2838 => x"72962683", -2839 => x"38905980", -2840 => x"0b792474", -2841 => x"7a260753", -2842 => x"0b0b8054", -2843 => x"0b0b7274", -2844 => x"2e098106", -2845 => x"80d4387d", -2846 => x"5191c13f", -2847 => x"7883f726", -2848 => x"80cf3878", -2849 => x"832a7010", -2850 => x"10108191", -2851 => x"f0058c71", -2852 => x"05085959", -2853 => x"5a76782e", -2854 => x"83e73884", -2855 => x"1708fc06", -2856 => x"568c1708", -2857 => x"88180871", -2858 => x"8c72050c", -2859 => x"8872050c", -2860 => x"58751784", -2861 => x"71050881", -2862 => x"07847205", -2863 => x"0c530b0b", -2864 => x"7d5190f9", -2865 => x"3f881754", -2866 => x"0b0b7380", -2867 => x"0c8f3d0d", -2868 => x"0478892a", -2869 => x"79832a5b", -2870 => x"530b0b72", -2871 => x"802e80c0", -2872 => x"3878862a", -2873 => x"b8055a84", -2874 => x"7327b538", -2875 => x"80db7305", -2876 => x"5a947327", -2877 => x"ab38788c", -2878 => x"2a80ee05", -2879 => x"5a80d473", -2880 => x"279e3878", -2881 => x"8f2a80f7", -2882 => x"055a82d4", -2883 => x"73279138", -2884 => x"78922a80", -2885 => x"fc055a8a", -2886 => x"d4732784", -2887 => x"3880fe5a", -2888 => x"0b0b7910", -2889 => x"10108191", -2890 => x"f0058c71", -2891 => x"05085855", -2892 => x"0b760b75", -2893 => x"2ea63884", -2894 => x"1708fc06", -2895 => x"707a3155", -2896 => x"560b738f", -2897 => x"2489c638", -2898 => x"738025fe", -2899 => x"d4388c17", -2900 => x"08570b0b", -2901 => x"76752e09", -2902 => x"8106dc38", -2903 => x"811a5a81", -2904 => x"92800857", -2905 => x"0b0b7681", -2906 => x"91f82e82", -2907 => x"ed388417", -2908 => x"08fc0670", -2909 => x"7a315556", -2910 => x"0b738f24", -2911 => x"829c3881", -2912 => x"91f80b81", -2913 => x"92840c81", -2914 => x"91f80b81", -2915 => x"92800c73", -2916 => x"8025fe9d", -2917 => x"3883ff76", -2918 => x"27849d38", -2919 => x"75892a76", -2920 => x"832a5553", -2921 => x"0b0b7280", -2922 => x"2e80cc38", -2923 => x"75862ab8", -2924 => x"05540b0b", -2925 => x"847327bf", -2926 => x"3880db73", -2927 => x"05540b0b", -2928 => x"947327b3", -2929 => x"38758c2a", -2930 => x"80ee0554", -2931 => x"0b0b80d4", -2932 => x"7327a438", -2933 => x"758f2a80", -2934 => x"f705540b", -2935 => x"0b82d473", -2936 => x"27953875", -2937 => x"922a80fc", -2938 => x"05540b0b", -2939 => x"8ad47327", -2940 => x"863880fe", -2941 => x"540b0b73", -2942 => x"10101081", -2943 => x"91f00588", -2944 => x"71050856", -2945 => x"580b740b", -2946 => x"782e87a0", -2947 => x"38841508", -2948 => x"fc06530b", -2949 => x"0b757327", -2950 => x"8f388815", -2951 => x"08550b0b", -2952 => x"74782e09", -2953 => x"8106e638", -2954 => x"8c150881", -2955 => x"91f00b84", -2956 => x"0508718c", -2957 => x"1a0c7688", -2958 => x"1a0c7888", -2959 => x"73050c78", -2960 => x"8c180c5d", -2961 => x"5879530b", -2962 => x"0b807a24", -2963 => x"84983872", -2964 => x"822c8171", -2965 => x"2b5c530b", -2966 => x"0b7a7c26", -2967 => x"81ac387b", -2968 => x"7b06530b", -2969 => x"0b728398", -2970 => x"3879fc06", -2971 => x"84055a7a", -2972 => x"10707d06", -2973 => x"540b0b5b", -2974 => x"72838538", -2975 => x"841a5aef", -2976 => x"3988178c", -2977 => x"71050858", -2978 => x"580b760b", -2979 => x"782e0981", -2980 => x"06fc8838", -2981 => x"821a5afd", -2982 => x"c6397817", -2983 => x"79810784", -2984 => x"190c7081", -2985 => x"92840c70", -2986 => x"8192800c", -2987 => x"8191f80b", -2988 => x"8c72050c", -2989 => x"8c710508", -2990 => x"8872050c", -2991 => x"74810784", -2992 => x"72050c74", -2993 => x"71057571", -2994 => x"0c51530b", -2995 => x"0b7d518c", -2996 => x"ec3f8817", -2997 => x"540b0bfb", -2998 => x"f1398191", -2999 => x"f00b8405", -3000 => x"087a540b", -3001 => x"0b5c7980", -3002 => x"25fee438", -3003 => x"82f8397a", -3004 => x"097c0670", -3005 => x"8191f00b", -3006 => x"84050c5c", -3007 => x"7a105b0b", -3008 => x"0b7a7c26", -3009 => x"85387a85", -3010 => x"f2388191", -3011 => x"f00b8805", -3012 => x"08708472", -3013 => x"0508fc06", -3014 => x"707c317c", -3015 => x"72268f72", -3016 => x"25075757", -3017 => x"5c5d5572", -3018 => x"802e80e3", -3019 => x"38797a16", -3020 => x"8191e808", -3021 => x"1b907105", -3022 => x"5a55575b", -3023 => x"8191e408", -3024 => x"ff2e8938", -3025 => x"a08f7305", -3026 => x"e0800657", -3027 => x"0b0b7652", -3028 => x"7d5194c7", -3029 => x"3f800854", -3030 => x"0b0b8008", -3031 => x"ff2e9038", -3032 => x"80087627", -3033 => x"82b33874", -3034 => x"8191f02e", -3035 => x"82ab3881", -3036 => x"91f00b88", -3037 => x"05085584", -3038 => x"1508fc06", -3039 => x"707a317a", -3040 => x"72268f72", -3041 => x"25075255", -3042 => x"530b0b72", -3043 => x"84913874", -3044 => x"79810784", -3045 => x"170c7916", -3046 => x"708191f0", -3047 => x"0b88050c", -3048 => x"75810784", -3049 => x"72050c54", -3050 => x"0b0b7e52", -3051 => x"578b8e3f", -3052 => x"8817540b", -3053 => x"0bfa9339", -3054 => x"75832a70", -3055 => x"540b0b54", -3056 => x"0b0b8074", -3057 => x"2481a738", -3058 => x"72822c81", -3059 => x"712b8191", -3060 => x"f4080770", -3061 => x"8191f00b", -3062 => x"84050c75", -3063 => x"10101081", -3064 => x"91f00588", -3065 => x"71050858", -3066 => x"5a5d530b", -3067 => x"0b778c18", -3068 => x"0c748818", -3069 => x"0c768819", -3070 => x"0c768c16", -3071 => x"0cfcc639", -3072 => x"797a1010", -3073 => x"108191f0", -3074 => x"05705759", -3075 => x"5d8c1508", -3076 => x"570b0b76", -3077 => x"752ea638", -3078 => x"841708fc", -3079 => x"06707a31", -3080 => x"55560b73", -3081 => x"8f2483ef", -3082 => x"38738025", -3083 => x"84af388c", -3084 => x"1708570b", -3085 => x"0b76752e", -3086 => x"098106dc", -3087 => x"38881581", -3088 => x"1b708306", -3089 => x"555b5572", -3090 => x"c4387c83", -3091 => x"06530b0b", -3092 => x"72802efd", -3093 => x"9a38ff1d", -3094 => x"f819595d", -3095 => x"88180878", -3096 => x"2ee838fd", -3097 => x"9739831a", -3098 => x"530b0bfb", -3099 => x"e2398314", -3100 => x"70822c81", -3101 => x"712b8191", -3102 => x"f4080770", -3103 => x"8191f00b", -3104 => x"84050c76", -3105 => x"10101081", -3106 => x"91f00588", -3107 => x"71050859", -3108 => x"5b5e5153", -3109 => x"0b0bfed5", -3110 => x"398191b4", -3111 => x"08175880", -3112 => x"08762e81", -3113 => x"99388191", -3114 => x"e408ff2e", -3115 => x"849b3873", -3116 => x"76311881", -3117 => x"91b40c73", -3118 => x"87067057", -3119 => x"530b0b72", -3120 => x"802e8838", -3121 => x"88733170", -3122 => x"15555676", -3123 => x"149fff06", -3124 => x"a0807131", -3125 => x"1770540b", -3126 => x"0b7f530b", -3127 => x"0b57530b", -3128 => x"0b91b83f", -3129 => x"8008530b", -3130 => x"0b8008ff", -3131 => x"2e81a738", -3132 => x"8191b408", -3133 => x"16708191", -3134 => x"b40c7475", -3135 => x"8191f00b", -3136 => x"88050c74", -3137 => x"76311870", -3138 => x"81075155", -3139 => x"56587b81", -3140 => x"91f02e83", -3141 => x"c138798f", -3142 => x"2682ee38", -3143 => x"810b8415", -3144 => x"0c841508", -3145 => x"fc06707a", -3146 => x"317a7226", -3147 => x"8f722507", -3148 => x"5255530b", -3149 => x"0b72802e", -3150 => x"fcd53880", -3151 => x"e2398008", -3152 => x"9fff0653", -3153 => x"0b0b72fe", -3154 => x"dd387781", -3155 => x"91b40c81", -3156 => x"91f00b88", -3157 => x"05087b18", -3158 => x"81078472", -3159 => x"050c5581", -3160 => x"91e00878", -3161 => x"27863877", -3162 => x"8191e00c", -3163 => x"8191dc08", -3164 => x"7827fc83", -3165 => x"38778191", -3166 => x"dc0c8415", -3167 => x"08fc0670", -3168 => x"7a317a72", -3169 => x"268f7225", -3170 => x"07525553", -3171 => x"0b0b7280", -3172 => x"2efbfc38", -3173 => x"8a398074", -3174 => x"540b0b56", -3175 => x"fed2397d", -3176 => x"51879a3f", -3177 => x"800b800c", -3178 => x"8f3d0d04", -3179 => x"73530b0b", -3180 => x"807424ab", -3181 => x"3872822c", -3182 => x"81712b81", -3183 => x"91f40807", -3184 => x"708191f0", -3185 => x"0b84050c", -3186 => x"5d530b0b", -3187 => x"778c180c", -3188 => x"7488180c", -3189 => x"7688190c", -3190 => x"768c160c", -3191 => x"f8e73983", -3192 => x"1470822c", -3193 => x"81712b81", -3194 => x"91f40807", -3195 => x"708191f0", -3196 => x"0b84050c", -3197 => x"5e51530b", -3198 => x"0bd2397b", -3199 => x"7b06530b", -3200 => x"0b72fbfc", -3201 => x"38841a7b", -3202 => x"105c5aef", -3203 => x"39ff1a81", -3204 => x"7105515a", -3205 => x"f6c93978", -3206 => x"17798107", -3207 => x"84190c8c", -3208 => x"18088819", -3209 => x"08718c72", -3210 => x"050c8872", -3211 => x"050c5970", -3212 => x"8192840c", -3213 => x"70819280", -3214 => x"0c8191f8", -3215 => x"0b8c7205", -3216 => x"0c8c7105", -3217 => x"08887205", -3218 => x"0c748107", -3219 => x"8472050c", -3220 => x"74710575", -3221 => x"710c5153", -3222 => x"0b0bf8f1", -3223 => x"39751784", -3224 => x"71050881", -3225 => x"07847205", -3226 => x"0c530b0b", -3227 => x"8c170888", -3228 => x"1808718c", -3229 => x"72050c88", -3230 => x"72050c58", -3231 => x"7d5185bd", -3232 => x"3f881754", -3233 => x"0b0bf4c2", -3234 => x"39728415", -3235 => x"0cf41af8", -3236 => x"0670841e", -3237 => x"08810607", -3238 => x"841e0c70", -3239 => x"1d540b0b", -3240 => x"5b850b84", -3241 => x"140c850b", -3242 => x"88140c8f", -3243 => x"7b27fdaf", -3244 => x"38881c52", -3245 => x"7d51e3b8", -3246 => x"3f8191f0", -3247 => x"0b880508", -3248 => x"8191b408", -3249 => x"5955fd97", -3250 => x"39778191", -3251 => x"b40c7381", -3252 => x"91e40cfb", -3253 => x"e2397284", -3254 => x"150cfd83", -3255 => x"39fa3d0d", -3256 => x"7a790288", -3257 => x"05a70533", -3258 => x"5652530b", -3259 => x"0b837327", -3260 => x"8c387083", -3261 => x"06520b0b", -3262 => x"71802eb1", -3263 => x"38ff7305", -3264 => x"530b0b72", -3265 => x"ff2e9b38", -3266 => x"70335273", -3267 => x"0b722e94", -3268 => x"38817105", -3269 => x"ff14540b", -3270 => x"0b5172ff", -3271 => x"2e098106", -3272 => x"e7388051", -3273 => x"0b0b7080", -3274 => x"0c883d0d", -3275 => x"04707257", -3276 => x"55835175", -3277 => x"82802914", -3278 => x"ff720552", -3279 => x"560b7080", -3280 => x"25f13883", -3281 => x"732780cb", -3282 => x"38740876", -3283 => x"327009f7", -3284 => x"fbfdff72", -3285 => x"050670f8", -3286 => x"84828180", -3287 => x"06515151", -3288 => x"0b0b7080", -3289 => x"2e9e3874", -3290 => x"51805270", -3291 => x"3357730b", -3292 => x"772effb0", -3293 => x"38817105", -3294 => x"81730553", -3295 => x"0b0b5183", -3296 => x"7227e838", -3297 => x"fc730584", -3298 => x"1656530b", -3299 => x"0b728326", -3300 => x"ffb73874", -3301 => x"51fee639", -3302 => x"fa3d0d78", -3303 => x"7a7c7272", -3304 => x"72575757", -3305 => x"5956560b", -3306 => x"740b7627", -3307 => x"be387615", -3308 => x"51750b71", -3309 => x"27b53870", -3310 => x"7717ff14", -3311 => x"540b0b55", -3312 => x"530b0b71", -3313 => x"ff2e9d38", -3314 => x"ff14ff14", -3315 => x"540b0b54", -3316 => x"0b0b7233", -3317 => x"7434ff72", -3318 => x"05520b0b", -3319 => x"71ff2e09", -3320 => x"8106e538", -3321 => x"75800c88", -3322 => x"3d0d0476", -3323 => x"8f269c38", -3324 => x"ff720552", -3325 => x"0b0b71ff", -3326 => x"2eea3872", -3327 => x"70810554", -3328 => x"0b0b3374", -3329 => x"70810556", -3330 => x"34e63974", -3331 => x"76078306", -3332 => x"510b0b70", -3333 => x"db387575", -3334 => x"540b0b51", -3335 => x"72708405", -3336 => x"540b0b08", -3337 => x"71708405", -3338 => x"530b0b0c", -3339 => x"72708405", -3340 => x"540b0b08", -3341 => x"71708405", -3342 => x"530b0b0c", -3343 => x"72708405", -3344 => x"540b0b08", -3345 => x"71708405", -3346 => x"530b0b0c", -3347 => x"72708405", -3348 => x"540b0b08", -3349 => x"71708405", -3350 => x"530b0b0c", -3351 => x"f0720552", -3352 => x"0b0b718f", -3353 => x"26ffb538", -3354 => x"8372279c", -3355 => x"38727084", -3356 => x"05540b0b", -3357 => x"08717084", -3358 => x"05530b0b", -3359 => x"0cfc7205", -3360 => x"520b0b71", -3361 => x"8326e638", -3362 => x"70540b0b", -3363 => x"fee239fc", -3364 => x"3d0d7679", -3365 => x"71028c05", -3366 => x"9f053357", -3367 => x"55530b0b", -3368 => x"55837227", -3369 => x"8c387483", -3370 => x"06510b0b", -3371 => x"70802ea8", -3372 => x"38ff7205", -3373 => x"520b0b71", -3374 => x"ff2e9638", -3375 => x"73737081", -3376 => x"055534ff", -3377 => x"7205520b", -3378 => x"0b71ff2e", -3379 => x"098106ec", -3380 => x"3874800c", -3381 => x"863d0d04", -3382 => x"7474882b", -3383 => x"75077071", -3384 => x"902b0751", -3385 => x"540b0b51", -3386 => x"8f7227b0", -3387 => x"38727170", -3388 => x"8405530b", -3389 => x"0b0c7271", -3390 => x"70840553", -3391 => x"0b0b0c72", -3392 => x"71708405", -3393 => x"530b0b0c", -3394 => x"72717084", -3395 => x"05530b0b", -3396 => x"0cf07205", -3397 => x"520b0b71", -3398 => x"8f26d238", -3399 => x"83722795", -3400 => x"38727170", -3401 => x"8405530b", -3402 => x"0b0cfc72", -3403 => x"05520b0b", -3404 => x"718326ed", -3405 => x"3870530b", -3406 => x"0bfef639", -3407 => x"0404ef3d", -3408 => x"0d636567", -3409 => x"405d420b", -3410 => x"7b802e85", -3411 => x"ab386151", -3412 => x"eb3ff81c", -3413 => x"70847205", -3414 => x"0870fc06", -3415 => x"70628b05", -3416 => x"70f80641", -3417 => x"59455b5c", -3418 => x"41579674", -3419 => x"2782e238", -3420 => x"807b247e", -3421 => x"7c260759", -3422 => x"80540b0b", -3423 => x"78742e09", -3424 => x"810682c6", -3425 => x"38777b25", -3426 => x"82913877", -3427 => x"178191f0", -3428 => x"0b880508", -3429 => x"5e560b7c", -3430 => x"0b762e84", -3431 => x"ea388416", -3432 => x"0870fe06", -3433 => x"17847105", -3434 => x"08810651", -3435 => x"55550b73", -3436 => x"82a43874", -3437 => x"fc06597c", -3438 => x"762e858f", -3439 => x"3877195f", -3440 => x"0b0b7e7b", -3441 => x"25829438", -3442 => x"79810654", -3443 => x"0b0b7382", -3444 => x"dc387677", -3445 => x"08318471", -3446 => x"0508fc06", -3447 => x"565a7580", -3448 => x"2e93387c", -3449 => x"762e859c", -3450 => x"38741918", -3451 => x"590b0b78", -3452 => x"7b2584b0", -3453 => x"3879802e", -3454 => x"82b33877", -3455 => x"15567a0b", -3456 => x"762482a9", -3457 => x"388c1a08", -3458 => x"881b0871", -3459 => x"8c72050c", -3460 => x"8872050c", -3461 => x"55797659", -3462 => x"57881761", -3463 => x"fc055759", -3464 => x"0b75a426", -3465 => x"86ab387b", -3466 => x"79555593", -3467 => x"762780cf", -3468 => x"387b7084", -3469 => x"055d087c", -3470 => x"56790c74", -3471 => x"70840556", -3472 => x"088c180c", -3473 => x"9017540b", -3474 => x"0b9b7627", -3475 => x"b2387470", -3476 => x"84055608", -3477 => x"740c7470", -3478 => x"84055608", -3479 => x"94180c98", -3480 => x"17540b0b", -3481 => x"a3762797", -3482 => x"38747084", -3483 => x"05560874", -3484 => x"0c747084", -3485 => x"0556089c", -3486 => x"180ca017", -3487 => x"540b0b74", -3488 => x"70840556", -3489 => x"08747084", -3490 => x"05560c74", -3491 => x"70840556", -3492 => x"08747084", -3493 => x"05560c74", -3494 => x"08740c77", -3495 => x"7b31560b", -3496 => x"0b758f26", -3497 => x"80d13884", -3498 => x"17088106", -3499 => x"78078418", -3500 => x"0c771784", -3501 => x"71050881", -3502 => x"07847205", -3503 => x"0c540b0b", -3504 => x"6151fcf9", -3505 => x"3f881754", -3506 => x"0b0b7380", -3507 => x"0c933d0d", -3508 => x"04905bfd", -3509 => x"9b397856", -3510 => x"fdee398c", -3511 => x"16088817", -3512 => x"08718c72", -3513 => x"050c8872", -3514 => x"050c557e", -3515 => x"707c3157", -3516 => x"588f7627", -3517 => x"ffb1387a", -3518 => x"17841808", -3519 => x"81067c07", -3520 => x"84190c76", -3521 => x"81078472", -3522 => x"050c7671", -3523 => x"05847105", -3524 => x"08810784", -3525 => x"72050c55", -3526 => x"88055261", -3527 => x"51dad13f", -3528 => x"6151fc99", -3529 => x"3f881754", -3530 => x"0b0bff9e", -3531 => x"397d5261", -3532 => x"51ea963f", -3533 => x"80085980", -3534 => x"08802e81", -3535 => x"ab388008", -3536 => x"f8056084", -3537 => x"0508fe06", -3538 => x"61055557", -3539 => x"0b0b7674", -3540 => x"2e848d38", -3541 => x"fc18560b", -3542 => x"0b75a426", -3543 => x"81b0387b", -3544 => x"80085555", -3545 => x"93762780", -3546 => x"dc387470", -3547 => x"84055608", -3548 => x"80087084", -3549 => x"05800c0c", -3550 => x"80087570", -3551 => x"84055708", -3552 => x"71708405", -3553 => x"530b0b0c", -3554 => x"540b0b9b", -3555 => x"7627b638", -3556 => x"74708405", -3557 => x"56087470", -3558 => x"8405560c", -3559 => x"74708405", -3560 => x"56087470", -3561 => x"8405560c", -3562 => x"a3762799", -3563 => x"38747084", -3564 => x"05560874", -3565 => x"70840556", -3566 => x"0c747084", -3567 => x"05560874", -3568 => x"70840556", -3569 => x"0c747084", -3570 => x"05560874", -3571 => x"70840556", -3572 => x"0c747084", -3573 => x"05560874", -3574 => x"70840556", -3575 => x"0c740874", -3576 => x"0c7b5261", -3577 => x"51d9893f", -3578 => x"6151fad1", -3579 => x"3f78540b", -3580 => x"0b73800c", -3581 => x"933d0d04", -3582 => x"7d526151", -3583 => x"e8cb3f80", -3584 => x"08800c93", -3585 => x"3d0d0484", -3586 => x"160855fb", -3587 => x"a6397553", -3588 => x"0b0b7b52", -3589 => x"800851ff", -3590 => x"a4a23f7b", -3591 => x"526151d8", -3592 => x"cf3fc539", -3593 => x"8c160888", -3594 => x"1708718c", -3595 => x"72050c88", -3596 => x"72050c55", -3597 => x"8c1a0888", -3598 => x"1b08718c", -3599 => x"72050c88", -3600 => x"72050c55", -3601 => x"79795957", -3602 => x"fbcf3977", -3603 => x"19901c55", -3604 => x"550b730b", -3605 => x"7524faf0", -3606 => x"387a1770", -3607 => x"8191f00b", -3608 => x"88050c75", -3609 => x"7c318107", -3610 => x"8472050c", -3611 => x"5d841708", -3612 => x"81067b07", -3613 => x"84180c61", -3614 => x"51f9c23f", -3615 => x"8817540b", -3616 => x"0bfcc739", -3617 => x"74191890", -3618 => x"1c555d0b", -3619 => x"730b7d24", -3620 => x"fae3388c", -3621 => x"1a08881b", -3622 => x"08718c72", -3623 => x"050c8872", -3624 => x"050c5588", -3625 => x"1a61fc05", -3626 => x"57590b75", -3627 => x"a42681bc", -3628 => x"387b7955", -3629 => x"55937627", -3630 => x"80cf387b", -3631 => x"7084055d", -3632 => x"087c5679", -3633 => x"0c747084", -3634 => x"0556088c", -3635 => x"1b0c901a", -3636 => x"540b0b9b", -3637 => x"7627b238", -3638 => x"74708405", -3639 => x"5608740c", -3640 => x"74708405", -3641 => x"5608941b", -3642 => x"0c981a54", -3643 => x"0b0ba376", -3644 => x"27973874", -3645 => x"70840556", -3646 => x"08740c74", -3647 => x"70840556", -3648 => x"089c1b0c", -3649 => x"a01a540b", -3650 => x"0b747084", -3651 => x"05560874", -3652 => x"70840556", -3653 => x"0c747084", -3654 => x"05560874", -3655 => x"70840556", -3656 => x"0c740874", -3657 => x"0c7a1a70", -3658 => x"8191f00b", -3659 => x"88050c7d", -3660 => x"7c318107", -3661 => x"8472050c", -3662 => x"540b0b84", -3663 => x"1a088106", -3664 => x"7b07841b", -3665 => x"0c6151f7", -3666 => x"f43f7854", -3667 => x"0b0bfda1", -3668 => x"3975530b", -3669 => x"0b7b5278", -3670 => x"51ffa1e0", -3671 => x"3ffabc39", -3672 => x"841708fc", -3673 => x"06186058", -3674 => x"58fab039", -3675 => x"75530b0b", -3676 => x"7b527851", -3677 => x"ffa1c53f", -3678 => x"7a1a7081", -3679 => x"91f00b88", -3680 => x"050c7d7c", -3681 => x"31810784", -3682 => x"72050c54", -3683 => x"0b0b841a", -3684 => x"0881067b", -3685 => x"07841b0c", -3686 => x"ffab3970", -3687 => x"70707080", -3688 => x"0b819ab8", -3689 => x"0c765187", -3690 => x"853f8008", -3691 => x"530b0b80", -3692 => x"08ff2e89", -3693 => x"3872800c", -3694 => x"50505050", -3695 => x"04819ab8", -3696 => x"08540b0b", -3697 => x"73802eed", -3698 => x"38757471", -3699 => x"0c527280", -3700 => x"0c505050", -3701 => x"5004f93d", -3702 => x"0d797c55", -3703 => x"7b540b0b", -3704 => x"8e710522", -3705 => x"70902b70", -3706 => x"902c5557", -3707 => x"818a9408", -3708 => x"530b0b58", -3709 => x"5685e33f", -3710 => x"80085780", -3711 => x"0b800824", -3712 => x"933880d0", -3713 => x"16088008", -3714 => x"0580d017", -3715 => x"0c76800c", -3716 => x"893d0d04", -3717 => x"8c162283", -3718 => x"dfff0655", -3719 => x"0b0b748c", -3720 => x"17237680", -3721 => x"0c893d0d", -3722 => x"04fa3d0d", -3723 => x"788c7105", -3724 => x"2270882a", -3725 => x"70810651", -3726 => x"57585674", -3727 => x"b1388c16", -3728 => x"2283dfff", -3729 => x"06550b0b", -3730 => x"748c1723", -3731 => x"7a540b0b", -3732 => x"79530b0b", -3733 => x"8e162270", -3734 => x"902b7090", -3735 => x"2c540b0b", -3736 => x"56818a94", -3737 => x"08525682", -3738 => x"fe3f883d", -3739 => x"0d048254", -3740 => x"0b0b8053", -3741 => x"0b0b8e16", -3742 => x"2270902b", -3743 => x"70902c54", -3744 => x"0b0b5681", -3745 => x"8a940852", -3746 => x"5784913f", -3747 => x"8c162283", -3748 => x"dfff0655", -3749 => x"0b0b748c", -3750 => x"17237a54", -3751 => x"0b0b7953", -3752 => x"0b0b8e16", -3753 => x"2270902b", -3754 => x"70902c54", -3755 => x"0b0b5681", -3756 => x"8a940852", -3757 => x"5682b03f", -3758 => x"883d0d04", -3759 => x"f93d0d79", -3760 => x"7c557b54", -3761 => x"0b0b8e71", -3762 => x"05227090", -3763 => x"2b70902c", -3764 => x"5557818a", -3765 => x"9408530b", -3766 => x"0b585683", -3767 => x"bf3f8008", -3768 => x"578008ff", -3769 => x"2e9b388c", -3770 => x"1622a080", -3771 => x"07550b0b", -3772 => x"748c1723", -3773 => x"800880d0", -3774 => x"170c7680", -3775 => x"0c893d0d", -3776 => x"048c1622", -3777 => x"83dfff06", -3778 => x"550b0b74", -3779 => x"8c172376", -3780 => x"800c893d", -3781 => x"0d047070", -3782 => x"70748e71", -3783 => x"05227090", -3784 => x"2b70902c", -3785 => x"55515153", -3786 => x"0b0b818a", -3787 => x"94085181", -3788 => x"f43f5050", -3789 => x"5004fb3d", -3790 => x"0d777970", -3791 => x"72078306", -3792 => x"530b0b54", -3793 => x"0b0b5270", -3794 => x"99387173", -3795 => x"7308540b", -3796 => x"0b56540b", -3797 => x"0b717308", -3798 => x"2e80d038", -3799 => x"7375540b", -3800 => x"0b520b0b", -3801 => x"71337081", -3802 => x"ff065254", -3803 => x"0b0b7080", -3804 => x"2ea33872", -3805 => x"3355700b", -3806 => x"752e0981", -3807 => x"069a3881", -3808 => x"72058114", -3809 => x"71337081", -3810 => x"ff06540b", -3811 => x"0b56540b", -3812 => x"0b5270df", -3813 => x"38723355", -3814 => x"7381ff06", -3815 => x"7581ff06", -3816 => x"71713180", -3817 => x"0c525287", -3818 => x"3d0d0471", -3819 => x"0970f7fb", -3820 => x"fdff1406", -3821 => x"70f88482", -3822 => x"81800651", -3823 => x"51510b0b", -3824 => x"709d3884", -3825 => x"14841671", -3826 => x"08540b0b", -3827 => x"56540b0b", -3828 => x"7175082e", -3829 => x"d6387375", -3830 => x"540b0b52", -3831 => x"ff843980", -3832 => x"0b800c87", -3833 => x"3d0d04fb", -3834 => x"3d0d800b", -3835 => x"819ab80c", -3836 => x"7a530b0b", -3837 => x"79527851", -3838 => x"83c33f80", -3839 => x"08558008", -3840 => x"ff2e8838", -3841 => x"74800c87", -3842 => x"3d0d0481", -3843 => x"9ab80856", -3844 => x"0b0b7580", -3845 => x"2eee3877", -3846 => x"76710c54", -3847 => x"0b0b7480", -3848 => x"0c873d0d", -3849 => x"04707070", -3850 => x"70800b81", -3851 => x"9ab80c76", -3852 => x"5185db3f", -3853 => x"8008530b", -3854 => x"0b8008ff", -3855 => x"2e893872", -3856 => x"800c5050", -3857 => x"50500481", -3858 => x"9ab80854", -3859 => x"0b0b7380", -3860 => x"2eed3875", -3861 => x"74710c52", -3862 => x"72800c50", -3863 => x"50505004", -3864 => x"fc3d0d80", -3865 => x"0b819ab8", -3866 => x"0c785277", -3867 => x"51889c3f", -3868 => x"8008540b", -3869 => x"0b8008ff", -3870 => x"2e883873", -3871 => x"800c863d", -3872 => x"0d04819a", -3873 => x"b808550b", -3874 => x"0b74802e", -3875 => x"ee387675", -3876 => x"710c530b", -3877 => x"0b73800c", -3878 => x"863d0d04", -3879 => x"fb3d0d80", -3880 => x"0b819ab8", -3881 => x"0c7a530b", -3882 => x"0b795278", -3883 => x"5185e63f", -3884 => x"80085580", -3885 => x"08ff2e88", -3886 => x"3874800c", -3887 => x"873d0d04", -3888 => x"819ab808", -3889 => x"560b0b75", -3890 => x"802eee38", -3891 => x"7776710c", -3892 => x"540b0b74", -3893 => x"800c873d", -3894 => x"0d04fb3d", -3895 => x"0d800b81", -3896 => x"9ab80c7a", -3897 => x"530b0b79", -3898 => x"52785182", -3899 => x"cd3f8008", -3900 => x"558008ff", -3901 => x"2e883874", -3902 => x"800c873d", -3903 => x"0d04819a", -3904 => x"b808560b", -3905 => x"0b75802e", -3906 => x"ee387776", -3907 => x"710c540b", -3908 => x"0b74800c", -3909 => x"873d0d04", -3910 => x"810b800c", -3911 => x"04707281", -3912 => x"2e873880", -3913 => x"0b800c50", -3914 => x"04735181", -3915 => x"8a3f7070", -3916 => x"70819abc", -3917 => x"08510b0b", -3918 => x"708a3881", -3919 => x"9ac47081", -3920 => x"9abc0c51", -3921 => x"0b0b7075", -3922 => x"72055252", -3923 => x"ff530b0b", -3924 => x"7087fb80", -3925 => x"80268a38", -3926 => x"70819abc", -3927 => x"0c71530b", -3928 => x"0b72800c", -3929 => x"50505004", -3930 => x"70707070", -3931 => x"800b818a", -3932 => x"8808540b", -3933 => x"0b540b0b", -3934 => x"72812e9e", -3935 => x"3873819a", -3936 => x"c00cff8e", -3937 => x"863fff8c", -3938 => x"f73f8199", -3939 => x"f8528151", -3940 => x"ff90e53f", -3941 => x"80085187", -3942 => x"d53f7281", -3943 => x"9ac00cff", -3944 => x"8de93fff", -3945 => x"8cda3f81", -3946 => x"99f85281", -3947 => x"51ff90c8", -3948 => x"3f800851", -3949 => x"87b83f00", -3950 => x"ff3900ff", -3951 => x"39f53d0d", -3952 => x"7e60819a", -3953 => x"c008705b", -3954 => x"585b5b75", -3955 => x"80c63877", -3956 => x"7a25a338", -3957 => x"771b7033", -3958 => x"7081ff06", -3959 => x"58585975", -3960 => x"8a2e9a38", -3961 => x"7681ff06", -3962 => x"51ff8cfc", -3963 => x"3f811858", -3964 => x"790b7824", -3965 => x"df387980", -3966 => x"0c8d3d0d", -3967 => x"048d51ff", -3968 => x"8ce63f78", -3969 => x"337081ff", -3970 => x"065257ff", -3971 => x"8cda3f81", -3972 => x"1858dd39", -3973 => x"79557a54", -3974 => x"0b0b7d53", -3975 => x"0b0b8552", -3976 => x"8d3dfc05", -3977 => x"51ff8c9c", -3978 => x"3f800856", -3979 => x"86b93f7b", -3980 => x"80080c75", -3981 => x"800c8d3d", -3982 => x"0d04f63d", -3983 => x"0d7d7f81", -3984 => x"9ac00870", -3985 => x"5a585a5a", -3986 => x"7580ca38", -3987 => x"767925b6", -3988 => x"38761a56", -3989 => x"ff8bef3f", -3990 => x"80087634", -3991 => x"800b8008", -3992 => x"81ff0657", -3993 => x"580b758a", -3994 => x"2ea73875", -3995 => x"8d327030", -3996 => x"7080257a", -3997 => x"07515156", -3998 => x"0b0b75bf", -3999 => x"38811757", -4000 => x"780b7724", -4001 => x"cc387656", -4002 => x"0b0b7580", -4003 => x"0c8c3d0d", -4004 => x"048158d7", -4005 => x"39785579", -4006 => x"540b0b7c", -4007 => x"530b0b84", -4008 => x"528c3dfc", -4009 => x"0551ff8b", -4010 => x"9b3f8008", -4011 => x"5685b83f", -4012 => x"7a80080c", -4013 => x"75800c8c", -4014 => x"3d0d0481", -4015 => x"1756c939", -4016 => x"f93d0d79", -4017 => x"57819ac0", -4018 => x"08802eb2", -4019 => x"387651ff", -4020 => x"9dc13f7b", -4021 => x"567a5580", -4022 => x"08810554", -4023 => x"0b0b7653", -4024 => x"0b0b8252", -4025 => x"893dfc05", -4026 => x"51ff8ad8", -4027 => x"3f800857", -4028 => x"84f53f77", -4029 => x"80080c76", -4030 => x"800c893d", -4031 => x"0d0484e7", -4032 => x"3f850b80", -4033 => x"080cff0b", -4034 => x"800c893d", -4035 => x"0d04fb3d", -4036 => x"0d819ac0", -4037 => x"08705654", -4038 => x"0b0b7388", -4039 => x"3874800c", -4040 => x"873d0d04", -4041 => x"77530b0b", -4042 => x"8352873d", -4043 => x"fc0551ff", -4044 => x"8a923f80", -4045 => x"08540b0b", -4046 => x"84ad3f75", -4047 => x"80080c73", -4048 => x"800c873d", -4049 => x"0d04ff0b", -4050 => x"800c04fb", -4051 => x"3d0d7755", -4052 => x"819ac008", -4053 => x"802eae38", -4054 => x"7451ff9c", -4055 => x"b63f8008", -4056 => x"8105540b", -4057 => x"0b74530b", -4058 => x"0b875287", -4059 => x"3dfc0551", -4060 => x"ff89d13f", -4061 => x"80085583", -4062 => x"ee3f7580", -4063 => x"080c7480", -4064 => x"0c873d0d", -4065 => x"0483e03f", -4066 => x"850b8008", -4067 => x"0cff0b80", -4068 => x"0c873d0d", -4069 => x"04fa3d0d", -4070 => x"819ac008", -4071 => x"802ea738", -4072 => x"7a557954", -4073 => x"0b0b7853", -4074 => x"0b0b8652", -4075 => x"883dfc05", -4076 => x"51ff8990", -4077 => x"3f800856", -4078 => x"83ad3f76", -4079 => x"80080c75", -4080 => x"800c883d", -4081 => x"0d04839f", -4082 => x"3f9d0b80", -4083 => x"080cff0b", -4084 => x"800c883d", -4085 => x"0d04fb3d", -4086 => x"0d777956", -4087 => x"56807054", -4088 => x"0b0b540b", -4089 => x"0b737525", -4090 => x"9f387410", -4091 => x"1010f805", -4092 => x"52721670", -4093 => x"3370742b", -4094 => x"76078116", -4095 => x"f8165656", -4096 => x"56515174", -4097 => x"7324ea38", -4098 => x"73800c87", -4099 => x"3d0d04fc", -4100 => x"3d0d7678", -4101 => x"5555bc53", -4102 => x"0b0b8052", -4103 => x"7351e8ef", -4104 => x"3f845274", -4105 => x"51ffaf3f", -4106 => x"80087423", -4107 => x"84528415", -4108 => x"51ffa33f", -4109 => x"80088215", -4110 => x"23845288", -4111 => x"1551ff96", -4112 => x"3f800884", -4113 => x"150c8452", -4114 => x"8c1551ff", -4115 => x"893f8008", -4116 => x"88152384", -4117 => x"52901551", -4118 => x"fefc3f80", -4119 => x"088a1523", -4120 => x"84529415", -4121 => x"51feef3f", -4122 => x"80088c15", -4123 => x"23845298", -4124 => x"1551fee2", -4125 => x"3f80088e", -4126 => x"15238852", -4127 => x"9c1551fe", -4128 => x"d53f8008", -4129 => x"90150c86", -4130 => x"3d0d04e9", -4131 => x"3d0d6a81", -4132 => x"9ac00857", -4133 => x"570b7593", -4134 => x"3880c080", -4135 => x"0b84180c", -4136 => x"75ac180c", -4137 => x"75800c99", -4138 => x"3d0d0489", -4139 => x"3d70556a", -4140 => x"540b0b55", -4141 => x"8a52993d", -4142 => x"ffbc0551", -4143 => x"ff87853f", -4144 => x"80087753", -4145 => x"0b0b7552", -4146 => x"56fec43f", -4147 => x"81993f77", -4148 => x"80080c75", -4149 => x"800c993d", -4150 => x"0d04e93d", -4151 => x"0d695781", -4152 => x"9ac00880", -4153 => x"2ebb3876", -4154 => x"51ff99a7", -4155 => x"3f893d70", -4156 => x"56800881", -4157 => x"05557754", -4158 => x"0b0b568f", -4159 => x"52993dff", -4160 => x"bc0551ff", -4161 => x"86be3f80", -4162 => x"086b530b", -4163 => x"0b765257", -4164 => x"fdfd3f80", -4165 => x"d23f7780", -4166 => x"080c7680", -4167 => x"0c993d0d", -4168 => x"0480c43f", -4169 => x"850b8008", -4170 => x"0cff0b80", -4171 => x"0c993d0d", -4172 => x"04fc3d0d", -4173 => x"81540b0b", -4174 => x"819ac008", -4175 => x"88387380", -4176 => x"0c863d0d", -4177 => x"0476530b", -4178 => x"0b97b952", -4179 => x"863dfc05", -4180 => x"51ff85f0", -4181 => x"3f800854", -4182 => x"0b0b8c3f", -4183 => x"7480080c", -4184 => x"73800c86", -4185 => x"3d0d0481", -4186 => x"8a940880", -4187 => x"0c04f73d", -4188 => x"0d7b818a", -4189 => x"940882c8", -4190 => x"7105085a", -4191 => x"540b0b5a", -4192 => x"77802e80", -4193 => x"eb388188", -4194 => x"18841908", -4195 => x"ff058171", -4196 => x"2b595559", -4197 => x"80742481", -4198 => x"80388074", -4199 => x"2480c138", -4200 => x"73822b78", -4201 => x"71058805", -4202 => x"56568180", -4203 => x"19087706", -4204 => x"530b0b72", -4205 => x"802e80c3", -4206 => x"38781670", -4207 => x"08530b0b", -4208 => x"530b0b79", -4209 => x"51740853", -4210 => x"0b0b722d", -4211 => x"ff14fc17", -4212 => x"fc177981", -4213 => x"2c5a5757", -4214 => x"540b0b73", -4215 => x"8025cb38", -4216 => x"7708580b", -4217 => x"0b77ff9e", -4218 => x"38818a94", -4219 => x"08530b0b", -4220 => x"bc730508", -4221 => x"a9387951", -4222 => x"f7bd3f74", -4223 => x"08530b0b", -4224 => x"722dff14", -4225 => x"fc17fc17", -4226 => x"79812c5a", -4227 => x"5757540b", -4228 => x"0b738025", -4229 => x"ff9438c8", -4230 => x"398057fe", -4231 => x"fd397251", -4232 => x"bc730508", -4233 => x"530b0b72", -4234 => x"2d7951f7", -4235 => x"8a3f8c08", -4236 => x"028c0c70", -4237 => x"70707080", -4238 => x"530b0b8c", -4239 => x"088c0508", -4240 => x"528c0888", -4241 => x"050851ff", -4242 => x"8dd23f80", -4243 => x"0870800c", -4244 => x"540b0b50", -4245 => x"5050508c", -4246 => x"0c048c08", -4247 => x"028c0c70", -4248 => x"70707081", -4249 => x"530b0b8c", -4250 => x"088c0508", -4251 => x"528c0888", -4252 => x"050851ff", -4253 => x"8da63f80", -4254 => x"0870800c", -4255 => x"540b0b50", -4256 => x"5050508c", -4257 => x"0c047070", -4258 => x"819a800b", -4259 => x"fc057008", -4260 => x"52520b70", -4261 => x"ff2e9338", -4262 => x"702dfc72", -4263 => x"05700852", -4264 => x"520b70ff", -4265 => x"2e098106", -4266 => x"ef385050", -4267 => x"0404ff85", -4268 => x"e53f0400", -4269 => x"4379636c", -4270 => x"65732025", -4271 => x"640a0000", -4272 => x"48656c6c", -4273 => x"6f20776f", -4274 => x"726c6420", -4275 => x"310a0000", -4276 => x"48656c6c", -4277 => x"6f20776f", -4278 => x"726c6420", -4279 => x"320a0000", -4280 => x"0a000000", -4281 => x"20202020", -4282 => x"20202020", -4283 => x"20202020", -4284 => x"20202020", -4285 => x"30303030", -4286 => x"30303030", -4287 => x"30303030", -4288 => x"30303030", -4289 => x"000017e3", -4290 => x"0000138d", -4291 => x"0000138d", -4292 => x"000017d9", -4293 => x"0000138d", -4294 => x"0000138d", -4295 => x"0000138d", -4296 => x"0000138d", -4297 => x"0000138d", -4298 => x"0000138d", -4299 => x"00001364", -4300 => x"0000177e", -4301 => x"0000138d", -4302 => x"00001376", -4303 => x"000016ec", -4304 => x"0000138d", -4305 => x"000017af", -4306 => x"0000178a", -4307 => x"0000178a", -4308 => x"0000178a", -4309 => x"0000178a", -4310 => x"0000178a", -4311 => x"0000178a", -4312 => x"0000178a", -4313 => x"0000178a", -4314 => x"0000178a", -4315 => x"0000138d", -4316 => x"0000138d", -4317 => x"0000138d", -4318 => x"0000138d", -4319 => x"0000138d", -4320 => x"0000138d", -4321 => x"0000138d", -4322 => x"0000138d", -4323 => x"0000138d", -4324 => x"00001699", -4325 => x"00001326", -4326 => x"0000138d", -4327 => x"0000138d", -4328 => x"0000138d", -4329 => x"0000138d", -4330 => x"0000138d", -4331 => x"0000138d", -4332 => x"0000138d", -4333 => x"0000138d", -4334 => x"0000138d", -4335 => x"0000138d", -4336 => x"000012ec", -4337 => x"0000138d", -4338 => x"0000138d", -4339 => x"0000138d", -4340 => x"00001553", -4341 => x"0000138d", -4342 => x"00001015", -4343 => x"0000138d", -4344 => x"0000138d", -4345 => x"00001733", -4346 => x"0000138d", -4347 => x"0000138d", -4348 => x"0000138d", -4349 => x"0000138d", -4350 => x"0000138d", -4351 => x"0000138d", -4352 => x"0000138d", -4353 => x"0000138d", -4354 => x"0000138d", -4355 => x"0000138d", -4356 => x"00001699", -4357 => x"0000132a", -4358 => x"0000138d", -4359 => x"0000138d", -4360 => x"0000138d", -4361 => x"0000168e", -4362 => x"0000132a", -4363 => x"0000138d", -4364 => x"0000138d", -4365 => x"000015d8", -4366 => x"0000138d", -4367 => x"000015a8", -4368 => x"000012f0", -4369 => x"000015f7", -4370 => x"00001383", -4371 => x"0000138d", -4372 => x"00001553", -4373 => x"0000138d", -4374 => x"00001019", -4375 => x"0000138d", -4376 => x"0000138d", -4377 => x"000017ba", -4378 => x"62756720", -4379 => x"696e2076", -4380 => x"66707269", -4381 => x"6e74663a", -4382 => x"20626164", -4383 => x"20626173", -4384 => x"65000000", -4385 => x"30313233", -4386 => x"34353637", -4387 => x"38396162", -4388 => x"63646566", -4389 => x"00000000", -4390 => x"30313233", -4391 => x"34353637", -4392 => x"38394142", -4393 => x"43444546", -4394 => x"00000000", -4395 => x"286e756c", -4396 => x"6c290000", -4397 => x"432d5554", -4398 => x"462d3800", -4399 => x"432d534a", -4400 => x"49530000", -4401 => x"432d4555", -4402 => x"434a5000", -4403 => x"432d4a49", -4404 => x"53000000", -4405 => x"43000000", -4406 => x"2e000000", -4407 => x"49534f2d", -4408 => x"38383539", -4409 => x"2d310000", -4410 => x"64756d6d", -4411 => x"792e6578", -4412 => x"65000000", -4413 => x"00ffffff", -4414 => x"ff00ffff", -4415 => x"ffff00ff", -4416 => x"ffffff00", -4417 => x"00000000", -4418 => x"00000000", -4419 => x"00000000", -4420 => x"00004d08", -4421 => x"00004518", -4422 => x"00000000", -4423 => x"00004780", -4424 => x"000047dc", -4425 => x"00004838", -4426 => x"00000000", -4427 => x"00000000", -4428 => x"00000000", -4429 => x"00000000", -4430 => x"00000000", -4431 => x"00000000", -4432 => x"00000000", -4433 => x"00000000", -4434 => x"00000000", -4435 => x"000044d4", -4436 => x"00000000", -4437 => x"00000000", -4438 => x"00000000", -4439 => x"00000000", -4440 => x"00000000", -4441 => x"00000000", -4442 => x"00000000", -4443 => x"00000000", -4444 => x"00000000", -4445 => x"00000000", -4446 => x"00000000", -4447 => x"00000000", -4448 => x"00000000", -4449 => x"00000000", -4450 => x"00000000", -4451 => x"00000000", -4452 => x"00000000", -4453 => x"00000000", -4454 => x"00000000", -4455 => x"00000000", -4456 => x"00000000", -4457 => x"00000000", -4458 => x"00000000", -4459 => x"00000000", -4460 => x"00000000", -4461 => x"00000000", -4462 => x"00000000", -4463 => x"00000000", -4464 => x"00000001", -4465 => x"330eabcd", -4466 => x"1234e66d", -4467 => x"deec0005", -4468 => x"000b0000", -4469 => x"00000000", -4470 => x"00000000", -4471 => x"00000000", -4472 => x"00000000", -4473 => x"00000000", -4474 => x"00000000", -4475 => x"00000000", -4476 => x"00000000", -4477 => x"00000000", -4478 => x"00000000", -4479 => x"00000000", -4480 => x"00000000", -4481 => x"00000000", -4482 => x"00000000", -4483 => x"00000000", -4484 => x"00000000", -4485 => x"00000000", -4486 => x"00000000", -4487 => x"00000000", -4488 => x"00000000", -4489 => x"00000000", -4490 => x"00000000", -4491 => x"00000000", -4492 => x"00000000", -4493 => x"00000000", -4494 => x"00000000", -4495 => x"00000000", -4496 => x"00000000", -4497 => x"00000000", -4498 => x"00000000", -4499 => x"00000000", -4500 => x"00000000", -4501 => x"00000000", -4502 => x"00000000", -4503 => x"00000000", -4504 => x"00000000", -4505 => x"00000000", -4506 => x"00000000", -4507 => x"00000000", -4508 => x"00000000", -4509 => x"00000000", -4510 => x"00000000", -4511 => x"00000000", -4512 => x"00000000", -4513 => x"00000000", -4514 => x"00000000", -4515 => x"00000000", -4516 => x"00000000", -4517 => x"00000000", -4518 => x"00000000", -4519 => x"00000000", -4520 => x"00000000", -4521 => x"00000000", -4522 => x"00000000", -4523 => x"00000000", -4524 => x"00000000", -4525 => x"00000000", -4526 => x"00000000", -4527 => x"00000000", -4528 => x"00000000", -4529 => x"00000000", -4530 => x"00000000", -4531 => x"00000000", -4532 => x"00000000", -4533 => x"00000000", -4534 => x"00000000", -4535 => x"00000000", -4536 => x"00000000", -4537 => x"00000000", -4538 => x"00000000", -4539 => x"00000000", -4540 => x"00000000", -4541 => x"00000000", -4542 => x"00000000", -4543 => x"00000000", -4544 => x"00000000", -4545 => x"00000000", -4546 => x"00000000", -4547 => x"00000000", -4548 => x"00000000", -4549 => x"00000000", -4550 => x"00000000", -4551 => x"00000000", -4552 => x"00000000", -4553 => x"00000000", -4554 => x"00000000", -4555 => x"00000000", -4556 => x"00000000", -4557 => x"00000000", -4558 => x"00000000", -4559 => x"00000000", -4560 => x"00000000", -4561 => x"00000000", -4562 => x"00000000", -4563 => x"00000000", -4564 => x"00000000", -4565 => x"00000000", -4566 => x"00000000", -4567 => x"00000000", -4568 => x"00000000", -4569 => x"00000000", -4570 => x"00000000", -4571 => x"00000000", -4572 => x"00000000", -4573 => x"00000000", -4574 => x"00000000", -4575 => x"00000000", -4576 => x"00000000", -4577 => x"00000000", -4578 => x"00000000", -4579 => x"00000000", -4580 => x"00000000", -4581 => x"00000000", -4582 => x"00000000", -4583 => x"00000000", -4584 => x"00000000", -4585 => x"00000000", -4586 => x"00000000", -4587 => x"00000000", -4588 => x"00000000", -4589 => x"00000000", -4590 => x"00000000", -4591 => x"00000000", -4592 => x"00000000", -4593 => x"00000000", -4594 => x"00000000", -4595 => x"00000000", -4596 => x"00000000", -4597 => x"00000000", -4598 => x"00000000", -4599 => x"00000000", -4600 => x"00000000", -4601 => x"00000000", -4602 => x"00000000", -4603 => x"00000000", -4604 => x"00000000", -4605 => x"00000000", -4606 => x"00000000", -4607 => x"00000000", -4608 => x"00000000", -4609 => x"00000000", -4610 => x"00000000", -4611 => x"00000000", -4612 => x"00000000", -4613 => x"00000000", -4614 => x"00000000", -4615 => x"00000000", -4616 => x"00000000", -4617 => x"00000000", -4618 => x"00000000", -4619 => x"00000000", -4620 => x"00000000", -4621 => x"00000000", -4622 => x"00000000", -4623 => x"00000000", -4624 => x"00000000", -4625 => x"00000000", -4626 => x"00000000", -4627 => x"00000000", -4628 => x"00000000", -4629 => x"00000000", -4630 => x"00000000", -4631 => x"00000000", -4632 => x"00000000", -4633 => x"00000000", -4634 => x"00000000", -4635 => x"00000000", -4636 => x"00000000", -4637 => x"00000000", -4638 => x"00000000", -4639 => x"00000000", -4640 => x"00000000", -4641 => x"00000000", -4642 => x"00000000", -4643 => x"00000000", -4644 => x"00000000", -4645 => x"43000000", -4646 => x"00000000", -4647 => x"00000000", -4648 => x"00000000", -4649 => x"00000000", -4650 => x"00000000", -4651 => x"00000001", -4652 => x"000044dc", -4653 => x"00000000", -4654 => x"00000000", -4655 => x"00000000", -4656 => x"00000000", -4657 => x"00000000", -4658 => x"00000000", -4659 => x"00000000", -4660 => x"00000000", -4661 => x"00000000", -4662 => x"00000000", -4663 => x"00000000", -4664 => x"00000000", -4665 => x"ffffffff", -4666 => x"00000000", -4667 => x"00020000", -4668 => x"00000000", -4669 => x"00000000", -4670 => x"000048f0", -4671 => x"000048f0", -4672 => x"000048f8", -4673 => x"000048f8", -4674 => x"00004900", -4675 => x"00004900", -4676 => x"00004908", -4677 => x"00004908", -4678 => x"00004910", -4679 => x"00004910", -4680 => x"00004918", -4681 => x"00004918", -4682 => x"00004920", -4683 => x"00004920", -4684 => x"00004928", -4685 => x"00004928", -4686 => x"00004930", -4687 => x"00004930", -4688 => x"00004938", -4689 => x"00004938", -4690 => x"00004940", -4691 => x"00004940", -4692 => x"00004948", -4693 => x"00004948", -4694 => x"00004950", -4695 => x"00004950", -4696 => x"00004958", -4697 => x"00004958", -4698 => x"00004960", -4699 => x"00004960", -4700 => x"00004968", -4701 => x"00004968", -4702 => x"00004970", -4703 => x"00004970", -4704 => x"00004978", -4705 => x"00004978", -4706 => x"00004980", -4707 => x"00004980", -4708 => x"00004988", -4709 => x"00004988", -4710 => x"00004990", -4711 => x"00004990", -4712 => x"00004998", -4713 => x"00004998", -4714 => x"000049a0", -4715 => x"000049a0", -4716 => x"000049a8", -4717 => x"000049a8", -4718 => x"000049b0", -4719 => x"000049b0", -4720 => x"000049b8", -4721 => x"000049b8", -4722 => x"000049c0", -4723 => x"000049c0", -4724 => x"000049c8", -4725 => x"000049c8", -4726 => x"000049d0", -4727 => x"000049d0", -4728 => x"000049d8", -4729 => x"000049d8", -4730 => x"000049e0", -4731 => x"000049e0", -4732 => x"000049e8", -4733 => x"000049e8", -4734 => x"000049f0", -4735 => x"000049f0", -4736 => x"000049f8", -4737 => x"000049f8", -4738 => x"00004a00", -4739 => x"00004a00", -4740 => x"00004a08", -4741 => x"00004a08", -4742 => x"00004a10", -4743 => x"00004a10", -4744 => x"00004a18", -4745 => x"00004a18", -4746 => x"00004a20", -4747 => x"00004a20", -4748 => x"00004a28", -4749 => x"00004a28", -4750 => x"00004a30", -4751 => x"00004a30", -4752 => x"00004a38", -4753 => x"00004a38", -4754 => x"00004a40", -4755 => x"00004a40", -4756 => x"00004a48", -4757 => x"00004a48", -4758 => x"00004a50", -4759 => x"00004a50", -4760 => x"00004a58", -4761 => x"00004a58", -4762 => x"00004a60", -4763 => x"00004a60", -4764 => x"00004a68", -4765 => x"00004a68", -4766 => x"00004a70", -4767 => x"00004a70", -4768 => x"00004a78", -4769 => x"00004a78", -4770 => x"00004a80", -4771 => x"00004a80", -4772 => x"00004a88", -4773 => x"00004a88", -4774 => x"00004a90", -4775 => x"00004a90", -4776 => x"00004a98", -4777 => x"00004a98", -4778 => x"00004aa0", -4779 => x"00004aa0", -4780 => x"00004aa8", -4781 => x"00004aa8", -4782 => x"00004ab0", -4783 => x"00004ab0", -4784 => x"00004ab8", -4785 => x"00004ab8", -4786 => x"00004ac0", -4787 => x"00004ac0", -4788 => x"00004ac8", -4789 => x"00004ac8", -4790 => x"00004ad0", -4791 => x"00004ad0", -4792 => x"00004ad8", -4793 => x"00004ad8", -4794 => x"00004ae0", -4795 => x"00004ae0", -4796 => x"00004ae8", -4797 => x"00004ae8", -4798 => x"00004af0", -4799 => x"00004af0", -4800 => x"00004af8", -4801 => x"00004af8", -4802 => x"00004b00", -4803 => x"00004b00", -4804 => x"00004b08", -4805 => x"00004b08", -4806 => x"00004b10", -4807 => x"00004b10", -4808 => x"00004b18", -4809 => x"00004b18", -4810 => x"00004b20", -4811 => x"00004b20", -4812 => x"00004b28", -4813 => x"00004b28", -4814 => x"00004b30", -4815 => x"00004b30", -4816 => x"00004b38", -4817 => x"00004b38", -4818 => x"00004b40", -4819 => x"00004b40", -4820 => x"00004b48", -4821 => x"00004b48", -4822 => x"00004b50", -4823 => x"00004b50", -4824 => x"00004b58", -4825 => x"00004b58", -4826 => x"00004b60", -4827 => x"00004b60", -4828 => x"00004b68", -4829 => x"00004b68", -4830 => x"00004b70", -4831 => x"00004b70", -4832 => x"00004b78", -4833 => x"00004b78", -4834 => x"00004b80", -4835 => x"00004b80", -4836 => x"00004b88", -4837 => x"00004b88", -4838 => x"00004b90", -4839 => x"00004b90", -4840 => x"00004b98", -4841 => x"00004b98", -4842 => x"00004ba0", -4843 => x"00004ba0", -4844 => x"00004ba8", -4845 => x"00004ba8", -4846 => x"00004bb0", -4847 => x"00004bb0", -4848 => x"00004bb8", -4849 => x"00004bb8", -4850 => x"00004bc0", -4851 => x"00004bc0", -4852 => x"00004bc8", -4853 => x"00004bc8", -4854 => x"00004bd0", -4855 => x"00004bd0", -4856 => x"00004bd8", -4857 => x"00004bd8", -4858 => x"00004be0", -4859 => x"00004be0", -4860 => x"00004be8", -4861 => x"00004be8", -4862 => x"00004bf0", -4863 => x"00004bf0", -4864 => x"00004bf8", -4865 => x"00004bf8", -4866 => x"00004c00", -4867 => x"00004c00", -4868 => x"00004c08", -4869 => x"00004c08", -4870 => x"00004c10", -4871 => x"00004c10", -4872 => x"00004c18", -4873 => x"00004c18", -4874 => x"00004c20", -4875 => x"00004c20", -4876 => x"00004c28", -4877 => x"00004c28", -4878 => x"00004c30", -4879 => x"00004c30", -4880 => x"00004c38", -4881 => x"00004c38", -4882 => x"00004c40", -4883 => x"00004c40", -4884 => x"00004c48", -4885 => x"00004c48", -4886 => x"00004c50", -4887 => x"00004c50", -4888 => x"00004c58", -4889 => x"00004c58", -4890 => x"00004c60", -4891 => x"00004c60", -4892 => x"00004c68", -4893 => x"00004c68", -4894 => x"00004c70", -4895 => x"00004c70", -4896 => x"00004c78", -4897 => x"00004c78", -4898 => x"00004c80", -4899 => x"00004c80", -4900 => x"00004c88", -4901 => x"00004c88", -4902 => x"00004c90", -4903 => x"00004c90", -4904 => x"00004c98", -4905 => x"00004c98", -4906 => x"00004ca0", -4907 => x"00004ca0", -4908 => x"00004ca8", -4909 => x"00004ca8", -4910 => x"00004cb0", -4911 => x"00004cb0", -4912 => x"00004cb8", -4913 => x"00004cb8", -4914 => x"00004cc0", -4915 => x"00004cc0", -4916 => x"00004cc8", -4917 => x"00004cc8", -4918 => x"00004cd0", -4919 => x"00004cd0", -4920 => x"00004cd8", -4921 => x"00004cd8", -4922 => x"00004ce0", -4923 => x"00004ce0", -4924 => x"00004ce8", -4925 => x"00004ce8", -4926 => x"000044e8", -4927 => x"ffffffff", -4928 => x"00000000", -4929 => x"ffffffff", -4930 => 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/zpu3/src/dualport_ram_synplicity.vhd b/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd deleted file mode 100644 index 83a7de2..0000000 --- a/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd +++ /dev/null @@ -1,5012 +0,0 @@ -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 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 := -signal ram : ram_type := -( -0 => x"800b0b0b", -1 => x"0b0b8070", -2 => x"0b0b818a", -3 => x"dc0c3a0b", -4 => x"0b80dab4", -5 => x"04000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80db972d", -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"832b0b2a", -20 => x"83ffff06", -21 => x"52810504", -22 => x"00000000", -23 => x"00000000", -24 => x"71fd0608", -25 => x"83ffff73", -26 => x"83060981", -27 => x"05820583", -28 => x"2b0b2b09", -29 => x"067383ff", -30 => x"ff0b0b0b", -31 => x"0b83a704", -32 => x"72098105", -33 => x"72057373", -34 => x"09060906", -35 => x"73097306", -36 => x"070a8106", -37 => x"53518105", -38 => x"04000000", -39 => x"00000000", -40 => x"72722473", -41 => x"732e0753", -42 => x"51810504", -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"53518105", -55 => x"04000000", -56 => x"72722673", -57 => x"732e0753", -58 => x"51810504", -59 => x"00000000", -60 => x"00000000", -61 => x"00000000", -62 => x"00000000", -63 => x"00000000", -64 => x"72ff0571", -65 => x"81050673", -66 => x"ff050972", -67 => x"74058005", -68 => x"06075350", -69 => x"50040000", -70 => x"00000000", -71 => x"00000000", -72 => x"0b0b0b8c", -73 => x"f8040000", -74 => x"00000000", -75 => x"00000000", -76 => x"00000000", -77 => x"00000000", -78 => x"00000000", -79 => x"00000000", -80 => x"720a722b", -81 => x"0a535181", -82 => x"05040000", -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"81050400", -102 => x"00000000", -103 => x"00000000", -104 => x"71718105", -105 => x"53510406", -106 => x"73830609", -107 => x"81058205", -108 => x"832b0b2b", -109 => x"0772fc06", -110 => x"0c515181", -111 => x"05040000", -112 => x"72098105", -113 => x"72050970", -114 => x"81050906", -115 => x"0a810653", -116 => x"51810504", -117 => x"00000000", -118 => x"00000000", -119 => x"00000000", -120 => x"72098105", -121 => x"72050970", -122 => x"81050906", -123 => x"0a098106", -124 => x"53518105", -125 => x"04000000", -126 => x"00000000", -127 => x"00000000", -128 => x"71098105", -129 => x"52810504", -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"81050409", -139 => x"81058305", -140 => x"1010102b", -141 => x"0772fc06", -142 => x"0c515181", -143 => x"05040000", -144 => x"72097206", -145 => x"73730906", -146 => x"07535181", -147 => x"05040000", -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"81050400", -158 => x"00000000", -159 => x"00000000", -160 => x"71fc0608", -161 => x"0b0b818a", -162 => x"88738306", -163 => x"10100508", -164 => x"067381ff", -165 => x"06738306", -166 => x"0b0b0b84", -167 => x"ab040000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0bb3", -171 => x"912d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c810551", -175 => x"04000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0bb4", -179 => x"8a2d5050", -180 => x"80085688", -181 => x"0c840c80", -182 => x"0c810551", -183 => x"04000000", -184 => x"72097081", -185 => x"0509060a", -186 => x"8106ff05", -187 => x"70547181", -188 => x"05067309", -189 => x"72740580", -190 => x"05060753", -191 => x"50500400", -192 => x"72097081", -193 => x"0509060a", -194 => x"098106ff", -195 => x"05705471", -196 => x"81050673", -197 => x"09727405", -198 => x"80050607", -199 => x"53505004", -200 => x"05800504", -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"818ad80c", -210 => x"51810504", -211 => x"00000000", -212 => x"00000000", -213 => x"00000000", -214 => x"00000000", -215 => x"00000000", -216 => x"72830610", -217 => x"10728306", -218 => x"0710100b", -219 => x"0b818a98", -220 => x"05080400", -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"81050400", -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"71710571", -249 => x"81055351", -250 => x"04000000", -251 => x"00000000", -252 => x"00000000", -253 => x"00000000", -254 => x"00000000", -255 => x"00000000", -256 => x"8db33f80", -257 => x"f39e3f04", -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"51810504", -267 => x"72fc0608", -268 => x"81ff0a06", -269 => x"72fc0670", -270 => x"5408fe80", -271 => x"0a060772", -272 => x"0c515181", -273 => x"050472fc", -274 => x"06080a10", -275 => x"10101010", -276 => x"1010100a", -277 => x"87fc8080", -278 => x"0672fc06", -279 => x"08f883ff", -280 => x"ff060772", -281 => x"fc060c51", -282 => x"51810504", -283 => x"72fc0608", -284 => x"0a101010", -285 => x"10101010", -286 => x"10101010", -287 => x"10101010", -288 => x"100a83fe", -289 => x"800672fc", -290 => x"0608fc81", -291 => x"ff060772", -292 => x"fc060c51", -293 => x"51810504", -294 => x"72fc0608", -295 => x"0a101010", -296 => x"10101010", -297 => x"10101010", -298 => x"10101010", -299 => x"10101010", -300 => x"10101010", -301 => x"100a81ff", -302 => x"0672fc06", -303 => x"08fe8006", -304 => x"0772fc06", -305 => x"0c515181", -306 => x"050472fc", -307 => x"06081010", -308 => x"10101010", -309 => x"101081ff", -310 => x"0a0672fc", -311 => x"0608fe80", -312 => x"0a060772", -313 => x"fc060c51", -314 => x"51810504", -315 => x"72fc0608", -316 => x"87fc8080", -317 => x"0672fc06", -318 => x"705408f8", -319 => x"83ffff06", -320 => x"07720c51", -321 => x"51810504", -322 => x"72fc0608", -323 => x"0a101010", -324 => x"10101010", -325 => x"100a83fe", -326 => x"800672fc", -327 => x"0608fc81", -328 => x"ff060772", -329 => x"fc060c51", -330 => x"51810504", -331 => x"72fc0608", -332 => x"0a101010", -333 => x"10101010", -334 => x"10101010", -335 => x"10101010", -336 => x"100a81ff", -337 => x"0672fc06", -338 => x"08fe8006", -339 => x"0772fc06", -340 => x"0c515181", -341 => x"050472fc", -342 => x"06081010", -343 => x"10101010", -344 => x"10101010", -345 => x"10101010", -346 => x"101081ff", -347 => x"0a0672fc", -348 => x"0608fe80", -349 => x"0a060772", -350 => x"fc060c51", -351 => x"51810504", -352 => x"72fc0608", -353 => x"10101010", -354 => x"10101010", -355 => x"87fc8080", -356 => x"0672fc06", -357 => x"08f883ff", -358 => x"ff060772", -359 => x"fc060c51", -360 => x"51810504", -361 => x"72fc0608", -362 => x"83fe8006", -363 => x"72fc0670", -364 => x"5408fc81", -365 => x"ff060772", -366 => x"0c515181", -367 => x"050472fc", -368 => x"06080a10", -369 => x"10101010", -370 => x"1010100a", -371 => x"81ff0672", -372 => x"fc0608fe", -373 => x"80060772", -374 => x"fc060c51", -375 => x"51810504", -376 => x"72fc0608", -377 => x"10101010", -378 => x"10101010", -379 => x"10101010", -380 => x"10101010", -381 => x"10101010", -382 => x"10101010", -383 => x"81ff0a06", -384 => x"72fc0608", -385 => x"fe800a06", -386 => x"0772fc06", -387 => x"0c515181", -388 => x"050472fc", -389 => x"06081010", -390 => x"10101010", -391 => x"10101010", -392 => x"10101010", -393 => x"101087fc", -394 => x"80800672", -395 => x"fc0608f8", -396 => x"83ffff06", -397 => x"0772fc06", -398 => x"0c515181", -399 => x"050472fc", -400 => x"06081010", -401 => x"10101010", -402 => x"101083fe", -403 => x"800672fc", -404 => x"0608fc81", -405 => x"ff060772", -406 => x"fc060c51", -407 => x"51810504", -408 => x"72fc0608", -409 => x"81ff0672", -410 => x"fc067054", -411 => x"08fe8006", -412 => x"07720c51", -413 => x"51810504", -414 => x"72728072", -415 => x"8106ff05", -416 => x"09720605", -417 => x"71105272", -418 => x"0a100a53", -419 => x"728106ff", -420 => x"05097206", -421 => x"05711052", -422 => x"720a100a", -423 => x"53728106", -424 => x"ff050972", -425 => x"06057110", -426 => x"52720a10", -427 => x"0a537281", -428 => x"06ff0509", -429 => x"72060571", -430 => x"1052720a", -431 => x"100a5372", -432 => x"8106ff05", -433 => x"09720605", -434 => x"71105272", -435 => x"0a100a53", -436 => x"728106ff", -437 => x"05097206", -438 => x"05711052", -439 => x"720a100a", -440 => x"53728106", -441 => x"ff050972", -442 => x"06057110", -443 => x"52720a10", -444 => x"0a537281", -445 => x"06ff0509", -446 => x"72060571", -447 => x"1052720a", -448 => x"100a5372", -449 => x"83a13772", -450 => x"8106ff05", -451 => x"09720605", -452 => x"71105272", -453 => x"0a100a53", -454 => x"728106ff", -455 => x"05097206", -456 => x"05711052", -457 => x"720a100a", -458 => x"53728106", -459 => x"ff050972", -460 => x"06057110", -461 => x"52720a10", -462 => x"0a537281", -463 => x"06ff0509", -464 => x"72060571", -465 => x"1052720a", -466 => x"100a5372", -467 => x"8106ff05", -468 => x"09720605", -469 => x"71105272", -470 => x"0a100a53", -471 => x"728106ff", -472 => x"05097206", -473 => x"05711052", -474 => x"720a100a", -475 => x"53728106", -476 => x"ff050972", -477 => x"06057110", -478 => x"52720a10", -479 => x"0a537281", -480 => x"06ff0509", -481 => x"72060571", -482 => x"1052720a", -483 => x"100a5372", -484 => x"82953772", -485 => x"8106ff05", -486 => x"09720605", -487 => x"71105272", -488 => x"0a100a53", -489 => x"728106ff", -490 => x"05097206", -491 => x"05711052", -492 => x"720a100a", -493 => x"53728106", -494 => x"ff050972", -495 => x"06057110", -496 => x"52720a10", -497 => x"0a537281", -498 => x"06ff0509", -499 => x"72060571", -500 => x"1052720a", -501 => x"100a5372", -502 => x"8106ff05", -503 => x"09720605", -504 => x"71105272", -505 => x"0a100a53", -506 => x"728106ff", -507 => x"05097206", -508 => x"05711052", -509 => x"720a100a", -510 => x"53728106", -511 => x"ff050972", -512 => x"06057110", -513 => x"52720a10", -514 => x"0a537281", -515 => x"06ff0509", -516 => x"72060571", -517 => x"1052720a", -518 => x"100a5372", -519 => x"81893772", -520 => x"8106ff05", -521 => x"09720605", -522 => x"71105272", -523 => x"0a100a53", -524 => x"728106ff", -525 => x"05097206", -526 => x"05711052", -527 => x"720a100a", -528 => x"53728106", -529 => x"ff050972", -530 => x"06057110", -531 => x"52720a10", -532 => x"0a537281", -533 => x"06ff0509", -534 => x"72060571", -535 => x"1052720a", -536 => x"100a5372", -537 => x"8106ff05", -538 => x"09720605", -539 => x"71105272", -540 => x"0a100a53", -541 => x"728106ff", -542 => x"05097206", -543 => x"05711052", -544 => x"720a100a", -545 => x"53728106", -546 => x"ff050972", -547 => x"06057110", -548 => x"52720a10", -549 => x"0a537281", -550 => x"06ff0509", -551 => x"72060571", -552 => x"1052720a", -553 => x"100a5351", -554 => x"51535181", -555 => x"05043c04", -556 => x"70700b0b", -557 => x"819acc08", -558 => x"52841208", -559 => x"70810651", -560 => x"51700970", -561 => x"81050906", -562 => x"0a098106", -563 => x"ff0509e9", -564 => x"0bf70506", -565 => x"84010505", -566 => x"04710881", -567 => x"ff06800c", -568 => x"50500470", -569 => x"700b0b81", -570 => x"9acc0852", -571 => x"84120870", -572 => x"0a100a70", -573 => x"81065151", -574 => x"51700970", -575 => x"81050906", -576 => x"0a098106", -577 => x"ff0509e4", -578 => x"0bf70506", -579 => x"84010505", -580 => x"0473720c", -581 => x"50500481", -582 => x"8ad80809", -583 => x"70810509", -584 => x"060a8106", -585 => x"ff0509b0", -586 => x"0bf70506", -587 => x"84010505", -588 => x"04838080", -589 => x"0b0b0b81", -590 => x"9acc0c82", -591 => x"a0800b0b", -592 => x"0b819ad0", -593 => x"0c829080", -594 => x"0b819ae0", -595 => x"0c0b0b81", -596 => x"9ad40b81", -597 => x"9ae40c04", -598 => x"f8808080", -599 => x"a40b0b0b", -600 => x"819acc0c", -601 => x"f8808082", -602 => x"800b0b0b", -603 => x"819ad00c", -604 => x"f8808084", -605 => x"800b819a", -606 => x"e00cf880", -607 => x"8080940b", -608 => x"819ae40c", -609 => x"f8808080", -610 => x"9c0b819a", -611 => x"dc0cf880", -612 => x"8080a00b", -613 => x"819ae80c", -614 => x"04f23d0d", -615 => x"600b0b81", -616 => x"9ad00856", -617 => x"5d82750c", -618 => x"8059805a", -619 => x"800b8f3d", -620 => x"71101017", -621 => x"70085957", -622 => x"5d5b8076", -623 => x"81ff067c", -624 => x"832b5658", -625 => x"5276537b", -626 => x"519ede3f", -627 => x"7d7f7a72", -628 => x"077c7207", -629 => x"71716081", -630 => x"05415f5d", -631 => x"5b595755", -632 => x"7a8724ff", -633 => x"050980ce", -634 => x"0bf70506", -635 => x"84010505", -636 => x"040b0b81", -637 => x"9ad0087b", -638 => x"10101170", -639 => x"08585155", -640 => x"807681ff", -641 => x"067c832b", -642 => x"56585276", -643 => x"537b519e", -644 => x"983f7d7f", -645 => x"7a72077c", -646 => x"72077171", -647 => x"60810541", -648 => x"5f5d5b59", -649 => x"5755877b", -650 => x"25ff0509", -651 => x"c40bf705", -652 => x"06840105", -653 => x"0504767d", -654 => x"0c77841e", -655 => x"0c7c800c", -656 => x"903d0d04", -657 => x"7070819a", -658 => x"d8335170", -659 => x"09708105", -660 => x"09060a09", -661 => x"8106ff05", -662 => x"0980d60b", -663 => x"f7050684", -664 => x"01050504", -665 => x"818ae408", -666 => x"70085252", -667 => x"70097081", -668 => x"0509060a", -669 => x"8106ff05", -670 => x"09b10bf7", -671 => x"05068401", -672 => x"05050484", -673 => x"12818ae4", -674 => x"0c702d81", -675 => x"8ae40870", -676 => x"08525270", -677 => x"09708105", -678 => x"09060a09", -679 => x"8106ff05", -680 => x"09e10bf7", -681 => x"05068401", -682 => x"05050481", -683 => x"0b819ad8", -684 => x"34505004", -685 => x"04700b0b", -686 => x"819ac808", -687 => x"09708105", -688 => x"09060a81", -689 => x"06ff0509", -690 => x"a50bf705", -691 => x"06840105", -692 => x"05040b0b", -693 => x"0b0b8009", -694 => x"70810509", -695 => x"060a0981", -696 => x"06ff0509", -697 => x"8b0bf705", -698 => x"06840105", -699 => x"05045004", -700 => x"0b0b819a", -701 => x"c8510b0b", -702 => x"0bea853f", -703 => x"50040470", -704 => x"70028f05", -705 => x"33527109", -706 => x"81058a05", -707 => x"09708105", -708 => x"09060a81", -709 => x"06ff0509", -710 => x"910bf705", -711 => x"06840105", -712 => x"05047151", -713 => x"fbbd3f50", -714 => x"50048d51", -715 => x"fbb53f71", -716 => x"51fbb03f", -717 => x"505004cd", -718 => x"3d0db63d", -719 => x"70708405", -720 => x"520895ff", -721 => x"5d56a63d", -722 => x"5f5d8075", -723 => x"70810557", -724 => x"33765c55", -725 => x"59730981", -726 => x"05790509", -727 => x"70810509", -728 => x"060a8106", -729 => x"ff050981", -730 => x"ad0bf705", -731 => x"06840105", -732 => x"05048f3d", -733 => x"5c730981", -734 => x"05a50509", -735 => x"70810509", -736 => x"060a0981", -737 => x"06ff0509", -738 => x"819c0bf7", -739 => x"05068401", -740 => x"05050479", -741 => x"7081055b", -742 => x"33547309", -743 => x"810580e4", -744 => x"05097081", -745 => x"0509060a", -746 => x"8106ff05", -747 => x"0982ee0b", -748 => x"f7050684", -749 => x"01050504", -750 => x"7380e424", -751 => x"ff050981", -752 => x"900bf705", -753 => x"06840105", -754 => x"05047309", -755 => x"810580e3", -756 => x"05097081", -757 => x"0509060a", -758 => x"8106ff05", -759 => x"09bf0bf7", -760 => x"05068401", -761 => x"05050480", -762 => x"52a5517a", -763 => x"2d805273", -764 => x"517a2d82", -765 => x"19597970", -766 => x"81055b33", -767 => x"54730970", -768 => x"81050906", -769 => x"0a098106", -770 => x"ff0509fe", -771 => x"e80bf705", -772 => x"06840105", -773 => x"05047880", -774 => x"0cb53d0d", -775 => x"047c841e", -776 => x"83123356", -777 => x"5e578052", -778 => x"73517a2d", -779 => x"81197a70", -780 => x"81055c33", -781 => x"55597309", -782 => x"70810509", -783 => x"060a0981", -784 => x"06ff0509", -785 => x"feaf0bf7", -786 => x"05068401", -787 => x"050504c6", -788 => x"39730981", -789 => x"0580f305", -790 => x"09708105", -791 => x"09060a09", -792 => x"8106ff05", -793 => x"09ff800b", -794 => x"f7050684", -795 => x"01050504", -796 => x"7c841e71", -797 => x"08595e56", -798 => x"80773356", -799 => x"56740981", -800 => x"05760509", -801 => x"70810509", -802 => x"060a8106", -803 => x"ff0509aa", -804 => x"0bf70506", -805 => x"84010505", -806 => x"04811670", -807 => x"1870335a", -808 => x"55567709", -809 => x"70810509", -810 => x"060a0981", -811 => x"06ff0509", -812 => x"e80bf705", -813 => x"06840105", -814 => x"0504ff16", -815 => x"55807625", -816 => x"ff0509fe", -817 => x"b10bf705", -818 => x"06840105", -819 => x"05047670", -820 => x"81055833", -821 => x"58805277", -822 => x"517a2d81", -823 => x"1975ff17", -824 => x"57575980", -825 => x"7625ff05", -826 => x"09fe8b0b", -827 => x"f7050684", -828 => x"01050504", -829 => x"76708105", -830 => x"58335880", -831 => x"5277517a", -832 => x"2d811975", -833 => x"ff175757", -834 => x"59758024", -835 => x"ff0509ff", -836 => x"bd0bf705", -837 => x"06840105", -838 => x"0504fdda", -839 => x"397c841e", -840 => x"71087071", -841 => x"9f2c5953", -842 => x"595e5680", -843 => x"7524ff05", -844 => x"0981f80b", -845 => x"f7050684", -846 => x"01050504", -847 => x"757e7d58", -848 => x"59558057", -849 => x"74098105", -850 => x"77050970", -851 => x"81050906", -852 => x"0a098106", -853 => x"ff050980", -854 => x"f40bf705", -855 => x"06840105", -856 => x"0504b07c", -857 => x"3402b905", -858 => x"567b0981", -859 => x"05760509", -860 => x"70810509", -861 => x"060a8106", -862 => x"ff0509b3", -863 => x"0bf70506", -864 => x"84010505", -865 => x"04ff1656", -866 => x"75787081", -867 => x"055a3b81", -868 => x"17577b09", -869 => x"81057605", -870 => x"09708105", -871 => x"09060a09", -872 => x"8106ff05", -873 => x"09df0bf7", -874 => x"05068401", -875 => x"05050480", -876 => x"7834767e", -877 => x"ff125758", -878 => x"56758024", -879 => x"ff0509fe", -880 => x"8d0bf705", -881 => x"06840105", -882 => x"0504fcaa", -883 => x"398a7536", -884 => x"0b0b80fb", -885 => x"fc055473", -886 => x"76708105", -887 => x"583b8a75", -888 => x"35557409", -889 => x"70810509", -890 => x"060a8106", -891 => x"ff0509fe", -892 => x"f80bf705", -893 => x"06840105", -894 => x"05048a75", -895 => x"360b0b80", -896 => x"fbfc0554", -897 => x"73767081", -898 => x"05583b8a", -899 => x"75355574", -900 => x"09708105", -901 => x"09060a09", -902 => x"8106ff05", -903 => x"09ffae0b", -904 => x"f7050684", -905 => x"01050504", -906 => x"febf3974", -907 => x"527653b5", -908 => x"3dffb805", -909 => x"5195c73f", -910 => x"a43d0856", -911 => x"fdfe3970", -912 => x"80c10b81", -913 => x"e9983480", -914 => x"0b81eaf0", -915 => x"0c70800c", -916 => x"50047070", -917 => x"800b81e9", -918 => x"98335252", -919 => x"70098105", -920 => x"80c10509", -921 => x"70810509", -922 => x"060a8106", -923 => x"ff0509a0", -924 => x"0bf70506", -925 => x"84010505", -926 => x"047181ea", -927 => x"f0080781", -928 => x"eaf00c80", -929 => x"c20b81e9", -930 => x"9c347080", -931 => x"0c505004", -932 => x"810b81ea", -933 => x"f0080781", -934 => x"eaf00c80", -935 => x"c20b81e9", -936 => x"9c347080", -937 => x"0c505004", -938 => x"70707070", -939 => x"7570088a", -940 => x"05535381", -941 => x"e9983351", -942 => x"70098105", -943 => x"80c10509", -944 => x"70810509", -945 => x"060a8106", -946 => x"ff0509a9", -947 => x"0bf70506", -948 => x"84010505", -949 => x"04730970", -950 => x"81050906", -951 => x"0a098106", -952 => x"ff0509cf", -953 => x"0bf70506", -954 => x"84010505", -955 => x"0470800c", -956 => x"50505050", -957 => x"04ff1270", -958 => x"81e99408", -959 => x"31740c80", -960 => x"0c505050", -961 => x"5004fc3d", -962 => x"0d81e9a0", -963 => x"08557409", -964 => x"70810509", -965 => x"060a8106", -966 => x"ff050994", -967 => x"0bf70506", -968 => x"84010505", -969 => x"04767508", -970 => x"710c81e9", -971 => x"a0085654", -972 => x"8c155381", -973 => x"e9940852", -974 => x"8a5190ac", -975 => x"3f73800c", -976 => x"863d0d04", -977 => x"fb3d0d77", -978 => x"70085656", -979 => x"b05381e9", -980 => x"a0085274", -981 => x"51acb53f", -982 => x"850b8c17", -983 => x"0c850b8c", -984 => x"160c7508", -985 => x"750c81e9", -986 => x"a0085473", -987 => x"09708105", -988 => x"09060a81", -989 => x"06ff0509", -990 => x"920bf705", -991 => x"06840105", -992 => x"05047308", -993 => x"750c81e9", -994 => x"a008548c", -995 => x"145381e9", -996 => x"9408528a", -997 => x"518fd13f", -998 => x"84150809", -999 => x"70810509", -1000 => x"060a0981", -1001 => x"06ff0509", -1002 => x"b50bf705", -1003 => x"06840105", -1004 => x"0504860b", -1005 => x"8c160c88", -1006 => x"15528816", -1007 => x"08518dd3", -1008 => x"3f81e9a0", -1009 => x"08700876", -1010 => x"0c548c15", -1011 => x"7054548a", -1012 => x"52730851", -1013 => x"8f923f73", -1014 => x"800c873d", -1015 => x"0d047508", -1016 => x"54b05373", -1017 => x"527551ab", -1018 => x"a33f7380", -1019 => x"0c873d0d", -1020 => x"04e13d0d", -1021 => x"b05196c2", -1022 => x"3f800881", -1023 => x"e9900cb0", -1024 => x"5196b73f", -1025 => x"800881e9", -1026 => x"a00c81e9", -1027 => x"90088008", -1028 => x"0c800b80", -1029 => x"0884050c", -1030 => x"820b8008", -1031 => x"88050ca8", -1032 => x"0b80088c", -1033 => x"050c9f53", -1034 => x"0b0b80fc", -1035 => x"88528008", -1036 => x"900551aa", -1037 => x"d73f993d", -1038 => x"5c9f530b", -1039 => x"0b80fca8", -1040 => x"527b51aa", -1041 => x"c73f8a0b", -1042 => x"81a7d80c", -1043 => x"0b0b8186", -1044 => x"cc51f5e3", -1045 => x"3f0b0b80", -1046 => x"fcc851f5", -1047 => x"da3f0b0b", -1048 => x"8186cc51", -1049 => x"f5d13f81", -1050 => x"8aec0809", -1051 => x"70810509", -1052 => x"060a8106", -1053 => x"ff05098a", -1054 => x"ef0bf705", -1055 => x"06840105", -1056 => x"05040b0b", -1057 => x"80fcf851", -1058 => x"f5ad3f0b", -1059 => x"0b8186cc", -1060 => x"51f5a43f", -1061 => x"818ae808", -1062 => x"520b0b80", -1063 => x"fda451f5", -1064 => x"963f8051", -1065 => x"80c5a13f", -1066 => x"8008819a", -1067 => x"f80c810b", -1068 => x"923d5c58", -1069 => x"800b818a", -1070 => x"e80825ff", -1071 => x"05098492", -1072 => x"0bf70506", -1073 => x"84010505", -1074 => x"048e3d5d", -1075 => x"80c10b81", -1076 => x"e9983481", -1077 => x"0b81eaf0", -1078 => x"0c80c20b", -1079 => x"81e99c34", -1080 => x"825e835a", -1081 => x"9f530b0b", -1082 => x"80fdd452", -1083 => x"7a51a99c", -1084 => x"3f815f80", -1085 => x"7b537c52", -1086 => x"558eba3f", -1087 => x"80080981", -1088 => x"05750509", -1089 => x"70810509", -1090 => x"060a0981", -1091 => x"06ff0509", -1092 => x"8b0bf705", -1093 => x"06840105", -1094 => x"05048155", -1095 => x"7481eaf0", -1096 => x"0c7d7057", -1097 => x"55748325", -1098 => x"ff0509b4", -1099 => x"0bf70506", -1100 => x"84010505", -1101 => x"04741010", -1102 => x"15fd0540", -1103 => x"a13dffbc", -1104 => x"05538352", -1105 => x"75518ca0", -1106 => x"3f811e70", -1107 => x"5f705755", -1108 => x"837524ff", -1109 => x"0509de0b", -1110 => x"f7050684", -1111 => x"01050504", -1112 => x"7f547453", -1113 => x"819afc52", -1114 => x"81e9a851", -1115 => x"8c863f81", -1116 => x"e9a00870", -1117 => x"085757b0", -1118 => x"53765275", -1119 => x"51a88d3f", -1120 => x"850b8c18", -1121 => x"0c850b8c", -1122 => x"170c7608", -1123 => x"760c81e9", -1124 => x"a0085574", -1125 => x"09708105", -1126 => x"09060a81", -1127 => x"06ff0509", -1128 => x"920bf705", -1129 => x"06840105", -1130 => x"05047408", -1131 => x"760c81e9", -1132 => x"a008558c", -1133 => x"155381e9", -1134 => x"9408528a", -1135 => x"518ba93f", -1136 => x"84160809", -1137 => x"70810509", -1138 => x"060a0981", -1139 => x"06ff0509", -1140 => x"889f0bf7", -1141 => x"05068401", -1142 => x"05050486", -1143 => x"0b8c170c", -1144 => x"88165288", -1145 => x"17085189", -1146 => x"aa3f81e9", -1147 => x"a0087008", -1148 => x"770c578c", -1149 => x"16705455", -1150 => x"8a527408", -1151 => x"518ae93f", -1152 => x"80c10b81", -1153 => x"e99c3356", -1154 => x"56757526", -1155 => x"ff050980", -1156 => x"cc0bf705", -1157 => x"06840105", -1158 => x"050480c3", -1159 => x"5275518b", -1160 => x"d33f8008", -1161 => x"0981057f", -1162 => x"05097081", -1163 => x"0509060a", -1164 => x"8106ff05", -1165 => x"0987f50b", -1166 => x"f7050684", -1167 => x"01050504", -1168 => x"81167081", -1169 => x"ff0681e9", -1170 => x"9c335257", -1171 => x"55747627", -1172 => x"ff0509c6", -1173 => x"0bf70506", -1174 => x"84010505", -1175 => x"04797e29", -1176 => x"60707235", -1177 => x"70417272", -1178 => x"31707011", -1179 => x"11111111", -1180 => x"11517231", -1181 => x"5e538a05", -1182 => x"81e99833", -1183 => x"81e99408", -1184 => x"5a525258", -1185 => x"55760981", -1186 => x"0580c105", -1187 => x"09708105", -1188 => x"09060a81", -1189 => x"06ff0509", -1190 => x"87c10bf7", -1191 => x"05068401", -1192 => x"05050478", -1193 => x"09708105", -1194 => x"09060a09", -1195 => x"8106ff05", -1196 => x"09d30bf7", -1197 => x"05068401", -1198 => x"05050481", -1199 => x"1858818a", -1200 => x"e8087825", -1201 => x"ff0509fc", -1202 => x"830bf705", -1203 => x"06840105", -1204 => x"05048051", -1205 => x"80c0f13f", -1206 => x"800881e9", -1207 => x"8c0c0b0b", -1208 => x"80fdf451", -1209 => x"f0d13f0b", -1210 => x"0b8186cc", -1211 => x"51f0c83f", -1212 => x"0b0b80fe", -1213 => x"8451f0bf", -1214 => x"3f0b0b81", -1215 => x"86cc51f0", -1216 => x"b63f81e9", -1217 => x"9408520b", -1218 => x"0b80febc", -1219 => x"51f0a83f", -1220 => x"85520b0b", -1221 => x"80fed851", -1222 => x"f09d3f81", -1223 => x"eaf00852", -1224 => x"0b0b80fe", -1225 => x"f451f08f", -1226 => x"3f81520b", -1227 => x"0b80fed8", -1228 => x"51f0843f", -1229 => x"81e99833", -1230 => x"520b0b80", -1231 => x"ff9051ef", -1232 => x"f63f80c1", -1233 => x"520b0b80", -1234 => x"ffac51ef", -1235 => x"ea3f81e9", -1236 => x"9c33520b", -1237 => x"0b80ffc8", -1238 => x"51efdc3f", -1239 => x"80c2520b", -1240 => x"0b80ffac", -1241 => x"51efd03f", -1242 => x"81e9c808", -1243 => x"520b0b80", -1244 => x"ffe451ef", -1245 => x"c23f8752", -1246 => x"0b0b80fe", -1247 => x"d851efb7", -1248 => x"3f81a7d8", -1249 => x"08520b0b", -1250 => x"81808051", -1251 => x"efa93f0b", -1252 => x"0b81809c", -1253 => x"51efa03f", -1254 => x"0b0b8180", -1255 => x"c851ef97", -1256 => x"3f81e9a0", -1257 => x"08700853", -1258 => x"560b0b81", -1259 => x"80d451ef", -1260 => x"863f0b0b", -1261 => x"8180f051", -1262 => x"eefd3f81", -1263 => x"e9a00884", -1264 => x"1108535d", -1265 => x"0b0b8181", -1266 => x"a451eeeb", -1267 => x"3f80520b", -1268 => x"0b80fed8", -1269 => x"51eee03f", -1270 => x"81e9a008", -1271 => x"88110853", -1272 => x"580b0b81", -1273 => x"81c051ee", -1274 => x"ce3f8252", -1275 => x"0b0b80fe", -1276 => x"d851eec3", -1277 => x"3f81e9a0", -1278 => x"088c1108", -1279 => x"53590b0b", -1280 => x"8181dc51", -1281 => x"eeb13f91", -1282 => x"520b0b80", -1283 => x"fed851ee", -1284 => x"a63f81e9", -1285 => x"a0089005", -1286 => x"520b0b81", -1287 => x"81f851ee", -1288 => x"963f0b0b", -1289 => x"81829451", -1290 => x"ee8d3f0b", -1291 => x"0b8182cc", -1292 => x"51ee843f", -1293 => x"81e99008", -1294 => x"70085357", -1295 => x"0b0b8180", -1296 => x"d451edf3", -1297 => x"3f0b0b81", -1298 => x"82e051ed", -1299 => x"ea3f81e9", -1300 => x"90088411", -1301 => x"0853550b", -1302 => x"0b8181a4", -1303 => x"51edd83f", -1304 => x"80520b0b", -1305 => x"80fed851", -1306 => x"edcd3f81", -1307 => x"e9900888", -1308 => x"11085356", -1309 => x"0b0b8181", -1310 => x"c051edbb", -1311 => x"3f81520b", -1312 => x"0b80fed8", -1313 => x"51edb03f", -1314 => x"81e99008", -1315 => x"8c110853", -1316 => x"5d0b0b81", -1317 => x"81dc51ed", -1318 => x"9e3f9252", -1319 => x"0b0b80fe", -1320 => x"d851ed93", -1321 => x"3f81e990", -1322 => x"08900552", -1323 => x"0b0b8181", -1324 => x"f851ed83", -1325 => x"3f0b0b81", -1326 => x"829451ec", -1327 => x"fa3f7d52", -1328 => x"0b0b8183", -1329 => x"a051ecef", -1330 => x"3f85520b", -1331 => x"0b80fed8", -1332 => x"51ece43f", -1333 => x"79520b0b", -1334 => x"8183bc51", -1335 => x"ecd93f8d", -1336 => x"520b0b80", -1337 => x"fed851ec", -1338 => x"ce3f7f52", -1339 => x"0b0b8183", -1340 => x"d851ecc3", -1341 => x"3f87520b", -1342 => x"0b80fed8", -1343 => x"51ecb83f", -1344 => x"7e520b0b", -1345 => x"8183f451", -1346 => x"ecad3f81", -1347 => x"520b0b80", -1348 => x"fed851ec", -1349 => x"a23f7b52", -1350 => x"0b0b8184", -1351 => x"9051ec97", -1352 => x"3f0b0b81", -1353 => x"84ac51ec", -1354 => x"8e3f7a52", -1355 => x"0b0b8184", -1356 => x"e451ec83", -1357 => x"3f0b0b81", -1358 => x"858051eb", -1359 => x"fa3f0b0b", -1360 => x"8186cc51", -1361 => x"ebf13f81", -1362 => x"e98c0881", -1363 => x"9af80831", -1364 => x"70819af4", -1365 => x"0c520b0b", -1366 => x"8185b851", -1367 => x"ebd93f81", -1368 => x"9af40856", -1369 => x"817625ff", -1370 => x"0509819d", -1371 => x"0bf70506", -1372 => x"84010505", -1373 => x"04818ae8", -1374 => x"087077bd", -1375 => x"84c0290b", -1376 => x"35819aec", -1377 => x"0c767135", -1378 => x"819af00c", -1379 => x"768ddd29", -1380 => x"7187e829", -1381 => x"0b3581e9", -1382 => x"a40c5b0b", -1383 => x"0b8185c8", -1384 => x"51eb943f", -1385 => x"819aec08", -1386 => x"520b0b81", -1387 => x"85f851eb", -1388 => x"863f0b0b", -1389 => x"81868051", -1390 => x"eafd3f81", -1391 => x"9af00852", -1392 => x"0b0b8185", -1393 => x"f851eaef", -1394 => x"3f81e9a4", -1395 => x"08520b0b", -1396 => x"8186b051", -1397 => x"eae13f0b", -1398 => x"0b8186cc", -1399 => x"51ead83f", -1400 => x"800b800c", -1401 => x"a13d0d04", -1402 => x"0b0b8186", -1403 => x"d051f598", -1404 => x"39760856", -1405 => x"b0537552", -1406 => x"76519f90", -1407 => x"3f80c10b", -1408 => x"81e99c33", -1409 => x"5656f881", -1410 => x"390b0b81", -1411 => x"878051ea", -1412 => x"a63f0b0b", -1413 => x"8187b851", -1414 => x"ea9d3f0b", -1415 => x"0b8186cc", -1416 => x"51ea943f", -1417 => x"800b800c", -1418 => x"a13d0d04", -1419 => x"a13dffb8", -1420 => x"05528051", -1421 => x"80dd3f9f", -1422 => x"530b0b81", -1423 => x"87d8527a", -1424 => x"519ec93f", -1425 => x"777881e9", -1426 => x"940c8117", -1427 => x"7081ff06", -1428 => x"81e99c33", -1429 => x"5258565a", -1430 => x"f7f339ff", -1431 => x"15707731", -1432 => x"7e0c5980", -1433 => x"0b811959", -1434 => x"59818ae8", -1435 => x"087825ff", -1436 => x"0509f4d8", -1437 => x"0bf70506", -1438 => x"84010505", -1439 => x"04f8d339", -1440 => x"70707382", -1441 => x"32703070", -1442 => x"72078025", -1443 => x"800c5252", -1444 => x"50500470", -1445 => x"70707476", -1446 => x"71535452", -1447 => x"71098105", -1448 => x"82050970", -1449 => x"81050906", -1450 => x"0a8106ff", -1451 => x"05098b0b", -1452 => x"f7050684", -1453 => x"01050504", -1454 => x"83517109", -1455 => x"81058105", -1456 => x"09708105", -1457 => x"09060a81", -1458 => x"06ff0509", -1459 => x"80dd0bf7", -1460 => x"05068401", -1461 => x"05050481", -1462 => x"7226ff05", -1463 => x"0980e10b", -1464 => x"f7050684", -1465 => x"01050504", -1466 => x"71098105", -1467 => x"82050970", -1468 => x"81050906", -1469 => x"0a8106ff", -1470 => x"050980e2", -1471 => x"0bf70506", -1472 => x"84010505", -1473 => x"04710981", -1474 => x"05840509", -1475 => x"70810509", -1476 => x"060a8106", -1477 => x"ff0509bc", -1478 => x"0bf70506", -1479 => x"84010505", -1480 => x"0470730c", -1481 => x"70800c50", -1482 => x"50500480", -1483 => x"e40b81e9", -1484 => x"940825ff", -1485 => x"0509930b", -1486 => x"f7050684", -1487 => x"01050504", -1488 => x"80730c70", -1489 => x"800c5050", -1490 => x"50048373", -1491 => x"0c70800c", -1492 => x"50505004", -1493 => x"82730c70", -1494 => x"800c5050", -1495 => x"50048173", -1496 => x"0c70800c", -1497 => x"50505004", -1498 => x"70747414", -1499 => x"8205710c", -1500 => x"800c5004", -1501 => x"f73d0d7b", -1502 => x"7d7f6185", -1503 => x"1270822b", -1504 => x"75117074", -1505 => x"71708405", -1506 => x"530c5a5a", -1507 => x"5d5b760c", -1508 => x"7980f818", -1509 => x"0c798612", -1510 => x"5257585a", -1511 => x"5a767624", -1512 => x"ff0509ac", -1513 => x"0bf70506", -1514 => x"84010505", -1515 => x"0476b329", -1516 => x"822b7911", -1517 => x"51537673", -1518 => x"70840555", -1519 => x"0c811454", -1520 => x"757425ff", -1521 => x"0509ef0b", -1522 => x"f7050684", -1523 => x"01050504", -1524 => x"7681cc29", -1525 => x"19fc1108", -1526 => x"8105fc12", -1527 => x"0c7a1970", -1528 => x"089fa013", -1529 => x"0c585685", -1530 => x"0b81e994", -1531 => x"0c75800c", -1532 => x"8b3d0d04", -1533 => x"70707002", -1534 => x"93053351", -1535 => x"80028405", -1536 => x"97053354", -1537 => x"52700981", -1538 => x"05730509", -1539 => x"70810509", -1540 => x"060a8106", -1541 => x"ff050990", -1542 => x"0bf70506", -1543 => x"84010505", -1544 => x"0471800c", -1545 => x"50505004", -1546 => x"7081e998", -1547 => x"34810b80", -1548 => x"0c505050", -1549 => x"04f83d0d", -1550 => x"7a7c5956", -1551 => x"820b8319", -1552 => x"55557416", -1553 => x"70337533", -1554 => x"5b515372", -1555 => x"09810579", -1556 => x"05097081", -1557 => x"0509060a", -1558 => x"8106ff05", -1559 => x"0981860b", -1560 => x"f7050684", -1561 => x"01050504", -1562 => x"80c10b81", -1563 => x"16811656", -1564 => x"56578275", -1565 => x"25ff0509", -1566 => x"c90bf705", -1567 => x"06840105", -1568 => x"0504ffa9", -1569 => x"177081ff", -1570 => x"06555973", -1571 => x"8226ff05", -1572 => x"098b0bf7", -1573 => x"05068401", -1574 => x"05050487", -1575 => x"55815376", -1576 => x"09810580", -1577 => x"d2050970", -1578 => x"81050906", -1579 => x"0a8106ff", -1580 => x"0509ab0b", -1581 => x"f7050684", -1582 => x"01050504", -1583 => x"77527551", -1584 => x"9cb43f80", -1585 => x"53728008", -1586 => x"25ff0509", -1587 => x"910bf705", -1588 => x"06840105", -1589 => x"05048715", -1590 => x"81e9940c", -1591 => x"81537280", -1592 => x"0c8a3d0d", -1593 => x"047281e9", -1594 => x"98348275", -1595 => x"25ff0509", -1596 => x"fed00bf7", -1597 => x"05068401", -1598 => x"050504ff", -1599 => x"8539f93d", -1600 => x"0d797b7d", -1601 => x"54587259", -1602 => x"77307970", -1603 => x"30707207", -1604 => x"9f2a7371", -1605 => x"315a5259", -1606 => x"77795673", -1607 => x"0c537384", -1608 => x"130c5480", -1609 => x"0c893d0d", -1610 => x"04f93d0d", -1611 => x"797b7d7f", -1612 => x"56545254", -1613 => x"72097081", -1614 => x"0509060a", -1615 => x"8106ff05", -1616 => x"09b30bf7", -1617 => x"05068401", -1618 => x"05050470", -1619 => x"577158a0", -1620 => x"73315280", -1621 => x"7225ff05", -1622 => x"09a90bf7", -1623 => x"05068401", -1624 => x"05050477", -1625 => x"70742b57", -1626 => x"70732a78", -1627 => x"752b0756", -1628 => x"51747653", -1629 => x"5170740c", -1630 => x"7184150c", -1631 => x"73800c89", -1632 => x"3d0d0480", -1633 => x"56777230", -1634 => x"0b2b5574", -1635 => x"765351e5", -1636 => x"39fb3d0d", -1637 => x"77795555", -1638 => x"80567575", -1639 => x"24ff0509", -1640 => x"80d00bf7", -1641 => x"05068401", -1642 => x"05050480", -1643 => x"7424ff05", -1644 => x"09b70bf7", -1645 => x"05068401", -1646 => x"05050480", -1647 => x"53735274", -1648 => x"51819c3f", -1649 => x"80085475", -1650 => x"09708105", -1651 => x"09060a81", -1652 => x"06ff0509", -1653 => x"8d0bf705", -1654 => x"06840105", -1655 => x"05048008", -1656 => x"30547380", -1657 => x"0c873d0d", -1658 => x"04733076", -1659 => x"81325754", -1660 => x"ca397430", -1661 => x"55815673", -1662 => x"8025ff05", -1663 => x"09ffbc0b", -1664 => x"f7050684", -1665 => x"01050504", -1666 => x"e039fa3d", -1667 => x"0d787a57", -1668 => x"55805776", -1669 => x"7524ff05", -1670 => x"09be0bf7", -1671 => x"05068401", -1672 => x"05050475", -1673 => x"9f2c5481", -1674 => x"53757432", -1675 => x"74315274", -1676 => x"51ad3f80", -1677 => x"08547609", -1678 => x"70810509", -1679 => x"060a8106", -1680 => x"ff05098d", -1681 => x"0bf70506", -1682 => x"84010505", -1683 => x"04800830", -1684 => x"5473800c", -1685 => x"883d0d04", -1686 => x"74305581", -1687 => x"57c539fc", -1688 => x"3d0d7678", -1689 => x"53548153", -1690 => x"80747326", -1691 => x"52557209", -1692 => x"70810509", -1693 => x"060a8106", -1694 => x"ff050980", -1695 => x"d50bf705", -1696 => x"06840105", -1697 => x"05047009", -1698 => x"70810509", -1699 => x"060a8106", -1700 => x"ff050980", -1701 => x"ea0bf705", -1702 => x"06840105", -1703 => x"05048072", -1704 => x"24ff0509", -1705 => x"80d90bf7", -1706 => x"05068401", -1707 => x"05050471", -1708 => x"10731075", -1709 => x"72265354", -1710 => x"52720970", -1711 => x"81050906", -1712 => x"0a098106", -1713 => x"ff0509ff", -1714 => x"bd0bf705", -1715 => x"06840105", -1716 => x"05047351", -1717 => x"78097081", -1718 => x"0509060a", -1719 => x"098106ff", -1720 => x"05098b0b", -1721 => x"f7050684", -1722 => x"01050504", -1723 => x"74517080", -1724 => x"0c863d0d", -1725 => x"04720a10", -1726 => x"0a720a10", -1727 => x"0a535372", -1728 => x"09708105", -1729 => x"09060a81", -1730 => x"06ff0509", -1731 => x"c50bf705", -1732 => x"06840105", -1733 => x"05047174", -1734 => x"26ff0509", -1735 => x"d80bf705", -1736 => x"06840105", -1737 => x"05047372", -1738 => x"31757407", -1739 => x"740a100a", -1740 => x"740a100a", -1741 => x"55555654", -1742 => x"c6397070", -1743 => x"73528193", -1744 => x"b4085193", -1745 => x"3f505004", -1746 => x"70707352", -1747 => x"8193b408", -1748 => x"519bc43f", -1749 => x"505004f4", -1750 => x"3d0d7e60", -1751 => x"8b1170f8", -1752 => x"065b5555", -1753 => x"5d729626", -1754 => x"ff05098b", -1755 => x"0bf70506", -1756 => x"84010505", -1757 => x"04905880", -1758 => x"78247479", -1759 => x"26075580", -1760 => x"54740981", -1761 => x"05740509", -1762 => x"70810509", -1763 => x"060a0981", -1764 => x"06ff0509", -1765 => x"80f40bf7", -1766 => x"05068401", -1767 => x"0505047c", -1768 => x"5195f13f", -1769 => x"7783f726", -1770 => x"ff050980", -1771 => x"e40bf705", -1772 => x"06840105", -1773 => x"05047783", -1774 => x"2a701010", -1775 => x"10818bac", -1776 => x"058c1108", -1777 => x"58585475", -1778 => x"09810577", -1779 => x"05097081", -1780 => x"0509060a", -1781 => x"8106ff05", -1782 => x"0983b60b", -1783 => x"f7050684", -1784 => x"01050504", -1785 => x"841608fc", -1786 => x"068c1708", -1787 => x"88180871", -1788 => x"8c120c88", -1789 => x"120c5b76", -1790 => x"05841108", -1791 => x"81078412", -1792 => x"0c537c51", -1793 => x"958f3f88", -1794 => x"16547380", -1795 => x"0c8e3d0d", -1796 => x"0477892a", -1797 => x"78832a58", -1798 => x"54730970", -1799 => x"81050906", -1800 => x"0a8106ff", -1801 => x"05098180", -1802 => x"0bf70506", -1803 => x"84010505", -1804 => x"0477862a", -1805 => x"b8055784", -1806 => x"7427ff05", -1807 => x"0980e90b", -1808 => x"f7050684", -1809 => x"01050504", -1810 => x"80db1457", -1811 => x"947427ff", -1812 => x"050980d4", -1813 => x"0bf70506", -1814 => x"84010505", -1815 => x"04778c2a", -1816 => x"80ee0557", -1817 => x"80d47427", -1818 => x"ff0509bc", -1819 => x"0bf70506", -1820 => x"84010505", -1821 => x"04778f2a", -1822 => x"80f70557", -1823 => x"82d47427", -1824 => x"ff0509a4", -1825 => x"0bf70506", -1826 => x"84010505", -1827 => x"0477922a", -1828 => x"80fc0557", -1829 => x"8ad47427", -1830 => x"ff05098c", -1831 => x"0bf70506", -1832 => x"84010505", -1833 => x"0480fe57", -1834 => x"76101010", -1835 => x"818bac05", -1836 => x"8c110856", -1837 => x"53740981", -1838 => x"05730509", -1839 => x"70810509", -1840 => x"060a8106", -1841 => x"ff050980", -1842 => x"d70bf705", -1843 => x"06840105", -1844 => x"05048415", -1845 => x"08fc0670", -1846 => x"79315556", -1847 => x"738f24ff", -1848 => x"05098fb7", -1849 => x"0bf70506", -1850 => x"84010505", -1851 => x"04738025", -1852 => x"ff05098f", -1853 => x"ae0bf705", -1854 => x"06840105", -1855 => x"05048c15", -1856 => x"08557409", -1857 => x"81057305", -1858 => x"09708105", -1859 => x"09060a09", -1860 => x"8106ff05", -1861 => x"09ffbb0b", -1862 => x"f7050684", -1863 => x"01050504", -1864 => x"81175981", -1865 => x"8bbc0856", -1866 => x"75098105", -1867 => x"818bb405", -1868 => x"09708105", -1869 => x"09060a81", -1870 => x"06ff0509", -1871 => x"84ce0bf7", -1872 => x"05068401", -1873 => x"05050484", -1874 => x"1608fc06", -1875 => x"70793155", -1876 => x"55738f24", -1877 => x"ff050980", -1878 => x"e30bf705", -1879 => x"06840105", -1880 => x"0504818b", -1881 => x"b40b818b", -1882 => x"c00c818b", -1883 => x"b40b818b", -1884 => x"bc0c8074", -1885 => x"24ff0509", -1886 => x"80f80bf7", -1887 => x"05068401", -1888 => x"05050474", -1889 => x"16841108", -1890 => x"81078412", -1891 => x"0c53fcf2", -1892 => x"3988168c", -1893 => x"11085759", -1894 => x"75098105", -1895 => x"79050970", -1896 => x"81050906", -1897 => x"0a098106", -1898 => x"ff0509fc", -1899 => x"b70bf705", -1900 => x"06840105", -1901 => x"05048214", -1902 => x"59fee839", -1903 => x"77167881", -1904 => x"0784180c", -1905 => x"70818bc0", -1906 => x"0c70818b", -1907 => x"bc0c818b", -1908 => x"b40b8c12", -1909 => x"0c8c1108", -1910 => x"88120c74", -1911 => x"81078412", -1912 => x"0c740574", -1913 => x"710c5b7c", -1914 => x"5191aa3f", -1915 => x"881654fc", -1916 => x"993983ff", -1917 => x"7527ff05", -1918 => x"0985ff0b", -1919 => x"f7050684", -1920 => x"01050504", -1921 => x"74892a75", -1922 => x"832a5454", -1923 => x"73097081", -1924 => x"0509060a", -1925 => x"8106ff05", -1926 => x"0981800b", -1927 => x"f7050684", -1928 => x"01050504", -1929 => x"74862ab8", -1930 => x"05538474", -1931 => x"27ff0509", -1932 => x"80e90bf7", -1933 => x"05068401", -1934 => x"05050480", -1935 => x"db145394", -1936 => x"7427ff05", -1937 => x"0980d40b", -1938 => x"f7050684", -1939 => x"01050504", -1940 => x"748c2a80", -1941 => x"ee055380", -1942 => x"d47427ff", -1943 => x"0509bc0b", -1944 => x"f7050684", -1945 => x"01050504", -1946 => x"748f2a80", -1947 => x"f7055382", -1948 => x"d47427ff", -1949 => x"0509a40b", -1950 => x"f7050684", -1951 => x"01050504", -1952 => x"74922a80", -1953 => x"fc05538a", -1954 => x"d47427ff", -1955 => x"05098c0b", -1956 => x"f7050684", -1957 => x"01050504", -1958 => x"80fe5372", -1959 => x"10101081", -1960 => x"8bac0588", -1961 => x"11085557", -1962 => x"73098105", -1963 => x"77050970", -1964 => x"81050906", -1965 => x"0a8106ff", -1966 => x"05098aec", -1967 => x"0bf70506", -1968 => x"84010505", -1969 => x"04841408", -1970 => x"fc065b74", -1971 => x"7b27ff05", -1972 => x"09aa0bf7", -1973 => x"05068401", -1974 => x"05050488", -1975 => x"14085473", -1976 => x"09810577", -1977 => x"05097081", -1978 => x"0509060a", -1979 => x"098106ff", -1980 => x"0509d20b", -1981 => x"f7050684", -1982 => x"01050504", -1983 => x"8c140881", -1984 => x"8bac0b84", -1985 => x"0508718c", -1986 => x"190c7588", -1987 => x"190c7788", -1988 => x"130c5c57", -1989 => x"758c150c", -1990 => x"78538079", -1991 => x"24ff0509", -1992 => x"86860bf7", -1993 => x"05068401", -1994 => x"05050472", -1995 => x"822c8171", -1996 => x"2b565674", -1997 => x"7b26ff05", -1998 => x"0981a80b", -1999 => x"f7050684", -2000 => x"01050504", -2001 => x"7a750657", -2002 => x"76097081", -2003 => x"0509060a", -2004 => x"098106ff", -2005 => x"050983ee", -2006 => x"0bf70506", -2007 => x"84010505", -2008 => x"0478fc06", -2009 => x"84055974", -2010 => x"10707c06", -2011 => x"55557309", -2012 => x"70810509", -2013 => x"060a0981", -2014 => x"06ff0509", -2015 => x"83c80bf7", -2016 => x"05068401", -2017 => x"05050484", -2018 => x"1959dc39", -2019 => x"818bac0b", -2020 => x"84050879", -2021 => x"545b7880", -2022 => x"25ff0509", -2023 => x"ff8d0bf7", -2024 => x"05068401", -2025 => x"05050484", -2026 => x"ff397409", -2027 => x"7b067081", -2028 => x"8bac0b84", -2029 => x"050c5b74", -2030 => x"1055747b", -2031 => x"26ff0509", -2032 => x"a20bf705", -2033 => x"06840105", -2034 => x"05047409", -2035 => x"70810509", -2036 => x"060a0981", -2037 => x"06ff0509", -2038 => x"899c0bf7", -2039 => x"05068401", -2040 => x"05050481", -2041 => x"8bac0b88", -2042 => x"05087084", -2043 => x"1208fc06", -2044 => x"707b317b", -2045 => x"72268f72", -2046 => x"25075d57", -2047 => x"5c5c5578", -2048 => x"09708105", -2049 => x"09060a81", -2050 => x"06ff0509", -2051 => x"81c60bf7", -2052 => x"05068401", -2053 => x"05050479", -2054 => x"15818ba4", -2055 => x"08199011", -2056 => x"59545681", -2057 => x"8ba00809", -2058 => x"8105ff05", -2059 => x"09708105", -2060 => x"09060a81", -2061 => x"06ff0509", -2062 => x"900bf705", -2063 => x"06840105", -2064 => x"0504a08f", -2065 => x"13e08006", -2066 => x"5776527c", -2067 => x"518cc73f", -2068 => x"80085480", -2069 => x"08098105", -2070 => x"ff050970", -2071 => x"81050906", -2072 => x"0a8106ff", -2073 => x"0509ba0b", -2074 => x"f7050684", -2075 => x"01050504", -2076 => x"80087627", -2077 => x"ff050983", -2078 => x"e90bf705", -2079 => x"06840105", -2080 => x"05047409", -2081 => x"8105818b", -2082 => x"ac050970", -2083 => x"81050906", -2084 => x"0a8106ff", -2085 => x"050983ca", -2086 => x"0bf70506", -2087 => x"84010505", -2088 => x"04818bac", -2089 => x"0b880508", -2090 => x"55841508", -2091 => x"fc067079", -2092 => x"31797226", -2093 => x"8f722507", -2094 => x"5d555a7a", -2095 => x"09708105", -2096 => x"09060a09", -2097 => x"8106ff05", -2098 => x"0986d00b", -2099 => x"f7050684", -2100 => x"01050504", -2101 => x"77810784", -2102 => x"160c7715", -2103 => x"70818bac", -2104 => x"0b88050c", -2105 => x"74810784", -2106 => x"120c567c", -2107 => x"518ba63f", -2108 => x"88155473", -2109 => x"800c8e3d", -2110 => x"0d047483", -2111 => x"2a705454", -2112 => x"807424ff", -2113 => x"050982a6", -2114 => x"0bf70506", -2115 => x"84010505", -2116 => x"0472822c", -2117 => x"81712b81", -2118 => x"8bb00807", -2119 => x"70818bac", -2120 => x"0b84050c", -2121 => x"75101010", -2122 => x"818bac05", -2123 => x"88110871", -2124 => x"8c1b0c70", -2125 => x"881b0c79", -2126 => x"88130c57", -2127 => x"555c5575", -2128 => x"8c150cfb", -2129 => x"d3397879", -2130 => x"10101081", -2131 => x"8bac0570", -2132 => x"565b5c8c", -2133 => x"14085675", -2134 => x"09810574", -2135 => x"05097081", -2136 => x"0509060a", -2137 => x"8106ff05", -2138 => x"0980d70b", -2139 => x"f7050684", -2140 => x"01050504", -2141 => x"841608fc", -2142 => x"06707931", -2143 => x"5853768f", -2144 => x"24ff0509", -2145 => x"86c10bf7", -2146 => x"05068401", -2147 => x"05050476", -2148 => x"8025ff05", -2149 => x"0986f40b", -2150 => x"f7050684", -2151 => x"01050504", -2152 => x"8c160856", -2153 => x"75098105", -2154 => x"74050970", -2155 => x"81050906", -2156 => x"0a098106", -2157 => x"ff0509ff", -2158 => x"bb0bf705", -2159 => x"06840105", -2160 => x"05048814", -2161 => x"811a7083", -2162 => x"06555a54", -2163 => x"72097081", -2164 => x"0509060a", -2165 => x"098106ff", -2166 => x"0509fef7", -2167 => x"0bf70506", -2168 => x"84010505", -2169 => x"047b8306", -2170 => x"56750970", -2171 => x"81050906", -2172 => x"0a8106ff", -2173 => x"0509fbb2", -2174 => x"0bf70506", -2175 => x"84010505", -2176 => x"04ff1cf8", -2177 => x"1b5b5c88", -2178 => x"1a080981", -2179 => x"057a0509", -2180 => x"70810509", -2181 => x"060a8106", -2182 => x"ff0509c9", -2183 => x"0bf70506", -2184 => x"84010505", -2185 => x"04fb9039", -2186 => x"831953f9", -2187 => x"fe398314", -2188 => x"70822c81", -2189 => x"712b818b", -2190 => x"b0080770", -2191 => x"818bac0b", -2192 => x"84050c76", -2193 => x"10101081", -2194 => x"8bac0588", -2195 => x"1108718c", -2196 => x"1c0c7088", -2197 => x"1c0c7a88", -2198 => x"130c5853", -2199 => x"5d5653fd", -2200 => x"de39818a", -2201 => x"f0081759", -2202 => x"80080981", -2203 => x"05760509", -2204 => x"70810509", -2205 => x"060a8106", -2206 => x"ff050982", -2207 => x"870bf705", -2208 => x"06840105", -2209 => x"0504818b", -2210 => x"a0080981", -2211 => x"05ff0509", -2212 => x"70810509", -2213 => x"060a8106", -2214 => x"ff050985", -2215 => x"db0bf705", -2216 => x"06840105", -2217 => x"05047376", -2218 => x"3119818a", -2219 => x"f00c7387", -2220 => x"06705653", -2221 => x"72097081", -2222 => x"0509060a", -2223 => x"8106ff05", -2224 => x"09900bf7", -2225 => x"05068401", -2226 => x"05050488", -2227 => x"73317015", -2228 => x"55557614", -2229 => x"9fff06a0", -2230 => x"80713116", -2231 => x"70547e53", -2232 => x"515387b2", -2233 => x"3f800856", -2234 => x"80080981", -2235 => x"05ff0509", -2236 => x"70810509", -2237 => x"060a8106", -2238 => x"ff050982", -2239 => x"970bf705", -2240 => x"06840105", -2241 => x"0504818a", -2242 => x"f0081370", -2243 => x"818af00c", -2244 => x"7475818b", -2245 => x"ac0b8805", -2246 => x"0c777631", -2247 => x"15810755", -2248 => x"56597a09", -2249 => x"8105818b", -2250 => x"ac050970", -2251 => x"81050906", -2252 => x"0a8106ff", -2253 => x"050984cd", -2254 => x"0bf70506", -2255 => x"84010505", -2256 => x"04798f26", -2257 => x"ff050983", -2258 => x"e60bf705", -2259 => x"06840105", -2260 => x"0504810b", -2261 => x"84150c84", -2262 => x"1508fc06", -2263 => x"70793179", -2264 => x"72268f72", -2265 => x"25075d55", -2266 => x"5a7a0970", -2267 => x"81050906", -2268 => x"0a8106ff", -2269 => x"0509fadc", -2270 => x"0bf70506", -2271 => x"84010505", -2272 => x"04819839", -2273 => x"80089fff", -2274 => x"06557409", -2275 => x"70810509", -2276 => x"060a0981", -2277 => x"06ff0509", -2278 => x"fdec0bf7", -2279 => x"05068401", -2280 => x"05050478", -2281 => x"818af00c", -2282 => x"818bac0b", -2283 => x"8805087a", -2284 => x"18810784", -2285 => x"120c5581", -2286 => x"8b9c0879", -2287 => x"27ff0509", -2288 => x"8e0bf705", -2289 => x"06840105", -2290 => x"05047881", -2291 => x"8b9c0c81", -2292 => x"8b980879", -2293 => x"27ff0509", -2294 => x"f9cf0bf7", -2295 => x"05068401", -2296 => x"05050478", -2297 => x"818b980c", -2298 => x"841508fc", -2299 => x"06707931", -2300 => x"7972268f", -2301 => x"7225075d", -2302 => x"555a7a09", -2303 => x"70810509", -2304 => x"060a8106", -2305 => x"ff0509f9", -2306 => x"cb0bf705", -2307 => x"06840105", -2308 => x"05048839", -2309 => x"80745753", -2310 => x"fdec397c", -2311 => x"5184f63f", -2312 => x"800b800c", -2313 => x"8e3d0d04", -2314 => x"807324ff", -2315 => x"0509ad0b", -2316 => x"f7050684", -2317 => x"01050504", -2318 => x"72822c81", -2319 => x"712b818b", -2320 => x"b0080770", -2321 => x"818bac0b", -2322 => x"84050c5c", -2323 => x"5a768c17", -2324 => x"0c738817", -2325 => x"0c758818", -2326 => x"0cf5b939", -2327 => x"83137082", -2328 => x"2c81712b", -2329 => x"818bb008", -2330 => x"0770818b", -2331 => x"ac0b8405", -2332 => x"0c5d5b53", -2333 => x"d8397a75", -2334 => x"065c7b09", -2335 => x"70810509", -2336 => x"060a0981", -2337 => x"06ff0509", -2338 => x"f9bc0bf7", -2339 => x"05068401", -2340 => x"05050484", -2341 => x"19751056", -2342 => x"59dc39ff", -2343 => x"17810559", -2344 => x"f181398c", -2345 => x"15088816", -2346 => x"08718c12", -2347 => x"0c88120c", -2348 => x"59751584", -2349 => x"11088107", -2350 => x"84120c58", -2351 => x"7c5183d5", -2352 => x"3f881554", -2353 => x"f8ad3977", -2354 => x"16788107", -2355 => x"84180c8c", -2356 => x"17088818", -2357 => x"08718c12", -2358 => x"0c88120c", -2359 => x"5c70818b", -2360 => x"c00c7081", -2361 => x"8bbc0c81", -2362 => x"8bb40b8c", -2363 => x"120c8c11", -2364 => x"0888120c", -2365 => x"77810784", -2366 => x"120c7705", -2367 => x"77710c55", -2368 => x"7c518391", -2369 => x"3f881654", -2370 => x"ee803972", -2371 => x"16841108", -2372 => x"81078412", -2373 => x"0c588c16", -2374 => x"08881708", -2375 => x"718c120c", -2376 => x"88120c57", -2377 => x"7c5182ed", -2378 => x"3f881654", -2379 => x"eddc3972", -2380 => x"84150cf4", -2381 => x"1af80670", -2382 => x"841d0881", -2383 => x"0607841d", -2384 => x"0c701c55", -2385 => x"56850b84", -2386 => x"150c850b", -2387 => x"88150c8f", -2388 => x"7627ff05", -2389 => x"09fce00b", -2390 => x"f7050684", -2391 => x"01050504", -2392 => x"881b527c", -2393 => x"5187b03f", -2394 => x"818bac0b", -2395 => x"88050881", -2396 => x"8af0085a", -2397 => x"55fcc039", -2398 => x"78818af0", -2399 => x"0c73818b", -2400 => x"a00cfaaa", -2401 => x"39728415", -2402 => x"0cfcac39", -2403 => x"fb3d0d77", -2404 => x"707a7c58", -2405 => x"5553568f", -2406 => x"7527ff05", -2407 => x"0981a40b", -2408 => x"f7050684", -2409 => x"01050504", -2410 => x"72760783", -2411 => x"06517009", -2412 => x"70810509", -2413 => x"060a0981", -2414 => x"06ff0509", -2415 => x"81850bf7", -2416 => x"05068401", -2417 => x"05050475", -2418 => x"73525470", -2419 => x"70840552", -2420 => x"08747084", -2421 => x"05560c73", -2422 => x"71708405", -2423 => x"53087170", -2424 => x"8405530c", -2425 => x"71708405", -2426 => x"53087170", -2427 => x"8405530c", -2428 => x"71708405", -2429 => x"53087170", -2430 => x"8405530c", -2431 => x"f0165654", -2432 => x"748f26ff", -2433 => x"0509c40b", -2434 => x"f7050684", -2435 => x"01050504", -2436 => x"837527ff", -2437 => x"0509a80b", -2438 => x"f7050684", -2439 => x"01050504", -2440 => x"70708405", -2441 => x"52087470", -2442 => x"8405560c", -2443 => x"fc155574", -2444 => x"8326ff05", -2445 => x"09ea0bf7", -2446 => x"05068401", -2447 => x"05050473", -2448 => x"715452ff", -2449 => x"15517009", -2450 => x"8105ff05", -2451 => x"09708105", -2452 => x"09060a81", -2453 => x"06ff0509", -2454 => x"b40bf705", -2455 => x"06840105", -2456 => x"05047270", -2457 => x"81055472", -2458 => x"70810554", -2459 => x"3bff1151", -2460 => x"70098105", -2461 => x"ff050970", -2462 => x"81050906", -2463 => x"0a098106", -2464 => x"ff0509de", -2465 => x"0bf70506", -2466 => x"84010505", -2467 => x"0475800c", -2468 => x"873d0d04", -2469 => x"04047070", -2470 => x"7070800b", -2471 => x"81eaf40c", -2472 => x"76518cc1", -2473 => x"3f800853", -2474 => x"80080981", -2475 => x"05ff0509", -2476 => x"70810509", -2477 => x"060a8106", -2478 => x"ff050991", -2479 => x"0bf70506", -2480 => x"84010505", -2481 => x"0472800c", -2482 => x"50505050", -2483 => x"0481eaf4", -2484 => x"08547309", -2485 => x"70810509", -2486 => x"060a8106", -2487 => x"ff0509e5", -2488 => x"0bf70506", -2489 => x"84010505", -2490 => x"04757471", -2491 => x"0c527280", -2492 => x"0c505050", -2493 => x"5004fb3d", -2494 => x"0d777970", -2495 => x"72078306", -2496 => x"53545270", -2497 => x"09708105", -2498 => x"09060a09", -2499 => x"8106ff05", -2500 => x"09b20bf7", -2501 => x"05068401", -2502 => x"05050471", -2503 => x"73730854", -2504 => x"56547109", -2505 => x"81057308", -2506 => x"05097081", -2507 => x"0509060a", -2508 => x"8106ff05", -2509 => x"0981890b", -2510 => x"f7050684", -2511 => x"01050504", -2512 => x"73755452", -2513 => x"71337081", -2514 => x"ff065254", -2515 => x"70097081", -2516 => x"0509060a", -2517 => x"8106ff05", -2518 => x"0980cf0b", -2519 => x"f7050684", -2520 => x"01050504", -2521 => x"72335570", -2522 => x"09810575", -2523 => x"05097081", -2524 => x"0509060a", -2525 => x"098106ff", -2526 => x"0509b20b", -2527 => x"f7050684", -2528 => x"01050504", -2529 => x"81128114", -2530 => x"71337081", -2531 => x"ff065456", -2532 => x"54527009", -2533 => x"70810509", -2534 => x"060a0981", -2535 => x"06ff0509", -2536 => x"c30bf705", -2537 => x"06840105", -2538 => x"05047233", -2539 => x"557381ff", -2540 => x"067581ff", -2541 => x"06717131", -2542 => x"800c5552", -2543 => x"873d0d04", -2544 => x"7109f7fb", -2545 => x"fdff1306", -2546 => x"f8848281", -2547 => x"80065271", -2548 => x"09708105", -2549 => x"09060a09", -2550 => x"8106ff05", -2551 => x"09b70bf7", -2552 => x"05068401", -2553 => x"05050484", -2554 => x"14841671", -2555 => x"08545654", -2556 => x"71098105", -2557 => x"75080509", -2558 => x"70810509", -2559 => x"060a8106", -2560 => x"ff0509ff", -2561 => x"bb0bf705", -2562 => x"06840105", -2563 => x"05047375", -2564 => x"5452feb0", -2565 => x"39800b80", -2566 => x"0c873d0d", -2567 => x"04fb3d0d", -2568 => x"77705256", -2569 => x"fcee3f81", -2570 => x"8bac0b88", -2571 => x"05088411", -2572 => x"08fc0670", -2573 => x"7b319fef", -2574 => x"05e08006", -2575 => x"e0800552", -2576 => x"5555a080", -2577 => x"7524ff05", -2578 => x"09b30bf7", -2579 => x"05068401", -2580 => x"05050480", -2581 => x"527551fc", -2582 => x"bd3f818b", -2583 => x"b4081453", -2584 => x"72098105", -2585 => x"80080509", -2586 => x"70810509", -2587 => x"060a8106", -2588 => x"ff050997", -2589 => x"0bf70506", -2590 => x"84010505", -2591 => x"047551fc", -2592 => x"943f8053", -2593 => x"72800c87", -2594 => x"3d0d0474", -2595 => x"30527551", -2596 => x"fc843f80", -2597 => x"08098105", -2598 => x"ff050970", -2599 => x"81050906", -2600 => x"0a8106ff", -2601 => x"0509b00b", -2602 => x"f7050684", -2603 => x"01050504", -2604 => x"818bac0b", -2605 => x"88050874", -2606 => x"76318107", -2607 => x"84120c53", -2608 => x"818af008", -2609 => x"7531818a", -2610 => x"f00c7551", -2611 => x"fbc73f81", -2612 => x"0b800c87", -2613 => x"3d0d0480", -2614 => x"527551fb", -2615 => x"b93f818b", -2616 => x"ac0b8805", -2617 => x"08800871", -2618 => x"3154548f", -2619 => x"7325ff05", -2620 => x"09ff8a0b", -2621 => x"f7050684", -2622 => x"01050504", -2623 => x"8008818b", -2624 => x"a0083181", -2625 => x"8af00c72", -2626 => x"81078415", -2627 => x"0c7551fb", -2628 => x"843f8053", -2629 => x"feee39f7", -2630 => x"3d0d7b7d", -2631 => x"545a7209", -2632 => x"70810509", -2633 => x"060a8106", -2634 => x"ff050984", -2635 => x"9e0bf705", -2636 => x"06840105", -2637 => x"05047951", -2638 => x"fada3ff8", -2639 => x"13841108", -2640 => x"70fe0670", -2641 => x"13841108", -2642 => x"fc065c57", -2643 => x"58545781", -2644 => x"8bb40809", -2645 => x"81057405", -2646 => x"09708105", -2647 => x"09060a81", -2648 => x"06ff0509", -2649 => x"85840bf7", -2650 => x"05068401", -2651 => x"05050477", -2652 => x"84150c80", -2653 => x"73810656", -2654 => x"59740981", -2655 => x"05790509", -2656 => x"70810509", -2657 => x"060a8106", -2658 => x"ff050983", -2659 => x"c20bf705", -2660 => x"06840105", -2661 => x"05047714", -2662 => x"84110881", -2663 => x"06565374", -2664 => x"09708105", -2665 => x"09060a09", -2666 => x"8106ff05", -2667 => x"0980d40b", -2668 => x"f7050684", -2669 => x"01050504", -2670 => x"77165678", -2671 => x"09708105", -2672 => x"09060a09", -2673 => x"8106ff05", -2674 => x"0983bf0b", -2675 => x"f7050684", -2676 => x"01050504", -2677 => x"88140855", -2678 => x"74098105", -2679 => x"818bb405", -2680 => x"09708105", -2681 => x"09060a81", -2682 => x"06ff0509", -2683 => x"84e60bf7", -2684 => x"05068401", -2685 => x"0505048c", -2686 => x"1408708c", -2687 => x"170c7588", -2688 => x"120c5875", -2689 => x"81078418", -2690 => x"0c751776", -2691 => x"710c5478", -2692 => x"09708105", -2693 => x"09060a09", -2694 => x"8106ff05", -2695 => x"0982a70b", -2696 => x"f7050684", -2697 => x"01050504", -2698 => x"83ff7627", -2699 => x"ff050982", -2700 => x"ea0bf705", -2701 => x"06840105", -2702 => x"05047589", -2703 => x"2a76832a", -2704 => x"54547309", -2705 => x"70810509", -2706 => x"060a8106", -2707 => x"ff050981", -2708 => x"800bf705", -2709 => x"06840105", -2710 => x"05047586", -2711 => x"2ab80553", -2712 => x"847427ff", -2713 => x"050980e9", -2714 => x"0bf70506", -2715 => x"84010505", -2716 => x"0480db14", -2717 => x"53947427", -2718 => x"ff050980", -2719 => x"d40bf705", -2720 => x"06840105", -2721 => x"0504758c", -2722 => x"2a80ee05", -2723 => x"5380d474", -2724 => x"27ff0509", -2725 => x"bc0bf705", -2726 => x"06840105", -2727 => x"0504758f", -2728 => x"2a80f705", -2729 => x"5382d474", -2730 => x"27ff0509", -2731 => x"a40bf705", -2732 => x"06840105", -2733 => x"05047592", -2734 => x"2a80fc05", -2735 => x"538ad474", -2736 => x"27ff0509", -2737 => x"8c0bf705", -2738 => x"06840105", -2739 => x"050480fe", -2740 => x"53721010", -2741 => x"10818bac", -2742 => x"05881108", -2743 => x"55557309", -2744 => x"81057505", -2745 => x"09708105", -2746 => x"09060a81", -2747 => x"06ff0509", -2748 => x"83a90bf7", -2749 => x"05068401", -2750 => x"05050484", -2751 => x"1408fc06", -2752 => x"59757927", -2753 => x"ff0509aa", -2754 => x"0bf70506", -2755 => x"84010505", -2756 => x"04881408", -2757 => x"54730981", -2758 => x"05750509", -2759 => x"70810509", -2760 => x"060a0981", -2761 => x"06ff0509", -2762 => x"d20bf705", -2763 => x"06840105", -2764 => x"05048c14", -2765 => x"08708c19", -2766 => x"0c748819", -2767 => x"0c778812", -2768 => x"0c55768c", -2769 => x"150c7951", -2770 => x"f6cb3f8b", -2771 => x"3d0d0476", -2772 => x"08777131", -2773 => x"58760588", -2774 => x"18085656", -2775 => x"74098105", -2776 => x"818bb405", -2777 => x"09708105", -2778 => x"09060a81", -2779 => x"06ff0509", -2780 => x"80f30bf7", -2781 => x"05068401", -2782 => x"0505048c", -2783 => x"1708708c", -2784 => x"170c7588", -2785 => x"120c53fc", -2786 => x"8d398814", -2787 => x"088c1508", -2788 => x"708c130c", -2789 => x"5988190c", -2790 => x"fce93975", -2791 => x"832a7054", -2792 => x"54807424", -2793 => x"ff050981", -2794 => x"c00bf705", -2795 => x"06840105", -2796 => x"05047282", -2797 => x"2c81712b", -2798 => x"818bb008", -2799 => x"07818bac", -2800 => x"0b84050c", -2801 => x"74101010", -2802 => x"818bac05", -2803 => x"88110871", -2804 => x"8c1b0c70", -2805 => x"881b0c79", -2806 => x"88130c56", -2807 => x"5a55768c", -2808 => x"150cfee2", -2809 => x"398159fb", -2810 => x"ad397716", -2811 => x"73810654", -2812 => x"55720970", -2813 => x"81050906", -2814 => x"0a098106", -2815 => x"ff0509a0", -2816 => x"0bf70506", -2817 => x"84010505", -2818 => x"04760877", -2819 => x"71315875", -2820 => x"058c1808", -2821 => x"88190871", -2822 => x"8c120c88", -2823 => x"120c5555", -2824 => x"74810784", -2825 => x"180c7681", -2826 => x"8bac0b88", -2827 => x"050c818b", -2828 => x"a8087526", -2829 => x"ff0509fe", -2830 => x"8d0bf705", -2831 => x"06840105", -2832 => x"0504818b", -2833 => x"a4085279", -2834 => x"51f7d23f", -2835 => x"7951f4c5", -2836 => x"3ffdf839", -2837 => x"81778c17", -2838 => x"0c778817", -2839 => x"0c758c19", -2840 => x"0c758819", -2841 => x"0c59fb9b", -2842 => x"39831470", -2843 => x"822c8171", -2844 => x"2b818bb0", -2845 => x"0807818b", -2846 => x"ac0b8405", -2847 => x"0c751010", -2848 => x"10818bac", -2849 => x"05881108", -2850 => x"718c1c0c", -2851 => x"70881c0c", -2852 => x"7a88130c", -2853 => x"575b5653", -2854 => x"fec43980", -2855 => x"7324ff05", -2856 => x"09ab0bf7", -2857 => x"05068401", -2858 => x"05050472", -2859 => x"822c8171", -2860 => x"2b818bb0", -2861 => x"0807818b", -2862 => x"ac0b8405", -2863 => x"0c58748c", -2864 => x"180c7388", -2865 => x"180c7688", -2866 => x"160cfcf6", -2867 => x"39831370", -2868 => x"822c8171", -2869 => x"2b818bb0", -2870 => x"0807818b", -2871 => x"ac0b8405", -2872 => x"0c5953da", -2873 => x"39707070", -2874 => x"81eaf808", -2875 => x"51700970", -2876 => x"81050906", -2877 => x"0a098106", -2878 => x"ff050992", -2879 => x"0bf70506", -2880 => x"84010505", -2881 => x"0481eb80", -2882 => x"7081eaf8", -2883 => x"0c517411", -2884 => x"52ff5371", -2885 => x"87fb8080", -2886 => x"26ff0509", -2887 => x"900bf705", -2888 => x"06840105", -2889 => x"05047181", -2890 => x"eaf80c70", -2891 => x"5372800c", -2892 => x"50505004", -2893 => x"70707070", -2894 => x"800b818a", -2895 => x"dc085454", -2896 => x"72098105", -2897 => x"81050970", -2898 => x"81050906", -2899 => x"0a8106ff", -2900 => x"0509a50b", -2901 => x"f7050684", -2902 => x"01050504", -2903 => x"7381eafc", -2904 => x"0cffb7b3", -2905 => x"3fffad98", -2906 => x"3f819ab4", -2907 => x"528151c5", -2908 => x"803f8008", -2909 => x"518cbe3f", -2910 => x"7281eafc", -2911 => x"0cffb797", -2912 => x"3fffacfc", -2913 => x"3f819ab4", -2914 => x"528151c4", -2915 => x"e43f8008", -2916 => x"518ca23f", -2917 => x"00ff3900", -2918 => x"ff39f53d", -2919 => x"0d7e6081", -2920 => x"eafc0870", -2921 => x"5b585b5b", -2922 => x"75097081", -2923 => x"0509060a", -2924 => x"098106ff", -2925 => x"050980fb", -2926 => x"0bf70506", -2927 => x"84010505", -2928 => x"04777a25", -2929 => x"ff050980", -2930 => x"cc0bf705", -2931 => x"06840105", -2932 => x"0504771b", -2933 => x"70337081", -2934 => x"ff065858", -2935 => x"59750981", -2936 => x"058a0509", -2937 => x"70810509", -2938 => x"060a8106", -2939 => x"ff0509ac", -2940 => x"0bf70506", -2941 => x"84010505", -2942 => x"047681ff", -2943 => x"0651ffb5", -2944 => x"e23f8118", -2945 => x"58797824", -2946 => x"ff0509c6", -2947 => x"0bf70506", -2948 => x"84010505", -2949 => x"0479800c", -2950 => x"8d3d0d04", -2951 => x"8d51ffb5", -2952 => x"c23f7833", -2953 => x"7081ff06", -2954 => x"5257ffb5", -2955 => x"b63f8118", -2956 => x"58d33979", -2957 => x"557a547d", -2958 => x"5385528d", -2959 => x"3dfc0551", -2960 => x"ffb4eb3f", -2961 => x"8008568a", -2962 => x"e53f7b80", -2963 => x"080c7580", -2964 => x"0c8d3d0d", -2965 => x"04f63d0d", -2966 => x"7d7f81ea", -2967 => x"fc08705a", -2968 => x"585a5a75", -2969 => x"09708105", -2970 => x"09060a09", -2971 => x"8106ff05", -2972 => x"0981930b", -2973 => x"f7050684", -2974 => x"01050504", -2975 => x"767925ff", -2976 => x"050980f4", -2977 => x"0bf70506", -2978 => x"84010505", -2979 => x"04761a58", -2980 => x"ffb49d3f", -2981 => x"80087834", -2982 => x"800b8008", -2983 => x"81ff0657", -2984 => x"58750981", -2985 => x"058a0509", -2986 => x"70810509", -2987 => x"060a8106", -2988 => x"ff050980", -2989 => x"cc0bf705", -2990 => x"06840105", -2991 => x"0504758d", -2992 => x"32703070", -2993 => x"80257a07", -2994 => x"51515675", -2995 => x"09708105", -2996 => x"09060a09", -2997 => x"8106ff05", -2998 => x"0980cd0b", -2999 => x"f7050684", -3000 => x"01050504", -3001 => x"81175778", -3002 => x"7724ff05", -3003 => x"09ff9e0b", -3004 => x"f7050684", -3005 => x"01050504", -3006 => x"76567580", -3007 => x"0c8c3d0d", -3008 => x"048158ff", -3009 => x"b9397855", -3010 => x"79547c53", -3011 => x"84528c3d", -3012 => x"fc0551ff", -3013 => x"b3983f80", -3014 => x"08568992", -3015 => x"3f7a8008", -3016 => x"0c75800c", -3017 => x"8c3d0d04", -3018 => x"811756ce", -3019 => x"39f93d0d", -3020 => x"795781ea", -3021 => x"fc080970", -3022 => x"81050906", -3023 => x"0a8106ff", -3024 => x"0509b50b", -3025 => x"f7050684", -3026 => x"01050504", -3027 => x"76518d88", -3028 => x"3f7b567a", -3029 => x"55800881", -3030 => x"05547653", -3031 => x"8252893d", -3032 => x"fc0551ff", -3033 => x"b2c83f80", -3034 => x"085788c2", -3035 => x"3f778008", -3036 => x"0c76800c", -3037 => x"893d0d04", -3038 => x"88b43f85", -3039 => x"0b80080c", -3040 => x"ff0b800c", -3041 => x"893d0d04", -3042 => x"fb3d0d81", -3043 => x"eafc0870", -3044 => x"56547309", -3045 => x"70810509", -3046 => x"060a0981", -3047 => x"06ff0509", -3048 => x"900bf705", -3049 => x"06840105", -3050 => x"05047480", -3051 => x"0c873d0d", -3052 => x"04775383", -3053 => x"52873dfc", -3054 => x"0551ffb1", -3055 => x"f13f8008", -3056 => x"5487eb3f", -3057 => x"7580080c", -3058 => x"73800c87", -3059 => x"3d0d04ff", -3060 => x"0b800c04", -3061 => x"fb3d0d77", -3062 => x"5581eafc", -3063 => x"08097081", -3064 => x"0509060a", -3065 => x"8106ff05", -3066 => x"09b10bf7", -3067 => x"05068401", -3068 => x"05050474", -3069 => x"518be13f", -3070 => x"80088105", -3071 => x"54745387", -3072 => x"52873dfc", -3073 => x"0551ffb1", -3074 => x"a53f8008", -3075 => x"55879f3f", -3076 => x"7580080c", -3077 => x"74800c87", -3078 => x"3d0d0487", -3079 => x"913f850b", -3080 => x"80080cff", -3081 => x"0b800c87", -3082 => x"3d0d04fa", -3083 => x"3d0d81ea", -3084 => x"fc080970", -3085 => x"81050906", -3086 => x"0a8106ff", -3087 => x"0509ab0b", -3088 => x"f7050684", -3089 => x"01050504", -3090 => x"7a557954", -3091 => x"78538652", -3092 => x"883dfc05", -3093 => x"51ffb0d6", -3094 => x"3f800856", -3095 => x"86d03f76", -3096 => x"80080c75", -3097 => x"800c883d", -3098 => x"0d0486c2", -3099 => x"3f9d0b80", -3100 => x"080cff0b", -3101 => x"800c883d", -3102 => x"0d04f73d", -3103 => x"0d7b7d5b", -3104 => x"59bc5380", -3105 => x"52795188", -3106 => x"cd3f8070", -3107 => x"56579856", -3108 => x"74197033", -3109 => x"70782b79", -3110 => x"078118f8", -3111 => x"1a5a5859", -3112 => x"55588475", -3113 => x"24ff0509", -3114 => x"e70bf705", -3115 => x"06840105", -3116 => x"0504767a", -3117 => x"23841958", -3118 => x"80705657", -3119 => x"98567418", -3120 => x"70337078", -3121 => x"2b790781", -3122 => x"18f81a5a", -3123 => x"58595154", -3124 => x"847524ff", -3125 => x"0509e70b", -3126 => x"f7050684", -3127 => x"01050504", -3128 => x"76821b23", -3129 => x"88195880", -3130 => x"70565798", -3131 => x"56741870", -3132 => x"3370782b", -3133 => x"79078118", -3134 => x"f81a5a58", -3135 => x"59515484", -3136 => x"7524ff05", -3137 => x"09e70bf7", -3138 => x"05068401", -3139 => x"05050476", -3140 => x"841b0c8c", -3141 => x"19588070", -3142 => x"56579856", -3143 => x"74187033", -3144 => x"70782b79", -3145 => x"078118f8", -3146 => x"1a5a5859", -3147 => x"51548475", -3148 => x"24ff0509", -3149 => x"e70bf705", -3150 => x"06840105", -3151 => x"05047688", -3152 => x"1b239019", -3153 => x"58807056", -3154 => x"57985674", -3155 => x"18703370", -3156 => x"782b7907", -3157 => x"8118f81a", -3158 => x"5a585951", -3159 => x"54847524", -3160 => x"ff0509e7", -3161 => x"0bf70506", -3162 => x"84010505", -3163 => x"04768a1b", -3164 => x"23941958", -3165 => x"80705657", -3166 => x"98567418", -3167 => x"70337078", -3168 => x"2b790781", -3169 => x"18f81a5a", -3170 => x"58595154", -3171 => x"847524ff", -3172 => x"0509e70b", -3173 => x"f7050684", -3174 => x"01050504", -3175 => x"768c1b23", -3176 => x"98195880", -3177 => x"70565798", -3178 => x"56741870", -3179 => x"3370782b", -3180 => x"79078118", -3181 => x"f81a5a58", -3182 => x"59515484", -3183 => x"7524ff05", -3184 => x"09e70bf7", -3185 => x"05068401", -3186 => x"05050476", -3187 => x"8e1b239c", -3188 => x"19588070", -3189 => x"5657b856", -3190 => x"74187033", -3191 => x"70782b79", -3192 => x"078118f8", -3193 => x"1a5a5859", -3194 => x"5a548875", -3195 => x"24ff0509", -3196 => x"e70bf705", -3197 => x"06840105", -3198 => x"05047690", -3199 => x"1b0c8b3d", -3200 => x"0d04e93d", -3201 => x"0d6a81ea", -3202 => x"fc085757", -3203 => x"75097081", -3204 => x"0509060a", -3205 => x"098106ff", -3206 => x"05099b0b", -3207 => x"f7050684", -3208 => x"01050504", -3209 => x"80c0800b", -3210 => x"84180c75", -3211 => x"ac180c75", -3212 => x"800c993d", -3213 => x"0d04893d", -3214 => x"70556a54", -3215 => x"558a5299", -3216 => x"3dffbc05", -3217 => x"51fface6", -3218 => x"3f800877", -3219 => x"53755256", -3220 => x"fca83f82", -3221 => x"d93f7780", -3222 => x"080c7580", -3223 => x"0c993d0d", -3224 => x"04e93d0d", -3225 => x"695781ea", -3226 => x"fc080970", -3227 => x"81050906", -3228 => x"0a8106ff", -3229 => x"0509be0b", -3230 => x"f7050684", -3231 => x"01050504", -3232 => x"765186d4", -3233 => x"3f893d70", -3234 => x"56800881", -3235 => x"05557754", -3236 => x"568f5299", -3237 => x"3dffbc05", -3238 => x"51ffac92", -3239 => x"3f80086b", -3240 => x"53765257", -3241 => x"fbd43f82", -3242 => x"853f7780", -3243 => x"080c7680", -3244 => x"0c993d0d", -3245 => x"0481f73f", -3246 => x"850b8008", -3247 => x"0cff0b80", -3248 => x"0c993d0d", -3249 => x"04fc3d0d", -3250 => x"815481ea", -3251 => x"fc080970", -3252 => x"81050906", -3253 => x"0a098106", -3254 => x"ff050990", -3255 => x"0bf70506", -3256 => x"84010505", -3257 => x"0473800c", -3258 => x"863d0d04", -3259 => x"765397b9", -3260 => x"52863dfc", -3261 => x"0551ffab", -3262 => x"b53f8008", -3263 => x"5481af3f", -3264 => x"7480080c", -3265 => x"73800c86", -3266 => x"3d0d04f4", -3267 => x"3d0d7e81", -3268 => x"9ae00870", -3269 => x"0881ff06", -3270 => x"913df805", -3271 => x"54515959", -3272 => x"ffacf63f", -3273 => x"77578054", -3274 => x"76557b7d", -3275 => x"58527653", -3276 => x"8e3df005", -3277 => x"5186e23f", -3278 => x"797b5879", -3279 => x"0c76841a", -3280 => x"0c78800c", -3281 => x"8e3d0d04", -3282 => x"f43d0d7e", -3283 => x"819ae008", -3284 => x"70087081", -3285 => x"ff06923d", -3286 => x"f8055551", -3287 => x"5a5759ff", -3288 => x"acb73f77", -3289 => x"57800b8b", -3290 => x"3d595476", -3291 => x"557b7d58", -3292 => x"52765377", -3293 => x"5186a23f", -3294 => x"8056bd84", -3295 => x"c0765555", -3296 => x"797b5852", -3297 => x"76537751", -3298 => x"868f3f7a", -3299 => x"57780970", -3300 => x"81050906", -3301 => x"0a8106ff", -3302 => x"05098c0b", -3303 => x"f7050684", -3304 => x"01050504", -3305 => x"76790c76", -3306 => x"800c8e3d", -3307 => x"0d048193", -3308 => x"b408800c", -3309 => x"04f73d0d", -3310 => x"7b8193b4", -3311 => x"0882c811", -3312 => x"085a545a", -3313 => x"77097081", -3314 => x"0509060a", -3315 => x"8106ff05", -3316 => x"0981ac0b", -3317 => x"f7050684", -3318 => x"01050504", -3319 => x"81881884", -3320 => x"1908ff05", -3321 => x"81712b59", -3322 => x"55598074", -3323 => x"24ff0509", -3324 => x"81d20bf7", -3325 => x"05068401", -3326 => x"05050480", -3327 => x"7424ff05", -3328 => x"0980db0b", -3329 => x"f7050684", -3330 => x"01050504", -3331 => x"73822b78", -3332 => x"11880556", -3333 => x"56818019", -3334 => x"08770653", -3335 => x"72097081", -3336 => x"0509060a", -3337 => x"8106ff05", -3338 => x"0980f30b", -3339 => x"f7050684", -3340 => x"01050504", -3341 => x"78167008", -3342 => x"53537951", -3343 => x"74085372", -3344 => x"2dff14fc", -3345 => x"17fc1779", -3346 => x"812c5a57", -3347 => x"57547380", -3348 => x"25ff0509", -3349 => x"c00bf705", -3350 => x"06840105", -3351 => x"05047708", -3352 => x"58770970", -3353 => x"81050906", -3354 => x"0a098106", -3355 => x"ff0509fe", -3356 => x"eb0bf705", -3357 => x"06840105", -3358 => x"05048193", -3359 => x"b40853bc", -3360 => x"13080970", -3361 => x"81050906", -3362 => x"0a098106", -3363 => x"ff0509b9", -3364 => x"0bf70506", -3365 => x"84010505", -3366 => x"047951f1", -3367 => x"f73f7408", -3368 => x"53722dff", -3369 => x"14fc17fc", -3370 => x"1779812c", -3371 => x"5a575754", -3372 => x"738025ff", -3373 => x"0509fedd", -3374 => x"0bf70506", -3375 => x"84010505", -3376 => x"04ff9b39", -3377 => x"8057feb3", -3378 => x"397251bc", -3379 => x"13085473", -3380 => x"2d7951f1", -3381 => x"bf3ffb3d", -3382 => x"0d777a71", -3383 => x"028c05a3", -3384 => x"05335854", -3385 => x"54568373", -3386 => x"27ff0509", -3387 => x"819d0bf7", -3388 => x"05068401", -3389 => x"05050475", -3390 => x"83065170", -3391 => x"09708105", -3392 => x"09060a09", -3393 => x"8106ff05", -3394 => x"0981800b", -3395 => x"f7050684", -3396 => x"01050504", -3397 => x"74882b75", -3398 => x"07707190", -3399 => x"2b075551", -3400 => x"8f7327ff", -3401 => x"0509ba0b", -3402 => x"f7050684", -3403 => x"01050504", -3404 => x"73727084", -3405 => x"05540c71", -3406 => x"74717084", -3407 => x"05530c74", -3408 => x"71708405", -3409 => x"530c7471", -3410 => x"70840553", -3411 => x"0cf01454", -3412 => x"52728f26", -3413 => x"ff0509d8", -3414 => x"0bf70506", -3415 => x"84010505", -3416 => x"04837327", -3417 => x"ff0509a3", -3418 => x"0bf70506", -3419 => x"84010505", -3420 => x"04737270", -3421 => x"8405540c", -3422 => x"fc135372", -3423 => x"8326ff05", -3424 => x"09ef0bf7", -3425 => x"05068401", -3426 => x"050504ff", -3427 => x"13517009", -3428 => x"8105ff05", -3429 => x"09708105", -3430 => x"09060a81", -3431 => x"06ff0509", -3432 => x"b00bf705", -3433 => x"06840105", -3434 => x"05047472", -3435 => x"70810554", -3436 => x"34ff1151", -3437 => x"70098105", -3438 => x"ff050970", -3439 => x"81050906", -3440 => x"0a098106", -3441 => x"ff0509e2", -3442 => x"0bf70506", -3443 => x"84010505", -3444 => x"0475800c", -3445 => x"873d0d04", -3446 => x"70707070", -3447 => x"75707183", -3448 => x"06535552", -3449 => x"70097081", -3450 => x"0509060a", -3451 => x"098106ff", -3452 => x"050980e3", -3453 => x"0bf70506", -3454 => x"84010505", -3455 => x"04717008", -3456 => x"7009f7fb", -3457 => x"fdff1206", -3458 => x"f8848281", -3459 => x"80065452", -3460 => x"53710970", -3461 => x"81050906", -3462 => x"0a098106", -3463 => x"ff0509b5", -3464 => x"0bf70506", -3465 => x"84010505", -3466 => x"04841370", -3467 => x"087009f7", -3468 => x"fbfdff12", -3469 => x"06f88482", -3470 => x"81800654", -3471 => x"52537109", -3472 => x"70810509", -3473 => x"060a8106", -3474 => x"ff0509dd", -3475 => x"0bf70506", -3476 => x"84010505", -3477 => x"04725271", -3478 => x"33537209", -3479 => x"70810509", -3480 => x"060a8106", -3481 => x"ff0509a7", -3482 => x"0bf70506", -3483 => x"84010505", -3484 => x"04811270", -3485 => x"33545272", -3486 => x"09708105", -3487 => x"09060a09", -3488 => x"8106ff05", -3489 => x"09eb0bf7", -3490 => x"05068401", -3491 => x"05050471", -3492 => x"7431800c", -3493 => x"50505050", -3494 => x"04e43d0d", -3495 => x"6ea13d08", -3496 => x"a33d0859", -3497 => x"575f8076", -3498 => x"4d774ea3", -3499 => x"3d08a53d", -3500 => x"08574b75", -3501 => x"4c5e7d6c", -3502 => x"24ff0509", -3503 => x"8b860bf7", -3504 => x"05068401", -3505 => x"05050480", -3506 => x"6a24ff05", -3507 => x"098b9b0b", -3508 => x"f7050684", -3509 => x"01050504", -3510 => x"696b5856", -3511 => x"6b6d5d46", -3512 => x"7b477544", -3513 => x"76456464", -3514 => x"68685c5c", -3515 => x"56567409", -3516 => x"70810509", -3517 => x"060a0981", -3518 => x"06ff0509", -3519 => x"82ee0bf7", -3520 => x"05068401", -3521 => x"05050478", -3522 => x"7627ff05", -3523 => x"09848f0b", -3524 => x"f7050684", -3525 => x"01050504", -3526 => x"7581ff26", -3527 => x"832b5583", -3528 => x"ffff7627", -3529 => x"ff05099f", -3530 => x"0bf70506", -3531 => x"84010505", -3532 => x"049055fe", -3533 => x"800a7627", -3534 => x"ff05098b", -3535 => x"0bf70506", -3536 => x"84010505", -3537 => x"04985575", -3538 => x"752a8188", -3539 => x"88057033", -3540 => x"a0773171", -3541 => x"31575557", -3542 => x"74097081", -3543 => x"0509060a", -3544 => x"8106ff05", -3545 => x"099d0bf7", -3546 => x"05068401", -3547 => x"05050475", -3548 => x"752ba076", -3549 => x"317a772b", -3550 => x"7c722a07", -3551 => x"7c782b5d", -3552 => x"5b595675", -3553 => x"902a7683", -3554 => x"ffff0671", -3555 => x"547a5359", -3556 => x"578c803f", -3557 => x"80085b8b", -3558 => x"e93f8008", -3559 => x"80087929", -3560 => x"7c902b7c", -3561 => x"902a0756", -3562 => x"56597375", -3563 => x"27ff0509", -3564 => x"b20bf705", -3565 => x"06840105", -3566 => x"05048008", -3567 => x"ff057615", -3568 => x"55597574", -3569 => x"26ff0509", -3570 => x"9a0bf705", -3571 => x"06840105", -3572 => x"05047474", -3573 => x"26ff0509", -3574 => x"8b9f0bf7", -3575 => x"05068401", -3576 => x"05050476", -3577 => x"52737531", -3578 => x"518ba83f", -3579 => x"8008558b", -3580 => x"913f8008", -3581 => x"80087929", -3582 => x"7b83ffff", -3583 => x"0677902b", -3584 => x"07565957", -3585 => x"737827ff", -3586 => x"0509a90b", -3587 => x"f7050684", -3588 => x"01050504", -3589 => x"8008ff05", -3590 => x"76155557", -3591 => x"757426ff", -3592 => x"0509910b", -3593 => x"f7050684", -3594 => x"01050504", -3595 => x"77742677", -3596 => x"71315856", -3597 => x"78902b77", -3598 => x"0758805b", -3599 => x"7a407741", -3600 => x"7f615654", -3601 => x"7d097081", -3602 => x"0509060a", -3603 => x"098106ff", -3604 => x"050981ac", -3605 => x"0bf70506", -3606 => x"84010505", -3607 => x"04737f0c", -3608 => x"747f8405", -3609 => x"0c7e800c", -3610 => x"9e3d0d04", -3611 => x"80705c58", -3612 => x"747926ff", -3613 => x"0509c50b", -3614 => x"f7050684", -3615 => x"01050504", -3616 => x"7481ff26", -3617 => x"832b5774", -3618 => x"83ffff26", -3619 => x"ff050983", -3620 => x"e90bf705", -3621 => x"06840105", -3622 => x"05047477", -3623 => x"2a818888", -3624 => x"057033a0", -3625 => x"79317131", -3626 => x"595c5d76", -3627 => x"09708105", -3628 => x"09060a09", -3629 => x"8106ff05", -3630 => x"0983ff0b", -3631 => x"f7050684", -3632 => x"01050504", -3633 => x"76547479", -3634 => x"27ff0509", -3635 => x"8b0bf705", -3636 => x"06840105", -3637 => x"05048154", -3638 => x"79762774", -3639 => x"07598158", -3640 => x"78097081", -3641 => x"0509060a", -3642 => x"098106ff", -3643 => x"0509feca", -3644 => x"0bf70506", -3645 => x"84010505", -3646 => x"04765880", -3647 => x"5bfebd39", -3648 => x"73527453", -3649 => x"9e3de805", -3650 => x"51ffbff2", -3651 => x"3f676956", -3652 => x"7f0c747f", -3653 => x"84050c7e", -3654 => x"800c9e3d", -3655 => x"0d047509", -3656 => x"70810509", -3657 => x"060a8106", -3658 => x"ff050982", -3659 => x"c00bf705", -3660 => x"06840105", -3661 => x"05047581", -3662 => x"ff26832b", -3663 => x"5583ffff", -3664 => x"7627ff05", -3665 => x"099f0bf7", -3666 => x"05068401", -3667 => x"05050490", -3668 => x"55fe800a", -3669 => x"7627ff05", -3670 => x"098b0bf7", -3671 => x"05068401", -3672 => x"05050498", -3673 => x"5575752a", -3674 => x"81888805", -3675 => x"7033a077", -3676 => x"31713157", -3677 => x"5e547409", -3678 => x"70810509", -3679 => x"060a0981", -3680 => x"06ff0509", -3681 => x"86810bf7", -3682 => x"05068401", -3683 => x"05050478", -3684 => x"76315481", -3685 => x"76902a77", -3686 => x"83ffff06", -3687 => x"5f5d5b7b", -3688 => x"52735187", -3689 => x"ee3f8008", -3690 => x"5787d73f", -3691 => x"80088008", -3692 => x"7e297890", -3693 => x"2b7c902a", -3694 => x"07565659", -3695 => x"737527ff", -3696 => x"0509b20b", -3697 => x"f7050684", -3698 => x"01050504", -3699 => x"8008ff05", -3700 => x"76155559", -3701 => x"757426ff", -3702 => x"05099a0b", -3703 => x"f7050684", -3704 => x"01050504", -3705 => x"747426ff", -3706 => x"05098784", -3707 => x"0bf70506", -3708 => x"84010505", -3709 => x"047b5273", -3710 => x"75315187", -3711 => x"963f8008", -3712 => x"5586ff3f", -3713 => x"80088008", -3714 => x"7e297b83", -3715 => x"ffff0677", -3716 => x"902b0756", -3717 => x"59577378", -3718 => x"27ff0509", -3719 => x"a90bf705", -3720 => x"06840105", -3721 => x"05048008", -3722 => x"ff057615", -3723 => x"55577574", -3724 => x"26ff0509", -3725 => x"910bf705", -3726 => x"06840105", -3727 => x"05047774", -3728 => x"26777131", -3729 => x"585a7890", -3730 => x"2b77077b", -3731 => x"41417f61", -3732 => x"56547d09", -3733 => x"70810509", -3734 => x"060a8106", -3735 => x"ff0509fb", -3736 => x"fc0bf705", -3737 => x"06840105", -3738 => x"0504fd94", -3739 => x"39755281", -3740 => x"51868f3f", -3741 => x"800856fd", -3742 => x"bd399057", -3743 => x"fe800a75", -3744 => x"27ff0509", -3745 => x"fc940bf7", -3746 => x"05068401", -3747 => x"05050498", -3748 => x"75712a81", -3749 => x"88880570", -3750 => x"33a07331", -3751 => x"7131535d", -3752 => x"5e577609", -3753 => x"70810509", -3754 => x"060a8106", -3755 => x"ff0509fc", -3756 => x"930bf705", -3757 => x"06840105", -3758 => x"0504a077", -3759 => x"3175782b", -3760 => x"77722a07", -3761 => x"77792b7b", -3762 => x"7a2b7d74", -3763 => x"2a077d7b", -3764 => x"2b73902a", -3765 => x"7483ffff", -3766 => x"0671597f", -3767 => x"772a585e", -3768 => x"5c415f58", -3769 => x"5c5485ab", -3770 => x"3f800854", -3771 => x"85943f80", -3772 => x"08800879", -3773 => x"2975902b", -3774 => x"7e902a07", -3775 => x"56565973", -3776 => x"7527ff05", -3777 => x"09b70bf7", -3778 => x"05068401", -3779 => x"05050480", -3780 => x"08ff057b", -3781 => x"1555597a", -3782 => x"7426ff05", -3783 => x"099f0bf7", -3784 => x"05068401", -3785 => x"05050473", -3786 => x"7527ff05", -3787 => x"098f0bf7", -3788 => x"05068401", -3789 => x"050504ff", -3790 => x"197b1555", -3791 => x"59765273", -3792 => x"75315184", -3793 => x"ce3f8008", -3794 => x"5584b73f", -3795 => x"80088008", -3796 => x"79297d83", -3797 => x"ffff0677", -3798 => x"902b0756", -3799 => x"59577378", -3800 => x"27ff0509", -3801 => x"b70bf705", -3802 => x"06840105", -3803 => x"05048008", -3804 => x"ff057b15", -3805 => x"55577a74", -3806 => x"26ff0509", -3807 => x"9f0bf705", -3808 => x"06840105", -3809 => x"05047378", -3810 => x"27ff0509", -3811 => x"8f0bf705", -3812 => x"06840105", -3813 => x"0504ff17", -3814 => x"7b155557", -3815 => x"73783179", -3816 => x"902b7807", -3817 => x"7083ffff", -3818 => x"0671902a", -3819 => x"7983ffff", -3820 => x"067a902a", -3821 => x"73722973", -3822 => x"73297473", -3823 => x"29767429", -3824 => x"73902a05", -3825 => x"72055755", -3826 => x"435f5b58", -3827 => x"5a57595a", -3828 => x"747c27ff", -3829 => x"05098e0b", -3830 => x"f7050684", -3831 => x"01050504", -3832 => x"84808017", -3833 => x"5774902a", -3834 => x"177983ff", -3835 => x"ff067684", -3836 => x"80802905", -3837 => x"5757767a", -3838 => x"26ff0509", -3839 => x"bf0bf705", -3840 => x"06840105", -3841 => x"0504767a", -3842 => x"32703070", -3843 => x"72078025", -3844 => x"565a5b7c", -3845 => x"7627ff05", -3846 => x"09f89f0b", -3847 => x"f7050684", -3848 => x"01050504", -3849 => x"73097081", -3850 => x"0509060a", -3851 => x"8106ff05", -3852 => x"09f8870b", -3853 => x"f7050684", -3854 => x"01050504", -3855 => x"ff185880", -3856 => x"5bf7f939", -3857 => x"ff765377", -3858 => x"549f3de8", -3859 => x"05525eff", -3860 => x"b9ac3f67", -3861 => x"69574c75", -3862 => x"4d698025", -3863 => x"ff0509f4", -3864 => x"f70bf705", -3865 => x"06840105", -3866 => x"05047d09", -3867 => x"6a6c5c53", -3868 => x"7a549f3d", -3869 => x"e805525e", -3870 => x"ffb9833f", -3871 => x"6769714c", -3872 => x"704d5856", -3873 => x"f4d639a0", -3874 => x"75317676", -3875 => x"2b7a772b", -3876 => x"7c732a07", -3877 => x"7c782b72", -3878 => x"902a7383", -3879 => x"ffff0671", -3880 => x"587e762a", -3881 => x"5742405d", -3882 => x"5d575881", -3883 => x"e63f8008", -3884 => x"5781cf3f", -3885 => x"80088008", -3886 => x"7e297890", -3887 => x"2b7d902a", -3888 => x"07565659", -3889 => x"737527ff", -3890 => x"0509b70b", -3891 => x"f7050684", -3892 => x"01050504", -3893 => x"8008ff05", -3894 => x"76155559", -3895 => x"757426ff", -3896 => x"05099f0b", -3897 => x"f7050684", -3898 => x"01050504", -3899 => x"737527ff", -3900 => x"05098f0b", -3901 => x"f7050684", -3902 => x"01050504", -3903 => x"ff197615", -3904 => x"55597b52", -3905 => x"73753151", -3906 => x"81893f80", -3907 => x"085580f2", -3908 => x"3f800880", -3909 => x"087e297c", -3910 => x"83ffff06", -3911 => x"7078902b", -3912 => x"07515658", -3913 => x"58737727", -3914 => x"ff0509b7", -3915 => x"0bf70506", -3916 => x"84010505", -3917 => x"048008ff", -3918 => x"05761555", -3919 => x"58757426", -3920 => x"ff05099f", -3921 => x"0bf70506", -3922 => x"84010505", -3923 => x"04737727", -3924 => x"ff05098f", -3925 => x"0bf70506", -3926 => x"84010505", -3927 => x"04ff1876", -3928 => x"15555878", -3929 => x"902b7807", -3930 => x"74783155", -3931 => x"5bf8b039", -3932 => x"ff197615", -3933 => x"5559f8fd", -3934 => x"39ff1976", -3935 => x"155559f4", -3936 => x"e2397070", -3937 => x"70805375", -3938 => x"527451ff", -3939 => x"b9d13f50", -3940 => x"50500470", -3941 => x"70708153", -3942 => x"75527451", -3943 => x"ffb9c03f", -3944 => x"50505004", -3945 => x"7070819a", -3946 => x"bc0bfc05", -3947 => x"70085252", -3948 => x"70098105", -3949 => x"ff050970", -3950 => x"81050906", -3951 => x"0a8106ff", -3952 => x"0509ae0b", -3953 => x"f7050684", -3954 => x"01050504", -3955 => x"702dfc12", -3956 => x"70085252", -3957 => x"70098105", -3958 => x"ff050970", -3959 => x"81050906", -3960 => x"0a098106", -3961 => x"ff0509e4", -3962 => x"0bf70506", -3963 => x"84010505", -3964 => x"04505004", -3965 => x"04ff98cc", -3966 => x"3f040000", -3967 => x"30313233", -3968 => x"34353637", -3969 => x"38390000", -3970 => x"44485259", -3971 => x"53544f4e", -3972 => x"45205052", -3973 => x"4f475241", -3974 => x"4d2c2053", -3975 => x"4f4d4520", -3976 => x"53545249", -3977 => x"4e470000", -3978 => x"44485259", -3979 => x"53544f4e", -3980 => x"45205052", -3981 => x"4f475241", -3982 => x"4d2c2031", -3983 => x"27535420", -3984 => x"53545249", -3985 => x"4e470000", -3986 => x"44687279", -3987 => x"73746f6e", -3988 => x"65204265", -3989 => x"6e63686d", -3990 => x"61726b2c", -3991 => x"20566572", -3992 => x"73696f6e", -3993 => x"20322e31", -3994 => x"20284c61", -3995 => x"6e677561", -3996 => x"67653a20", -3997 => x"43290a00", -3998 => x"50726f67", -3999 => x"72616d20", -4000 => x"636f6d70", -4001 => x"696c6564", -4002 => x"20776974", -4003 => x"68202772", -4004 => x"65676973", -4005 => x"74657227", -4006 => x"20617474", -4007 => x"72696275", -4008 => x"74650a00", -4009 => x"45786563", -4010 => x"7574696f", -4011 => x"6e207374", -4012 => x"61727473", -4013 => x"2c202564", -4014 => x"2072756e", -4015 => x"73207468", -4016 => x"726f7567", -4017 => x"68204468", -4018 => x"72797374", -4019 => x"6f6e650a", -4020 => x"00000000", -4021 => x"44485259", -4022 => x"53544f4e", -4023 => x"45205052", -4024 => x"4f475241", -4025 => x"4d2c2032", -4026 => x"274e4420", -4027 => x"53545249", -4028 => x"4e470000", -4029 => x"45786563", -4030 => x"7574696f", -4031 => x"6e20656e", -4032 => x"64730a00", -4033 => x"46696e61", -4034 => x"6c207661", -4035 => x"6c756573", -4036 => x"206f6620", -4037 => x"74686520", -4038 => x"76617269", -4039 => x"61626c65", -4040 => x"73207573", -4041 => x"65642069", -4042 => x"6e207468", -4043 => x"65206265", -4044 => x"6e63686d", -4045 => x"61726b3a", -4046 => x"0a000000", -4047 => x"496e745f", -4048 => x"476c6f62", -4049 => x"3a202020", -4050 => x"20202020", -4051 => x"20202020", -4052 => x"2025640a", -4053 => x"00000000", -4054 => x"20202020", -4055 => x"20202020", -4056 => x"73686f75", -4057 => x"6c642062", -4058 => x"653a2020", -4059 => x"2025640a", -4060 => x"00000000", -4061 => x"426f6f6c", -4062 => x"5f476c6f", -4063 => x"623a2020", -4064 => x"20202020", -4065 => x"20202020", -4066 => x"2025640a", -4067 => x"00000000", -4068 => x"43685f31", -4069 => x"5f476c6f", -4070 => x"623a2020", -4071 => x"20202020", -4072 => x"20202020", -4073 => x"2025630a", -4074 => x"00000000", -4075 => x"20202020", -4076 => x"20202020", -4077 => x"73686f75", -4078 => x"6c642062", -4079 => x"653a2020", -4080 => x"2025630a", -4081 => x"00000000", -4082 => x"43685f32", -4083 => x"5f476c6f", -4084 => x"623a2020", -4085 => x"20202020", -4086 => x"20202020", -4087 => x"2025630a", -4088 => x"00000000", -4089 => x"4172725f", -4090 => x"315f476c", -4091 => x"6f625b38", -4092 => x"5d3a2020", -4093 => x"20202020", -4094 => x"2025640a", -4095 => x"00000000", -4096 => x"4172725f", -4097 => x"325f476c", -4098 => x"6f625b38", -4099 => x"5d5b375d", -4100 => x"3a202020", -4101 => x"2025640a", -4102 => x"00000000", -4103 => x"20202020", -4104 => x"20202020", -4105 => x"73686f75", -4106 => x"6c642062", -4107 => x"653a2020", -4108 => x"204e756d", -4109 => x"6265725f", -4110 => x"4f665f52", -4111 => x"756e7320", -4112 => x"2b203130", -4113 => x"0a000000", -4114 => x"5074725f", -4115 => x"476c6f62", -4116 => x"2d3e0a00", -4117 => x"20205074", -4118 => x"725f436f", -4119 => x"6d703a20", -4120 => x"20202020", -4121 => x"20202020", -4122 => x"2025640a", -4123 => x"00000000", -4124 => x"20202020", -4125 => x"20202020", -4126 => x"73686f75", -4127 => x"6c642062", -4128 => x"653a2020", -4129 => x"2028696d", -4130 => x"706c656d", -4131 => x"656e7461", -4132 => x"74696f6e", -4133 => x"2d646570", -4134 => x"656e6465", -4135 => x"6e74290a", -4136 => x"00000000", -4137 => x"20204469", -4138 => x"7363723a", -4139 => x"20202020", -4140 => x"20202020", -4141 => x"20202020", -4142 => x"2025640a", -4143 => x"00000000", -4144 => x"2020456e", -4145 => x"756d5f43", -4146 => x"6f6d703a", -4147 => x"20202020", -4148 => x"20202020", -4149 => x"2025640a", -4150 => x"00000000", -4151 => x"2020496e", -4152 => x"745f436f", -4153 => x"6d703a20", -4154 => x"20202020", -4155 => x"20202020", -4156 => x"2025640a", -4157 => x"00000000", -4158 => x"20205374", -4159 => x"725f436f", -4160 => x"6d703a20", -4161 => x"20202020", -4162 => x"20202020", -4163 => x"2025730a", -4164 => x"00000000", -4165 => x"20202020", -4166 => x"20202020", -4167 => x"73686f75", -4168 => x"6c642062", -4169 => x"653a2020", -4170 => x"20444852", -4171 => x"5953544f", -4172 => x"4e452050", -4173 => x"524f4752", -4174 => x"414d2c20", -4175 => x"534f4d45", -4176 => x"20535452", -4177 => x"494e470a", -4178 => x"00000000", -4179 => x"4e657874", -4180 => x"5f507472", -4181 => x"5f476c6f", -4182 => x"622d3e0a", -4183 => x"00000000", -4184 => x"20202020", -4185 => x"20202020", -4186 => x"73686f75", -4187 => x"6c642062", -4188 => x"653a2020", -4189 => x"2028696d", -4190 => x"706c656d", -4191 => x"656e7461", -4192 => x"74696f6e", -4193 => x"2d646570", -4194 => x"656e6465", -4195 => x"6e74292c", -4196 => x"2073616d", -4197 => x"65206173", -4198 => x"2061626f", -4199 => x"76650a00", -4200 => x"496e745f", -4201 => x"315f4c6f", -4202 => x"633a2020", -4203 => x"20202020", -4204 => x"20202020", -4205 => x"2025640a", -4206 => x"00000000", -4207 => x"496e745f", -4208 => x"325f4c6f", -4209 => x"633a2020", -4210 => x"20202020", -4211 => x"20202020", -4212 => x"2025640a", -4213 => x"00000000", -4214 => x"496e745f", -4215 => x"335f4c6f", -4216 => x"633a2020", -4217 => x"20202020", -4218 => x"20202020", -4219 => x"2025640a", -4220 => x"00000000", -4221 => x"456e756d", -4222 => x"5f4c6f63", -4223 => x"3a202020", -4224 => x"20202020", -4225 => x"20202020", -4226 => x"2025640a", -4227 => x"00000000", -4228 => x"5374725f", -4229 => x"315f4c6f", -4230 => x"633a2020", -4231 => x"20202020", -4232 => x"20202020", -4233 => x"2025730a", -4234 => x"00000000", -4235 => x"20202020", -4236 => x"20202020", -4237 => x"73686f75", -4238 => x"6c642062", -4239 => x"653a2020", -4240 => x"20444852", -4241 => x"5953544f", -4242 => x"4e452050", -4243 => x"524f4752", -4244 => x"414d2c20", -4245 => x"31275354", -4246 => x"20535452", -4247 => x"494e470a", -4248 => x"00000000", -4249 => x"5374725f", -4250 => x"325f4c6f", -4251 => x"633a2020", -4252 => x"20202020", -4253 => x"20202020", -4254 => x"2025730a", -4255 => x"00000000", -4256 => x"20202020", -4257 => x"20202020", -4258 => x"73686f75", -4259 => x"6c642062", -4260 => x"653a2020", -4261 => x"20444852", -4262 => x"5953544f", -4263 => x"4e452050", -4264 => x"524f4752", -4265 => x"414d2c20", -4266 => x"32274e44", -4267 => x"20535452", -4268 => x"494e470a", -4269 => x"00000000", -4270 => x"55736572", -4271 => x"2074696d", -4272 => x"653a2025", -4273 => x"640a0000", -4274 => x"4d696372", -4275 => x"6f736563", -4276 => x"6f6e6473", -4277 => x"20666f72", -4278 => x"206f6e65", -4279 => x"2072756e", -4280 => x"20746872", -4281 => x"6f756768", -4282 => x"20446872", -4283 => x"7973746f", -4284 => x"6e653a20", -4285 => x"00000000", -4286 => x"2564200a", -4287 => x"00000000", -4288 => x"44687279", -4289 => x"73746f6e", -4290 => x"65732070", -4291 => x"65722053", -4292 => x"65636f6e", -4293 => x"643a2020", -4294 => x"20202020", -4295 => x"20202020", -4296 => x"20202020", -4297 => x"20202020", -4298 => x"20202020", -4299 => x"00000000", -4300 => x"56415820", -4301 => x"4d495053", -4302 => x"20726174", -4303 => x"696e6720", -4304 => x"2a203130", -4305 => x"3030203d", -4306 => x"20256420", -4307 => x"0a000000", -4308 => x"50726f67", -4309 => x"72616d20", -4310 => x"636f6d70", -4311 => x"696c6564", -4312 => x"20776974", -4313 => x"686f7574", -4314 => x"20277265", -4315 => x"67697374", -4316 => x"65722720", -4317 => x"61747472", -4318 => x"69627574", -4319 => x"650a0000", -4320 => x"4d656173", -4321 => x"75726564", -4322 => x"2074696d", -4323 => x"6520746f", -4324 => x"6f20736d", -4325 => x"616c6c20", -4326 => x"746f206f", -4327 => x"62746169", -4328 => x"6e206d65", -4329 => x"616e696e", -4330 => x"6766756c", -4331 => x"20726573", -4332 => x"756c7473", -4333 => x"0a000000", -4334 => x"506c6561", -4335 => x"73652069", -4336 => x"6e637265", -4337 => x"61736520", -4338 => x"6e756d62", -4339 => x"6572206f", -4340 => x"66207275", -4341 => x"6e730a00", -4342 => x"44485259", -4343 => x"53544f4e", -4344 => x"45205052", -4345 => x"4f475241", -4346 => x"4d2c2033", -4347 => x"27524420", -4348 => x"53545249", -4349 => x"4e470000", -4350 => x"43000000", -4351 => x"64756d6d", -4352 => x"792e6578", -4353 => x"65000000", -4354 => x"00010202", -4355 => x"03030303", -4356 => x"04040404", -4357 => x"04040404", -4358 => x"05050505", -4359 => x"05050505", -4360 => x"05050505", -4361 => x"05050505", -4362 => x"06060606", -4363 => x"06060606", -4364 => x"06060606", -4365 => x"06060606", -4366 => x"06060606", -4367 => x"06060606", -4368 => x"06060606", -4369 => x"06060606", -4370 => x"07070707", -4371 => x"07070707", -4372 => x"07070707", -4373 => x"07070707", -4374 => x"07070707", -4375 => x"07070707", -4376 => x"07070707", -4377 => x"07070707", -4378 => x"07070707", -4379 => x"07070707", -4380 => x"07070707", -4381 => x"07070707", -4382 => x"07070707", -4383 => x"07070707", -4384 => x"07070707", -4385 => x"07070707", -4386 => x"08080808", -4387 => x"08080808", -4388 => x"08080808", -4389 => x"08080808", -4390 => x"08080808", -4391 => x"08080808", -4392 => x"08080808", -4393 => x"08080808", -4394 => x"08080808", -4395 => x"08080808", -4396 => x"08080808", -4397 => x"08080808", -4398 => x"08080808", -4399 => x"08080808", -4400 => x"08080808", -4401 => x"08080808", -4402 => x"08080808", -4403 => x"08080808", -4404 => x"08080808", -4405 => x"08080808", -4406 => x"08080808", -4407 => x"08080808", -4408 => x"08080808", -4409 => x"08080808", -4410 => x"08080808", -4411 => x"08080808", -4412 => x"08080808", -4413 => x"08080808", -4414 => x"08080808", -4415 => x"08080808", -4416 => x"08080808", -4417 => x"08080808", -4418 => x"00ffffff", -4419 => x"ff00ffff", -4420 => x"ffff00ff", -4421 => x"ffffff00", -4422 => x"0000042c", -4423 => x"00000446", -4424 => x"0000046c", -4425 => x"00000498", -4426 => x"000004ca", -4427 => x"000004ec", -4428 => x"00000508", -4429 => x"0000052c", -4430 => x"00000556", -4431 => x"00000580", -4432 => x"000005a4", -4433 => x"000005be", -4434 => x"000005e0", -4435 => x"00000612", -4436 => x"0000063e", -4437 => x"00000660", -4438 => x"00000000", -4439 => x"00000000", -4440 => x"00000000", -4441 => x"00004d44", -4442 => x"0000c350", -4443 => x"00000000", -4444 => x"00000000", -4445 => x"00000000", -4446 => x"00000000", -4447 => x"00000000", -4448 => x"00000000", -4449 => x"00000000", -4450 => x"00000000", -4451 => x"00000000", -4452 => x"00000000", -4453 => x"00000000", -4454 => x"00000000", -4455 => x"00000000", -4456 => x"ffffffff", -4457 => x"00000000", -4458 => x"00020000", -4459 => x"00000000", -4460 => x"00000000", -4461 => x"000045ac", -4462 => x"000045ac", -4463 => x"000045b4", -4464 => x"000045b4", -4465 => x"000045bc", -4466 => x"000045bc", -4467 => x"000045c4", -4468 => x"000045c4", -4469 => x"000045cc", -4470 => x"000045cc", -4471 => x"000045d4", -4472 => x"000045d4", -4473 => x"000045dc", -4474 => x"000045dc", -4475 => x"000045e4", -4476 => x"000045e4", -4477 => x"000045ec", -4478 => x"000045ec", -4479 => x"000045f4", -4480 => x"000045f4", -4481 => x"000045fc", -4482 => x"000045fc", -4483 => x"00004604", -4484 => x"00004604", -4485 => x"0000460c", -4486 => x"0000460c", -4487 => x"00004614", -4488 => x"00004614", -4489 => x"0000461c", -4490 => x"0000461c", -4491 => x"00004624", -4492 => x"00004624", -4493 => x"0000462c", -4494 => x"0000462c", -4495 => x"00004634", -4496 => x"00004634", -4497 => x"0000463c", -4498 => x"0000463c", -4499 => x"00004644", -4500 => x"00004644", -4501 => x"0000464c", -4502 => x"0000464c", -4503 => x"00004654", -4504 => x"00004654", -4505 => x"0000465c", -4506 => x"0000465c", -4507 => x"00004664", -4508 => x"00004664", -4509 => x"0000466c", -4510 => x"0000466c", -4511 => x"00004674", -4512 => x"00004674", -4513 => x"0000467c", -4514 => x"0000467c", -4515 => x"00004684", -4516 => x"00004684", -4517 => x"0000468c", -4518 => x"0000468c", -4519 => x"00004694", -4520 => x"00004694", -4521 => x"0000469c", -4522 => x"0000469c", -4523 => x"000046a4", -4524 => x"000046a4", -4525 => x"000046ac", -4526 => x"000046ac", -4527 => x"000046b4", -4528 => x"000046b4", -4529 => x"000046bc", -4530 => x"000046bc", -4531 => x"000046c4", -4532 => x"000046c4", -4533 => x"000046cc", -4534 => x"000046cc", -4535 => x"000046d4", -4536 => x"000046d4", -4537 => x"000046dc", -4538 => x"000046dc", -4539 => x"000046e4", -4540 => x"000046e4", -4541 => x"000046ec", -4542 => x"000046ec", -4543 => x"000046f4", -4544 => x"000046f4", -4545 => x"000046fc", -4546 => x"000046fc", -4547 => x"00004704", -4548 => x"00004704", -4549 => x"0000470c", -4550 => x"0000470c", -4551 => x"00004714", -4552 => x"00004714", -4553 => x"0000471c", -4554 => x"0000471c", -4555 => x"00004724", -4556 => x"00004724", -4557 => x"0000472c", -4558 => x"0000472c", -4559 => x"00004734", -4560 => x"00004734", -4561 => x"0000473c", -4562 => x"0000473c", -4563 => x"00004744", -4564 => x"00004744", -4565 => x"0000474c", -4566 => x"0000474c", -4567 => x"00004754", -4568 => x"00004754", -4569 => x"0000475c", -4570 => x"0000475c", -4571 => x"00004764", -4572 => x"00004764", -4573 => x"0000476c", -4574 => x"0000476c", -4575 => x"00004774", -4576 => x"00004774", -4577 => x"0000477c", -4578 => x"0000477c", -4579 => x"00004784", -4580 => x"00004784", -4581 => x"0000478c", -4582 => x"0000478c", -4583 => x"00004794", -4584 => x"00004794", -4585 => x"0000479c", -4586 => x"0000479c", -4587 => x"000047a4", -4588 => x"000047a4", -4589 => x"000047ac", -4590 => x"000047ac", -4591 => x"000047b4", -4592 => x"000047b4", -4593 => x"000047bc", -4594 => x"000047bc", -4595 => x"000047c4", -4596 => x"000047c4", -4597 => x"000047cc", -4598 => x"000047cc", -4599 => x"000047d4", -4600 => x"000047d4", -4601 => x"000047dc", -4602 => x"000047dc", -4603 => x"000047e4", -4604 => x"000047e4", -4605 => x"000047ec", -4606 => x"000047ec", -4607 => x"000047f4", -4608 => x"000047f4", -4609 => x"000047fc", -4610 => x"000047fc", -4611 => x"00004804", -4612 => x"00004804", -4613 => x"0000480c", -4614 => x"0000480c", -4615 => x"00004814", -4616 => x"00004814", -4617 => x"0000481c", -4618 => x"0000481c", -4619 => x"00004824", -4620 => x"00004824", -4621 => x"0000482c", -4622 => x"0000482c", -4623 => x"00004834", -4624 => x"00004834", -4625 => x"0000483c", -4626 => x"0000483c", -4627 => x"00004844", -4628 => x"00004844", -4629 => x"0000484c", -4630 => x"0000484c", -4631 => x"00004854", -4632 => x"00004854", -4633 => x"0000485c", -4634 => x"0000485c", -4635 => x"00004864", -4636 => x"00004864", -4637 => x"0000486c", -4638 => x"0000486c", -4639 => x"00004874", -4640 => x"00004874", -4641 => x"0000487c", -4642 => x"0000487c", -4643 => x"00004884", -4644 => x"00004884", -4645 => x"0000488c", -4646 => x"0000488c", -4647 => x"00004894", -4648 => x"00004894", -4649 => x"0000489c", -4650 => x"0000489c", -4651 => x"000048a4", -4652 => x"000048a4", -4653 => x"000048ac", -4654 => x"000048ac", -4655 => x"000048b4", -4656 => x"000048b4", -4657 => x"000048bc", -4658 => x"000048bc", -4659 => x"000048c4", -4660 => x"000048c4", -4661 => x"000048cc", -4662 => x"000048cc", -4663 => x"000048d4", -4664 => x"000048d4", -4665 => x"000048dc", -4666 => x"000048dc", -4667 => x"000048e4", -4668 => x"000048e4", -4669 => x"000048ec", -4670 => x"000048ec", -4671 => x"000048f4", -4672 => x"000048f4", -4673 => x"000048fc", -4674 => x"000048fc", -4675 => x"00004904", -4676 => x"00004904", -4677 => x"0000490c", -4678 => x"0000490c", -4679 => x"00004914", -4680 => x"00004914", -4681 => x"0000491c", -4682 => x"0000491c", -4683 => x"00004924", -4684 => x"00004924", -4685 => x"0000492c", -4686 => x"0000492c", -4687 => x"00004934", -4688 => x"00004934", -4689 => x"0000493c", -4690 => x"0000493c", -4691 => x"00004944", -4692 => x"00004944", -4693 => x"0000494c", -4694 => x"0000494c", -4695 => x"00004954", -4696 => x"00004954", -4697 => x"0000495c", -4698 => x"0000495c", -4699 => x"00004964", -4700 => x"00004964", -4701 => x"0000496c", -4702 => x"0000496c", -4703 => x"00004974", -4704 => x"00004974", -4705 => x"0000497c", -4706 => x"0000497c", -4707 => x"00004984", -4708 => x"00004984", -4709 => x"0000498c", -4710 => x"0000498c", -4711 => x"00004994", -4712 => x"00004994", -4713 => x"0000499c", -4714 => x"0000499c", -4715 => x"000049a4", -4716 => x"000049a4", -4717 => x"000049b8", -4718 => x"00000000", -4719 => x"00004c20", -4720 => x"00004c7c", -4721 => x"00004cd8", -4722 => x"00000000", -4723 => x"00000000", -4724 => x"00000000", -4725 => x"00000000", -4726 => x"00000000", -4727 => x"00000000", -4728 => x"00000000", -4729 => x"00000000", -4730 => x"00000000", -4731 => x"000043f8", -4732 => x"00000000", -4733 => x"00000000", -4734 => x"00000000", -4735 => x"00000000", -4736 => x"00000000", -4737 => x"00000000", -4738 => x"00000000", -4739 => x"00000000", -4740 => x"00000000", -4741 => x"00000000", -4742 => x"00000000", -4743 => x"00000000", -4744 => x"00000000", -4745 => x"00000000", -4746 => x"00000000", -4747 => x"00000000", -4748 => x"00000000", -4749 => x"00000000", -4750 => x"00000000", -4751 => x"00000000", -4752 => x"00000000", -4753 => x"00000000", -4754 => x"00000000", -4755 => x"00000000", -4756 => x"00000000", -4757 => x"00000000", -4758 => x"00000000", -4759 => x"00000000", -4760 => x"00000001", -4761 => x"330eabcd", -4762 => x"1234e66d", -4763 => x"deec0005", -4764 => x"000b0000", -4765 => x"00000000", -4766 => x"00000000", -4767 => x"00000000", -4768 => x"00000000", -4769 => x"00000000", -4770 => x"00000000", -4771 => x"00000000", -4772 => x"00000000", -4773 => x"00000000", -4774 => x"00000000", -4775 => x"00000000", -4776 => x"00000000", -4777 => x"00000000", -4778 => x"00000000", -4779 => x"00000000", -4780 => x"00000000", -4781 => x"00000000", -4782 => x"00000000", -4783 => x"00000000", -4784 => x"00000000", -4785 => x"00000000", -4786 => x"00000000", -4787 => x"00000000", -4788 => x"00000000", -4789 => x"00000000", -4790 => x"00000000", -4791 => x"00000000", -4792 => x"00000000", -4793 => x"00000000", -4794 => x"00000000", -4795 => x"00000000", -4796 => x"00000000", -4797 => x"00000000", -4798 => x"00000000", -4799 => x"00000000", -4800 => x"00000000", -4801 => x"00000000", -4802 => x"00000000", -4803 => x"00000000", -4804 => x"00000000", -4805 => x"00000000", -4806 => x"00000000", -4807 => x"00000000", -4808 => x"00000000", -4809 => x"00000000", -4810 => x"00000000", -4811 => x"00000000", -4812 => x"00000000", -4813 => x"00000000", -4814 => x"00000000", -4815 => x"00000000", -4816 => x"00000000", -4817 => x"00000000", -4818 => x"00000000", -4819 => x"00000000", -4820 => x"00000000", -4821 => x"00000000", -4822 => x"00000000", -4823 => x"00000000", -4824 => x"00000000", -4825 => x"00000000", -4826 => x"00000000", -4827 => x"00000000", -4828 => x"00000000", -4829 => x"00000000", -4830 => x"00000000", -4831 => x"00000000", -4832 => x"00000000", -4833 => x"00000000", -4834 => x"00000000", -4835 => x"00000000", -4836 => x"00000000", -4837 => x"00000000", -4838 => x"00000000", -4839 => x"00000000", -4840 => x"00000000", -4841 => x"00000000", -4842 => x"00000000", -4843 => x"00000000", -4844 => x"00000000", -4845 => x"00000000", -4846 => x"00000000", -4847 => x"00000000", -4848 => x"00000000", -4849 => x"00000000", -4850 => x"00000000", -4851 => x"00000000", -4852 => x"00000000", -4853 => x"00000000", -4854 => x"00000000", -4855 => x"00000000", -4856 => x"00000000", -4857 => x"00000000", -4858 => x"00000000", -4859 => x"00000000", -4860 => x"00000000", -4861 => x"00000000", -4862 => x"00000000", -4863 => x"00000000", -4864 => x"00000000", -4865 => x"00000000", -4866 => x"00000000", -4867 => x"00000000", -4868 => x"00000000", -4869 => x"00000000", -4870 => x"00000000", -4871 => x"00000000", -4872 => x"00000000", -4873 => x"00000000", -4874 => x"00000000", -4875 => x"00000000", -4876 => x"00000000", -4877 => x"00000000", -4878 => x"00000000", -4879 => x"00000000", -4880 => x"00000000", -4881 => x"00000000", -4882 => x"00000000", -4883 => x"00000000", -4884 => x"00000000", -4885 => x"00000000", -4886 => x"00000000", -4887 => x"00000000", -4888 => x"00000000", -4889 => x"00000000", -4890 => x"00000000", -4891 => x"00000000", -4892 => x"00000000", -4893 => x"00000000", -4894 => x"00000000", -4895 => x"00000000", -4896 => x"00000000", -4897 => x"00000000", -4898 => x"00000000", -4899 => x"00000000", -4900 => x"00000000", -4901 => x"00000000", -4902 => x"00000000", -4903 => x"00000000", -4904 => x"00000000", -4905 => x"00000000", -4906 => x"00000000", -4907 => x"00000000", -4908 => x"00000000", -4909 => x"00000000", -4910 => x"00000000", -4911 => x"00000000", -4912 => x"00000000", -4913 => x"00000000", -4914 => x"00000000", -4915 => x"00000000", -4916 => x"00000000", -4917 => x"00000000", -4918 => x"00000000", -4919 => x"00000000", -4920 => x"00000000", -4921 => x"00000000", -4922 => x"00000000", -4923 => x"00000000", -4924 => x"00000000", -4925 => x"00000000", -4926 => x"00000000", -4927 => x"00000000", -4928 => x"00000000", -4929 => x"00000000", -4930 => x"00000000", -4931 => x"00000000", -4932 => x"00000000", -4933 => x"00000000", -4934 => x"00000000", -4935 => x"00000000", -4936 => x"00000000", -4937 => x"00000000", -4938 => x"00000000", -4939 => x"00000000", -4940 => x"00000000", -4941 => x"000043fc", -4942 => x"ffffffff", -4943 => x"00000000", -4944 => x"ffffffff", -4945 => x"00000000", - others => x"00000000" -); - -attribute syn_ramstyle : string; -attribute syn_ramstyle of ram : signal is "no_rw_check" ; - -begin - -process (clk) -begin - if (clk'event and clk = '1') then - 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/zpu3/src/helloworld_ram.vhd b/zpu/hdl/zpu3/src/helloworld_ram.vhd deleted file mode 100644 index 2e1d35d..0000000 --- a/zpu/hdl/zpu3/src/helloworld_ram.vhd +++ /dev/null @@ -1,3345 +0,0 @@ -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 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"800b0b0b", -1 => x"0b0b8070", -2 => x"0b0b80d6", -3 => x"f00c3a0b", -4 => x"0b80cd92", -5 => x"04000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80cde02d", -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"832b0b2a", -20 => x"83ffff06", -21 => x"52040000", -22 => x"00000000", -23 => x"00000000", -24 => x"71fd0608", -25 => x"83ffff73", -26 => x"83060981", -27 => x"05820583", -28 => x"2b0b2b09", -29 => x"067383ff", -30 => x"ff0b0b0b", -31 => x"0b83a504", -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"72728072", -73 => x"8106ff05", -74 => x"09720605", -75 => x"71105272", -76 => x"0a100a53", -77 => x"72ed3851", -78 => x"51535104", -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"04067383", -106 => x"06098105", -107 => x"8205832b", -108 => x"0b2b0772", -109 => x"fc060c51", -110 => x"51040000", -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"04098105", -139 => x"83051010", -140 => x"102b0772", -141 => x"fc060c51", -142 => x"51040000", -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"0b0b80d6", -162 => x"dc738306", -163 => x"10100508", -164 => x"067381ff", -165 => x"06738306", -166 => x"0b0b0b84", -167 => x"a9040000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0b8e", -171 => x"fd2d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0b90", -179 => x"af2d5050", -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"07535050", -191 => x"04000000", -192 => x"72097081", -193 => x"0509060a", -194 => x"098106ff", -195 => x"05705471", -196 => x"06730972", -197 => x"7405ff05", -198 => x"06075350", -199 => x"50040000", -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"80d6ec0c", -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"04000000", -251 => x"00000000", -252 => x"00000000", -253 => x"00000000", -254 => x"00000000", -255 => x"00000000", -256 => x"839f3f80", -257 => x"cdf83f04", -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"51043c04", -267 => x"70700b0b", -268 => x"80e6d808", -269 => x"52841208", -270 => x"70810651", -271 => x"5170f638", -272 => x"710881ff", -273 => x"06800c50", -274 => x"50047070", -275 => x"0b0b80e6", -276 => x"d8085284", -277 => x"1208700a", -278 => x"100a7081", -279 => x"06515151", -280 => x"70f13873", -281 => x"720c5050", -282 => x"0480d6ec", -283 => x"08802ea8", -284 => x"38838080", -285 => x"0b0b0b80", -286 => x"e6d80c82", -287 => x"a0800b0b", -288 => x"0b80e6dc", -289 => x"0c829080", -290 => x"0b80e6ec", -291 => x"0c0b0b80", -292 => x"e6e00b80", -293 => x"e6f00c04", -294 => x"f8808080", -295 => x"a40b0b0b", -296 => x"80e6d80c", -297 => x"f8808082", -298 => x"800b0b0b", -299 => x"80e6dc0c", -300 => x"f8808084", -301 => x"800b80e6", -302 => x"ec0cf880", -303 => x"8080940b", -304 => x"80e6f00c", -305 => x"f8808080", -306 => x"9c0b80e6", -307 => x"e80cf880", -308 => x"8080a00b", -309 => x"80e6f40c", -310 => x"04f23d0d", -311 => x"600b0b80", -312 => x"e6dc0856", -313 => x"5d82750c", -314 => x"8059805a", -315 => x"800b8f3d", -316 => x"71101017", -317 => x"70085a57", -318 => x"5d5b8077", -319 => x"81ff067c", -320 => x"832b5658", -321 => x"5276537b", -322 => x"5182fc3f", -323 => x"7d7f7a72", -324 => x"077c7207", -325 => x"71716081", -326 => x"05415f5d", -327 => x"5b595755", -328 => x"7a8724bb", -329 => x"380b0b80", -330 => x"e6dc087b", -331 => x"10101170", -332 => x"08595155", -333 => x"807781ff", -334 => x"067c832b", -335 => x"56585276", -336 => x"537b5182", -337 => x"c23f7d7f", -338 => x"7a72077c", -339 => x"72077171", -340 => x"60810541", -341 => x"5f5d5b59", -342 => x"5755877b", -343 => x"25c73876", -344 => x"7d0c7784", -345 => x"1e0c7c80", -346 => x"0c903d0d", -347 => x"04707080", -348 => x"e6e43351", -349 => x"70a73880", -350 => x"d6f80870", -351 => x"08525270", -352 => x"802e9438", -353 => x"841280d6", -354 => x"f80c702d", -355 => x"80d6f808", -356 => x"70085252", -357 => x"70ee3881", -358 => x"0b80e6e4", -359 => x"34505004", -360 => x"04700b0b", -361 => x"80e6d408", -362 => x"802e8e38", -363 => x"0b0b0b0b", -364 => x"800b802e", -365 => x"09810683", -366 => x"3850040b", -367 => x"0b80e6d4", -368 => x"510b0b0b", -369 => x"f4ba3f50", -370 => x"04048c08", -371 => x"028c0c70", -372 => x"70707080", -373 => x"0b8c08fc", -374 => x"050c8c08", -375 => x"fc050889", -376 => x"24818e38", -377 => x"0b0b80d6", -378 => x"a85188f3", -379 => x"3f0b0b80", -380 => x"d6b85188", -381 => x"ea3ffc0b", -382 => x"80e6f80c", -383 => x"80e6f808", -384 => x"812c5372", -385 => x"fe2e8438", -386 => x"86f13f8a", -387 => x"0b80e6fc", -388 => x"0c80e6fc", -389 => x"0880e6f8", -390 => x"08295372", -391 => x"d82e8438", -392 => x"86d93f8a", -393 => x"0b80e6f8", -394 => x"0c84e2ad", -395 => x"800b80e6", -396 => x"fc0c80e6", -397 => x"fc0880e6", -398 => x"f8082953", -399 => x"72afd7c2", -400 => x"802e8438", -401 => x"86b53f81", -402 => x"0a0b80e6", -403 => x"f80cff0b", -404 => x"80e6fc0c", -405 => x"80e6fc08", -406 => x"80e6f808", -407 => x"25843886", -408 => x"9a3f8c08", -409 => x"fc050881", -410 => x"058c08fc", -411 => x"050cfeea", -412 => x"398c08fc", -413 => x"05088a2e", -414 => x"843885ff", -415 => x"3f72800c", -416 => x"50505050", -417 => x"8c0c048c", -418 => x"08028c0c", -419 => x"f53d0d8c", -420 => x"08940508", -421 => x"9d388c08", -422 => x"8c05088c", -423 => x"08900508", -424 => x"8c088805", -425 => x"08585654", -426 => x"73760c74", -427 => x"84170c81", -428 => x"bf39800b", -429 => x"8c08f005", -430 => x"0c800b8c", -431 => x"08f4050c", -432 => x"8c088c05", -433 => x"088c0890", -434 => x"05085654", -435 => x"738c08f0", -436 => x"050c748c", -437 => x"08f4050c", -438 => x"8c08f805", -439 => x"8c08f005", -440 => x"56568870", -441 => x"54755376", -442 => x"5254859a", -443 => x"3fa00b8c", -444 => x"08940508", -445 => x"318c08ec", -446 => x"050c8c08", -447 => x"ec050880", -448 => x"249d3880", -449 => x"0b8c08f4", -450 => x"050c8c08", -451 => x"ec050830", -452 => x"8c08fc05", -453 => x"08712b8c", -454 => x"08f0050c", -455 => x"54b9398c", -456 => x"08fc0508", -457 => x"8c08ec05", -458 => x"082a8c08", -459 => x"e8050c8c", -460 => x"08fc0508", -461 => x"8c089405", -462 => x"082b8c08", -463 => x"f4050c8c", -464 => x"08f80508", -465 => x"8c089405", -466 => x"082b708c", -467 => x"08e80508", -468 => x"078c08f0", -469 => x"050c548c", -470 => x"08f00508", -471 => x"8c08f405", -472 => x"088c0888", -473 => x"05085856", -474 => x"5473760c", -475 => x"7484170c", -476 => x"8c088805", -477 => x"08800c8d", -478 => x"3d0d8c0c", -479 => x"048c0802", -480 => x"8c0cf93d", -481 => x"0d800b8c", -482 => x"08fc050c", -483 => x"8c088805", -484 => x"088025ab", -485 => x"388c0888", -486 => x"0508308c", -487 => x"0888050c", -488 => x"800b8c08", -489 => x"f4050c8c", -490 => x"08fc0508", -491 => x"8838810b", -492 => x"8c08f405", -493 => x"0c8c08f4", -494 => x"05088c08", -495 => x"fc050c8c", -496 => x"088c0508", -497 => x"8025ab38", -498 => x"8c088c05", -499 => x"08308c08", -500 => x"8c050c80", -501 => x"0b8c08f0", -502 => x"050c8c08", -503 => x"fc050888", -504 => x"38810b8c", -505 => x"08f0050c", -506 => x"8c08f005", -507 => x"088c08fc", -508 => x"050c8053", -509 => x"8c088c05", -510 => x"08528c08", -511 => x"88050851", -512 => x"81a73f80", -513 => x"08708c08", -514 => x"f8050c54", -515 => x"8c08fc05", -516 => x"08802e8c", -517 => x"388c08f8", -518 => x"0508308c", -519 => x"08f8050c", -520 => x"8c08f805", -521 => x"0870800c", -522 => x"54893d0d", -523 => x"8c0c048c", -524 => x"08028c0c", -525 => x"fb3d0d80", -526 => x"0b8c08fc", -527 => x"050c8c08", -528 => x"88050880", -529 => x"2593388c", -530 => x"08880508", -531 => x"308c0888", -532 => x"050c810b", -533 => x"8c08fc05", -534 => x"0c8c088c", -535 => x"05088025", -536 => x"8c388c08", -537 => x"8c050830", -538 => x"8c088c05", -539 => x"0c81538c", -540 => x"088c0508", -541 => x"528c0888", -542 => x"050851ad", -543 => x"3f800870", -544 => x"8c08f805", -545 => x"0c548c08", -546 => x"fc050880", -547 => x"2e8c388c", -548 => x"08f80508", -549 => x"308c08f8", -550 => x"050c8c08", -551 => x"f8050870", -552 => x"800c5487", -553 => x"3d0d8c0c", -554 => x"048c0802", -555 => x"8c0c7070", -556 => x"7070810b", -557 => x"8c08fc05", -558 => x"0c800b8c", -559 => x"08f8050c", -560 => x"8c088c05", -561 => x"088c0888", -562 => x"050827ac", -563 => x"388c08fc", -564 => x"0508802e", -565 => x"a338800b", -566 => x"8c088c05", -567 => x"08249938", -568 => x"8c088c05", -569 => x"08108c08", -570 => x"8c050c8c", -571 => x"08fc0508", -572 => x"108c08fc", -573 => x"050cc939", -574 => x"8c08fc05", -575 => x"08802e80", -576 => x"c9388c08", -577 => x"8c05088c", -578 => x"08880508", -579 => x"26a1388c", -580 => x"08880508", -581 => x"8c088c05", -582 => x"08318c08", -583 => x"88050c8c", -584 => x"08f80508", -585 => x"8c08fc05", -586 => x"08078c08", -587 => x"f8050c8c", -588 => x"08fc0508", -589 => x"812a8c08", -590 => x"fc050c8c", -591 => x"088c0508", -592 => x"812a8c08", -593 => x"8c050cff", -594 => x"af398c08", -595 => x"90050880", -596 => x"2e8f388c", -597 => x"08880508", -598 => x"708c08f4", -599 => x"050c518d", -600 => x"398c08f8", -601 => x"0508708c", -602 => x"08f4050c", -603 => x"518c08f4", -604 => x"0508800c", -605 => x"50505050", -606 => x"8c0c0470", -607 => x"865184ea", -608 => x"3f8151ba", -609 => x"d83ffc3d", -610 => x"0d767079", -611 => x"7b555555", -612 => x"558f7227", -613 => x"8c387275", -614 => x"07830651", -615 => x"70802ea7", -616 => x"38ff1252", -617 => x"71ff2e98", -618 => x"38727081", -619 => x"05543374", -620 => x"70810556", -621 => x"34ff1252", -622 => x"71ff2e09", -623 => x"8106ea38", -624 => x"74800c86", -625 => x"3d0d0474", -626 => x"51727084", -627 => x"05540871", -628 => x"70840553", -629 => x"0c727084", -630 => x"05540871", -631 => x"70840553", -632 => x"0c727084", -633 => x"05540871", -634 => x"70840553", -635 => x"0c727084", -636 => x"05540871", -637 => x"70840553", -638 => x"0cf01252", -639 => x"718f26c9", -640 => x"38837227", -641 => x"95387270", -642 => x"84055408", -643 => x"71708405", -644 => x"530cfc12", -645 => x"52718326", -646 => x"ed387054", -647 => x"ff8339f7", -648 => x"3d0d7c70", -649 => x"525384b8", -650 => x"3f725480", -651 => x"085580d6", -652 => x"c8568157", -653 => x"80088105", -654 => x"5a8b3de4", -655 => x"11595382", -656 => x"59f41352", -657 => x"7b881108", -658 => x"525384f5", -659 => x"3f800830", -660 => x"70800807", -661 => x"9f2c8a07", -662 => x"800c538b", -663 => x"3d0d0470", -664 => x"70735280", -665 => x"d6fc0851", -666 => x"ffb53f50", -667 => x"50047070", -668 => x"70707553", -669 => x"84d81308", -670 => x"802e8b38", -671 => x"80537280", -672 => x"0c505050", -673 => x"50048180", -674 => x"5272518a", -675 => x"9b3f8008", -676 => x"84d8140c", -677 => x"ff538008", -678 => x"802ee338", -679 => x"8008549f", -680 => x"53807470", -681 => x"8405560c", -682 => x"ff135380", -683 => x"7324cd38", -684 => x"80747084", -685 => x"05560cff", -686 => x"13537280", -687 => x"25e338ff", -688 => x"bb397070", -689 => x"70707577", -690 => x"55539f74", -691 => x"278e3896", -692 => x"730cff52", -693 => x"71800c50", -694 => x"50505004", -695 => x"84d81308", -696 => x"5271802e", -697 => x"94387310", -698 => x"10127008", -699 => x"79720c51", -700 => x"5271800c", -701 => x"50505050", -702 => x"047251fe", -703 => x"f13fff52", -704 => x"8008d138", -705 => x"84d81308", -706 => x"74101011", -707 => x"70087a72", -708 => x"0c515152", -709 => x"dc39f93d", -710 => x"0d797b58", -711 => x"56769f26", -712 => x"80e83884", -713 => x"d8160854", -714 => x"73802eaa", -715 => x"38761010", -716 => x"14700855", -717 => x"5573802e", -718 => x"ba388058", -719 => x"73812e8f", -720 => x"3873ff2e", -721 => x"a3388075", -722 => x"0c765173", -723 => x"2d805877", -724 => x"800c893d", -725 => x"0d047551", -726 => x"fe943fff", -727 => x"588008ef", -728 => x"3884d816", -729 => x"0854c639", -730 => x"96760c81", -731 => x"0b800c89", -732 => x"3d0d0475", -733 => x"5181e53f", -734 => x"76538008", -735 => x"52755181", -736 => x"a53f8008", -737 => x"800c893d", -738 => x"0d049676", -739 => x"0cff0b80", -740 => x"0c893d0d", -741 => x"04fc3d0d", -742 => x"76785653", -743 => x"ff54749f", -744 => x"26b13884", -745 => x"d8130852", -746 => x"71802eae", -747 => x"38741010", -748 => x"12700853", -749 => x"53815471", -750 => x"802e9838", -751 => x"825471ff", -752 => x"2e913883", -753 => x"5471812e", -754 => x"8a388073", -755 => x"0c745171", -756 => x"2d805473", -757 => x"800c863d", -758 => x"0d047251", -759 => x"fd903f80", -760 => x"08f13884", -761 => x"d8130852", -762 => x"c4397070", -763 => x"735280d6", -764 => x"fc0851fe", -765 => x"a13f5050", -766 => x"04707070", -767 => x"75537452", -768 => x"80d6fc08", -769 => x"51fdbb3f", -770 => x"50505004", -771 => x"7080d6fc", -772 => x"0851fcda", -773 => x"3f500470", -774 => x"70735280", -775 => x"d6fc0851", -776 => x"fef33f50", -777 => x"5004fc3d", -778 => x"0d800b80", -779 => x"e7800c78", -780 => x"527751b4", -781 => x"9b3f8008", -782 => x"548008ff", -783 => x"2e883873", -784 => x"800c863d", -785 => x"0d0480e7", -786 => x"80085574", -787 => x"802ef038", -788 => x"7675710c", -789 => x"5373800c", -790 => x"863d0d04", -791 => x"b3ed3f04", -792 => x"70707070", -793 => x"75707183", -794 => x"06535552", -795 => x"70b83871", -796 => x"70087009", -797 => x"f7fbfdff", -798 => x"120670f8", -799 => x"84828180", -800 => x"06515152", -801 => x"53709d38", -802 => x"84137008", -803 => x"7009f7fb", -804 => x"fdff1206", -805 => x"70f88482", -806 => x"81800651", -807 => x"51525370", -808 => x"802ee538", -809 => x"72527133", -810 => x"5170802e", -811 => x"8a388112", -812 => x"70335252", -813 => x"70f83871", -814 => x"7431800c", -815 => x"50505050", -816 => x"04f23d0d", -817 => x"60628811", -818 => x"08705757", -819 => x"5f5a7480", -820 => x"2e819038", -821 => x"8c1a2270", -822 => x"832a8132", -823 => x"70810651", -824 => x"55587386", -825 => x"38901a08", -826 => x"91387951", -827 => x"9cd03fff", -828 => x"54800880", -829 => x"ee388c1a", -830 => x"22587d08", -831 => x"57807883", -832 => x"ffff0670", -833 => x"0a100a70", -834 => x"81065156", -835 => x"57557375", -836 => x"2e80d738", -837 => x"74903876", -838 => x"08841808", -839 => x"88195956", -840 => x"5974802e", -841 => x"f2387454", -842 => x"88807527", -843 => x"84388880", -844 => x"54735378", -845 => x"529c1a08", -846 => x"51a41a08", -847 => x"54732d80", -848 => x"0b800825", -849 => x"82e63880", -850 => x"08197580", -851 => x"08317f88", -852 => x"05088008", -853 => x"31706188", -854 => x"050c5656", -855 => x"5973ffb4", -856 => x"38805473", -857 => x"800c903d", -858 => x"0d047581", -859 => x"32708106", -860 => x"76415154", -861 => x"73802e81", -862 => x"c1387490", -863 => x"38760884", -864 => x"18088819", -865 => x"59565974", -866 => x"802ef238", -867 => x"881a0878", -868 => x"83ffff06", -869 => x"70892a70", -870 => x"81065156", -871 => x"59567380", -872 => x"2e82fa38", -873 => x"7575278d", -874 => x"3877872a", -875 => x"70810651", -876 => x"547382b5", -877 => x"38747627", -878 => x"83387456", -879 => x"75537852", -880 => x"79085190", -881 => x"f83f881a", -882 => x"08763188", -883 => x"1b0c7908", -884 => x"167a0c74", -885 => x"56751975", -886 => x"77317f88", -887 => x"05087831", -888 => x"70618805", -889 => x"0c565659", -890 => x"73802efe", -891 => x"f4388c1a", -892 => x"2258ff86", -893 => x"39777854", -894 => x"79537b52", -895 => x"5690be3f", -896 => x"881a0878", -897 => x"31881b0c", -898 => x"7908187a", -899 => x"0c7c7631", -900 => x"5d7c8e38", -901 => x"79519c8a", -902 => x"3f800881", -903 => x"8f388008", -904 => x"5f751975", -905 => x"77317f88", -906 => x"05087831", -907 => x"70618805", -908 => x"0c565659", -909 => x"73802efe", -910 => x"a8387481", -911 => x"83387608", -912 => x"84180888", -913 => x"19595659", -914 => x"74802ef2", -915 => x"3874538a", -916 => x"5278518e", -917 => x"c93f8008", -918 => x"79318105", -919 => x"5d800884", -920 => x"3881155d", -921 => x"815f7c58", -922 => x"747d2783", -923 => x"38745894", -924 => x"1a08881b", -925 => x"0811575c", -926 => x"807a085c", -927 => x"54901a08", -928 => x"7b278338", -929 => x"81547578", -930 => x"25843873", -931 => x"ba387b78", -932 => x"24fee238", -933 => x"7b537852", -934 => x"9c1a0851", -935 => x"a41a0854", -936 => x"732d8008", -937 => x"56800880", -938 => x"24fee238", -939 => x"8c1a2280", -940 => x"c0075473", -941 => x"8c1b23ff", -942 => x"5473800c", -943 => x"903d0d04", -944 => x"7effa338", -945 => x"ff873975", -946 => x"5378527a", -947 => x"518eee3f", -948 => x"7908167a", -949 => x"0c79519a", -950 => x"c93f8008", -951 => x"cf387c76", -952 => x"315d7cfe", -953 => x"bc38feac", -954 => x"39901a08", -955 => x"7a087131", -956 => x"76117056", -957 => x"5a575280", -958 => x"d6fc0851", -959 => x"90843f80", -960 => x"08802eff", -961 => x"a7388008", -962 => x"901b0c80", -963 => x"08167a0c", -964 => x"77941b0c", -965 => x"74881b0c", -966 => x"7456fd99", -967 => x"39790858", -968 => x"901a0878", -969 => x"27833881", -970 => x"54757527", -971 => x"843873b3", -972 => x"38941a08", -973 => x"56757526", -974 => x"80d33875", -975 => x"5378529c", -976 => x"1a0851a4", -977 => x"1a085473", -978 => x"2d800856", -979 => x"80088024", -980 => x"fd83388c", -981 => x"1a2280c0", -982 => x"0754738c", -983 => x"1b23ff54", -984 => x"fed73975", -985 => x"53785277", -986 => x"518dd23f", -987 => x"7908167a", -988 => x"0c795199", -989 => x"ad3f8008", -990 => x"802efcd9", -991 => x"388c1a22", -992 => x"80c00754", -993 => x"738c1b23", -994 => x"ff54fead", -995 => x"39747554", -996 => x"79537852", -997 => x"568da63f", -998 => x"881a0875", -999 => x"31881b0c", -1000 => x"7908157a", -1001 => x"0cfcae39", -1002 => x"f33d0d7f", -1003 => x"618b1170", -1004 => x"f8065c55", -1005 => x"555e7296", -1006 => x"26833890", -1007 => x"59807924", -1008 => x"747a2607", -1009 => x"53805472", -1010 => x"742e0981", -1011 => x"0680cb38", -1012 => x"7d518eac", -1013 => x"3f7883f7", -1014 => x"2680c638", -1015 => x"78832a70", -1016 => x"10101080", -1017 => x"deb8058c", -1018 => x"11085959", -1019 => x"5a76782e", -1020 => x"83b03884", -1021 => x"1708fc06", -1022 => x"568c1708", -1023 => x"88180871", -1024 => x"8c120c88", -1025 => x"120c5875", -1026 => x"17841108", -1027 => x"81078412", -1028 => x"0c537d51", -1029 => x"8deb3f88", -1030 => x"17547380", -1031 => x"0c8f3d0d", -1032 => x"0478892a", -1033 => x"79832a5b", -1034 => x"5372802e", -1035 => x"bf387886", -1036 => x"2ab8055a", -1037 => x"847327b4", -1038 => x"3880db13", -1039 => x"5a947327", -1040 => x"ab38788c", -1041 => x"2a80ee05", -1042 => x"5a80d473", -1043 => x"279e3878", -1044 => x"8f2a80f7", -1045 => x"055a82d4", -1046 => x"73279138", -1047 => x"78922a80", -1048 => x"fc055a8a", -1049 => x"d4732784", -1050 => x"3880fe5a", -1051 => x"79101010", -1052 => x"80deb805", -1053 => x"8c110858", -1054 => x"5576752e", -1055 => x"a3388417", -1056 => x"08fc0670", -1057 => x"7a315556", -1058 => x"738f2488", -1059 => x"d5387380", -1060 => x"25fee638", -1061 => x"8c170857", -1062 => x"76752e09", -1063 => x"8106df38", -1064 => x"811a5a80", -1065 => x"dec80857", -1066 => x"7680dec0", -1067 => x"2e82c038", -1068 => x"841708fc", -1069 => x"06707a31", -1070 => x"5556738f", -1071 => x"2481f938", -1072 => x"80dec00b", -1073 => x"80decc0c", -1074 => x"80dec00b", -1075 => x"80dec80c", -1076 => x"738025fe", -1077 => x"b23883ff", -1078 => x"762783df", -1079 => x"3875892a", -1080 => x"76832a55", -1081 => x"5372802e", -1082 => x"bf387586", -1083 => x"2ab80554", -1084 => x"847327b4", -1085 => x"3880db13", -1086 => x"54947327", -1087 => x"ab38758c", -1088 => x"2a80ee05", -1089 => x"5480d473", -1090 => x"279e3875", -1091 => x"8f2a80f7", -1092 => x"055482d4", -1093 => x"73279138", -1094 => x"75922a80", -1095 => x"fc05548a", -1096 => x"d4732784", -1097 => x"3880fe54", -1098 => x"73101010", -1099 => x"80deb805", -1100 => x"88110856", -1101 => x"5874782e", -1102 => x"86cf3884", -1103 => x"1508fc06", -1104 => x"53757327", -1105 => x"8d388815", -1106 => x"08557478", -1107 => x"2e098106", -1108 => x"ea388c15", -1109 => x"0880deb8", -1110 => x"0b840508", -1111 => x"718c1a0c", -1112 => x"76881a0c", -1113 => x"7888130c", -1114 => x"788c180c", -1115 => x"5d587953", -1116 => x"807a2483", -1117 => x"e6387282", -1118 => x"2c81712b", -1119 => x"5c537a7c", -1120 => x"26819838", -1121 => x"7b7b0653", -1122 => x"7282f138", -1123 => x"79fc0684", -1124 => x"055a7a10", -1125 => x"707d0654", -1126 => x"5b7282e0", -1127 => x"38841a5a", -1128 => x"f1398817", -1129 => x"8c110858", -1130 => x"5876782e", -1131 => x"098106fc", -1132 => x"c238821a", -1133 => x"5afdec39", -1134 => x"78177981", -1135 => x"0784190c", -1136 => x"7080decc", -1137 => x"0c7080de", -1138 => x"c80c80de", -1139 => x"c00b8c12", -1140 => x"0c8c1108", -1141 => x"88120c74", -1142 => x"81078412", -1143 => x"0c741175", -1144 => x"710c5153", -1145 => x"7d518a99", -1146 => x"3f881754", -1147 => x"fcac3980", -1148 => x"deb80b84", -1149 => x"05087a54", -1150 => x"5c798025", -1151 => x"fef83882", -1152 => x"da397a09", -1153 => x"7c067080", -1154 => x"deb80b84", -1155 => x"050c5c7a", -1156 => x"105b7a7c", -1157 => x"2685387a", -1158 => x"85b83880", -1159 => x"deb80b88", -1160 => x"05087084", -1161 => x"1208fc06", -1162 => x"707c317c", -1163 => x"72268f72", -1164 => x"25075757", -1165 => x"5c5d5572", -1166 => x"802e80db", -1167 => x"38797a16", -1168 => x"80deb008", -1169 => x"1b90115a", -1170 => x"55575b80", -1171 => x"deac08ff", -1172 => x"2e8838a0", -1173 => x"8f13e080", -1174 => x"06577652", -1175 => x"7d5191a7", -1176 => x"3f800854", -1177 => x"8008ff2e", -1178 => x"90388008", -1179 => x"76278299", -1180 => x"387480de", -1181 => x"b82e8291", -1182 => x"3880deb8", -1183 => x"0b880508", -1184 => x"55841508", -1185 => x"fc06707a", -1186 => x"317a7226", -1187 => x"8f722507", -1188 => x"52555372", -1189 => x"83e63874", -1190 => x"79810784", -1191 => x"170c7916", -1192 => x"7080deb8", -1193 => x"0b88050c", -1194 => x"75810784", -1195 => x"120c547e", -1196 => x"525788cd", -1197 => x"3f881754", -1198 => x"fae03975", -1199 => x"832a7054", -1200 => x"54807424", -1201 => x"819b3872", -1202 => x"822c8171", -1203 => x"2b80debc", -1204 => x"08077080", -1205 => x"deb80b84", -1206 => x"050c7510", -1207 => x"101080de", -1208 => x"b8058811", -1209 => x"08585a5d", -1210 => x"53778c18", -1211 => x"0c748818", -1212 => x"0c768819", -1213 => x"0c768c16", -1214 => x"0cfcf339", -1215 => x"797a1010", -1216 => x"1080deb8", -1217 => x"05705759", -1218 => x"5d8c1508", -1219 => x"5776752e", -1220 => x"a3388417", -1221 => x"08fc0670", -1222 => x"7a315556", -1223 => x"738f2483", -1224 => x"ca387380", -1225 => x"25848138", -1226 => x"8c170857", -1227 => x"76752e09", -1228 => x"8106df38", -1229 => x"8815811b", -1230 => x"70830655", -1231 => x"5b5572c9", -1232 => x"387c8306", -1233 => x"5372802e", -1234 => x"fdb838ff", -1235 => x"1df81959", -1236 => x"5d881808", -1237 => x"782eea38", -1238 => x"fdb53983", -1239 => x"1a53fc96", -1240 => x"39831470", -1241 => x"822c8171", -1242 => x"2b80debc", -1243 => x"08077080", -1244 => x"deb80b84", -1245 => x"050c7610", -1246 => x"101080de", -1247 => x"b8058811", -1248 => x"08595b5e", -1249 => x"5153fee1", -1250 => x"3980ddfc", -1251 => x"08175880", -1252 => x"08762e81", -1253 => x"8d3880de", -1254 => x"ac08ff2e", -1255 => x"83ec3873", -1256 => x"76311880", -1257 => x"ddfc0c73", -1258 => x"87067057", -1259 => x"5372802e", -1260 => x"88388873", -1261 => x"31701555", -1262 => x"5676149f", -1263 => x"ff06a080", -1264 => x"71311770", -1265 => x"547f5357", -1266 => x"538ebc3f", -1267 => x"80085380", -1268 => x"08ff2e81", -1269 => x"a03880dd", -1270 => x"fc081670", -1271 => x"80ddfc0c", -1272 => x"747580de", -1273 => x"b80b8805", -1274 => x"0c747631", -1275 => x"18708107", -1276 => x"51555658", -1277 => x"7b80deb8", -1278 => x"2e839c38", -1279 => x"798f2682", -1280 => x"cb38810b", -1281 => x"84150c84", -1282 => x"1508fc06", -1283 => x"707a317a", -1284 => x"72268f72", -1285 => x"25075255", -1286 => x"5372802e", -1287 => x"fcf93880", -1288 => x"db398008", -1289 => x"9fff0653", -1290 => x"72feeb38", -1291 => x"7780ddfc", -1292 => x"0c80deb8", -1293 => x"0b880508", -1294 => x"7b188107", -1295 => x"84120c55", -1296 => x"80dea808", -1297 => x"78278638", -1298 => x"7780dea8", -1299 => x"0c80dea4", -1300 => x"087827fc", -1301 => x"ac387780", -1302 => x"dea40c84", -1303 => x"1508fc06", -1304 => x"707a317a", -1305 => x"72268f72", -1306 => x"25075255", -1307 => x"5372802e", -1308 => x"fca53888", -1309 => x"39807454", -1310 => x"56fedb39", -1311 => x"7d518581", -1312 => x"3f800b80", -1313 => x"0c8f3d0d", -1314 => x"04735380", -1315 => x"7424a938", -1316 => x"72822c81", -1317 => x"712b80de", -1318 => x"bc080770", -1319 => x"80deb80b", -1320 => x"84050c5d", -1321 => x"53778c18", -1322 => x"0c748818", -1323 => x"0c768819", -1324 => x"0c768c16", -1325 => x"0cf9b739", -1326 => x"83147082", -1327 => x"2c81712b", -1328 => x"80debc08", -1329 => x"077080de", -1330 => x"b80b8405", -1331 => x"0c5e5153", -1332 => x"d4397b7b", -1333 => x"065372fc", -1334 => x"a338841a", -1335 => x"7b105c5a", -1336 => x"f139ff1a", -1337 => x"8111515a", -1338 => x"f7b93978", -1339 => x"17798107", -1340 => x"84190c8c", -1341 => x"18088819", -1342 => x"08718c12", -1343 => x"0c88120c", -1344 => x"597080de", -1345 => x"cc0c7080", -1346 => x"dec80c80", -1347 => x"dec00b8c", -1348 => x"120c8c11", -1349 => x"0888120c", -1350 => x"74810784", -1351 => x"120c7411", -1352 => x"75710c51", -1353 => x"53f9bd39", -1354 => x"75178411", -1355 => x"08810784", -1356 => x"120c538c", -1357 => x"17088818", -1358 => x"08718c12", -1359 => x"0c88120c", -1360 => x"587d5183", -1361 => x"bc3f8817", -1362 => x"54f5cf39", -1363 => x"7284150c", -1364 => x"f41af806", -1365 => x"70841e08", -1366 => x"81060784", -1367 => x"1e0c701d", -1368 => x"545b850b", -1369 => x"84140c85", -1370 => x"0b88140c", -1371 => x"8f7b27fd", -1372 => x"cf38881c", -1373 => x"527d5193", -1374 => x"e73f80de", -1375 => x"b80b8805", -1376 => x"0880ddfc", -1377 => x"085955fd", -1378 => x"b7397780", -1379 => x"ddfc0c73", -1380 => x"80deac0c", -1381 => x"fc913972", -1382 => x"84150cfd", -1383 => x"a339fa3d", -1384 => x"0d7a7902", -1385 => x"8805a705", -1386 => x"33565253", -1387 => x"8373278a", -1388 => x"38708306", -1389 => x"5271802e", -1390 => x"a838ff13", -1391 => x"5372ff2e", -1392 => x"97387033", -1393 => x"5273722e", -1394 => x"91388111", -1395 => x"ff145451", -1396 => x"72ff2e09", -1397 => x"8106eb38", -1398 => x"80517080", -1399 => x"0c883d0d", -1400 => x"04707257", -1401 => x"55835175", -1402 => x"82802914", -1403 => x"ff125256", -1404 => x"708025f3", -1405 => x"38837327", -1406 => x"bf387408", -1407 => x"76327009", -1408 => x"f7fbfdff", -1409 => x"120670f8", -1410 => x"84828180", -1411 => x"06515151", -1412 => x"70802e99", -1413 => x"38745180", -1414 => x"52703357", -1415 => x"73772eff", -1416 => x"b9388111", -1417 => x"81135351", -1418 => x"837227ed", -1419 => x"38fc1384", -1420 => x"16565372", -1421 => x"8326c338", -1422 => x"7451fefe", -1423 => x"39fa3d0d", -1424 => x"787a7c72", -1425 => x"72725757", -1426 => x"57595656", -1427 => x"747627b2", -1428 => x"38761551", -1429 => x"757127aa", -1430 => x"38707717", -1431 => x"ff145455", -1432 => x"5371ff2e", -1433 => x"9638ff14", -1434 => x"ff145454", -1435 => x"72337434", -1436 => x"ff125271", -1437 => x"ff2e0981", -1438 => x"06ec3875", -1439 => x"800c883d", -1440 => x"0d04768f", -1441 => x"269738ff", -1442 => x"125271ff", -1443 => x"2eed3872", -1444 => x"70810554", -1445 => x"33747081", -1446 => x"055634eb", -1447 => x"39747607", -1448 => x"83065170", -1449 => x"e2387575", -1450 => x"54517270", -1451 => x"84055408", -1452 => x"71708405", -1453 => x"530c7270", -1454 => x"84055408", -1455 => x"71708405", -1456 => x"530c7270", -1457 => x"84055408", -1458 => x"71708405", -1459 => x"530c7270", -1460 => x"84055408", -1461 => x"71708405", -1462 => x"530cf012", -1463 => x"52718f26", -1464 => x"c9388372", -1465 => x"27953872", -1466 => x"70840554", -1467 => x"08717084", -1468 => x"05530cfc", -1469 => x"12527183", -1470 => x"26ed3870", -1471 => x"54ff8839", -1472 => x"0404ef3d", -1473 => x"0d636567", -1474 => x"405d427b", -1475 => x"802e84f9", -1476 => x"386151ec", -1477 => x"3ff81c70", -1478 => x"84120870", -1479 => x"fc067062", -1480 => x"8b0570f8", -1481 => x"06415945", -1482 => x"5b5c4157", -1483 => x"96742782", -1484 => x"c338807b", -1485 => x"247e7c26", -1486 => x"07598054", -1487 => x"78742e09", -1488 => x"810682a9", -1489 => x"38777b25", -1490 => x"81fc3877", -1491 => x"1780deb8", -1492 => x"0b880508", -1493 => x"5e567c76", -1494 => x"2e84bd38", -1495 => x"84160870", -1496 => x"fe061784", -1497 => x"11088106", -1498 => x"51555573", -1499 => x"828b3874", -1500 => x"fc06597c", -1501 => x"762e84dd", -1502 => x"3877195f", -1503 => x"7e7b2581", -1504 => x"fd387981", -1505 => x"06547382", -1506 => x"bf387677", -1507 => x"08318411", -1508 => x"08fc0656", -1509 => x"5a75802e", -1510 => x"91387c76", -1511 => x"2e84ea38", -1512 => x"74191859", -1513 => x"787b2584", -1514 => x"89387980", -1515 => x"2e829938", -1516 => x"7715567a", -1517 => x"76248290", -1518 => x"388c1a08", -1519 => x"881b0871", -1520 => x"8c120c88", -1521 => x"120c5579", -1522 => x"76595788", -1523 => x"1761fc05", -1524 => x"575975a4", -1525 => x"2685ef38", -1526 => x"7b795555", -1527 => x"93762780", -1528 => x"c9387b70", -1529 => x"84055d08", -1530 => x"7c56790c", -1531 => x"74708405", -1532 => x"56088c18", -1533 => x"0c901754", -1534 => x"9b7627ae", -1535 => x"38747084", -1536 => x"05560874", -1537 => x"0c747084", -1538 => x"05560894", -1539 => x"180c9817", -1540 => x"54a37627", -1541 => x"95387470", -1542 => x"84055608", -1543 => x"740c7470", -1544 => x"84055608", -1545 => x"9c180ca0", -1546 => x"17547470", -1547 => x"84055608", -1548 => x"74708405", -1549 => x"560c7470", -1550 => x"84055608", -1551 => x"74708405", -1552 => x"560c7408", -1553 => x"740c777b", -1554 => x"3156758f", -1555 => x"2680c938", -1556 => x"84170881", -1557 => x"06780784", -1558 => x"180c7717", -1559 => x"84110881", -1560 => x"0784120c", -1561 => x"546151fd", -1562 => x"983f8817", -1563 => x"5473800c", -1564 => x"933d0d04", -1565 => x"905bfdba", -1566 => x"397856fe", -1567 => x"85398c16", -1568 => x"08881708", -1569 => x"718c120c", -1570 => x"88120c55", -1571 => x"7e707c31", -1572 => x"57588f76", -1573 => x"27ffb938", -1574 => x"7a178418", -1575 => x"0881067c", -1576 => x"0784190c", -1577 => x"76810784", -1578 => x"120c7611", -1579 => x"84110881", -1580 => x"0784120c", -1581 => x"55880552", -1582 => x"61518da4", -1583 => x"3f6151fc", -1584 => x"c03f8817", -1585 => x"54ffa639", -1586 => x"7d526151", -1587 => x"edda3f80", -1588 => x"08598008", -1589 => x"802e81a3", -1590 => x"388008f8", -1591 => x"05608405", -1592 => x"08fe0661", -1593 => x"05555776", -1594 => x"742e83e6", -1595 => x"38fc1856", -1596 => x"75a42681", -1597 => x"aa387b80", -1598 => x"08555593", -1599 => x"762780d8", -1600 => x"38747084", -1601 => x"05560880", -1602 => x"08708405", -1603 => x"800c0c80", -1604 => x"08757084", -1605 => x"05570871", -1606 => x"70840553", -1607 => x"0c549b76", -1608 => x"27b63874", -1609 => x"70840556", -1610 => x"08747084", -1611 => x"05560c74", -1612 => x"70840556", -1613 => x"08747084", -1614 => x"05560ca3", -1615 => x"76279938", -1616 => x"74708405", -1617 => x"56087470", -1618 => x"8405560c", -1619 => x"74708405", -1620 => x"56087470", -1621 => x"8405560c", -1622 => x"74708405", -1623 => x"56087470", -1624 => x"8405560c", -1625 => x"74708405", -1626 => x"56087470", -1627 => x"8405560c", -1628 => x"7408740c", -1629 => x"7b526151", -1630 => x"8be63f61", -1631 => x"51fb823f", -1632 => x"78547380", -1633 => x"0c933d0d", -1634 => x"047d5261", -1635 => x"51ec993f", -1636 => x"8008800c", -1637 => x"933d0d04", -1638 => x"84160855", -1639 => x"fbd13975", -1640 => x"537b5280", -1641 => x"0851dfde", -1642 => x"3f7b5261", -1643 => x"518bb13f", -1644 => x"ca398c16", -1645 => x"08881708", -1646 => x"718c120c", -1647 => x"88120c55", -1648 => x"8c1a0888", -1649 => x"1b08718c", -1650 => x"120c8812", -1651 => x"0c557979", -1652 => x"5957fbf7", -1653 => x"39771990", -1654 => x"1c555573", -1655 => x"7524fba2", -1656 => x"387a1770", -1657 => x"80deb80b", -1658 => x"88050c75", -1659 => x"7c318107", -1660 => x"84120c5d", -1661 => x"84170881", -1662 => x"067b0784", -1663 => x"180c6151", -1664 => x"f9ff3f88", -1665 => x"1754fce5", -1666 => x"39741918", -1667 => x"901c555d", -1668 => x"737d24fb", -1669 => x"95388c1a", -1670 => x"08881b08", -1671 => x"718c120c", -1672 => x"88120c55", -1673 => x"881a61fc", -1674 => x"05575975", -1675 => x"a42681ae", -1676 => x"387b7955", -1677 => x"55937627", -1678 => x"80c9387b", -1679 => x"7084055d", -1680 => x"087c5679", -1681 => x"0c747084", -1682 => x"0556088c", -1683 => x"1b0c901a", -1684 => x"549b7627", -1685 => x"ae387470", -1686 => x"84055608", -1687 => x"740c7470", -1688 => x"84055608", -1689 => x"941b0c98", -1690 => x"1a54a376", -1691 => x"27953874", -1692 => x"70840556", -1693 => x"08740c74", -1694 => x"70840556", -1695 => x"089c1b0c", -1696 => x"a01a5474", -1697 => x"70840556", -1698 => x"08747084", -1699 => x"05560c74", -1700 => x"70840556", -1701 => x"08747084", -1702 => x"05560c74", -1703 => x"08740c7a", -1704 => x"1a7080de", -1705 => x"b80b8805", -1706 => x"0c7d7c31", -1707 => x"81078412", -1708 => x"0c54841a", -1709 => x"0881067b", -1710 => x"07841b0c", -1711 => x"6151f8c1", -1712 => x"3f7854fd", -1713 => x"bd397553", -1714 => x"7b527851", -1715 => x"ddb83ffa", -1716 => x"f5398417", -1717 => x"08fc0618", -1718 => x"605858fa", -1719 => x"e9397553", -1720 => x"7b527851", -1721 => x"dda03f7a", -1722 => x"1a7080de", -1723 => x"b80b8805", -1724 => x"0c7d7c31", -1725 => x"81078412", -1726 => x"0c54841a", -1727 => x"0881067b", -1728 => x"07841b0c", -1729 => x"ffb63970", -1730 => x"70707080", -1731 => x"0b80e780", -1732 => x"0c765196", -1733 => x"cc3f8008", -1734 => x"538008ff", -1735 => x"2e893872", -1736 => x"800c5050", -1737 => x"50500480", -1738 => x"e7800854", -1739 => x"73802eef", -1740 => x"38757471", -1741 => x"0c527280", -1742 => x"0c505050", -1743 => x"5004fa3d", -1744 => x"0d7880d6", -1745 => x"fc085455", -1746 => x"b8130880", -1747 => x"2e81b638", -1748 => x"8c152270", -1749 => x"83ffff06", -1750 => x"70832a81", -1751 => x"32708106", -1752 => x"51555556", -1753 => x"72802e80", -1754 => x"dc387384", -1755 => x"2a813281", -1756 => x"0657ff53", -1757 => x"7680f738", -1758 => x"73822a70", -1759 => x"81065153", -1760 => x"72802eb9", -1761 => x"38b01508", -1762 => x"5473802e", -1763 => x"9c3880c0", -1764 => x"15537373", -1765 => x"2e8f3873", -1766 => x"5280d6fc", -1767 => x"085187c0", -1768 => x"3f8c1522", -1769 => x"5676b016", -1770 => x"0c75db06", -1771 => x"53728c16", -1772 => x"23800b84", -1773 => x"160c9015", -1774 => x"08750c72", -1775 => x"56758807", -1776 => x"53728c16", -1777 => x"23901508", -1778 => x"802e80c1", -1779 => x"388c1522", -1780 => x"70810655", -1781 => x"53739e38", -1782 => x"720a100a", -1783 => x"70810651", -1784 => x"53728538", -1785 => x"94150854", -1786 => x"7388160c", -1787 => x"80537280", -1788 => x"0c883d0d", -1789 => x"04800b88", -1790 => x"160c9415", -1791 => x"08309816", -1792 => x"0c8053ea", -1793 => x"39725182", -1794 => x"f73ffec4", -1795 => x"3974518c", -1796 => x"de3f8c15", -1797 => x"22708106", -1798 => x"55537380", -1799 => x"2effb938", -1800 => x"d439f83d", -1801 => x"0d7a5877", -1802 => x"802e8199", -1803 => x"3880d6fc", -1804 => x"0854b814", -1805 => x"08802e80", -1806 => x"ed388c18", -1807 => x"2270902b", -1808 => x"70902c70", -1809 => x"832a8132", -1810 => x"81065c51", -1811 => x"57547880", -1812 => x"cd389018", -1813 => x"08577680", -1814 => x"2e80c338", -1815 => x"77087731", -1816 => x"77790c76", -1817 => x"83067a58", -1818 => x"55557385", -1819 => x"38941808", -1820 => x"56758819", -1821 => x"0c807525", -1822 => x"a5387453", -1823 => x"76529c18", -1824 => x"0851a418", -1825 => x"0854732d", -1826 => x"800b8008", -1827 => x"2580c938", -1828 => x"80081775", -1829 => x"80083156", -1830 => x"57748024", -1831 => x"dd38800b", -1832 => x"800c8a3d", -1833 => x"0d047351", -1834 => x"81d63f8c", -1835 => x"18227090", -1836 => x"2b70902c", -1837 => x"70832a81", -1838 => x"3281065c", -1839 => x"51575478", -1840 => x"dd38ff8e", -1841 => x"39b8a252", -1842 => x"80d6fc08", -1843 => x"5189e73f", -1844 => x"8008800c", -1845 => x"8a3d0d04", -1846 => x"8c182280", -1847 => x"c0075473", -1848 => x"8c1923ff", -1849 => x"0b800c8a", -1850 => x"3d0d0470", -1851 => x"72518071", -1852 => x"0c800b84", -1853 => x"120c800b", -1854 => x"88120c02", -1855 => x"8e05228c", -1856 => x"12230292", -1857 => x"05228e12", -1858 => x"23800b90", -1859 => x"120c800b", -1860 => x"94120c80", -1861 => x"0b98120c", -1862 => x"709c120c", -1863 => x"80c8810b", -1864 => x"a0120c80", -1865 => x"c8cd0ba4", -1866 => x"120c80c9", -1867 => x"c90ba812", -1868 => x"0c80ca9a", -1869 => x"0bac120c", -1870 => x"5004fa3d", -1871 => x"0d797080", -1872 => x"dc298c11", -1873 => x"547a5356", -1874 => x"57e4dd3f", -1875 => x"80088008", -1876 => x"55568008", -1877 => x"802ea238", -1878 => x"80088c05", -1879 => x"54800b80", -1880 => x"080c7680", -1881 => x"0884050c", -1882 => x"73800888", -1883 => x"050c7453", -1884 => x"80527351", -1885 => x"8bfc3f75", -1886 => x"5473800c", -1887 => x"883d0d04", -1888 => x"fc3d0d76", -1889 => x"bd930bbc", -1890 => x"120c5581", -1891 => x"0bb8160c", -1892 => x"800b84dc", -1893 => x"160c830b", -1894 => x"84e0160c", -1895 => x"84e81584", -1896 => x"e4160c74", -1897 => x"54805384", -1898 => x"52841508", -1899 => x"51febc3f", -1900 => x"74548153", -1901 => x"89528815", -1902 => x"0851feaf", -1903 => x"3f745482", -1904 => x"538a528c", -1905 => x"150851fe", -1906 => x"a23f863d", -1907 => x"0d04f93d", -1908 => x"0d7980d6", -1909 => x"fc085457", -1910 => x"b8130880", -1911 => x"2e80c838", -1912 => x"84dc1356", -1913 => x"88160884", -1914 => x"1708ff05", -1915 => x"55558074", -1916 => x"249f388c", -1917 => x"15227090", -1918 => x"2b70902c", -1919 => x"51545872", -1920 => x"802e80ca", -1921 => x"3880dc15", -1922 => x"ff155555", -1923 => x"738025e3", -1924 => x"38750853", -1925 => x"72802e9f", -1926 => x"38725688", -1927 => x"16088417", -1928 => x"08ff0555", -1929 => x"55c83972", -1930 => x"51fed53f", -1931 => x"80d6fc08", -1932 => x"84dc0556", -1933 => x"ffae3984", -1934 => x"527651fd", -1935 => x"fd3f8008", -1936 => x"760c8008", -1937 => x"802e80c0", -1938 => x"38800856", -1939 => x"ce39810b", -1940 => x"8c162372", -1941 => x"750c7288", -1942 => x"160c7284", -1943 => x"160c7290", -1944 => x"160c7294", -1945 => x"160c7298", -1946 => x"160cff0b", -1947 => x"8e162372", -1948 => x"b0160c72", -1949 => x"b4160c72", -1950 => x"80c4160c", -1951 => x"7280c816", -1952 => x"0c74800c", -1953 => x"893d0d04", -1954 => x"8c770c80", -1955 => x"0b800c89", -1956 => x"3d0d0470", -1957 => x"70b8a252", -1958 => x"7351869a", -1959 => x"3f505004", -1960 => x"7080d6fc", -1961 => x"0851ec3f", -1962 => x"5004fb3d", -1963 => x"0d777052", -1964 => x"56f0cd3f", -1965 => x"80deb80b", -1966 => x"88050884", -1967 => x"1108fc06", -1968 => x"707b319f", -1969 => x"ef05e080", -1970 => x"06e08005", -1971 => x"565653a0", -1972 => x"80742494", -1973 => x"38805275", -1974 => x"51f8ac3f", -1975 => x"80dec008", -1976 => x"15537280", -1977 => x"082e8f38", -1978 => x"7551f095", -1979 => x"3f805372", -1980 => x"800c873d", -1981 => x"0d047330", -1982 => x"527551f8", -1983 => x"8a3f8008", -1984 => x"ff2ea838", -1985 => x"80deb80b", -1986 => x"88050875", -1987 => x"75318107", -1988 => x"84120c53", -1989 => x"80ddfc08", -1990 => x"743180dd", -1991 => x"fc0c7551", -1992 => x"efdf3f81", -1993 => x"0b800c87", -1994 => x"3d0d0480", -1995 => x"527551f7", -1996 => x"d63f80de", -1997 => x"b80b8805", -1998 => x"08800871", -1999 => x"3156538f", -2000 => x"7525ffa4", -2001 => x"38800880", -2002 => x"deac0831", -2003 => x"80ddfc0c", -2004 => x"74810784", -2005 => x"140c7551", -2006 => x"efa73f80", -2007 => x"53ff9039", -2008 => x"f63d0d7c", -2009 => x"7e545b72", -2010 => x"802e8283", -2011 => x"387a51ef", -2012 => x"8f3ff813", -2013 => x"84110870", -2014 => x"fe067013", -2015 => x"841108fc", -2016 => x"065d5859", -2017 => x"545880de", -2018 => x"c008752e", -2019 => x"82de3878", -2020 => x"84160c80", -2021 => x"73810654", -2022 => x"5a727a2e", -2023 => x"81d53878", -2024 => x"15841108", -2025 => x"81065153", -2026 => x"72a03878", -2027 => x"17577981", -2028 => x"e6388815", -2029 => x"08537280", -2030 => x"dec02e82", -2031 => x"f9388c15", -2032 => x"08708c15", -2033 => x"0c738812", -2034 => x"0c567681", -2035 => x"0784190c", -2036 => x"76187771", -2037 => x"0c537981", -2038 => x"913883ff", -2039 => x"772781c8", -2040 => x"3876892a", -2041 => x"77832a56", -2042 => x"5372802e", -2043 => x"bf387686", -2044 => x"2ab80555", -2045 => x"847327b4", -2046 => x"3880db13", -2047 => x"55947327", -2048 => x"ab38768c", -2049 => x"2a80ee05", -2050 => x"5580d473", -2051 => x"279e3876", -2052 => x"8f2a80f7", -2053 => x"055582d4", -2054 => x"73279138", -2055 => x"76922a80", -2056 => x"fc05558a", -2057 => x"d4732784", -2058 => x"3880fe55", -2059 => x"74101010", -2060 => x"80deb805", -2061 => x"88110855", -2062 => x"5673762e", -2063 => x"82b33884", -2064 => x"1408fc06", -2065 => x"53767327", -2066 => x"8d388814", -2067 => x"08547376", -2068 => x"2e098106", -2069 => x"ea388c14", -2070 => x"08708c1a", -2071 => x"0c74881a", -2072 => x"0c788812", -2073 => x"0c56778c", -2074 => x"150c7a51", -2075 => x"ed933f8c", -2076 => x"3d0d0477", -2077 => x"08787131", -2078 => x"59770588", -2079 => x"19085457", -2080 => x"7280dec0", -2081 => x"2e80e038", -2082 => x"8c180870", -2083 => x"8c150c73", -2084 => x"88120c56", -2085 => x"fe893988", -2086 => x"15088c16", -2087 => x"08708c13", -2088 => x"0c578817", -2089 => x"0cfea339", -2090 => x"76832a70", -2091 => x"54558075", -2092 => x"24819838", -2093 => x"72822c81", -2094 => x"712b80de", -2095 => x"bc080780", -2096 => x"deb80b84", -2097 => x"050c5374", -2098 => x"10101080", -2099 => x"deb80588", -2100 => x"11085556", -2101 => x"758c190c", -2102 => x"7388190c", -2103 => x"7788170c", -2104 => x"778c150c", -2105 => x"ff843981", -2106 => x"5afdb439", -2107 => x"78177381", -2108 => x"06545772", -2109 => x"98387708", -2110 => x"78713159", -2111 => x"77058c19", -2112 => x"08881a08", -2113 => x"718c120c", -2114 => x"88120c57", -2115 => x"57768107", -2116 => x"84190c77", -2117 => x"80deb80b", -2118 => x"88050c80", -2119 => x"deb40877", -2120 => x"26fec738", -2121 => x"80deb008", -2122 => x"527a51fa", -2123 => x"fd3f7a51", -2124 => x"ebcf3ffe", -2125 => x"ba398178", -2126 => x"8c150c78", -2127 => x"88150c73", -2128 => x"8c1a0c73", -2129 => x"881a0c5a", -2130 => x"fd803983", -2131 => x"1570822c", -2132 => x"81712b80", -2133 => x"debc0807", -2134 => x"80deb80b", -2135 => x"84050c51", -2136 => x"53741010", -2137 => x"1080deb8", -2138 => x"05881108", -2139 => x"5556fee4", -2140 => x"39745380", -2141 => x"7524a738", -2142 => x"72822c81", -2143 => x"712b80de", -2144 => x"bc080780", -2145 => x"deb80b84", -2146 => x"050c5375", -2147 => x"8c190c73", -2148 => x"88190c77", -2149 => x"88170c77", -2150 => x"8c150cfd", -2151 => x"cd398315", -2152 => x"70822c81", -2153 => x"712b80de", -2154 => x"bc080780", -2155 => x"deb80b84", -2156 => x"050c5153", -2157 => x"d639f93d", -2158 => x"0d797b58", -2159 => x"53800b80", -2160 => x"d6fc0853", -2161 => x"5672722e", -2162 => x"80c03884", -2163 => x"dc135574", -2164 => x"762eb738", -2165 => x"88150884", -2166 => x"1608ff05", -2167 => x"54548073", -2168 => x"249d388c", -2169 => x"14227090", -2170 => x"2b70902c", -2171 => x"51535871", -2172 => x"80d83880", -2173 => x"dc14ff14", -2174 => x"54547280", -2175 => x"25e53874", -2176 => x"085574d0", -2177 => x"3880d6fc", -2178 => x"085284dc", -2179 => x"12557480", -2180 => x"2eb13888", -2181 => x"15088416", -2182 => x"08ff0554", -2183 => x"54807324", -2184 => x"9c388c14", -2185 => x"2270902b", -2186 => x"70902c51", -2187 => x"535871ad", -2188 => x"3880dc14", -2189 => x"ff145454", -2190 => x"728025e6", -2191 => x"38740855", -2192 => x"74d13875", -2193 => x"800c893d", -2194 => x"0d047351", -2195 => x"762d7580", -2196 => x"080780dc", -2197 => x"15ff1555", -2198 => x"5556ff9e", -2199 => x"39735176", -2200 => x"2d758008", -2201 => x"0780dc15", -2202 => x"ff155555", -2203 => x"56ca39ea", -2204 => x"3d0d688c", -2205 => x"1122700a", -2206 => x"100a8106", -2207 => x"57585674", -2208 => x"80e4388e", -2209 => x"16227090", -2210 => x"2b70902c", -2211 => x"51555880", -2212 => x"7424b138", -2213 => x"983dc405", -2214 => x"53735280", -2215 => x"d6fc0851", -2216 => x"86833f80", -2217 => x"0b800824", -2218 => x"97387983", -2219 => x"e0800654", -2220 => x"7380c080", -2221 => x"2e818f38", -2222 => x"73828080", -2223 => x"2e819138", -2224 => x"8c162257", -2225 => x"76908007", -2226 => x"54738c17", -2227 => x"23888052", -2228 => x"80d6fc08", -2229 => x"51d9d13f", -2230 => x"80089d38", -2231 => x"8c162282", -2232 => x"0754738c", -2233 => x"172380c3", -2234 => x"1670770c", -2235 => x"90170c81", -2236 => x"0b94170c", -2237 => x"983d0d04", -2238 => x"80d6fc08", -2239 => x"bd930bbc", -2240 => x"120c548c", -2241 => x"16228180", -2242 => x"0754738c", -2243 => x"17238008", -2244 => x"760c8008", -2245 => x"90170c88", -2246 => x"800b9417", -2247 => x"0c74802e", -2248 => x"d3388e16", -2249 => x"2270902b", -2250 => x"70902c53", -2251 => x"55588df3", -2252 => x"3f800880", -2253 => x"2effbd38", -2254 => x"8c162281", -2255 => x"0754738c", -2256 => x"1723983d", -2257 => x"0d04810b", -2258 => x"8c172258", -2259 => x"55fef539", -2260 => x"a8160880", -2261 => x"c9c92e09", -2262 => x"8106fee4", -2263 => x"388c1622", -2264 => x"88800754", -2265 => x"738c1723", -2266 => x"88800b80", -2267 => x"cc170cfe", -2268 => x"dc39fc3d", -2269 => x"0d767971", -2270 => x"028c059f", -2271 => x"05335755", -2272 => x"53558372", -2273 => x"278a3874", -2274 => x"83065170", -2275 => x"802ea238", -2276 => x"ff125271", -2277 => x"ff2e9338", -2278 => x"73737081", -2279 => x"055534ff", -2280 => x"125271ff", -2281 => x"2e098106", -2282 => x"ef387480", -2283 => x"0c863d0d", -2284 => x"04747488", -2285 => x"2b750770", -2286 => x"71902b07", -2287 => x"5154518f", -2288 => x"7227a538", -2289 => x"72717084", -2290 => x"05530c72", -2291 => x"71708405", -2292 => x"530c7271", -2293 => x"70840553", -2294 => x"0c727170", -2295 => x"8405530c", -2296 => x"f0125271", -2297 => x"8f26dd38", -2298 => x"83722790", -2299 => x"38727170", -2300 => x"8405530c", -2301 => x"fc125271", -2302 => x"8326f238", -2303 => x"7053ff90", -2304 => x"39f93d0d", -2305 => x"797c557b", -2306 => x"548e1122", -2307 => x"70902b70", -2308 => x"902c5557", -2309 => x"80d6fc08", -2310 => x"53585683", -2311 => x"f63f8008", -2312 => x"57800b80", -2313 => x"08249338", -2314 => x"80d01608", -2315 => x"80080580", -2316 => x"d0170c76", -2317 => x"800c893d", -2318 => x"0d048c16", -2319 => x"2283dfff", -2320 => x"0655748c", -2321 => x"17237680", -2322 => x"0c893d0d", -2323 => x"04fa3d0d", -2324 => x"788c1122", -2325 => x"70882a70", -2326 => x"81065157", -2327 => x"585674a9", -2328 => x"388c1622", -2329 => x"83dfff06", -2330 => x"55748c17", -2331 => x"237a5479", -2332 => x"538e1622", -2333 => x"70902b70", -2334 => x"902c5456", -2335 => x"80d6fc08", -2336 => x"525681b2", -2337 => x"3f883d0d", -2338 => x"04825480", -2339 => x"538e1622", -2340 => x"70902b70", -2341 => x"902c5456", -2342 => x"80d6fc08", -2343 => x"525782bb", -2344 => x"3f8c1622", -2345 => x"83dfff06", -2346 => x"55748c17", -2347 => x"237a5479", -2348 => x"538e1622", -2349 => x"70902b70", -2350 => x"902c5456", -2351 => x"80d6fc08", -2352 => x"525680f2", -2353 => x"3f883d0d", -2354 => x"04f93d0d", -2355 => x"797c557b", -2356 => x"548e1122", -2357 => x"70902b70", -2358 => x"902c5557", -2359 => x"80d6fc08", -2360 => x"53585681", -2361 => x"f63f8008", -2362 => x"578008ff", -2363 => x"2e99388c", -2364 => x"1622a080", -2365 => x"0755748c", -2366 => x"17238008", -2367 => x"80d0170c", -2368 => x"76800c89", -2369 => x"3d0d048c", -2370 => x"162283df", -2371 => x"ff065574", -2372 => x"8c172376", -2373 => x"800c893d", -2374 => x"0d047070", -2375 => x"70748e11", -2376 => x"2270902b", -2377 => x"70902c55", -2378 => x"51515380", -2379 => x"d6fc0851", -2380 => x"bd3f5050", -2381 => x"5004fb3d", -2382 => x"0d800b80", -2383 => x"e7800c7a", -2384 => x"53795278", -2385 => x"51839c3f", -2386 => x"80085580", -2387 => x"08ff2e88", -2388 => x"3874800c", -2389 => x"873d0d04", -2390 => x"80e78008", -2391 => x"5675802e", -2392 => x"f0387776", -2393 => x"710c5474", -2394 => x"800c873d", -2395 => x"0d047070", -2396 => x"7070800b", -2397 => x"80e7800c", -2398 => x"765185a4", -2399 => x"3f800853", -2400 => x"8008ff2e", -2401 => x"89387280", -2402 => x"0c505050", -2403 => x"500480e7", -2404 => x"80085473", -2405 => x"802eef38", -2406 => x"7574710c", -2407 => x"5272800c", -2408 => x"50505050", -2409 => x"04fc3d0d", -2410 => x"800b80e7", -2411 => x"800c7852", -2412 => x"775187d4", -2413 => x"3f800854", -2414 => x"8008ff2e", -2415 => x"88387380", -2416 => x"0c863d0d", -2417 => x"0480e780", -2418 => x"08557480", -2419 => x"2ef03876", -2420 => x"75710c53", -2421 => x"73800c86", -2422 => x"3d0d04fb", -2423 => x"3d0d800b", -2424 => x"80e7800c", -2425 => x"7a537952", -2426 => x"785185b0", -2427 => x"3f800855", -2428 => x"8008ff2e", -2429 => x"88387480", -2430 => x"0c873d0d", -2431 => x"0480e780", -2432 => x"08567580", -2433 => x"2ef03877", -2434 => x"76710c54", -2435 => x"74800c87", -2436 => x"3d0d04fb", -2437 => x"3d0d800b", -2438 => x"80e7800c", -2439 => x"7a537952", -2440 => x"785182b7", -2441 => x"3f800855", -2442 => x"8008ff2e", -2443 => x"88387480", -2444 => x"0c873d0d", -2445 => x"0480e780", -2446 => x"08567580", -2447 => x"2ef03877", -2448 => x"76710c54", -2449 => x"74800c87", -2450 => x"3d0d0481", -2451 => x"0b800c04", -2452 => x"7072812e", -2453 => x"8738800b", -2454 => x"800c5004", -2455 => x"735180fd", -2456 => x"3f707070", -2457 => x"80e78408", -2458 => x"51708a38", -2459 => x"80e78c70", -2460 => x"80e7840c", -2461 => x"51707512", -2462 => x"5252ff53", -2463 => x"7087fb80", -2464 => x"80268838", -2465 => x"7080e784", -2466 => x"0c715372", -2467 => x"800c5050", -2468 => x"50047070", -2469 => x"7070800b", -2470 => x"80d6f008", -2471 => x"54547281", -2472 => x"2e9e3873", -2473 => x"80e7880c", -2474 => x"ffbbbe3f", -2475 => x"ffbad13f", -2476 => x"80e6c052", -2477 => x"8151ffbe", -2478 => x"913f8008", -2479 => x"51879b3f", -2480 => x"7280e788", -2481 => x"0cffbba1", -2482 => x"3fffbab4", -2483 => x"3f80e6c0", -2484 => x"528151ff", -2485 => x"bdf43f80", -2486 => x"085186fe", -2487 => x"3f00ff39", -2488 => x"00ff39f5", -2489 => x"3d0d7e60", -2490 => x"80e78808", -2491 => x"705b585b", -2492 => x"5b7580c5", -2493 => x"38777a25", -2494 => x"a238771b", -2495 => x"70337081", -2496 => x"ff065858", -2497 => x"59758a2e", -2498 => x"99387681", -2499 => x"ff0651ff", -2500 => x"bab83f81", -2501 => x"18587978", -2502 => x"24e03879", -2503 => x"800c8d3d", -2504 => x"0d048d51", -2505 => x"ffbaa33f", -2506 => x"78337081", -2507 => x"ff065257", -2508 => x"ffba973f", -2509 => x"811858de", -2510 => x"3979557a", -2511 => x"547d5385", -2512 => x"528d3dfc", -2513 => x"0551ffb9", -2514 => x"e13f8008", -2515 => x"5686843f", -2516 => x"7b80080c", -2517 => x"75800c8d", -2518 => x"3d0d04f6", -2519 => x"3d0d7d7f", -2520 => x"80e78808", -2521 => x"705a585a", -2522 => x"5a7580c4", -2523 => x"38767925", -2524 => x"b238761a", -2525 => x"56ffb9b4", -2526 => x"3f800876", -2527 => x"34800b80", -2528 => x"0881ff06", -2529 => x"5758758a", -2530 => x"2ea23875", -2531 => x"8d327030", -2532 => x"7080257a", -2533 => x"07515156", -2534 => x"75b83881", -2535 => x"17577877", -2536 => x"24d03876", -2537 => x"5675800c", -2538 => x"8c3d0d04", -2539 => x"8158dc39", -2540 => x"78557954", -2541 => x"7c538452", -2542 => x"8c3dfc05", -2543 => x"51ffb8ea", -2544 => x"3f800856", -2545 => x"858d3f7a", -2546 => x"80080c75", -2547 => x"800c8c3d", -2548 => x"0d048117", -2549 => x"56cf39f9", -2550 => x"3d0d7957", -2551 => x"80e78808", -2552 => x"802ead38", -2553 => x"7651c8f8", -2554 => x"3f7b567a", -2555 => x"55800881", -2556 => x"05547653", -2557 => x"8252893d", -2558 => x"fc0551ff", -2559 => x"b8ac3f80", -2560 => x"085784cf", -2561 => x"3f778008", -2562 => x"0c76800c", -2563 => x"893d0d04", -2564 => x"84c13f85", -2565 => x"0b80080c", -2566 => x"ff0b800c", -2567 => x"893d0d04", -2568 => x"fb3d0d80", -2569 => x"e7880870", -2570 => x"56547388", -2571 => x"3874800c", -2572 => x"873d0d04", -2573 => x"77538352", -2574 => x"873dfc05", -2575 => x"51ffb7ea", -2576 => x"3f800854", -2577 => x"848d3f75", -2578 => x"80080c73", -2579 => x"800c873d", -2580 => x"0d04ff0b", -2581 => x"800c04fb", -2582 => x"3d0d7755", -2583 => x"80e78808", -2584 => x"802ea938", -2585 => x"7451c7f8", -2586 => x"3f800881", -2587 => x"05547453", -2588 => x"8752873d", -2589 => x"fc0551ff", -2590 => x"b7b03f80", -2591 => x"085583d3", -2592 => x"3f758008", -2593 => x"0c74800c", -2594 => x"873d0d04", -2595 => x"83c53f85", -2596 => x"0b80080c", -2597 => x"ff0b800c", -2598 => x"873d0d04", -2599 => x"fa3d0d80", -2600 => x"e7880880", -2601 => x"2ea3387a", -2602 => x"55795478", -2603 => x"53865288", -2604 => x"3dfc0551", -2605 => x"ffb6f33f", -2606 => x"80085683", -2607 => x"963f7680", -2608 => x"080c7580", -2609 => x"0c883d0d", -2610 => x"0483883f", -2611 => x"9d0b8008", -2612 => x"0cff0b80", -2613 => x"0c883d0d", -2614 => x"04fb3d0d", -2615 => x"77795656", -2616 => x"80705454", -2617 => x"7375259f", -2618 => x"38741010", -2619 => x"10f80552", -2620 => x"72167033", -2621 => x"70742b76", -2622 => x"078116f8", -2623 => x"16565656", -2624 => x"51517473", -2625 => x"24ea3873", -2626 => x"800c873d", -2627 => x"0d04fc3d", -2628 => x"0d767855", -2629 => x"55bc5380", -2630 => x"527351f4", -2631 => x"d53f8452", -2632 => x"7451ffb5", -2633 => x"3f800874", -2634 => x"23845284", -2635 => x"1551ffa9", -2636 => x"3f800882", -2637 => x"15238452", -2638 => x"881551ff", -2639 => x"9c3f8008", -2640 => x"84150c84", -2641 => x"528c1551", -2642 => x"ff8f3f80", -2643 => x"08881523", -2644 => x"84529015", -2645 => x"51ff823f", -2646 => x"80088a15", -2647 => x"23845294", -2648 => x"1551fef5", -2649 => x"3f80088c", -2650 => x"15238452", -2651 => x"981551fe", -2652 => x"e83f8008", -2653 => x"8e152388", -2654 => x"529c1551", -2655 => x"fedb3f80", -2656 => x"0890150c", -2657 => x"863d0d04", -2658 => x"e93d0d6a", -2659 => x"80e78808", -2660 => x"57577593", -2661 => x"3880c080", -2662 => x"0b84180c", -2663 => x"75ac180c", -2664 => x"75800c99", -2665 => x"3d0d0489", -2666 => x"3d70556a", -2667 => x"54558a52", -2668 => x"993dffbc", -2669 => x"0551ffb4", -2670 => x"f13f8008", -2671 => x"77537552", -2672 => x"56fecb3f", -2673 => x"818d3f77", -2674 => x"80080c75", -2675 => x"800c993d", -2676 => x"0d04e93d", -2677 => x"0d695780", -2678 => x"e7880880", -2679 => x"2eb63876", -2680 => x"51c4fd3f", -2681 => x"893d7056", -2682 => x"80088105", -2683 => x"55775456", -2684 => x"8f52993d", -2685 => x"ffbc0551", -2686 => x"ffb4af3f", -2687 => x"80086b53", -2688 => x"765257fe", -2689 => x"893f80cb", -2690 => x"3f778008", -2691 => x"0c76800c", -2692 => x"993d0d04", -2693 => x"be3f850b", -2694 => x"80080cff", -2695 => x"0b800c99", -2696 => x"3d0d04fc", -2697 => x"3d0d8154", -2698 => x"80e78808", -2699 => x"88387380", -2700 => x"0c863d0d", -2701 => x"04765397", -2702 => x"b952863d", -2703 => x"fc0551ff", -2704 => x"b3e83f80", -2705 => x"08548c3f", -2706 => x"7480080c", -2707 => x"73800c86", -2708 => x"3d0d0480", -2709 => x"d6fc0880", -2710 => x"0c04f73d", -2711 => x"0d7b80d6", -2712 => x"fc0882c8", -2713 => x"11085a54", -2714 => x"5a77802e", -2715 => x"80da3881", -2716 => x"88188419", -2717 => x"08ff0581", -2718 => x"712b5955", -2719 => x"59807424", -2720 => x"80ea3880", -2721 => x"7424b538", -2722 => x"73822b78", -2723 => x"11880556", -2724 => x"56818019", -2725 => x"08770653", -2726 => x"72802eb6", -2727 => x"38781670", -2728 => x"08535379", -2729 => x"51740853", -2730 => x"722dff14", -2731 => x"fc17fc17", -2732 => x"79812c5a", -2733 => x"57575473", -2734 => x"8025d638", -2735 => x"77085877", -2736 => x"ffad3880", -2737 => x"d6fc0853", -2738 => x"bc1308a5", -2739 => x"387951f8", -2740 => x"8c3f7408", -2741 => x"53722dff", -2742 => x"14fc17fc", -2743 => x"1779812c", -2744 => x"5a575754", -2745 => x"738025ff", -2746 => x"a838d139", -2747 => x"8057ff93", -2748 => x"397251bc", -2749 => x"13085372", -2750 => x"2d7951f7", -2751 => x"e03f7070", -2752 => x"80e6c80b", -2753 => x"fc057008", -2754 => x"525270ff", -2755 => x"2e913870", -2756 => x"2dfc1270", -2757 => x"08525270", -2758 => x"ff2e0981", -2759 => x"06f13850", -2760 => x"500404ff", -2761 => x"b4c73f04", -2762 => x"48656c6c", -2763 => x"6f20776f", -2764 => x"726c6420", -2765 => x"310a0000", -2766 => x"48656c6c", -2767 => x"6f20776f", -2768 => x"726c6420", -2769 => x"320a0000", -2770 => x"0a000000", -2771 => x"43000000", -2772 => x"64756d6d", -2773 => x"792e6578", -2774 => x"65000000", -2775 => x"00ffffff", -2776 => x"ff00ffff", -2777 => x"ffff00ff", -2778 => x"ffffff00", -2779 => x"00000000", -2780 => x"00000000", -2781 => x"00000000", -2782 => x"00003350", -2783 => x"00002b80", -2784 => x"00000000", -2785 => x"00002de8", -2786 => x"00002e44", -2787 => x"00002ea0", -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"00002b4c", -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"00000001", -2827 => x"330eabcd", -2828 => x"1234e66d", -2829 => x"deec0005", -2830 => x"000b0000", -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"00000000", -2900 => x"00000000", -2901 => x"00000000", -2902 => x"00000000", -2903 => x"00000000", -2904 => x"00000000", -2905 => x"00000000", -2906 => x"00000000", -2907 => x"00000000", -2908 => x"00000000", -2909 => x"00000000", -2910 => x"00000000", -2911 => x"00000000", -2912 => x"00000000", -2913 => x"00000000", -2914 => x"00000000", -2915 => x"00000000", -2916 => x"00000000", -2917 => x"00000000", -2918 => x"00000000", -2919 => x"00000000", -2920 => x"00000000", -2921 => x"00000000", -2922 => x"00000000", -2923 => x"00000000", -2924 => x"00000000", -2925 => x"00000000", -2926 => x"00000000", -2927 => x"00000000", -2928 => x"00000000", -2929 => x"00000000", -2930 => x"00000000", -2931 => x"00000000", -2932 => x"00000000", -2933 => x"00000000", -2934 => x"00000000", -2935 => x"00000000", -2936 => x"00000000", -2937 => x"00000000", -2938 => x"00000000", -2939 => x"00000000", -2940 => x"00000000", -2941 => x"00000000", -2942 => x"00000000", -2943 => x"00000000", -2944 => x"00000000", -2945 => x"00000000", -2946 => x"00000000", -2947 => x"00000000", -2948 => x"00000000", -2949 => x"00000000", -2950 => x"00000000", -2951 => x"00000000", -2952 => x"00000000", -2953 => x"00000000", -2954 => x"00000000", -2955 => x"00000000", -2956 => x"00000000", -2957 => x"00000000", -2958 => x"00000000", -2959 => x"00000000", -2960 => x"00000000", -2961 => x"00000000", -2962 => x"00000000", -2963 => x"00000000", -2964 => x"00000000", -2965 => x"00000000", -2966 => x"00000000", -2967 => x"00000000", -2968 => x"00000000", -2969 => x"00000000", -2970 => x"00000000", -2971 => x"00000000", -2972 => x"00000000", -2973 => x"00000000", -2974 => x"00000000", -2975 => x"00000000", -2976 => x"00000000", -2977 => x"00000000", -2978 => x"00000000", -2979 => x"00000000", -2980 => x"00000000", -2981 => x"00000000", -2982 => x"00000000", -2983 => x"00000000", -2984 => x"00000000", -2985 => x"00000000", -2986 => x"00000000", -2987 => x"00000000", -2988 => x"00000000", -2989 => x"00000000", -2990 => x"00000000", -2991 => x"00000000", -2992 => x"00000000", -2993 => x"00000000", -2994 => x"00000000", -2995 => x"00000000", -2996 => x"00000000", -2997 => x"00000000", -2998 => x"00000000", -2999 => x"00000000", -3000 => x"00000000", -3001 => x"00000000", -3002 => x"00000000", -3003 => x"00000000", -3004 => x"00000000", -3005 => x"00000000", -3006 => x"00000000", -3007 => x"00000000", -3008 => x"00000000", -3009 => x"00000000", -3010 => x"00000000", -3011 => x"00000000", -3012 => x"00000000", -3013 => x"00000000", -3014 => x"00000000", -3015 => x"00000000", -3016 => x"00000000", -3017 => x"00000000", -3018 => x"00000000", -3019 => x"ffffffff", -3020 => x"00000000", -3021 => x"00020000", -3022 => x"00000000", -3023 => x"00000000", -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"00003158", -3161 => x"00003158", -3162 => x"00003160", -3163 => x"00003160", -3164 => x"00003168", -3165 => x"00003168", -3166 => x"00003170", -3167 => x"00003170", -3168 => x"00003178", -3169 => x"00003178", -3170 => x"00003180", -3171 => x"00003180", -3172 => x"00003188", -3173 => x"00003188", -3174 => x"00003190", -3175 => x"00003190", -3176 => x"00003198", -3177 => x"00003198", -3178 => x"000031a0", -3179 => x"000031a0", -3180 => x"000031a8", -3181 => x"000031a8", -3182 => x"000031b0", -3183 => x"000031b0", -3184 => x"000031b8", -3185 => x"000031b8", -3186 => x"000031c0", -3187 => x"000031c0", -3188 => x"000031c8", -3189 => x"000031c8", -3190 => x"000031d0", -3191 => x"000031d0", -3192 => x"000031d8", -3193 => x"000031d8", -3194 => x"000031e0", -3195 => x"000031e0", -3196 => x"000031e8", -3197 => x"000031e8", -3198 => x"000031f0", -3199 => x"000031f0", -3200 => x"000031f8", -3201 => x"000031f8", -3202 => x"00003200", -3203 => x"00003200", -3204 => x"00003208", -3205 => x"00003208", -3206 => x"00003210", -3207 => x"00003210", -3208 => x"00003218", -3209 => x"00003218", -3210 => x"00003220", -3211 => x"00003220", -3212 => x"00003228", -3213 => x"00003228", -3214 => x"00003230", -3215 => x"00003230", -3216 => x"00003238", -3217 => x"00003238", -3218 => x"00003240", -3219 => x"00003240", -3220 => x"00003248", -3221 => x"00003248", -3222 => x"00003250", -3223 => x"00003250", -3224 => x"00003258", -3225 => x"00003258", -3226 => x"00003260", -3227 => x"00003260", -3228 => x"00003268", -3229 => x"00003268", -3230 => x"00003270", -3231 => x"00003270", -3232 => x"00003278", -3233 => x"00003278", -3234 => x"00003280", -3235 => x"00003280", -3236 => x"00003288", -3237 => x"00003288", -3238 => x"00003290", -3239 => x"00003290", -3240 => x"00003298", -3241 => x"00003298", -3242 => x"000032a0", -3243 => x"000032a0", -3244 => x"000032a8", -3245 => x"000032a8", -3246 => x"000032b0", -3247 => x"000032b0", -3248 => x"000032b8", -3249 => x"000032b8", -3250 => x"000032c0", -3251 => x"000032c0", -3252 => x"000032c8", -3253 => x"000032c8", -3254 => x"000032d0", -3255 => x"000032d0", -3256 => x"000032d8", -3257 => x"000032d8", -3258 => x"000032e0", -3259 => x"000032e0", -3260 => x"000032e8", -3261 => x"000032e8", -3262 => x"000032f0", -3263 => x"000032f0", -3264 => x"000032f8", -3265 => x"000032f8", -3266 => x"00003300", -3267 => x"00003300", -3268 => x"00003308", -3269 => x"00003308", -3270 => x"00003310", -3271 => x"00003310", -3272 => x"00003318", -3273 => x"00003318", -3274 => x"00003320", -3275 => x"00003320", -3276 => x"00003328", -3277 => x"00003328", -3278 => x"00003330", -3279 => x"00003330", -3280 => x"00002b50", -3281 => x"ffffffff", -3282 => x"00000000", -3283 => x"ffffffff", -3284 => x"00000000", - others => x"00000000" -); - -begin - -process (clk) -begin - if (clk'event and clk = '1') then - 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/zpu3/src/ic300.bitgen b/zpu/hdl/zpu3/src/ic300.bitgen deleted file mode 100644 index 1095099..0000000 --- a/zpu/hdl/zpu3/src/ic300.bitgen +++ /dev/null @@ -1,27 +0,0 @@ --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/zpu3/src/ic300.lso b/zpu/hdl/zpu3/src/ic300.lso deleted file mode 100644 index 22de730..0000000 --- a/zpu/hdl/zpu3/src/ic300.lso +++ /dev/null @@ -1 +0,0 @@ -work diff --git a/zpu/hdl/zpu3/src/ic300.ucf b/zpu/hdl/zpu3/src/ic300.ucf deleted file mode 100644 index e11357f..0000000 --- a/zpu/hdl/zpu3/src/ic300.ucf +++ /dev/null @@ -1,146 +0,0 @@ -# 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" 15.6 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/zpu3/src/ic300.vhd b/zpu/hdl/zpu3/src/ic300.vhd deleted file mode 100644 index a1b4f41..0000000 --- a/zpu/hdl/zpu3/src/ic300.vhd +++ /dev/null @@ -1,144 +0,0 @@ --------------------------------------------------------------------------------- --- 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/zpu3/src/ic300_config.vhd b/zpu/hdl/zpu3/src/ic300_config.vhd deleted file mode 100644 index 9d3f939..0000000 --- a/zpu/hdl/zpu3/src/ic300_config.vhd +++ /dev/null @@ -1,20 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; - -package phi_config is - - constant Fpga_Global_Base : std_logic_vector(19 downto 17) := "000"; -- 0x0280.... - constant Clock_Stat_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000 - constant Testreg32_Lower_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C - constant Testreg32_Upper_Addr : std_logic_vector(3 downto 1) := "111"; -- 0x....000E - - constant Fpga_DDR_Ctrl_Base : std_logic_vector(19 downto 17) := "111"; -- 0x028E.... - constant DDR_Ctrl_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000 - constant DDR_Mode_Reg_Addr : std_logic_vector(3 downto 1) := "001"; -- 0x....0002 - - -- These are temporary test registers only! - constant DDR_Data_Reg_Addr : std_logic_vector(3 downto 1) := "100"; -- 0x....0008 - constant DDR_Addr_Reg_Addr : std_logic_vector(3 downto 1) := "101"; -- 0x....000A - constant DDR_Req_Reg_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C - -end phi_config; diff --git a/zpu/hdl/zpu3/src/ic300pkg.vhd b/zpu/hdl/zpu3/src/ic300pkg.vhd deleted file mode 100644 index 13da306..0000000 --- a/zpu/hdl/zpu3/src/ic300pkg.vhd +++ /dev/null @@ -1,88 +0,0 @@ -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/zpu3/src/io.vhd b/zpu/hdl/zpu3/src/io.vhd deleted file mode 100644 index 6b50ca1..0000000 --- a/zpu/hdl/zpu3/src/io.vhd +++ /dev/null @@ -1,95 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -use std.textio.all; - -library zylin; -use zylin.zpu_config.all; -use zylin.zpupkg.all; -use zylin.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; - -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); - - - process(areset, clk) - begin - if (areset = '1') then - timer_we <= '0'; - busy <= '1'; - elsif (clk'event and clk = '1') then - busy <= '1'; - 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))); - busy <= '0'; - elsif addr(12)='1' then - timer_we <= '1'; - busy <= '0'; - else - report "Illegal IO write" severity failure; - end if; - - end if; - if (readEnable = '1') then - if addr=x"1001" then - read <= (0=>'1', others => '0'); -- recieve empty - busy <= '0'; - elsif addr(12)='1' then - read <= timer_read; - busy <= '0'; - elsif addr(11)='1' then - read <= ZPU_Frequency; - busy <= '0'; - else - report "Illegal IO read" severity failure; - end if; - else - read <= (others => '1'); - end if; - end if; - end process; - - -end behave; - diff --git a/zpu/hdl/zpu3/src/log.txt b/zpu/hdl/zpu3/src/log.txt deleted file mode 100644 index 5557b06..0000000 --- a/zpu/hdl/zpu3/src/log.txt +++ /dev/null @@ -1,156 +0,0 @@ - - - -D -h -r -y -s -t -o -n -e - -B -e -n -c -h -m -a -r -k -, - -V -e -r -s -i -o -n - -2 -. -1 - -( -L -a -n -g -u -a -g -e -: - -C -) - - - - - - -P -r -o -g -r -a -m - -c -o -m -p -i -l -e -d - -w -i -t -h -o -u -t - -' -r -e -g -i -s -t -e -r -' - -a -t -t -r -i -b -u -t -e - - - - - - -E -x -e -c -u -t -i -o -n - -s -t -a -r -t -s -, - -2 -0 -0 -0 -0 -0 - -r -u -n -s - -t -h -r -o -u -g -h - -D -h -r -y -s -t -o -n -e - - - diff --git a/zpu/hdl/zpu3/src/niltrace.vhd b/zpu/hdl/zpu3/src/niltrace.vhd deleted file mode 100644 index 40fc1ca..0000000 --- a/zpu/hdl/zpu3/src/niltrace.vhd +++ /dev/null @@ -1,26 +0,0 @@ -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/zpu3/src/sim_fpga_top.vhd b/zpu/hdl/zpu3/src/sim_fpga_top.vhd deleted file mode 100644 index 3044606..0000000 --- a/zpu/hdl/zpu3/src/sim_fpga_top.vhd +++ /dev/null @@ -1,127 +0,0 @@ --------------------------------------------------------------------------------- --- 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 zylin; -use zylin.zpu_config.all; -use zylin.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_top is - Port ( clk : in std_logic; - areset : in std_logic; - io_busy : in std_logic; - io_read : in std_logic_vector(7 downto 0); - io_write : out std_logic_vector(7 downto 0); - io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); - io_writeEnable : out std_logic; - io_readEnable : out std_logic; - interrupt : in std_logic; - break : out std_logic); -end component; - - -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 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 break : std_logic; - -begin - poweronreset: roc port map (O => areset); - - - - zpu: zpu_top port map ( - clk => clk , - areset => areset, - io_busy => io_busy, - io_read => io_read, - io_write => io_write, - io_addr => io_addr, - io_writeEnable => io_writeEnable, - io_readEnable => io_readEnable, - interrupt => '0', - break => break); - - - ioMap: zpu_io port map ( - clk => clk, - areset => areset, - busy => io_busy, - writeEnable => io_writeEnable, - readEnable => io_readEnable, - write => io_write, - read => io_read, - addr => io_addr - ); - - - - -- 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/zpu3/src/status.txt b/zpu/hdl/zpu3/src/status.txt deleted file mode 100644 index df8773a..0000000 --- a/zpu/hdl/zpu3/src/status.txt +++ /dev/null @@ -1,67 +0,0 @@ -- Make LOADSP/STORESP/ADDSP/PUSHPC & OR emulated => From 444 => 428 LUT. - A pitiful saving in return for destroying performance. -- If I reduce datapath to 8(which is useless) => 197 LUT. - -Bare bones version of ZPU3: - -- remove NOP, PUSHPC, STORESP, LOADSP, ADDSP and OR instructions. This requires - modification to the GCC toolchain and will result in a fairly significant - code increase. We should still do better than ARM though. -- reduce datapath to 16 bits. This will reduce stack usage, which is good. -- 4kBytes of RAM. - - [exec] ========================================================================= - [exec] Device utilization summary: - [exec] --------------------------- - [exec] Selected Device : 3s400ft256-4 - [exec] Number of Slices: 167 out of 3584 4% - [exec] Number of Slice Flip Flops: 126 out of 7168 1% - [exec] Number of 4 input LUTs: 288 out of 7168 4% - [exec] Number of bonded IOBs: 49 out of 173 28% - [exec] Number of BRAMs: 1 out of 16 6% - [exec] Number of GCLKs: 1 out of 8 12% - [exec] ========================================================================= - - - - -Measurements: - -- Removing PUSHPC(which is possible) reduces usage by 2 LUT's. -- I tried to introduce the instructions as seperate states at the top level, - but did not succeed in reducing LUT count. This might be an avenue to - pursue if asynchronous(?) ROM's could replace logic. -- 550 LUT @ 76MHz. 32 bit datapath & 8 bit instructions. Added seperate decode - stage. -- Tried to move memAControl into decoded opcode. Usage went up to 594 from 550. - -- using 16 bit opcodes to encode signals directly. 466 LUT's. -- w/2kBytes 32 RAM & 32 bit opcodes. 415 LUT's. -- 16 bit opcode, 16 bit datapath and 1kbyte RAM. 292 LUT's. - -- 725 LUT's @ 63MHz - Minimum period: 15.909ns{1} (Maximum frequency: 62.858MHz) -- removed addsp, loadsp & storesp. => 670 LUT's. -- removed all pushes & pops to sp. => 638 LUT's. -- removed OR instruction. => 672 LUT's. -- on the second cycle an ADD is done regardless => 713 LUT's. -- using others => 'x' for e.g. pushsp. 713 => 703. -- switching from lots of prioritized if() for decoding instruction to a case - statement. 713 => 631. -- Using ZPU1's memory scheme instead of inferred memory. 713 => 715, i.e. no - difference. -- Removing AddSP. 715 => 704 LUT's. -- Add COMPARE. 715 => 743 LUT's. -- Slight reorganization of binary operand & NOP 715 => 704. -- STORE only pops 1 (which can be fixed in the assembler). 704 => 701. -- Remove NOP. NOP is only used to clear idim_flag. Use NOT instead. -- Removing FLIP. 681 => 646. Using a different way to generate the FLIP, - 681 => 679. -- Add a seperate memory system for code? -- Use IDIM_FLAG to cache value before IM and make add single cycle. - -- by expanding the opcode to 32 bits, encoding everything in the opcode & - using case statements. 713 => 433 LUT. -- 32 bit opcode w/encoded state & 16 bit datapath. => 325 LUT -- by using 512 byte RAM, 16 bit datapath and 32 bit instructions => 285. - diff --git a/zpu/hdl/zpu3/src/testlut.vhd b/zpu/hdl/zpu3/src/testlut.vhd deleted file mode 100644 index fcc8fde..0000000 --- a/zpu/hdl/zpu3/src/testlut.vhd +++ /dev/null @@ -1,106 +0,0 @@ --- 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 zylin; -use zylin.zpu_config.all; -use zylin.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); - -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_top port map ( - clk => cpu_clk_p , - areset => areset, - io_busy => '0', - io_writeEnable => io_writeEnable, - io_readEnable => io_readEnable, - io_write => io_write, - io_read => io_read, - io_addr => io_addr, - interrupt => '0' - ); - - - -end behave; diff --git a/zpu/hdl/zpu3/src/timer.vhd b/zpu/hdl/zpu3/src/timer.vhd deleted file mode 100644 index 65836f0..0000000 --- a/zpu/hdl/zpu3/src/timer.vhd +++ /dev/null @@ -1,157 +0,0 @@ -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 c : std_logic_vector(1 to 7); - -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 - c <= "0000000"; - elsif (clk'event and clk = '1') then - if reset = '1' then - c <= "0000000"; - else - if cnt(7 downto 0) = "11111110" then - c(1) <= '1'; - else - c(1) <= '0'; - end if; - if cnt(15 downto 8) = "11111111" then - c(2) <= '1'; - else - c(2) <= '0'; - end if; - if cnt(23 downto 16) = "11111111" and c(2) = '1' then - c(3) <= '1'; - else - c(3) <= '0'; - end if; - if cnt(31 downto 24) = "11111111" and c(3) = '1' then - c(4) <= '1'; - else - c(4) <= '0'; - end if; - if cnt(39 downto 32) = "11111111" and c(4) = '1' then - c(5) <= '1'; - else - c(5) <= '0'; - end if; - if cnt(47 downto 40) = "11111111" and c(5) = '1' then - c(6) <= '1'; - else - c(6) <= '0'; - end if; - if cnt(55 downto 48) = "11111111" and c(6) = '1' then - c(7) <= '1'; - else - c(7) <= '0'; - end if; - end if; - end if; - end process; - - process(clk, areset) - begin - if areset = '1' then - cnt <= (others=>'0'); - elsif (clk'event and clk = '1') then - if reset = '1' then - cnt <= (others=>'0'); - else - cnt(7 downto 0) <= cnt(7 downto 0) + '1'; - if c(1) = '1' then - cnt(15 downto 8) <= cnt(15 downto 8) + '1'; - else - cnt(15 downto 8) <= cnt(15 downto 8); - end if; - if c(2) = '1' and c(1) = '1' then - cnt(23 downto 16) <= cnt(23 downto 16) + '1'; - else - cnt(23 downto 16) <= cnt(23 downto 16); - end if; - if c(3) = '1' and c(1) = '1' then - cnt(31 downto 24) <= cnt(31 downto 24) + '1'; - else - cnt(31 downto 24) <= cnt(31 downto 24); - end if; - if c(4) = '1' and c(1) = '1' then - cnt(39 downto 32) <= cnt(39 downto 32) + '1'; - else - cnt(39 downto 32) <= cnt(39 downto 32); - end if; - if c(5) = '1' and c(1) = '1' then - cnt(47 downto 40) <= cnt(47 downto 40) + '1'; - else - cnt(47 downto 40) <= cnt(47 downto 40); - end if; - if c(6) = '1' and c(1) = '1' then - cnt(55 downto 48) <= cnt(55 downto 48) + '1'; - else - cnt(55 downto 48) <= cnt(55 downto 48); - end if; - if c(7) = '1' and c(1) = '1' then - cnt(63 downto 56) <= cnt(63 downto 56) + '1'; - else - cnt(63 downto 56) <= cnt(63 downto 56); - end if; - end if; - end if; - end process; - - process(clk, areset) - begin - if areset = '1' then - cnt_smp <= (others=>'0'); - elsif (clk'event and clk = '1') then - if reset = '1' then - cnt_smp <= (others=>'0'); - elsif sample = '1' then - cnt_smp <= cnt; - else - cnt_smp <= cnt_smp; - 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/zpu3/src/trace.vhd b/zpu/hdl/zpu3/src/trace.vhd deleted file mode 100644 index 81eb448..0000000 --- a/zpu/hdl/zpu3/src/trace.vhd +++ /dev/null @@ -1,80 +0,0 @@ -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 zylin; -use zylin.zpu_config.all; -use zylin.zpupkg.all; -use zylin.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(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); - memB : in std_logic_vector(wordSize-1 downto 0); - busy : in std_logic - ); -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(maxAddrBit downto 0); - - - -begin - - t:= (others => '0'); - t2:= (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 - - if begin_inst = '1' then - t(maxAddrBit downto 2):=sp; - t2:=pc; - print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB)); - end if; - - wait until clk = '0'; - - end loop; - - end process receive_data; - - - -end behave; - diff --git a/zpu/hdl/zpu3/src/txt_util.vhd b/zpu/hdl/zpu3/src/txt_util.vhd deleted file mode 100644 index d42303b..0000000 --- a/zpu/hdl/zpu3/src/txt_util.vhd +++ /dev/null @@ -1,586 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use std.textio.all; - - -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/zpu3/src/xilinx_dualport.vhd b/zpu/hdl/zpu3/src/xilinx_dualport.vhd deleted file mode 100644 index 0e6edc9..0000000 --- a/zpu/hdl/zpu3/src/xilinx_dualport.vhd +++ /dev/null @@ -1,1482 +0,0 @@ --------------------------------------------------------------------------------- --- Company: --- Engineer: --- --- Create Date: 11:47:36 03/22/05 --- Design Name: --- Module Name: mem_sys - 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 zylin; -use zylin.zpu_config.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 - - -signal low : std_logic; -signal high : std_logic; -signal re : std_logic; - -begin - - high <= '1'; - low <= '0'; - re <= '1'; - - - ZPU_RAM0 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"01A100E100010001003600770002006D000F0000000F06AD000302940008003C", - INIT_01 => X"7D4000000741F68100C800030000377935990003000300030003002A00150001", - INIT_02 => X"0007584101010C3D55555555370000000092800000001490000000066A594EBB", - INIT_03 => X"0009015555932D564C093A4024055555564CB555593C1569EA90C00000007000", - INIT_04 => X"BF8AA55961BE2A956586C40A4CB00932C00024A80000024C9569C893C0024E90", - INIT_05 => X"18A1251E2A956586F8AA55961BF8AA55961BE2A956586FE2A956586F8AA55961", - INIT_06 => X"51349D53764E258A2043E21BE5645DE5C4FC00E0100430C140E4665595558750", - INIT_07 => X"47B1656A855555D435575A815D077558E475559E755715A1C364945042425555", - INIT_08 => X"5555F123348C17657C405070D5E745A518B58DD5555F55551D5506F00D707B15", - INIT_09 => X"C141C74DD5137120D51C0715094CC4F01006A8131DD91531B913118944815155", - INIT_0A => X"5E559655003D3549550D458C5994A04D476568D05B0F45451D143E53D0F2CD6B", - INIT_0B => X"4D1E1C5D3474C5C5A1E1C5D34787171C44DC7844D3451D37974D164DD55DD555", - INIT_0C => X"2074532E4C3A5074DE129D074D1137134477D546C01D374DD348774DE15D3717", - INIT_0D => X"875650117671948CB05545A5A2615074889149341D04D4956F843575543E1A19", - INIT_0E => X"F804036D9753106651D5140E6905C158D8979404C7459123540DD9955A43F563", - INIT_0F => X"7958D037C3557056405549520F96E88622775767141BA3755D1418E1BE234480", - INIT_10 => X"294A1C405ACCC3705D5599D55037776149584D8F98F98F98FDD00D904D205421", - INIT_11 => X"74710D5C26798346751441DD555BE179544D8F98F98F98FDD00D910DC3D357C3", - INIT_12 => X"605D5570051840119D04C0DC3755B61D7951D9A9522D995D51D5BB106B90F7C0", - INIT_13 => X"D81BC3646611D695A02D1A9419695D695422C40110C0F85D6F899E4D0D555BC3", - INIT_14 => X"28531104D5F01EDD204141807555735D38346423303676407555545F6B945696", - INIT_15 => X"5212D7645155503146685C599546660676E81041C85D570DCE1B07116F116021", - INIT_16 => X"5F9D03530F840406A5725910604E420D910DD521D6170F9AF0F940D91836445D", - INIT_17 => X"83E03E03C03414D5D5F5D9BE7550DD55775514A145E5405657024C3664F3059C", - INIT_18 => X"444C7584143756C431049D594DC444FD19CE181427555124440155503F58E14D", - INIT_19 => X"D54521B201810644D895159C568F40C6C85503E135203FCF555151102C7343CC", - INIT_1A => X"5A95904431351D93820C4D1AA2C7FD0CD95555311185802971639A1755607515", - INIT_1B => X"E7D41815C826057201815C826057201815C806057209815C82741C75D1BF4336", - INIT_1C => X"41BD443664E14155000C4191440445305B46A8D40443A3E115495503116861C3", - INIT_1D => X"A1520F9C10F850FC18DB80D4777F1D5757195241D35F9754D755DD35F40D9D99", - INIT_1E => X"65E6A10F206870F0557411545536F0D5FA1765C8D5443E658956E52727558D14", - INIT_1F => X"DDD2151D31A956A0400F03FC754175510FD4A34252E0DC4076A5EC66A10FB312", - INIT_20 => X"77C1676610FBD310C3C3CC76F05C9FF20755DC17ECE5451D3472D9D215D34C40", - INIT_21 => X"55556189C508B6C3F0F0FF1D9F4561676610F207A5EF52D7957CC0F8800F7726", - INIT_22 => X"8890203480C224080B251D4352F126920C8CF13E00C15A16445A44DA4F105554", - INIT_23 => X"0F203CF4495240B82923890203080E20B8809249524080C2C0B490210C803203", - INIT_24 => X"854F25C74C20400C1030000B24838A6F858A08E24080F2823890203C80D203C8", - INIT_25 => X"00000C000000001F75D5D74FC0000000000000003FFFFFFFEAAA95438104DA47", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"0000000000000000000000000000000000000000000154000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(1 downto 0), -- Port A 2-bit Data Output - DOB => memBRead(1 downto 0), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(1 downto 0), -- Port A 2-bit Data Input - DIB => memBWrite(1 downto 0), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => low, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM1 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"01510111000100020061006B0000004000100002001005510001059A00360064", - INIT_01 => X"40300000064005640380001E0001543802180002000200010002000500110005", - INIT_02 => X"000653709D19C24E555555552400000000920000000024000000000162843876", - INIT_03 => X"0000CC55555DC1557EC5DC00033155555577055555D315607655000000007000", - INIT_04 => X"74818211417206084505C705770000F940000398000001765560745D30017700", - INIT_05 => X"165081C206084505C8182114174818211417206084505D206084505C81821141", - INIT_06 => X"51200592163801450816D095E0044564ADB5C58C82606080118051A1162881C8", - INIT_07 => X"550175554516163566505D44014118AA4818516C185014519662131830201616", - INIT_08 => X"96140906D01981608AF43685992015DA5245D45628675859062835B511755017", - INIT_09 => X"6000B8F861B22CE39C0EC602ED202FC596B59458405845C55118595694001162", - INIT_0A => X"55A58300016D31668D5941040556516111611710005B4D4545716E190280595B", - INIT_0B => X"C968C00BA5BE80B2C68C00B65A3002C1BC8BA32CBE70C3EA02C9CAC89C59458A", - INIT_0C => X"0B1A0D6164EC408F8A047008D9CB622E2D19546CB32362C8BE8312FACC4BA202", - INIT_0D => X"4455CCCC1601143B2E45916976DC147401104104059F14685B456418596D1171", - INIT_0E => X"B4B55655D7453C5DA01654441070416015693378C475DC495A0458256156D15F", - INIT_0F => X"468751645665865943F040105B8164446641416011165018A11454D15D007415", - INIT_10 => X"8175134656FB96434615446289641B554684057595597595D066598611165695", - INIT_11 => X"18A6599B55F856501AD764059656556684017495497495C066598559C91D555D", - INIT_12 => X"5346166005EB404406411356518A35554684656685DD4686446112185F85B684", - INIT_13 => X"D555D6601585546854151468D5568546895EB4044115B4595F454E12599655D6", - INIT_14 => X"335D511B5557C55D467C504218A4E119C7135101456604AE1A05A1555F861668", - INIT_15 => X"91101161116169E0F5D448156855955595171C7110462859E41D55815FD556C1", - INIT_16 => X"153011465B440F059A495550560474598A50591544045B8105B8459841662905", - INIT_17 => X"16E16C16C16514546104654E051C0615418A9450651A1155A1B165662D1D417D", - INIT_18 => X"700111F690095D6159A445904D270024D7D3C3B711855915976D62896C56D165", - INIT_19 => X"62A10F7C5B0C0557D468857E5149D00170C316D15CCD6EC558AD0441D72116D2", - INIT_1A => X"97681F4400824581000023D4516DE3E2517161920D8D38057557861185921514", - INIT_1B => X"E152154484F551212D544846551210954484D551212154484515A45C3B78F895", - INIT_1C => X"457E256626804961925697473A0E2C44D0F51470F47849C431468400D048CD56", - INIT_1D => X"51105B8C05B445B315555C05417946285153C440619C2166018A4619C8598151", - INIT_1E => X"4595955BA2EA0761584405655975B59920519556E9056E0566859A4581645C14", - INIT_1F => X"9055965A909455530D5B16F1185118A55B15520D55159076C55AF455155B50B6", - INIT_20 => X"8085515155B6E90616D6E0146830806841851156724A0EC620DD04559653A415", - INIT_21 => X"75858C001F40514145B5B40507C305515155BA2D93E496D5695545B4605B9418", - INIT_22 => X"0810203080F20408032DA18003C200E266D1C15050400CF788038803844E58A1", - INIT_23 => X"0F203CCF4CF040B12103010203480F208C80A24CF04080D0C03C1023BC82F203", - INIT_24 => X"0600F6CFD04155043040000C38832340070840C04080F2103010203C803203C8", - INIT_25 => X"0A000C00000020061C7185CFEAAAAAAAAAAAAAAA95555555555555540B080387", - INIT_26 => X"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A", - INIT_27 => X"313A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A", - INIT_28 => X"00000000000000000000000000000000000000000001F0000000000000030000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(3 downto 2), -- Port A 2-bit Data Output - DOB => memBRead(3 downto 2), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(3 downto 2), -- Port A 2-bit Data Input - DIB => memBWrite(3 downto 2), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM2 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"0008000800000000000000010001002A000200000002000800000080000800C6", - INIT_01 => X"023AAAAAA028A040002A0000000002B000000000000000000000000000080000", - INIT_02 => X"AAA00B000020000C0000000002AAAAAAAA082AAAAAAA828AAAAAAAA008223032", - INIT_03 => X"AAA8CC000000E0000CC00E2AA33000000003800000030008300C2AAAAAAA3AAA", - INIT_04 => X"3C2828002830A0A000A0C020038AA8F02AAAA302AAAAA8000008300032A8038A", - INIT_05 => X"820800C0A0A000A0C282800283C2828002830A0A000A0F0A0A000A0C28280028", - INIT_06 => X"00000C00303000208600C841C0008C028AB00806C170000010000C0080002A30", - INIT_07 => X"8AB83808200000C000020C2000023002A830001E300380080002A00230100000", - INIT_08 => X"0000C00C00322300330800E0008020C088C0E280000B0003CC0020F08038AB83", - INIT_09 => X"40001DA0C0200401080400000CD880A23C00C23008C00A3B20303010102C8000", - INIT_0A => X"0000002AEC0C70000A0093220A8008C0230028EE00032A008CA00C230004F00B", - INIT_0B => X"9030420240C820130704202C1C108041C900C10A2CD04E0C00B34C80380E4000", - INIT_0C => X"8E32028C080030DA0244070DA342C0BC26AA40880A36C0A020D1008304020040", - INIT_0D => X"20A0303230280000AC0020A828028A20220000000C2080000B200030000C82C2", - INIT_0E => X"323200204380C300000080880B80A80B83008D037820E3A00008C0400000C203", - INIT_0F => X"00004800400008012C2000000300820808A323008D800A30008083C81C801000", - INIT_10 => X"8030808000C0002F8C0008C0000230000002200882883881C8CB0002FA000000", - INIT_11 => X"3080000A8030002A3220A08C0002800002200882883881C8CB000200C1200170", - INIT_12 => X"2F8C000AB0282A0A8CAFA006230000040008C8300080100408C08A820B003028", - INIT_13 => X"0002C0020208400002C8C1020800040002C282A0A800320003203C02000000C0", - INIT_14 => X"28002208005C2A840002A08A3009090828820E0900000A823200200507004300", - INIT_15 => X"0880A3000000020F00420E030000A080A0208208828C00000821810007080322", - INIT_16 => X"85002D080320300040088382000800000008C080E0AA0300E030A0000000008C", - INIT_17 => X"80C00C00C0010088C088C83C00028C002300800820000200013834000010B03C", - INIT_18 => X"0A20108A00290E4080038C088C00A20081C12810A30000E0A0A000000C02C804", - INIT_19 => X"C000020C0223C020C300000C002300C20882C0C813280FEF0008C0A8280900C0", - INIT_1A => X"8200000030428C0E008C100108E0CC084020000ABA882800380702E300026028", - INIT_1B => X"C0CE4280A240A02890280A240A02890280A200A02880280A2230228824330210", - INIT_1C => X"081C8000008000008C00C204DC280368800042CE0002C1C0A0000383A00E0280", - INIT_1D => X"0880030E803200308281822223088C00020082C0C08C630003008C08CA000000", - INIT_1E => X"00206003248C882E00238008023030008EB33021D0D00C002020400323020E80", - INIT_1F => X"08CA008A00888008AE0300F230223002030008AE02A00808A040812060030823", - INIT_20 => X"88B0060A0032E00880C0C8322821A22AA3020D83B00D808C182E28CA00878020", - INIT_21 => X"20000C003280A28E2030320C8B8220060A003248C6EA80C3003820302403026A", - INIT_22 => X"C2BA0AAC2AA0AE82A93AAEABA2A0B110EAAFA3EFEE8ABBAAC2C442444F300000", - INIT_23 => X"A90AA4BABAAAE82F04946BA0AAC2AA0AC82AE0BAAAE82AB24E5ABA09E42B90AA", - INIT_24 => X"AA8FAAAAACFBBEE8BED8AAA9EC0AEEBECAC1251AE82A905946BA0AA42AA0AA42", - INIT_25 => X"FAA00C000000700562A2FC8FC00000000000000000000000000000000E02C44E", - INIT_26 => X"FAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F", - INIT_27 => X"0D25500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F", - INIT_28 => X"0000000000000000000000000000000000000000000080000000000000020000", - INIT_29 => X"00000000000000000CF000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(5 downto 4), -- Port A 2-bit Data Output - DOB => memBRead(5 downto 4), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(5 downto 4), -- Port A 2-bit Data Input - DIB => memBWrite(5 downto 4), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM3 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"00040044000000020008000200020115000500020005000400020000000C0089", - INIT_01 => X"2975555550165082031500000000017218820002000200020002002000040000", - INIT_02 => X"5550070B0150281C000000008155555555849555555561555555555404117230", - INIT_03 => X"5555EE000000D8000CE00D9557B8000000036000000B80053000555555553555", - INIT_04 => X"31141484143450521050E090036555F0955557015555540000053200B9540365", - INIT_05 => X"4305181450521050D1414841431141484143450521050C450521050D14148414", - INIT_06 => X"088A0C0830B088305988C583C9824C914136660AEABA8A2AAA2A08084081160A", - INIT_07 => X"1544300C14808010800A0C1694A932055632082D3208420448095991A8684080", - INIT_08 => X"008210800A02130B030A8092006990C04620C540821702028C8290F568315443", - INIT_09 => X"9AB92A20C8084AAB01A820AB082640D53AA081A164C265B750A1702032124808", - INIT_0A => X"08016955148DF82021207E5595420685930996D9952351204C588C926A2FC00B", - INIT_0B => X"20E9A590C3A2192A9E9A590C3A6964A7A312A6830CEBA08A6433AA21310CA020", - INIT_0C => X"6E31A15036890AA312FD78AA33A084ACBE61820106E8843108A6A4229A90C4A4", - INIT_0D => X"11510AC9309402005C20185021614512190A28A28CF042020F108232008C45C4", - INIT_0E => X"31214814832100080940422454855404420142448520CC9E00A4C2C40808D90B", - INIT_0F => X"20268482C800150257062188232541244453130942420532044203C43C593612", - INIT_10 => X"7830466802C008134C8064C8208132082025942102102103D4C6202525980008", - INIT_11 => X"3241200540B2481531105A4C0002082025942102102103D4C6202520FB5002B0", - INIT_12 => X"134C801D711635AD4C525809932060882024C4202648202924C855430F223516", - INIT_13 => X"8282C80B91A8820265040201042028202691635AD44231040B103C99200003C8", - INIT_14 => X"9600999400AC154C98015A653207468C14C808871080914131A01A0A0F24C301", - INIT_15 => X"044853098808030C00C111820210C16080C44104654C8220949E86A80B240B19", - INIT_16 => X"4B46A224231280A0801E421B0AA401202064C048D1552324123252026480814C", - INIT_17 => X"48E88E88E8828204C864C42C90814C8053204205108099080A743C809070883D", - INIT_18 => X"0596A8858AA60CAA58004C066C60594203DB16B053201012505808208D03C468", - INIT_19 => X"C818807D4458A0C2C202603D081702E6862888C460988FDF02089AD4164688C6", - INIT_1A => X"420200A2B99B4C29286E640205F1CC088844081F49601684300F25132009D084", - INIT_1B => X"C9C2831215A0C4856831215A0C4856831215A0C485683121593251515C730222", - INIT_1C => X"203D4080904A20086864E4682C918096010081C30A0292C6442020EBD9160148", - INIT_1D => X"0548232D623112344203115113204C82084015E8C94D930063204C94D5202448", - INIT_1E => X"1080842348196501021064050170B2005553108554208C902010C06313012D42", - INIT_1F => X"04C500542A464205692388F93219320523420569084206041080560084234606", - INIT_20 => X"660408084234C2A548C8D63106851905632142433C9D654C965D54C5005B0A92", - INIT_21 => X"00201E21706259615232358C576854080842348195C541C3003112361A235591", - INIT_22 => X"005000100050140005055541515105505555514554414515441544554002020A", - INIT_23 => X"0500145455514015051545000140050014001055514000514054500114005001", - INIT_24 => X"4545554554515544005000055401555541414551400050515450001400500140", - INIT_25 => X"FFF00C000000501394E93A4FC000000000000000000000000000000005041545", - INIT_26 => X"FFFFFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F", - INIT_27 => X"093FFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F", - INIT_28 => X"0000000000000000000000000000000000000000000070000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(7 downto 6), -- Port A 2-bit Data Output - DOB => memBRead(7 downto 6), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(7 downto 6), -- Port A 2-bit Data Input - DIB => memBWrite(7 downto 6), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM4 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"02550195000200030077007600030359001E0003001C09DD000307EA00000064", - INIT_01 => X"706555555755A365027600130001222837780003000300030003001600120005", - INIT_02 => X"555709831042087800000000D355555554DA5555555536355555554D5AA46DF7", - INIT_03 => X"5541AA00002A2800AC82A25506A8000000A8A00002A200018329555555559555", - INIT_04 => X"A6956586F8AA55961BE2AAACA89541B85555060D555554AAC001822A2154A895", - INIT_05 => X"15564C3A55961BE2A956586F8A6956586F8AA55961BE29A55961BE2A956586F8", - INIT_06 => X"C4DD0F9C3E254D554C5A94D4A3500F07C1D00B5C330CF3C3F3CC5544DD52494A", - INIT_07 => X"E1B5D755571D97818E76755CE71835646436755036461D5558E13248A5555D99", - INIT_08 => X"DD953042010B03E0024CD486B931E7579D27491D5550765A0D55154409D21B5D", - INIT_09 => X"4424F150D91D3714CDB070020425D4601515551100F8018994D19555114041D5", - INIT_0A => X"75543554959F55D556679190489D554403E0072C4060DE140F41BA11D6E44451", - INIT_0B => X"6845704D611544DC545704D5111C1371144C1DC79E5C71E113697174D0747754", - INIT_0C => X"38344823553107174E413471697193C477905D84C7455344DE19D378574D9313", - INIT_0D => X"55DD48483E1B310505675CCD58860351454104100F441D5552558C3655B95098", - INIT_0E => X"65111AF8DD1AD055541D1D54F08F41D115509285CE0754B47450F82DDB5B6556", - INIT_0F => X"D550499F18E4B076DA4214846A8499649843C3E382555435685D9495496C3106", - INIT_10 => X"4DD55C3555001BD40D9110D5558C3701D5515951951D5114D0D2678221658145", - INIT_11 => X"340D6B9445289AC434711C0F9F15CDD5515951951D5114D0D2678267C4950175", - INIT_12 => X"F40D912D604235CD0D221D444356E005D550D1555381555500D97D875686A420", - INIT_13 => X"80549BE357DF5D553D7DD55A1DD555D557D4336CD746A5475E5D6A216391175A", - INIT_14 => X"010501F5405D40C8D5940C1435580D3849CE5740B18E1910340745C556881D5B", - INIT_15 => X"9B4603E049D9C0084555521555D5710555774D34040D536B8421F9D453441141", - INIT_16 => X"041175106E554455555F9551036500638510F943D169668356285678818E340F", - INIT_17 => X"D8F98F98F98FDD00D920DD6A08440D9103545D563755637555C621AE0505C164", - INIT_18 => X"1157D3918169757BC8590F9710611503950440C103644653210DD555BE179544", - INIT_19 => X"D54C433594B0854455550145755140154527D89514BD8B95754C1CD64F0D1906", - INIT_1A => X"5551405045830F8D75D16D155464110C4D99D918486C8049DD528503667CD750", - INIT_1B => X"A3429553102554C409553102554C409553102554C4095531003C972139044313", - INIT_1C => X"D151519E005111D94414170D204D0484CA4555500503216C59D5301C3526441B", - INIT_1D => X"57046685066556A495D5DD4103D10D51773591C0DE4C83E503570DE4CD6B889D", - INIT_1E => X"1775776F4CCF97A4766261D877D536396DC347407021AA255525558D03E7055D", - INIT_1F => X"30F31DBD15BBDD56706F9BF83648357C6F5D547377B6FD0855545F35776F3A33", - INIT_20 => X"8837575776B0C15859D9843C816FE39A4366411D28401C0D41F3E0FB1D9F4566", - INIT_21 => X"07670D146590C32F1676610FF31267545776B40CCCCFC89D59D5A6E8DC6F2CDF", - INIT_22 => X"CC30300C00300C000C320499A95208E1C4535A2755E92DCB882389238A427556", - INIT_23 => X"000002951C50C080313003030BC02D003400811C50C002CB87E43003F803E300", - INIT_24 => X"5841550C544F955C0740000C380831B1C14C8C00C0C023330030300800D00000", - INIT_25 => X"FFF00C000000F01400FFEAB3C0000000000000003FFFFFFFEAAA9543850823A8", - INIT_26 => X"555555555555555555555555555555500000000000000000000000000000000F", - INIT_27 => X"3A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5", - INIT_28 => X"00000000000000000000000000000000000000000000B0000000000000020000", - INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(9 downto 8), -- Port A 2-bit Data Output - DOB => memBRead(9 downto 8), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(9 downto 8), -- Port A 2-bit Data Input - DIB => memBWrite(9 downto 8), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM5 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"0028016800040002006B00A40002002500150002001500200002078500620060", - INIT_01 => X"090555555A16501F0555001E00011554543400020002000200020008001C0004", - INIT_02 => X"555A082282D08E55000000009355555555841555555561455555555058510938", - INIT_03 => X"5564320000C598030D3C595590C80000031660000C58C0246FC1555555550555", - INIT_04 => X"12084505C8182114172040DF165564345555903D55555715C0246FC58D571655", - INIT_05 => X"96296A48211417206084505C81A084505C8182114172058211417206084505C8", - INIT_06 => X"E18B5B896D1CD962A7546A5450CF5B71580861C4E138618E91B8586205916041", - INIT_07 => X"17146758A54584656E0B18A04CF16646C1660945661A862854D183703F0F0588", - INIT_08 => X"0582C0F063C156D030459915F861A18480718705961516185996751FBC617146", - INIT_09 => X"378E9CA59823E272012C64BB400C144101558A49B5B4BD50710945615F380059", - INIT_0A => X"1852855419554461645F509EE3462926D6D2F546F1595CCC5B756511B2343155", - INIT_0B => X"B7702AFAD5CB6C8B1702AFAD9C0AB629CBD9C4BA28082E8CBEA02C8E801A1166", - INIT_0C => X"0166AC531C4502C8D941902C80263E735D40066BA5723A8DA8CCBEA322DAFEBE", - INIT_0D => X"A01240416D1107E5A19151016694527B3730C30C5B44061651A15D6601668510", - INIT_0E => X"DA01D4D9861C12585D05065D2811A8519615D0104661940514C5B41453955451", - INIT_0F => X"6168095D15E114149C58BE2F5542950D5956D6D080162966440614694692E3C5", - INIT_10 => X"40628441544996DA5988A599654D643461695D65165D65D45596534A07012D74", - INIT_11 => X"668D5784B55457D16459CA5B8496B061695D65165D65D4559653465304D4BC14", - INIT_12 => X"CA5985D59F72958459207121566453606155996169016161A5985D5559451715", - INIT_13 => X"4D5555D195940616913116116061606165B7295844555A2759A175215B85D555", - INIT_14 => X"70B417352F056B6A715694656668C4C6756858D0D14D121D66E164A05D440611", - INIT_15 => X"80ACD6D20058E080458A141616C58D8595B41041C55991577DC058B25D774D57", - INIT_16 => X"A01F145855A314C58515165132DC89574495B80B0855514715545534054D025B", - INIT_17 => X"17495497495C066598559D45356659889666462941859D185867416D14046975", - INIT_18 => X"99524CDD7720192513505B84634995CA1454710996622409D9C0596565546840", - INIT_19 => X"996DF895A74805A21616894518A86430CC0D5568440545001645484671C4D444", - INIT_1A => X"561B22C94D195B472D1345162807D10000A4582043DF16F464514116627A61A5", - INIT_1B => X"5100966998A59A662966998A59A662966998A59A66296699896E9892E1FC400C", - INIT_1C => X"6545195D1AC85458697806A50148143DF1458A102C00D046646190140D247717", - INIT_1D => X"280F5144451A15D51616D05456C1599118412815927256E196655927215B4460", - INIT_1E => X"11858751486456951621685817855578511641A9DF0165016105845C16E02E06", - INIT_1F => X"35B8051B0CB846294559D7456619664659462A441B75B441C587E5058759A619", - INIT_20 => X"641759587598E0C15454556E8BAA56A5566140865C12B2596B3255B40507C305", - INIT_21 => X"C1632BBD073618665515155B50B647595875948676CA8846106405D4D05DA420", - INIT_22 => X"C030003C40F10C040D284715799040C1155498499FE9FDA30103010304C41658", - INIT_23 => X"0D1036025D60C0F617D18300080422103440125D60C0420B00C4301190424003", - INIT_24 => X"D0456C31905419FC4108000C300999F50245F460C000C14D1830003040D10344", - INIT_25 => X"AAA00C000000002AAA555573EAAAAAAAAAAAAAAA955555555555555407010320", - INIT_26 => X"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA", - INIT_27 => X"003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", - INIT_28 => X"0000000000000000000000000000000000000000000060000000000000020000", - INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(11 downto 10), -- Port A 2-bit Data Output - DOB => memBRead(11 downto 10), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(11 downto 10), -- Port A 2-bit Data Input - DIB => memBWrite(11 downto 10), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM6 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"00000000000000000001000200000000000200000002008800000300000000B0", - INIT_01 => X"202000000800080A010000000000080202B20000000000000000000200000000", - INIT_02 => X"0008A20300A00C02AAAAAAAA0B00000000020000000000000000000002002830", - INIT_03 => X"0000B8AAAAC002AB2CBC000002E2AAAAAB000AAAAC0EEA800FC8000000000000", - INIT_04 => X"84A000A0C2828002830A22CF000000B00000023C00000300EA800FC0EC030000", - INIT_05 => X"000003028002830A0A000A0C284A000A0C2828002830A328002830A0A000A0C2", - INIT_06 => X"3C0003000CA33000040300400B38030004028238020082002600000C8C080000", - INIT_07 => X"8A08CB00028C0A803C31300EA08000208000200800208C0003C8380232828C02", - INIT_08 => X"8C000B04881380C8800F0400B03803020093020C000A30280000202224C0A08C", - INIT_09 => X"003914C000B6C0E02C000003000820C882A00080003200900D800800B802D8C0", - INIT_0A => X"30003002B808C8C004033000800C020000C802409E0608CE03080080A00C0302", - INIT_0B => X"C0D00083034C08010D100830340028034CB3403C3000030420C004DA00322302", - INIT_0C => X"E0002A07384C004DB0C22004D00B6894C2820CAE22D364D8304820C120932820", - INIT_0D => X"00E002C00C811C0028A3282C08228A2400CB2CB203C08C0000002C0008000200", - INIT_0E => X"000E80CACC0B80002A0C0C80280088C20008800A22B32C0E30803220CB808800", - INIT_0F => X"C002283E00C289320830C830042028000200C0C8200000002A8C80000022BC30", - INIT_10 => X"88C0020880BB82C800080000003C02F8C0000C08408008008002032202088038", - INIT_11 => X"022C0B02300202C0000020030A00B8C0000C0840800800800203220B08800010", - INIT_12 => X"C8000A04800A12240020200280022F80C000000001080000200000010020A080", - INIT_13 => X"BE8081C90A260C0010BA8008A8C000C00100A122401000030C0030880F0A0080", - INIT_14 => X"0A00822000040020688002080028208008480200401C8A80002302800C200C08", - INIT_15 => X"00A000C8D8C0C0800000028000E00C20200082082000080B202050200E020802", - INIT_16 => X"000218020C02208000050088F8834C0F2A20300FB400002380C20072201CA803", - INIT_17 => X"00882883881C8CB000200C008880000800028C00230002300003203C81004038", - INIT_18 => X"000008428210320A080A03020820002200880A80000202B92028C00028000022", - INIT_19 => X"00890210803420210000280A30001020B8C8C200000C1800302F82430A2083B2", - INIT_1A => X"0000D0B68823032CC0A208000200000C20A8C0E000830008C800228000B06320", - INIT_1B => X"0820808E8CA023A12808E84A023A12808E84A023A12808E8480C0B8AE0040304", - INIT_1C => X"C808003C8233A0C00C30080800009008320000000B83A00828C0082808800001", - INIT_1D => X"00B00820E0C000A08080022200C6000A322860C0083880C000020083800F2028", - INIT_1E => X"E320230E188022AA300E24C13380203035000332ED0C20800080020E80C03C8C", - INIT_1F => X"70320C8A08388C003602C18800000022028C00363330F3888002A2E0230A2220", - INIT_20 => X"2263020230E1E0880182800C92308AAA0000384C8C202300C23220320C8B8220", - INIT_21 => X"E303800A0100820A0060A003082303020230E18800DAB48C08C8B0E0C80202AA", - INIT_22 => X"4AAA2AA4AAA2AA8AAB2AEEEAE2A12512CFEFA2FAAA8F2AA2C59444944F803000", - INIT_23 => X"A32A8CAAABAAA8EF04892AA3AC4AB02AD0AAC2ABAAA8AB12CF7EAA2B4CA932AA", - INIT_24 => X"AE8EEAAFA8FBFAA8AE94AAAAAC8FABAA8A81224AA8EA305892AA3A8CAAB2A8CA", - INIT_25 => X"00000C000000100000000033C00000000000000000000000000000000A04944E", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"1500000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"00000000000000000000000000000000000000000000A0000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(13 downto 12), -- Port A 2-bit Data Output - DOB => memBRead(13 downto 12), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(13 downto 12), -- Port A 2-bit Data Input - DIB => memBWrite(13 downto 12), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM7 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"028200020002000000020081000001800000000000000A4600000320002A00CA", - INIT_01 => X"905000000C800680020000080000444101710000000000000000001100000002", - INIT_02 => X"000C51A6981A9A015555555587000000002140000000081000000006010850B2", - INIT_03 => X"0001745555E001579D7E000005D15555578005555E0DD5410FE400000000A000", - INIT_04 => X"4C521050D1414841434519CF80000172000005BC00000380D5410FE0DC038000", - INIT_05 => X"00800311484143450521050D148521050D1414841434521484143450521050D1", - INIT_06 => X"B21023208C60000808020082040823582DA15A0A0A828A202A0202024C040620", - INIT_07 => X"5454C702054C25583CB23201564080111480B02080B14C8202C4451530504C29", - INIT_08 => X"4C2CD70F843F88C6782C0E40B2442321A663258C008530942000508418C9454C", - INIT_09 => X"90332AA202A8C4867C420A02E68152956550205C02310276425C64087C4124C0", - INIT_0A => X"320900014031E4C8090F7980048C817008C409D4390C4DAD23442049465EBE08", - INIT_0B => X"A6EA40229BAA42128EA40229BA900843AA22A93A69924E9A08A64AA22E319301", - INIT_0C => X"1080551FB198A8AA21E92A8AA64A88A82A6D8C6B22EA88A329A508A694328808", - INIT_0D => X"091921E08C46AC38145316580551649C4024924923E24C8008083C80A4202506", - INIT_0E => X"809103D78C9C4802118C8C50462554C94085486515E31E1D32123198C7831708", - INIT_0F => X"C805903D82C942314421C0700C1514904108C8C518408080114C42002005E000", - INIT_10 => X"64C82514423FC3D4202E1200002C8134C8000C048048048202080B1484546834", - INIT_11 => X"81380F25708102D882181023258074C8000C048048048202080B140BA642AAA2", - INIT_12 => X"D42025987905A11A208844A948010368C80200080368080812025822081080C0", - INIT_13 => X"0D4202C615198C803475408494C808C802D05A11A220C0A30C0830540B258202", - INIT_14 => X"45A24450AAA8001ED44005148016322E0482011A9C2C554C8013056A0C128C84", - INIT_15 => X"267108C424C2CAA22020854080D02C10102165961120040B501AB6060C09A404", - INIT_16 => X"2A80668308085210208B405C3410A90B1512326F49010C17408110F1542C5423", - INIT_17 => X"42102102103D4C6202520C204660202E08014C80932001320243982C52A28031", - INIT_18 => X"800422C160763185560523251E58003082160568080B914B1814C00020820259", - INIT_19 => X"00470222620A101A808054213206208A2193C202621C225A301FD1A305320225", - INIT_1A => X"408028096013231C01580480818028AE6674C292201F5104C60814480A709312", - INIT_1B => X"05A8405D4A5017529405D4A5017529405D4A5017529405D4A48D445D900A2B99", - INIT_1C => X"C421882C5F0098C24E6697488A6D6201F520208A80EBD91434C81A9690E40082", - INIT_1D => X"81700C11108080C14040851988D92005316491C20534C8C808012053440F1254", - INIT_1E => X"1310130866891415309108C2332080B255482315568030580850212D48C9BC4C", - INIT_1F => X"B2358C41A1714C810908C22080848011084C81093370B4E690215110130841A2", - INIT_20 => X"119301013086DA150202108D206544150809068C5E980520407852358C576850", - INIT_21 => X"D30B40018241451440808423460613010130866895E50E4C84C54086C6085545", - INIT_22 => X"4410101440510404051545555151455155455154554145554515451540283001", - INIT_23 => X"0510145455504015151141010144051054405055504040514154101054415101", - INIT_24 => X"5445551554515554415400041401555541454450404051511410101440510144", - INIT_25 => X"55500C000000D00000000033C000000000000000000000000000000005051544", - INIT_26 => X"5555555555555555555555555555555555555555555555555555555555555555", - INIT_27 => X"1515555555555555555555555555555555555555555555555555555555555555", - INIT_28 => X"00000000000000000000000000000000000000000000E0000000000000010000", - INIT_29 => X"00000000000000000CD000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(15 downto 14), -- Port A 2-bit Data Output - DOB => memBRead(15 downto 14), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(15 downto 14), -- Port A 2-bit Data Input - DIB => memBWrite(15 downto 14), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM8 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"015502550005000300F6005200030357002A0003002A066500030BDD001C000F", - INIT_01 => X"793000000D4EC7C70123002F0001191522250003000300030003003D00060009", - INIT_02 => X"000D601010C040A555555554DA00000001DCC000000077600000001645953DFD", - INIT_03 => X"0024C9555693855A7CB92A00932555555A4E15556932D564899E00000000A000", - INIT_04 => X"5D961BE2A956586F8AA567064E0024F0000093A4000002405564CB932C024A80", - INIT_05 => X"5D510E56586F8AA55961BE2A955961BE2A956586F8AA566586F8AA55961BE2A9", - INIT_06 => X"A2CD6E8D995445D50415505D54486DAC86F2014401004100D90F76420F951317", - INIT_07 => X"1510D0756C0F85016A08356D69D1AE7545BE09D1BE090D551595211564540F86", - INIT_08 => X"0F805644C511DB9595044165E874C364C783450F96543E146F9B074370D9510D", - INIT_09 => X"D0059716B8C5137DC0372001534D13641227546416A51443126409D9590120F9", - INIT_0A => X"36560854A95A40D9CF52944C950D51909A94912C5C5517E569C5555639E4D274", - INIT_0B => X"1C5D34787171C74DC5D34787174D1531714974D1874D34571E113716083403E4", - INIT_0C => X"11BC45059E74587172579D87113C5A54D9100D71F15C56148574D215D3785A1E", - INIT_0D => X"57101951A951691C0443C079D85206791520820865500D917555498E15555D43", - INIT_0E => X"5643D4020DC94C76460F0D54FD2FB0F89D9E0713B48365143E566570FDD56475", - INIT_0F => X"D9515D4955A1203DB50398E455555344471A9996A41D51BE6B0D1D51D5B6B105", - INIT_10 => X"10D5514C5D3FD4116B8D1639C1459E40D9C401D0DD3DD2DD36BE5659440CD400", - INIT_11 => X"9F7C5E85475555A1AF08416284DD00D9F401D01D31D21D36BE56595B07104410", - INIT_12 => X"016B86C4001110346B344830DAE76470D916F1D9C089D9C816783811755571F1", - INIT_13 => X"905DD595B4040D9C0A341D9FD0D9C0D98D1111034FC55553757DD5545E865D17", - INIT_14 => X"11907484261415500C0179A5BE6373A31C467445C5596D8D8C03C3F0755C0D9D", - INIT_15 => X"83E4589420F845D51755749D9C37408777410410826F9657E7434002771C0034", - INIT_16 => X"354053475556521764441D2BC0A4815E5456A851083F555955557525B559536A", - INIT_17 => X"951951D5114D0D2678263DD55BD1678D58E60D5903659436431C1549535241DD", - INIT_18 => X"44003B04E4403403010B6681900440719D0110345BE343C85440F9715CDD5515", - INIT_19 => X"7986431374C5975D9D99B9D835502D49FC805555310551403E56034C107395E0", - INIT_1A => X"9D9120C85C8066553413241D5C5014B168B0F8D350CD1D40D275549BE1100366", - INIT_1B => X"54B49D071CE741C739D071CE741C739D071C2741C739D071CD815C8654051858", - INIT_1C => X"D1D145596B4080F8C1518D8456E6310CD53754060C2C353430D91D85BC110115", - INIT_1D => X"5264555525557571DDDD84001BD76B9437189636B0241BA01AE46B024D525D40", - INIT_1E => X"0377485474C5E3903E3400F03FC755E86D59C3478B415575D96767055BA26C0D", - INIT_1F => X"E6A10F207A310D5D0455154D8E21AE7F540D550437D5EC0C6767EA6748574D31", - INIT_20 => X"EF2D7675C576C499D515DDAD233DBA2F18E0360D814C1E67410C66A10FB31265", - INIT_21 => X"03E10116505841CC7565776BFB332B767485444C49EF430D90DD1554E856A57E", - INIT_22 => X"060010B042F18004022C024D1C0C8C024C88055CCD9726B03330313015D43E70", - INIT_23 => X"2E10B94C860800712F77200103040C105040C086080040C8029A0013B84AE10B", - INIT_24 => X"7D02A0C02689FCD84294002EC00712EB68CBDDC80042C2F7720010B040210B84", - INIT_25 => X"00008C00000000000000003CC0000000000000003FFFFFFFEAAA954349323032", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"0000000000000000000000000000000000000000000C20000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(17 downto 16), -- Port A 2-bit Data Output - DOB => memBRead(17 downto 16), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(17 downto 16), -- Port A 2-bit Data Input - DIB => memBWrite(17 downto 16), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM9 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"009600160000000600E4009200060557000C0006000C02960006039300FA003A", - INIT_01 => X"B5D000000581E4BC081000060000110A155A0006000600060006004200740002", - INIT_02 => X"000959D19C274612555555558600000001AD000000006B60000000120541D009", - INIT_03 => X"00176555560F45581050E6005D955555583D155560F955579000000000002000", - INIT_04 => X"811417206084505C818201B03D00174C00005DC0000000331557D00F94003980", - INIT_05 => X"05904844505C8182114172060811417206084505C818204505C8182114172060", - INIT_06 => X"00B95D4956847059025610062B41597E299E04403812086A800816305B801AB3", - INIT_07 => X"16159116405B452D7501664AC09D5E01854D00657D01599654685565C7F75B44", - INIT_08 => X"5B405444511054691C433355D45496618696555B86456D155784919B25916159", - INIT_09 => X"970A02C57472B208C4E68B5073F10827B8D166E7551A574890E7B45841D905B8", - INIT_0A => X"6608B8000D640598E4514E75D5599B9D54695D15555904C55955628C08C3901A", - INIT_0B => X"C00B65A3002C1BE880B25A3002E96FA02CB02E9C30CB670268CB22CAE16696E1", - INIT_0C => X"356F85644232302C85304B02CBE7201284D6591C100B20C8302FA0CCBEB32C68", - INIT_0D => X"5A1BF03D468501103796DC24564AC421C50C30C3550C59841859454D1161632D", - INIT_0E => X"85D4D448590820161C5B595667C5A5B00581FCE8121643C16C95DA45B0D65418", - INIT_0F => X"985951471451596F6CB8120458A153154515546A2F45996E0059061061011525", - INIT_10 => X"659969F546555451534615B81D455DA5981400574554574665B551AAF5F542E5", - INIT_11 => X"6E55514D618A545D4CF26151450565984400574554574665B151AA555CD50306", - INIT_12 => X"615B4500879C03135F4F516357E04A6598053058E04058E495F4D4C818A5A16D", - INIT_13 => X"2B06D5689712598E0D3485815598E5986439C031312585AA184862965D454615", - INIT_14 => X"5C56557980C2D511356D69554E245A019110147CD1668D555F16CD6E18AD5981", - INIT_15 => X"4547156A05B44C709165B5058C4155014151861854578151255C0A1E1890E155", - INIT_16 => X"2C2148055859485162900507A804095DA5159403033C58A4458A051A45469451", - INIT_17 => X"D65165D65D4559653465B062850D534657E159901662056619D03156BAC41061", - INIT_18 => X"B40CA027558966CDB0B5594581EB405406459A4355D1A9405265B84963061695", - INIT_19 => X"B88C400052E3616445894869665813035A621616A3C160716E0031309D5A160E", - INIT_1A => X"85810003DF1055A137F7C24592C0B0534655B4753E2568459918A017D1809655", - INIT_1B => X"2ABF45A916115A458456916115A458456916D15A4584569161554844B32CD4D2", - INIT_1C => X"90665146A34835B4405B2243F45997E25841667C00140D3415982F3F5F100D16", - INIT_1D => X"914458A14585B58D0505057316525381649A743537DD175394E25B7DD251A445", - INIT_1E => X"564156596A42E5216D10D5B16F1195145157D6798BF562805801602E55501859", - INIT_1F => X"55955BA2D8F159910159565D4D217E105A5995016785D8328160E61156594E90", - INIT_20 => X"ED891416A5952D91D6561D652197FA6617D2065983117557579455155B50B645", - INIT_21 => X"96D1C15CCF5965D07595875966192514156597A438065D59859925A5D55A7182", - INIT_22 => X"86601098427198040F00102D2065F4638C0066147C25890194D197D1A48D6E32", - INIT_23 => X"2F10BD01DBE980D133F4660103040C10F04001DBE98040CF435E60123048C109", - INIT_24 => X"41CC71F0461277C043200020184454DCA90C7D198042D31F466010B440F10BC4", - INIT_25 => X"00000C00000000000000003CEAAAAAAAAAAAAAAA95555555555555540D14D180", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"0000000000000000000000000000000000000000000B70000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(19 downto 18), -- Port A 2-bit Data Output - DOB => memBRead(19 downto 18), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(19 downto 18), -- Port A 2-bit Data Input - DIB => memBWrite(19 downto 18), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM10 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"00000000000200000042000800000003000A0000000A00000000038300200000", - INIT_01 => X"300AAAAAA020C232008800040000088008000000000000000000000800020000", - INIT_02 => X"AAA00002000008000000000000AAAAAAA8042AAAAAAA010AAAAAAA8020080088", - INIT_03 => X"AA800000008F00020208C0AA00000000023C000008F00000088CAAAAAAAA0AAA", - INIT_04 => X"0002830A0A000A0C282820323C2A800CAAAA00E2AAAAAA330000C88F02AA302A", - INIT_05 => X"8C0800000A0C2828002830A0A0002830A0A000A0C2828000A0C2828002830A0A", - INIT_06 => X"00300020200000C0A1000A0C000002088CA200005C130CB400003000030080C3", - INIT_07 => X"020002302E0320083088002282802C00880C88C83C880000C000083000800320", - INIT_08 => X"0322C80CE030C20033203A80C2CB0000E00022030A800C830F0A2321A0082000", - INIT_09 => X"020C00407253203845C00010EF0EF6002003008C60406000008C08C000200030", - INIT_0A => X"000003AAA80820008C020809000002318101802138028CC00E20000838403030", - INIT_0B => X"4202C0C108040C8010241C108090720804C0093413A20D00B042004C0C0000C0", - INIT_0C => X"802D008C8E130004D020800042893401283000252C01344D1008344020C13030", - INIT_0D => X"008A4000100000328380C228C82C20A028000000063200023000082C800000C0", - INIT_0E => X"02A8408800BCD830040300828028A0328C009022AA0000000EA0800030C08030", - INIT_0F => X"00A0000A0008280C031A0E8000000B8020C18000808C083C0A000C08C0A20800", - INIT_10 => X"000000808C9540880F24C0F0A0183C8000A2A0C78C78C68C90B000080080A800", - INIT_11 => X"0C100020230080883C080804208C8000A2A0C78C78C68C90B00008020822A882", - INIT_12 => X"880720A2880288820F00008800C0A800008070C0C0A8C0C140320BE030002868", - INIT_13 => X"A00C000080A0000C0A120C004000C000880028882000002E3028C0000C208C00", - INIT_14 => X"02A03008AA200022008010800C001222002A3008243000041C40D082300C0002", - INIT_15 => X"20808202003208CF6300308C0EA32823032C208220030202210210BA32028B30", - INIT_16 => X"08D080B10000B62300200C028200260C0080C20B80FF0000000030003800020C", - INIT_17 => X"C084080080080020322030C02A200B2401C0000880028000200AA000258210C8", - INIT_18 => X"82A22200A08000200A0A0820C2282A1A8CA0000800C90280080030A00B8C0000", - INIT_19 => X"7038030C21E023288C0238C80023663238A100000C2002080C000822021200A2", - INIT_1A => X"8C0C088083000C003020CD8C08382EA2083032C0008420000A3000C0C8000020", - INIT_1B => X"00F08C08A0A3022828C08A0A3022828C08A023022828C08A08280A2C0D0B6882", - INIT_1C => X"00C800000108003200820121208428084F63002088280880B000FC0A230B8800", - INIT_1D => X"088000002000300C8C0CB208838A0300000AA21072EA030B82C00F2EA2000820", - INIT_1E => X"802328022802E2A80C8AE0300F2320023A02C0294F080038C023003C03080E00", - INIT_1F => X"206003248E340008E002008C3C903C08020008E00380E000E30008A328021E00", - INIT_20 => X"ECAA3232802208C0C0808C386200BAA2C3C8E20012002B0B0281206003082300", - INIT_21 => X"00C82C04338C00893020230E2220EA32328022800A22AC00000AA020E00200AA", - INIT_22 => X"8BAA2AC8AB22EA8AAA3AAAABAEF12242EAEEFAAAEAEAB9EB858904893FB00C38", - INIT_23 => X"B62ADAAFAAAEA88604013AA2AD8AB62AA8AAA3AAAEA8AB6ECAA3AA299CAE72AC", - INIT_24 => X"FA8BABAAF8BEAEACBAC0AABBF88B3FAB8FC1804EA8AB706013AA2ADCAA22AD8A", - INIT_25 => X"00000C00000000000000003CC00000000000000000000000000000000B05893B", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"00000000000000000000000000000000000000000002C0000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(21 downto 20), -- Port A 2-bit Data Output - DOB => memBRead(21 downto 20), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(21 downto 20), -- Port A 2-bit Data Input - DIB => memBWrite(21 downto 20), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM11 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"010002800005000000C1008400000003002100000021040000000B0B00000080", - INIT_01 => X"300555555818C13E024600280002446044400000000000000000001400210008", - INIT_02 => X"5558001502C05488000000002055555554085555555502055555554490240A60", - INIT_03 => X"55400000005F20014925C05500000000017C800005F080001652555555554555", - INIT_04 => X"284143450521050D141494397C95402E555500D95555557B8000D65F09557015", - INIT_05 => X"4C06A011050D1414841434505284143450521050D1414A1050D1414841434505", - INIT_06 => X"08300810202228C05A80858C82220C544955A62AAEABAEBA2AA230A8232640C7", - INIT_07 => X"81820930112311843064801515403C98683C64CC3C642000820254B002222311", - INIT_08 => X"2319C42EE8BAC200709BF860C11608091088112325648C440F25531652041820", - INIT_09 => X"0AAA64A0B1AA88B6AE80A0F9CB0D89600123002ED080D0A1082E04C2601C8232", - INIT_0A => X"80B1F855540592024B086067802000BB42034297B9016AC008640821B6A83830", - INIT_0B => X"A590C3A6964A7A3129083A696430E8864AA6423AE830CEA4A9A084AA0C8048C8", - INIT_0C => X"402E609E6DA6824AA1855024A08AA99B160820AA6292A9AA6A4229A908A6A9E9", - INIT_0D => X"0155C680202440B64308D144C55D125014820820088920293200203C44080420", - INIT_0E => X"21158224204A263099232052441402364C257115550828288DD0801236C05232", - INIT_0F => X"025008204204448D20BD0F420204075350030300404C042C95208C84C8591480", - INIT_10 => X"120000824C6A82140F18C0B258202D42025358CF4CF4CF4C70F6080202425682", - INIT_11 => X"2D2E0814132042102D960C0C114C42025358CF4CF4CF4C70F608020811195469", - INIT_12 => X"140F1159658164C80B60264402C9144202E0B8C2CA74C2C6C0F140DA32001498", - INIT_13 => X"508C820240D8202CA5A58C268202C2024698164C8BB0201D3214C8120C114C82", - INIT_14 => X"41582246551A8099826834902C91209986B53201DC3018282FC8F041320C2024", - INIT_15 => X"14404302823121C09300314C2D531653231C1041590B25085301B0E5318547A2", - INIT_16 => X"812A614202024993081A8C9343921D0C01408167603C02062020808004200508", - INIT_17 => X"C048048048202080B140B8C815580B1803C9200648096080914544201F19B8C4", - INIT_18 => X"635309A05A60803045A50814A916352D4C51801602C6196216023258074C8000", - INIT_19 => X"B2642B997AD453154C2904C48011F864F8BA80800C1809048C988C8B81208071", - INIT_1A => X"4C2886A01F5A0808B007D24C040A0258047231C180889E2205320603C46A4810", - INIT_1B => X"80704C945513251544C945513251544C945513251544C9455031215D42809601", - INIT_1C => X"08C528201A2E02316950461B05582C08889300706A9690E6B2029C005E94E8C0", - INIT_1D => X"044202085020302C4C8C718442140B248247C1B0F4D18206C3C90B4D15080612", - INIT_1E => X"4813140150A9C5588C5692388F9310815542C81567040804C25309BC02058D20", - INIT_1F => X"80842348197820041901405C3C782C95012004188320C6849309555314016C2A", - INIT_20 => X"CC55313140158184C0404C219A25715003C510202846A50F6A46008423460610", - INIT_21 => X"08C41C890A4D24963010130841A215313140150A91905D2022045012D6015414", - INIT_22 => X"4050001400501400051411551455445144445554554505515511551140808CB4", - INIT_23 => X"0500154555414015155545000500140050004155414001414154500154015001", - INIT_24 => X"5545515054551554015400055445555541451551400051455450001400500140", - INIT_25 => X"00000C00000000000000003CC000000000000000000000000000000001151151", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(23 downto 22), -- Port A 2-bit Data Output - DOB => memBRead(23 downto 22), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(23 downto 22), -- Port A 2-bit Data Input - DIB => memBWrite(23 downto 22), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM12 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"039A019A000D000B001200DA0007023A001E000F001E0FDA000F0BD9003C00CC", - INIT_01 => X"B69555554C5750DF077600150001D65619160003000B0003000B007E00620009", - INIT_02 => X"554C39042084105A00000001DD55555555D955555555769555555565615EB5BE", - INIT_03 => X"554AAC0000192000620183552AB000000064800001B8800A0819555555549555", - INIT_04 => X"686F8AA55961BE2A9565862064954A8855552A255555506A800A481B855060D5", - INIT_05 => X"0F947491BE2A956586F8AA559686F8AA55961BE2A9565A1BE2A956586F8AA559", - INIT_06 => X"55E4555D553130F9471D940D531356044986430CC330E31F333C3E346A848391", - INIT_07 => X"35D6B03E5162555DD551BE454D416A32594950D1695D6F969D55D0B050106257", - INIT_08 => X"6A55650674135555948D2557551899E1D319DC6686C599575286C34146735D6B", - INIT_09 => X"0B511375E55C5CCB20300054564209022543E5E74557415004E410F8141746E8", - INIT_0A => X"AE0A5E5545D396F84475FC1100639791155105719777D7445735D550CB8C5434", - INIT_0B => X"704D5111C1371164C4DA119C13584551371134971C79E5D3C571D371018C5BA1", - INIT_0C => X"994753E402D391371FF80D1371A5C46D51346795104DC671DD378774DE15C546", - INIT_0D => X"5B5A9011555CD497541A5760FB60D8541C4D34D354C86B843665D9495DD99522", - INIT_0E => X"64695D546782203E03646F924107E6D50F86A6360919C905A7E55556E49D9436", - INIT_0F => X"B8440DDE1D5511B9048D4B53755C343160951559A40F957A056F0D90D94114C7", - INIT_10 => X"D679D4140D155DD85255D5E851D14116B87360F80F80F00D0537757F43D40796", - INIT_11 => X"7410755803559DF9600C1C55540FD6387360F80F80F00D0534757C75D144000D", - INIT_12 => X"D8525415078455CE5804350557A1910638D530F845D0F840E5651B0C35474055", - INIT_13 => X"450D5D5551C06F8451150F8B46F8467840C8455CEC0766083640D5A775540D9D", - INIT_14 => X"C435C39600054001D41427915A29110183343D0001D5B8055FDAF500354C6B86", - INIT_15 => X"5E50155F46A5765083E7050F8583D043C3C4D34D43568A75400001C83704D943", - INIT_16 => X"092310E176738BC3E0850F1317C143755645556B5856754057556754DDD55B55", - INIT_17 => X"1D05D35D25D36BE56595F0D52318565417A1679C5AE171AE108065D5B81070DC", - INIT_18 => X"137710413751AC75D19455584241371D0D284586159535150C16284DD40D9740", - INIT_19 => X"68B51C594F5503C60F85C0DDBE728B201C6CDD960905D341AA04DCE847119D04", - INIT_1A => X"0F8C5FD0CDD555441033720F9048321F20C6655390C4D1167C355C5495C159F5", - INIT_1B => X"54650F25F943C97E50F25F943C97E50F25F943C97E50F25F99553100D20C86C8", - INIT_1C => X"B0D3CDD5C10D16651A0001CA4C27190C4C83E467FD85FC2686B8D90E8F841C1D", - INIT_1D => X"9B517557476727680F0FB03495F05689BECE30C59D995556D6A05DD991756036", - INIT_1E => X"9AC3CC76F058CBDDA96706F9BF837755E8D719DE3645D500F8C3E26C15549C6B", - INIT_1F => X"75776F40CEB46F9098761DF5694D6A1D776B9C198FF7418483E18F83EC767C15", - INIT_20 => X"CF6C3C3EC76E0CC7DD9D71515318703B9794416707741951E1AF35776F3A3327", - INIT_21 => X"1995184149CDC7DFA76748564D310C3C3CC76F45BAFA416F86F01755E5775604", - INIT_22 => X"C13000BC02E04C002D999D80225BDDC38B0652041E3E0C672F772F7700859A10", - INIT_23 => X"3900D6125104C0BE1369130006001000D000C25104C001872DE13009E407500B", - INIT_24 => X"9B24DA1D155701E2091800057049300F44449A44C003B116913000DC02D00F40", - INIT_25 => X"00000C00000000000000003F00000000000000003FFFFFFFEAAA954314EF7729", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"00000000000000000000000000000000000000000002B0000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(25 downto 24), -- Port A 2-bit Data Output - DOB => memBRead(25 downto 24), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(25 downto 24), -- Port A 2-bit Data Input - DIB => memBWrite(25 downto 24), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM13 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"048000800000000200D00184000A017000000002000011200002000000180188", - INIT_01 => X"7C5555555854138606440000000108641104000E0006000A0002005000C00000", - INIT_02 => X"5558042D08A0B41A00000001AD555555549155555555E41555555541A0206648", - INIT_03 => X"55715C000240F00919240F55C57000000903C000243480300640555555555555", - INIT_04 => X"405C8182114172060845114903D571635555C5955555590C80300643455903D5", - INIT_05 => X"5B801D017206084505C818211405C8182114172060845017206084505C818211", - INIT_06 => X"CF9158A961AC95B82D05825991BD5A818146BA784E178E05EE196D1F5140921C", - INIT_07 => X"B005756E115DA14862955E25811175003146959146905384061691264ACA55A0", - INIT_08 => X"59A42C80120D1614043907018A5255D15255DD5D458556865145564855BB005F", - INIT_09 => X"01CCB2259A0B2392C28EB25C2C44439D7556E1C065846DC42FC145B4B017F5D4", - INIT_0A => X"5D045055085455F440192D596B5B87059615B7094314F0445810596FD2990D67", - INIT_0B => X"2AFAD9C0AB629CBFAFADDC0ABEB572DBE2CBEB0208A280BA712A3A2C017F5451", - INIT_0C => X"11556380E4B31F22CC8459F22A00B2C9AD2F53440AC8B22C8BAA332CA8CCB170", - INIT_0D => X"20521D116161320750D75445BA63043113F3CF3C5A8353456600614680580100", - INIT_0E => X"61C0465D5B55056D2C59536A410615565B4484160756D1354445850590451166", - INIT_0F => X"34540464C6282165840F2FC01644185361165611845B8175155F598598574301", - INIT_10 => X"95B81610590006D555A145D454614515B44D55B85B05B059451518414910F155", - INIT_11 => X"754218A4566586A15676D758A25B95745945B85B05B05945151841195403B8C5", - INIT_12 => X"D551A2D57526556851549CC515512185746555B44C55B454651AD2896651552D", - INIT_13 => X"8559861581715344E5155B4405F4557449226556808162B96615991018A25946", - INIT_14 => X"26810900EE302D971042C7156514441D7E116C47006114D165575485665C5744", - INIT_15 => X"A0C05611F51A011016E3015B4416DC56D6D50410605144194847857167575649", - INIT_16 => X"8501D75816390056D02C5B13154B001851558A06B000164401658184C0614458", - INIT_17 => X"0574554574665B151AA515999DD755A194515B8256D1855D195248612057559C", - INIT_18 => X"294541ADD1C95F545C0658A6DD729444592D35B5D46841BCF6D5145056598440", - INIT_19 => X"149C18D3853DD6ED5B46C5954E2306988017058001305075452D168064440507", - INIT_1A => X"5B45DE3E255C5866C889405B844000F7C4859A19500318D5F56654D4686755D5", - INIT_1B => X"94C55B661556D98555B661556D98555B661556D98555B6615966998090003DF1", - INIT_1C => X"3592E46160BFE5DAB10482E8425701001416E005E33F6F15057471E127141505", - INIT_1D => X"80C9165B516301415B5B0701161251457D340D55D4531628D7525D4509184AA5", - INIT_1E => X"16D6E0146835CA997694559D7456518A815556F59C405905B416D01856291657", - INIT_1F => X"8587514864C4538C5A1605E146B57504145784994C01A31416D14956D0141E0C", - INIT_20 => X"CD516D6D0145C6464505A965E90EB3E9566B0C5F1536A2596A25058759A61921", - INIT_21 => X"5468563D4019C7D5514156594E90616D6E0146C37529415345B4115925148658", - INIT_22 => X"01C0003000C07000268DD053D75C7D13203354162007003471F473F46485451C", - INIT_23 => X"020009137507003F200E1C000C003400D00003750700030D29C1C00BC00F0003", - INIT_24 => X"CC244C4D1D8522020A340015444E300FD448038700000200E1C0000002D00080", - INIT_25 => X"00000C00000000000000003F2AAAAAAAAAAAAAAA95555555555555541931F475", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(27 downto 26), -- Port A 2-bit Data Output - DOB => memBRead(27 downto 26), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(27 downto 26), -- Port A 2-bit Data Input - DIB => memBWrite(27 downto 26), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM14 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"000A000A00020008000A0002000400B2000A0008000A008A000C000A00100010", - INIT_01 => X"3C00000002000B2100020000000000020882000C000800000004000A00060002", - INIT_02 => X"0002800A00C02800AAAAAAA80400000003080000000042000000000008082020", - INIT_03 => X"00300EAAA808FAA00C008F00C03AAAAAA023EAAA80B02AB22008000000000000", - INIT_04 => X"2A0C2828002830A0A000802023C0303B0000C0000000002E2AB2200B000023C0", - INIT_05 => X"0302A00830A0A000A0C2828002A0C2828002830A0A000A830A0A000A0C282800", - INIT_06 => X"322C0000000F2030098C00000AC20218800000408020003A00A00C9008220000", - INIT_07 => X"3000B00C08080028C0002C008CC030B82000000000000B0A0C00001031310403", - INIT_08 => X"080003203C800000000302230088C3CB2C00CF0420E030020020000200F3000F", - INIT_09 => X"0284200000013410000200FB000402024000C082C002C087A08260320D0F0002", - INIT_0A => X"1C88F20068CB00320032CA23C00F020B000B0203C230201A00B0C00610320001", - INIT_0B => X"00830340024034CA0830340020C0D302C0420C0001C30028D0036C04002D0108", - INIT_0C => X"CC390F8224230200473B002007401083A38D0B0080801204828C120B304810D1", - INIT_0D => X"2B020380000CCE810202820030002ACC0B082082000003200008C80000C02802", - INIT_0E => X"004C8C800F22000C8E0E072BB02AA0A003228022B000F80018400000228C0000", - INIT_0F => X"7202A8CC8C002008E004CD363022A22F0A808008200300308807000000200D83", - INIT_10 => X"4070A00200000C00000240C208C0188072012030030030004022302201020A80", - INIT_11 => X"3802300200028CA00A8A040000030032012030030030004022302232C0A80B28", - INIT_12 => X"000000000880004802201A200008A820F24020320800321260002A2000232800", - INIT_13 => X"A0008C000C4A0B208080032230B210720008000488830208000000823000008C", - INIT_14 => X"0008812A02CA808202280340308C0A8280900FC200C08BE03940902800240B22", - INIT_15 => X"0234800B00400A0000C3A0032000C200C0C820820A0022322904885000800281", - INIT_16 => X"2209082030310040C888038181680230000000030082302223002302E8C00200", - INIT_17 => X"0C78C78C68C90B0000802000A02800020008070001C8203C880808C0A0281003", - INIT_18 => X"A121A82029842D1002A00002420A1204002880CA000088080A004208C8000A2A", - INIT_19 => X"0233E882882000C80320E0080C0E0A284C208C024008C0AC10800488800A8C00", - INIT_1A => X"032E0CC0840800023421000303022020C080C00080C20BA070002200000E03C0", - INIT_1B => X"0B000302E000C0B800302E000C0B800302E000C0B800302E0808E84000880830", - INIT_1C => X"B002E8C088442000220300C83023800C1400C300CC0A33000032C00B0700280C", - INIT_1D => X"003630032303A32803032088808800201CC82C30E08A000243080E0882302220", - INIT_1E => X"82C0C8322820D2881003602C1880230035C081C88008C0A032C0C80E00000C0B", - INIT_1F => X"20230E18800B030389304CE000303088320703880C23280000C88880C8322E08", - INIT_20 => X"DE080C0C8320883A8C8CA008A00036AA8300AE0F0221300E1312E0230A2220E3", - INIT_21 => X"03000BCE003CC3C2A32328021E00880C0C83228208AAA00720B0E32A223212A9", - INIT_22 => X"0ABA2A90AA42AE8AB02AAEFA8AC18042EFAACFBAAB4AAEAB060104013F402082", - INIT_23 => X"AC2AB3AAAEEAE8940911ABA2AB8AAE2AB8AAE2AEEAE8AAE84B2ABA2DB0A6C2A9", - INIT_24 => X"AB4EAAEAB2AAAAB4BA84AAAAB08BAAAA2A42C46AE8AAD0B11ABA2AB4AB42AB0A", - INIT_25 => X"00000C00000000000000003F000000000000000000000000000000002E06012A", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"0000000000000000000000000000000000000000000170000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(29 downto 28), -- Port A 2-bit Data Output - DOB => memBRead(29 downto 28), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(29 downto 28), -- Port A 2-bit Data Input - DIB => memBWrite(29 downto 28), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); - ZPU_RAM15 : RAMB16_S2_S2 - generic map ( - INIT_A => X"0", -- Value of output RAM registers on Port A at startup - INIT_B => X"0", -- Value of output RAM registers on Port B at startup - SRVAL_A => X"0", -- Port A ouput value upon SSR assertion - SRVAL_B => X"0", -- Port B ouput value upon SSR assertion - WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE - SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" - INIT_00 => X"012501250005000C00850021000C04790015000800150445000C06A500A20022", - INIT_01 => X"3E0000000102861A0021001A000062014461000800080008000C000500090005", - INIT_02 => X"00016181A9A606405555555408000000020400000000C1800000002406860012", - INIT_03 => X"00380D555416F5504C816F00E0355555505BD555417215799015000000000000", - INIT_04 => X"150D141484143450521044505BC038370000E0000000005D1579901720005BC0", - INIT_05 => X"232560943450521050D141484150D1414841434505210543450521050D141484", - INIT_06 => X"00220200080CA232424C242006C10156652140C2A0A8208A00A08C600C152802", - INIT_07 => X"7960B48C94080954C8002C90603830464420020820060B290C804A2B0A8A0808", - INIT_08 => X"0801A099B260808262038663204603C45802DC0C111020210811482500B7960F", - INIT_09 => X"B21A08408092A834489A08F2B02D6019E008C8D9C021C81E70D9D231028F00C1", - INIT_0A => X"3C65F50054C400B126310D53AA0B236700872053A93255150278C00D7442A482", - INIT_0B => X"40229BA900843AA20229BA9008A6EA90C4A08A6493A69908EA4E884AE83E0304", - INIT_0C => X"083213991D0B0084AC3620084E992813008A0B666021294A508A694329A528EA", - INIT_0D => X"941900480802026609C30522351855428704104100200F1080A4C42028C29489", - INIT_0E => X"09924C500B55848C49080F5E48945081231541904403C48021D020A0854C8880", - INIT_0F => X"F11354CE4C829821D2282A093015515E4540408412232430540F202202542263", - INIT_10 => X"C0B252C920AA8C820809A0C114C82140F11A123A23A23A20A08132192B490540", - INIT_11 => X"31A9320188014C4821458A02082340F11A123A23A23A20A08132193189540F14", - INIT_12 => X"82080840056000820852B53082055430F180823121423135908045108013168C", - INIT_13 => X"50204C8060860B121484231580B130B12056000826630914809200493208204C", - INIT_14 => X"60147B5503C56A444956B3C8304DAD4164688CA9A8C840D832822238801B0B15", - INIT_15 => X"050A408700809D8A08CB58231148D108C8D65965050811315FBC68B48264017B", - INIT_16 => X"3987081A30B361C8C641238A42DC6932092020630669301593001321D4C82502", - INIT_17 => X"8CF4CF4CF4C70F60802082005016080982040F2403C4582C4D2424C852942208", - INIT_18 => X"5A12D4581F1C3F2241500201C105A1AA20896085820254018580C114C4202535", - INIT_19 => X"81709601658808D02311D2042C992E2EAE684C29A084C9682040482661AD4CA0", - INIT_1A => X"231F1CC0888102070A2228232621A807D66080894AE65C90B4801182024003D0", - INIT_1B => X"060023511408D445023511408D445023511408D4450235114405D4AA486A01F5", - INIT_1C => X"F208D4C846C8108005EA29C4245760AE6A08CA81CC005E9120F1C00A4B12968C", - INIT_1D => X"26093003130B531623235855404608102D249870C644408183040C6451321180", - INIT_1E => X"42C8D6310685E5402010908C22081320554202D55024C0523108C58D80818C0F", - INIT_1F => X"1013086689640B2442308CC820343062310B24402E93142648C56148D6315DA1", - INIT_20 => X"ED148C8D631068854C4C500542A579414301690F86B5240C527110130841A213", - INIT_21 => X"82028B29217CE3C1531314016C2A548C8D6310685441680F10F6131181315052", - INIT_22 => X"4150005401505400051555515555155155055515155504555455555540A03041", - INIT_23 => X"1100451145454055115515000500140050004145454001414151500144051005", - INIT_24 => X"5544555515551154011400155405100554441545400111055150004400500440", - INIT_25 => X"00000C00000000000000003F0000000000000000000000000000000015545555", - INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", - INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", - INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", - INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") - port map ( - DOA => memARead(31 downto 30), -- Port A 2-bit Data Output - DOB => memBRead(31 downto 30), -- Port B 2-bit Data Output - ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input - ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input - CLKA => clk, -- Port A Clock - CLKB => clk, -- Port B Clock - DIA => memAWrite(31 downto 30), -- Port A 2-bit Data Input - DIB => memBWrite(31 downto 30), -- Port B 2-bit Data Input - ENA => re, -- Port A RAM Enable Input - ENB => high, -- PortB RAM Enable Input - SSRA => low, -- Port A Synchronous Set/Reset Input - SSRB => low, -- Port B Synchronous Set/Reset Input - WEA => memAWriteEnable, -- Port A Write Enable Input - WEB => memBWriteEnable -- Port B Write Enable Input - ); -end dualport_ram_arch; diff --git a/zpu/hdl/zpu3/src/xmake.filelist b/zpu/hdl/zpu3/src/xmake.filelist deleted file mode 100644 index 3d0a779..0000000 --- a/zpu/hdl/zpu3/src/xmake.filelist +++ /dev/null @@ -1,5 +0,0 @@ -vhdl zylin "zpu_config.vhd" -vhdl zylin "zpupkg.vhd" -vhdl work "dmips_ram.vhd" -vhdl zylin "zpu_top_bram_intstack.vhd" -vhdl work "testlut.vhd" diff --git a/zpu/hdl/zpu3/src/xmake.xst b/zpu/hdl/zpu3/src/xmake.xst deleted file mode 100644 index bfdb23f..0000000 --- a/zpu/hdl/zpu3/src/xmake.xst +++ /dev/null @@ -1,53 +0,0 @@ -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/zpu3/src/zpu_config.vhd b/zpu/hdl/zpu3/src/zpu_config.vhd deleted file mode 100644 index 506121c..0000000 --- a/zpu/hdl/zpu3/src/zpu_config.vhd +++ /dev/null @@ -1,25 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; - -package zpu_config is - - constant Generate_Trace : boolean := false; - -- 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"; - -- maximum address includes upper bit for IO registers - -- the rest is RAM - constant maxAddrBit : integer := 14; - constant minAddrBit : integer := 2; - -- 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 ioBit : integer := maxAddrBit+1; - constant wordPower : integer := 5; - constant wordSize : integer := 2**wordPower; - -end zpu_config; diff --git a/zpu/hdl/zpu3/src/zpu_pipelined.vhd b/zpu/hdl/zpu3/src/zpu_pipelined.vhd deleted file mode 100644 index 207939d..0000000 --- a/zpu/hdl/zpu3/src/zpu_pipelined.vhd +++ /dev/null @@ -1,852 +0,0 @@ --- Company: ZPU3 --- Engineer: Øyvind Harboe - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; -use IEEE.STD_LOGIC_arith.ALL; - -library zylin; -use zylin.zpu_config.all; -use zylin.zpupkg.all; - - -entity zpu_top is - Port ( clk : in std_logic; - areset : in std_logic; - io_busy : in std_logic; - io_read : in std_logic_vector(7 downto 0); - io_write : out std_logic_vector(7 downto 0); - io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); - io_writeEnable : out std_logic; - io_readEnable : out std_logic; - interrupt : in std_logic; - break : out std_logic); -end zpu_top; - -architecture behave of zpu_top 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 busy : std_logic; - -signal begin_inst : std_logic; - - - -signal trace_opcode : std_logic_vector(7 downto 0); -signal trace_pc : std_logic_vector(maxAddrBit downto 0); -signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); -signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); -signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); - -type DecodedOpcodeType is -( -Decoded_Stall , -Decoded_Nop , -Decoded_Im , -Decoded_ImShift , -Decoded_LoadSP , -Decoded_StoreSP , -Decoded_AddSP , -Decoded_Emulate , -Decoded_Break , -Decoded_PushPC , -Decoded_PushSP , -Decoded_PopPC , -Decoded_Add , -Decoded_Or , -Decoded_And , -Decoded_Load , -Decoded_Not , -Decoded_Flip , -Decoded_Store , -Decoded_Storeb , -Decoded_PopSP , -Decoded_Ashiftleft , -Decoded_Ashiftright , -Decoded_Lshiftright , -Decoded_Eqbranch , -Decoded_Neqbranch , -Decoded_Eq , -Decoded_Neq , -Decoded_Loadb , -Decoded_Lessthan , -Decoded_Lessthanorequal , -Decoded_Ulessthan , -Decoded_Ulessthanorequal , -Decoded_Duplicate , -Decoded_Duplicate2 , -Decoded_Duplicate3 , -Decoded_MoveDown, -Decoded_MoveDown2, -Decoded_MoveDown3, -Decoded_Pushspadd, -Decoded_Callpcrel, -Decoded_Sub -); - - -signal decode_pc : std_logic_vector(maxAddrBit downto 0); -signal decode_fetchedPC : std_logic_vector(maxAddrBit downto 0); -signal decode_fetched : std_logic; -signal decode_opcode : std_logic_vector(OpCode_Size-1 downto 0); -signal decode_opcodeWord : std_logic_vector(wordSize-1 downto 0); -signal decode_starved : std_logic; -signal decode_wordStarved : std_logic; -signal decode_willBeStarved : std_logic; -signal decode_idim_flag : std_logic; - -signal execute1_stall : std_logic; -signal execute1_fetched : std_logic; -signal execute1_decodedOpcode : DecodedOpcodeType; -signal execute1_fetchedPC : std_logic_vector(maxAddrBit downto 0); -signal execute1_sp : std_logic_vector(maxAddrBit downto minAddrBit); -signal execute1_opcode : std_logic_vector(opCode_Size-1 downto 0); -signal execute1_spOffset : std_logic_vector(4 downto 0); -signal execute1_fetchPC : std_logic_vector(maxAddrBit downto 0); -signal execute1_push1 : std_logic; -signal execute1_push2 : std_logic; -signal execute1_pop1 : std_logic; -signal execute1_pop2 : std_logic; -signal execute1_antialias : std_logic; -signal execute1_savedTopOfStack : std_logic_vector(wordSize-1 downto 0); - - -signal load_decodedOpcode : DecodedOpcodeType; -signal load_opcode : std_logic_vector(opCode_Size-1 downto 0); -signal load_spOffset : std_logic_vector(4 downto 0); -signal load_stall : std_logic; -signal load_willBeStalled : std_logic; - -signal execute2_opcode : std_logic_vector(opCode_Size-1 downto 0); -signal execute2_topOfStack : std_logic_vector(wordSize-1 downto 0); -signal execute2_addResult : std_logic_vector(wordSize-1 downto 0); -signal execute2_topOfStackB : std_logic_vector(wordSize-1 downto 0); -signal execute2_pc : std_logic_vector(maxAddrBit downto 0); -signal execute2_sp : std_logic_vector(maxAddrBit downto minAddrBit); -signal execute2_loading : std_logic; -signal execute2_loadByte : std_logic; -signal execute2_storeByte : std_logic; -signal execute2_loadingDone : std_logic; -signal execute2_decodedOpcode : DecodedOpcodeType; -signal execute2_spOffset : std_logic_vector(4 downto 0); -signal execute2_persistTopOfStack : std_logic; -signal execute2_persistTopOfStackB : std_logic; -signal execute2_resync : std_logic; -signal execute2_resync2 : std_logic; -signal execute2_resync3 : std_logic; -signal execute2_resync4 : std_logic; -signal execute2_resync5 : std_logic; -signal execute2_resync6 : std_logic; -signal execute2_resync7 : std_logic; -signal execute2_resync8 : std_logic; -signal execute2_resync9 : std_logic; -signal execute2_resync10 : std_logic; - - -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 - ); - end generate; - - - memory: dualport_ram port map ( - clk => clk, - memAWriteEnable => memAWriteEnable, - memAAddr => memAAddr, - memAWrite => memAWrite, - memARead => memARead, - memBWriteEnable => memBWriteEnable, - memBAddr => memBAddr, - memBWrite => memBWrite, - memBRead => memBRead - ); - - opcodeControl: - process(clk, areset) - variable compareA : signed(wordSize-1 downto 0); - variable compareB : signed(wordSize-1 downto 0); - variable execute1_doFetch : boolean; - begin - if areset = '1' then - break <= '0'; - begin_inst <= '0'; - memAAddr <= (others => '0'); - memBAddr <= (others => '0'); - memAWriteEnable <= '0'; - memBWriteEnable <= '0'; - memAWrite <= (others => '0'); - memBWrite <= (others => '0'); - - memBAddr <= (others => '0'); - memBWrite <= (others => '0'); - - - io_writeEnable <= '0'; - io_readEnable <= '0'; - io_addr <= (others => '0'); - io_write <= (others => '0'); - - -- stage 1. Don't care since this is driven by stage2 - decode_pc <= (others => '0'); - decode_fetched <= '0'; - decode_starved <= '0'; - decode_opcode <= (others => '0'); - decode_opcodeWord <= (others => '0'); - - -- stage 2. - execute1_antialias <= '0'; - execute1_fetchPC <= (others => '0'); - execute1_fetched <= '0'; - execute1_decodedOpcode <= Decoded_Stall; - execute1_sp <= (2 => '0', others => '1'); - execute1_push1 <= '0'; - execute1_push2 <= '0'; - execute1_pop1 <= '0'; - execute1_pop2 <= '0'; - execute1_stall <= '1'; - - -- stage 3 - load_decodedOpcode <= Decoded_Stall; - load_stall <= '1'; - load_willBeStalled <= '1'; - - -- stage 4 - decode_idim_flag <= '0'; - execute2_pc <= (others => '0'); - execute2_sp <= (2 => '0', others => '1'); - execute2_loading <= '0'; - execute2_loadByte <= '0'; - execute2_storeByte <= '0'; - execute2_loadingDone <= '0'; - execute2_decodedOpcode <= Decoded_Stall; - execute2_resync <= '1'; - execute2_resync2 <= '0'; - execute2_resync3 <= '0'; - execute2_resync4 <= '0'; - execute2_resync5 <= '0'; - execute2_resync6 <= '0'; - execute2_resync7 <= '0'; - execute2_resync8 <= '0'; - execute2_resync9 <= '0'; - execute2_resync10 <= '0'; - execute2_persistTopOfStack <= '0'; - execute2_persistTopOfStackB <= '0'; - - -- stage 5 - memBWriteEnable <= '0'; - - - elsif (clk'event and clk = '1') then - memAWriteEnable <= '0'; - memBWriteEnable <= '0'; - io_writeEnable <= '0'; - io_readEnable <= '0'; - begin_inst <= '0'; - - -- stage0: fetch - decode_willBeStarved <= '0'; - if (decode_fetched='1') then - -- resync #4 - decode_opcodeWord <= memARead; - decode_pc <= decode_fetchedPC; - elsif (decode_pc(minAddrBit-1 downto 0)=b"11") then - decode_willBeStarved <= '1'; - else - -- we can continue decoding. - decode_pc <= decode_pc + 1; - end if; - - -- stage 0b: move to byte.. - -- resync #5 - decode_starved <= decode_willBeStarved; - case decode_pc(minAddrBit-1 downto 0) is - when "00" => decode_opcode <= decode_opcodeWord(31 downto 24); - when "01" => decode_opcode <= decode_opcodeWord(23 downto 16); - when "10" => decode_opcode <= decode_opcodeWord(15 downto 8); - when others => decode_opcode <= decode_opcodeWord(7 downto 0); - end case; - - -- stage1: decode 1 - execute1_opcode <= decode_opcode; - - execute1_spOffset(4)<=not decode_opcode(4); - execute1_spOffset(3 downto 0)<=decode_opcode(3 downto 0); - - execute1_decodedOpcode<=Decoded_Break; - - decode_idim_flag <= '0'; - - -- resync #6 - -- resync #1 - if (decode_starved = '1') then - execute1_decodedOpcode<=Decoded_Stall; - decode_idim_flag <= decode_idim_flag; - elsif (decode_opcode(7 downto 7)=OpCode_Im) then - decode_idim_flag <= '1'; - if (decode_idim_flag = '0') then - execute1_decodedOpcode<=Decoded_Im; - else - execute1_decodedOpcode<=Decoded_ImShift; - end if; - elsif (decode_opcode(7 downto 5)=OpCode_StoreSP) then - if (decode_opcode(4 downto 0)=b"10001") then - execute1_decodedOpcode<=Decoded_MoveDown; - elsif (decode_opcode(4 downto 0)=b"10010") then - execute1_decodedOpcode<=Decoded_MoveDown2; --- elsif (decode_opcode(4 downto 0)=b"10011") then --- execute1_decodedOpcode<=Decoded_MoveDown3; - else - execute1_decodedOpcode<=Decoded_StoreSP; - end if; - elsif (decode_opcode(7 downto 5)=OpCode_LoadSP) then - if (decode_opcode(4 downto 0)=b"10000") then - execute1_decodedOpcode<=Decoded_Duplicate; - elsif (decode_opcode(4 downto 0)=b"10001") then - execute1_decodedOpcode<=Decoded_Duplicate2; - elsif (decode_opcode(4 downto 0)=b"10010") then - execute1_decodedOpcode<=Decoded_Duplicate3; - else - execute1_decodedOpcode<=Decoded_LoadSP; - end if; - elsif (decode_opcode(7 downto 5)=OpCode_Emulate) then - execute1_decodedOpcode<=Decoded_Emulate; - if decode_opcode(5 downto 0)=OpCode_Neqbranch then - execute1_decodedOpcode <= Decoded_Neqbranch; - elsif decode_opcode(5 downto 0)=OpCode_Eq then - execute1_decodedOpcode <= Decoded_Eq; - elsif decode_opcode(5 downto 0)=OpCode_Lessthan then - execute1_decodedOpcode <= Decoded_Lessthan; - elsif decode_opcode(5 downto 0)=OpCode_Ulessthan then - execute1_decodedOpcode <= Decoded_Ulessthan; - elsif decode_opcode(5 downto 0)=OpCode_Loadb then - execute1_decodedOpcode <= Decoded_Loadb; - elsif decode_opcode(5 downto 0)=OpCode_Storeb then - execute1_decodedOpcode <= Decoded_Storeb; - elsif decode_opcode(5 downto 0)=OpCode_Pushspadd then - execute1_decodedOpcode <= Decoded_Pushspadd; - elsif decode_opcode(5 downto 0)=OpCode_Callpcrel then - execute1_decodedOpcode <= Decoded_Callpcrel; - elsif decode_opcode(5 downto 0)=OpCode_Sub then - execute1_decodedOpcode <= Decoded_Sub; - end if; - elsif (decode_opcode(7 downto 4)=OpCode_AddSP) then - if (decode_opcode(3 downto 0) = 0) then - execute1_decodedOpcode<=Decoded_Ashiftleft; - elsif (decode_opcode(3 downto 0) = 1) then --- execute1_decodedOpcode<=Decoded_AddSP; - elsif (decode_opcode(3 downto 0) = 2) then --- execute1_decodedOpcode<=Decoded_AddSP; - else - execute1_decodedOpcode<=Decoded_AddSP; - end if; - else - case decode_opcode(3 downto 0) is - when OpCode_Nop => - execute1_decodedOpcode<=Decoded_Nop; - when OpCode_PushSP => - execute1_decodedOpcode<=Decoded_PushSP; - when OpCode_PopPC => - execute1_decodedOpcode<=Decoded_PopPC; - when OpCode_Add => - execute1_decodedOpcode<=Decoded_Add; - when OpCode_Or => - execute1_decodedOpcode<=Decoded_Or; - when OpCode_And => - execute1_decodedOpcode<=Decoded_And; - when OpCode_Load => - execute1_decodedOpcode<=Decoded_Load; - when OpCode_Not => - execute1_decodedOpcode<=Decoded_Not; - when OpCode_Flip => - execute1_decodedOpcode<=Decoded_Flip; - when OpCode_Store => - execute1_decodedOpcode<=Decoded_Store; - when OpCode_PopSP => - execute1_decodedOpcode<=Decoded_PopSP; - when others => - execute1_decodedOpcode<=Decoded_Break; - end case; - end if; - - - -- stage 2: execute 1 - load stage. - -- - -- the address must be known without using the value on top of the stack... - -- resync #3 - execute1_fetched <= '0'; - decode_fetched <= execute1_fetched; -- the value in memAAddr will be valid for 1 cycle only - decode_fetchedPC <= execute1_fetchedPC; - - if (execute1_fetchPC(1 downto 0)/=b"00") then - execute1_fetchPC <= execute1_fetchPC+1; - end if; - - execute1_push1 <= '0'; - execute1_push2 <= execute1_push1; - execute1_pop1 <= '0'; - execute1_pop2 <= execute1_pop1; - - if ((execute1_push1 and execute1_push2)='1') then - memAWrite <= execute2_topOfStack; - else - memAWrite <= execute2_topOfStackB; - end if; - - -- resync #7 - case execute1_decodedOpcode is - when Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_Load | Decoded_Loadb | Decoded_Store | Decoded_Storeb | Decoded_Emulate | Decoded_PopSP | Decoded_PopPC| Decoded_Callpcrel => - execute1_stall <= '1'; - when others => - -- nothing... - end case; - - execute1_antialias <= load_stall; - execute1_doFetch := false; - case execute1_decodedOpcode is - when Decoded_PushSP | Decoded_Emulate => - execute1_sp <= execute1_sp - 1; - execute1_push1 <= '1'; - execute1_doFetch := true; - when Decoded_Duplicate3 => - memAWriteEnable <= ((execute1_push1 and execute1_push2) or - (execute1_push1 and not execute1_pop2) or - (execute1_push2 and not execute1_pop1)) and - (not execute1_antialias and not execute1_stall); - memAAddr <= execute1_sp + 2; - execute1_sp <= execute1_sp - 1; - execute1_push1 <= '1'; - when Decoded_Im | Decoded_Duplicate | Decoded_Duplicate2 => - execute1_sp <= execute1_sp - 1; - execute1_push1 <= '1'; - execute1_doFetch := true; - when Decoded_LoadSP => - memAAddr <= execute1_sp+execute1_spOffset; - execute1_sp <= execute1_sp - 1; - execute1_push1 <= '1'; - when Decoded_AddSP => - memAAddr <= execute1_sp+execute1_spOffset; - when Decoded_MoveDown2 => - execute1_sp <= execute1_sp + 1; - execute1_pop1 <= '1'; - execute1_doFetch := true; - when Decoded_Ulessthan | Decoded_Lessthan | Decoded_Eq | Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_MoveDown | Decoded_Add | Decoded_Sub | Decoded_Or | Decoded_And | Decoded_PopPC | Decoded_StoreSP => - -- be afraid :-) - memAWriteEnable <= ((execute1_push1 and execute1_push2) or - (execute1_push1 and not execute1_pop2) or - (execute1_push2 and not execute1_pop1)) and - (not execute1_antialias and not execute1_stall); - memAAddr <= execute1_sp + 2; - execute1_sp <= execute1_sp + 1; - execute1_pop1 <= '1'; - when others => - execute1_doFetch := true; - end case; - - if execute1_doFetch then - -- resync #2 - -- some instruction that does not change the stack pointer - -- and does not need use a memory operand. - -- We can fetch the next word to be decoded to avoid stalls - execute1_fetchPC <= execute1_fetchPC+1; - memAAddr <= execute1_fetchPC(maxAddrBit downto minAddrBit); - execute1_fetchedPC <= execute1_fetchPC; - execute1_fetched <= '1'; - end if; - - - -- stage 3: fetching memory takes 1 cycle - -- here we also verify that we've fetched & decoded the right - -- opcode. - -- resync #8 - load_decodedOpcode <= execute1_decodedOpcode; - load_opcode <= execute1_opcode; - load_spOffset <= execute1_spOffset; - load_stall <= execute1_stall; - -- resync #9 - if (load_stall = '1') then - execute2_decodedOpcode <= Decoded_Stall; - else - execute2_decodedOpcode <= load_decodedOpcode; - end if; - execute2_opcode <= load_opcode; - execute2_spOffset <= load_spOffset; - - -- stage 4: execute 2 - we now have both operands. This is the - -- main execute stage... - begin_inst <= '1'; - trace_pc <= execute2_pc; - trace_opcode <= execute2_opcode; - trace_sp <= execute2_sp; - trace_topOfStack <= execute2_topOfStack; - trace_topOfStackB <= execute2_topOfStackB; - - execute2_pc <= execute2_pc + 1; - execute2_loading <= '0'; - memBWriteEnable <= '0'; - - case execute2_decodedOpcode is - when Decoded_PopSP => - execute2_sp <= execute2_topOfStack(maxAddrBit downto minAddrBit); - - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - execute2_resync <= '1'; - when Decoded_Callpcrel => - execute2_topOfStack <= (others => DontCareValue); - execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1; - execute2_pc <= execute2_pc + execute2_topOfStack(maxAddrBit downto 0); - execute2_persistTopOfStack <= '1'; - when Decoded_PopPC => - execute2_pc <= execute2_topOfStack(maxAddrBit downto 0); - execute2_sp <= execute2_sp + 1; - - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - execute2_resync <= '1'; - when Decoded_Emulate => - execute2_sp <= execute2_sp - 1; - - execute2_topOfStack <= (others => DontCareValue); - execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1; - execute2_topOfStackB <= execute2_topOfStack; - - memBWriteEnable <= '1'; - memBAddr <= execute2_sp+1; - memBWrite <= execute2_topOfStackB; - -- The emulate address is: - -- 98 7654 3210 - -- 0000 00aa aaa0 0000 - execute2_pc <= (others => '0'); - execute2_pc(9 downto 5) <= execute2_opcode(4 downto 0); - execute2_persistTopOfStack <= '1'; - when Decoded_Im => - execute2_sp <= execute2_sp - 1; - for i in wordSize-1 downto 7 loop - execute2_topOfStack(i) <= execute2_opcode(6); - end loop; - execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0); - - execute2_topOfStackB <= execute2_topOfStack; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - when Decoded_ImShift => - execute2_topOfStack(wordSize-1 downto 7) <= execute2_topOfStack(wordSize-8 downto 0); - execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0); - when Decoded_LoadSP => - execute2_sp <= execute2_sp - 1; - execute2_topOfStack <= memARead; - execute2_topOfStackB <= execute2_topOfStack; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - when Decoded_Break => - report "Break instruction encountered" severity failure; - break <= '1'; - when Decoded_PushSP => - execute2_topOfStack <= (others => DontCareValue); - execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp; - - execute2_sp <= execute2_sp - 1; - execute2_topOfStackB <= execute2_topOfStack; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - when Decoded_Add => - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= execute2_topOfStackB + execute2_topOfStack; - execute2_topOfStackB <= memARead; - when Decoded_Sub => - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= execute2_topOfStackB - execute2_topOfStack; - execute2_topOfStackB <= memARead; - when Decoded_AddSP => - execute2_topOfStack <= execute2_topOfStack + memARead; - when Decoded_Or => - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= execute2_topOfStackB or execute2_topOfStack; - execute2_topOfStackB <= memARead; - when Decoded_And => - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= execute2_topOfStackB and execute2_topOfStack; - execute2_topOfStackB <= memARead; - when Decoded_Load | Decoded_Loadb | Decoded_Storeb => - if (execute2_topOfStack(ioBit)='1') then - io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit); - io_readEnable <= '1'; - else - memAAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); - execute1_fetched <= '0'; - end if; - if (execute2_decodedOpcode = Decoded_Loadb) then - execute2_loadByte <= '1'; - else - execute2_loadByte <= '0'; - end if; - if (execute2_decodedOpcode = Decoded_Storeb) then - execute2_storeByte <= '1'; - else - execute2_storebyte <= '0'; - end if; - execute2_loading <= '1'; - when Decoded_Ashiftleft => - execute2_topOfStack(wordSize-1 downto 1) <= execute2_topOfStack(wordSize-2 downto 0); - execute2_topOfStack(0) <= '0'; - when Decoded_MoveDown => - execute2_sp <= execute2_sp + 1; - execute2_topOfStackB <= memARead; - when Decoded_MoveDown2 => - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= execute2_topOfStackB; - execute2_topOfStackB <= execute2_topOfStack; - when Decoded_MoveDown3 => - execute2_sp <= execute2_sp + 1; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp+execute2_spOffset; - memBWrite <= execute2_topOfStack; - - execute2_topOfStack <= execute2_topOfStackB; - execute2_topOfStackB <= memARead; - execute2_persistTopOfStack <= '1'; - when Decoded_Duplicate => - execute2_topOfStackB <= execute2_topOfStack; - execute2_sp <= execute2_sp - 1; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - when Decoded_Duplicate2 => - execute2_topOfStack <= execute2_topOfStackB; - execute2_topOfStackB <= execute2_topOfStack; - execute2_sp <= execute2_sp - 1; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - when Decoded_Duplicate3 => - execute2_topOfStack <= memARead; - execute2_topOfStackB <= execute2_topOfStack; - execute2_sp <= execute2_sp - 1; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp + 1; - memBWrite <= execute2_topOfStackB; - when Decoded_Pushspadd => - execute2_topOfStack <= (others => DontCareValue); - execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp + execute2_topOfStack(maxAddrBit-minAddrBit downto 0); - when Decoded_Not => - execute2_topOfStack <= not execute2_topOfStack; - when Decoded_Flip => - for i in 0 to wordSize-1 loop - execute2_topOfStack(i) <= execute2_topOfStack(wordSize-1-i); - end loop; - when Decoded_Store => - execute2_sp <= execute2_sp + 2; - if (execute2_topOfStack(ioBit)='0') then - memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); - memBWrite <= execute2_topOfStackB; - memBWriteEnable <= '1'; - else - io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit); - io_write <= execute2_topOfStackB(7 downto 0); - io_writeEnable <= '1'; - end if; - execute2_resync <= '1'; - when Decoded_StoreSP => - execute2_sp <= execute2_sp + 1; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp+execute2_spOffset; - memBWrite <= execute2_topOfStack; - - execute2_topOfStack <= execute2_topOfStackB; - execute2_topOfStackB <= memARead; - when Decoded_Neqbranch => - execute2_sp <= execute2_sp + 2; - if (execute2_topOfStackB/=0) then - execute2_pc <= execute2_topOfStack(maxAddrBit downto 0) + execute2_pc; - end if; - execute2_resync <= '1'; - when Decoded_Eq => - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= (others => '0'); - if (execute2_topOfStack=execute2_topOfStackB) then - execute2_topOfStack(0) <= '1'; - end if; - execute2_topOfStackB <= memARead; - when Decoded_Ulessthan => - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= (others => '0'); - if (execute2_topOfStack - execute2_sp <= execute2_sp + 1; - execute2_topOfStack <= (others => '0'); - compareA := signed(execute2_topOfStack); - compareB := signed(execute2_topOfStackB); - if (compareA - begin_inst <= '0'; - execute2_pc <= execute2_pc; - when others => - -- nop - end case; - - -- load cycle... - execute2_loadingDone <= execute2_loading; - if (execute2_loadingDone ='1') then - if (execute2_topOfStack(ioBit)='1') then - if (io_busy = '0') then - execute2_topOfStack <= (others => '0'); - execute2_topOfStack(7 downto 0) <= io_read; - execute2_persistTopOfStack <= '1'; - else - execute2_loadingDone <= '1'; - end if; - else - if (execute2_storeByte = '1') then - execute2_sp <= execute2_sp + 2; - memBWriteEnable <= '1'; - memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); - memBWrite <= memARead; - case execute2_topOfStack(minAddrBit-1 downto 0) is - when "00" => memBWrite(31 downto 24) <= execute2_topOfStackB(7 downto 0); - when "01" => memBWrite(23 downto 16) <= execute2_topOfStackB(7 downto 0); - when "10" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0); - when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0); - end case; --- case execute2_topOfStack(0 downto 0) is --- when "1" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0); --- when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0); --- end case; - execute2_resync <= '1'; - elsif (execute2_loadByte = '1') then - execute2_topOfStack <= (others => '0'); - case execute2_topOfStack(minAddrBit-1 downto 0) is - when "00" => execute2_topOfStack(7 downto 0) <= memARead(31 downto 24); - when "01" => execute2_topOfStack(7 downto 0) <= memARead(23 downto 16); - when "10" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8); - when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0); - end case; --- case execute2_topOfStack(0 downto 0) is --- when "1" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8); --- when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0); --- end case; - execute2_persistTopOfStack <= '1'; - else - execute2_topOfStack <= memARead; - execute2_persistTopOfStack <= '1'; - end if; - end if; - end if; - - -- write top of stack... - execute2_persistTopOfStackB <= execute2_persistTopOfStack; - if (execute2_persistTopOfStack = '1') then - execute2_persistTopOfStack <= '0'; - memBWriteEnable <= '1'; - memBAddr <= execute2_sp; - memBWrite <= execute2_topOfStack; - end if; - if (execute2_persistTopOfStackB = '1') then - memBWriteEnable <= '1'; - memBAddr <= execute2_sp+1; - memBWrite <= execute2_topOfStackB; - - execute2_resync <= '1'; - end if; - - -- here we resync the pipeline. - -- a number of things have to happen on certain cycles - execute2_resync2 <= execute2_resync; - execute2_resync3 <= execute2_resync2; - execute2_resync4 <= execute2_resync3; - execute2_resync5 <= execute2_resync4; - execute2_resync6 <= execute2_resync5; - execute2_resync7 <= execute2_resync6; - execute2_resync8 <= execute2_resync7; - execute2_resync9 <= execute2_resync8; - execute2_resync10 <= execute2_resync9; - - if (execute2_resync = '1' ) then - -- resync #1 - execute2_resync <= '0'; - decode_starved <= '1'; - memAAddr <= execute2_sp; - end if; - if (execute2_resync2 = '1') then - -- resync #2 - execute1_fetchPC <= execute2_pc; - memAAddr <= execute2_sp + 1; - end if; - if (execute2_resync3 = '1') then - -- resync #3 - execute2_topOfStack <= memARead; - end if; - if (execute2_resync4 = '1') then - -- resync #4 - -- during this cycle the address is set to the opcode - execute2_topOfStackB <= memARead; - end if; - if (execute2_resync5 = '1') then - -- resync #5 - execute1_pop1 <= '0'; - execute1_push1 <= '0'; - end if; - if (execute2_resync6 = '1') then - -- resync #6 - decode_idim_flag <= '0'; - execute1_pop1 <= '0'; - execute1_push1 <= '0'; - end if; - if (execute2_resync7 = '1') then - -- resync #7 - execute1_sp <= execute2_sp; - execute1_stall <= '0'; - end if; - if (execute2_resync8 = '1') then - -- resync #8 --- load_stall <= '0'; - end if; - if (execute2_resync9 = '1') then - -- resync #9 - end if; - if (execute2_resync10 = '1') then - end if; - - - - - end if; - end process; - - - -end behave; diff --git a/zpu/hdl/zpu3/src/zpu_top.vhd b/zpu/hdl/zpu3/src/zpu_top.vhd deleted file mode 100644 index 0ac6df4..0000000 --- a/zpu/hdl/zpu3/src/zpu_top.vhd +++ /dev/null @@ -1,421 +0,0 @@ --- Company: ZPU3 --- Engineer: Øyvind Harboe - -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 zpu_top is - Port ( clk : in std_logic; - areset : in std_logic; - io_busy : in std_logic; - io_read : in std_logic_vector(7 downto 0); - io_write : out std_logic_vector(7 downto 0); - io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); - io_writeEnable : out std_logic; - io_readEnable : out std_logic; - interrupt : in std_logic; - break : out std_logic); -end zpu_top; - -architecture behave of zpu_top 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(maxAddrBit downto 0); -signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); -signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); -signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); - --- state machine. - -subtype State_Type is std_logic_vector(3 downto 0); -constant State_Fetch : State_Type := b"0000"; -constant State_WriteIODone : State_Type := b"0001"; -constant State_Execute : State_Type := b"0010"; -constant State_StoreToStack : State_Type := b"0011"; -constant State_Add : State_Type := b"0100"; -constant State_Or : State_Type := b"0101"; -constant State_And : State_Type := b"0110"; -constant State_Store : State_Type := b"0111"; -constant State_ReadIO : State_Type := b"1000"; -constant State_WriteIO : State_Type := b"1001"; -constant State_Load : State_Type := b"1010"; -constant State_FetchNext : State_Type := b"1011"; -constant State_AddSP : State_Type := b"1100"; -constant State_ReadIODone : State_Type := b"1101"; -constant State_Decode : State_Type := b"1110"; -constant State_Resync : State_Type := b"1111"; - - -subtype DecodedOpcodeType is std_logic_vector(4 downto 0); -constant Decoded_Nop : DecodedOpcodeType := b"00000"; -constant Decoded_Im : DecodedOpcodeType := b"00001"; -constant Decoded_ImShift : DecodedOpcodeType := b"00010"; -constant Decoded_LoadSP : DecodedOpcodeType := b"00011"; -constant Decoded_StoreSP : DecodedOpcodeType := b"00100"; -constant Decoded_AddSP : DecodedOpcodeType := b"00101"; -constant Decoded_Emulate : DecodedOpcodeType := b"00110"; -constant Decoded_Break : DecodedOpcodeType := b"00111"; -constant Decoded_PushPC : DecodedOpcodeType := b"01000"; -constant Decoded_PushSP : DecodedOpcodeType := b"01001"; -constant Decoded_PopPC : DecodedOpcodeType := b"01010"; -constant Decoded_Add : DecodedOpcodeType := b"01011"; -constant Decoded_Or : DecodedOpcodeType := b"01100"; -constant Decoded_And : DecodedOpcodeType := b"01101"; -constant Decoded_Load : DecodedOpcodeType := b"01110"; -constant Decoded_Not : DecodedOpcodeType := b"01111"; -constant Decoded_Flip : DecodedOpcodeType := b"10000"; -constant Decoded_Store : DecodedOpcodeType := b"10001"; -constant Decoded_PopSP : DecodedOpcodeType := b"10010"; - -signal opcode : std_logic_vector(OpCode_Size-1 downto 0); - -signal decodedOpcode : 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 - ); - end generate; - - - memory: dualport_ram port map ( - clk => clk, - memAWriteEnable => memAWriteEnable, - memAAddr => memAAddr, - memAWrite => memAWrite, - memARead => memARead, - memBWriteEnable => memBWriteEnable, - memBAddr => memBAddr, - memBWrite => memBWrite, - memBRead => memBRead - ); - - - - - opcodeControl: - process(clk, areset) - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - variable spOffset : std_logic_vector(4 downto 0); - begin - if areset = '1' then - state <= State_Resync; - break <= '0'; - sp <= (2 => '0', others => '1'); - pc <= (others => '0'); - idim_flag <= '0'; - begin_inst <= '0'; - memAAddr <= (others => '0'); - memBAddr <= (others => '0'); - memAWriteEnable <= '0'; - memBWriteEnable <= '0'; - io_writeEnable <= '0'; - io_readEnable <= '0'; - decodedOpcode <= (others => '0'); - memAWrite <= (others => '0'); - memBWrite <= (others => '0'); - opcode <= (others => '0'); - io_addr <= (others => '0'); - io_write <= (others => '0'); - 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); - opcode <= (others => DontCareValue); --- io_addr <= (others => DontCareValue); --- io_write <= (others => DontCareValue); - spOffset := (others => DontCareValue); - memAAddr <= (others => DontCareValue); - memBAddr <= (others => DontCareValue); - - io_writeEnable <= '0'; - io_readEnable <= '0'; - begin_inst <= '0'; - - 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 <= pc; - trace_opcode <= opcode; - trace_sp <= 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); - - case decodedOpcode is - when Decoded_Im => - memAWriteEnable <= '1'; - 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); - when Decoded_ImShift => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); - memAWrite(6 downto 0) <= opcode(6 downto 0); - 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 - io_addr <= memARead(maxAddrBit downto minAddrBit); - io_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 (io_busy = '0') then - state <= State_Fetch; - memAWriteEnable <= '1'; - memAWrite <= (others => '0'); - memAWrite(7 downto 0) <= io_read; - end if; - when State_WriteIO => - sp <= sp + 1; - io_writeEnable <= '1'; - io_addr <= memARead(maxAddrBit downto minAddrBit); - io_write <= memBRead(7 downto 0); - state <= State_WriteIODone; - when State_WriteIODone => - if (io_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 => - case pc(1 downto 0) is - when "00" => tOpcode := memBRead(31 downto 24); - when "01" => tOpcode := memBRead(23 downto 16); - when "10" => tOpcode := memBRead(15 downto 8); - when others => tOpcode := memBRead(7 downto 0); - end case; - idim_flag <= tOpcode(7); - opcode <= tOpcode; - if (tOpcode(7 downto 7)=OpCode_Im) then - if (idim_flag='1') then - decodedOpcode<=Decoded_ImShift; - else - decodedOpcode<=Decoded_Im; - end if; - elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then - decodedOpcode<=Decoded_StoreSP; - elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then - decodedOpcode<=Decoded_LoadSP; - elsif (tOpcode(7 downto 5)=OpCode_Emulate) then - decodedOpcode<=Decoded_Emulate; - elsif (tOpcode(7 downto 4)=OpCode_AddSP) then - decodedOpcode<=Decoded_AddSP; - else - case tOpcode(3 downto 0) is - when OpCode_Break => - decodedOpcode<=Decoded_Break; - when OpCode_PushSP => - decodedOpcode<=Decoded_PushSP; - when OpCode_PopPC => - decodedOpcode<=Decoded_PopPC; - when OpCode_Add => - decodedOpcode<=Decoded_Add; - when OpCode_Or => - decodedOpcode<=Decoded_Or; - when OpCode_And => - decodedOpcode<=Decoded_And; - when OpCode_Load => - decodedOpcode<=Decoded_Load; - when OpCode_Not => - decodedOpcode<=Decoded_Not; - when OpCode_Flip => - decodedOpcode<=Decoded_Flip; - when OpCode_Store => - decodedOpcode<=Decoded_Store; - when OpCode_PopSP => - decodedOpcode<=Decoded_PopSP; - when others => - decodedOpcode<=Decoded_Nop; - end case; - end if; - -- 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/zpu3/src/zpu_top_medium.vhd b/zpu/hdl/zpu3/src/zpu_top_medium.vhd deleted file mode 100644 index 4896b30..0000000 --- a/zpu/hdl/zpu3/src/zpu_top_medium.vhd +++ /dev/null @@ -1,768 +0,0 @@ --- Company: ZPU3 --- Engineer: Øyvind Harboe - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; -use IEEE.STD_LOGIC_arith.ALL; - -library zylin; -use zylin.zpu_config.all; -use zylin.zpupkg.all; - - -entity zpu_top is - Port ( clk : in std_logic; - areset : in std_logic; - io_busy : in std_logic; - io_read : in std_logic_vector(7 downto 0); - io_write : out std_logic_vector(7 downto 0); - io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); - io_writeEnable : out std_logic; - io_readEnable : out std_logic; - interrupt : in std_logic; - break : out std_logic); -end zpu_top; - -architecture behave of zpu_top 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(maxAddrBit downto 0); -signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); -signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); - --- state machine. - -subtype State_Type is std_logic_vector(4 downto 0); -constant State_ResyncDecode : State_Type := b"00000"; -constant State_WriteIODone : State_Type := b"00001"; -constant State_Execute : State_Type := b"00010"; -constant State_StoreToStack : State_Type := b"00011"; -constant State_Add : State_Type := b"00100"; -constant State_Or : State_Type := b"00101"; -constant State_And : State_Type := b"00110"; -constant State_Store : State_Type := b"00111"; -constant State_ReadIO : State_Type := b"01000"; -constant State_WriteIO : State_Type := b"01001"; -constant State_Load : State_Type := b"01010"; -constant State_ResyncStack : State_Type := b"01011"; -constant State_AddSP : State_Type := b"01100"; -constant State_ReadIODone : State_Type := b"01101"; -constant State_Decode : State_Type := b"01110"; -constant State_LoadByte1 : State_Type := b"01111"; -constant State_LoadByte2 : State_Type := b"10000"; -constant State_StoreByte1 : State_Type := b"10001"; -constant State_StoreByte2 : State_Type := b"10010"; -constant State_Mult1 : State_Type := b"10011"; -constant State_Mult2 : State_Type := b"10100"; -constant State_Mult3 : State_Type := b"10101"; - - -subtype DecodedOpcodeType is std_logic_vector(5 downto 0); -constant Decoded_Nop : DecodedOpcodeType := b"000000"; -constant Decoded_Im : DecodedOpcodeType := b"000001"; -constant Decoded_ImShift : DecodedOpcodeType := b"000010"; -constant Decoded_LoadSP : DecodedOpcodeType := b"000011"; -constant Decoded_StoreSP : DecodedOpcodeType := b"000100"; -constant Decoded_AddSP : DecodedOpcodeType := b"000101"; -constant Decoded_Emulate : DecodedOpcodeType := b"000110"; -constant Decoded_Break : DecodedOpcodeType := b"000111"; -constant Decoded_PushPC : DecodedOpcodeType := b"001000"; -constant Decoded_PushSP : DecodedOpcodeType := b"001001"; -constant Decoded_PopPC : DecodedOpcodeType := b"001010"; -constant Decoded_Add : DecodedOpcodeType := b"001011"; -constant Decoded_Or : DecodedOpcodeType := b"001100"; -constant Decoded_And : DecodedOpcodeType := b"001101"; -constant Decoded_Load : DecodedOpcodeType := b"001110"; -constant Decoded_Not : DecodedOpcodeType := b"001111"; -constant Decoded_Flip : DecodedOpcodeType := b"010000"; -constant Decoded_Store : DecodedOpcodeType := b"010001"; -constant Decoded_PopSP : DecodedOpcodeType := b"010010"; -constant Decoded_Ashiftleft : DecodedOpcodeType := b"010011"; -constant Decoded_Ashiftright : DecodedOpcodeType := b"010100"; -constant Decoded_Lshiftright : DecodedOpcodeType := b"010101"; -constant Decoded_Eqbranch : DecodedOpcodeType := b"010110"; -constant Decoded_Neqbranch : DecodedOpcodeType := b"010111"; -constant Decoded_Eq : DecodedOpcodeType := b"011000"; -constant Decoded_Neq : DecodedOpcodeType := b"011001"; -constant Decoded_Loadb : DecodedOpcodeType := b"011010"; -constant Decoded_Lessthan : DecodedOpcodeType := b"011011"; -constant Decoded_Lessthanorequal : DecodedOpcodeType := b"011100"; -constant Decoded_Ulessthan : DecodedOpcodeType := b"011101"; -constant Decoded_Ulessthanorequal : DecodedOpcodeType := b"011110"; -constant Decoded_Storeb : DecodedOpcodeType := b"011111"; -constant Decoded_Lshift2 : DecodedOpcodeType := b"100000"; -constant Decoded_DoubleIm : DecodedOpcodeType := b"100001"; -constant Decoded_AddIm : DecodedOpcodeType := b"100011"; -constant Decoded_Mult16x16 : DecodedOpcodeType := b"100100"; -constant Decoded_Swap : DecodedOpcodeType := b"100101"; -constant Decoded_Callpcrel : DecodedOpcodeType := b"100110"; -constant Decoded_Pushspadd : DecodedOpcodeType := b"100111"; - - -signal mult1 : std_logic_vector(wordSize/2-1 downto 0); -signal mult2 : std_logic_vector(wordSize/2-1 downto 0); -signal multResult : std_logic_vector(wordSize-1 downto 0); - -signal storeByte : std_logic_vector(7 downto 0); -signal byteSelect : std_logic_vector(minAddrBit-1 downto 0); - -signal opcode : std_logic_vector(OpCode_Size-1 downto 0); -signal opcode2 : std_logic_vector(OpCode_Size-1 downto 0); - -signal decodedOpcode : 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, - busy => busy - ); - end generate; - - - memory: dualport_ram port map ( - clk => clk, - memAWriteEnable => memAWriteEnable, - memAAddr => memAAddr, - memAWrite => memAWrite, - memARead => memARead, - memBWriteEnable => memBWriteEnable, - memBAddr => memBAddr, - memBWrite => memBWrite, - memBRead => memBRead - ); - - - process(clk, areset) - begin - if (clk'event and clk = '1') then - multResult <= mult1 * mult2; - end if; - end process; - - - - opcodeControl: - process(clk, areset) - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - variable tOpcode2 : std_logic_vector(OpCode_Size-1 downto 0); - variable spOffset : std_logic_vector(4 downto 0); - variable spOffset2 : std_logic_vector(4 downto 0); - variable nextPC : std_logic_vector(maxAddrBit downto 0); - variable pushspaddTemp : std_logic_vector(maxAddrBit downto minAddrBit); - variable tempVal : std_logic_vector(wordSize-1 downto 0); - variable compareA : signed(wordSize-1 downto 0); - variable compareB : signed(wordSize-1 downto 0); - begin - if areset = '1' then - mult1 <= (others => '0'); - mult2 <= (others => '0'); - state <= State_ResyncDecode; - break <= '0'; - sp <= (2 => '0', others => '1'); - pc <= (others => '0'); - idim_flag <= '0'; - begin_inst <= '0'; - memAAddr <= (others => '0'); - memBAddr <= (others => '0'); - memAWriteEnable <= '0'; - memBWriteEnable <= '0'; - io_writeEnable <= '0'; - io_readEnable <= '0'; - decodedOpcode <= (others => '0'); - memAWrite <= (others => '0'); - memBWrite <= (others => '0'); - opcode <= (others => '0'); - io_addr <= (others => '0'); - io_write <= (others => '0'); - elsif (clk'event and clk = '1') then - memAWriteEnable <= '0'; - memBWriteEnable <= '0'; - - io_writeEnable <= '0'; - io_readEnable <= '0'; - begin_inst <= '0'; - - case state is - when State_Decode => - nextPC:=pc+1; - case pc(1 downto 0) is - when "00" => tOpcode := memARead(31 downto 24); - when "01" => tOpcode := memARead(23 downto 16); - when "10" => tOpcode := memARead(15 downto 8); - when others => tOpcode := memARead(7 downto 0); - end case; - case nextPC(1 downto 0) is - when "00" => tOpcode2 := memBRead(31 downto 24); - when "01" => tOpcode2 := memBRead(23 downto 16); - when "10" => tOpcode2 := memBRead(15 downto 8); - when others => tOpcode2 := memBRead(7 downto 0); - end case; - idim_flag <= tOpcode(7); - opcode <= tOpcode; - opcode2 <= tOpcode2; - if (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 4)=0 and tOpcode2(3 downto 0)=Opcode_Add and idim_flag='0') then - idim_flag <= '0'; - decodedOpcode <= Decoded_AddIm; - nextPC := pc + 2; - elsif (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 7)=OpCode_Im and idim_flag='0') then - decodedOpcode <= Decoded_DoubleIm; - nextPC := pc + 2; - elsif (tOpcode(7 downto 4)=OpCode_AddSP and tOpcode(3 downto 0)=0 and - tOpcode2(7 downto 4)=OpCode_AddSP and tOpcode2(3 downto 0)=0) then - decodedOpcode <= Decoded_Lshift2; - nextPC := pc + 2; - elsif (tOpcode(7 downto 7)=OpCode_Im) then - if (idim_flag='1') then - decodedOpcode<=Decoded_ImShift; - else - decodedOpcode<=Decoded_Im; - end if; - elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then - decodedOpcode<=Decoded_StoreSP; - elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then - decodedOpcode<=Decoded_LoadSP; - elsif (tOpcode(7 downto 5)=OpCode_Emulate) then - if tOpcode(5 downto 0)=OpCode_Eqbranch then - decodedOpcode <= Decoded_Eqbranch; - elsif tOpcode(5 downto 0)=OpCode_Neqbranch then - decodedOpcode <= Decoded_Neqbranch; - elsif tOpcode(5 downto 0)=OpCode_Eq then - decodedOpcode <= Decoded_Eq; - elsif tOpcode(5 downto 0)=OpCode_Neq then - decodedOpcode <= Decoded_Neq; - elsif tOpcode(5 downto 0)=OpCode_Lessthan then - decodedOpcode <= Decoded_Lessthan; - elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then - decodedOpcode <= Decoded_Lessthanorequal; - elsif tOpcode(5 downto 0)=OpCode_Ulessthan then - decodedOpcode <= Decoded_Ulessthan; - elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then - decodedOpcode <= Decoded_Ulessthanorequal; - elsif tOpcode(5 downto 0)=OpCode_Loadb then - decodedOpcode <= Decoded_Loadb; - elsif tOpcode(5 downto 0)=OpCode_Storeb then - decodedOpcode <= Decoded_Storeb; - elsif tOpcode(5 downto 0)=OpCode_Mult16x16 then - decodedOpcode <= Decoded_Mult16x16; - elsif tOpcode(5 downto 0)=OpCode_Swap then - decodedOpcode <= Decoded_Swap; - elsif tOpcode(5 downto 0)=OpCode_Callpcrel then - decodedOpcode <= Decoded_Callpcrel; - elsif tOpcode(5 downto 0)=OpCode_Pushspadd then - decodedOpcode <= Decoded_Pushspadd; --- elsif tOpcode(5 downto 0)=OpCode_Lshiftright then --- decodedOpcode <= Decoded_Lshiftright; --- elsif tOpcode(5 downto 0)=OpCode_Ashiftleft then --- decodedOpcode <= Decoded_Ashiftleft; --- elsif tOpcode(5 downto 0)=OpCode_Ashiftright then --- decodedOpcode <= Decoded_Ashiftright; - else - decodedOpcode<=Decoded_Emulate; - end if; - elsif (tOpcode(7 downto 4)=OpCode_AddSP) then - decodedOpcode<=Decoded_AddSP; - else - case tOpcode(3 downto 0) is - when OpCode_Break => - decodedOpcode<=Decoded_Break; - when OpCode_PushPC => - decodedOpcode<=Decoded_PushPC; - when OpCode_PushSP => - decodedOpcode<=Decoded_PushSP; - when OpCode_PopPC => - decodedOpcode<=Decoded_PopPC; - when OpCode_Add => - decodedOpcode<=Decoded_Add; - when OpCode_Or => - decodedOpcode<=Decoded_Or; - when OpCode_And => - decodedOpcode<=Decoded_And; - when OpCode_Load => - decodedOpcode<=Decoded_Load; - when OpCode_Not => - decodedOpcode<=Decoded_Not; - when OpCode_Flip => - decodedOpcode<=Decoded_Flip; - when OpCode_Store => - decodedOpcode<=Decoded_Store; - when OpCode_PopSP => - decodedOpcode<=Decoded_PopSP; - when others => - decodedOpcode<=Decoded_Nop; - end case; - end if; - -- Fetch the two next opcodes... :-) - memAAddr <= nextPC(maxAddrBit downto minAddrBit); - nextPC:=nextPC+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_Execute; - when State_Execute => - state <= State_Decode; - -- at this point: - -- memBRead contains opcode word - -- memARead contains top of stack - pc <= pc + 1; - - -- trace - begin_inst <= '1'; - trace_pc <= pc; - trace_opcode <= opcode; - trace_sp <= sp; - trace_topOfStack <= memARead; - - -- during the next cycle we'll be reading the next opcode - spOffset(4):=not opcode(4); - spOffset(3 downto 0):=opcode(3 downto 0); - spOffset2(4):=not opcode2(4); - spOffset2(3 downto 0):=opcode2(3 downto 0); - - case decodedOpcode is - - when Decoded_DoubleIm => - memAWriteEnable <= '1'; - sp <= sp - 1; - memAAddr <= sp-1; - for i in wordSize-1 downto 14 loop - memAWrite(i) <= opcode(6); - end loop; - memAWrite(13 downto 7) <= opcode(6 downto 0); - memAWrite(6 downto 0) <= opcode2(6 downto 0); - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - pc <= pc + 2; - when Decoded_Im => - memAWriteEnable <= '1'; - 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); - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - when Decoded_ImShift => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); - memAWrite(6 downto 0) <= opcode(6 downto 0); - memBAddr <= sp + 1; - when Decoded_StoreSP => - memAWriteEnable <= '1'; - memAAddr <= sp+spOffset; - memAWrite <= memARead; - -- avoid address crashes. - memBAddr <= sp - 1; - sp <= sp + 1; - state <= State_ResyncDecode; - when Decoded_LoadSP => - sp <= sp - 1; - if (spOffset = 0) then - -- This is a duplicate instruction. - memAAddr <= sp-1; - memAWriteEnable <= '1'; - memAWrite <= memARead; - else - memAAddr <= sp+spOffset; - end if; - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - when Decoded_Callpcrel => - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBit downto 0) <= pc + 1; - memBAddr <= sp+1; - pc <= pc + memARead(maxAddrBit downto 0); - state <= State_ResyncDecode; - when Decoded_Emulate => - sp <= sp - 1; - memAWriteEnable <= '1'; - memAAddr <= sp - 1; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBit downto 0) <= pc; - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - -- The emulate address is: - -- 98 7654 3210 - -- 0000 00aa aaa0 0000 - pc <= (others => '0'); - pc(9 downto 5) <= opcode(4 downto 0); - state <= State_ResyncDecode; - when Decoded_AddSP => - if spOffset=0 then - -- avoid address line crashes... - -- FIX!!! is this an issue? - -- oh-well. While we are at it, we've got a faster - -- shift operation without updating the toolchain. - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= memARead + memARead; - memBAddr <= sp+1; - else - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= memARead; - memBAddr <= sp+spOffset; - state <= State_AddSP; - end if; - when Decoded_Break => - report "Break instruction encountered" severity failure; - break <= '1'; - when Decoded_PushPC => - memAWriteEnable <= '1'; - memAAddr <= sp - 1; - sp <= sp - 1; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBit downto 0) <= pc; - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - when Decoded_PushSP => - memAWriteEnable <= '1'; - memAAddr <= sp - 1; - sp <= sp - 1; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBit downto minAddrBit) <= sp; - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - when Decoded_Pushspadd => - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= (others => DontCareValue); - pushspaddTemp := memARead(maxAddrBit-minAddrBit downto 0); - memAWrite(maxAddrBit downto minAddrBit) <= sp+pushspaddTemp; - memBAddr <= sp+1; - when Decoded_PopPC => - memAAddr <= sp; - pc <= memARead(maxAddrBit downto 0); - sp <= sp + 1; - state <= State_ResyncDecode; - when Decoded_AddIm => - memAWriteEnable <= '1'; - memAAddr <= sp; - tempVal(wordSize-1 downto 7) := (others => tOpcode(6)); - tempVal(6 downto 0) := tOpcode(6 downto 0); - memAWrite <= memARead + tempVal; - memBAddr <= sp + 1; - pc <= pc + 2; - when Decoded_Add => - memAWriteEnable <= '1'; - memAWrite <= memARead + memBRead; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - sp <= sp + 1; - when Decoded_Or => - sp <= sp + 1; - memAWriteEnable <= '1'; - memAWrite <= memARead or memBRead; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - when Decoded_And => - sp <= sp + 1; - memAWriteEnable <= '1'; - memAWrite <= memARead and memBRead; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - when Decoded_Load => - if (memARead(ioBit)='1') then - io_addr <= memARead(maxAddrBit downto minAddrBit); - io_readEnable <= '1'; - state <= State_ReadIO; - else - memAAddr <= memARead(maxAddrBit downto minAddrBit); - memBAddr <= sp + 1; - end if; - when Decoded_Swap => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite(wordSize/2-1 downto 0) <= memARead(wordSize-1 downto wordSize/2); - memAWrite(wordSize-1 downto wordSize/2) <= memARead(wordSize/2-1 downto 0); - memBAddr <= sp + 1; - when Decoded_Not => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite <= not memARead; - memBAddr <= sp + 1; - when Decoded_Flip => - memAAddr <= sp; - memAWriteEnable <= '1'; - for i in 0 to wordSize-1 loop - memAWrite(i) <= memARead(wordSize-1-i); - end loop; - memBAddr <= sp + 1; - when Decoded_Lshift2 => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite(1 downto 0) <= (others => '0'); - memAWrite(wordSize-1 downto 2) <= memARead(wordSize-1-2 downto 0); - memBAddr <= sp + 1; - pc <= pc + 2; - when Decoded_Store => - sp <= sp + 2; - if (memARead(ioBit)='1') then - io_writeEnable <= '1'; - io_addr <= memARead(maxAddrBit downto minAddrBit); - io_write <= memBRead(7 downto 0); - state <= State_WriteIO; - else - memAWriteEnable <= '1'; - memAAddr <= memARead(maxAddrBit downto minAddrBit); - memAWrite <= memBRead; - state <= State_ResyncDecode; - end if; - when Decoded_PopSP => - sp <= memARead(maxAddrBit downto minAddrBit); - state <= State_ResyncDecode; - when Decoded_Ashiftleft => - memAWrite(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))) <= - memBRead(wordSize-conv_integer(memARead(wordPower-1 downto 0))-1 downto 0); - if memARead(wordPower-1 downto 0)/=0 then - memAWrite(conv_integer(memARead(wordPower-1 downto 0))-1 downto 0) <= (others => '0'); - end if; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - sp <= sp + 1; - when Decoded_Ashiftright | Decoded_Lshiftright => - memAWrite(wordSize-1-conv_integer(memARead(wordPower-1 downto 0)) downto 0) <= - memBRead(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))); - if memARead(wordPower-1 downto 0)/=0 then - if decodedOpcode=Decoded_Ashiftright and memBRead(wordSize-1)='1' then - memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '1'); - else - memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '0'); - end if; - end if; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - sp <= sp + 1; - when Decoded_Eqbranch => - sp <= sp + 2; - if (memBRead=0) then - pc <= memARead(maxAddrBit downto 0) + pc; - end if; - state <= State_ResyncDecode; - when Decoded_Neqbranch => - sp <= sp + 2; - if (memBRead/=0) then - pc <= memARead(maxAddrBit downto 0) + pc; - end if; - state <= State_ResyncDecode; - when Decoded_Eq => - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead=memBRead) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Neq => - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead/=memBRead) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Ulessthan => - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead<=memBRead) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Lessthan => - sp <= sp + 1; - memAWrite <= (others => '0'); - compareA := signed(memARead); - compareB := signed(memBRead); - if (compareA - sp <= sp + 1; - memAWrite <= (others => '0'); - compareA := signed(memARead); - compareB := signed(memBRead); - if (compareA<=compareB) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Loadb => - byteSelect <= memARead(minAddrBit-1 downto 0); - memAAddr <= memARead(maxAddrBit downto minAddrBit); - state <= State_LoadByte1; - when Decoded_Storeb => - sp <= sp + 2; - byteSelect <= memARead(minAddrBit-1 downto 0); - storeByte <= memBRead(7 downto 0); - memAAddr <= memARead(maxAddrBit downto minAddrBit); - memBAddr <= sp; - state <= State_StoreByte1; - when Decoded_Mult16x16 => - mult1 <= memARead(wordSize/2-1 downto 0); - mult2 <= memBRead(wordSize/2-1 downto 0); - sp <= sp + 1; - state <= State_Mult1; - when others => - -- nop. Here we persist whatever was loaded into - -- memARead - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite <= memARead; - memBAddr <= sp + 1; - - end case; - when State_ReadIO => - state <= State_ReadIODone; - when State_ReadIODone => - if (io_busy = '0') then - state <= State_ResyncDecode; - memAWriteEnable <= '1'; - memAWrite <= (others => '0'); - memAWrite(7 downto 0) <= io_read; - memAAddr <= sp; - end if; - when State_WriteIO => - state <= State_WriteIODone; - when State_WriteIODone => - if (io_busy = '0') then - state <= State_ResyncDecode; - end if; - when State_ResyncDecode => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_ResyncStack; - when State_ResyncStack => - memAAddr <= sp; - memBAddr <= sp+1; - state <= State_Decode; - when State_AddSP => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_Add; - when State_Add => - memAWriteEnable <= '1'; - memAWrite <= memARead + memBRead; - memAAddr <= sp; - memBAddr <= sp + 1; - state <= State_Decode; - when State_LoadByte1 => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_LoadByte2; - when State_LoadByte2 => - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= (others => '0'); - case byteSelect is - when "00" => memAWrite(7 downto 0) <= memARead(31 downto 24); - when "01" => memAWrite(7 downto 0) <= memARead(23 downto 16); - when "10" => memAWrite(7 downto 0) <= memARead(15 downto 8); - when others => memAWrite(7 downto 0) <= memARead(7 downto 0); - end case; - memBAddr <= sp + 1; - state <= State_Decode; - when State_StoreByte1 => - state <= State_StoreByte2; - when State_StoreByte2 => - memAWriteEnable <= '1'; - memAAddr <= memBRead(maxAddrBit downto minAddrBit); - memAWrite <= memARead; - case byteSelect is - when "00" => memAWrite(31 downto 24) <= storeByte; - when "01" => memAWrite(23 downto 16) <= storeByte; - when "10" => memAWrite(15 downto 8) <= storeByte; - when others => memAWrite(7 downto 0) <= storeByte; - end case; - state <= State_ResyncDecode; - when State_Mult1 => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_Mult2; - when State_Mult2 => - memAWriteEnable <= '1'; - memAWrite <= multResult; - memAAddr <= sp; - memBAddr <= sp + 1; - state <= State_Decode; - - when others => - null; - end case; - end if; - end process; - - - -end behave; diff --git a/zpu/hdl/zpu3/src/zpuio.vhd b/zpu/hdl/zpu3/src/zpuio.vhd deleted file mode 100644 index 96e9aea..0000000 --- a/zpu/hdl/zpu3/src/zpuio.vhd +++ /dev/null @@ -1,180 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -library zylin; -use zylin.arm7.all; - -library zylin; -use zylin.zpu_config.all; -use zylin.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 io_readEnable : 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; -begin - - timerinst: timer port map ( - clk => cpu_clk, - areset => areset, - we => timer_we, - din => io_write, - adr => io_addr(4 downto 2), - dout => timer_read); - - zpu: zpu_top port map ( - clk => cpu_clk , - areset => areset, - io_busy => io_busy, - io_writeEnable => io_writeEnable, - io_readEnable => io_readEnable, - io_write => io_write, - io_read => io_read, - io_addr => io_addr, - interrupt => '0' - --, --- break => cpu_fiq_p -); - - - -- 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 <= '1'; - uartData <= x"58"; -- 'X' - readingTimer <= '0'; - elsif (cpu_clk'event and cpu_clk = '1') then - timer_we <= '0'; - io_busy <= '1'; - if uartTXCleared = '1' then - uartTXPending <= '0'; - end if; - - if io_writeEnable = '1' then - if io_addr=x"1000" then - -- Write to UART - uartData <= io_write; - uartTXPending <= '1'; - io_busy <= '0'; - elsif io_addr(12)='1' then - timer_we <= '1'; - io_busy <= '0'; - 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 <= '0'; - elsif io_addr(12)='1' then - readingTimer <= '1'; - io_busy <= '1'; - elsif io_addr(11)='1' then - io_read <= ZPU_Frequency; - io_busy <= '0'; - 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'); - - - -end behave; diff --git a/zpu/hdl/zpu3/src/zpupkg.vhd b/zpu/hdl/zpu3/src/zpupkg.vhd deleted file mode 100644 index a904b11..0000000 --- a/zpu/hdl/zpu3/src/zpupkg.vhd +++ /dev/null @@ -1,130 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_ARITH.all; - -library zylin; -use zylin.zpu_config.all; - -package zpupkg is - - component 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 component; - - - component 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 minAddrBit); - memA : in std_logic_vector(wordSize-1 downto 0); - memB : in std_logic_vector(wordSize-1 downto 0); - busy : in std_logic - ); - end component; - - component zpu_top is - Port ( clk : in std_logic; - areset : in std_logic; - io_busy : in std_logic; - io_read : in std_logic_vector(7 downto 0); - io_write : out std_logic_vector(7 downto 0); - io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); - io_writeEnable : out std_logic; - io_readEnable : out std_logic; - 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_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_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_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; diff --git a/zpu/hdl/zpu4/src/simzpu_bram.do b/zpu/hdl/zpu4/src/simzpu_bram.do deleted file mode 100644 index 1c8673d..0000000 --- a/zpu/hdl/zpu4/src/simzpu_bram.do +++ /dev/null @@ -1,28 +0,0 @@ -# Xilinx WebPack modelsim script -# -# cd C:/workspace/zpu/zpu/hdl/zpu4/src -# do simzpu_bram.do - -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_bram.vhd -vcom -93 -explicit bram_dmips.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 1us diff --git a/zpu/hdl/zpu4/src/zpu_core_bram.vhd b/zpu/hdl/zpu4/src/zpu_core_bram.vhd deleted file mode 100644 index 0bedba3..0000000 --- a/zpu/hdl/zpu4/src/zpu_core_bram.vhd +++ /dev/null @@ -1,780 +0,0 @@ --- Company: ZPU3 --- 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; - - --- io_busy : in std_logic; --- io_read : in std_logic_vector(7 downto 0); --- io_write : out std_logic_vector(7 downto 0); --- io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); --- io_writeEnable : out std_logic; --- io_readEnable : out std_logic; - - -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_ResyncDecode, -State_WriteIODone, -State_Execute, -State_StoreToStack, -State_Add, -State_Or, -State_And, -State_Store, -State_ReadIO, -State_WriteIO, -State_Load, -State_ResyncStack, -State_AddSP, -State_ReadIODone, -State_Decode, -State_LoadByte1, -State_LoadByte2, -State_StoreByte1, -State_StoreByte2, -State_Mult1, -State_Mult2, -State_Mult3 -); - -type DecodedOpcodeType is -( -Decoded_Nop, -Decoded_Im, -Decoded_ImShift, -Decoded_LoadSP, -Decoded_StoreSP, -Decoded_AddSP, -Decoded_Emulate, -Decoded_Break, -Decoded_PushPC, -Decoded_PushSP, -Decoded_PopPC, -Decoded_Add, -Decoded_Or, -Decoded_And, -Decoded_Load, -Decoded_Not, -Decoded_Flip, -Decoded_Store, -Decoded_PopSP, -Decoded_Ashiftleft, -Decoded_Ashiftright, -Decoded_Lshiftright, -Decoded_Eqbranch, -Decoded_Neqbranch, -Decoded_Eq, -Decoded_Neq, -Decoded_Loadb, -Decoded_Lessthan, -Decoded_Lessthanorequal, -Decoded_Ulessthan, -Decoded_Ulessthanorequal, -Decoded_Storeb, -Decoded_Lshift2, -Decoded_DoubleIm, -Decoded_AddIm, -Decoded_Mult16x16, -Decoded_Swap, -Decoded_Callpcrel, -Decoded_Pushspadd -); - - -signal mult1 : std_logic_vector(wordSize/2-1 downto 0); -signal mult2 : std_logic_vector(wordSize/2-1 downto 0); -signal multResult : std_logic_vector(wordSize-1 downto 0); - -signal storeByte : std_logic_vector(7 downto 0); -signal byteSelect : std_logic_vector(minAddrBit-1 downto 0); - -signal opcode : std_logic_vector(OpCode_Size-1 downto 0); -signal opcode2 : std_logic_vector(OpCode_Size-1 downto 0); - -signal decodedOpcode : 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 - ); - - - - process(clk, areset) - begin - if (clk'event and clk = '1') then - multResult <= mult1 * mult2; - end if; - end process; - - - - opcodeControl: - process(clk, areset) - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - variable tOpcode2 : std_logic_vector(OpCode_Size-1 downto 0); - variable spOffset : std_logic_vector(4 downto 0); - variable spOffset2 : std_logic_vector(4 downto 0); - variable nextPC : std_logic_vector(maxAddrBit downto 0); - variable pushspaddTemp : std_logic_vector(maxAddrBit downto minAddrBit); - variable tempVal : std_logic_vector(wordSize-1 downto 0); - variable compareA : signed(wordSize-1 downto 0); - variable compareB : signed(wordSize-1 downto 0); - begin - if areset = '1' then - mult1 <= (others => '0'); - mult2 <= (others => '0'); - state <= State_ResyncDecode; - 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'; - decodedOpcode <= Decoded_Break; - memAWrite <= (others => '0'); - memBWrite <= (others => '0'); - opcode <= (others => '0'); - out_mem_addr <= (others => '0'); - mem_write <= (others => '0'); - elsif (clk'event and clk = '1') then - memAWriteEnable <= '0'; - memBWriteEnable <= '0'; - - out_mem_writeEnable <= '0'; - out_mem_readEnable <= '0'; - out_mem_addr <= memARead(maxAddrBitIncIO downto 0); - begin_inst <= '0'; - - case state is - when State_Decode => - nextPC:=pc+1; - case pc(1 downto 0) is - when "00" => tOpcode := memARead(31 downto 24); - when "01" => tOpcode := memARead(23 downto 16); - when "10" => tOpcode := memARead(15 downto 8); - when others => tOpcode := memARead(7 downto 0); - end case; - case nextPC(1 downto 0) is - when "00" => tOpcode2 := memBRead(31 downto 24); - when "01" => tOpcode2 := memBRead(23 downto 16); - when "10" => tOpcode2 := memBRead(15 downto 8); - when others => tOpcode2 := memBRead(7 downto 0); - end case; - idim_flag <= tOpcode(7); - opcode <= tOpcode; - opcode2 <= tOpcode2; - if (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 4)=0 and tOpcode2(3 downto 0)=Opcode_Add and idim_flag='0') then - idim_flag <= '0'; - decodedOpcode <= Decoded_AddIm; - nextPC := pc + 2; - elsif (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 7)=OpCode_Im and idim_flag='0') then - decodedOpcode <= Decoded_DoubleIm; - nextPC := pc + 2; - elsif (tOpcode(7 downto 4)=OpCode_AddSP and tOpcode(3 downto 0)=0 and - tOpcode2(7 downto 4)=OpCode_AddSP and tOpcode2(3 downto 0)=0) then - decodedOpcode <= Decoded_Lshift2; - nextPC := pc + 2; - elsif (tOpcode(7 downto 7)=OpCode_Im) then - if (idim_flag='1') then - decodedOpcode<=Decoded_ImShift; - else - decodedOpcode<=Decoded_Im; - end if; - elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then - decodedOpcode<=Decoded_StoreSP; - elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then - decodedOpcode<=Decoded_LoadSP; - elsif (tOpcode(7 downto 5)=OpCode_Emulate) then - if tOpcode(5 downto 0)=OpCode_Eqbranch then - decodedOpcode <= Decoded_Eqbranch; - elsif tOpcode(5 downto 0)=OpCode_Neqbranch then - decodedOpcode <= Decoded_Neqbranch; - elsif tOpcode(5 downto 0)=OpCode_Eq then - decodedOpcode <= Decoded_Eq; - elsif tOpcode(5 downto 0)=OpCode_Neq then - decodedOpcode <= Decoded_Neq; - elsif tOpcode(5 downto 0)=OpCode_Lessthan then - decodedOpcode <= Decoded_Lessthan; - elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then - decodedOpcode <= Decoded_Lessthanorequal; - elsif tOpcode(5 downto 0)=OpCode_Ulessthan then - decodedOpcode <= Decoded_Ulessthan; - elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then - decodedOpcode <= Decoded_Ulessthanorequal; - elsif tOpcode(5 downto 0)=OpCode_Loadb then - decodedOpcode <= Decoded_Loadb; - elsif tOpcode(5 downto 0)=OpCode_Storeb then - decodedOpcode <= Decoded_Storeb; - elsif tOpcode(5 downto 0)=OpCode_Mult16x16 then - decodedOpcode <= Decoded_Mult16x16; - elsif tOpcode(5 downto 0)=OpCode_Swap then - decodedOpcode <= Decoded_Swap; - elsif tOpcode(5 downto 0)=OpCode_Callpcrel then - decodedOpcode <= Decoded_Callpcrel; - elsif tOpcode(5 downto 0)=OpCode_Pushspadd then - decodedOpcode <= Decoded_Pushspadd; --- elsif tOpcode(5 downto 0)=OpCode_Lshiftright then --- decodedOpcode <= Decoded_Lshiftright; --- elsif tOpcode(5 downto 0)=OpCode_Ashiftleft then --- decodedOpcode <= Decoded_Ashiftleft; --- elsif tOpcode(5 downto 0)=OpCode_Ashiftright then --- decodedOpcode <= Decoded_Ashiftright; - else - decodedOpcode<=Decoded_Emulate; - end if; - elsif (tOpcode(7 downto 4)=OpCode_AddSP) then - decodedOpcode<=Decoded_AddSP; - else - case tOpcode(3 downto 0) is - when OpCode_PushSP => - decodedOpcode<=Decoded_PushSP; - when OpCode_PopPC => - decodedOpcode<=Decoded_PopPC; - when OpCode_Add => - decodedOpcode<=Decoded_Add; - when OpCode_Or => - decodedOpcode<=Decoded_Or; - when OpCode_And => - decodedOpcode<=Decoded_And; - when OpCode_Load => - decodedOpcode<=Decoded_Load; - when OpCode_Not => - decodedOpcode<=Decoded_Not; - when OpCode_Flip => - decodedOpcode<=Decoded_Flip; - when OpCode_Store => - decodedOpcode<=Decoded_Store; - when OpCode_PopSP => - decodedOpcode<=Decoded_PopSP; - when OpCode_Break => - decodedOpcode<=Decoded_Break; - when others => - decodedOpcode<=Decoded_Nop; - end case; - end if; - -- Fetch the two next opcodes... :-) - memAAddr <= nextPC(maxAddrBit downto minAddrBit); - nextPC:=nextPC+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_Execute; - when State_Execute => - state <= State_Decode; - -- 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_sp <= (others => '0'); - trace_sp(maxAddrBit downto minAddrBit) <= sp; - trace_opcode <= opcode; - 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); - spOffset2(4):=not opcode2(4); - spOffset2(3 downto 0):=opcode2(3 downto 0); - - case decodedOpcode is - - when Decoded_DoubleIm => - memAWriteEnable <= '1'; - sp <= sp - 1; - memAAddr <= sp-1; - for i in wordSize-1 downto 14 loop - memAWrite(i) <= opcode(6); - end loop; - memAWrite(13 downto 7) <= opcode(6 downto 0); - memAWrite(6 downto 0) <= opcode2(6 downto 0); - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - pc <= pc + 2; - when Decoded_Im => - memAWriteEnable <= '1'; - 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); - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - when Decoded_ImShift => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); - memAWrite(6 downto 0) <= opcode(6 downto 0); - memBAddr <= sp + 1; - when Decoded_StoreSP => - memAWriteEnable <= '1'; - memAAddr <= sp+spOffset; - memAWrite <= memARead; - -- avoid address crashes. - memBAddr <= sp - 1; - sp <= sp + 1; - state <= State_ResyncDecode; - when Decoded_LoadSP => - sp <= sp - 1; - if (spOffset = 0) then - -- This is a duplicate instruction. - memAAddr <= sp-1; - memAWriteEnable <= '1'; - memAWrite <= memARead; - else - memAAddr <= sp+spOffset; - end if; - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - when Decoded_Callpcrel => - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBit downto 0) <= pc + 1; - memBAddr <= sp+1; - pc <= pc + memARead(maxAddrBit downto 0); - state <= State_ResyncDecode; - when Decoded_Emulate => - sp <= sp - 1; - memAWriteEnable <= '1'; - memAAddr <= sp - 1; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBit downto 0) <= pc + 1; - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - -- The emulate address is: - -- 98 7654 3210 - -- 0000 00aa aaa0 0000 - pc <= (others => '0'); - pc(9 downto 5) <= opcode(4 downto 0); - state <= State_ResyncDecode; - when Decoded_AddSP => - if spOffset=0 then - -- avoid address line crashes... - -- FIX!!! is this an issue? - -- oh-well. While we are at it, we've got a faster - -- shift operation without updating the toolchain. - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= memARead + memARead; - memBAddr <= sp+1; - else - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= memARead; - memBAddr <= sp+spOffset; - state <= State_AddSP; - end if; - 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; - memBAddr <= sp; - memBWrite <= memARead; - memBWriteEnable <= '1'; - when Decoded_Pushspadd => - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= (others => DontCareValue); - pushspaddTemp := memARead(maxAddrBit-minAddrBit downto 0); - memAWrite(maxAddrBit downto minAddrBit) <= sp+pushspaddTemp; - memBAddr <= sp+1; - when Decoded_PopPC => - memAAddr <= sp; - pc <= memARead(maxAddrBit downto 0); - sp <= sp + 1; - state <= State_ResyncDecode; - when Decoded_AddIm => - memAWriteEnable <= '1'; - memAAddr <= sp; - tempVal(wordSize-1 downto 7) := (others => tOpcode(6)); - tempVal(6 downto 0) := tOpcode(6 downto 0); - memAWrite <= memARead + tempVal; - memBAddr <= sp + 1; - pc <= pc + 2; - when Decoded_Add => - memAWriteEnable <= '1'; - memAWrite <= memARead + memBRead; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - sp <= sp + 1; - when Decoded_Or => - sp <= sp + 1; - memAWriteEnable <= '1'; - memAWrite <= memARead or memBRead; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - when Decoded_And => - sp <= sp + 1; - memAWriteEnable <= '1'; - memAWrite <= memARead and memBRead; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - 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); - memBAddr <= sp + 1; - end if; - when Decoded_Swap => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite(wordSize/2-1 downto 0) <= memARead(wordSize-1 downto wordSize/2); - memAWrite(wordSize-1 downto wordSize/2) <= memARead(wordSize/2-1 downto 0); - memBAddr <= sp + 1; - when Decoded_Not => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite <= not memARead; - memBAddr <= sp + 1; - when Decoded_Flip => - memAAddr <= sp; - memAWriteEnable <= '1'; - for i in 0 to wordSize-1 loop - memAWrite(i) <= memARead(wordSize-1-i); - end loop; - memBAddr <= sp + 1; - when Decoded_Lshift2 => - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite(1 downto 0) <= (others => '0'); - memAWrite(wordSize-1 downto 2) <= memARead(wordSize-1-2 downto 0); - memBAddr <= sp + 1; - pc <= pc + 2; - when Decoded_Store => - sp <= sp + 2; - if (memARead(ioBit)='1') then - out_mem_writeEnable <= '1'; - out_mem_addr <= memARead(maxAddrBitIncIO downto 0); - mem_write <= memBRead; - state <= State_WriteIO; - else - memAWriteEnable <= '1'; - memAAddr <= memARead(maxAddrBit downto minAddrBit); - memAWrite <= memBRead; - state <= State_ResyncDecode; - end if; - when Decoded_PopSP => - sp <= memARead(maxAddrBit downto minAddrBit); - state <= State_ResyncDecode; - when Decoded_Ashiftleft => - memAWrite(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))) <= - memBRead(wordSize-conv_integer(memARead(wordPower-1 downto 0))-1 downto 0); - if memARead(wordPower-1 downto 0)/=0 then - memAWrite(conv_integer(memARead(wordPower-1 downto 0))-1 downto 0) <= (others => '0'); - end if; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - sp <= sp + 1; - when Decoded_Ashiftright | Decoded_Lshiftright => - memAWrite(wordSize-1-conv_integer(memARead(wordPower-1 downto 0)) downto 0) <= - memBRead(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))); - if memARead(wordPower-1 downto 0)/=0 then - if decodedOpcode=Decoded_Ashiftright and memBRead(wordSize-1)='1' then - memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '1'); - else - memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '0'); - end if; - end if; - memAWriteEnable <= '1'; - memAAddr <= sp + 1; - memBAddr <= sp + 2; - sp <= sp + 1; - when Decoded_Eqbranch => - sp <= sp + 2; - if (memBRead=0) then - pc <= memARead(maxAddrBit downto 0) + pc; - end if; - state <= State_ResyncDecode; - when Decoded_Neqbranch => - sp <= sp + 2; - if (memBRead/=0) then - pc <= memARead(maxAddrBit downto 0) + pc; - end if; - state <= State_ResyncDecode; - when Decoded_Eq => - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead=memBRead) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Neq => - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead/=memBRead) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Ulessthan => - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead - sp <= sp + 1; - memAWrite <= (others => '0'); - if (memARead<=memBRead) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Lessthan => - sp <= sp + 1; - memAWrite <= (others => '0'); - compareA := signed(memARead); - compareB := signed(memBRead); - if (compareA - sp <= sp + 1; - memAWrite <= (others => '0'); - compareA := signed(memARead); - compareB := signed(memBRead); - if (compareA<=compareB) then - memAWrite(0) <= '1'; - end if; - memAAddr <= sp + 1; - memAWriteEnable <= '1'; - memBAddr <= sp + 2; - when Decoded_Loadb => - byteSelect <= memARead(minAddrBit-1 downto 0); - memAAddr <= memARead(maxAddrBit downto minAddrBit); - state <= State_LoadByte1; - when Decoded_Storeb => - sp <= sp + 2; - byteSelect <= memARead(minAddrBit-1 downto 0); - storeByte <= memBRead(7 downto 0); - memAAddr <= memARead(maxAddrBit downto minAddrBit); - memBAddr <= sp; - state <= State_StoreByte1; - when Decoded_Mult16x16 => - mult1 <= memARead(wordSize/2-1 downto 0); - mult2 <= memBRead(wordSize/2-1 downto 0); - sp <= sp + 1; - state <= State_Mult1; - when others => - -- nop. Here we persist whatever was loaded into - -- memARead - memAAddr <= sp; - memAWriteEnable <= '1'; - memAWrite <= memARead; - memBAddr <= sp + 1; - - end case; - when State_ReadIO => - state <= State_ReadIODone; - when State_ReadIODone => - if (in_mem_busy = '0') then - state <= State_ResyncDecode; - memAWriteEnable <= '1'; - memAWrite <= (others => '0'); - memAWrite <= mem_read; - memAAddr <= sp; - end if; - when State_WriteIO => - state <= State_WriteIODone; - when State_WriteIODone => - if (in_mem_busy = '0') then - state <= State_ResyncDecode; - end if; - when State_ResyncDecode => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_ResyncStack; - when State_ResyncStack => - memAAddr <= sp; - memBAddr <= sp+1; - state <= State_Decode; - when State_AddSP => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_Add; - when State_Add => - memAWriteEnable <= '1'; - memAWrite <= memARead + memBRead; - memAAddr <= sp; - memBAddr <= sp + 1; - state <= State_Decode; - when State_LoadByte1 => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_LoadByte2; - when State_LoadByte2 => - memAWriteEnable <= '1'; - memAAddr <= sp; - memAWrite <= (others => '0'); - case byteSelect is - when "00" => memAWrite(7 downto 0) <= memARead(31 downto 24); - when "01" => memAWrite(7 downto 0) <= memARead(23 downto 16); - when "10" => memAWrite(7 downto 0) <= memARead(15 downto 8); - when others => memAWrite(7 downto 0) <= memARead(7 downto 0); - end case; - memBAddr <= sp + 1; - state <= State_Decode; - when State_StoreByte1 => - state <= State_StoreByte2; - when State_StoreByte2 => - memAWriteEnable <= '1'; - memAAddr <= memBRead(maxAddrBit downto minAddrBit); - memAWrite <= memARead; - case byteSelect is - when "00" => memAWrite(31 downto 24) <= storeByte; - when "01" => memAWrite(23 downto 16) <= storeByte; - when "10" => memAWrite(15 downto 8) <= storeByte; - when others => memAWrite(7 downto 0) <= storeByte; - end case; - state <= State_ResyncDecode; - when State_Mult1 => - memAAddr <= pc(maxAddrBit downto minAddrBit); - nextPC:=pc+1; - memBAddr <= nextPC(maxAddrBit downto minAddrBit); - state <= State_Mult2; - when State_Mult2 => - memAWriteEnable <= '1'; - memAWrite <= multResult; - memAAddr <= sp; - memBAddr <= sp + 1; - state <= State_Decode; - - when others => - null; - end case; - end if; - end process; - - - -end behave; diff --git a/zpu/roadshow/roadshow/helloworld/test.c b/zpu/roadshow/roadshow/helloworld/test.c index 8c33640..5243468 100644 --- a/zpu/roadshow/roadshow/helloworld/test.c +++ b/zpu/roadshow/roadshow/helloworld/test.c @@ -1,3 +1,4 @@ +/* zpu-elf-gcc -g -Wl,--relax test.c -phi -o hello.elf */ int main(int argc, char **argv) { for (;;) -- cgit v1.1 From af198f5c76764dd55a5eed7a29ab24b032792e89 Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 15 Apr 2008 06:00:18 +0000 Subject: retired --- zpu/hdl/zpu4/src/status.txt | 109 -------------------------------------------- 1 file changed, 109 deletions(-) delete mode 100644 zpu/hdl/zpu4/src/status.txt diff --git a/zpu/hdl/zpu4/src/status.txt b/zpu/hdl/zpu4/src/status.txt deleted file mode 100644 index df01caf..0000000 --- a/zpu/hdl/zpu4/src/status.txt +++ /dev/null @@ -1,109 +0,0 @@ -- 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. -- cgit v1.1 From 23eeb5e93c3305c196f8d0811b0347000df7a36f Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 15 Apr 2008 06:48:28 +0000 Subject: * zpu/docs/zpu_arch.odt - a short summary of the architecture --- zpu/ChangeLog | 1 + zpu/docs/zpu_arch.odt | Bin 0 -> 22228 bytes zpu/docs/zpuprotoarch.odt | Bin 23961 -> 0 bytes 3 files changed, 1 insertion(+) create mode 100644 zpu/docs/zpu_arch.odt delete mode 100644 zpu/docs/zpuprotoarch.odt diff --git a/zpu/ChangeLog b/zpu/ChangeLog index e883d0d..0b787b1 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,4 +1,5 @@ 2008-04-15 Øyvind Harboe + * zpu/docs/zpu_arch.odt - a short summary of the architecture * zpu/simzpu_bram.do - retired. * zpu/zpu_core_bram.vhd - retired * zpu/hdl/zpu3 - retired diff --git a/zpu/docs/zpu_arch.odt b/zpu/docs/zpu_arch.odt new file mode 100644 index 0000000..047f74e Binary files /dev/null and b/zpu/docs/zpu_arch.odt differ diff --git a/zpu/docs/zpuprotoarch.odt b/zpu/docs/zpuprotoarch.odt deleted file mode 100644 index 67a4171..0000000 Binary files a/zpu/docs/zpuprotoarch.odt and /dev/null differ -- cgit v1.1 From fbce0c049625e1c756a4eaddfa8e115bc2c4fc01 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 16 Apr 2008 07:03:32 +0000 Subject: wip --- zpu/docs/zpu_arch.html | 335 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) create mode 100644 zpu/docs/zpu_arch.html diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html new file mode 100644 index 0000000..ca18fae --- /dev/null +++ b/zpu/docs/zpu_arch.html @@ -0,0 +1,335 @@ + + +

      Instruction set

      +Only the base instructions are implemented in the architecture. More advanced instructions, like ASHIFTLEFT are emulated in the illegal instruction vector. + +All operations are 32 bit wide. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameOpcodeDescriptionDefinition
      + BREAKPOINT + + 00000000 + + The debugger sets a memory location to this value to set a breakpoint. Once a JTAG-like + debugger interface is added, it will be convenient to be able to distinguish + between a breakpoint and an illegal(possibly emulated) instruction. + + No effect on registers +
      + IM + + 1xxx xxxx + + Pushes 7 bit sign extended integer and sets the a «instruction decode interrupt mask» flag(IDIM). +

      + If the IDIM flag is already set, this instruction shifts the value on the stack left by 7 bits and stores the 7 bit immediate value into the lower 7 bits. +

      + Unless an instruction is listed as treating the IDIM flag specially, it should be assumed to clear the IDIM flag. +

      + To push a 14 bit integer onto the stack, use two consequtive IM instructions. +

      + If multiple immediate integers are to be pushed onto the stack, they must be interleaved with another instruction, typically NOP. +

      + +
      + STORESP + + 010x xxxx + + Pop value off stack and store it in the SP+xxxxx*4 memory location, where xxxxx is a positive integer. + + Fix! +
      + LOADSP + + 011x xxxx + + Push value of memory location SP+xxxxx*4, where xxxxx is a positive integer, onto stack. + + Fix! +
      + ADDSP + + 0001 xxxx + + Add value of memory location SP+xxxx*4 to value on top of stack. + + Fix! +
      + EMULATE + + 001x xxxx + + Push PC to stack and set PC to 0x0+xxxxx*32. This is used to emulate opcodes. See zpupgk.vhd for list of emulate opcode values used. zpu_core.vhd contains reference implementations of these instructions rather than letting the ZPU execute the EMULATE instruction + + Fix! +
      + PUSHPC + + emulated + + Pushes program counter onto the stack. + + Fix! +
      + POPPC + + 0000 0100 + + Pops address off stack and sets PC + + Fix! +
      + LOAD + + 0000 1000 + + Pops address stored on stack and loads the value of that address onto stack. + + Fix! +
      + LOAD + + 0000 1000 + + Pops address stored on stack and loads the value of that address onto stack. +

      + Bit 0 and 1 of address are always 0. +

      + Fix! +
      + STORE + + 0000 1100 + + Pops address, then value from stack and stores the value into the memory location of the address. +

      + Bit 0 and 1 of address are always 0 +

      + Fix! +
      + PUSHSP + + 0000 0010 + + Pushes stack pointer. + + Fix! +
      + POPSP + + 0000 1101 + + Used to allocate/deallocate space on stack for variables or when changing threads. + + Fix! +
      + ADD + + 0000 0101 + + Pops two values on stack adds them and pushes the result + + Fix! +
      + AND + + 0000 0110 + + Pops two values off the stack and does a bitwise-and & pushes the result onto the stack + + Fix! +
      + OR + + 0000 0111 + + Pops two integers, does a bitwise or and pushes result + + Fix! +
      + NOT + + 0000 1001 + + Bitwise inverse of value on stack + + + Fix! +
      + FLIP + + 0000 1010 + + Reverses the bit order of the value on the stack, i.e. abc->cba, 100->001, 110->011, etc. + + Fix! +
      + NOP + + 0000 1011 + + No operation + + Fix! +
      + Fix! add emulated instructions! Listed in zpupkg.vhd + + 001x xxxx + + Fix!! + + Fix! +
      + +

      Vectors

      + + + + + + + + + + + + + + + + + +
      AddressNameDescription
      0x000Reset + 1.When the ZPU boots, this is the first instruction to be executed. +

      + 2.The stack pointer is initialised to maximum RAM address +

      0x020Interrupt + This is the entry point for interrupts. +
      0x040-Emulated instructions + Emulated opcode 34. Note that opcode 32 and opcode 33 are not normally used to emulate instructions as these memory addresses are already used by boot vector, GCC registers and the interrupt vector. +
      + + + \ No newline at end of file -- cgit v1.1 From 034794137533316abb06191976c9fa254124da40 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 16 Apr 2008 07:14:57 +0000 Subject: * zpu/docs/zpu_arch.html: added. Need to define instruction set. * zpu/docs/zpu_arch.odt: retired --- zpu/ChangeLog | 3 +++ zpu/docs/zpu_arch.html | 16 +++++++++++++++- zpu/docs/zpu_arch.odt | Bin 22228 -> 0 bytes 3 files changed, 18 insertions(+), 1 deletion(-) delete mode 100644 zpu/docs/zpu_arch.odt diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 0b787b1..5a82aef 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,6 @@ +2008-04-16 Øyvind Harboe + * zpu/docs/zpu_arch.html: added. Need to define instruction set. + * zpu/docs/zpu_arch.odt: retired 2008-04-15 Øyvind Harboe * zpu/docs/zpu_arch.odt - a short summary of the architecture * zpu/simzpu_bram.do - retired. diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index ca18fae..3f306f1 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -41,7 +41,21 @@ All operations are 32 bit wide. If multiple immediate integers are to be pushed onto the stack, they must be interleaved with another instruction, typically NOP. - + +pc <= pc + 1
      +idim <= 1
      +if (idim=0) then
      + sp <= sp - 1;
      + for i in wordSize-1 downto 7 loop
      + mem(sp)(i) <= opcode(6)
      + end loop
      + mem(sp)(6 downto 0) <= opcode(6 downto 0)
      +else
      + mem(sp)(wordSize-1 downto 7) <= mem(sp)(wordSize-8 downto 0)
      + mem(sp)(6 downto 0) <= opcode(6 downto 0)
      +end if +
      + diff --git a/zpu/docs/zpu_arch.odt b/zpu/docs/zpu_arch.odt deleted file mode 100644 index 047f74e..0000000 Binary files a/zpu/docs/zpu_arch.odt and /dev/null differ -- cgit v1.1 From f0ef5e051f422887eff80cd8e6d8ab224e5e9114 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 16 Apr 2008 08:29:27 +0000 Subject: * zpu/docs/zpu_arch.html: added Phi memory map to end of zpu_arch.html * zpu/docs/zpuphiregs.odt: retired --- zpu/ChangeLog | 2 + zpu/docs/zpu_arch.html | 377 ++++++++++++++++++++++++++++++++++++++++++++++++ zpu/docs/zpuphiregs.odt | Bin 27013 -> 0 bytes 3 files changed, 379 insertions(+) delete mode 100644 zpu/docs/zpuphiregs.odt diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 5a82aef..052c479 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,4 +1,6 @@ 2008-04-16 Øyvind Harboe + * zpu/docs/zpu_arch.html: added Phi memory map to end of zpu_arch.html + * zpu/docs/zpuphiregs.odt: retired * zpu/docs/zpu_arch.html: added. Need to define instruction set. * zpu/docs/zpu_arch.odt: retired 2008-04-15 Øyvind Harboe diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 3f306f1..df692a7 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -344,6 +344,383 @@ end if + +

      Phi memory map

      +The ZPU architecture does not define a memory map as such, but the GCC + libgloss + ecos hal library uses the +memory map below. +

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +

      Address

      +
      +

      Type

      +
      +

      Name

      +
      +

      Description

      +
      +

      0x080A0000

      +
      +

      Write

      +
      +

      ZPU + enable

      +
      +

      Bit + [31:1] Not used

      +

      Bit + [0] Enable ZPU operations

      +

      0 ZPU + is held in Idle mode

      +

      1 ZPU + running

      +
      +

      0x080A000C

      +
      +

      Read/

      +

      Write

      +
      +

      ZPU + UART to ARM7 TX

      +

      NOTE! + ZPU side

      +
      +

      Bit + [31:9] Not used

      +

      Bit + [8] TX buffer ready (valid on ready)

      +

      0 TX + buffer not ready (full)

      +

      1 TX + buffer ready

      +

      Bit + [7:0] TX byte (valid on write)

      +
      +

      0x080A0010

      +
      +

      Read

      +
      +

      ZPU + UART to ARM7 RX

      +

      NOTE! + ZPU side

      +
      +

      Bit + [31:9] Not used

      +

      Bit + [8] RX buffer data valid

      +

      0 TX + buffer not valid

      +

      1 TX + buffer valid

      +

      Bit + [7:0] RX byte (when valid)

      +
      +

      0x080A0014

      +
      +

      Read/

      +

      Write

      +
      +

      Counter(1)

      +
      +

      Bit + [0] Reset counter (valid for write)

      +

      0 N/A

      +

      1 Reset + counter

      +

      Bit + [1] Sample counter (valid for write)

      +

      0 N/A

      +

      1 Sample + counter

      +

      Bit + [31:0] Counter bit 31:0

      +
      +

      0x080A0018

      +
      +

      Read

      +
      +

      Counter(2)

      +
      +

      Bit + [31:0] Counter bit 63:32

      +
      +

      0x080A0020

      +
      +

      Read + / Write

      +
      +

      Global_Interrupt_mask

      +
      +

      Bit + [31:1] Not used

      +

      Bit + [0] Global intr. Mask

      +

      0 Interrupts + enabled

      +

      1 Interrupts + disabled

      +
      +

      0x080A0024

      +
      +

      Write

      +
      +

      UART_INTERRUPT_ENABLE

      +
      +

      Bit + [31:1] Not used

      +

      Bit + [0] UART RX interrupt enable

      +

      0 Interrupt + disable

      +

      1 Interrupt + enable

      +
      +

      0x080A0028

      +
      +

      Read

      +

      Write

      +
      +

      UART_interrupt

      +
      +

      Bit + [31:1] Not used

      +

      Bit + [0] UART RX interrupt pending (Read)

      +

      0 No + interrupt pending

      +

      1 Interrupt + pending

      +

      Bit + [0] Clear UART interrupt (Write)

      +

      0 N/A

      +

      1 Interrupt + cleared

      +
      +

      0x080A002C

      +
      +

      Write

      +
      +

      Timer_Interrupt_enable

      +
      +

      Bit + [31:1] Not used

      +

      Bit + [0] Timer interrupt enable

      +

      0 Interrupt + disable

      +

      1 Interrupt + enable

      +
      +

      0x080A0030

      +
      +

      Read + /

      +

      Write

      +
      +

      Timer_interrupt

      +
      +

      Bit + [31:2] Not used

      +

      Bit + [0] Timer interrupt pending (Read)

      +

      0 No + interrupt pending

      +

      1 Interrupt + pending

      +

      Bit + [1] Reset Timer counter (Write)

      +

      0 N/A

      +

      1 Timer + counter reset

      +

      Bit + [0] Clear Timer interrupt (Write)

      +

      0 N/A

      +

      1 Interrupt + cleared

      +
      +

      0x080A0034

      +
      +

      Write

      +
      +

      Timer_Period

      +
      +

      Bit + [31:0] Interrupt period (write)

      +

      Number + of clock cycles

      +

      between + timer interrupts

      +

      NOTE! + The timer will start at Timer_Periode value and count down + to zero, and generate an interrupt

      +
      +

      .0x080A0038

      +
      +

      Read

      +
      +

      Timer_Counter

      +
      +

      Bit + [31:0] Timer counter (read)

      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      +


      +

      +
      + \ No newline at end of file diff --git a/zpu/docs/zpuphiregs.odt b/zpu/docs/zpuphiregs.odt deleted file mode 100644 index 4b64d50..0000000 Binary files a/zpu/docs/zpuphiregs.odt and /dev/null differ -- cgit v1.1 From af5b54efbbcbe6e80478ddb24ac2e95a33e63a2d Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 16 Apr 2008 12:49:31 +0000 Subject: * zpu/doc/zpupresentation_old.odt: interesting bits moved into zpu_arch.html * zpu/doc/zpupresentation.*: interesting bits moved into zpu_arch.html --- zpu/ChangeLog | 2 ++ zpu/docs/zpu_arch.html | 47 +++++++++++++++++++++++++++++++++++++++ zpu/docs/zpupresentation.odp | Bin 78518 -> 0 bytes zpu/docs/zpupresentation.ppt | Bin 150016 -> 0 bytes zpu/docs/zpupresentation_old.odt | Bin 126772 -> 0 bytes 5 files changed, 49 insertions(+) delete mode 100644 zpu/docs/zpupresentation.odp delete mode 100644 zpu/docs/zpupresentation.ppt delete mode 100644 zpu/docs/zpupresentation_old.odt diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 052c479..3c432e8 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,4 +1,6 @@ 2008-04-16 Øyvind Harboe + * zpu/doc/zpupresentation_old.odt: interesting bits moved into zpu_arch.html + * zpu/doc/zpupresentation.*: interesting bits moved into zpu_arch.html * zpu/docs/zpu_arch.html: added Phi memory map to end of zpu_arch.html * zpu/docs/zpuphiregs.odt: retired * zpu/docs/zpu_arch.html: added. Need to define instruction set. diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index df692a7..a1f61a1 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1,5 +1,52 @@ +

      Introduction

      +The ZPU is a zero operand, or stack based CPU. The opcodes have a fixed width of 8 bits. +

      +Example: +

      +

      + + IM 5 ; push 5 onto the stack + LOADSP 20 ; push value at memory location SP+20 + ADD ; pop 2 values on the stack and push the result + +
      +As can be seen, a lot of information is packed into the 8 bits, e.g. the IM instruction pushes a 7 bit signed integer onto the stack. +

      +The choice of opcodes is intimately tied to the GCC toolchain capabilities. +

      +

      + + /* simple program showing some interesting qualities of the ZPU toolchain */ + void bar(int); + int j; + void foo(int a, int b, int c) + { + a++; + b+=a; + j=c; + bar(b); + } + +foo: + loadsp 4 ; a is at memory location SP+4 + im 1 + add + loadsp 12 ; b is now at memory location SP+12 + add + loadsp 16 ; c is now at memory location SP+16 + im 24 ; «j» is at absolute memory location 24. +; Notice how the ZPU toolchain is using link-time relaxation +; to squeeze the address into a single no-op + store + im 22 ; the fn bar is at address 22 + call + im 12 + return ; 12 bytes of arguments + return from fn + +
      +

      Instruction set

      Only the base instructions are implemented in the architecture. More advanced instructions, like ASHIFTLEFT are emulated in the illegal instruction vector. diff --git a/zpu/docs/zpupresentation.odp b/zpu/docs/zpupresentation.odp deleted file mode 100644 index 28d9a7b..0000000 Binary files a/zpu/docs/zpupresentation.odp and /dev/null differ diff --git a/zpu/docs/zpupresentation.ppt b/zpu/docs/zpupresentation.ppt deleted file mode 100644 index 100c4a4..0000000 Binary files a/zpu/docs/zpupresentation.ppt and /dev/null differ diff --git a/zpu/docs/zpupresentation_old.odt b/zpu/docs/zpupresentation_old.odt deleted file mode 100644 index 53e1f98..0000000 Binary files a/zpu/docs/zpupresentation_old.odt and /dev/null differ -- cgit v1.1 From 748de9774226a19c32ee1ed6a4e6474e9e0acb27 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 17 Apr 2008 06:42:27 +0000 Subject: * retired Xilinx synthesizing example. It messes up the zpu4 directory. --- zpu/ChangeLog | 2 + zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd | 31 - zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd | 213 ---- .../dummyfpgalib/ddrsdram/simscripts/ddr_tb.do | 17 - .../dummyfpgalib/ddrsdram/simscripts/ddr_top.do | 111 -- zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd | 90 -- zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd | 301 ----- zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd | 660 ---------- .../zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd | 1320 -------------------- zpu/hdl/zpu4/src/build.xml | 114 -- zpu/hdl/zpu4/src/ic300.bitgen | 27 - zpu/hdl/zpu4/src/ic300.lso | 1 - zpu/hdl/zpu4/src/ic300.ucf | 146 --- zpu/hdl/zpu4/src/ic300.vhd | 144 --- zpu/hdl/zpu4/src/ic300_config.vhd | 26 - zpu/hdl/zpu4/src/ic300pkg.vhd | 88 -- zpu/hdl/zpu4/src/xmake.filelist | 12 - zpu/hdl/zpu4/src/xmake.filelist.bramsmall | 5 - zpu/hdl/zpu4/src/xmake.xst | 53 - zpu/hdl/zpu4/src/zpuio_bram.vhd | 229 ---- 20 files changed, 2 insertions(+), 3588 deletions(-) delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd delete mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd delete mode 100644 zpu/hdl/zpu4/src/build.xml delete mode 100644 zpu/hdl/zpu4/src/ic300.bitgen delete mode 100644 zpu/hdl/zpu4/src/ic300.lso delete mode 100644 zpu/hdl/zpu4/src/ic300.ucf delete mode 100644 zpu/hdl/zpu4/src/ic300.vhd delete mode 100644 zpu/hdl/zpu4/src/ic300_config.vhd delete mode 100644 zpu/hdl/zpu4/src/ic300pkg.vhd delete mode 100644 zpu/hdl/zpu4/src/xmake.filelist delete mode 100644 zpu/hdl/zpu4/src/xmake.filelist.bramsmall delete mode 100644 zpu/hdl/zpu4/src/xmake.xst delete mode 100644 zpu/hdl/zpu4/src/zpuio_bram.vhd diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 3c432e8..9b722e8 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,5 @@ +2008-04-17 Øyvind Harboe + * retired Xilinx synthesizing example. It messes up the zpu4 directory. 2008-04-16 Øyvind Harboe * zpu/doc/zpupresentation_old.odt: interesting bits moved into zpu_arch.html * zpu/doc/zpupresentation.*: interesting bits moved into zpu_arch.html diff --git a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd deleted file mode 100644 index 95fbc18..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd +++ /dev/null @@ -1,31 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -package arm7 is - - component arm7wb - generic( - simulate_io_time : boolean := false); - port ( areset : in std_logic; - cpu_clk : in std_logic; - cpu_clk_2x : in std_logic; - 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; - - cpu_din : out std_logic_vector(15 downto 0); - cpu_a : out std_logic_vector(20 downto 0); - cpu_we : out std_logic_vector(1 downto 0); - cpu_re : out std_logic; - cpu_dout : in std_logic_vector(15 downto 0)); - end component; - -end arm7; - - \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd deleted file mode 100644 index 55b8125..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd +++ /dev/null @@ -1,213 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity arm7wb is - generic( - simulate_io_time : boolean := false); - port ( areset : in std_logic; - cpu_clk : in std_logic; - cpu_clk_2x : in std_logic; - 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; - - cpu_din : out std_logic_vector(15 downto 0); - cpu_a : out std_logic_vector(20 downto 0); - cpu_we : out std_logic_vector(1 downto 0); - cpu_re : out std_logic; - cpu_dout : in std_logic_vector(15 downto 0)); -end arm7wb; - -architecture behave of arm7wb is - -attribute keep : string; - -signal cpu_oe_n : std_logic; -signal cpu_fiq : std_logic; -signal cpu_wait_n : std_logic; -signal cpu_clk_toggle : std_logic; -signal cpu_clk_smp1 : std_logic; -signal cpu_clk_smp2 : std_logic; -signal cpu_clk_phase : std_logic; -signal cpu_oe_n_del : std_logic; -signal cpu_a_smp : std_logic_vector(20 downto 0); -signal cpu_d_smp : std_logic_vector(15 downto 0); - -signal int_oe_n : std_logic_vector(15 downto 0); -attribute keep of int_oe_n:signal is "true"; - -signal cpu_irq : std_logic_vector(1 downto 0); -signal cpu_wr_n : std_logic_vector(1 downto 0); -signal cpu_cs_n : std_logic_vector(3 downto 1); - -signal dout : std_logic_vector(15 downto 0); -signal cpu_d_p_out : std_logic_vector(15 downto 0); -signal read_cnt : std_logic_vector(1 downto 0); - -signal cpu_wr_n_p_del : std_logic_vector(1 downto 0); -signal cpu_a_p_del : std_logic_vector(20 downto 0); -signal cpu_d_p_del : std_logic_vector(15 downto 0); -signal cpu_cs_n_p_del : std_logic_vector(3 downto 1); -signal cpu_oe_n_p_del : std_logic; - -constant Sim_Delay : time := 0.5 ns; -constant Clock_2_Out : time := 5.5 ns; -constant Input_Setup : time := 2.5 ns; - -begin - - cpu_wait_n <= '1'; - cpu_fiq <= '1'; - cpu_irq <= "11"; - - iotimingon: - if simulate_io_time generate - begin - cpu_wr_n_p_del <= "XX" after 0 ns, cpu_wr_n_p after Input_Setup; - cpu_a_p_del <= "XXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup; - cpu_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup; - cpu_cs_n_p_del <= "XXX" after 0 ns, cpu_cs_n_p after Input_Setup; - cpu_oe_n_p_del <= 'X' after 0 ns, cpu_oe_n_p after Input_Setup; - end generate; - - iotimingoff: - if not simulate_io_time generate - begin - cpu_wr_n_p_del <= cpu_wr_n_p; - cpu_a_p_del <= cpu_a_p; - cpu_d_p_del <= cpu_d_p; - cpu_cs_n_p_del <= cpu_cs_n_p; - cpu_oe_n_p_del <= cpu_oe_n_p; - end generate; - - process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase - begin - if areset = '1' then - cpu_clk_toggle <= '0'; - elsif (cpu_clk'event and cpu_clk = '1') then - cpu_clk_toggle <= not(cpu_clk_toggle); - end if; - end process; - - process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock - begin - if areset = '1' then - cpu_clk_smp1 <= '0'; - cpu_clk_smp2 <= '1'; - cpu_clk_phase <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - cpu_clk_smp1 <= cpu_clk_toggle; - cpu_clk_smp2 <= cpu_clk_smp1; - if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then - cpu_clk_phase <= '0' after Sim_Delay; - else - cpu_clk_phase <= not(cpu_clk_phase) after Sim_Delay; - end if; - end if; - end process; - - process(cpu_clk_2x, areset) -- Sample input signals - begin - if areset = '1' then - cpu_oe_n <= '1'; - cpu_a_smp <= "000000000000000000000"; - cpu_d_smp <= "0000000000000000"; - cpu_wr_n <= "11"; - cpu_cs_n <= "111"; - elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then - cpu_oe_n <= cpu_oe_n_p_del after Sim_Delay; - cpu_a_smp <= cpu_a_p_del after Sim_Delay; - cpu_d_smp <= cpu_d_p_del after Sim_Delay; - cpu_wr_n <= cpu_wr_n_p_del after Sim_Delay; - cpu_cs_n <= cpu_cs_n_p_del after Sim_Delay; - end if; - end process; - - cpu_d_out: - for i in 0 to 15 generate - begin - process(cpu_clk_2x, areset) - begin - if areset = '1' then - cpu_d_p(i) <= 'Z'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - if int_oe_n(i) = '0' then - cpu_d_p(i) <= cpu_d_p_out(i) after Clock_2_Out; - else - cpu_d_p(i) <= 'Z' after Clock_2_Out; - end if; - end if; - end process; - end generate; - - process(cpu_clk, areset) -- Clocked output pins - begin - if areset = '1' then - cpu_d_p_out <= "1111111111111111"; - cpu_wait_n_p <= '1'; - cpu_irq_p <= "11"; - cpu_fiq_p <= '1'; - elsif (cpu_clk = '1' and cpu_clk'event) then - cpu_d_p_out <= cpu_dout; - cpu_wait_n_p <= '1'; - cpu_irq_p <= "11"; - cpu_fiq_p <= '1'; - end if; - end process; - - process(cpu_clk, areset) -- Generate control signals - begin - if areset = '1' then - int_oe_n <= "1111111111111111"; - read_cnt <= "00"; - cpu_we <= "00"; - cpu_re <= '0'; - cpu_a <= "000000000000000000000"; - cpu_din <= "0000000000000000"; - elsif (cpu_clk = '1' and cpu_clk'event) then - - cpu_a <= cpu_a_smp; - cpu_din <= cpu_d_smp; - - cpu_oe_n_del <= cpu_oe_n; - - if cpu_cs_n(1) = '1' then - read_cnt <= "00"; - else - read_cnt <= read_cnt + '1'; - end if; - - if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_wr_n(0) = '0' then - cpu_we(0) <= '1'; - else - cpu_we(0) <= '0'; - end if; - - if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_wr_n(1) = '0' then - cpu_we(1) <= '1'; - else - cpu_we(1) <= '0'; - end if; - - if read_cnt = "00" and cpu_cs_n(1) = '0' and cpu_oe_n = '0' then - cpu_re <= '1'; - else - cpu_re <= '0'; - end if; - - if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_oe_n = '0' then - int_oe_n <= "0000000000000000"; - else - int_oe_n <= "1111111111111111"; - end if; - - end if; - end process; - -end behave; diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do deleted file mode 100644 index d2c22cf..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do +++ /dev/null @@ -1,17 +0,0 @@ -vlib zylin -vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_pkg.vhd -vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_top.vhd -vcom -93 -explicit -work zylin ../ddrsdram/src/mt46v16m16.vhd -vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_tb.vhd -vlib work -vsim -t 1ps zylin.ddr_tb -view wave -view signals -radix hex -add wave * -add wave sim:/ddr_tb/ddr_ctrl/* -force -freeze sim:/ddr_tb/areset 1 0 -run 10 ns -force -freeze sim:/ddr_tb/areset 0 0 -when sim:/ddr_tb/break_out stop -run 10 ms \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do deleted file mode 100644 index 31dd294..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do +++ /dev/null @@ -1,111 +0,0 @@ -vlib zylin -vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_pkg.vhd -vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_top.vhd -vlib work -vsim -t 1ps zylin.ddr_top -view wave -view signals -radix hex -# Add wave signals - -add wave -divider "System" -add wave sim:/ddr_top/areset -add wave sim:/ddr_top/cpu_clk -add wave sim:/ddr_top/cpu_clk_2x -add wave sim:/ddr_top/cpu_clk_4x -add wave sim:/ddr_top/ddr_in_clk -add wave sim:/ddr_top/ddr_in_clk_2x - -add wave -divider "Ctrl interface" -add wave sim:/ddr_top/cpu_clk -add wave sim:/ddr_top/ddr_data_read -add wave sim:/ddr_top/ddr_data_write -add wave sim:/ddr_top/ddr_req -add wave sim:/ddr_top/ddr_rd_wr_n -add wave sim:/ddr_top/ddr_req_len -add wave sim:/ddr_top/ddr_wr_mask -add wave sim:/ddr_top/ddr_read_en -add wave sim:/ddr_top/ddr_write_en -add wave sim:/ddr_top/ddr_command -add wave sim:/ddr_top/ddr_command_we - -add wave -divider "DDR interface" -add wave sim:/ddr_top/sdr_clk_p -add wave sim:/ddr_top/sdr_clk_n_p -add wave sim:/ddr_top/cke_q_p -add wave sim:/ddr_top/cs_qn_p -add wave sim:/ddr_top/ras_qn_p -add wave sim:/ddr_top/cas_qn_p -add wave sim:/ddr_top/we_qn_p -add wave sim:/ddr_top/dm_q_p -add wave sim:/ddr_top/dqs_q_p -add wave sim:/ddr_top/ba_q_p -add wave sim:/ddr_top/sdr_a_p -add wave sim:/ddr_top/sdr_d_p - -add wave -divider "Internal signals" -add wave sim:/ddr_top/clk2_phase -add wave sim:/ddr_top/clk4_phase -add wave sim:/ddr_top/ddr_state -add wave sim:/ddr_top/sdr_oe_n -add wave sim:/ddr_top/sdr_smp -add wave sim:/ddr_top/sdr_d - - -# Add input signals -force -freeze sim:/ddr_top/cpu_clk_4x 1 0, 0 {1.875 ns} -r 3.75 -run 100 ps -force -freeze sim:/ddr_top/cpu_clk_2x 1 0, 0 {3.75 ns} -r 7.5 -run 100 ps -force -freeze sim:/ddr_top/cpu_clk 1 0, 0 {7.5 ns} -r 15 -force -freeze sim:/ddr_top/ddr_in_clk 1 2ns, 0 {5.75 ns} -r 7.5 -force -freeze sim:/ddr_top/ddr_in_clk_2x 0 0.125ns, 1 {2 ns} -r 3.75 - -force -freeze sim:/ddr_top/areset 1 0 -force -freeze sim:/ddr_top/ddr_command 0000 0 -force -freeze sim:/ddr_top/ddr_command_we 0 0 -force -freeze sim:/ddr_top/ddr_data_write 1234abcd 0 -force -freeze sim:/ddr_top/ddr_req 0 0 -force -freeze sim:/ddr_top/ddr_req_adr 000000 0 -force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 -force -freeze sim:/ddr_top/ddr_req_len 000 0 -force -freeze sim:/ddr_top/ddr_wr_mask 0 0 - -# Start simulation -run 45 -force -freeze sim:/ddr_top/areset 0 0 -run 92 -# DDR Command -force -freeze sim:/ddr_top/ddr_command 000A 0 -force -freeze sim:/ddr_top/ddr_command_we 1 0 -run 15 -force -freeze sim:/ddr_top/ddr_command 0000 0 -force -freeze sim:/ddr_top/ddr_command_we 0 0 -run 90 -# DDR Read -force -freeze sim:/ddr_top/ddr_req 1 0 -force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 -force -freeze sim:/ddr_top/ddr_rd_wr_n 1 0 -force -freeze sim:/ddr_top/ddr_req_len 000 0 -force -freeze sim:/ddr_top/ddr_wr_mask 0 0 -run 15 -force -freeze sim:/ddr_top/ddr_req 0 0 -force -freeze sim:/ddr_top/ddr_req_adr 000000 0 -force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 -force -freeze sim:/ddr_top/ddr_req_len 000 0 -force -freeze sim:/ddr_top/ddr_wr_mask 0 0 -run 150 -# DDR Write -force -freeze sim:/ddr_top/ddr_req 1 0 -force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 -force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 -force -freeze sim:/ddr_top/ddr_req_len 000 0 -force -freeze sim:/ddr_top/ddr_wr_mask 0 0 -run 15 -force -freeze sim:/ddr_top/ddr_req 0 0 -force -freeze sim:/ddr_top/ddr_req_adr 000000 0 -force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 -force -freeze sim:/ddr_top/ddr_req_len 000 0 -force -freeze sim:/ddr_top/ddr_wr_mask 0 0 -run 180 - diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd deleted file mode 100644 index 95f4b8a..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd +++ /dev/null @@ -1,90 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -package ddr is - - component ddr_top - generic( - simulate_io_time : boolean := false); - port ( -- Asyncronous reset and clocks - 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; - - -- Command interface - ddr_command : in std_logic_vector(15 downto 0); - ddr_command_we : in std_logic; - refresh_en : in std_logic; - - - -- Data interface signals - ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM - ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM - ddr_req_adr : in std_logic_vector(23 downto 1); -- Request address - ddr_req : in std_logic; -- Request DDR SDRAM access - ddr_req_ack : out std_logic; -- Request acknowledge - ddr_busy : out std_logic; -- Request acknowledge - ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE - ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) - ddr_read_en : out std_logic; -- Enable signal for read data - ddr_write_en : out std_logic; -- Enable (read) signal for data write - - -- 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 - end component; - - component MT46V16M16 - GENERIC ( -- Timing for -75Z CL2 - tCK : TIME := 7.500 ns; - tCH : TIME := 3.375 ns; -- 0.45*tCK - tCL : TIME := 3.375 ns; -- 0.45*tCK - tDH : TIME := 0.500 ns; - tDS : TIME := 0.500 ns; - tIH : TIME := 0.900 ns; - tIS : TIME := 0.900 ns; - tMRD : TIME := 15.000 ns; - tRAS : TIME := 40.000 ns; - tRAP : TIME := 20.000 ns; - tRC : TIME := 65.000 ns; - tRFC : TIME := 75.000 ns; - tRCD : TIME := 20.000 ns; - tRP : TIME := 20.000 ns; - tRRD : TIME := 15.000 ns; - tWR : TIME := 15.000 ns; - addr_bits : INTEGER := 13; - data_bits : INTEGER := 16; - cols_bits : INTEGER := 9 - ); - PORT ( - Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); - Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; - Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); - Clk : IN STD_LOGIC; - Clk_n : IN STD_LOGIC; - Cke : IN STD_LOGIC; - Cs_n : IN STD_LOGIC; - Ras_n : IN STD_LOGIC; - Cas_n : IN STD_LOGIC; - We_n : IN STD_LOGIC; - Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); - end component; - -end ddr; - \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd deleted file mode 100644 index 5666532..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd +++ /dev/null @@ -1,301 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; -library zylin; -use zylin.ddr.all; - -entity ddr_tb is - port ( areset : in std_logic; - break_out : out std_logic); -end ddr_tb; - -architecture behave of ddr_tb is - -signal cpu_clk : std_logic; -signal cpu_clk_2x : std_logic; -signal cpu_clk_4x : std_logic; -signal ddr_in_clk : std_logic; -signal ddr_in_clk_2x : std_logic; - -signal ddr_command : std_logic_vector(15 downto 0); -signal ddr_command_we : std_logic; - -signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM -signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM -signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address -signal ddr_req : std_logic; -- Request DDR SDRAM access -signal ddr_req_ack : std_logic; -- Request acknowledge -signal ddr_busy : std_logic; -- Request acknowledge -signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE -signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer -signal ddr_read_en : std_logic; -- Enable signal for read data -signal ddr_write_en : std_logic; -- Enable (read) signal for data write -signal refresh_en : std_logic; - -signal sdr_clk_p : std_logic; -- ddr_sdram_clock -signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock -signal cke_q_p : std_logic; -- clock enable -signal cs_qn_p : std_logic; -- /chip select -signal ras_qn_p : std_logic; -- /ras -signal cas_qn_p : std_logic; -- /cas -signal we_qn_p : std_logic; -- /write enable -signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00" -signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write -signal ba_q_p : std_logic_vector(1 downto 0); -- bank select -signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus -signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus - -constant min_time : time := 1.875 ns; - -begin - - clock1: - process - begin - loop - cpu_clk_4x <= '1'; - wait for min_time; - cpu_clk_4x <= '0'; - wait for min_time; - end loop; - end process; - - clock2: - process - begin - loop - cpu_clk_2x <= '1' after 100 ps; - wait until rising_edge(cpu_clk_4x); - cpu_clk_2x <= '0' after 100 ps; - wait until rising_edge(cpu_clk_4x); - end loop; - end process; - - clock3: - process - begin - loop - cpu_clk <= '1' after 100 ps; - wait until rising_edge(cpu_clk_2x); - cpu_clk <= '0' after 100 ps; - wait until rising_edge(cpu_clk_2x); - end loop; - end process; - - ddr_in_clk_2x <= cpu_clk_4x after 1 ns; - - clock4: - process - begin - loop - ddr_in_clk <= '0' after 100 ps; - wait until rising_edge(ddr_in_clk_2x); - ddr_in_clk <= '1' after 100 ps; - wait until rising_edge(ddr_in_clk_2x); - end loop; - end process; - - inputdata: - process - begin - -- Wait until global reset released - loop - ddr_command <= x"0000"; - ddr_command_we <= '0'; - ddr_data_write <= x"000000000"; - ddr_req <= '0'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - break_out <= '0'; - refresh_en <= '0'; - - wait until falling_edge(areset); - - -- DDR initialization sequence - -- Wait more than 200 us - wait for 201000 ns; - - -- Send precharge command - wait until rising_edge(cpu_clk); - ddr_command <= x"8000"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 1 us - wait for 1000 ns; - - -- Load extended mode register - -- Enable DLL - -- Normal drive strength - wait until rising_edge(cpu_clk); - ddr_command <= x"2000"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 1 us - wait for 1000 ns; - - -- Load mode register - -- Burst length: 2 - -- Burst type: Sequential - -- Cas latency: 2 - -- Reset DLL - wait until rising_edge(cpu_clk); - ddr_command <= x"0121"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 1 us - wait for 1000 ns; - - -- Send precharge command - wait until rising_edge(cpu_clk); - ddr_command <= x"8000"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Enable refresh - refresh_en <= '1'; - - -- Wait 30 us (minimum 2 autorefresh cycles) - wait for 30000 ns; - - -- Load mode register - -- Burst length: 2 - -- Burst type: Sequential - -- Cas latency: 2 - -- Deactivate Reset DLL - wait until rising_edge(cpu_clk); - ddr_command <= x"0021"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 2 us (DLL stable) - wait for 2000 ns; - - -- Write data to DDR - wait until rising_edge(cpu_clk_2x); - ddr_data_write <= x"312345678"; - ddr_req <= '1'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - wait until rising_edge(ddr_write_en); - wait until rising_edge(cpu_clk_2x); - ddr_req <= '0'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - ddr_data_write <= x"000000000"; - wait for 100 ns; - - -- Read data from DDR - wait until rising_edge(cpu_clk_2x); - ddr_req <= '1'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '1'; - ddr_req_len <= '0'; - wait until rising_edge(ddr_req_ack); - wait until rising_edge(cpu_clk_2x); - ddr_req <= '0'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - ddr_data_write <= x"000000000"; - - - - wait for 100 ns; - break_out <= '1'; - wait for 100 ns; - - end loop; - - end process; - - ddr_ctrl: - ddr_top port map( - areset => areset, - cpu_clk => cpu_clk, - cpu_clk_2x => cpu_clk_2x, - cpu_clk_4x => cpu_clk_4x, - ddr_in_clk => ddr_in_clk, - ddr_in_clk_2x => ddr_in_clk_2x, - - -- Command interface - ddr_command => ddr_command, - ddr_command_we => ddr_command_we, - refresh_en => refresh_en, - - -- Data interface signals - ddr_data_read => ddr_data_read, - ddr_data_write => ddr_data_write, - ddr_req_adr => ddr_req_adr, - ddr_req => ddr_req, - ddr_req_ack => ddr_req_ack, - ddr_busy => ddr_busy, - ddr_rd_wr_n => ddr_rd_wr_n, - ddr_req_len => ddr_req_len, - ddr_read_en => ddr_read_en, - ddr_write_en => ddr_write_en, - -- DDR SDRAM Signals - sdr_clk_p => sdr_clk_p, - sdr_clk_n_p => sdr_clk_n_p, - cke_q_p => cke_q_p, - cs_qn_p => cs_qn_p, - ras_qn_p => ras_qn_p, - cas_qn_p => cas_qn_p, - we_qn_p => we_qn_p, - dm_q_p => dm_q_p, - dqs_q_p => dqs_q_p, - ba_q_p => ba_q_p, - sdr_a_p => sdr_a_p, - sdr_d_p => sdr_d_p); - - myram: - MT46V16M16 generic map( - tCK => 7.500 ns, - tCH => 3.375 ns, -- 0.45*tCK - tCL => 3.375 ns, -- 0.45*tCK - tDH => 0.500 ns, - tDS => 0.500 ns, - tIH => 0.900 ns, - tIS => 0.900 ns, - tMRD => 15.000 ns, - tRAS => 40.000 ns, - tRAP => 20.000 ns, - tRC => 65.000 ns, - tRFC => 75.000 ns, - tRCD => 20.000 ns, - tRP => 20.000 ns, - tRRD => 15.000 ns, - tWR => 15.000 ns, - addr_bits => 13, - data_bits => 16, - cols_bits => 9) - port map( - Dq => sdr_d_p, - Dqs => dqs_q_p, - Addr => sdr_a_p, - Ba => ba_q_p, - Clk => sdr_clk_p, - Clk_n => sdr_clk_n_p, - Cke => cke_q_p, - Cs_n => cs_qn_p, - Ras_n => ras_qn_p, - Cas_n => cas_qn_p, - We_n => we_qn_p, - Dm => dm_q_p); - -end behave; diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd deleted file mode 100644 index d5e98e1..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd +++ /dev/null @@ -1,660 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -entity ddr_top is - generic( - simulate_io_time : boolean := false); - port ( -- Asyncronous reset and clocks - 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; - - -- Command interface - ddr_command : in std_logic_vector(15 downto 0); - ddr_command_we : in std_logic; - refresh_en : in std_logic; - - -- Data interface signals - ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM - ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM - ddr_req_adr : in std_logic_vector(23 downto 1); -- Request address - ddr_req : in std_logic; -- Request DDR SDRAM access - ddr_req_ack : out std_logic; -- Request acknowledge - ddr_busy : out std_logic; -- Request acknowledge - ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE - ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) - ddr_read_en : out std_logic; -- Enable signal for read data - ddr_write_en : out std_logic; -- Enable (read) signal for data write - - -- 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 -end ddr_top; - -architecture behave of ddr_top is - -attribute keep : string; - -signal cpu_clk_tog : std_logic; -signal ddr_cmd : std_logic_vector(15 downto 0); -signal ddr_cmd_we_smp : std_logic; -signal new_command : std_logic; - -signal cpu_clk_2x_smp1 : std_logic; -signal cpu_clk_2x_smp2 : std_logic; -signal cpu_clk_4x_smp1 : std_logic; -signal cpu_clk_4x_smp2 : std_logic; - -signal clk2_phase : std_logic; -signal clk4_phase : std_logic_vector(3 downto 0); -signal clk4_phase_short : std_logic_vector(1 downto 0); - -signal ddr_clk_tog : std_logic; -signal ddr_clk_smp1 : std_logic; -signal ddr_clk_smp2 : std_logic; -signal ddr_clk_phase : std_logic; - -signal smp_req_adr : std_logic_vector(23 downto 1); -signal smp_req_type : std_logic; -signal smp_req_len : std_logic; -signal ddr_write_en_int : std_logic; -signal ddr_read_en_int : std_logic; - -signal dqs_q : std_logic_vector(1 downto 0); -signal dqs_oe_n : std_logic_vector(1 downto 0); -attribute keep of dqs_oe_n:signal is "true"; -signal cas_qn : std_logic; -signal ras_qn : std_logic; -signal we_qn : std_logic; -signal ba_q : std_logic_vector(1 downto 0); -signal sdr_clk : std_logic; -signal sdr_clk_n : std_logic; -signal sdr_a : std_logic_vector(12 downto 0); -signal sdr_d : std_logic_vector(15 downto 0); -signal sdr_smp : std_logic_vector(35 downto 0); -signal sdr_oe_n : std_logic_vector(15 downto 0); -attribute keep of sdr_oe_n:signal is "true"; -signal sdr_oe_ctrl : std_logic; -signal sdr_wr_msw : std_logic_vector(17 downto 0); -attribute keep of sdr_wr_msw:signal is "true"; -signal dm_q : std_logic_vector(1 downto 0); - -signal cas_n_smp : std_logic; -signal ras_n_smp : std_logic; -signal we_n_smp : std_logic; -signal read_start_sig : std_logic; -signal sdr_d_in : std_logic_vector(15 downto 0); -signal read_time_cnt : std_logic_vector(1 downto 0); -signal read_input_en : std_logic; -signal ddr_data_read_int : std_logic_vector(31 downto 0); - -signal refresh_pend : std_logic; -signal refresh_end : std_logic; -signal refresh_cnt : std_logic_vector(9 downto 0); -signal refresh_wait_cnt : std_logic_vector(2 downto 0); -signal refresh_wait_end : std_logic; - -signal cas_qn_p_del : std_logic; -signal ras_qn_p_del : std_logic; -signal we_qn_p_del : std_logic; -signal sdr_d_p_del : std_logic_vector(15 downto 0); - -type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1, - rd_nop2, pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2, - wr_nop3, cmd, cpu_pre, refresh, refresh_wait); -signal ddr_state : state_type; - -constant Clk_to_Output : time := 2.2 ns; -constant Sim_Delay : time := 0.5 ns; -constant Input_Setup : time := 2.5 ns; - -constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110"; - -begin - - iotimingon: - if simulate_io_time generate - begin - cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup; - ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup; - we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup; - sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup; - end generate; - - iotimingoff: - if not simulate_io_time generate - begin - cas_qn_p_del <= cas_qn_p; - ras_qn_p_del <= ras_qn_p; - we_qn_p_del <= we_qn_p; - sdr_d_p_del <= sdr_d_p; - end generate; - - ddr_write_en <= ddr_write_en_int; - ddr_read_en <= ddr_read_en_int; - ddr_data_read <= ddr_data_read_int; - - process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order - begin -- to find phase relation with 2x and 4x clocks - if areset = '1' then - cpu_clk_tog <= '0'; - elsif (cpu_clk'event and cpu_clk = '1') then - cpu_clk_tog <= not(cpu_clk_tog) after Sim_Delay; - end if; - end process; - - process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x - begin - if areset = '1' then - cpu_clk_2x_smp1 <= '0'; - cpu_clk_2x_smp2 <= '0'; - clk2_phase <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - cpu_clk_2x_smp1 <= cpu_clk_tog after Sim_Delay; - cpu_clk_2x_smp2 <= cpu_clk_2x_smp1 after Sim_Delay; - if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then - clk2_phase <= '0' after Sim_Delay; - else - clk2_phase <= not(clk2_phase) after Sim_Delay; - end if; - end if; - end process; - - process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x - begin - if areset = '1' then - cpu_clk_4x_smp1 <= '0'; - cpu_clk_4x_smp2 <= '0'; - clk4_phase <= "0000"; - clk4_phase_short <= "00"; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - cpu_clk_4x_smp1 <= cpu_clk_tog after Sim_Delay; - cpu_clk_4x_smp2 <= cpu_clk_4x_smp1 after Sim_Delay; - if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then - clk4_phase <= "0100" after Sim_Delay; - clk4_phase_short <= "01" after Sim_Delay; - else - clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3)) after Sim_Delay; - clk4_phase_short <= clk4_phase_short(0) & clk4_phase_short(1); - end if; - end if; - end process; - - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - sdr_clk <= '0'; - sdr_clk_n <= '0'; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - if clk4_phase_short(0) = '1' then - sdr_clk <= '1' after Sim_Delay; - else - sdr_clk <= '0' after Sim_Delay; - end if; - if clk4_phase_short(1) = '1' then - sdr_clk_n <= '1' after Sim_Delay; - else - sdr_clk_n <= '0' after Sim_Delay; - end if; - end if; - end process; - - cke_q_p <= '1' after Clk_to_Output; - cs_qn_p <= '0' after Clk_to_Output; - - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - ras_qn_p <= '1'; - cas_qn_p <= '1'; - we_qn_p <= '1'; - dqs_q_p <= "ZZ"; - sdr_a_p <= "0000000000000"; - ba_q_p <= "00"; - sdr_clk_p <= '0'; - sdr_clk_n_p <= '1'; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - ras_qn_p <= transport ras_qn after Clk_to_Output; - cas_qn_p <= transport cas_qn after Clk_to_Output; - we_qn_p <= transport we_qn after Clk_to_Output; - if dqs_oe_n(0) = '0' then - dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output; - else - dqs_q_p(0) <= transport 'Z' after Clk_to_Output; - end if; - if dqs_oe_n(1) = '0' then - dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output; - else - dqs_q_p(1) <= transport 'Z' after Clk_to_Output; - end if; - sdr_a_p <= transport sdr_a after Clk_to_Output; - ba_q_p <= transport ba_q after Clk_to_Output; - sdr_clk_p <= transport sdr_clk after Clk_to_Output; - sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output; - end if; - end process; - - process(cpu_clk_2x, areset) -- - begin - if areset = '1' then - ddr_state <= idle; - ras_qn <= '1'; - cas_qn <= '1'; - we_qn <= '1'; - smp_req_adr <= (others => '0'); - smp_req_type <= '0'; - smp_req_len <= '0'; - sdr_a <= "XXXXXXXXXXXXX"; - ba_q <= "00"; - ddr_req_ack <= '0'; - ddr_busy <= '1'; - ddr_write_en_int <= '0'; - ddr_read_en_int <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - - -- Default values - ras_qn <= '1' after Sim_Delay; - cas_qn <= '1' after Sim_Delay; - we_qn <= '1' after Sim_Delay; - sdr_a <= "XXXXXXXXXXXXX" after Sim_Delay; - ba_q <= "00" after Sim_Delay; - ddr_req_ack <= '0' after Sim_Delay; - ddr_busy <= '1' after Sim_Delay; - ddr_write_en_int <= '0' after Sim_Delay; - ddr_read_en_int <= '0' after Sim_Delay; - - case ddr_state is - when idle => - smp_req_adr <= ddr_req_adr after Sim_Delay; - smp_req_type <= ddr_rd_wr_n after Sim_Delay; - smp_req_len <= ddr_req_len after Sim_Delay; - ddr_busy <= '0' after Sim_Delay; - if refresh_pend = '1' then - ddr_state <= refresh after Sim_Delay; - elsif new_command = '1' then - if ddr_cmd(15) = '1' then - ddr_state <= cpu_pre after Sim_Delay; - else - ddr_state <= cmd after Sim_Delay; - end if; - elsif ddr_req = '1' then - ddr_state <= act after Sim_Delay; - else - ddr_state <= idle after Sim_Delay; - end if; - when act => - sdr_a <= smp_req_adr(23 downto 11) after Sim_Delay; - ras_qn <= '0' after Sim_Delay; - ddr_state <= act_nop1 after Sim_Delay; - ddr_req_ack <= '1' after Sim_Delay; - ddr_write_en_int <= not(smp_req_type) after Sim_Delay; - when act_nop1 => - ddr_state <= act_nop2 after Sim_Delay; - when act_nop2 => - ddr_state <= rd_wr after Sim_Delay; - when rd_wr => - sdr_a(10) <= '0' after Sim_Delay; -- Disable auto precharge - sdr_a(9 downto 0) <= smp_req_adr(10 downto 1) after Sim_Delay; - cas_qn <= '0' after Sim_Delay; - we_qn <= smp_req_type after Sim_Delay; - if smp_req_type = '1' then - ddr_state <= rd_nop1 after Sim_Delay; - else - ddr_state <= wr_nop1 after Sim_Delay; - end if; - when wr_nop1 => - ddr_state <= wr_nop2 after Sim_Delay; - when wr_nop2 => - ddr_state <= wr_nop3 after Sim_Delay; - when wr_nop3 => - ddr_state <= pre after Sim_Delay; - when rd_nop1 => - ddr_state <= rd_nop2 after Sim_Delay; - when rd_nop2 => - ddr_state <= pre after Sim_Delay; - when pre => - ras_qn <= '0' after Sim_Delay; - we_qn <= '0' after Sim_Delay; - sdr_a(10) <= '1' after Sim_Delay; -- Precharge all banks - ddr_state <= pre_nop1 after Sim_Delay; - ddr_read_en_int <= smp_req_type after Sim_Delay; - when pre_nop1 => - ddr_state <= pre_nop2 after Sim_Delay; - when cmd => - cas_qn <= '0' after Sim_Delay; - ras_qn <= '0' after Sim_Delay; - we_qn <= '0' after Sim_Delay; - ba_q <= ddr_cmd(14 downto 13) after Sim_Delay; - sdr_a <= ddr_cmd(12 downto 0) after Sim_Delay; - ddr_state <= idle after Sim_Delay; - when cpu_pre => - ddr_state <= pre after Sim_Delay; - when refresh => - cas_qn <= '0' after Sim_Delay; - ras_qn <= '0' after Sim_Delay; - ddr_state <= refresh_wait after Sim_Delay; - when refresh_wait => - if refresh_wait_end = '1' then - ddr_state <= pre after Sim_Delay; - end if; - when pre_nop2 => - ddr_state <= idle after Sim_Delay; - when others => - ddr_state <= idle after Sim_Delay; - end case; - end if; - end process; - - process(cpu_clk, areset) -- - begin - if areset = '1' then - ddr_cmd <= "0000000000000000"; - elsif (cpu_clk'event and cpu_clk = '1') then - if ddr_command_we = '1' then - ddr_cmd <= ddr_command after Sim_Delay; - else - ddr_cmd <= ddr_cmd after Sim_Delay; - end if; - end if; - end process; - - process(cpu_clk_2x, areset) -- - begin - if areset = '1' then - ddr_cmd_we_smp <= '0'; - new_command <= '0'; - sdr_smp <= "000000000000000000000000000000000000"; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - ddr_cmd_we_smp <= ddr_command_we after Sim_Delay; - if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then - new_command <= '1' after Sim_Delay; - elsif ddr_state = cmd or ddr_state = cpu_pre then - new_command <= '0' after Sim_Delay; - else - new_command <= new_command after Sim_Delay; - end if; - - if ddr_write_en_int = '1' then - sdr_smp <= ddr_data_write after Sim_Delay; - else - sdr_smp <= sdr_smp after Sim_Delay; - end if; - - end if; - end process; - - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - dqs_q <= "00"; - dqs_oe_n <= "11"; - sdr_oe_ctrl <= '1'; - sdr_wr_msw <= "000000000000000000"; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - - if ddr_state = wr_nop1 and clk4_phase_short(0) = '1' then - sdr_oe_ctrl <= '0' after Sim_Delay; - elsif ddr_state = wr_nop3 and clk4_phase_short(0) = '1' then - sdr_oe_ctrl <= '1' after Sim_Delay; - else - sdr_oe_ctrl <= sdr_oe_ctrl after Sim_Delay; - end if; - - if ddr_state = idle or ddr_state = wr_nop3 then - dqs_oe_n <= "11" after Sim_Delay; - elsif ddr_state = wr_nop1 then - dqs_oe_n <= "00" after Sim_Delay; - else - dqs_oe_n <= dqs_oe_n after Sim_Delay; - end if; - - if (ddr_state = wr_nop2 and clk4_phase_short(0) = '1') then - dqs_q <= "11" after Sim_Delay; - else - dqs_q <= "00" after Sim_Delay; - end if; - - if ddr_state = wr_nop1 and clk4_phase_short(1) = '1' then - sdr_wr_msw <= "111111111111111111" after Sim_Delay; - else - sdr_wr_msw <= "000000000000000000" after Sim_Delay; - end if; - - end if; - end process; - - -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - sdr_d_p <= "ZZZZZZZZZZZZZZZZ"; - dm_q_p <= "11"; - sdr_oe_n <= "1111111111111111"; - sdr_d <= "0000000000000000"; - dm_q <= "11"; - elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then - - for i in 0 to 15 loop - if sdr_oe_n(i) = '0' then - sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output; - else - sdr_d_p(i) <= transport 'Z' after Clk_to_Output; - end if; - end loop; - - dm_q_p <= transport dm_q after Clk_to_Output; - - if sdr_oe_ctrl = '0' then - sdr_oe_n <= "0000000000000000" after Sim_Delay; - else - sdr_oe_n <= "1111111111111111" after Sim_Delay; - end if; - - for i in 0 to 15 loop - if sdr_wr_msw(i) = '0' then - sdr_d(i) <= sdr_smp(i) after Sim_Delay; - else - sdr_d(i) <= sdr_smp(i+16) after Sim_Delay; - end if; - end loop; - - for i in 0 to 1 loop - if sdr_wr_msw(i+16) = '0' then - dm_q(i) <= sdr_smp(i+32) after Sim_Delay; - else - dm_q(i) <= sdr_smp(i+34) after Sim_Delay; - end if; - end loop; - - end if; - end process; - - process(cpu_clk_2x, areset) -- - begin - if areset = '1' then - refresh_cnt <= "0000000000"; - refresh_pend <= '0'; - refresh_end <= '0'; - refresh_wait_cnt <= "000"; - refresh_wait_end <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - - if refresh_cnt = Refresh_Interval then - refresh_end <= '1'; - else - refresh_end <= '0'; - end if; - - if refresh_end = '1' then - refresh_cnt <= "0000000000"; - else - refresh_cnt <= refresh_cnt + '1'; - end if; - - if refresh_end = '1' and refresh_en = '1' then - refresh_pend <= '1' after Sim_Delay; - elsif ddr_state = refresh then - refresh_pend <= '0' after Sim_Delay; - else - refresh_pend <= refresh_pend after Sim_Delay; - end if; - - if ddr_state = refresh_wait then - refresh_wait_cnt <= refresh_wait_cnt + '1'; - else - refresh_wait_cnt <= "000"; - end if; - - if refresh_wait_cnt = "111" then - refresh_wait_end <= '1' after Sim_Delay; - else - refresh_wait_end <= '0' after Sim_Delay; - end if; - - end if; - end process; - - -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING - - process(ddr_in_clk, areset) - begin - if areset = '1' then - ddr_clk_tog <= '0'; - elsif (ddr_in_clk'event and ddr_in_clk = '1') then - ddr_clk_tog <= not(ddr_clk_tog) after Sim_Delay; - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - ddr_clk_smp1 <= '0'; - ddr_clk_smp2 <= '0'; - ddr_clk_phase <= '0'; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - ddr_clk_smp1 <= ddr_clk_tog after Sim_Delay; - ddr_clk_smp2 <= ddr_clk_smp1 after Sim_Delay; - if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then - ddr_clk_phase <= '0'; - else - ddr_clk_phase <= not(ddr_clk_phase); - end if; - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - cas_n_smp <= '0'; - ras_n_smp <= '0'; - we_n_smp <= '0'; - read_start_sig <= '0'; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - cas_n_smp <= cas_qn_p_del after Sim_Delay; - ras_n_smp <= ras_qn_p_del after Sim_Delay; - we_n_smp <= we_qn_p_del after Sim_Delay; - if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then - read_start_sig <= '1' after Sim_Delay; - else - read_start_sig <= '0' after Sim_Delay; - end if; - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - sdr_d_in <= "0000000000000000"; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - sdr_d_in <= sdr_d_p_del after Sim_Delay; - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - read_time_cnt <= "00"; - read_input_en <= '0'; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - - if read_start_sig = '1' then - read_time_cnt <= "01" after Sim_Delay; - elsif read_time_cnt = "00" then - read_time_cnt <= read_time_cnt after Sim_Delay; - else - read_time_cnt <= read_time_cnt + '1' after Sim_Delay; - end if; - - if read_time_cnt = "11" then - read_input_en <= '1' after Sim_Delay; - else - read_input_en <= '0' after Sim_Delay; - end if; - - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - ddr_data_read_int <= "00000000000000000000000000000000"; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - ddr_data_read_int(31 downto 16) <= "0000000000000000" after Sim_Delay; - if read_input_en = '1' then - ddr_data_read_int(15 downto 0) <= sdr_d_in after Sim_Delay; - else - ddr_data_read_int(15 downto 0) <= ddr_data_read_int(15 downto 0) after Sim_Delay; - end if; - end if; - end process; - - - - - - - - - -- ############### - - process(cpu_clk, areset) -- - begin - if areset = '1' then - elsif (cpu_clk'event and cpu_clk = '1') then - end if; - end process; - - - process(cpu_clk_2x, areset) -- - begin - if areset = '1' then - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - end if; - end process; - - - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - end if; - end process; - - -end behave; - - diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd deleted file mode 100644 index 6b89345..0000000 --- a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd +++ /dev/null @@ -1,1320 +0,0 @@ ------------------------------------------------------------------------------------------ --- --- File Name: MT46V16M16.VHD --- Version: 2.1 --- Date: January 14th, 2002 --- Model: Behavioral --- Simulator: NCDesktop - http://www.cadence.com --- ModelSim PE - http://www.model.com --- --- Dependencies: None --- --- Author: Son P. Huynh --- Email: sphuynh@micron.com --- Phone: (208) 368-3825 --- Company: Micron Technology, Inc. --- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks) --- --- Description: Micron 256 Mb SDRAM DDR (Double Data Rate) --- --- Limitation: Doesn't model internal refresh counter --- --- Note: --- --- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY --- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY --- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR --- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. --- --- Copyright (c) 1998 Micron Semiconductor Products, Inc. --- All rights researved --- --- Rev Author Date Changes --- --- ---------------------------- ---------- ------------------------------------- --- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter --- Micron Technology, Inc. --- --- 2.0 Son P. Huynh 11/08/2001 - Second release --- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE --- ------------------------------------------------------------------------------------------ - -LIBRARY IEEE; - USE IEEE.STD_LOGIC_1164.ALL; - USE IEEE.STD_LOGIC_UNSIGNED.ALL; - USE IEEE.STD_LOGIC_ARITH.ALL; - -ENTITY MT46V16M16 IS - GENERIC ( -- Timing for -75Z CL2 - tCK : TIME := 7.500 ns; - tCH : TIME := 3.375 ns; -- 0.45*tCK - tCL : TIME := 3.375 ns; -- 0.45*tCK - tDH : TIME := 0.500 ns; - tDS : TIME := 0.500 ns; - tIH : TIME := 0.900 ns; - tIS : TIME := 0.900 ns; - tMRD : TIME := 15.000 ns; - tRAS : TIME := 40.000 ns; - tRAP : TIME := 20.000 ns; - tRC : TIME := 65.000 ns; - tRFC : TIME := 75.000 ns; - tRCD : TIME := 20.000 ns; - tRP : TIME := 20.000 ns; - tRRD : TIME := 15.000 ns; - tWR : TIME := 15.000 ns; - addr_bits : INTEGER := 13; - data_bits : INTEGER := 16; - cols_bits : INTEGER := 9 - ); - PORT ( - Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); - Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; - Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); - Clk : IN STD_LOGIC; - Clk_n : IN STD_LOGIC; - Cke : IN STD_LOGIC; - Cs_n : IN STD_LOGIC; - Ras_n : IN STD_LOGIC; - Cas_n : IN STD_LOGIC; - We_n : IN STD_LOGIC; - Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); -END MT46V16M16; - -ARCHITECTURE behave OF MT46V16M16 IS - -- Array for Read pipeline - TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); - TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - - -- Array for Write pipeline - TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); - TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - - -- Array for Auto Precharge - TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER; - - -- Array for Manual Precharge - TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); - TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - - -- Array for Burst Terminate - TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - - -- Array for Memory Access - TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); - TYPE Array_ram_pntr IS ACCESS Array_ram_type; - TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr; - - -- Data pair - SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0); - SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0); - - -- Mode Register - SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); - - -- Command Decode Variables - SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0'; - SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; - - -- Burst Length Decode Variables - SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0'; - - -- Cas Latency Decode Variables - SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0'; - - -- Internal Control Signals - SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; - - -- System Clock - SIGNAL Sys_clk : STD_LOGIC := '0'; - - -- Dqs buffer - SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; - -BEGIN - -- Strip the strength - Cs_in <= To_X01 (Cs_n); - Ras_in <= To_X01 (Ras_n); - Cas_in <= To_X01 (Cas_n); - We_in <= To_X01 (We_n); - - -- Commands Decode - Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; - Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; - Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); - Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1)); - Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1)); - Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); - Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; - Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); - - -- Burst Length Decode - Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); - Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); - Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); - Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); - - -- CAS Latency Decode - Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4)); - Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); - Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4)); - Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); - Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4)); - - -- Dqs buffer - Dqs <= Dqs_out; - - -- - -- System Clock - -- - int_clk : PROCESS (Clk, Clk_n) - VARIABLE ClkZ, CkeZ : STD_LOGIC := '0'; - begin - IF Clk = '1' AND Clk_n = '0' THEN - ClkZ := '1'; - CkeZ := Cke; - ELSIF Clk = '0' AND Clk_n = '1' THEN - ClkZ := '0'; - END IF; - Sys_clk <= CkeZ AND ClkZ; - END PROCESS; - - -- - -- Main Process - -- - state_register : PROCESS - -- Precharge Variables - VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; - - -- Activate Variables - VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; - - -- Data IO variables - VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; - - -- Internal address mux variables - VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0); - VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; - VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; - VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - - -- DLL Reset variables - VARIABLE DLL_enable : STD_LOGIC := '0'; - VARIABLE DLL_reset : STD_LOGIC := '0'; - VARIABLE DLL_done : STD_LOGIC := '0'; - VARIABLE DLL_count : INTEGER := 0; - - -- Timing Check - VARIABLE MRD_chk : TIME := 0 ns; - VARIABLE RFC_chk : TIME := 0 ns; - VARIABLE RRD_chk : TIME := 0 ns; - VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; - VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns; - VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; - VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; - VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; - VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns; - - -- Read pipeline variables - VARIABLE Read_cmnd : Array_Read_cmnd; - VARIABLE Read_bank : Array_Read_bank; - VARIABLE Read_cols : Array_Read_cols; - - -- Write pipeline variables - VARIABLE Write_cmnd : Array_Write_cmnd; - VARIABLE Write_bank : Array_Write_bank; - VARIABLE Write_cols : Array_Write_cols; - - -- Auto Precharge variables - VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0'); - VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0'); - VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 ); - - -- Manual Precharge variables - VARIABLE A10_precharge : Array_A10_precharge; - VARIABLE Bank_precharge : Array_Bank_precharge; - VARIABLE Cmnd_precharge : Array_Cmnd_precharge; - - -- Burst Terminate variable - VARIABLE Cmnd_bst : Array_Cmnd_bst; - - -- Memory Banks - VARIABLE Bank0 : Array_ram_stor; - VARIABLE Bank1 : Array_ram_stor; - VARIABLE Bank2 : Array_ram_stor; - VARIABLE Bank3 : Array_ram_stor; - - -- Burst Counter - VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - - -- Internal Dqs initialize - VARIABLE Dqs_int : STD_LOGIC := '0'; - - -- Data buffer for DM Mask - VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); - - -- - -- Initialize empty rows - -- - PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS - VARIABLE i, j : INTEGER := 0; - BEGIN - IF Bank = "00" THEN - IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty - Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank0 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - ELSIF Bank = "01" THEN - IF Bank1 (Row_index) = NULL THEN - Bank1 (Row_index) := NEW Array_ram_type; - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank1 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - ELSIF Bank = "10" THEN - IF Bank2 (Row_index) = NULL THEN - Bank2 (Row_index) := NEW Array_ram_type; - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank2 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - ELSIF Bank = "11" THEN - IF Bank3 (Row_index) = NULL THEN - Bank3 (Row_index) := NEW Array_ram_type; - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank3 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - END IF; - END; - - -- - -- Burst Counter - -- - PROCEDURE Burst_decode IS - VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0'); - BEGIN - -- Advance burst counter - Burst_counter := Burst_counter + 1; - - -- Burst Type - IF Mode_reg (3) = '0' THEN - Cols_temp := Cols_addr + 1; - ELSIF Mode_reg (3) = '1' THEN - Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2); - Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1); - Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0); - END IF; - - -- Burst Length - IF Burst_length_2 = '1' THEN - Cols_addr (0) := Cols_temp (0); - ELSIF Burst_length_4 = '1' THEN - Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0); - ELSIF Burst_length_8 = '1' THEN - Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0); - ELSE - Cols_addr := Cols_temp; - END IF; - - -- Data counter - IF Burst_length_2 = '1' THEN - IF Burst_counter >= 2 THEN - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - ELSIF Data_out_enable = '1' THEN - Data_out_enable := '0'; - END IF; - END IF; - ELSIF Burst_length_4 = '1' THEN - IF Burst_counter >= 4 THEN - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - ELSIF Data_out_enable = '1' THEN - Data_out_enable := '0'; - END IF; - END IF; - ELSIF Burst_length_8 = '1' THEN - IF Burst_counter >= 8 THEN - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - ELSIF Data_out_enable = '1' THEN - Data_out_enable := '0'; - END IF; - END IF; - END IF; - END; - - BEGIN - WAIT ON Sys_clk; - - -- - -- Manual Precharge Pipeline - -- - IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN - -- A10 Precharge Pipeline - A10_precharge(0) := A10_precharge(1); - A10_precharge(1) := A10_precharge(2); - A10_precharge(2) := A10_precharge(3); - A10_precharge(3) := A10_precharge(4); - A10_precharge(4) := A10_precharge(5); - A10_precharge(5) := A10_precharge(6); - A10_precharge(6) := A10_precharge(7); - A10_precharge(7) := A10_precharge(8); - A10_precharge(8) := '0'; - - -- Bank Precharge Pipeline - Bank_precharge(0) := Bank_precharge(1); - Bank_precharge(1) := Bank_precharge(2); - Bank_precharge(2) := Bank_precharge(3); - Bank_precharge(3) := Bank_precharge(4); - Bank_precharge(4) := Bank_precharge(5); - Bank_precharge(5) := Bank_precharge(6); - Bank_precharge(6) := Bank_precharge(7); - Bank_precharge(7) := Bank_precharge(8); - Bank_precharge(8) := "00"; - - -- Command Precharge Pipeline - Cmnd_precharge(0) := Cmnd_precharge(1); - Cmnd_precharge(1) := Cmnd_precharge(2); - Cmnd_precharge(2) := Cmnd_precharge(3); - Cmnd_precharge(3) := Cmnd_precharge(4); - Cmnd_precharge(4) := Cmnd_precharge(5); - Cmnd_precharge(5) := Cmnd_precharge(6); - Cmnd_precharge(6) := Cmnd_precharge(7); - Cmnd_precharge(7) := Cmnd_precharge(8); - Cmnd_precharge(8) := '0'; - - -- Terminate Read if same bank or all banks - IF ((Cmnd_precharge (0) = '1') AND - (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND - (Data_out_enable = '1')) THEN - Data_out_enable := '0'; - END IF; - END IF; - - -- - -- Burst Terminate Pipeline - -- - IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN - -- Burst Terminate pipeline - Cmnd_bst (0) := Cmnd_bst (1); - Cmnd_bst (1) := Cmnd_bst (2); - Cmnd_bst (2) := Cmnd_bst (3); - Cmnd_bst (3) := Cmnd_bst (4); - Cmnd_bst (4) := Cmnd_bst (5); - Cmnd_bst (5) := Cmnd_bst (6); - Cmnd_bst (6) := Cmnd_bst (7); - Cmnd_bst (7) := Cmnd_bst (8); - Cmnd_bst (8) := '0'; - - -- Terminate current Read - IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN - Data_out_enable := '0'; - END IF; - END IF; - - -- - -- Dq and Dqs Drivers - -- - IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN - -- Read Command Pipeline - Read_cmnd (0) := Read_cmnd (1); - Read_cmnd (1) := Read_cmnd (2); - Read_cmnd (2) := Read_cmnd (3); - Read_cmnd (3) := Read_cmnd (4); - Read_cmnd (4) := Read_cmnd (5); - Read_cmnd (5) := Read_cmnd (6); - Read_cmnd (6) := Read_cmnd (7); - Read_cmnd (7) := Read_cmnd (8); - Read_cmnd (8) := '0'; - - -- Read Bank Pipeline - Read_bank (0) := Read_bank (1); - Read_bank (1) := Read_bank (2); - Read_bank (2) := Read_bank (3); - Read_bank (3) := Read_bank (4); - Read_bank (4) := Read_bank (5); - Read_bank (5) := Read_bank (6); - Read_bank (6) := Read_bank (7); - Read_bank (7) := Read_bank (8); - Read_bank (8) := "00"; - - -- Read Column Pipeline - Read_cols (0) := Read_cols (1); - Read_cols (1) := Read_cols (2); - Read_cols (2) := Read_cols (3); - Read_cols (3) := Read_cols (4); - Read_cols (4) := Read_cols (5); - Read_cols (5) := Read_cols (6); - Read_cols (6) := Read_cols (7); - Read_cols (7) := Read_cols (8); - Read_cols (8) := (OTHERS => '0'); - - -- Initialize Read command - IF Read_cmnd (0) = '1' THEN - Data_out_enable := '1'; - Bank_addr := Read_bank (0); - Cols_addr := Read_cols (0); - Cols_brst := Cols_addr (2 DOWNTO 0); - Burst_counter := (OTHERS => '0'); - - -- Row address mux - CASE Bank_addr IS - WHEN "00" => Rows_addr := B0_row_addr; - WHEN "01" => Rows_addr := B1_row_addr; - WHEN "10" => Rows_addr := B2_row_addr; - WHEN OTHERS => Rows_addr := B3_row_addr; - END CASE; - END IF; - - -- Toggle Dqs during Read command - IF Data_out_enable = '1' THEN - Dqs_int := '0'; - IF Dqs_out = "00" THEN - Dqs_out <= "11"; - ELSIF Dqs_out = "11" THEN - Dqs_out <= "00"; - ELSE - Dqs_out <= "00"; - END IF; - ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN - Dqs_out <= "ZZ"; - END IF; - - -- Initialize Dqs for Read command - IF Read_cmnd (2) = '1' THEN - IF Data_out_enable = '0' THEN - Dqs_int := '1'; - Dqs_out <= "00"; - END IF; - END IF; - - -- Read Latch - IF Data_out_enable = '1' THEN - -- Initialize Memory - Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); - - -- Output Data - CASE Bank_addr IS - WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - END CASE; - - -- Increase Burst Counter - Burst_decode; - ELSE - Dq <= (OTHERS => 'Z'); - END IF; - END IF; - - -- - -- Write FIFO and DM Mask Logic - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - -- Write command pipeline - Write_cmnd (0) := Write_cmnd (1); - Write_cmnd (1) := Write_cmnd (2); - Write_cmnd (2) := '0'; - - -- Write command pipeline - Write_bank (0) := Write_bank (1); - Write_bank (1) := Write_bank (2); - Write_bank (2) := "00"; - - -- Write column pipeline - Write_cols (0) := Write_cols (1); - Write_cols (1) := Write_cols (2); - Write_cols (2) := (OTHERS => '0'); - - -- Initialize Write command - IF Write_cmnd (0) = '1' THEN - Data_in_enable := '1'; - Bank_addr := Write_bank (0); - Cols_addr := Write_cols (0); - Cols_brst := Cols_addr (2 DOWNTO 0); - Burst_counter := (OTHERS => '0'); - - -- Row address mux - CASE Bank_addr IS - WHEN "00" => Rows_addr := B0_row_addr; - WHEN "01" => Rows_addr := B1_row_addr; - WHEN "10" => Rows_addr := B2_row_addr; - WHEN OTHERS => Rows_addr := B3_row_addr; - END CASE; - END IF; - - -- Write data - IF Data_in_enable = '1' THEN - -- Initialize memory - Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); - - -- Write first data - IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN - -- Data Buffer - CASE Bank_addr IS - WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - END CASE; - - -- Perform DM Mask - IF Dm_pair (0) = '0' THEN - Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0); - END IF; - IF Dm_pair (1) = '0' THEN - Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8); - END IF; - - -- Write Data - CASE Bank_addr IS - WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - END CASE; - END IF; - - -- Increase Burst Counter - Burst_decode; - - -- Write second data - IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN - -- Data Buffer - CASE Bank_addr IS - WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - END CASE; - - -- Perform DM Mask - IF Dm_pair (2) = '0' THEN - Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16); - END IF; - IF Dm_pair (3) = '0' THEN - Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24); - END IF; - - -- Write Data - CASE Bank_addr IS - WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - END CASE; - END IF; - - -- Increase Burst Counter - Burst_decode; - - -- tWR start and tWTR check - IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN - CASE Bank_addr IS - WHEN "00" => WR_chk0 := NOW; - WHEN "01" => WR_chk1 := NOW; - WHEN "10" => WR_chk2 := NOW; - WHEN OTHERS => WR_chk3 := NOW; - END CASE; - - -- tWTR check - ASSERT (Read_enable = '0') - REPORT "tWTR violation during Read" - SEVERITY WARNING; - END IF; - END IF; - END IF; - - -- - -- Auto Precharge Calculation - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - -- Precharge counter - IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN - Count_precharge (0) := Count_precharge (0) + 1; - END IF; - IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN - Count_precharge (1) := Count_precharge (1) + 1; - END IF; - IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN - Count_precharge (2) := Count_precharge (2) + 1; - END IF; - IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN - Count_precharge (3) := Count_precharge (3) + 1; - END IF; - - -- Read with AutoPrecharge Calculation - -- The device start internal precharge when: - -- 1. Meet tRAS requirement - -- 2. BL/2 cycles after command - IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN - Pc_b0 := '1'; - Act_b0 := '0'; - RP_chk0 := NOW; - Read_precharge(0) := '0'; - END IF; - END IF; - IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN - Pc_b1 := '1'; - Act_b1 := '0'; - RP_chk1 := NOW; - Read_precharge(1) := '0'; - END IF; - END IF; - IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN - Pc_b2 := '1'; - Act_b2 := '0'; - RP_chk2 := NOW; - Read_precharge(2) := '0'; - END IF; - END IF; - IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN - Pc_b3 := '1'; - Act_b3 := '0'; - RP_chk3 := NOW; - Read_precharge(3) := '0'; - END IF; - END IF; - - -- Write with AutoPrecharge Calculation - -- The device start internal precharge when: - -- 1. Meet tRAS requirement - -- 2. Two clock after last burst - -- Since tWR is time base, the model will compensate tRP - IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN - Pc_b0 := '1'; - Act_b0 := '0'; - RP_chk0 := NOW - ((2 * tCK) - tWR); - Write_precharge(0) := '0'; - END IF; - END IF; - IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN - Pc_b1 := '1'; - Act_b1 := '0'; - RP_chk1 := NOW - ((2 * tCK) - tWR); - Write_precharge(1) := '0'; - END IF; - END IF; - IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN - Pc_b2 := '1'; - Act_b2 := '0'; - RP_chk2 := NOW - ((2 * tCK) - tWR); - Write_precharge(2) := '0'; - END IF; - END IF; - IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN - Pc_b3 := '1'; - Act_b3 := '0'; - RP_chk3 := NOW - ((2 * tCK) - tWR); - Write_precharge(3) := '0'; - END IF; - END IF; - END IF; - - -- - -- DLL Counter - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - IF (DLL_Reset = '1' AND DLL_done = '0') THEN - DLL_count := DLL_count + 1; - IF (DLL_count >= 200) THEN - DLL_done := '1'; - END IF; - END IF; - END IF; - - -- - -- Control Logic - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - -- Auto Refresh - IF Aref_enable = '1' THEN - -- Auto Refresh to Auto Refresh - ASSERT (NOW - RFC_chk >= tRFC) - REPORT "tRFC violation during Auto Refresh" - SEVERITY WARNING; - - -- Precharge to Auto Refresh - ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND - (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) - REPORT "tRP violation during Auto Refresh" - SEVERITY WARNING; - - -- Precharge to Auto Refresh - ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') - REPORT "All banks must be Precharge before Auto Refresh" - SEVERITY WARNING; - - -- Record current tRFC time - RFC_chk := NOW; - END IF; - - -- Extended Load Mode Register - IF Ext_mode_enable = '1' THEN - IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN - IF (Addr (0) = '0') THEN - DLL_enable := '1'; - ELSE - DLL_enable := '0'; - END IF; - END IF; - - -- Precharge to EMR - ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') - REPORT "All bank must be Precharged before Extended Mode Register" - SEVERITY WARNING; - - -- Precharge to EMR - ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND - (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) - REPORT "tRP violation during Extended Load Register" - SEVERITY WARNING; - - -- LMR/EMR to EMR - ASSERT (NOW - MRD_chk >= tMRD) - REPORT "tMRD violation during Extended Mode Register" - SEVERITY WARNING; - - -- Record current tMRD time - MRD_chk := NOW; - END IF; - - -- Load Mode Register - IF Mode_reg_enable = '1' THEN - -- Register mode - Mode_reg <= Addr; - - -- DLL Reset - IF (DLL_enable = '1' AND Addr (8) = '1') THEN - DLL_reset := '1'; - DLL_done := '0'; - DLL_count := 0; - ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN - ASSERT (FALSE) - REPORT "DLL is ENABLE: DLL RESET is require" - SEVERITY WARNING; - ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN - ASSERT (FALSE) - REPORT "DLL is DISABLE: DLL RESET will be ignored" - SEVERITY WARNING; - END IF; - - -- Precharge to LMR - ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') - REPORT "All bank must be Precharged before Load Mode Register" - SEVERITY WARNING; - - -- Precharge to EMR - ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND - (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) - REPORT "tRP violation during Load Mode Register" - SEVERITY WARNING; - - -- LMR/ELMR to LMR - ASSERT (NOW - MRD_chk >= tMRD) - REPORT "tMRD violation during Load Mode Register" - SEVERITY WARNING; - - -- Check for invalid Burst Length - ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2 - (Addr (2 DOWNTO 0) = "010") OR -- BL = 4 - (Addr (2 DOWNTO 0) = "011")) -- BL = 8 - REPORT "Invalid Burst Length during Load Mode Register" - SEVERITY WARNING; - - -- Check for invalid CAS Latency - ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0 - (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5 - REPORT "Invalid CAS Latency during Load Mode Register" - SEVERITY WARNING; - - -- Record current tMRD time - MRD_chk := NOW; - END IF; - - -- Active Block (latch Bank and Row Address) - IF Active_enable = '1' THEN - -- Activate an OPEN bank can corrupt data - ASSERT ((Ba = "00" AND Act_b0 = '0') OR - (Ba = "01" AND Act_b1 = '0') OR - (Ba = "10" AND Act_b2 = '0') OR - (Ba = "11" AND Act_b3 = '0')) - REPORT "Bank is already activated - data can be corrupted" - SEVERITY WARNING; - - -- Activate Bank 0 - IF Ba = "00" AND Pc_b0 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk0 >= tRC) - REPORT "tRC violation during Activate Bank 0" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk0 >= tRP) - REPORT "tRP violation during Activate Bank 0" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b0 := '1'; - Pc_b0 := '0'; - B0_row_addr := Addr; - RC_chk0 := NOW; - RCD_chk0 := NOW; - RAS_chk0 := NOW; - RAP_chk0 := NOW; - END IF; - - -- Activate Bank 1 - IF Ba = "01" AND Pc_b1 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk1 >= tRC) - REPORT "tRC violation during Activate Bank 1" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk1 >= tRP) - REPORT "tRP violation during Activate Bank 1" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b1 := '1'; - Pc_b1 := '0'; - B1_row_addr := Addr; - RC_chk1 := NOW; - RCD_chk1 := NOW; - RAS_chk1 := NOW; - RAP_chk1 := NOW; - END IF; - - -- Activate Bank 2 - IF Ba = "10" AND Pc_b2 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk2 >= tRC) - REPORT "tRC violation during Activate Bank 2" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk2 >= tRP) - REPORT "tRP violation during Activate Bank 2" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b2 := '1'; - Pc_b2 := '0'; - B2_row_addr := Addr; - RC_chk2 := NOW; - RCD_chk2 := NOW; - RAS_chk2 := NOW; - RAP_chk2 := NOW; - END IF; - - -- Activate Bank 3 - IF Ba = "11" AND Pc_b3 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk3 >= tRC) - REPORT "tRC violation during Activate Bank 3" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk3 >= tRP) - REPORT "tRP violation during Activate Bank 3" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b3 := '1'; - Pc_b3 := '0'; - B3_row_addr := Addr; - RC_chk3 := NOW; - RCD_chk3 := NOW; - RAS_chk3 := NOW; - RAP_chk3 := NOW; - END IF; - - -- Activate Bank A to Activate Bank B - IF (Prev_bank /= Ba) THEN - ASSERT (NOW - RRD_chk >= tRRD) - REPORT "tRRD violation during Activate" - SEVERITY WARNING; - END IF; - - -- AutoRefresh to Activate - ASSERT (NOW - RFC_chk >= tRFC) - REPORT "tRFC violation during Activate" - SEVERITY WARNING; - - -- Record Variables for Checking Violation - RRD_chk := NOW; - Prev_bank := Ba; - END IF; - - -- Precharge Block - Consider NOP if bank already precharged or in process of precharging - IF Prech_enable = '1' THEN - -- EMR or LMR to Precharge - ASSERT (NOW - MRD_chk >= tMRD) - REPORT "tMRD violation during Precharge" - SEVERITY WARNING; - - -- Precharge Bank 0 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN - Act_b0 := '0'; - Pc_b0 := '1'; - RP_chk0 := NOW; - - -- Activate to Precharge bank 0 - ASSERT (NOW - RAS_chk0 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk0 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Precharge Bank 1 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN - Act_b1 := '0'; - Pc_b1 := '1'; - RP_chk1 := NOW; - - -- Activate to Precharge - ASSERT (NOW - RAS_chk1 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk1 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Precharge Bank 2 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN - Act_b2 := '0'; - Pc_b2 := '1'; - RP_chk2 := NOW; - - -- Activate to Precharge - ASSERT (NOW - RAS_chk2 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk2 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Precharge Bank 3 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN - Act_b3 := '0'; - Pc_b3 := '1'; - RP_chk3 := NOW; - - -- Activate to Precharge - ASSERT (NOW - RAS_chk3 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk3 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Pipeline for READ - IF CAS_latency_15 = '1' THEN - A10_precharge (3) := Addr(10); - Bank_precharge (3) := Ba; - Cmnd_precharge (3) := '1'; - ELSIF CAS_latency_2 = '1' THEN - A10_precharge (4) := Addr(10); - Bank_precharge (4) := Ba; - Cmnd_precharge (4) := '1'; - ELSIF CAS_latency_25 = '1' THEN - A10_precharge (5) := Addr(10); - Bank_precharge (5) := Ba; - Cmnd_precharge (5) := '1'; - ELSIF CAS_latency_3 = '1' THEN - A10_precharge (6) := Addr(10); - Bank_precharge (6) := Ba; - Cmnd_precharge (6) := '1'; - ELSIF CAS_latency_4 = '1' THEN - A10_precharge (8) := Addr(10); - Bank_precharge (8) := Ba; - Cmnd_precharge (8) := '1'; - END IF; - END IF; - - -- Burst Terminate - IF Burst_term = '1' THEN - -- Pipeline for Read - IF CAS_latency_15 = '1' THEN - Cmnd_bst (3) := '1'; - ELSIF CAS_latency_2 = '1' THEN - Cmnd_bst (4) := '1'; - ELSIF CAS_latency_25 = '1' THEN - Cmnd_bst (5) := '1'; - ELSIF CAS_latency_3 = '1' THEN - Cmnd_bst (6) := '1'; - ELSIF CAS_latency_4 = '1' THEN - Cmnd_bst (8) := '1'; - END IF; - - -- Terminate Write - ASSERT (Data_in_enable = '0') - REPORT "It's illegal to Burst Terminate a Write" - SEVERITY WARNING; - - -- Terminate Read with Auto Precharge - ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND - Read_precharge (2) = '0' AND Read_precharge (3) = '0') - REPORT "It's illegal to Burst Terminate a Read with Auto Precharge" - SEVERITY WARNING; - END IF; - - -- Read Command - IF Read_enable = '1' THEN - -- CAS Latency Pipeline - IF Cas_latency_15 = '1' THEN - Read_cmnd (3) := '1'; - Read_bank (3) := Ba; - Read_cols (3) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_2 = '1' THEN - Read_cmnd (4) := '1'; - Read_bank (4) := Ba; - Read_cols (4) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_25 = '1' THEN - Read_cmnd (5) := '1'; - Read_bank (5) := Ba; - Read_cols (5) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_3 = '1' THEN - Read_cmnd (6) := '1'; - Read_bank (6) := Ba; - Read_cols (6) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_4 = '1' THEN - Read_cmnd (8) := '1'; - Read_bank (8) := Ba; - Read_cols (8) := Addr (8 DOWNTO 0); - END IF; - - -- Write to Read: Terminate Write Immediately - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - END IF; - - -- Interrupting a Read with Auto Precharge (same bank only) - ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0') - REPORT "It's illegal to interrupt a Read with Auto Precharge" - SEVERITY WARNING; - - -- Activate to Read - ASSERT ((Ba = "00" AND Act_b0 = '1') OR - (Ba = "01" AND Act_b1 = '1') OR - (Ba = "10" AND Act_b2 = '1') OR - (Ba = "11" AND Act_b3 = '1')) - REPORT "Bank is not Activated for Read" - SEVERITY WARNING; - - -- Activate to Read without Auto Precharge - IF Addr (10) = '0' THEN - ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR - (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR - (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR - (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) - REPORT "tRCD violation during Read" - SEVERITY WARNING; - END IF; - - -- Activate to Read with Auto Precharge - IF Addr (10) = '1' THEN - ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR - (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR - (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR - (Ba = "11" AND NOW - RAP_chk3 >= tRAP)) - REPORT "tRAP violation during Read" - SEVERITY WARNING; - END IF; - - -- Auto precharge - IF Addr (10) = '1' THEN - Read_precharge (Conv_INTEGER(Ba)) := '1'; - Count_precharge (Conv_INTEGER(Ba)) := 0; - END IF; - - -- DLL Check - IF (DLL_reset = '1') THEN - ASSERT (DLL_done = '1') - REPORT "DLL RESET not complete" - SEVERITY WARNING; - END IF; - END IF; - - -- Write Command - IF Write_enable = '1' THEN - -- Pipeline for Write - Write_cmnd (2) := '1'; - Write_bank (2) := Ba; - Write_cols (2) := Addr (8 DOWNTO 0); - - -- Interrupting a Write with Auto Precharge (same bank only) - ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0') - REPORT "It's illegal to interrupt a Write with Auto Precharge" - SEVERITY WARNING; - - -- Activate to Write - ASSERT ((Ba = "00" AND Act_b0 = '1') OR - (Ba = "01" AND Act_b1 = '1') OR - (Ba = "10" AND Act_b2 = '1') OR - (Ba = "11" AND Act_b3 = '1')) - REPORT "Bank is not Activated for Write" - SEVERITY WARNING; - - -- Activate to Write - ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR - (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR - (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR - (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) - REPORT "tRCD violation during Write" - SEVERITY WARNING; - - -- Auto precharge - IF Addr (10) = '1' THEN - Write_precharge (Conv_INTEGER(Ba)) := '1'; - Count_precharge (Conv_INTEGER(Ba)) := 0; - END IF; - END IF; - END IF; - END PROCESS; - - -- - -- Dqs Receiver - -- - dqs_rcvrs : PROCESS - VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0); - VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); - BEGIN - WAIT ON Dqs; - -- Latch data at posedge Dqs - IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN - Dq_temp := Dq; - Dm_temp := Dm; - END IF; - -- Latch data at negedge Dqs - IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN - Dq_pair <= (Dq & Dq_temp); - Dm_pair <= (Dm & Dm_temp); - END IF; - END PROCESS; - - -- - -- Setup timing checks - -- - Setup_check : PROCESS - BEGIN - WAIT ON Sys_clk; - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - ASSERT(Cke'LAST_EVENT >= tIS) - REPORT "CKE Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Cs_n'LAST_EVENT >= tIS) - REPORT "CS# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Cas_n'LAST_EVENT >= tIS) - REPORT "CAS# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Ras_n'LAST_EVENT >= tIS) - REPORT "RAS# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(We_n'LAST_EVENT >= tIS) - REPORT "WE# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Addr'LAST_EVENT >= tIS) - REPORT "ADDR Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Ba'LAST_EVENT >= tIS) - REPORT "BA Setup time violation -- tIS" - SEVERITY WARNING; - END IF; - END PROCESS; - - -- - -- Hold timing checks - -- - Hold_check : PROCESS - BEGIN - WAIT ON Sys_clk'DELAYED (tIH); - IF Sys_clk'DELAYED (tIH) = '1' THEN - ASSERT(Cke'LAST_EVENT >= tIH) - REPORT "CKE Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Cs_n'LAST_EVENT >= tIH) - REPORT "CS# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Cas_n'LAST_EVENT >= tIH) - REPORT "CAS# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Ras_n'LAST_EVENT >= tIH) - REPORT "RAS# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(We_n'LAST_EVENT >= tIH) - REPORT "WE# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Addr'LAST_EVENT >= tIH) - REPORT "ADDR Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Ba'LAST_EVENT >= tIH) - REPORT "BA Hold time violation -- tIH" - SEVERITY WARNING; - END IF; - END PROCESS; - -END behave; diff --git a/zpu/hdl/zpu4/src/build.xml b/zpu/hdl/zpu4/src/build.xml deleted file mode 100644 index e1b268a..0000000 --- a/zpu/hdl/zpu4/src/build.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - eCosBoard firmware build file - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/zpu/hdl/zpu4/src/ic300.bitgen b/zpu/hdl/zpu4/src/ic300.bitgen deleted file mode 100644 index 1095099..0000000 --- a/zpu/hdl/zpu4/src/ic300.bitgen +++ /dev/null @@ -1,27 +0,0 @@ --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 deleted file mode 100644 index 22de730..0000000 --- a/zpu/hdl/zpu4/src/ic300.lso +++ /dev/null @@ -1 +0,0 @@ -work diff --git a/zpu/hdl/zpu4/src/ic300.ucf b/zpu/hdl/zpu4/src/ic300.ucf deleted file mode 100644 index 4a141b9..0000000 --- a/zpu/hdl/zpu4/src/ic300.ucf +++ /dev/null @@ -1,146 +0,0 @@ -# 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 deleted file mode 100644 index a1b4f41..0000000 --- a/zpu/hdl/zpu4/src/ic300.vhd +++ /dev/null @@ -1,144 +0,0 @@ --------------------------------------------------------------------------------- --- 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 deleted file mode 100644 index b14ec79..0000000 --- a/zpu/hdl/zpu4/src/ic300_config.vhd +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 13da306..0000000 --- a/zpu/hdl/zpu4/src/ic300pkg.vhd +++ /dev/null @@ -1,88 +0,0 @@ -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/xmake.filelist b/zpu/hdl/zpu4/src/xmake.filelist deleted file mode 100644 index 91e623f..0000000 --- a/zpu/hdl/zpu4/src/xmake.filelist +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index 141633e..0000000 --- a/zpu/hdl/zpu4/src/xmake.filelist.bramsmall +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index bfdb23f..0000000 --- a/zpu/hdl/zpu4/src/xmake.xst +++ /dev/null @@ -1,53 +0,0 @@ -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/zpuio_bram.vhd b/zpu/hdl/zpu4/src/zpuio_bram.vhd deleted file mode 100644 index 5d3f409..0000000 --- a/zpu/hdl/zpu4/src/zpuio_bram.vhd +++ /dev/null @@ -1,229 +0,0 @@ -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; -- cgit v1.1 From 167263dcae188a8812627ab52cfd96b8fdc5df8a Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 17 Apr 2008 08:31:56 +0000 Subject: * deleted duplicate files from example folder. --- zpu/ChangeLog | 1 + zpu/hdl/example/io.vhd | 97 ----------------- zpu/hdl/example/sim_fpga_top.vhd | 179 -------------------------------- zpu/hdl/example/simzpu_small.do | 4 +- zpu/hdl/zpu4/src/sim_small_fpga_top.vhd | 179 ++++++++++++++++++++++++++++++++ 5 files changed, 182 insertions(+), 278 deletions(-) delete mode 100644 zpu/hdl/example/io.vhd delete mode 100644 zpu/hdl/example/sim_fpga_top.vhd create mode 100644 zpu/hdl/zpu4/src/sim_small_fpga_top.vhd diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 9b722e8..331ea74 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,4 +1,5 @@ 2008-04-17 Øyvind Harboe + * deleted duplicate files from example folder. * retired Xilinx synthesizing example. It messes up the zpu4 directory. 2008-04-16 Øyvind Harboe * zpu/doc/zpupresentation_old.odt: interesting bits moved into zpu_arch.html diff --git a/zpu/hdl/example/io.vhd b/zpu/hdl/example/io.vhd deleted file mode 100644 index 7dbe36f..0000000 --- a/zpu/hdl/example/io.vhd +++ /dev/null @@ -1,97 +0,0 @@ -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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(7 downto 0), - 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"2028003" 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 - print(l_file, character'val(conv_integer(write))); - report "Illegal IO write" severity warning; - end if; - - end if; - read <= (others => '0'); - if (readEnable = '1') then - if addr=x"1001" then - read <= (0=>'1', others => '0'); -- recieve empty - elsif addr(12)='1' then - read(7 downto 0) <= timer_read; - elsif addr(11)='1' then - read(7 downto 0) <= ZPU_Frequency; - elsif addr=x"2028003" then - read <= (others => '0'); - else - read <= (others => '0'); - read(8) <= '1'; - report "Illegal IO read" severity warning; - end if; - end if; - end if; - end process; - - -end behave; - diff --git a/zpu/hdl/example/sim_fpga_top.vhd b/zpu/hdl/example/sim_fpga_top.vhd deleted file mode 100644 index b51fea0..0000000 --- a/zpu/hdl/example/sim_fpga_top.vhd +++ /dev/null @@ -1,179 +0,0 @@ --------------------------------------------------------------------------------- --- 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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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); - - - ioMap: zpu_io port map ( - clk => clk, - areset => areset, - busy => io_busy, - writeEnable => io_mem_writeEnable, - readEnable => io_mem_readEnable, - write => mem_write, - 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; - - - - -- 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 <= 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/example/simzpu_small.do b/zpu/hdl/example/simzpu_small.do index 5fb906d..1f8f358 100644 --- a/zpu/hdl/example/simzpu_small.do +++ b/zpu/hdl/example/simzpu_small.do @@ -10,11 +10,11 @@ vlib work vcom -93 -explicit zpu_config.vhd vcom -93 -explicit ../zpu4/src/zpupkg.vhd vcom -93 -explicit ../zpu4/src/txt_util.vhd -vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit ../zpu4/src/sim_small_fpga_top.vhd vcom -93 -explicit ../zpu4/src/zpu_core_small.vhd vcom -93 -explicit helloworld.vhd vcom -93 -explicit ../zpu4/src/timer.vhd -vcom -93 -explicit io.vhd +vcom -93 -explicit ../zpu4/src/io.vhd vcom -93 -explicit ../zpu4/src/trace.vhd # run ZPU diff --git a/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd b/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd new file mode 100644 index 0000000..b51fea0 --- /dev/null +++ b/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd @@ -0,0 +1,179 @@ +-------------------------------------------------------------------------------- +-- 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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + 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; + + + + -- 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 <= 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; -- cgit v1.1 From d09fa3de9df02a66c5084623076ac3e167b58274 Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 22 Apr 2008 05:52:16 +0000 Subject: * zpu/hdl/example_ghdl/ghdl_import.sh, zpu/hdl/example_ghdl/ghdl_make.sh, zpu/hdl/example_ghdl/ghdl_options.sh, zpu/hdl/example_ghdl/README: GHDL example * zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh: testcase for GHDL * zpu/hdl/zpu4/src/dmipstrace_ghdl.sh: testcase for GHDL * zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh: testcase for GHDL * zpu/hdl/example/helloworld.vhd, zpu/hdl/zpu4/src/bram_dmips.vhd, zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh, zpu/hdl/zpu4/src/dram_dmips.vhd, zpu/hdl/zpu4/src/dram_hello.vhd, zpu/hdl/zpu4/src/io.vhd, zpu/hdl/zpu4/src/sim_fpga_top.vhd, zpu/hdl/zpu4/src/sim_small_fpga_top.vhd, zpu/hdl/zpu4/src/timer.vhd, zpu/hdl/zpu4/src/trace.vhd, zpu/hdl/zpu4/src/zpu_config_trace.vhd, zpu/hdl/zpu4/src/zpu_core_small.vhd, zpu/hdl/zpu4/src/zpu_core.vhd, zpu/hdl/zpu4/src/zpupkg.vhd: conversion to numeric_std --- zpu/ChangeLog | 13 + zpu/hdl/example/helloworld.vhd | 12 +- zpu/hdl/example_ghdl/README | 74 ++ zpu/hdl/example_ghdl/ghdl_import.sh | 13 + zpu/hdl/example_ghdl/ghdl_make.sh | 4 + zpu/hdl/example_ghdl/ghdl_options.sh | 3 + zpu/hdl/zpu4/src/bram_dmips.vhd | 12 +- zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh | 26 + zpu/hdl/zpu4/src/dmipstrace_ghdl.sh | 25 + zpu/hdl/zpu4/src/dram_dmips.vhd | 8 +- zpu/hdl/zpu4/src/dram_hello.vhd | 8 +- zpu/hdl/zpu4/src/io.vhd | 6 +- zpu/hdl/zpu4/src/log.txt | 414 +++++-- zpu/hdl/zpu4/src/sim_fpga_top.vhd | 377 ++++--- zpu/hdl/zpu4/src/sim_small_fpga_top.vhd | 356 +++--- zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh | 25 + zpu/hdl/zpu4/src/timer.vhd | 6 +- zpu/hdl/zpu4/src/trace.vhd | 7 +- zpu/hdl/zpu4/src/zpu_config_trace.vhd | 1 - zpu/hdl/zpu4/src/zpu_core.vhd | 1795 +++++++++++++++--------------- zpu/hdl/zpu4/src/zpu_core_small.vhd | 880 ++++++++------- zpu/hdl/zpu4/src/zpupkg.vhd | 44 +- 22 files changed, 2262 insertions(+), 1847 deletions(-) create mode 100644 zpu/hdl/example_ghdl/README create mode 100644 zpu/hdl/example_ghdl/ghdl_import.sh create mode 100644 zpu/hdl/example_ghdl/ghdl_make.sh create mode 100644 zpu/hdl/example_ghdl/ghdl_options.sh create mode 100644 zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh create mode 100644 zpu/hdl/zpu4/src/dmipstrace_ghdl.sh create mode 100644 zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 331ea74..249ff02 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,16 @@ +2008-04-17 Arnim Läuger + * zpu/hdl/example_ghdl/ghdl_import.sh, zpu/hdl/example_ghdl/ghdl_make.sh, + zpu/hdl/example_ghdl/ghdl_options.sh, zpu/hdl/example_ghdl/README: GHDL example + * zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh: testcase for GHDL + * zpu/hdl/zpu4/src/dmipstrace_ghdl.sh: testcase for GHDL + * zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh: testcase for GHDL + * zpu/hdl/example/helloworld.vhd, zpu/hdl/zpu4/src/bram_dmips.vhd, + zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh, zpu/hdl/zpu4/src/dram_dmips.vhd, + zpu/hdl/zpu4/src/dram_hello.vhd, zpu/hdl/zpu4/src/io.vhd, + zpu/hdl/zpu4/src/sim_fpga_top.vhd, zpu/hdl/zpu4/src/sim_small_fpga_top.vhd, + zpu/hdl/zpu4/src/timer.vhd, zpu/hdl/zpu4/src/trace.vhd, + zpu/hdl/zpu4/src/zpu_config_trace.vhd, zpu/hdl/zpu4/src/zpu_core_small.vhd, + zpu/hdl/zpu4/src/zpu_core.vhd, zpu/hdl/zpu4/src/zpupkg.vhd: conversion to numeric_std 2008-04-17 Øyvind Harboe * deleted duplicate files from example folder. * retired Xilinx synthesizing example. It messes up the zpu4 directory. diff --git a/zpu/hdl/example/helloworld.vhd b/zpu/hdl/example/helloworld.vhd index 2e5ce4e..f9383fd 100644 --- a/zpu/hdl/example/helloworld.vhd +++ b/zpu/hdl/example/helloworld.vhd @@ -1,6 +1,6 @@ library ieee; use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; library work; @@ -22,7 +22,7 @@ end dualport_ram; architecture dualport_ram_arch of dualport_ram is -type ram_type is array(0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); +type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); shared variable ram : ram_type := ( @@ -3094,10 +3094,10 @@ begin end if; if (memAWriteEnable = '1') then - ram(conv_integer(memAAddr)) := memAWrite; + ram(to_integer(unsigned(memAAddr))) := memAWrite; memARead <= memAWrite; else - memARead <= ram(conv_integer(memAAddr)); + memARead <= ram(to_integer(unsigned(memAAddr))); end if; end if; end process; @@ -3106,10 +3106,10 @@ process (clk) begin if (clk'event and clk = '1') then if (memBWriteEnable = '1') then - ram(conv_integer(memBAddr)) := memBWrite; + ram(to_integer(unsigned(memBAddr))) := memBWrite; memBRead <= memBWrite; else - memBRead <= ram(conv_integer(memBAddr)); + memBRead <= ram(to_integer(unsigned(memBAddr))); end if; end if; end process; diff --git a/zpu/hdl/example_ghdl/README b/zpu/hdl/example_ghdl/README new file mode 100644 index 0000000..c537284 --- /dev/null +++ b/zpu/hdl/example_ghdl/README @@ -0,0 +1,74 @@ +This directory contains a quick setup of the helloworld example for +the GHDL simulator. + + http://ghdl.free.fr/ + +Compiled by Arnim Laeuger, 17-Apr-2008. + + +Prerequisites +------------- + +The RTL source code references the ROC component from Xilinx' unisim +library. If not already done, you'll have to prepare this library containing +at least the roc entity and architecture objects. + +Decide where to store this library. This could be locally in this directory or +at some central place where it can be referenced from other projects. I'd +prefer the latter option. + + $ cd + +Prepare the sources for GHDL: + $ mkdir src + $ cd src + $ ghdl --chop /vhdl/src/unisims/* + $ cd .. + +Import the sources into the library: + $ mkdir unisim_v93 + $ ghdl -i --work=unisim --workdir=unisim_v93 --std=93 -fexplicit --no-vital-checks --ieee=synopsys src/* + +Compile the required component: + $ ghdl -m --syn-binding --work=unisim --workdir=unisim_v93 --std=93 -fexplicit --no-vital-checks --ieee=synopsys roc + $ rm roc + -> not required for library + +If you require more components from the unisim library for other projects, you +can repeat the compile step later on without running through the preparation +and import steps. + + +Compiling the example +--------------------- + +Edit ghdl_options.sh and point the variable UNISIM_DIR to the location of your +newly created unisim library. + +You need to import the project sources once by running + $ ./ghdl_import.sh + +Compilation (using GHDL's make feature) is invoked by + $ ./ghdl_make.sh + +Whenever the VHDL sources change, it's enough to execute ghdl_make.sh. GHDL +will trace the dependencies and will rebuild only the modified sources. + + +Simulation +---------- + +Simulation finally happens by running the fpga_top executable generated by the +compilation step. Don't forget to set a stop time or the testbench might run +forever: + + $ ./fpga_top --stop-time=2100us + +The log.txt and trace.txt files are generated as simulation progresses. They +should be compared to the files given in the example directory. + +Waveforms can be obtained by specifying the ghw file name: + + $ ./fpga_top --stop-time=1ms --wave=zpu.ghw + +They can be inspected with gtkwave from http://home.nc.rr.com/gtkwave/. diff --git a/zpu/hdl/example_ghdl/ghdl_import.sh b/zpu/hdl/example_ghdl/ghdl_import.sh new file mode 100644 index 0000000..299134b --- /dev/null +++ b/zpu/hdl/example_ghdl/ghdl_import.sh @@ -0,0 +1,13 @@ +#!/bin/sh +. ghdl_options.sh + +mkdir -p work +ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/zpu_config.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/zpupkg.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/helloworld.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/txt_util.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/trace.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/zpu_core_small.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/io.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/timer.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/sim_small_fpga_top.vhd diff --git a/zpu/hdl/example_ghdl/ghdl_make.sh b/zpu/hdl/example_ghdl/ghdl_make.sh new file mode 100644 index 0000000..948b100 --- /dev/null +++ b/zpu/hdl/example_ghdl/ghdl_make.sh @@ -0,0 +1,4 @@ +#!/bin/sh +. ghdl_options.sh + +ghdl -m ${MAKE_OPTIONS} fpga_top diff --git a/zpu/hdl/example_ghdl/ghdl_options.sh b/zpu/hdl/example_ghdl/ghdl_options.sh new file mode 100644 index 0000000..3883ee7 --- /dev/null +++ b/zpu/hdl/example_ghdl/ghdl_options.sh @@ -0,0 +1,3 @@ +UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" diff --git a/zpu/hdl/zpu4/src/bram_dmips.vhd b/zpu/hdl/zpu4/src/bram_dmips.vhd index 83bfc28..1d62d21 100644 --- a/zpu/hdl/zpu4/src/bram_dmips.vhd +++ b/zpu/hdl/zpu4/src/bram_dmips.vhd @@ -1,6 +1,6 @@ library ieee; use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; library work; @@ -22,7 +22,7 @@ end dualport_ram; architecture dualport_ram_arch of dualport_ram is -type ram_type is array(0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); +type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); shared variable ram : ram_type := ( @@ -3691,10 +3691,10 @@ begin end if; if (memAWriteEnable = '1') then - ram(conv_integer(memAAddr)) := memAWrite; + ram(to_integer(unsigned(memAAddr))) := memAWrite; memARead <= memAWrite; else - memARead <= ram(conv_integer(memAAddr)); + memARead <= ram(to_integer(unsigned(memAAddr))); end if; end if; end process; @@ -3703,10 +3703,10 @@ process (clk) begin if (clk'event and clk = '1') then if (memBWriteEnable = '1') then - ram(conv_integer(memBAddr)) := memBWrite; + ram(to_integer(unsigned(memBAddr))) := memBWrite; memBRead <= memBWrite; else - memBRead <= ram(conv_integer(memBAddr)); + memBRead <= ram(to_integer(unsigned(memBAddr))); end if; end if; end process; diff --git a/zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh b/zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh new file mode 100644 index 0000000..5e43b64 --- /dev/null +++ b/zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" + +if test ! -e work; then + echo "Building work library..." + mkdir work + ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} zpu_core_small.vhd + ghdl -i ${IMPORT_OPTIONS} bram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} timer.vhd + ghdl -i ${IMPORT_OPTIONS} io.vhd + ghdl -i ${IMPORT_OPTIONS} trace.vhd +fi + +echo "Compiling design..." +if ghdl -m ${MAKE_OPTIONS} fpga_top; then + echo "Compilation finished, start simulation with" + echo " ./fpga_top --stop-time=1ms" +fi diff --git a/zpu/hdl/zpu4/src/dmipstrace_ghdl.sh b/zpu/hdl/zpu4/src/dmipstrace_ghdl.sh new file mode 100644 index 0000000..3be392f --- /dev/null +++ b/zpu/hdl/zpu4/src/dmipstrace_ghdl.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" + +if test ! -e work; then + echo "Building work library..." + mkdir work + ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd + ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} timer.vhd + ghdl -i ${IMPORT_OPTIONS} io.vhd + ghdl -i ${IMPORT_OPTIONS} trace.vhd +fi + +echo "Compiling design..." +if ghdl -m ${MAKE_OPTIONS} fpga_top; then + echo "Compilation finished, start simulation with" + echo " ./fpga_top --stop-time=2500us" +fi diff --git a/zpu/hdl/zpu4/src/dram_dmips.vhd b/zpu/hdl/zpu4/src/dram_dmips.vhd index a289fd7..a9fd59e 100644 --- a/zpu/hdl/zpu4/src/dram_dmips.vhd +++ b/zpu/hdl/zpu4/src/dram_dmips.vhd @@ -1,6 +1,6 @@ library ieee; use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; library work; @@ -22,7 +22,7 @@ end dram; architecture dram_arch of dram is -type ram_type is array(0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); +type ram_type is array(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); shared variable ram : ram_type := ( @@ -3294,10 +3294,10 @@ 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; + ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; end if; if (mem_readEnable = '1') then - mem_read <= ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))); + mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); end if; end if; end process; diff --git a/zpu/hdl/zpu4/src/dram_hello.vhd b/zpu/hdl/zpu4/src/dram_hello.vhd index 3f7788a..4f02cca 100644 --- a/zpu/hdl/zpu4/src/dram_hello.vhd +++ b/zpu/hdl/zpu4/src/dram_hello.vhd @@ -1,6 +1,6 @@ library ieee; use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; library work; @@ -22,7 +22,7 @@ end dram; architecture dram_arch of dram is -type ram_type is array(0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); +type ram_type is array(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); shared variable ram : ram_type := ( @@ -3093,10 +3093,10 @@ 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; + ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; end if; if (mem_readEnable = '1') then - mem_read <= ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))); + mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); end if; end if; end process; diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd index 7dbe36f..7a2601f 100644 --- a/zpu/hdl/zpu4/src/io.vhd +++ b/zpu/hdl/zpu4/src/io.vhd @@ -1,6 +1,6 @@ library ieee; use ieee.std_logic_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; +use ieee.numeric_std.all; use std.textio.all; @@ -63,12 +63,12 @@ begin if addr=x"2028003" then -- Write to UART -- report "" & character'image(conv_integer(memBint)) severity note; - print(l_file, character'val(conv_integer(write))); + print(l_file, character'val(to_integer(unsigned(write)))); elsif addr(12)='1' then -- report "xxx" severity failure; -- timer_we <= '1'; else - print(l_file, character'val(conv_integer(write))); + print(l_file, character'val(to_integer(unsigned(write)))); report "Illegal IO write" severity warning; end if; diff --git a/zpu/hdl/zpu4/src/log.txt b/zpu/hdl/zpu4/src/log.txt index 47b8a65..7a82879 100644 --- a/zpu/hdl/zpu4/src/log.txt +++ b/zpu/hdl/zpu4/src/log.txt @@ -1,156 +1,380 @@ +H +e +l +l +o + +w +o +r +l +d + +1 -D -h -r -y -s -t -o -n + + + +H e +l +l +o -B -e -n -c -h -m -a +w +o r -k -, +l +d -V +2 + + + + + + +H e -r -s -i +l +l o -n -2 -. -1 +w +o +r +l +d -( -L -a -n -g -u -a -g +1 + + + + + + +H e -: +l +l +o + +w +o +r +l +d -C -) +2 -P +H +e +l +l +o + +w +o r +l +d + +1 + + + + + + +H +e +l +l +o + +w o -g r -a -m +l +d + +2 + + + + + + +H +e +l +l +o -c +w o -m -p -i +r l +d + +1 + + + + + + +H e +l +l +o + +w +o +r +l d +2 + + + + + + +H +e +l +l +o + w -i -t -h o -u -t +r +l +d + +1 + + + + + + +H +e +l +l +o -' +w +o r +l +d + +2 + + + + + + +H e -g -i -s -t +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 -a -t -t +w +o r -i -b -u -t +l +d + +1 + + + + + + +H e +l +l +o + +w +o +r +l +d + +2 -E -x +H e -c -u -t -i +l +l o -n -s -t -a +w +o r -t -s -, +l +d -5 -0 -0 -0 -0 +1 + + + + + + +H +e +l +l +o +w +o r -u -n -s +l +d -t -h +2 + + + + + + +H +e +l +l +o + +w +o r +l +d + +1 + + + + + + +H +e +l +l o -u -g -h -D -h +w +o r -y -s -t +l +d + +2 + + + + + + +H +e +l +l o -n + +w +o +r +l +d + +1 + + + + + + +H e +l +l +o + +w +o +r +l +d + +2 + + + - diff --git a/zpu/hdl/zpu4/src/sim_fpga_top.vhd b/zpu/hdl/zpu4/src/sim_fpga_top.vhd index 4defc82..29151af 100644 --- a/zpu/hdl/zpu4/src/sim_fpga_top.vhd +++ b/zpu/hdl/zpu4/src/sim_fpga_top.vhd @@ -1,189 +1,188 @@ --------------------------------------------------------------------------------- --- 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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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(wordSize-1 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 <= 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; +-------------------------------------------------------------------------------- +-- 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; + +---- 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; + +entity fpga_top is +end fpga_top; + +use work.zpupkg.all; + +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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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(wordSize-1 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 <= 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/sim_small_fpga_top.vhd b/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd index b51fea0..5c05881 100644 --- a/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd +++ b/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd @@ -1,179 +1,177 @@ --------------------------------------------------------------------------------- --- 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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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); - - - ioMap: zpu_io port map ( - clk => clk, - areset => areset, - busy => io_busy, - writeEnable => io_mem_writeEnable, - readEnable => io_mem_readEnable, - write => mem_write, - 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; - - - - -- 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 <= 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; +-------------------------------------------------------------------------------- +-- 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; + +---- 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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + 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; + + + + -- 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 <= 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_medium_ghdl.sh b/zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh new file mode 100644 index 0000000..7a7f3df --- /dev/null +++ b/zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" + +if test ! -e work; then + echo "Building work library..." + mkdir work + ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd + ghdl -i ${IMPORT_OPTIONS} dram_hello.vhd + ghdl -i ${IMPORT_OPTIONS} timer.vhd + ghdl -i ${IMPORT_OPTIONS} io.vhd + ghdl -i ${IMPORT_OPTIONS} trace.vhd +fi + +echo "Compiling design..." +if ghdl -m ${MAKE_OPTIONS} fpga_top; then + echo "Compilation finished, start simulation with" + echo " ./fpga_top --stop-time=1ms" +fi diff --git a/zpu/hdl/zpu4/src/timer.vhd b/zpu/hdl/zpu4/src/timer.vhd index 60c8fe2..be1dbb8 100644 --- a/zpu/hdl/zpu4/src/timer.vhd +++ b/zpu/hdl/zpu4/src/timer.vhd @@ -1,6 +1,6 @@ library ieee; use ieee.std_logic_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; +use ieee.numeric_std.all; entity timer is port( @@ -19,7 +19,7 @@ signal sample : std_logic; signal reset : std_logic; -signal cnt : std_logic_vector(63 downto 0); +signal cnt : unsigned(63 downto 0); signal cnt_smp : std_logic_vector(63 downto 0); begin @@ -36,7 +36,7 @@ begin cnt <= cnt + 1; if sample = '1' then -- report "sampling" severity failure; - cnt_smp <= cnt; + cnt_smp <= std_logic_vector(cnt); end if; end if; end process; diff --git a/zpu/hdl/zpu4/src/trace.vhd b/zpu/hdl/zpu4/src/trace.vhd index bc5279f..e687aaf 100644 --- a/zpu/hdl/zpu4/src/trace.vhd +++ b/zpu/hdl/zpu4/src/trace.vhd @@ -1,7 +1,6 @@ library ieee; use ieee.std_logic_1164.all; ---use IEEE.STD_LOGIC_ARITH.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; +use ieee.numeric_std.all; use std.textio.all; @@ -45,7 +44,7 @@ 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); +variable counter : unsigned(63 downto 0); @@ -69,7 +68,7 @@ counter := (others => '0'); 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)); + print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB) & " 0x" & hstr(intSp) & " 0x" & hstr(std_logic_vector(counter))); end if; wait until clk = '0'; diff --git a/zpu/hdl/zpu4/src/zpu_config_trace.vhd b/zpu/hdl/zpu4/src/zpu_config_trace.vhd index 4d0f15f..d765d9a 100644 --- a/zpu/hdl/zpu4/src/zpu_config_trace.vhd +++ b/zpu/hdl/zpu4/src/zpu_config_trace.vhd @@ -1,6 +1,5 @@ library ieee; use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; package zpu_config is diff --git a/zpu/hdl/zpu4/src/zpu_core.vhd b/zpu/hdl/zpu4/src/zpu_core.vhd index a603fe9..37fa2d1 100644 --- a/zpu/hdl/zpu4/src/zpu_core.vhd +++ b/zpu/hdl/zpu4/src/zpu_core.vhd @@ -1,898 +1,897 @@ - --- 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'; - sp <= spStart(maxAddrBitIncIO downto minAddrBit); - - 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 - 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) - 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; + +-- Company: ZPU4 generic memory interface CPU +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.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 : unsigned(maxAddrBitIncIO downto 0); +signal sp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal incSp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal incIncSp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal decSp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal stackA : unsigned(wordSize-1 downto 0); +signal binaryOpResult : unsigned(wordSize-1 downto 0); +signal binaryOpResult2 : unsigned(wordSize-1 downto 0); +signal multResult2 : unsigned(wordSize-1 downto 0); +signal multResult3 : unsigned(wordSize-1 downto 0); +signal multResult : unsigned(wordSize-1 downto 0); +signal multA : unsigned(wordSize-1 downto 0); +signal multB : unsigned(wordSize-1 downto 0); +signal stackB : unsigned(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 : unsigned(4 downto 0); + variable tSpOffset : unsigned(4 downto 0); + variable nextPC : unsigned(maxAddrBitIncIO downto 0); + variable tNextState : InsnType; + variable tDecodedOpcode : InsnArray; + variable tMultResult : unsigned(wordSize*2-1 downto 0); + begin + if areset = '1' then + state <= State_Idle; + break <= '0'; + sp <= unsigned(spStart(maxAddrBitIncIO downto minAddrBit)); + + 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(to_integer(pc(byteBits-1 downto 0)))(4); + spOffset(3 downto 0):=unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(3 downto 0)); + nextPC := pc + 1; + + -- prepare trace snapshot + trace_opcode <= opcode(to_integer(pc(byteBits-1 downto 0))); + trace_pc <= std_logic_vector(pc); + trace_sp <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(stackA); + trace_topOfStackB <= std_logic_vector(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 <= std_logic_vector(sp); + mem_readEnable <= '1'; + state <= State_Resync2; + end if; + when State_Resync2 => + if in_mem_busy='0' then + stackA <= unsigned(mem_read); + mem_addr <= std_logic_vector(incSp); + mem_readEnable <= '1'; + state <= State_Resync3; + end if; + when State_Resync3 => + if in_mem_busy='0' then + stackB <= unsigned(mem_read); + mem_addr <= std_logic_vector(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):=unsigned(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(to_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(to_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) <= unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(6 downto 0)); + else + mem_writeEnable <= '1'; + mem_addr <= std_logic_vector(incSp); + mem_write <= std_logic_vector(stackB); + stackB <= stackA; + sp <= decSp; + for i in wordSize-1 downto 7 loop + stackA(i) <= opcode(to_integer(pc(byteBits-1 downto 0)))(6); + end loop; + stackA(6 downto 0) <= unsigned(opcode(to_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 <= std_logic_vector(sp+spOffset); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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) <= unsigned(opcode(to_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 <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 + 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) + 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 <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); + mem_write <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(sp+spOffset+1); + end if; + when State_LoadSP3 => + if in_mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackB <= stackA; + stackA <= unsigned(mem_read); + end if; + when State_AddSP2 => + if in_mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackA <= stackA + unsigned(mem_read); + end if; + when State_Load2 => + if in_mem_busy='0' then + stackA <= unsigned(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) <= unsigned(mem_read(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); + mem_write <= mem_read; + mem_write(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8) <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(incIncSp); + sp <= incSp; + state <= State_Popped; + end if; + when State_BinaryOpResult => + state <= State_BinaryOpResult2; + when State_BinaryOpResult2 => + mem_readEnable <= '1'; + mem_addr <= std_logic_vector(incIncSp); + sp <= incSp; + stackA <= binaryOpResult2; + state <= State_Popped; + when State_Popped => + if in_mem_busy='0' then + pc <= pc + 1; + stackB <= unsigned(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 index 4d73f88..0d734d2 100644 --- a/zpu/hdl/zpu4/src/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/src/zpu_core_small.vhd @@ -1,433 +1,447 @@ --- 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; +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.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 : unsigned(maxAddrBit downto minAddrBit); +signal memAWrite : unsigned(wordSize-1 downto 0); +signal memARead : unsigned(wordSize-1 downto 0); +signal memBWriteEnable : std_logic; +signal memBAddr : unsigned(maxAddrBit downto minAddrBit); +signal memBWrite : unsigned(wordSize-1 downto 0); +signal memBRead : unsigned(wordSize-1 downto 0); + + + +signal pc : unsigned(maxAddrBit downto 0); +signal sp : unsigned(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; + +subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; +signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); +signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); +signal memARead_stdlogic : std_logic_vector(memARead'range); +signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); +signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); +signal memBRead_stdlogic : std_logic_vector(memBRead'range); + +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; + + + memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); + memAWrite_stdlogic <= std_logic_vector(memAWrite); + memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); + memBWrite_stdlogic <= std_logic_vector(memBWrite); + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr_stdlogic, + memAWrite => memAWrite_stdlogic, + memARead => memARead_stdlogic, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr_stdlogic, + memBWrite => memBWrite_stdlogic, + memBRead => memBRead_stdlogic + ); + memARead <= unsigned(memARead_stdlogic); + memBRead <= unsigned(memBRead_stdlogic); + + + + decodeControl: + process(memBRead, pc) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + begin + tOpcode := std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-to_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 : unsigned(4 downto 0); + begin + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= unsigned(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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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) <= std_logic_vector(pc); + trace_opcode <= opcode; + trace_sp <= (others => '0'); + trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(memARead); + trace_topOfStackB <= std_logic_vector(memBRead); + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0) := unsigned(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) <= unsigned(opcode(6 downto 0)); + else + memAAddr <= sp; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 <= unsigned(mem_read); + end if; + when State_WriteIO => + sp <= sp + 1; + out_mem_writeEnable <= '1'; + out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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/zpupkg.vhd b/zpu/hdl/zpu4/src/zpupkg.vhd index 32e162b..f3800b0 100644 --- a/zpu/hdl/zpu4/src/zpupkg.vhd +++ b/zpu/hdl/zpu4/src/zpupkg.vhd @@ -1,6 +1,6 @@ library IEEE; use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_ARITH.all; +use ieee.numeric_std.all; library work; use work.zpu_config.all; @@ -133,33 +133,33 @@ package zpupkg is 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_Lessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(36, 6)); + constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(37, 6)); + constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(38, 6)); + constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(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_Swap : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(40, 6)); + constant OpCode_Mult : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(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_Lshiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(42, 6)); + constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(43, 6)); + constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(44, 6)); + constant OpCode_Call : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(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_Eq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(46, 6)); + constant OpCode_Neq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(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_Sub : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(49, 6)); + constant OpCode_Loadb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(51, 6)); + constant OpCode_Storeb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(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_Eqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(55, 6)); + constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(56, 6)); + constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(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_Pushspadd : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(61, 6)); + constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(62, 6)); + constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(63, 6)); -- cgit v1.1 From c641936739878f3c47e248b82a5f318103fd72f2 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 30 Apr 2008 18:11:46 +0000 Subject: wip to fix some synthesizing problems w/Synopsis --- zpu/hdl/zpu4/src/zpu_core_small_wip.vhd | 957 ++++++++++++++++++++++++++++++++ 1 file changed, 957 insertions(+) create mode 100644 zpu/hdl/zpu4/src/zpu_core_small_wip.vhd diff --git a/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd b/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd new file mode 100644 index 0000000..60ad070 --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd @@ -0,0 +1,957 @@ +-- Company: ZPU3 + +-- Engineer: ï¿œyvind Harboe + + + +library IEEE; + +use IEEE.STD_LOGIC_1164.ALL; + +use ieee.numeric_std.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 : unsigned(maxAddrBit downto minAddrBit); + +signal memAWrite : unsigned(wordSize-1 downto 0); + +signal memARead : unsigned(wordSize-1 downto 0); + +signal memBWriteEnable : std_logic; + +signal memBAddr : unsigned(maxAddrBit downto minAddrBit); + +signal memBWrite : unsigned(wordSize-1 downto 0); + +signal memBRead : unsigned(wordSize-1 downto 0); + + + +signal pc : unsigned(maxAddrBit downto 0); + +signal sp : unsigned(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; + + + +subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto + +minAddrBit; + +signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); + +signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); + +signal memARead_stdlogic : std_logic_vector(memARead'range); + +signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); + +signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); + +signal memBRead_stdlogic : std_logic_vector(memBRead'range); + + + +-- debug + +subtype index is integer range 0 to 31; + +signal tOpcode_sel : index; + + + + + +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; + + + + -- not used in this design + + mem_writeMask <= (others => '1'); + + + + memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); + + memAWrite_stdlogic <= std_logic_vector(memAWrite); + + memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); + + memBWrite_stdlogic <= std_logic_vector(memBWrite); + + memory: dualport_ram port map ( + + clk => clk, + + memAWriteEnable => memAWriteEnable, + + memAAddr => memAAddr_stdlogic, + + memAWrite => memAWrite_stdlogic, + + memARead => memARead_stdlogic, + + memBWriteEnable => memBWriteEnable, + + memBAddr => memBAddr_stdlogic, + + memBWrite => memBWrite_stdlogic, + + memBRead => memBRead_stdlogic + + ); + + memARead <= unsigned(memARead_stdlogic); + + memBRead <= unsigned(memBRead_stdlogic); + + + +tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); + + + + decodeControl: + + process(memBRead, pc,tOpcode_sel) + + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + + begin + + -- not worked with synopsys + + -- tOpcode := + +std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 + +downto 0))+1)*8-1 downto (wordBytes-1-to_integer(pc(minAddrBit-1 + +downto 0)))*8)); + + case (tOpcode_sel) is + + when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); + + when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); + + when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); + + when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); + + when others => tOpcode := std_logic_vector(memBRead(7 + +downto 0)); + + end case; + + 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 : unsigned(4 downto 0); + + begin + + if areset = '1' then + + state <= State_Resync; + + break <= '0'; + + sp <= unsigned(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'); + + -- avoid Latch in synopsys + + -- 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 <= std_logic_vector(memARead(maxAddrBitIncIO + +downto 0)); + + mem_write <= std_logic_vector(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) <= std_logic_vector(pc); + + trace_opcode <= opcode; + + trace_sp <= (others => '0'); + + trace_sp(maxAddrBit downto minAddrBit) <= + +std_logic_vector(sp); + + trace_topOfStack <= std_logic_vector(memARead); + + trace_topOfStackB <= std_logic_vector(memBRead); + + + + -- during the next cycle we'll be reading the next + +opcode + + spOffset(4):=not opcode(4); + + spOffset(3 downto 0) := unsigned(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) <= + +unsigned(opcode(6 downto 0)); + + else + + memAAddr <= sp; + + memAWrite(wordSize-1 downto 7) <= + +memARead(wordSize-8 downto 0); + + memAWrite(6 downto 0) <= + +unsigned(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) <= unsigned(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 <= + +std_logic_vector(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 <= unsigned(mem_read); + + end if; + + when State_WriteIO => + + sp <= sp + 1; + + out_mem_writeEnable <= '1'; + + out_mem_addr <= + +std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + + mem_write <= std_logic_vector(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; -- cgit v1.1 From 7a1fb6dbe419749a2acf4ce583d7732480264ba6 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 30 Apr 2008 18:12:06 +0000 Subject: wip to fix some synthesizing problems w/Synopsis --- zpu/hdl/zpu4/src/zpu_core_small_wip.vhd | 1155 +++++++++---------------------- 1 file changed, 338 insertions(+), 817 deletions(-) diff --git a/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd b/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd index 60ad070..63e02e4 100644 --- a/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd +++ b/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd @@ -1,260 +1,131 @@ -- Company: ZPU3 - --- Engineer: ï¿œyvind Harboe - - +-- Engineer: Øyvind Harboe library IEEE; - use IEEE.STD_LOGIC_1164.ALL; - use ieee.numeric_std.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 - - ); - - - + 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 readIO : std_logic; signal memAWriteEnable : std_logic; - signal memAAddr : unsigned(maxAddrBit downto minAddrBit); - signal memAWrite : unsigned(wordSize-1 downto 0); - signal memARead : unsigned(wordSize-1 downto 0); - signal memBWriteEnable : std_logic; - signal memBAddr : unsigned(maxAddrBit downto minAddrBit); - signal memBWrite : unsigned(wordSize-1 downto 0); - signal memBRead : unsigned(wordSize-1 downto 0); -signal pc : unsigned(maxAddrBit downto 0); - -signal sp : unsigned(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 pc : unsigned(maxAddrBit downto 0); +signal sp : unsigned(maxAddrBit downto minAddrBit); -signal begin_inst : std_logic; +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); +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_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; - - -subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto - -minAddrBit; - +subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); - signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); - signal memARead_stdlogic : std_logic_vector(memARead'range); - signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); - signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); - signal memBRead_stdlogic : std_logic_vector(memBRead'range); - - --- debug - -subtype index is integer range 0 to 31; +subtype index is integer range 0 to 3; signal tOpcode_sel : index; @@ -263,34 +134,20 @@ signal tOpcode_sel : index; begin - - traceFileGenerate: - + 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') - + 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; + end generate; @@ -300,64 +157,36 @@ begin - memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); - - memAWrite_stdlogic <= std_logic_vector(memAWrite); - - memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); - - memBWrite_stdlogic <= std_logic_vector(memBWrite); - - memory: dualport_ram port map ( - - clk => clk, - - memAWriteEnable => memAWriteEnable, - - memAAddr => memAAddr_stdlogic, - - memAWrite => memAWrite_stdlogic, - - memARead => memARead_stdlogic, - - memBWriteEnable => memBWriteEnable, - - memBAddr => memBAddr_stdlogic, - - memBWrite => memBWrite_stdlogic, - - memBRead => memBRead_stdlogic - + memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); + memAWrite_stdlogic <= std_logic_vector(memAWrite); + memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); + memBWrite_stdlogic <= std_logic_vector(memBWrite); + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr_stdlogic, + memAWrite => memAWrite_stdlogic, + memARead => memARead_stdlogic, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr_stdlogic, + memBWrite => memBWrite_stdlogic, + memBRead => memBRead_stdlogic ); - - memARead <= unsigned(memARead_stdlogic); - - memBRead <= unsigned(memBRead_stdlogic); - - - -tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); - + memARead <= unsigned(memARead_stdlogic); + memBRead <= unsigned(memBRead_stdlogic); - decodeControl: - process(memBRead, pc,tOpcode_sel) + tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - begin - -- not worked with synopsys - - -- tOpcode := - -std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 - -downto 0))+1)*8-1 downto (wordBytes-1-to_integer(pc(minAddrBit-1 - -downto 0)))*8)); + decodeControl: + process(memBRead, pc,tOpcode_sel) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + begin + -- simplify opcode selection a bit so it passes more synthesizers case (tOpcode_sel) is when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); @@ -368,589 +197,281 @@ downto 0)))*8)); when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); - when others => tOpcode := std_logic_vector(memBRead(7 - -downto 0)); - + when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); end case; - 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 : unsigned(4 downto 0); - - begin - - if areset = '1' then - - state <= State_Resync; - - break <= '0'; - - sp <= unsigned(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'); - - -- avoid Latch in synopsys - - -- 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 <= std_logic_vector(memARead(maxAddrBitIncIO - -downto 0)); - - mem_write <= std_logic_vector(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) <= std_logic_vector(pc); - - trace_opcode <= opcode; - - trace_sp <= (others => '0'); - - trace_sp(maxAddrBit downto minAddrBit) <= - -std_logic_vector(sp); - - trace_topOfStack <= std_logic_vector(memARead); - - trace_topOfStackB <= std_logic_vector(memBRead); - - - - -- during the next cycle we'll be reading the next - -opcode - - spOffset(4):=not opcode(4); - - spOffset(3 downto 0) := unsigned(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) <= - -unsigned(opcode(6 downto 0)); - - else - - memAAddr <= sp; - - memAWrite(wordSize-1 downto 7) <= - -memARead(wordSize-8 downto 0); - - memAWrite(6 downto 0) <= - -unsigned(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) <= unsigned(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 <= - -std_logic_vector(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 <= unsigned(mem_read); - - end if; - - when State_WriteIO => - - sp <= sp + 1; - - out_mem_writeEnable <= '1'; - - out_mem_addr <= - -std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - - mem_write <= std_logic_vector(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; + 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 : unsigned(4 downto 0); + begin + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= unsigned(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'); + 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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) <= std_logic_vector(pc); + trace_opcode <= opcode; + trace_sp <= (others => '0'); + trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(memARead); + trace_topOfStackB <= std_logic_vector(memBRead); + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0) := unsigned(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) <= unsigned(opcode(6 downto 0)); + else + memAAddr <= sp; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 <= unsigned(mem_read); + end if; + when State_WriteIO => + sp <= sp + 1; + out_mem_writeEnable <= '1'; + out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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; -- cgit v1.1 From 30faee20f811215e6d53ca2434119aa5cd059feb Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 1 May 2008 08:20:02 +0000 Subject: work in progress. --- zpu/hdl/zpu4/src/zpu_core_wip.vhd | 948 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 948 insertions(+) create mode 100644 zpu/hdl/zpu4/src/zpu_core_wip.vhd diff --git a/zpu/hdl/zpu4/src/zpu_core_wip.vhd b/zpu/hdl/zpu4/src/zpu_core_wip.vhd new file mode 100644 index 0000000..882719d --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_core_wip.vhd @@ -0,0 +1,948 @@ + +-- 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; + + + + + +entity zpu_core is + Port ( clk : in std_logic; + areset : in std_logic; + enable : in std_logic; + mem_req : out std_logic; + mem_we : out std_logic; + mem_ack : 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); + mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); + interrupt : in std_logic; + break : out std_logic; + zpu_status : out std_logic_vector(63 downto 0)); +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_Interrupt, +State_InsnFetch +); + +type StateType is +( +State_Idle, -- using first state first on the list out of paranoia +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_Mult6, +State_Mult4, +State_BinaryOpResult +); + + +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 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_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 mem_busy : 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); + +signal out_mem_req : std_logic; + +signal inInterrupt : std_logic; + +-- state machine. + +begin + + zpu_status(maxAddrBitIncIO downto 0) <= trace_pc; + zpu_status(31) <= '1'; + zpu_status(39 downto 32) <= trace_opcode; + zpu_status(40) <= '1' when (state = State_Idle) else '0'; + zpu_status(62) <= '1'; + + 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_addr(maxAddrBitIncIO downto minAddrBit) <= mem_addr; + out_mem_addr(minAddrBit-1 downto 0) <= (others => '0'); + mem_req <= out_mem_req; + + incSp <= sp + 1; + incIncSp <= sp + 2; + decSp <= sp - 1; + + mem_busy <= out_mem_req and not mem_ack; -- '1' when the memory is busy + + 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'; + sp <= spStart(maxAddrBitIncIO downto minAddrBit); + + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + mem_we <= '0'; + multA <= (others => '0'); + multB <= (others => '0'); + mem_writeMask <= (others => '1'); + out_mem_req <= '0'; + mem_addr <= (others => DontCareValue); + mem_write <= (others => DontCareValue); + inInterrupt <= '0'; + 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); + + + 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'; + + -- we terminate the requeset as soon as we get acknowledge + if mem_ack = '1' then + out_mem_req <= '0'; + mem_we <= '0'; + end if; + + if interrupt='0' then + inInterrupt <= '0'; -- no longer in an interrupt + end if; + + 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 mem_busy='0' then + mem_addr <= sp; + out_mem_req <= '1'; + state <= State_Resync2; + end if; + when State_Resync2 => + if mem_busy='0' then + stackA <= mem_read; + mem_addr <= incSp; + out_mem_req <= '1'; + state <= State_Resync3; + end if; + when State_Resync3 => + if mem_busy='0' then + stackB <= mem_read; + mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + state <= State_Decode; + end if; + when State_Decode => + if 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 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 + out_mem_req <= '1'; + mem_we <= '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; + else + insn <= insn; + end if; + when State_StoreSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_StoreSP2; + + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= sp+spOffset; + mem_write <= stackA; + stackA <= stackB; + sp <= incSp; + else + insn <= insn; + end if; + + + when State_LoadSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_LoadSP2; + + sp <= decSp; + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + else + insn <= insn; + end if; + when State_Emulate => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + sp <= decSp; + out_mem_req <= '1'; + mem_we <= '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; + else + insn <= insn; + end if; + when State_Callpcrel => + if 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; + else + insn <= insn; + end if; + when State_Call => + if 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; + else + insn <= insn; + end if; + when State_AddSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_AddSP2; + + out_mem_req <= '1'; + mem_addr <= sp+spOffset; + else + insn <= insn; + end if; + when State_PushSP => + if 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; + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + else + insn <= insn; + end if; + when State_PopPC => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= stackA(maxAddrBitIncIO downto 0); + sp <= incSp; + + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + state <= State_Resync; + else + insn <= insn; + end if; + when State_PopPCRel => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= stackA(maxAddrBitIncIO downto 0) + pc; + sp <= incSp; + + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + state <= State_Resync; + else + insn <= insn; + end if; + when State_Add => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= stackA + stackB; + + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_Sub => + begin_inst <= '1'; + idim_flag <= '0'; + binaryOpResult <= stackB - stackA; + state <= State_BinaryOpResult; + when State_Pop => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + mem_addr <= incIncSp; + out_mem_req <= '1'; + sp <= incSp; + stackA <= stackB; + state <= State_Popped; + else + insn <= insn; + end if; + when State_PopDown => + if mem_busy='0' then + -- PopDown leaves top of stack unchanged + begin_inst <= '1'; + idim_flag <= '0'; + mem_addr <= incIncSp; + out_mem_req <= '1'; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_Or => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= stackA or stackB; + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_And => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + stackA <= stackA and stackB; + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_Eq => + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA=stackB) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + when State_Ulessthan => + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA<=stackB) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + when State_Lessthan => + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (signed(stackA) + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (signed(stackA)<=signed(stackB)) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + when State_Load => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Load2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + else + insn <= insn; + end if; + + when State_Dup => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + sp <= decSp; + stackB <= stackA; + mem_write <= stackB; + mem_addr <= incSp; + out_mem_req <= '1'; + mem_we <= '1'; + else + insn <= insn; + end if; + when State_DupStackB => + if 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; + out_mem_req <= '1'; + mem_we <= '1'; + else + insn <= insn; + end if; + when State_Store => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + mem_write <= stackB; + out_mem_req <= '1'; + mem_we <= '1'; + sp <= incIncSp; + state <= State_Resync; + else + insn <= insn; + end if; + when State_PopSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + mem_write <= stackB; + mem_addr <= incSp; + out_mem_req <= '1'; + mem_we <= '1'; + sp <= stackA(maxAddrBitIncIO downto minAddrBit); + state <= State_Resync; + else + insn <= insn; + 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 mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Loadb2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + else + insn <= insn; + end if; + when State_Storeb => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Storeb2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + else + insn <= insn; + end if; + + when others => +-- sp <= (others => DontCareValue); + report "Illegal instruction" severity failure; + break <= '1'; + end case; + + + when State_StoreSP2 => + if mem_busy='0' then + mem_addr <= incSp; + out_mem_req <= '1'; + state <= State_Popped; + end if; + when State_LoadSP2 => + if mem_busy='0' then + state <= State_LoadSP3; + out_mem_req <= '1'; + mem_addr <= sp+spOffset+1; + end if; + when State_LoadSP3 => + if mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackB <= stackA; + stackA <= mem_read; + end if; + when State_AddSP2 => + if mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackA <= stackA + mem_read; + end if; + when State_Load2 => + if mem_busy='0' then + stackA <= mem_read; + pc <= pc + 1; + state <= State_Execute; + end if; + when State_Loadb2 => + if 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 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) ; + out_mem_req <= '1'; + mem_we <= '1'; + pc <= pc + 1; + sp <= incIncSp; + state <= State_Resync; + end if; + when State_Fetch => + if mem_busy='0' then + if interrupt='1' and inInterrupt='0' and idim_flag='0' then + -- We got an interrupt + inInterrupt <= '1'; + + sp <= decSp; + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + stackA <= (others => DontCareValue); + stackA(maxAddrBitIncIO downto 0) <= pc; + stackB <= stackA; + + pc <= conv_std_logic_vector(32, maxAddrBitIncIo+1); -- interrupt address + + report "ZPU jumped to interrupt!" severity note; + else + mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + state <= State_Decode; + end if; + end if; + when State_Mult2 => + state <= State_Mult3; + when State_Mult3 => + state <= State_Mult4; + when State_Mult4 => + state <= State_Mult5; + when State_Mult5 => + stackA <= multResult3; + state <= State_Mult6; + when State_Mult6 => + if mem_busy='0' then + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + end if; + when State_BinaryOpResult => + if mem_busy='0' then + -- NB!!!! we know that the memory isn't busy at this point!!!! + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + stackA <= binaryOpResult; + state <= State_Popped; + end if; + when State_Popped => + if 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; -- cgit v1.1 From 0d7bc56eab8ff2d28aa9c4721a56b022385e13d9 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 1 May 2008 08:23:39 +0000 Subject: * zpu/hdl/zy1000 - ZPU implementation used on the zy1000 dev kit --- .settings/org.eclipse.core.resources.prefs | 3 + zpu/ChangeLog | 2 + zpu/hdl/zpu4/src/zpu_core_wip.vhd | 948 ----------------------------- zpu/hdl/zy2000/timer.vhd | 137 +++++ zpu/hdl/zy2000/trace.vhd | 84 +++ zpu/hdl/zy2000/txt_util.vhd | 587 ++++++++++++++++++ zpu/hdl/zy2000/zpu_config.vhd | 20 + zpu/hdl/zy2000/zpu_config_fast.vhd | 20 + zpu/hdl/zy2000/zpu_core.vhd | 948 +++++++++++++++++++++++++++++ zpu/hdl/zy2000/zpupkg.vhd | 168 +++++ 10 files changed, 1969 insertions(+), 948 deletions(-) create mode 100644 .settings/org.eclipse.core.resources.prefs delete mode 100644 zpu/hdl/zpu4/src/zpu_core_wip.vhd create mode 100644 zpu/hdl/zy2000/timer.vhd create mode 100644 zpu/hdl/zy2000/trace.vhd create mode 100644 zpu/hdl/zy2000/txt_util.vhd create mode 100644 zpu/hdl/zy2000/zpu_config.vhd create mode 100644 zpu/hdl/zy2000/zpu_config_fast.vhd create mode 100644 zpu/hdl/zy2000/zpu_core.vhd create mode 100644 zpu/hdl/zy2000/zpupkg.vhd diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..3f4041d --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +#Wed Apr 30 20:08:12 CEST 2008 +eclipse.preferences.version=1 +encoding//zpu/hdl/zpu4/src/zpu_core_small_wip.vhd=UTF-8 diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 249ff02..bb48431 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,5 @@ +2008-05-01 Øyvind Harboe + * zpu/hdl/zy1000 - ZPU implementation used on the zy1000 dev kit 2008-04-17 Arnim Läuger * zpu/hdl/example_ghdl/ghdl_import.sh, zpu/hdl/example_ghdl/ghdl_make.sh, zpu/hdl/example_ghdl/ghdl_options.sh, zpu/hdl/example_ghdl/README: GHDL example diff --git a/zpu/hdl/zpu4/src/zpu_core_wip.vhd b/zpu/hdl/zpu4/src/zpu_core_wip.vhd deleted file mode 100644 index 882719d..0000000 --- a/zpu/hdl/zpu4/src/zpu_core_wip.vhd +++ /dev/null @@ -1,948 +0,0 @@ - --- 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; - - - - - -entity zpu_core is - Port ( clk : in std_logic; - areset : in std_logic; - enable : in std_logic; - mem_req : out std_logic; - mem_we : out std_logic; - mem_ack : 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); - mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); - interrupt : in std_logic; - break : out std_logic; - zpu_status : out std_logic_vector(63 downto 0)); -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_Interrupt, -State_InsnFetch -); - -type StateType is -( -State_Idle, -- using first state first on the list out of paranoia -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_Mult6, -State_Mult4, -State_BinaryOpResult -); - - -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 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_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 mem_busy : 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); - -signal out_mem_req : std_logic; - -signal inInterrupt : std_logic; - --- state machine. - -begin - - zpu_status(maxAddrBitIncIO downto 0) <= trace_pc; - zpu_status(31) <= '1'; - zpu_status(39 downto 32) <= trace_opcode; - zpu_status(40) <= '1' when (state = State_Idle) else '0'; - zpu_status(62) <= '1'; - - 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_addr(maxAddrBitIncIO downto minAddrBit) <= mem_addr; - out_mem_addr(minAddrBit-1 downto 0) <= (others => '0'); - mem_req <= out_mem_req; - - incSp <= sp + 1; - incIncSp <= sp + 2; - decSp <= sp - 1; - - mem_busy <= out_mem_req and not mem_ack; -- '1' when the memory is busy - - 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'; - sp <= spStart(maxAddrBitIncIO downto minAddrBit); - - pc <= (others => '0'); - idim_flag <= '0'; - begin_inst <= '0'; - mem_we <= '0'; - multA <= (others => '0'); - multB <= (others => '0'); - mem_writeMask <= (others => '1'); - out_mem_req <= '0'; - mem_addr <= (others => DontCareValue); - mem_write <= (others => DontCareValue); - inInterrupt <= '0'; - 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); - - - 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'; - - -- we terminate the requeset as soon as we get acknowledge - if mem_ack = '1' then - out_mem_req <= '0'; - mem_we <= '0'; - end if; - - if interrupt='0' then - inInterrupt <= '0'; -- no longer in an interrupt - end if; - - 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 mem_busy='0' then - mem_addr <= sp; - out_mem_req <= '1'; - state <= State_Resync2; - end if; - when State_Resync2 => - if mem_busy='0' then - stackA <= mem_read; - mem_addr <= incSp; - out_mem_req <= '1'; - state <= State_Resync3; - end if; - when State_Resync3 => - if mem_busy='0' then - stackB <= mem_read; - mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); - out_mem_req <= '1'; - state <= State_Decode; - end if; - when State_Decode => - if 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 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 - out_mem_req <= '1'; - mem_we <= '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; - else - insn <= insn; - end if; - when State_StoreSP => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - state <= State_StoreSP2; - - out_mem_req <= '1'; - mem_we <= '1'; - mem_addr <= sp+spOffset; - mem_write <= stackA; - stackA <= stackB; - sp <= incSp; - else - insn <= insn; - end if; - - - when State_LoadSP => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - state <= State_LoadSP2; - - sp <= decSp; - out_mem_req <= '1'; - mem_we <= '1'; - mem_addr <= incSp; - mem_write <= stackB; - else - insn <= insn; - end if; - when State_Emulate => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - sp <= decSp; - out_mem_req <= '1'; - mem_we <= '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; - else - insn <= insn; - end if; - when State_Callpcrel => - if 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; - else - insn <= insn; - end if; - when State_Call => - if 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; - else - insn <= insn; - end if; - when State_AddSP => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - state <= State_AddSP2; - - out_mem_req <= '1'; - mem_addr <= sp+spOffset; - else - insn <= insn; - end if; - when State_PushSP => - if 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; - out_mem_req <= '1'; - mem_we <= '1'; - mem_addr <= incSp; - mem_write <= stackB; - else - insn <= insn; - end if; - when State_PopPC => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - pc <= stackA(maxAddrBitIncIO downto 0); - sp <= incSp; - - out_mem_req <= '1'; - mem_we <= '1'; - mem_addr <= incSp; - mem_write <= stackB; - state <= State_Resync; - else - insn <= insn; - end if; - when State_PopPCRel => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - pc <= stackA(maxAddrBitIncIO downto 0) + pc; - sp <= incSp; - - out_mem_req <= '1'; - mem_we <= '1'; - mem_addr <= incSp; - mem_write <= stackB; - state <= State_Resync; - else - insn <= insn; - end if; - when State_Add => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - stackA <= stackA + stackB; - - out_mem_req <= '1'; - mem_addr <= incIncSp; - sp <= incSp; - state <= State_Popped; - else - insn <= insn; - end if; - when State_Sub => - begin_inst <= '1'; - idim_flag <= '0'; - binaryOpResult <= stackB - stackA; - state <= State_BinaryOpResult; - when State_Pop => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - mem_addr <= incIncSp; - out_mem_req <= '1'; - sp <= incSp; - stackA <= stackB; - state <= State_Popped; - else - insn <= insn; - end if; - when State_PopDown => - if mem_busy='0' then - -- PopDown leaves top of stack unchanged - begin_inst <= '1'; - idim_flag <= '0'; - mem_addr <= incIncSp; - out_mem_req <= '1'; - sp <= incSp; - state <= State_Popped; - else - insn <= insn; - end if; - when State_Or => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - stackA <= stackA or stackB; - out_mem_req <= '1'; - mem_addr <= incIncSp; - sp <= incSp; - state <= State_Popped; - else - insn <= insn; - end if; - when State_And => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - - stackA <= stackA and stackB; - out_mem_req <= '1'; - mem_addr <= incIncSp; - sp <= incSp; - state <= State_Popped; - else - insn <= insn; - end if; - when State_Eq => - begin_inst <= '1'; - idim_flag <= '0'; - - binaryOpResult <= (others => '0'); - if (stackA=stackB) then - binaryOpResult(0) <= '1'; - end if; - state <= State_BinaryOpResult; - when State_Ulessthan => - begin_inst <= '1'; - idim_flag <= '0'; - - binaryOpResult <= (others => '0'); - if (stackA - begin_inst <= '1'; - idim_flag <= '0'; - - binaryOpResult <= (others => '0'); - if (stackA<=stackB) then - binaryOpResult(0) <= '1'; - end if; - state <= State_BinaryOpResult; - when State_Lessthan => - begin_inst <= '1'; - idim_flag <= '0'; - - binaryOpResult <= (others => '0'); - if (signed(stackA) - begin_inst <= '1'; - idim_flag <= '0'; - - binaryOpResult <= (others => '0'); - if (signed(stackA)<=signed(stackB)) then - binaryOpResult(0) <= '1'; - end if; - state <= State_BinaryOpResult; - when State_Load => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - state <= State_Load2; - - mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); - out_mem_req <= '1'; - else - insn <= insn; - end if; - - when State_Dup => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - pc <= pc + 1; - - sp <= decSp; - stackB <= stackA; - mem_write <= stackB; - mem_addr <= incSp; - out_mem_req <= '1'; - mem_we <= '1'; - else - insn <= insn; - end if; - when State_DupStackB => - if 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; - out_mem_req <= '1'; - mem_we <= '1'; - else - insn <= insn; - end if; - when State_Store => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - pc <= pc + 1; - mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); - mem_write <= stackB; - out_mem_req <= '1'; - mem_we <= '1'; - sp <= incIncSp; - state <= State_Resync; - else - insn <= insn; - end if; - when State_PopSP => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - pc <= pc + 1; - - mem_write <= stackB; - mem_addr <= incSp; - out_mem_req <= '1'; - mem_we <= '1'; - sp <= stackA(maxAddrBitIncIO downto minAddrBit); - state <= State_Resync; - else - insn <= insn; - 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 mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - state <= State_Loadb2; - - mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); - out_mem_req <= '1'; - else - insn <= insn; - end if; - when State_Storeb => - if mem_busy='0' then - begin_inst <= '1'; - idim_flag <= '0'; - state <= State_Storeb2; - - mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); - out_mem_req <= '1'; - else - insn <= insn; - end if; - - when others => --- sp <= (others => DontCareValue); - report "Illegal instruction" severity failure; - break <= '1'; - end case; - - - when State_StoreSP2 => - if mem_busy='0' then - mem_addr <= incSp; - out_mem_req <= '1'; - state <= State_Popped; - end if; - when State_LoadSP2 => - if mem_busy='0' then - state <= State_LoadSP3; - out_mem_req <= '1'; - mem_addr <= sp+spOffset+1; - end if; - when State_LoadSP3 => - if mem_busy='0' then - pc <= pc + 1; - state <= State_Execute; - stackB <= stackA; - stackA <= mem_read; - end if; - when State_AddSP2 => - if mem_busy='0' then - pc <= pc + 1; - state <= State_Execute; - stackA <= stackA + mem_read; - end if; - when State_Load2 => - if mem_busy='0' then - stackA <= mem_read; - pc <= pc + 1; - state <= State_Execute; - end if; - when State_Loadb2 => - if 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 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) ; - out_mem_req <= '1'; - mem_we <= '1'; - pc <= pc + 1; - sp <= incIncSp; - state <= State_Resync; - end if; - when State_Fetch => - if mem_busy='0' then - if interrupt='1' and inInterrupt='0' and idim_flag='0' then - -- We got an interrupt - inInterrupt <= '1'; - - sp <= decSp; - out_mem_req <= '1'; - mem_we <= '1'; - mem_addr <= incSp; - mem_write <= stackB; - stackA <= (others => DontCareValue); - stackA(maxAddrBitIncIO downto 0) <= pc; - stackB <= stackA; - - pc <= conv_std_logic_vector(32, maxAddrBitIncIo+1); -- interrupt address - - report "ZPU jumped to interrupt!" severity note; - else - mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); - out_mem_req <= '1'; - state <= State_Decode; - end if; - end if; - when State_Mult2 => - state <= State_Mult3; - when State_Mult3 => - state <= State_Mult4; - when State_Mult4 => - state <= State_Mult5; - when State_Mult5 => - stackA <= multResult3; - state <= State_Mult6; - when State_Mult6 => - if mem_busy='0' then - out_mem_req <= '1'; - mem_addr <= incIncSp; - sp <= incSp; - state <= State_Popped; - end if; - when State_BinaryOpResult => - if mem_busy='0' then - -- NB!!!! we know that the memory isn't busy at this point!!!! - out_mem_req <= '1'; - mem_addr <= incIncSp; - sp <= incSp; - stackA <= binaryOpResult; - state <= State_Popped; - end if; - when State_Popped => - if 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/zy2000/timer.vhd b/zpu/hdl/zy2000/timer.vhd new file mode 100644 index 0000000..bff82f2 --- /dev/null +++ b/zpu/hdl/zy2000/timer.vhd @@ -0,0 +1,137 @@ +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; + sample : in std_logic; + reset : in std_logic; + counter : out std_logic_vector(63 downto 0)); +end timer; + + +architecture behave of timer is + +signal c : std_logic_vector(1 to 7); + +signal cnt : std_logic_vector(63 downto 0); +signal cnt_smp : std_logic_vector(63 downto 0); + +begin + + counter <= cnt_smp; + + process(clk, areset) -- Carry generation + begin + if areset = '1' then + c <= "0000000"; + elsif (clk'event and clk = '1') then + if reset = '1' then + c <= "0000000"; + else + if cnt(7 downto 0) = "11111110" then + c(1) <= '1'; + else + c(1) <= '0'; + end if; + if cnt(15 downto 8) = "11111111" then + c(2) <= '1'; + else + c(2) <= '0'; + end if; + if cnt(23 downto 16) = "11111111" and c(2) = '1' then + c(3) <= '1'; + else + c(3) <= '0'; + end if; + if cnt(31 downto 24) = "11111111" and c(3) = '1' then + c(4) <= '1'; + else + c(4) <= '0'; + end if; + if cnt(39 downto 32) = "11111111" and c(4) = '1' then + c(5) <= '1'; + else + c(5) <= '0'; + end if; + if cnt(47 downto 40) = "11111111" and c(5) = '1' then + c(6) <= '1'; + else + c(6) <= '0'; + end if; + if cnt(55 downto 48) = "11111111" and c(6) = '1' then + c(7) <= '1'; + else + c(7) <= '0'; + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt <= (others=>'0'); + else + cnt(7 downto 0) <= cnt(7 downto 0) + '1'; + if c(1) = '1' then + cnt(15 downto 8) <= cnt(15 downto 8) + '1'; + else + cnt(15 downto 8) <= cnt(15 downto 8); + end if; + if c(2) = '1' and c(1) = '1' then + cnt(23 downto 16) <= cnt(23 downto 16) + '1'; + else + cnt(23 downto 16) <= cnt(23 downto 16); + end if; + if c(3) = '1' and c(1) = '1' then + cnt(31 downto 24) <= cnt(31 downto 24) + '1'; + else + cnt(31 downto 24) <= cnt(31 downto 24); + end if; + if c(4) = '1' and c(1) = '1' then + cnt(39 downto 32) <= cnt(39 downto 32) + '1'; + else + cnt(39 downto 32) <= cnt(39 downto 32); + end if; + if c(5) = '1' and c(1) = '1' then + cnt(47 downto 40) <= cnt(47 downto 40) + '1'; + else + cnt(47 downto 40) <= cnt(47 downto 40); + end if; + if c(6) = '1' and c(1) = '1' then + cnt(55 downto 48) <= cnt(55 downto 48) + '1'; + else + cnt(55 downto 48) <= cnt(55 downto 48); + end if; + if c(7) = '1' and c(1) = '1' then + cnt(63 downto 56) <= cnt(63 downto 56) + '1'; + else + cnt(63 downto 56) <= cnt(63 downto 56); + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt_smp <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt_smp <= (others=>'0'); + elsif sample = '1' then + cnt_smp <= cnt; + else + cnt_smp <= cnt_smp; + end if; + end if; + end process; + +end behave; + diff --git a/zpu/hdl/zy2000/trace.vhd b/zpu/hdl/zy2000/trace.vhd new file mode 100644 index 0000000..bc5279f --- /dev/null +++ b/zpu/hdl/zy2000/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/zy2000/txt_util.vhd b/zpu/hdl/zy2000/txt_util.vhd new file mode 100644 index 0000000..d3bf01a --- /dev/null +++ b/zpu/hdl/zy2000/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/zy2000/zpu_config.vhd b/zpu/hdl/zy2000/zpu_config.vhd new file mode 100644 index 0000000..61949c5 --- /dev/null +++ b/zpu/hdl/zy2000/zpu_config.vhd @@ -0,0 +1,20 @@ +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 := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 27; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; + +end zpu_config; diff --git a/zpu/hdl/zy2000/zpu_config_fast.vhd b/zpu/hdl/zy2000/zpu_config_fast.vhd new file mode 100644 index 0000000..61949c5 --- /dev/null +++ b/zpu/hdl/zy2000/zpu_config_fast.vhd @@ -0,0 +1,20 @@ +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 := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 27; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; + +end zpu_config; diff --git a/zpu/hdl/zy2000/zpu_core.vhd b/zpu/hdl/zy2000/zpu_core.vhd new file mode 100644 index 0000000..2450f14 --- /dev/null +++ b/zpu/hdl/zy2000/zpu_core.vhd @@ -0,0 +1,948 @@ + +-- 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; + + + + + +entity zpu_core is + Port ( clk : in std_logic; + areset : in std_logic; + enable : in std_logic; + mem_req : out std_logic; + mem_we : out std_logic; + mem_ack : 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); + mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); + interrupt : in std_logic; + break : out std_logic; + zpu_status : out std_logic_vector(63 downto 0)); +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_Interrupt, +State_InsnFetch +); + +type StateType is +( +State_Idle, -- using first state first on the list out of paranoia +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_Mult6, +State_Mult4, +State_BinaryOpResult +); + + +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 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_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 mem_busy : 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); + +signal out_mem_req : std_logic; + +signal inInterrupt : std_logic; + +-- state machine. + +begin + + zpu_status(maxAddrBitIncIO downto 0) <= trace_pc; + zpu_status(31) <= '1'; + zpu_status(39 downto 32) <= trace_opcode; + zpu_status(40) <= '1' when (state = State_Idle) else '0'; + zpu_status(62) <= '1'; + + 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_addr(maxAddrBitIncIO downto minAddrBit) <= mem_addr; + out_mem_addr(minAddrBit-1 downto 0) <= (others => '0'); + mem_req <= out_mem_req; + + incSp <= sp + 1; + incIncSp <= sp + 2; + decSp <= sp - 1; + + mem_busy <= out_mem_req and not mem_ack; -- '1' when the memory is busy + + 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'; + sp <= spStart(maxAddrBitIncIO downto minAddrBit); + + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + mem_we <= '0'; + multA <= (others => '0'); + multB <= (others => '0'); + mem_writeMask <= (others => '1'); + out_mem_req <= '0'; + mem_addr <= (others => DontCareValue); + mem_write <= (others => DontCareValue); + inInterrupt <= '0'; + 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); + + + 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'; + + -- we terminate the requeset as soon as we get acknowledge + if mem_ack = '1' then + out_mem_req <= '0'; + mem_we <= '0'; + end if; + + if interrupt='0' then + inInterrupt <= '0'; -- no longer in an interrupt + end if; + + 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 mem_busy='0' then + mem_addr <= sp; + out_mem_req <= '1'; + state <= State_Resync2; + end if; + when State_Resync2 => + if mem_busy='0' then + stackA <= mem_read; + mem_addr <= incSp; + out_mem_req <= '1'; + state <= State_Resync3; + end if; + when State_Resync3 => + if mem_busy='0' then + stackB <= mem_read; + mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + state <= State_Decode; + end if; + when State_Decode => + if 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 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 + out_mem_req <= '1'; + mem_we <= '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; + else + insn <= insn; + end if; + when State_StoreSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_StoreSP2; + + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= sp+spOffset; + mem_write <= stackA; + stackA <= stackB; + sp <= incSp; + else + insn <= insn; + end if; + + + when State_LoadSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_LoadSP2; + + sp <= decSp; + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + else + insn <= insn; + end if; + when State_Emulate => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + sp <= decSp; + out_mem_req <= '1'; + mem_we <= '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; + else + insn <= insn; + end if; + when State_Callpcrel => + if 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; + else + insn <= insn; + end if; + when State_Call => + if 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; + else + insn <= insn; + end if; + when State_AddSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_AddSP2; + + out_mem_req <= '1'; + mem_addr <= sp+spOffset; + else + insn <= insn; + end if; + when State_PushSP => + if 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; + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + else + insn <= insn; + end if; + when State_PopPC => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= stackA(maxAddrBitIncIO downto 0); + sp <= incSp; + + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + state <= State_Resync; + else + insn <= insn; + end if; + when State_PopPCRel => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= stackA(maxAddrBitIncIO downto 0) + pc; + sp <= incSp; + + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + state <= State_Resync; + else + insn <= insn; + end if; + when State_Add => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= stackA + stackB; + + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_Sub => + begin_inst <= '1'; + idim_flag <= '0'; + binaryOpResult <= stackB - stackA; + state <= State_BinaryOpResult; + when State_Pop => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + mem_addr <= incIncSp; + out_mem_req <= '1'; + sp <= incSp; + stackA <= stackB; + state <= State_Popped; + else + insn <= insn; + end if; + when State_PopDown => + if mem_busy='0' then + -- PopDown leaves top of stack unchanged + begin_inst <= '1'; + idim_flag <= '0'; + mem_addr <= incIncSp; + out_mem_req <= '1'; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_Or => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= stackA or stackB; + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_And => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + stackA <= stackA and stackB; + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + else + insn <= insn; + end if; + when State_Eq => + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA=stackB) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + when State_Ulessthan => + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA<=stackB) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + when State_Lessthan => + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (signed(stackA) + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (signed(stackA)<=signed(stackB)) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + when State_Load => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Load2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + else + insn <= insn; + end if; + + when State_Dup => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + sp <= decSp; + stackB <= stackA; + mem_write <= stackB; + mem_addr <= incSp; + out_mem_req <= '1'; + mem_we <= '1'; + else + insn <= insn; + end if; + when State_DupStackB => + if 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; + out_mem_req <= '1'; + mem_we <= '1'; + else + insn <= insn; + end if; + when State_Store => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + mem_write <= stackB; + out_mem_req <= '1'; + mem_we <= '1'; + sp <= incIncSp; + state <= State_Resync; + else + insn <= insn; + end if; + when State_PopSP => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + mem_write <= stackB; + mem_addr <= incSp; + out_mem_req <= '1'; + mem_we <= '1'; + sp <= stackA(maxAddrBitIncIO downto minAddrBit); + state <= State_Resync; + else + insn <= insn; + 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 mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Loadb2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + else + insn <= insn; + end if; + when State_Storeb => + if mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Storeb2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + else + insn <= insn; + end if; + + when others => +-- sp <= (others => DontCareValue); + report "Illegal instruction" severity failure; + break <= '1'; + end case; + + + when State_StoreSP2 => + if mem_busy='0' then + mem_addr <= incSp; + out_mem_req <= '1'; + state <= State_Popped; + end if; + when State_LoadSP2 => + if mem_busy='0' then + state <= State_LoadSP3; + out_mem_req <= '1'; + mem_addr <= sp+spOffset+1; + end if; + when State_LoadSP3 => + if mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackB <= stackA; + stackA <= mem_read; + end if; + when State_AddSP2 => + if mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackA <= stackA + mem_read; + end if; + when State_Load2 => + if mem_busy='0' then + stackA <= mem_read; + pc <= pc + 1; + state <= State_Execute; + end if; + when State_Loadb2 => + if 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 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) ; + out_mem_req <= '1'; + mem_we <= '1'; + pc <= pc + 1; + sp <= incIncSp; + state <= State_Resync; + end if; + when State_Fetch => + if mem_busy='0' then + if interrupt='1' and inInterrupt='0' and idim_flag='0' then + -- We got an interrupt + inInterrupt <= '1'; + + sp <= decSp; + out_mem_req <= '1'; + mem_we <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + stackA <= (others => DontCareValue); + stackA(maxAddrBitIncIO downto 0) <= pc; + stackB <= stackA; + + pc <= conv_std_logic_vector(32, maxAddrBitIncIo+1); -- interrupt address + + report "ZPU jumped to interrupt!" severity note; + else + mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); + out_mem_req <= '1'; + state <= State_Decode; + end if; + end if; + when State_Mult2 => + state <= State_Mult3; + when State_Mult3 => + state <= State_Mult4; + when State_Mult4 => + state <= State_Mult5; + when State_Mult5 => + stackA <= multResult3; + state <= State_Mult6; + when State_Mult6 => + if mem_busy='0' then + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + end if; + when State_BinaryOpResult => + if mem_busy='0' then + -- NB!!!! we know that the memory isn't busy at this point!!!! + out_mem_req <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + stackA <= binaryOpResult; + state <= State_Popped; + end if; + when State_Popped => + if 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/zy2000/zpupkg.vhd b/zpu/hdl/zy2000/zpupkg.vhd new file mode 100644 index 0000000..1a01563 --- /dev/null +++ b/zpu/hdl/zy2000/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(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 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; + mem_req : out std_logic; + mem_we : out std_logic; + mem_ack : 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); + mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); + interrupt : in std_logic; + break : out std_logic; + zpu_status : out std_logic_vector(63 downto 0)); + end component; + + + + component timer is + port( + clk : in std_logic; + areset : in std_logic; + sample : in std_logic; + reset : in std_logic; + counter : out std_logic_vector(63 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; -- cgit v1.1 From 47fd50b7c9654cf750e6c2024c9169a9eab2d6ad Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 1 May 2008 08:44:59 +0000 Subject: wip --- zpu/hdl/zpu4/src/zpu_core_small_wip.vhd | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd b/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd index 63e02e4..8d87804 100644 --- a/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd +++ b/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd @@ -81,7 +81,9 @@ State_FetchNext, State_AddSP, State_ReadIODone, State_Decode, -State_Resync +State_Resync, +State_Interrupt + ); type DecodedOpcodeType is @@ -130,6 +132,7 @@ subtype index is integer range 0 to 3; signal tOpcode_sel : index; +signal inInterrupt : std_logic; @@ -262,6 +265,7 @@ begin out_mem_readEnable <= '0'; memAWrite <= (others => '0'); memBWrite <= (others => '0'); + inInterrupt <= '0'; elsif (clk'event and clk = '1') then memAWriteEnable <= '0'; memBWriteEnable <= '0'; @@ -284,6 +288,9 @@ begin decodedOpcode <= sampledDecodedOpcode; opcode <= sampledOpcode; + if interrupt='0' then + inInterrupt <= '0'; -- no longer in an interrupt + end if; case state is when State_Execute => @@ -309,6 +316,14 @@ begin idim_flag <= '0'; case decodedOpcode is + when Decoded_Interrupt => + sp <= sp - 1; + memAAddr <= sp - 1; + memAWriteEnable <= '1'; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBitIncIO downto 0) <= pc; + pc <= conv_std_logic_vector(32, maxAddrBitIncIo+1); -- interrupt address + report "ZPU jumped to interrupt!" severity note; when Decoded_Im => idim_flag <= '1'; memAWriteEnable <= '1'; @@ -436,6 +451,10 @@ begin memBAddr <= sp + 1; state <= State_Decode; when State_Decode => + if interrupt='1' and inInterrupt='0' and idim_flag='0' then + -- We got an interrupt, execute interrupt instead of next instruction + decodedOpcode <= Decoded_Interrupt; + end if; -- during the State_Execute cycle we'll be fetching SP+1 memAAddr <= sp; memBAddr <= sp + 1; -- cgit v1.1 From ed14271c9743490ebc4947ba7904adaa0d16e279 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 1 May 2008 18:49:10 +0000 Subject: wip for interrupts --- zpu/hdl/zpu4/test/interrupt/build.sh | 4 ++++ zpu/hdl/zpu4/test/interrupt/int.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 zpu/hdl/zpu4/test/interrupt/build.sh create mode 100644 zpu/hdl/zpu4/test/interrupt/int.c diff --git a/zpu/hdl/zpu4/test/interrupt/build.sh b/zpu/hdl/zpu4/test/interrupt/build.sh new file mode 100644 index 0000000..3d617e9 --- /dev/null +++ b/zpu/hdl/zpu4/test/interrupt/build.sh @@ -0,0 +1,4 @@ +zpu-elf-gcc -O3 -phi `pwd`/int.c -o int.elf -Wl,--relax -Wl,--gc-sections -g +zpu-elf-objdump --disassemble-all >int.dis int.elf +zpu-elf-objcopy -O binary int.elf int.bin +java -classpath ../../../../sw/simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam int.bin >int.ram diff --git a/zpu/hdl/zpu4/test/interrupt/int.c b/zpu/hdl/zpu4/test/interrupt/int.c new file mode 100644 index 0000000..2be6483 --- /dev/null +++ b/zpu/hdl/zpu4/test/interrupt/int.c @@ -0,0 +1,32 @@ +/* + * Shows usage of interrupts. Goes along with zpu_core_small_wip.vhd. + */ +#include + + +int counter; + +/* Example of single, fixed interval non-maskable, nested interrupt */ +void _zpu_interrupt(void) +{ + /* interrupts are enabled so we need to finish up quickly, + * lest we will get infinite recursion!*/ + counter++; +} + +int main(int argc, char **argv) +{ + int t; + t=counter; + for (;;) + { + if (t==counter) + { + puts("No interrupt\n"); + } else + { + puts("Got interrupt\n"); + } + } + +} -- cgit v1.1 From 1362bd4ace3ce962ed744a153e5f969154bb6682 Mon Sep 17 00:00:00 2001 From: oharboe Date: Sun, 4 May 2008 19:29:07 +0000 Subject: * Make code synthesize on Synopsis zpu/hdl/zpu4/src/zpu_core_small.vhd zpu/hdl/zpu4/src/io.vhd --- zpu/hdl/example/sim_small_fpga_top.vhd | 177 ++++++++++++++++++++++++++++++++ zpu/hdl/example/simzpu_small.do | 2 +- zpu/hdl/zpu4/src/io.vhd | 15 +-- zpu/hdl/zpu4/src/sim_small_fpga_top.vhd | 177 -------------------------------- zpu/hdl/zpu4/src/zpu_core_small.vhd | 25 ++++- zpu/hdl/zpu4/test/interrupt/int.c | 5 +- 6 files changed, 212 insertions(+), 189 deletions(-) create mode 100644 zpu/hdl/example/sim_small_fpga_top.vhd delete mode 100644 zpu/hdl/zpu4/src/sim_small_fpga_top.vhd diff --git a/zpu/hdl/example/sim_small_fpga_top.vhd b/zpu/hdl/example/sim_small_fpga_top.vhd new file mode 100644 index 0000000..5c05881 --- /dev/null +++ b/zpu/hdl/example/sim_small_fpga_top.vhd @@ -0,0 +1,177 @@ +-------------------------------------------------------------------------------- +-- 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; + +---- 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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + 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; + + + + -- 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 <= 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/example/simzpu_small.do b/zpu/hdl/example/simzpu_small.do index 1f8f358..095069a 100644 --- a/zpu/hdl/example/simzpu_small.do +++ b/zpu/hdl/example/simzpu_small.do @@ -10,7 +10,7 @@ vlib work vcom -93 -explicit zpu_config.vhd vcom -93 -explicit ../zpu4/src/zpupkg.vhd vcom -93 -explicit ../zpu4/src/txt_util.vhd -vcom -93 -explicit ../zpu4/src/sim_small_fpga_top.vhd +vcom -93 -explicit sim_small_fpga_top.vhd vcom -93 -explicit ../zpu4/src/zpu_core_small.vhd vcom -93 -explicit helloworld.vhd vcom -93 -explicit ../zpu4/src/timer.vhd diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd index 7a2601f..9e65929 100644 --- a/zpu/hdl/zpu4/src/io.vhd +++ b/zpu/hdl/zpu4/src/io.vhd @@ -59,8 +59,9 @@ begin elsif (clk'event and clk = '1') then -- timer_we <= '0'; if writeEnable = '1' then - -- external interface - if addr=x"2028003" then + -- external interface (fixed address) + -- extend compare to avoid waring messages + if ("000" & addr)=x"2028003" then -- Write to UART -- report "" & character'image(conv_integer(memBint)) severity note; print(l_file, character'val(to_integer(unsigned(write)))); @@ -69,24 +70,26 @@ begin -- timer_we <= '1'; else print(l_file, character'val(to_integer(unsigned(write)))); - report "Illegal IO write" severity warning; + -- report "Illegal IO write" severity warning; end if; end if; read <= (others => '0'); if (readEnable = '1') then - if addr=x"1001" then + -- extend compare to avoid waring messages + if ("000" & addr)=x"0001001" then read <= (0=>'1', others => '0'); -- recieve empty elsif addr(12)='1' then read(7 downto 0) <= timer_read; elsif addr(11)='1' then read(7 downto 0) <= ZPU_Frequency; - elsif addr=x"2028003" then + -- extend compare to avoid waring messages + elsif ("000" & addr)=x"2028003" then read <= (others => '0'); else read <= (others => '0'); read(8) <= '1'; - report "Illegal IO read" severity warning; + -- report "Illegal IO read" severity warning; end if; end if; end if; diff --git a/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd b/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd deleted file mode 100644 index 5c05881..0000000 --- a/zpu/hdl/zpu4/src/sim_small_fpga_top.vhd +++ /dev/null @@ -1,177 +0,0 @@ --------------------------------------------------------------------------------- --- 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; - ----- 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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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); - - - ioMap: zpu_io port map ( - clk => clk, - areset => areset, - busy => io_busy, - writeEnable => io_mem_writeEnable, - readEnable => io_mem_readEnable, - write => mem_write, - 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; - - - - -- 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 <= 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/zpu_core_small.vhd b/zpu/hdl/zpu4/src/zpu_core_small.vhd index 0d734d2..9cda01c 100644 --- a/zpu/hdl/zpu4/src/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/src/zpu_core_small.vhd @@ -125,6 +125,11 @@ signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); signal memBRead_stdlogic : std_logic_vector(memBRead'range); +-- debug +subtype index is integer range 0 to 3; +signal tOpcode_sel : index; + + begin traceFileGenerate: if Generate_Trace generate @@ -141,6 +146,8 @@ begin ); end generate; + -- not used in this design + mem_writeMask <= (others => '1'); memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); memAWrite_stdlogic <= std_logic_vector(memAWrite); @@ -160,14 +167,23 @@ begin memARead <= unsigned(memARead_stdlogic); memBRead <= unsigned(memBRead_stdlogic); +tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); decodeControl: - process(memBRead, pc) + process(memBRead, pc,tOpcode_sel) variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); begin - tOpcode := std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-to_integer(pc(minAddrBit-1 downto 0)))*8)); - + -- not worked with synopsys + -- tOpcode := std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-to_integer(pc(minAddrBit-1 downto 0)))*8)); + -- use full case + case (tOpcode_sel) is + when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); + when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); + when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); + when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); + when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); + end case; sampledOpcode <= tOpcode; if (tOpcode(7 downto 7)=OpCode_Im) then @@ -230,7 +246,8 @@ begin out_mem_readEnable <= '0'; memAWrite <= (others => '0'); memBWrite <= (others => '0'); - mem_writeMask <= (others => '1'); + -- avoid Latch in synopsys + -- mem_writeMask <= (others => '1'); elsif (clk'event and clk = '1') then memAWriteEnable <= '0'; memBWriteEnable <= '0'; diff --git a/zpu/hdl/zpu4/test/interrupt/int.c b/zpu/hdl/zpu4/test/interrupt/int.c index 2be6483..1b6ec01 100644 --- a/zpu/hdl/zpu4/test/interrupt/int.c +++ b/zpu/hdl/zpu4/test/interrupt/int.c @@ -6,7 +6,10 @@ int counter; -/* Example of single, fixed interval non-maskable, nested interrupt */ +/* Example of single, fixed interval non-maskable, nested interrupt. The interrupt signal is + * held high for enough cycles to guarantee that it will be noticed, i.e. longer than + * any io access + 4 cycles roughly. + */ void _zpu_interrupt(void) { /* interrupts are enabled so we need to finish up quickly, -- cgit v1.1 From b93ac48f3c323a11a97a39338897c521780a16b9 Mon Sep 17 00:00:00 2001 From: oharboe Date: Sun, 4 May 2008 20:44:27 +0000 Subject: * moved ZPU core files to seperate folder * deleted some obsolete files --- .settings/org.eclipse.core.resources.prefs | 4 +- zpu/ChangeLog | 5 +- zpu/hdl/example/simzpu_small.do | 4 +- zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh | 26 + zpu/hdl/example_ghdl/dmipstrace_ghdl.sh | 25 + zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh | 25 + zpu/hdl/example_medium/sim_fpga_top.vhd | 188 ++++++ zpu/hdl/example_medium/simzpu_medium.do | 28 + zpu/hdl/sim/dmipssmalltrace.do | 26 + zpu/hdl/sim/dmipstrace.do | 30 + zpu/hdl/zpu4/core/zpu_config.vhd | 16 + zpu/hdl/zpu4/core/zpu_core.vhd | 897 +++++++++++++++++++++++++++ zpu/hdl/zpu4/core/zpu_core_small.vhd | 464 ++++++++++++++ zpu/hdl/zpu4/core/zpu_core_small_wip.vhd | 497 +++++++++++++++ zpu/hdl/zpu4/core/zpupkg.vhd | 170 +++++ zpu/hdl/zpu4/src/dmipssmalltrace.do | 26 - zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh | 26 - zpu/hdl/zpu4/src/dmipstrace.do | 30 - zpu/hdl/zpu4/src/dmipstrace_ghdl.sh | 25 - zpu/hdl/zpu4/src/log.txt | 380 ------------ zpu/hdl/zpu4/src/niltrace.vhd | 26 - zpu/hdl/zpu4/src/sim_fpga_top.vhd | 188 ------ zpu/hdl/zpu4/src/simzpu_medium.do | 28 - zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh | 25 - zpu/hdl/zpu4/src/testlut.vhd | 114 ---- zpu/hdl/zpu4/src/zpu_config.vhd | 16 - zpu/hdl/zpu4/src/zpu_core.vhd | 897 --------------------------- zpu/hdl/zpu4/src/zpu_core_small.vhd | 464 -------------- zpu/hdl/zpu4/src/zpu_core_small_wip.vhd | 497 --------------- zpu/hdl/zpu4/src/zpupkg.vhd | 170 ----- 30 files changed, 2400 insertions(+), 2917 deletions(-) create mode 100644 zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh create mode 100644 zpu/hdl/example_ghdl/dmipstrace_ghdl.sh create mode 100644 zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh create mode 100644 zpu/hdl/example_medium/sim_fpga_top.vhd create mode 100644 zpu/hdl/example_medium/simzpu_medium.do create mode 100644 zpu/hdl/sim/dmipssmalltrace.do create mode 100644 zpu/hdl/sim/dmipstrace.do create mode 100644 zpu/hdl/zpu4/core/zpu_config.vhd create mode 100644 zpu/hdl/zpu4/core/zpu_core.vhd create mode 100644 zpu/hdl/zpu4/core/zpu_core_small.vhd create mode 100644 zpu/hdl/zpu4/core/zpu_core_small_wip.vhd create mode 100644 zpu/hdl/zpu4/core/zpupkg.vhd delete mode 100644 zpu/hdl/zpu4/src/dmipssmalltrace.do delete mode 100644 zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh delete mode 100644 zpu/hdl/zpu4/src/dmipstrace.do delete mode 100644 zpu/hdl/zpu4/src/dmipstrace_ghdl.sh delete mode 100644 zpu/hdl/zpu4/src/log.txt delete mode 100644 zpu/hdl/zpu4/src/niltrace.vhd delete mode 100644 zpu/hdl/zpu4/src/sim_fpga_top.vhd delete mode 100644 zpu/hdl/zpu4/src/simzpu_medium.do delete mode 100644 zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh delete mode 100644 zpu/hdl/zpu4/src/testlut.vhd delete mode 100644 zpu/hdl/zpu4/src/zpu_config.vhd delete mode 100644 zpu/hdl/zpu4/src/zpu_core.vhd delete mode 100644 zpu/hdl/zpu4/src/zpu_core_small.vhd delete mode 100644 zpu/hdl/zpu4/src/zpu_core_small_wip.vhd delete mode 100644 zpu/hdl/zpu4/src/zpupkg.vhd diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 3f4041d..197db03 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,3 +1,3 @@ -#Wed Apr 30 20:08:12 CEST 2008 +#Sun May 04 22:37:24 CEST 2008 eclipse.preferences.version=1 -encoding//zpu/hdl/zpu4/src/zpu_core_small_wip.vhd=UTF-8 +encoding//zpu/hdl/zpu4/core/zpu_core_small_wip.vhd=UTF-8 diff --git a/zpu/ChangeLog b/zpu/ChangeLog index bb48431..3100fdb 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,5 +1,8 @@ +2008-05-04 Øyvind Harboe + * moved ZPU core files to seperate folder + * deleted some obsolete files 2008-05-01 Øyvind Harboe - * zpu/hdl/zy1000 - ZPU implementation used on the zy1000 dev kit + * zpu/hdl/zy2000 - ZPU implementation used on the zy2000 dev kit 2008-04-17 Arnim Läuger * zpu/hdl/example_ghdl/ghdl_import.sh, zpu/hdl/example_ghdl/ghdl_make.sh, zpu/hdl/example_ghdl/ghdl_options.sh, zpu/hdl/example_ghdl/README: GHDL example diff --git a/zpu/hdl/example/simzpu_small.do b/zpu/hdl/example/simzpu_small.do index 095069a..12d231b 100644 --- a/zpu/hdl/example/simzpu_small.do +++ b/zpu/hdl/example/simzpu_small.do @@ -8,10 +8,10 @@ set BreakOnAssertion 1 vlib work vcom -93 -explicit zpu_config.vhd -vcom -93 -explicit ../zpu4/src/zpupkg.vhd +vcom -93 -explicit ../zpu4/core/zpupkg.vhd vcom -93 -explicit ../zpu4/src/txt_util.vhd vcom -93 -explicit sim_small_fpga_top.vhd -vcom -93 -explicit ../zpu4/src/zpu_core_small.vhd +vcom -93 -explicit ../zpu4/core/zpu_core_small.vhd vcom -93 -explicit helloworld.vhd vcom -93 -explicit ../zpu4/src/timer.vhd vcom -93 -explicit ../zpu4/src/io.vhd diff --git a/zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh b/zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh new file mode 100644 index 0000000..5e43b64 --- /dev/null +++ b/zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" + +if test ! -e work; then + echo "Building work library..." + mkdir work + ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} zpu_core_small.vhd + ghdl -i ${IMPORT_OPTIONS} bram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} timer.vhd + ghdl -i ${IMPORT_OPTIONS} io.vhd + ghdl -i ${IMPORT_OPTIONS} trace.vhd +fi + +echo "Compiling design..." +if ghdl -m ${MAKE_OPTIONS} fpga_top; then + echo "Compilation finished, start simulation with" + echo " ./fpga_top --stop-time=1ms" +fi diff --git a/zpu/hdl/example_ghdl/dmipstrace_ghdl.sh b/zpu/hdl/example_ghdl/dmipstrace_ghdl.sh new file mode 100644 index 0000000..3be392f --- /dev/null +++ b/zpu/hdl/example_ghdl/dmipstrace_ghdl.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" + +if test ! -e work; then + echo "Building work library..." + mkdir work + ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd + ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} timer.vhd + ghdl -i ${IMPORT_OPTIONS} io.vhd + ghdl -i ${IMPORT_OPTIONS} trace.vhd +fi + +echo "Compiling design..." +if ghdl -m ${MAKE_OPTIONS} fpga_top; then + echo "Compilation finished, start simulation with" + echo " ./fpga_top --stop-time=2500us" +fi diff --git a/zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh b/zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh new file mode 100644 index 0000000..7a7f3df --- /dev/null +++ b/zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" + +if test ! -e work; then + echo "Building work library..." + mkdir work + ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd + ghdl -i ${IMPORT_OPTIONS} dram_hello.vhd + ghdl -i ${IMPORT_OPTIONS} timer.vhd + ghdl -i ${IMPORT_OPTIONS} io.vhd + ghdl -i ${IMPORT_OPTIONS} trace.vhd +fi + +echo "Compiling design..." +if ghdl -m ${MAKE_OPTIONS} fpga_top; then + echo "Compilation finished, start simulation with" + echo " ./fpga_top --stop-time=1ms" +fi diff --git a/zpu/hdl/example_medium/sim_fpga_top.vhd b/zpu/hdl/example_medium/sim_fpga_top.vhd new file mode 100644 index 0000000..29151af --- /dev/null +++ b/zpu/hdl/example_medium/sim_fpga_top.vhd @@ -0,0 +1,188 @@ +-------------------------------------------------------------------------------- +-- 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; + +---- 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; + +entity fpga_top is +end fpga_top; + +use work.zpupkg.all; + +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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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(wordSize-1 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 <= 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/example_medium/simzpu_medium.do b/zpu/hdl/example_medium/simzpu_medium.do new file mode 100644 index 0000000..a6c1fe2 --- /dev/null +++ b/zpu/hdl/example_medium/simzpu_medium.do @@ -0,0 +1,28 @@ +# Xilinx WebPack modelsim script +# +# cd C:/workspace/zpu/zpu/hdl/zpu4/src +# do simzpu_medium.do + +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_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 1000 ms diff --git a/zpu/hdl/sim/dmipssmalltrace.do b/zpu/hdl/sim/dmipssmalltrace.do new file mode 100644 index 0000000..eb4c6fe --- /dev/null +++ b/zpu/hdl/sim/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/sim/dmipstrace.do b/zpu/hdl/sim/dmipstrace.do new file mode 100644 index 0000000..64cf8fd --- /dev/null +++ b/zpu/hdl/sim/dmipstrace.do @@ -0,0 +1,30 @@ +# Xilinx WebPack modelsim script +# +# cd C:/workspace/zpu/zpu/hdl/zpu4/src +# do dmipstrace.do + +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/core/zpu_config.vhd b/zpu/hdl/zpu4/core/zpu_config.vhd new file mode 100644 index 0000000..a13c0bf --- /dev/null +++ b/zpu/hdl/zpu4/core/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/core/zpu_core.vhd b/zpu/hdl/zpu4/core/zpu_core.vhd new file mode 100644 index 0000000..37fa2d1 --- /dev/null +++ b/zpu/hdl/zpu4/core/zpu_core.vhd @@ -0,0 +1,897 @@ + +-- Company: ZPU4 generic memory interface CPU +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.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 : unsigned(maxAddrBitIncIO downto 0); +signal sp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal incSp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal incIncSp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal decSp : unsigned(maxAddrBitIncIO downto minAddrBit); +signal stackA : unsigned(wordSize-1 downto 0); +signal binaryOpResult : unsigned(wordSize-1 downto 0); +signal binaryOpResult2 : unsigned(wordSize-1 downto 0); +signal multResult2 : unsigned(wordSize-1 downto 0); +signal multResult3 : unsigned(wordSize-1 downto 0); +signal multResult : unsigned(wordSize-1 downto 0); +signal multA : unsigned(wordSize-1 downto 0); +signal multB : unsigned(wordSize-1 downto 0); +signal stackB : unsigned(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 : unsigned(4 downto 0); + variable tSpOffset : unsigned(4 downto 0); + variable nextPC : unsigned(maxAddrBitIncIO downto 0); + variable tNextState : InsnType; + variable tDecodedOpcode : InsnArray; + variable tMultResult : unsigned(wordSize*2-1 downto 0); + begin + if areset = '1' then + state <= State_Idle; + break <= '0'; + sp <= unsigned(spStart(maxAddrBitIncIO downto minAddrBit)); + + 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(to_integer(pc(byteBits-1 downto 0)))(4); + spOffset(3 downto 0):=unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(3 downto 0)); + nextPC := pc + 1; + + -- prepare trace snapshot + trace_opcode <= opcode(to_integer(pc(byteBits-1 downto 0))); + trace_pc <= std_logic_vector(pc); + trace_sp <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(stackA); + trace_topOfStackB <= std_logic_vector(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 <= std_logic_vector(sp); + mem_readEnable <= '1'; + state <= State_Resync2; + end if; + when State_Resync2 => + if in_mem_busy='0' then + stackA <= unsigned(mem_read); + mem_addr <= std_logic_vector(incSp); + mem_readEnable <= '1'; + state <= State_Resync3; + end if; + when State_Resync3 => + if in_mem_busy='0' then + stackB <= unsigned(mem_read); + mem_addr <= std_logic_vector(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):=unsigned(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(to_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(to_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) <= unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(6 downto 0)); + else + mem_writeEnable <= '1'; + mem_addr <= std_logic_vector(incSp); + mem_write <= std_logic_vector(stackB); + stackB <= stackA; + sp <= decSp; + for i in wordSize-1 downto 7 loop + stackA(i) <= opcode(to_integer(pc(byteBits-1 downto 0)))(6); + end loop; + stackA(6 downto 0) <= unsigned(opcode(to_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 <= std_logic_vector(sp+spOffset); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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) <= unsigned(opcode(to_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 <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 + 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) + 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 <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); + mem_write <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(sp+spOffset+1); + end if; + when State_LoadSP3 => + if in_mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackB <= stackA; + stackA <= unsigned(mem_read); + end if; + when State_AddSP2 => + if in_mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackA <= stackA + unsigned(mem_read); + end if; + when State_Load2 => + if in_mem_busy='0' then + stackA <= unsigned(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) <= unsigned(mem_read(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); + mem_write <= mem_read; + mem_write(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8) <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(incIncSp); + sp <= incSp; + state <= State_Popped; + end if; + when State_BinaryOpResult => + state <= State_BinaryOpResult2; + when State_BinaryOpResult2 => + mem_readEnable <= '1'; + mem_addr <= std_logic_vector(incIncSp); + sp <= incSp; + stackA <= binaryOpResult2; + state <= State_Popped; + when State_Popped => + if in_mem_busy='0' then + pc <= pc + 1; + stackB <= unsigned(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/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd new file mode 100644 index 0000000..9cda01c --- /dev/null +++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd @@ -0,0 +1,464 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.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 : unsigned(maxAddrBit downto minAddrBit); +signal memAWrite : unsigned(wordSize-1 downto 0); +signal memARead : unsigned(wordSize-1 downto 0); +signal memBWriteEnable : std_logic; +signal memBAddr : unsigned(maxAddrBit downto minAddrBit); +signal memBWrite : unsigned(wordSize-1 downto 0); +signal memBRead : unsigned(wordSize-1 downto 0); + + + +signal pc : unsigned(maxAddrBit downto 0); +signal sp : unsigned(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; + +subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; +signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); +signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); +signal memARead_stdlogic : std_logic_vector(memARead'range); +signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); +signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); +signal memBRead_stdlogic : std_logic_vector(memBRead'range); + +-- debug +subtype index is integer range 0 to 3; +signal tOpcode_sel : index; + + +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; + + -- not used in this design + mem_writeMask <= (others => '1'); + + memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); + memAWrite_stdlogic <= std_logic_vector(memAWrite); + memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); + memBWrite_stdlogic <= std_logic_vector(memBWrite); + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr_stdlogic, + memAWrite => memAWrite_stdlogic, + memARead => memARead_stdlogic, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr_stdlogic, + memBWrite => memBWrite_stdlogic, + memBRead => memBRead_stdlogic + ); + memARead <= unsigned(memARead_stdlogic); + memBRead <= unsigned(memBRead_stdlogic); + +tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); + + + decodeControl: + process(memBRead, pc,tOpcode_sel) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + begin + -- not worked with synopsys + -- tOpcode := std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-to_integer(pc(minAddrBit-1 downto 0)))*8)); + -- use full case + case (tOpcode_sel) is + when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); + when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); + when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); + when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); + when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); + end case; + 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 : unsigned(4 downto 0); + begin + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= unsigned(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'); + -- avoid Latch in synopsys + -- 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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) <= std_logic_vector(pc); + trace_opcode <= opcode; + trace_sp <= (others => '0'); + trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(memARead); + trace_topOfStackB <= std_logic_vector(memBRead); + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0) := unsigned(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) <= unsigned(opcode(6 downto 0)); + else + memAAddr <= sp; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 <= unsigned(mem_read); + end if; + when State_WriteIO => + sp <= sp + 1; + out_mem_writeEnable <= '1'; + out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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/core/zpu_core_small_wip.vhd b/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd new file mode 100644 index 0000000..8d87804 --- /dev/null +++ b/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd @@ -0,0 +1,497 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.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 : unsigned(maxAddrBit downto minAddrBit); +signal memAWrite : unsigned(wordSize-1 downto 0); +signal memARead : unsigned(wordSize-1 downto 0); +signal memBWriteEnable : std_logic; +signal memBAddr : unsigned(maxAddrBit downto minAddrBit); +signal memBWrite : unsigned(wordSize-1 downto 0); +signal memBRead : unsigned(wordSize-1 downto 0); + + + +signal pc : unsigned(maxAddrBit downto 0); +signal sp : unsigned(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, +State_Interrupt + +); + +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; + +subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; +signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); +signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); +signal memARead_stdlogic : std_logic_vector(memARead'range); +signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); +signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); +signal memBRead_stdlogic : std_logic_vector(memBRead'range); + +subtype index is integer range 0 to 3; + +signal tOpcode_sel : index; + + +signal inInterrupt : std_logic; + + + +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; + + + + -- not used in this design + + mem_writeMask <= (others => '1'); + + + + memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); + memAWrite_stdlogic <= std_logic_vector(memAWrite); + memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); + memBWrite_stdlogic <= std_logic_vector(memBWrite); + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr_stdlogic, + memAWrite => memAWrite_stdlogic, + memARead => memARead_stdlogic, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr_stdlogic, + memBWrite => memBWrite_stdlogic, + memBRead => memBRead_stdlogic + ); + memARead <= unsigned(memARead_stdlogic); + memBRead <= unsigned(memBRead_stdlogic); + + + + tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); + + + + decodeControl: + process(memBRead, pc,tOpcode_sel) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + begin + + -- simplify opcode selection a bit so it passes more synthesizers + case (tOpcode_sel) is + + when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); + + when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); + + when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); + + when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); + + when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); + end case; + + 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 : unsigned(4 downto 0); + begin + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= unsigned(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'); + inInterrupt <= '0'; + 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(memBRead); + + decodedOpcode <= sampledDecodedOpcode; + opcode <= sampledOpcode; + if interrupt='0' then + inInterrupt <= '0'; -- no longer in an interrupt + end if; + + 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) <= std_logic_vector(pc); + trace_opcode <= opcode; + trace_sp <= (others => '0'); + trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(memARead); + trace_topOfStackB <= std_logic_vector(memBRead); + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0) := unsigned(opcode(3 downto 0)); + + idim_flag <= '0'; + case decodedOpcode is + when Decoded_Interrupt => + sp <= sp - 1; + memAAddr <= sp - 1; + memAWriteEnable <= '1'; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBitIncIO downto 0) <= pc; + pc <= conv_std_logic_vector(32, maxAddrBitIncIo+1); -- interrupt address + report "ZPU jumped to interrupt!" severity note; + 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) <= unsigned(opcode(6 downto 0)); + else + memAAddr <= sp; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 <= unsigned(mem_read); + end if; + when State_WriteIO => + sp <= sp + 1; + out_mem_writeEnable <= '1'; + out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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 => + if interrupt='1' and inInterrupt='0' and idim_flag='0' then + -- We got an interrupt, execute interrupt instead of next instruction + decodedOpcode <= Decoded_Interrupt; + end if; + -- 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/core/zpupkg.vhd b/zpu/hdl/zpu4/core/zpupkg.vhd new file mode 100644 index 0000000..f3800b0 --- /dev/null +++ b/zpu/hdl/zpu4/core/zpupkg.vhd @@ -0,0 +1,170 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use ieee.numeric_std.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) := std_logic_vector(to_unsigned(36, 6)); + constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(37, 6)); + constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(38, 6)); + constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(39, 6)); + + constant OpCode_Swap : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(40, 6)); + constant OpCode_Mult : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(41, 6)); + + constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(42, 6)); + constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(43, 6)); + constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(44, 6)); + constant OpCode_Call : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(45, 6)); + + constant OpCode_Eq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(46, 6)); + constant OpCode_Neq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(47, 6)); + + constant OpCode_Sub : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(49, 6)); + constant OpCode_Loadb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(51, 6)); + constant OpCode_Storeb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(52, 6)); + + constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(55, 6)); + constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(56, 6)); + constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(57, 6)); + + constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(61, 6)); + constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(62, 6)); + constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(63, 6)); + + + + constant OpCode_Size : integer := 8; + + + +end zpupkg; diff --git a/zpu/hdl/zpu4/src/dmipssmalltrace.do b/zpu/hdl/zpu4/src/dmipssmalltrace.do deleted file mode 100644 index eb4c6fe..0000000 --- a/zpu/hdl/zpu4/src/dmipssmalltrace.do +++ /dev/null @@ -1,26 +0,0 @@ -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/dmipssmalltrace_ghdl.sh b/zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh deleted file mode 100644 index 5e43b64..0000000 --- a/zpu/hdl/zpu4/src/dmipssmalltrace_ghdl.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" -IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" -MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" - -if test ! -e work; then - echo "Building work library..." - mkdir work - ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd - ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd - ghdl -i ${IMPORT_OPTIONS} txt_util.vhd - ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd - ghdl -i ${IMPORT_OPTIONS} zpu_core_small.vhd - ghdl -i ${IMPORT_OPTIONS} bram_dmips.vhd - ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd - ghdl -i ${IMPORT_OPTIONS} timer.vhd - ghdl -i ${IMPORT_OPTIONS} io.vhd - ghdl -i ${IMPORT_OPTIONS} trace.vhd -fi - -echo "Compiling design..." -if ghdl -m ${MAKE_OPTIONS} fpga_top; then - echo "Compilation finished, start simulation with" - echo " ./fpga_top --stop-time=1ms" -fi diff --git a/zpu/hdl/zpu4/src/dmipstrace.do b/zpu/hdl/zpu4/src/dmipstrace.do deleted file mode 100644 index 64cf8fd..0000000 --- a/zpu/hdl/zpu4/src/dmipstrace.do +++ /dev/null @@ -1,30 +0,0 @@ -# Xilinx WebPack modelsim script -# -# cd C:/workspace/zpu/zpu/hdl/zpu4/src -# do dmipstrace.do - -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/dmipstrace_ghdl.sh b/zpu/hdl/zpu4/src/dmipstrace_ghdl.sh deleted file mode 100644 index 3be392f..0000000 --- a/zpu/hdl/zpu4/src/dmipstrace_ghdl.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" -IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" -MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" - -if test ! -e work; then - echo "Building work library..." - mkdir work - ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd - ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd - ghdl -i ${IMPORT_OPTIONS} txt_util.vhd - ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd - ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd - ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd - ghdl -i ${IMPORT_OPTIONS} timer.vhd - ghdl -i ${IMPORT_OPTIONS} io.vhd - ghdl -i ${IMPORT_OPTIONS} trace.vhd -fi - -echo "Compiling design..." -if ghdl -m ${MAKE_OPTIONS} fpga_top; then - echo "Compilation finished, start simulation with" - echo " ./fpga_top --stop-time=2500us" -fi diff --git a/zpu/hdl/zpu4/src/log.txt b/zpu/hdl/zpu4/src/log.txt deleted file mode 100644 index 7a82879..0000000 --- a/zpu/hdl/zpu4/src/log.txt +++ /dev/null @@ -1,380 +0,0 @@ -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 deleted file mode 100644 index 40fc1ca..0000000 --- a/zpu/hdl/zpu4/src/niltrace.vhd +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 29151af..0000000 --- a/zpu/hdl/zpu4/src/sim_fpga_top.vhd +++ /dev/null @@ -1,188 +0,0 @@ --------------------------------------------------------------------------------- --- 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; - ----- 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; - -entity fpga_top is -end fpga_top; - -use work.zpupkg.all; - -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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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(wordSize-1 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 <= 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_medium.do b/zpu/hdl/zpu4/src/simzpu_medium.do deleted file mode 100644 index a6c1fe2..0000000 --- a/zpu/hdl/zpu4/src/simzpu_medium.do +++ /dev/null @@ -1,28 +0,0 @@ -# Xilinx WebPack modelsim script -# -# cd C:/workspace/zpu/zpu/hdl/zpu4/src -# do simzpu_medium.do - -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_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 1000 ms diff --git a/zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh b/zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh deleted file mode 100644 index 7a7f3df..0000000 --- a/zpu/hdl/zpu4/src/simzpu_medium_ghdl.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" -IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" -MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" - -if test ! -e work; then - echo "Building work library..." - mkdir work - ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd - ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd - ghdl -i ${IMPORT_OPTIONS} txt_util.vhd - ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd - ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd - ghdl -i ${IMPORT_OPTIONS} dram_hello.vhd - ghdl -i ${IMPORT_OPTIONS} timer.vhd - ghdl -i ${IMPORT_OPTIONS} io.vhd - ghdl -i ${IMPORT_OPTIONS} trace.vhd -fi - -echo "Compiling design..." -if ghdl -m ${MAKE_OPTIONS} fpga_top; then - echo "Compilation finished, start simulation with" - echo " ./fpga_top --stop-time=1ms" -fi diff --git a/zpu/hdl/zpu4/src/testlut.vhd b/zpu/hdl/zpu4/src/testlut.vhd deleted file mode 100644 index 668efcc..0000000 --- a/zpu/hdl/zpu4/src/testlut.vhd +++ /dev/null @@ -1,114 +0,0 @@ --- 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/zpu_config.vhd b/zpu/hdl/zpu4/src/zpu_config.vhd deleted file mode 100644 index a13c0bf..0000000 --- a/zpu/hdl/zpu4/src/zpu_config.vhd +++ /dev/null @@ -1,16 +0,0 @@ -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_core.vhd b/zpu/hdl/zpu4/src/zpu_core.vhd deleted file mode 100644 index 37fa2d1..0000000 --- a/zpu/hdl/zpu4/src/zpu_core.vhd +++ /dev/null @@ -1,897 +0,0 @@ - --- Company: ZPU4 generic memory interface CPU --- Engineer: Øyvind Harboe - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use ieee.numeric_std.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 : unsigned(maxAddrBitIncIO downto 0); -signal sp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal incSp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal incIncSp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal decSp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal stackA : unsigned(wordSize-1 downto 0); -signal binaryOpResult : unsigned(wordSize-1 downto 0); -signal binaryOpResult2 : unsigned(wordSize-1 downto 0); -signal multResult2 : unsigned(wordSize-1 downto 0); -signal multResult3 : unsigned(wordSize-1 downto 0); -signal multResult : unsigned(wordSize-1 downto 0); -signal multA : unsigned(wordSize-1 downto 0); -signal multB : unsigned(wordSize-1 downto 0); -signal stackB : unsigned(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 : unsigned(4 downto 0); - variable tSpOffset : unsigned(4 downto 0); - variable nextPC : unsigned(maxAddrBitIncIO downto 0); - variable tNextState : InsnType; - variable tDecodedOpcode : InsnArray; - variable tMultResult : unsigned(wordSize*2-1 downto 0); - begin - if areset = '1' then - state <= State_Idle; - break <= '0'; - sp <= unsigned(spStart(maxAddrBitIncIO downto minAddrBit)); - - 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(to_integer(pc(byteBits-1 downto 0)))(4); - spOffset(3 downto 0):=unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(3 downto 0)); - nextPC := pc + 1; - - -- prepare trace snapshot - trace_opcode <= opcode(to_integer(pc(byteBits-1 downto 0))); - trace_pc <= std_logic_vector(pc); - trace_sp <= std_logic_vector(sp); - trace_topOfStack <= std_logic_vector(stackA); - trace_topOfStackB <= std_logic_vector(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 <= std_logic_vector(sp); - mem_readEnable <= '1'; - state <= State_Resync2; - end if; - when State_Resync2 => - if in_mem_busy='0' then - stackA <= unsigned(mem_read); - mem_addr <= std_logic_vector(incSp); - mem_readEnable <= '1'; - state <= State_Resync3; - end if; - when State_Resync3 => - if in_mem_busy='0' then - stackB <= unsigned(mem_read); - mem_addr <= std_logic_vector(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):=unsigned(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(to_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(to_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) <= unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(6 downto 0)); - else - mem_writeEnable <= '1'; - mem_addr <= std_logic_vector(incSp); - mem_write <= std_logic_vector(stackB); - stackB <= stackA; - sp <= decSp; - for i in wordSize-1 downto 7 loop - stackA(i) <= opcode(to_integer(pc(byteBits-1 downto 0)))(6); - end loop; - stackA(6 downto 0) <= unsigned(opcode(to_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 <= std_logic_vector(sp+spOffset); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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) <= unsigned(opcode(to_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 <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 - 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) - 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 <= std_logic_vector(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 <= std_logic_vector(stackB); - mem_addr <= std_logic_vector(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 <= std_logic_vector(stackB); - mem_addr <= std_logic_vector(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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); - mem_write <= std_logic_vector(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 <= std_logic_vector(stackB); - mem_addr <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(sp+spOffset+1); - end if; - when State_LoadSP3 => - if in_mem_busy='0' then - pc <= pc + 1; - state <= State_Execute; - stackB <= stackA; - stackA <= unsigned(mem_read); - end if; - when State_AddSP2 => - if in_mem_busy='0' then - pc <= pc + 1; - state <= State_Execute; - stackA <= stackA + unsigned(mem_read); - end if; - when State_Load2 => - if in_mem_busy='0' then - stackA <= unsigned(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) <= unsigned(mem_read(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); - mem_write <= mem_read; - mem_write(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8) <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(incIncSp); - sp <= incSp; - state <= State_Popped; - end if; - when State_BinaryOpResult => - state <= State_BinaryOpResult2; - when State_BinaryOpResult2 => - mem_readEnable <= '1'; - mem_addr <= std_logic_vector(incIncSp); - sp <= incSp; - stackA <= binaryOpResult2; - state <= State_Popped; - when State_Popped => - if in_mem_busy='0' then - pc <= pc + 1; - stackB <= unsigned(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 deleted file mode 100644 index 9cda01c..0000000 --- a/zpu/hdl/zpu4/src/zpu_core_small.vhd +++ /dev/null @@ -1,464 +0,0 @@ --- Company: ZPU3 --- Engineer: Øyvind Harboe - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use ieee.numeric_std.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 : unsigned(maxAddrBit downto minAddrBit); -signal memAWrite : unsigned(wordSize-1 downto 0); -signal memARead : unsigned(wordSize-1 downto 0); -signal memBWriteEnable : std_logic; -signal memBAddr : unsigned(maxAddrBit downto minAddrBit); -signal memBWrite : unsigned(wordSize-1 downto 0); -signal memBRead : unsigned(wordSize-1 downto 0); - - - -signal pc : unsigned(maxAddrBit downto 0); -signal sp : unsigned(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; - -subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; -signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); -signal memARead_stdlogic : std_logic_vector(memARead'range); -signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); -signal memBRead_stdlogic : std_logic_vector(memBRead'range); - --- debug -subtype index is integer range 0 to 3; -signal tOpcode_sel : index; - - -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; - - -- not used in this design - mem_writeMask <= (others => '1'); - - memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); - memAWrite_stdlogic <= std_logic_vector(memAWrite); - memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); - memBWrite_stdlogic <= std_logic_vector(memBWrite); - memory: dualport_ram port map ( - clk => clk, - memAWriteEnable => memAWriteEnable, - memAAddr => memAAddr_stdlogic, - memAWrite => memAWrite_stdlogic, - memARead => memARead_stdlogic, - memBWriteEnable => memBWriteEnable, - memBAddr => memBAddr_stdlogic, - memBWrite => memBWrite_stdlogic, - memBRead => memBRead_stdlogic - ); - memARead <= unsigned(memARead_stdlogic); - memBRead <= unsigned(memBRead_stdlogic); - -tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); - - - decodeControl: - process(memBRead, pc,tOpcode_sel) - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - begin - -- not worked with synopsys - -- tOpcode := std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-to_integer(pc(minAddrBit-1 downto 0)))*8)); - -- use full case - case (tOpcode_sel) is - when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); - when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); - when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); - when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); - when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); - end case; - 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 : unsigned(4 downto 0); - begin - if areset = '1' then - state <= State_Resync; - break <= '0'; - sp <= unsigned(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'); - -- avoid Latch in synopsys - -- 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(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) <= std_logic_vector(pc); - trace_opcode <= opcode; - trace_sp <= (others => '0'); - trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); - trace_topOfStack <= std_logic_vector(memARead); - trace_topOfStackB <= std_logic_vector(memBRead); - - -- during the next cycle we'll be reading the next opcode - spOffset(4):=not opcode(4); - spOffset(3 downto 0) := unsigned(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) <= unsigned(opcode(6 downto 0)); - else - memAAddr <= sp; - memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); - memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 <= unsigned(mem_read); - end if; - when State_WriteIO => - sp <= sp + 1; - out_mem_writeEnable <= '1'; - out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(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/zpu_core_small_wip.vhd b/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd deleted file mode 100644 index 8d87804..0000000 --- a/zpu/hdl/zpu4/src/zpu_core_small_wip.vhd +++ /dev/null @@ -1,497 +0,0 @@ --- Company: ZPU3 --- Engineer: Øyvind Harboe - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use ieee.numeric_std.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 : unsigned(maxAddrBit downto minAddrBit); -signal memAWrite : unsigned(wordSize-1 downto 0); -signal memARead : unsigned(wordSize-1 downto 0); -signal memBWriteEnable : std_logic; -signal memBAddr : unsigned(maxAddrBit downto minAddrBit); -signal memBWrite : unsigned(wordSize-1 downto 0); -signal memBRead : unsigned(wordSize-1 downto 0); - - - -signal pc : unsigned(maxAddrBit downto 0); -signal sp : unsigned(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, -State_Interrupt - -); - -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; - -subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; -signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); -signal memARead_stdlogic : std_logic_vector(memARead'range); -signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); -signal memBRead_stdlogic : std_logic_vector(memBRead'range); - -subtype index is integer range 0 to 3; - -signal tOpcode_sel : index; - - -signal inInterrupt : std_logic; - - - -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; - - - - -- not used in this design - - mem_writeMask <= (others => '1'); - - - - memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); - memAWrite_stdlogic <= std_logic_vector(memAWrite); - memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); - memBWrite_stdlogic <= std_logic_vector(memBWrite); - memory: dualport_ram port map ( - clk => clk, - memAWriteEnable => memAWriteEnable, - memAAddr => memAAddr_stdlogic, - memAWrite => memAWrite_stdlogic, - memARead => memARead_stdlogic, - memBWriteEnable => memBWriteEnable, - memBAddr => memBAddr_stdlogic, - memBWrite => memBWrite_stdlogic, - memBRead => memBRead_stdlogic - ); - memARead <= unsigned(memARead_stdlogic); - memBRead <= unsigned(memBRead_stdlogic); - - - - tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); - - - - decodeControl: - process(memBRead, pc,tOpcode_sel) - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - begin - - -- simplify opcode selection a bit so it passes more synthesizers - case (tOpcode_sel) is - - when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); - - when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); - - when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); - - when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); - - when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); - end case; - - 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 : unsigned(4 downto 0); - begin - if areset = '1' then - state <= State_Resync; - break <= '0'; - sp <= unsigned(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'); - inInterrupt <= '0'; - 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(memBRead); - - decodedOpcode <= sampledDecodedOpcode; - opcode <= sampledOpcode; - if interrupt='0' then - inInterrupt <= '0'; -- no longer in an interrupt - end if; - - 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) <= std_logic_vector(pc); - trace_opcode <= opcode; - trace_sp <= (others => '0'); - trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); - trace_topOfStack <= std_logic_vector(memARead); - trace_topOfStackB <= std_logic_vector(memBRead); - - -- during the next cycle we'll be reading the next opcode - spOffset(4):=not opcode(4); - spOffset(3 downto 0) := unsigned(opcode(3 downto 0)); - - idim_flag <= '0'; - case decodedOpcode is - when Decoded_Interrupt => - sp <= sp - 1; - memAAddr <= sp - 1; - memAWriteEnable <= '1'; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBitIncIO downto 0) <= pc; - pc <= conv_std_logic_vector(32, maxAddrBitIncIo+1); -- interrupt address - report "ZPU jumped to interrupt!" severity note; - 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) <= unsigned(opcode(6 downto 0)); - else - memAAddr <= sp; - memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); - memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 <= unsigned(mem_read); - end if; - when State_WriteIO => - sp <= sp + 1; - out_mem_writeEnable <= '1'; - out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(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 => - if interrupt='1' and inInterrupt='0' and idim_flag='0' then - -- We got an interrupt, execute interrupt instead of next instruction - decodedOpcode <= Decoded_Interrupt; - end if; - -- 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/zpupkg.vhd b/zpu/hdl/zpu4/src/zpupkg.vhd deleted file mode 100644 index f3800b0..0000000 --- a/zpu/hdl/zpu4/src/zpupkg.vhd +++ /dev/null @@ -1,170 +0,0 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use ieee.numeric_std.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) := std_logic_vector(to_unsigned(36, 6)); - constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(37, 6)); - constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(38, 6)); - constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(39, 6)); - - constant OpCode_Swap : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(40, 6)); - constant OpCode_Mult : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(41, 6)); - - constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(42, 6)); - constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(43, 6)); - constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(44, 6)); - constant OpCode_Call : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(45, 6)); - - constant OpCode_Eq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(46, 6)); - constant OpCode_Neq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(47, 6)); - - constant OpCode_Sub : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(49, 6)); - constant OpCode_Loadb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(51, 6)); - constant OpCode_Storeb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(52, 6)); - - constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(55, 6)); - constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(56, 6)); - constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(57, 6)); - - constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(61, 6)); - constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(62, 6)); - constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(63, 6)); - - - - constant OpCode_Size : integer := 8; - - - -end zpupkg; -- cgit v1.1 From c82fe03eaaf5216776c55dd43e01191cd558eb92 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 5 May 2008 08:07:29 +0000 Subject: added a bit about interrupts --- zpu/docs/zpu_arch.html | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index a1f61a1..8582afb 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1,5 +1,14 @@ +

      Index

      + +

      Introduction

      The ZPU is a zero operand, or stack based CPU. The opcodes have a fixed width of 8 bits.

      @@ -47,6 +56,7 @@ foo: +

      Instruction set

      Only the base instructions are implemented in the architecture. More advanced instructions, like ASHIFTLEFT are emulated in the illegal instruction vector. @@ -364,6 +374,7 @@ end if +

      Vectors

      @@ -392,6 +403,7 @@ end if
      AddressNameDescription
      +

      Phi memory map

      The ZPU architecture does not define a memory map as such, but the GCC + libgloss + ecos hal library uses the memory map below. @@ -767,7 +779,28 @@ memory map below. - - +
      +

      Interrupts

      +The ZPU supports interrupts. +

      +To trigger an interrupt, the interrupt signal must be asserted. The ZPU does +not define any interrupt disabling mechanism, this must be implemented by the +interrupt controller and controlled via memory mapped IO. +

      +Interrupts are masked when the IDIM flag is set, i.e. +with consequtive IM instructions. +

      +The ZPU has an edge triggered interrupt. As the ZPU notices that the interrupt +is asserted, it will execute the interrupt instruction. The interrupt signal +must stay asserted until the ZPU acknowledges it. +

      +When the interrupt instruction is executed, the PC will be pushed onto the +stack and the PC will be set to the interrupt vector address (0x20). +

      +Note that the GCC compiler requires three registers r0,r1,r2,r3 for some +rather uncommon operations. These 32 registers are mapped to memory locations 0x0, +0x4, 0x8, 0xc. The default interrupt vector at address 0x20 will load the +value of these memory locations onto the stack, call _zpu_interrupt and +restore them. \ No newline at end of file -- cgit v1.1 From ef1ebefa6075994c4f0a76035b585def8c5c1d3a Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 5 May 2008 11:40:45 +0000 Subject: wip --- zpu/hdl/zpu4/core/zpu_core_small_wip.vhd | 1 + 1 file changed, 1 insertion(+) diff --git a/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd b/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd index 8d87804..a169103 100644 --- a/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd +++ b/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd @@ -453,6 +453,7 @@ begin when State_Decode => if interrupt='1' and inInterrupt='0' and idim_flag='0' then -- We got an interrupt, execute interrupt instead of next instruction + inInterrupt <= '1'; decodedOpcode <= Decoded_Interrupt; end if; -- during the State_Execute cycle we'll be fetching SP+1 -- cgit v1.1 From 68e306c13274f504281a94a52b5fb2f8ed4d9a75 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 5 May 2008 11:56:28 +0000 Subject: wip --- zpu/hdl/zpu4/test/interrupt/int.bin | Bin 0 -> 12232 bytes zpu/hdl/zpu4/test/interrupt/int.elf | Bin 0 -> 150454 bytes zpu/hdl/zpu4/test/interrupt/int.ram | 3057 +++++++++++++++++++++++++++++++++++ 3 files changed, 3057 insertions(+) create mode 100644 zpu/hdl/zpu4/test/interrupt/int.bin create mode 100644 zpu/hdl/zpu4/test/interrupt/int.elf create mode 100644 zpu/hdl/zpu4/test/interrupt/int.ram diff --git a/zpu/hdl/zpu4/test/interrupt/int.bin b/zpu/hdl/zpu4/test/interrupt/int.bin new file mode 100644 index 0000000..94cbe31 Binary files /dev/null and b/zpu/hdl/zpu4/test/interrupt/int.bin differ diff --git a/zpu/hdl/zpu4/test/interrupt/int.elf b/zpu/hdl/zpu4/test/interrupt/int.elf new file mode 100644 index 0000000..a550987 Binary files /dev/null and b/zpu/hdl/zpu4/test/interrupt/int.elf differ diff --git a/zpu/hdl/zpu4/test/interrupt/int.ram b/zpu/hdl/zpu4/test/interrupt/int.ram new file mode 100644 index 0000000..bcb424a --- /dev/null +++ b/zpu/hdl/zpu4/test/interrupt/int.ram @@ -0,0 +1,3057 @@ +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80cfe00c", +3 => x"3a0b0b80", +4 => x"c6e10400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"0b8af02d", +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"0b0b80cf", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8b", +171 => x"ac2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8b", +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"80cfdc0c", +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"82c53f80", +257 => x"c6e73f04", +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"fe3d0d0b", +281 => x"0b80dfc8", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c8085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"dc08802e", +299 => x"a43880cf", +300 => x"e008822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc80c", +304 => x"82a0800b", +305 => x"80dfcc0c", +306 => x"8290800b", +307 => x"80dfd00c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc8", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfcc0cf8", +314 => x"80808480", +315 => x"0b80dfd0", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c80c80c0", +320 => x"a880940b", +321 => x"80dfcc0c", +322 => x"0b0b80cf", +323 => x"980b80df", +324 => x"d00c0470", +325 => x"7080dfd4", +326 => x"335170a7", +327 => x"3880cfe8", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe80c", +332 => x"702d80cf", +333 => x"e8087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfd43450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"c408802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfc4510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"80dfe008", +349 => x"810580df", +350 => x"e00c04fe", +351 => x"3d0d80df", +352 => x"e0087054", +353 => x"5272722e", +354 => x"953880cf", +355 => x"9c5182bb", +356 => x"3f80dfe0", +357 => x"08527272", +358 => x"2e098106", +359 => x"ed3880cf", +360 => x"ac5182a7", +361 => x"3f80dfe0", +362 => x"0852eb39", +363 => x"fb3d0d77", +364 => x"79555580", +365 => x"56757524", +366 => x"ab388074", +367 => x"249d3880", +368 => x"53735274", +369 => x"5180e13f", +370 => x"80085475", +371 => x"802e8538", +372 => x"80083054", +373 => x"73800c87", +374 => x"3d0d0473", +375 => x"30768132", +376 => x"5754dc39", +377 => x"74305581", +378 => x"56738025", +379 => x"d238ec39", +380 => x"fa3d0d78", +381 => x"7a575580", +382 => x"57767524", +383 => x"a438759f", +384 => x"2c548153", +385 => x"75743274", +386 => x"31527451", +387 => x"9b3f8008", +388 => x"5476802e", +389 => x"85388008", +390 => x"30547380", +391 => x"0c883d0d", +392 => x"04743055", +393 => x"8157d739", +394 => x"fc3d0d76", +395 => x"78535481", +396 => x"53807473", +397 => x"26525572", +398 => x"802e9838", +399 => x"70802eab", +400 => x"38807224", +401 => x"a6387110", +402 => x"73107572", +403 => x"26535452", +404 => x"72ea3873", +405 => x"51788338", +406 => x"74517080", +407 => x"0c863d0d", +408 => x"04720a10", +409 => x"0a720a10", +410 => x"0a535372", +411 => x"802ee438", +412 => x"717426ed", +413 => x"38737231", +414 => x"75740774", +415 => x"0a100a74", +416 => x"0a100a55", +417 => x"555654e3", +418 => x"39f73d0d", +419 => x"7c705253", +420 => x"80fd3f72", +421 => x"54800855", +422 => x"0b0b80cf", +423 => x"b8568157", +424 => x"80088105", +425 => x"5a8b3de4", +426 => x"11595382", +427 => x"59f41352", +428 => x"7b881108", +429 => x"525381b4", +430 => x"3f800830", +431 => x"70800807", +432 => x"9f2c8a07", +433 => x"800c538b", +434 => x"3d0d04f6", +435 => x"3d0d7c80", +436 => x"cfec0871", +437 => x"535553b7", +438 => x"3f725580", +439 => x"08560b0b", +440 => x"80cfb857", +441 => x"81588008", +442 => x"81055b8c", +443 => x"3de4115a", +444 => x"53825af4", +445 => x"13528814", +446 => x"085180f0", +447 => x"3f800830", +448 => x"70800807", +449 => x"9f2c8a07", +450 => x"800c548c", +451 => x"3d0d0470", +452 => x"70707075", +453 => x"70718306", +454 => x"53555270", +455 => x"b4387170", +456 => x"087009f7", +457 => x"fbfdff12", +458 => x"06f88482", +459 => x"81800654", +460 => x"5253719b", +461 => x"38841370", +462 => x"087009f7", +463 => x"fbfdff12", +464 => x"06f88482", +465 => x"81800654", +466 => x"52537180", +467 => x"2ee73872", +468 => x"52713353", +469 => x"72802e8a", +470 => x"38811270", +471 => x"33545272", +472 => x"f8387174", +473 => x"31800c50", +474 => x"50505004", +475 => x"f23d0d60", +476 => x"62881108", +477 => x"7058565f", +478 => x"5a73802e", +479 => x"818c388c", +480 => x"1a227083", +481 => x"2a813281", +482 => x"06565874", +483 => x"8638901a", +484 => x"08913879", +485 => x"5190b73f", +486 => x"ff558008", +487 => x"80ec388c", +488 => x"1a22587d", +489 => x"08558078", +490 => x"83ffff06", +491 => x"700a100a", +492 => x"8106415c", +493 => x"577e772e", +494 => x"80d73876", +495 => x"90387408", +496 => x"84160888", +497 => x"17575856", +498 => x"76802ef2", +499 => x"38765488", +500 => x"80772784", +501 => x"38888054", +502 => x"73537552", +503 => x"9c1a0851", +504 => x"a41a0858", +505 => x"772d800b", +506 => x"80082582", +507 => x"e0388008", +508 => x"16778008", +509 => x"317f8805", +510 => x"08800831", +511 => x"70618805", +512 => x"0c5b5856", +513 => x"78ffb438", +514 => x"80557480", +515 => x"0c903d0d", +516 => x"047a8132", +517 => x"81067740", +518 => x"5675802e", +519 => x"81bd3876", +520 => x"90387408", +521 => x"84160888", +522 => x"17575859", +523 => x"76802ef2", +524 => x"38881a08", +525 => x"7883ffff", +526 => x"0670892a", +527 => x"81065659", +528 => x"5673802e", +529 => x"82f83875", +530 => x"77278b38", +531 => x"77872a81", +532 => x"065c7b82", +533 => x"b5387676", +534 => x"27833876", +535 => x"56755378", +536 => x"52790851", +537 => x"85833f88", +538 => x"1a087631", +539 => x"881b0c79", +540 => x"08167a0c", +541 => x"76567519", +542 => x"7777317f", +543 => x"88050878", +544 => x"31706188", +545 => x"050c4158", +546 => x"597e802e", +547 => x"fefa388c", +548 => x"1a2258ff", +549 => x"8a397879", +550 => x"547c537b", +551 => x"525684c9", +552 => x"3f881a08", +553 => x"7931881b", +554 => x"0c790819", +555 => x"7a0c7c76", +556 => x"315d7c8e", +557 => x"3879518f", +558 => x"f23f8008", +559 => x"818f3880", +560 => x"085f751c", +561 => x"7777317f", +562 => x"88050878", +563 => x"31706188", +564 => x"050c5d58", +565 => x"5c7a802e", +566 => x"feae3876", +567 => x"81833874", +568 => x"08841608", +569 => x"88175758", +570 => x"5c76802e", +571 => x"f2387653", +572 => x"8a527b51", +573 => x"82d33f80", +574 => x"087c3181", +575 => x"055d8008", +576 => x"84388117", +577 => x"5d815f7c", +578 => x"59767d27", +579 => x"83387659", +580 => x"941a0888", +581 => x"1b081157", +582 => x"58807a08", +583 => x"5c54901a", +584 => x"087b2783", +585 => x"38815475", +586 => x"79258438", +587 => x"73ba3877", +588 => x"7924fee2", +589 => x"3877537b", +590 => x"529c1a08", +591 => x"51a41a08", +592 => x"59782d80", +593 => x"08568008", +594 => x"8024fee2", +595 => x"388c1a22", +596 => x"80c0075e", +597 => x"7d8c1b23", +598 => x"ff557480", +599 => x"0c903d0d", +600 => x"047effa3", +601 => x"38ff8739", +602 => x"75537b52", +603 => x"7a5182f9", +604 => x"3f790816", +605 => x"7a0c7951", +606 => x"8eb13f80", +607 => x"08cf387c", +608 => x"76315d7c", +609 => x"febc38fe", +610 => x"ac39901a", +611 => x"087a0871", +612 => x"31781170", +613 => x"565a5752", +614 => x"80cfec08", +615 => x"5184943f", +616 => x"8008802e", +617 => x"ffa73880", +618 => x"08901b0c", +619 => x"8008167a", +620 => x"0c77941b", +621 => x"0c76881b", +622 => x"0c7656fd", +623 => x"99397908", +624 => x"58901a08", +625 => x"78278338", +626 => x"81547577", +627 => x"27843873", +628 => x"b338941a", +629 => x"08547377", +630 => x"2680d338", +631 => x"73537852", +632 => x"9c1a0851", +633 => x"a41a0858", +634 => x"772d8008", +635 => x"56800880", +636 => x"24fd8338", +637 => x"8c1a2280", +638 => x"c0075e7d", +639 => x"8c1b23ff", +640 => x"55fed739", +641 => x"75537852", +642 => x"775181dd", +643 => x"3f790816", +644 => x"7a0c7951", +645 => x"8d953f80", +646 => x"08802efc", +647 => x"d9388c1a", +648 => x"2280c007", +649 => x"5e7d8c1b", +650 => x"23ff55fe", +651 => x"ad397677", +652 => x"54795378", +653 => x"525681b1", +654 => x"3f881a08", +655 => x"7731881b", +656 => x"0c790817", +657 => x"7a0cfcae", +658 => x"39fa3d0d", +659 => x"7a790288", +660 => x"05a70533", +661 => x"55535483", +662 => x"742780df", +663 => x"38718306", +664 => x"517080d7", +665 => x"38717157", +666 => x"55835175", +667 => x"82802913", +668 => x"ff125256", +669 => x"708025f3", +670 => x"38837427", +671 => x"bc387408", +672 => x"76327009", +673 => x"f7fbfdff", +674 => x"1206f884", +675 => x"82818006", +676 => x"51517080", +677 => x"2e983874", +678 => x"51805270", +679 => x"33577277", +680 => x"2eb93881", +681 => x"11811353", +682 => x"51837227", +683 => x"ee38fc14", +684 => x"84165654", +685 => x"738326c6", +686 => x"387452ff", +687 => x"145170ff", +688 => x"2e973871", +689 => x"33547274", +690 => x"2e983881", +691 => x"12ff1252", +692 => x"5270ff2e", +693 => x"098106eb", +694 => x"38805170", +695 => x"800c883d", +696 => x"0d047180", +697 => x"0c883d0d", +698 => x"04fa3d0d", +699 => x"787a7c72", +700 => x"72725957", +701 => x"55585657", +702 => x"747727b2", +703 => x"38751551", +704 => x"767127aa", +705 => x"38707618", +706 => x"ff185353", +707 => x"5370ff2e", +708 => x"9638ff12", +709 => x"ff145452", +710 => x"72337234", +711 => x"ff115170", +712 => x"ff2e0981", +713 => x"06ec3876", +714 => x"800c883d", +715 => x"0d048f76", +716 => x"2780e638", +717 => x"74770783", +718 => x"06517080", +719 => x"dc387675", +720 => x"52537070", +721 => x"84055208", +722 => x"73708405", +723 => x"550c7271", +724 => x"70840553", +725 => x"08717084", +726 => x"05530c71", +727 => x"70840553", +728 => x"08717084", +729 => x"05530c71", +730 => x"70840553", +731 => x"08717084", +732 => x"05530cf0", +733 => x"15555373", +734 => x"8f26c738", +735 => x"83742795", +736 => x"38707084", +737 => x"05520873", +738 => x"70840555", +739 => x"0cfc1454", +740 => x"738326ed", +741 => x"38727154", +742 => x"52ff1451", +743 => x"70ff2eff", +744 => x"86387270", +745 => x"81055433", +746 => x"72708105", +747 => x"5434ff11", +748 => x"51ea39ef", +749 => x"3d0d6365", +750 => x"67405d42", +751 => x"7b802e85", +752 => x"82386151", +753 => x"a9e73ff8", +754 => x"1c708412", +755 => x"0870fc06", +756 => x"70628b05", +757 => x"70f80641", +758 => x"59455c5f", +759 => x"41579674", +760 => x"2782c538", +761 => x"807b247e", +762 => x"7c260758", +763 => x"80547774", +764 => x"2e098106", +765 => x"82ab3878", +766 => x"7b2581fe", +767 => x"38781780", +768 => x"d7a80b88", +769 => x"05085b56", +770 => x"79762e84", +771 => x"c5388416", +772 => x"0870fe06", +773 => x"17841108", +774 => x"81064155", +775 => x"557e828d", +776 => x"3874fc06", +777 => x"5879762e", +778 => x"84e33878", +779 => x"185f7e7b", +780 => x"2581ff38", +781 => x"7c810654", +782 => x"7382c138", +783 => x"76770831", +784 => x"841108fc", +785 => x"06565775", +786 => x"802e9138", +787 => x"79762e84", +788 => x"f0387418", +789 => x"1958777b", +790 => x"25849138", +791 => x"76802e82", +792 => x"9b387815", +793 => x"567a7624", +794 => x"8292388c", +795 => x"17088818", +796 => x"08718c12", +797 => x"0c88120c", +798 => x"5e755988", +799 => x"1761fc05", +800 => x"5b5679a4", +801 => x"2685ff38", +802 => x"7b765955", +803 => x"937a2780", +804 => x"c9387b70", +805 => x"84055d08", +806 => x"7c56760c", +807 => x"74708405", +808 => x"56088c18", +809 => x"0c901758", +810 => x"9b7a27ae", +811 => x"38747084", +812 => x"05560878", +813 => x"0c747084", +814 => x"05560894", +815 => x"180c9817", +816 => x"58a37a27", +817 => x"95387470", +818 => x"84055608", +819 => x"780c7470", +820 => x"84055608", +821 => x"9c180ca0", +822 => x"17587470", +823 => x"84055608", +824 => x"755f7870", +825 => x"84055a0c", +826 => x"777e7084", +827 => x"05400871", +828 => x"70840553", +829 => x"0c7e0871", +830 => x"0c5d787b", +831 => x"3156758f", +832 => x"2680c938", +833 => x"84170881", +834 => x"06790784", +835 => x"180c7817", +836 => x"84110881", +837 => x"0784120c", +838 => x"5b6151a7", +839 => x"913f8817", +840 => x"5473800c", +841 => x"933d0d04", +842 => x"905bfdb8", +843 => x"397756fe", +844 => x"83398c16", +845 => x"08881708", +846 => x"718c120c", +847 => x"88120c58", +848 => x"7e707c31", +849 => x"57598f76", +850 => x"27ffb938", +851 => x"7a178418", +852 => x"0881067c", +853 => x"0784190c", +854 => x"76810784", +855 => x"120c7611", +856 => x"84110881", +857 => x"0784120c", +858 => x"5b880552", +859 => x"61518fda", +860 => x"3f6151a6", +861 => x"b93f8817", +862 => x"54ffa639", +863 => x"7d526151", +864 => x"97d73f80", +865 => x"085a8008", +866 => x"802e81ab", +867 => x"388008f8", +868 => x"05608405", +869 => x"08fe0661", +870 => x"05585574", +871 => x"772e83f2", +872 => x"38fc1958", +873 => x"77a42681", +874 => x"b0387b80", +875 => x"08565793", +876 => x"782780dc", +877 => x"387b7070", +878 => x"84055208", +879 => x"80087084", +880 => x"05800c0c", +881 => x"80087170", +882 => x"84055308", +883 => x"5d567b76", +884 => x"70840558", +885 => x"0c579b78", +886 => x"27b63876", +887 => x"70840558", +888 => x"08757084", +889 => x"05570c76", +890 => x"70840558", +891 => x"08757084", +892 => x"05570ca3", +893 => x"78279938", +894 => x"76708405", +895 => x"58087570", +896 => x"8405570c", +897 => x"76708405", +898 => x"58087570", +899 => x"8405570c", +900 => x"76708405", +901 => x"5808775e", +902 => x"75708405", +903 => x"570c747d", +904 => x"7084055f", +905 => x"08717084", +906 => x"05530c7d", +907 => x"08710c5f", +908 => x"7b526151", +909 => x"8e943f61", +910 => x"51a4f33f", +911 => x"79800c93", +912 => x"3d0d047d", +913 => x"52615196", +914 => x"903f8008", +915 => x"800c933d", +916 => x"0d048416", +917 => x"0855fbc9", +918 => x"3977537b", +919 => x"52800851", +920 => x"a2a53f7b", +921 => x"5261518d", +922 => x"e13fcc39", +923 => x"8c160888", +924 => x"1708718c", +925 => x"120c8812", +926 => x"0c5d8c17", +927 => x"08881808", +928 => x"718c120c", +929 => x"88120c59", +930 => x"7759fbef", +931 => x"39781890", +932 => x"1c40557e", +933 => x"7524fb9c", +934 => x"387a1770", +935 => x"80d7a80b", +936 => x"88050c75", +937 => x"7c318107", +938 => x"84120c56", +939 => x"84170881", +940 => x"067b0784", +941 => x"180c6151", +942 => x"a3f43f88", +943 => x"1754fce1", +944 => x"39741819", +945 => x"901c5e5a", +946 => x"7c7a24fb", +947 => x"8f388c17", +948 => x"08881808", +949 => x"718c120c", +950 => x"88120c5e", +951 => x"881761fc", +952 => x"05575975", +953 => x"a42681b6", +954 => x"387b7959", +955 => x"55937627", +956 => x"80c9387b", +957 => x"7084055d", +958 => x"087c5679", +959 => x"0c747084", +960 => x"0556088c", +961 => x"180c9017", +962 => x"589b7627", +963 => x"ae387470", +964 => x"84055608", +965 => x"780c7470", +966 => x"84055608", +967 => x"94180c98", +968 => x"1758a376", +969 => x"27953874", +970 => x"70840556", +971 => x"08780c74", +972 => x"70840556", +973 => x"089c180c", +974 => x"a0175874", +975 => x"70840556", +976 => x"08754178", +977 => x"7084055a", +978 => x"0c776070", +979 => x"84054208", +980 => x"71708405", +981 => x"530c6008", +982 => x"710c5e7a", +983 => x"177080d7", +984 => x"a80b8805", +985 => x"0c7a7c31", +986 => x"81078412", +987 => x"0c588417", +988 => x"0881067b", +989 => x"0784180c", +990 => x"6151a2b2", +991 => x"3f785473", +992 => x"800c933d", +993 => x"0d047953", +994 => x"7b527551", +995 => x"9ff93ffa", +996 => x"e9398415", +997 => x"08fc0619", +998 => x"605859fa", +999 => x"dd397553", +1000 => x"7b527851", +1001 => x"9fe13f7a", +1002 => x"177080d7", +1003 => x"a80b8805", +1004 => x"0c7a7c31", +1005 => x"81078412", +1006 => x"0c588417", +1007 => x"0881067b", +1008 => x"0784180c", +1009 => x"6151a1e6", +1010 => x"3f7854ff", +1011 => x"b239fa3d", +1012 => x"0d7880cf", +1013 => x"ec085455", +1014 => x"b8130880", +1015 => x"2e81af38", +1016 => x"8c152270", +1017 => x"83ffff06", +1018 => x"70832a81", +1019 => x"32810655", +1020 => x"55567280", +1021 => x"2e80da38", +1022 => x"73842a81", +1023 => x"32810657", +1024 => x"ff537680", +1025 => x"f2387382", +1026 => x"2a810654", +1027 => x"73802eb9", +1028 => x"38b01508", +1029 => x"5473802e", +1030 => x"9c3880c0", +1031 => x"15537373", +1032 => x"2e8f3873", +1033 => x"5280cfec", +1034 => x"08518a9e", +1035 => x"3f8c1522", +1036 => x"5676b016", +1037 => x"0c75db06", +1038 => x"57768c16", +1039 => x"23800b84", +1040 => x"160c9015", +1041 => x"08750c76", +1042 => x"56758807", +1043 => x"54738c16", +1044 => x"23901508", +1045 => x"802ebf38", +1046 => x"8c152270", +1047 => x"81065553", +1048 => x"739c3872", +1049 => x"0a100a81", +1050 => x"06567585", +1051 => x"38941508", +1052 => x"54738816", +1053 => x"0c805372", +1054 => x"800c883d", +1055 => x"0d04800b", +1056 => x"88160c94", +1057 => x"15083098", +1058 => x"160c8053", +1059 => x"ea397251", +1060 => x"82a63ffe", +1061 => x"cb397451", +1062 => x"8fbc3f8c", +1063 => x"15227081", +1064 => x"06555373", +1065 => x"802effbb", +1066 => x"38d439f8", +1067 => x"3d0d7a57", +1068 => x"76802e81", +1069 => x"973880cf", +1070 => x"ec0854b8", +1071 => x"1408802e", +1072 => x"80eb388c", +1073 => x"17227090", +1074 => x"2b70902c", +1075 => x"70832a81", +1076 => x"3281065b", +1077 => x"5b575577", +1078 => x"80cb3890", +1079 => x"17085675", +1080 => x"802e80c1", +1081 => x"38760876", +1082 => x"3176780c", +1083 => x"79830655", +1084 => x"55738538", +1085 => x"94170858", +1086 => x"7788180c", +1087 => x"807525a5", +1088 => x"38745375", +1089 => x"529c1708", +1090 => x"51a41708", +1091 => x"54732d80", +1092 => x"0b800825", +1093 => x"80c93880", +1094 => x"08167580", +1095 => x"08315656", +1096 => x"748024dd", +1097 => x"38800b80", +1098 => x"0c8a3d0d", +1099 => x"04735181", +1100 => x"873f8c17", +1101 => x"2270902b", +1102 => x"70902c70", +1103 => x"832a8132", +1104 => x"81065b5b", +1105 => x"575577dd", +1106 => x"38ff9039", +1107 => x"a1ab5280", +1108 => x"cfec0851", +1109 => x"8cd03f80", +1110 => x"08800c8a", +1111 => x"3d0d048c", +1112 => x"172280c0", +1113 => x"0758778c", +1114 => x"1823ff0b", +1115 => x"800c8a3d", +1116 => x"0d04fa3d", +1117 => x"0d797080", +1118 => x"dc298c11", +1119 => x"547a5356", +1120 => x"578fd63f", +1121 => x"80088008", +1122 => x"55568008", +1123 => x"802ea238", +1124 => x"80088c05", +1125 => x"54800b80", +1126 => x"080c7680", +1127 => x"0884050c", +1128 => x"73800888", +1129 => x"050c7453", +1130 => x"80527351", +1131 => x"9cf53f75", +1132 => x"5473800c", +1133 => x"883d0d04", +1134 => x"70707074", +1135 => x"a8f70bbc", +1136 => x"120c5381", +1137 => x"0bb8140c", +1138 => x"800b84dc", +1139 => x"140c830b", +1140 => x"84e0140c", +1141 => x"84e81384", +1142 => x"e4140c84", +1143 => x"13085180", +1144 => x"70720c70", +1145 => x"84130c70", +1146 => x"88130c52", +1147 => x"840b8c12", +1148 => x"23718e12", +1149 => x"23719012", +1150 => x"0c719412", +1151 => x"0c719812", +1152 => x"0c709c12", +1153 => x"0c80c1e6", +1154 => x"0ba0120c", +1155 => x"80c2b20b", +1156 => x"a4120c80", +1157 => x"c3ae0ba8", +1158 => x"120c80c3", +1159 => x"ff0bac12", +1160 => x"0c881308", +1161 => x"72710c72", +1162 => x"84120c72", +1163 => x"88120c51", +1164 => x"890b8c12", +1165 => x"23810b8e", +1166 => x"12237190", +1167 => x"120c7194", +1168 => x"120c7198", +1169 => x"120c709c", +1170 => x"120c80c1", +1171 => x"e60ba012", +1172 => x"0c80c2b2", +1173 => x"0ba4120c", +1174 => x"80c3ae0b", +1175 => x"a8120c80", +1176 => x"c3ff0bac", +1177 => x"120c8c13", +1178 => x"0872710c", +1179 => x"7284120c", +1180 => x"7288120c", +1181 => x"518a0b8c", +1182 => x"1223820b", +1183 => x"8e122371", +1184 => x"90120c71", +1185 => x"94120c71", +1186 => x"98120c70", +1187 => x"9c120c80", +1188 => x"c1e60ba0", +1189 => x"120c80c2", +1190 => x"b20ba412", +1191 => x"0c80c3ae", +1192 => x"0ba8120c", +1193 => x"80c3ff0b", +1194 => x"ac120c50", +1195 => x"505004f8", +1196 => x"3d0d7a80", +1197 => x"cfec08b8", +1198 => x"11085757", +1199 => x"587481ec", +1200 => x"38a8f70b", +1201 => x"bc170c81", +1202 => x"0bb8170c", +1203 => x"7484dc17", +1204 => x"0c830b84", +1205 => x"e0170c84", +1206 => x"e81684e4", +1207 => x"170c8416", +1208 => x"0875710c", +1209 => x"7584120c", +1210 => x"7588120c", +1211 => x"59840b8c", +1212 => x"1a23748e", +1213 => x"1a237490", +1214 => x"1a0c7494", +1215 => x"1a0c7498", +1216 => x"1a0c789c", +1217 => x"1a0c80c1", +1218 => x"e60ba01a", +1219 => x"0c80c2b2", +1220 => x"0ba41a0c", +1221 => x"80c3ae0b", +1222 => x"a81a0c80", +1223 => x"c3ff0bac", +1224 => x"1a0c8816", +1225 => x"0875710c", +1226 => x"7584120c", +1227 => x"7588120c", +1228 => x"57890b8c", +1229 => x"1823810b", +1230 => x"8e182374", +1231 => x"90180c74", +1232 => x"94180c74", +1233 => x"98180c76", +1234 => x"9c180c80", +1235 => x"c1e60ba0", +1236 => x"180c80c2", +1237 => x"b20ba418", +1238 => x"0c80c3ae", +1239 => x"0ba8180c", +1240 => x"80c3ff0b", +1241 => x"ac180c8c", +1242 => x"16087571", +1243 => x"0c758412", +1244 => x"0c758812", +1245 => x"0c548a0b", +1246 => x"8c152382", +1247 => x"0b8e1523", +1248 => x"7490150c", +1249 => x"7494150c", +1250 => x"7498150c", +1251 => x"739c150c", +1252 => x"80c1e60b", +1253 => x"a0150c80", +1254 => x"c2b20ba4", +1255 => x"150c80c3", +1256 => x"ae0ba815", +1257 => x"0c80c3ff", +1258 => x"0bac150c", +1259 => x"84dc1688", +1260 => x"11088412", +1261 => x"08ff0557", +1262 => x"57578075", +1263 => x"249f388c", +1264 => x"16227090", +1265 => x"2b70902c", +1266 => x"51555973", +1267 => x"802e80ed", +1268 => x"3880dc16", +1269 => x"ff165656", +1270 => x"748025e3", +1271 => x"38760855", +1272 => x"74802e8f", +1273 => x"38748811", +1274 => x"08841208", +1275 => x"ff055757", +1276 => x"57c83982", +1277 => x"fc527751", +1278 => x"8adf3f80", +1279 => x"08800855", +1280 => x"56800880", +1281 => x"2ea33880", +1282 => x"088c0575", +1283 => x"80080c54", +1284 => x"840b8008", +1285 => x"84050c73", +1286 => x"80088805", +1287 => x"0c82f053", +1288 => x"74527351", +1289 => x"97fd3f75", +1290 => x"54737478", +1291 => x"0c5573ff", +1292 => x"b4388c78", +1293 => x"0c800b80", +1294 => x"0c8a3d0d", +1295 => x"04810b8c", +1296 => x"17237376", +1297 => x"0c738817", +1298 => x"0c738417", +1299 => x"0c739017", +1300 => x"0c739417", +1301 => x"0c739817", +1302 => x"0cff0b8e", +1303 => x"172373b0", +1304 => x"170c73b4", +1305 => x"170c7380", +1306 => x"c4170c73", +1307 => x"80c8170c", +1308 => x"75800c8a", +1309 => x"3d0d0470", +1310 => x"70a1ab52", +1311 => x"735186a6", +1312 => x"3f505004", +1313 => x"7070a1ab", +1314 => x"5280cfec", +1315 => x"08518696", +1316 => x"3f505004", +1317 => x"fb3d0d77", +1318 => x"70525698", +1319 => x"903f80d7", +1320 => x"a80b8805", +1321 => x"08841108", +1322 => x"fc06707b", +1323 => x"319fef05", +1324 => x"e08006e0", +1325 => x"80055255", +1326 => x"55a08075", +1327 => x"24943880", +1328 => x"52755197", +1329 => x"ea3f80d7", +1330 => x"b0081453", +1331 => x"7280082e", +1332 => x"8f387551", +1333 => x"97d83f80", +1334 => x"5372800c", +1335 => x"873d0d04", +1336 => x"74305275", +1337 => x"5197c83f", +1338 => x"8008ff2e", +1339 => x"a83880d7", +1340 => x"a80b8805", +1341 => x"08747631", +1342 => x"81078412", +1343 => x"0c5380d6", +1344 => x"ec087531", +1345 => x"80d6ec0c", +1346 => x"755197a2", +1347 => x"3f810b80", +1348 => x"0c873d0d", +1349 => x"04805275", +1350 => x"5197943f", +1351 => x"80d7a80b", +1352 => x"88050880", +1353 => x"08713154", +1354 => x"548f7325", +1355 => x"ffa43880", +1356 => x"0880d79c", +1357 => x"083180d6", +1358 => x"ec0c7281", +1359 => x"0784150c", +1360 => x"755196ea", +1361 => x"3f8053ff", +1362 => x"9039f73d", +1363 => x"0d7b7d54", +1364 => x"5a72802e", +1365 => x"82833879", +1366 => x"5196d23f", +1367 => x"f8138411", +1368 => x"0870fe06", +1369 => x"70138411", +1370 => x"08fc065c", +1371 => x"57585457", +1372 => x"80d7b008", +1373 => x"742e82de", +1374 => x"38778415", +1375 => x"0c807381", +1376 => x"06565974", +1377 => x"792e81d5", +1378 => x"38771484", +1379 => x"11088106", +1380 => x"565374a0", +1381 => x"38771656", +1382 => x"7881e638", +1383 => x"88140855", +1384 => x"7480d7b0", +1385 => x"2e82f938", +1386 => x"8c140870", +1387 => x"8c170c75", +1388 => x"88120c58", +1389 => x"75810784", +1390 => x"180c7517", +1391 => x"76710c54", +1392 => x"78819138", +1393 => x"83ff7627", +1394 => x"81c83875", +1395 => x"892a7683", +1396 => x"2a545473", +1397 => x"802ebf38", +1398 => x"75862ab8", +1399 => x"05538474", +1400 => x"27b43880", +1401 => x"db145394", +1402 => x"7427ab38", +1403 => x"758c2a80", +1404 => x"ee055380", +1405 => x"d474279e", +1406 => x"38758f2a", +1407 => x"80f70553", +1408 => x"82d47427", +1409 => x"91387592", +1410 => x"2a80fc05", +1411 => x"538ad474", +1412 => x"27843880", +1413 => x"fe537210", +1414 => x"101080d7", +1415 => x"a8058811", +1416 => x"08555573", +1417 => x"752e82bf", +1418 => x"38841408", +1419 => x"fc065975", +1420 => x"79278d38", +1421 => x"88140854", +1422 => x"73752e09", +1423 => x"8106ea38", +1424 => x"8c140870", +1425 => x"8c190c74", +1426 => x"88190c77", +1427 => x"88120c55", +1428 => x"768c150c", +1429 => x"795194d6", +1430 => x"3f8b3d0d", +1431 => x"04760877", +1432 => x"71315876", +1433 => x"05881808", +1434 => x"56567480", +1435 => x"d7b02e80", +1436 => x"e0388c17", +1437 => x"08708c17", +1438 => x"0c758812", +1439 => x"0c53fe89", +1440 => x"39881408", +1441 => x"8c150870", +1442 => x"8c130c59", +1443 => x"88190cfe", +1444 => x"a3397583", +1445 => x"2a705454", +1446 => x"80742481", +1447 => x"98387282", +1448 => x"2c81712b", +1449 => x"80d7ac08", +1450 => x"0780d7a8", +1451 => x"0b84050c", +1452 => x"74101010", +1453 => x"80d7a805", +1454 => x"88110871", +1455 => x"8c1b0c70", +1456 => x"881b0c79", +1457 => x"88130c56", +1458 => x"5a55768c", +1459 => x"150cff84", +1460 => x"398159fd", +1461 => x"b4397716", +1462 => x"73810654", +1463 => x"55729838", +1464 => x"76087771", +1465 => x"31587505", +1466 => x"8c180888", +1467 => x"1908718c", +1468 => x"120c8812", +1469 => x"0c555574", +1470 => x"81078418", +1471 => x"0c7680d7", +1472 => x"a80b8805", +1473 => x"0c80d7a4", +1474 => x"087526fe", +1475 => x"c73880d7", +1476 => x"a0085279", +1477 => x"51fafd3f", +1478 => x"79519392", +1479 => x"3ffeba39", +1480 => x"81778c17", +1481 => x"0c778817", +1482 => x"0c758c19", +1483 => x"0c758819", +1484 => x"0c59fd80", +1485 => x"39831470", +1486 => x"822c8171", +1487 => x"2b80d7ac", +1488 => x"080780d7", +1489 => x"a80b8405", +1490 => x"0c751010", +1491 => x"1080d7a8", +1492 => x"05881108", +1493 => x"718c1c0c", +1494 => x"70881c0c", +1495 => x"7a88130c", +1496 => x"575b5653", +1497 => x"fee43980", +1498 => x"7324a338", +1499 => x"72822c81", +1500 => x"712b80d7", +1501 => x"ac080780", +1502 => x"d7a80b84", +1503 => x"050c5874", +1504 => x"8c180c73", +1505 => x"88180c76", +1506 => x"88160cfd", +1507 => x"c3398313", +1508 => x"70822c81", +1509 => x"712b80d7", +1510 => x"ac080780", +1511 => x"d7a80b84", +1512 => x"050c5953", +1513 => x"da39f93d", +1514 => x"0d797b58", +1515 => x"53800b80", +1516 => x"cfec0853", +1517 => x"5672722e", +1518 => x"bc3884dc", +1519 => x"13557476", +1520 => x"2eb33888", +1521 => x"15088416", +1522 => x"08ff0554", +1523 => x"54807324", +1524 => x"99388c14", +1525 => x"2270902b", +1526 => x"53587180", +1527 => x"d43880dc", +1528 => x"14ff1454", +1529 => x"54728025", +1530 => x"e9387408", +1531 => x"5574d438", +1532 => x"80cfec08", +1533 => x"5284dc12", +1534 => x"5574802e", +1535 => x"ad388815", +1536 => x"08841608", +1537 => x"ff055454", +1538 => x"80732498", +1539 => x"388c1422", +1540 => x"70902b53", +1541 => x"5871ad38", +1542 => x"80dc14ff", +1543 => x"14545472", +1544 => x"8025ea38", +1545 => x"74085574", +1546 => x"d5387580", +1547 => x"0c893d0d", +1548 => x"04735176", +1549 => x"2d758008", +1550 => x"0780dc15", +1551 => x"ff155555", +1552 => x"56ffa239", +1553 => x"7351762d", +1554 => x"75800807", +1555 => x"80dc15ff", +1556 => x"15555556", +1557 => x"ca39ea3d", +1558 => x"0d688c11", +1559 => x"22700a10", +1560 => x"0a810657", +1561 => x"58567480", +1562 => x"e4388e16", +1563 => x"2270902b", +1564 => x"70902c51", +1565 => x"55588074", +1566 => x"24b13898", +1567 => x"3dc40553", +1568 => x"735280cf", +1569 => x"ec085194", +1570 => x"813f800b", +1571 => x"80082497", +1572 => x"387983e0", +1573 => x"80065473", +1574 => x"80c0802e", +1575 => x"818f3873", +1576 => x"8280802e", +1577 => x"8191388c", +1578 => x"16225776", +1579 => x"90800754", +1580 => x"738c1723", +1581 => x"88805280", +1582 => x"cfec0851", +1583 => x"819b3f80", +1584 => x"089d388c", +1585 => x"16228207", +1586 => x"55748c17", +1587 => x"2380c316", +1588 => x"70770c90", +1589 => x"170c810b", +1590 => x"94170c98", +1591 => x"3d0d0480", +1592 => x"cfec08a8", +1593 => x"f70bbc12", +1594 => x"0c588c16", +1595 => x"22818007", +1596 => x"54738c17", +1597 => x"23800876", +1598 => x"0c800890", +1599 => x"170c8880", +1600 => x"0b94170c", +1601 => x"74802ed3", +1602 => x"388e1622", +1603 => x"70902b70", +1604 => x"902c5356", +1605 => x"549afb3f", +1606 => x"8008802e", +1607 => x"ffbd388c", +1608 => x"16228107", +1609 => x"57768c17", +1610 => x"23983d0d", +1611 => x"04810b8c", +1612 => x"17225855", +1613 => x"fef539a8", +1614 => x"160880c3", +1615 => x"ae2e0981", +1616 => x"06fee438", +1617 => x"8c162288", +1618 => x"80075473", +1619 => x"8c172388", +1620 => x"800b80cc", +1621 => x"170cfedc", +1622 => x"39f43d0d", +1623 => x"7e608b11", +1624 => x"70f8065b", +1625 => x"55555d72", +1626 => x"96268338", +1627 => x"90588078", +1628 => x"24747926", +1629 => x"07558054", +1630 => x"74742e09", +1631 => x"810680ca", +1632 => x"387c518e", +1633 => x"a83f7783", +1634 => x"f72680c5", +1635 => x"3877832a", +1636 => x"70101010", +1637 => x"80d7a805", +1638 => x"8c110858", +1639 => x"58547577", +1640 => x"2e81f038", +1641 => x"841608fc", +1642 => x"068c1708", +1643 => x"88180871", +1644 => x"8c120c88", +1645 => x"120c5b76", +1646 => x"05841108", +1647 => x"81078412", +1648 => x"0c537c51", +1649 => x"8de83f88", +1650 => x"16547380", +1651 => x"0c8e3d0d", +1652 => x"0477892a", +1653 => x"78832a58", +1654 => x"5473802e", +1655 => x"bf387786", +1656 => x"2ab80557", +1657 => x"847427b4", +1658 => x"3880db14", +1659 => x"57947427", +1660 => x"ab38778c", +1661 => x"2a80ee05", +1662 => x"5780d474", +1663 => x"279e3877", +1664 => x"8f2a80f7", +1665 => x"055782d4", +1666 => x"74279138", +1667 => x"77922a80", +1668 => x"fc05578a", +1669 => x"d4742784", +1670 => x"3880fe57", +1671 => x"76101010", +1672 => x"80d7a805", +1673 => x"8c110856", +1674 => x"5374732e", +1675 => x"a3388415", +1676 => x"08fc0670", +1677 => x"79315556", +1678 => x"738f2488", +1679 => x"e4387380", +1680 => x"2588e638", +1681 => x"8c150855", +1682 => x"74732e09", +1683 => x"8106df38", +1684 => x"81175980", +1685 => x"d7b80856", +1686 => x"7580d7b0", +1687 => x"2e82cc38", +1688 => x"841608fc", +1689 => x"06707931", +1690 => x"5555738f", +1691 => x"24bb3880", +1692 => x"d7b00b80", +1693 => x"d7bc0c80", +1694 => x"d7b00b80", +1695 => x"d7b80c80", +1696 => x"742480db", +1697 => x"38741684", +1698 => x"11088107", +1699 => x"84120c53", +1700 => x"feb03988", +1701 => x"168c1108", +1702 => x"57597579", +1703 => x"2e098106", +1704 => x"fe823882", +1705 => x"1459ffab", +1706 => x"39771678", +1707 => x"81078418", +1708 => x"0c7080d7", +1709 => x"bc0c7080", +1710 => x"d7b80c80", +1711 => x"d7b00b8c", +1712 => x"120c8c11", +1713 => x"0888120c", +1714 => x"74810784", +1715 => x"120c7405", +1716 => x"74710c5b", +1717 => x"7c518bd6", +1718 => x"3f881654", +1719 => x"fdec3983", +1720 => x"ff752783", +1721 => x"91387489", +1722 => x"2a75832a", +1723 => x"54547380", +1724 => x"2ebf3874", +1725 => x"862ab805", +1726 => x"53847427", +1727 => x"b43880db", +1728 => x"14539474", +1729 => x"27ab3874", +1730 => x"8c2a80ee", +1731 => x"055380d4", +1732 => x"74279e38", +1733 => x"748f2a80", +1734 => x"f7055382", +1735 => x"d4742791", +1736 => x"3874922a", +1737 => x"80fc0553", +1738 => x"8ad47427", +1739 => x"843880fe", +1740 => x"53721010", +1741 => x"1080d7a8", +1742 => x"05881108", +1743 => x"55577377", +1744 => x"2e868b38", +1745 => x"841408fc", +1746 => x"065b747b", +1747 => x"278d3888", +1748 => x"14085473", +1749 => x"772e0981", +1750 => x"06ea388c", +1751 => x"140880d7", +1752 => x"a80b8405", +1753 => x"08718c19", +1754 => x"0c758819", +1755 => x"0c778813", +1756 => x"0c5c5775", +1757 => x"8c150c78", +1758 => x"53807924", +1759 => x"83983872", +1760 => x"822c8171", +1761 => x"2b565674", +1762 => x"7b2680ca", +1763 => x"387a7506", +1764 => x"577682a3", +1765 => x"3878fc06", +1766 => x"84055974", +1767 => x"10707c06", +1768 => x"55557382", +1769 => x"92388419", +1770 => x"59f13980", +1771 => x"d7a80b84", +1772 => x"05087954", +1773 => x"5b788025", +1774 => x"c63882da", +1775 => x"3974097b", +1776 => x"067080d7", +1777 => x"a80b8405", +1778 => x"0c5b7410", +1779 => x"55747b26", +1780 => x"85387485", +1781 => x"bc3880d7", +1782 => x"a80b8805", +1783 => x"08708412", +1784 => x"08fc0670", +1785 => x"7b317b72", +1786 => x"268f7225", +1787 => x"075d575c", +1788 => x"5c557880", +1789 => x"2e80d938", +1790 => x"791580d7", +1791 => x"a0081990", +1792 => x"11595456", +1793 => x"80d79c08", +1794 => x"ff2e8838", +1795 => x"a08f13e0", +1796 => x"80065776", +1797 => x"527c5189", +1798 => x"963f8008", +1799 => x"548008ff", +1800 => x"2e903880", +1801 => x"08762782", +1802 => x"a7387480", +1803 => x"d7a82e82", +1804 => x"9f3880d7", +1805 => x"a80b8805", +1806 => x"08558415", +1807 => x"08fc0670", +1808 => x"79317972", +1809 => x"268f7225", +1810 => x"075d555a", +1811 => x"7a83f238", +1812 => x"77810784", +1813 => x"160c7715", +1814 => x"7080d7a8", +1815 => x"0b88050c", +1816 => x"74810784", +1817 => x"120c567c", +1818 => x"5188c33f", +1819 => x"88155473", +1820 => x"800c8e3d", +1821 => x"0d047483", +1822 => x"2a705454", +1823 => x"80742481", +1824 => x"9b387282", +1825 => x"2c81712b", +1826 => x"80d7ac08", +1827 => x"077080d7", +1828 => x"a80b8405", +1829 => x"0c751010", +1830 => x"1080d7a8", +1831 => x"05881108", +1832 => x"718c1b0c", +1833 => x"70881b0c", +1834 => x"7988130c", +1835 => x"57555c55", +1836 => x"758c150c", +1837 => x"fdc13978", +1838 => x"79101010", +1839 => x"80d7a805", +1840 => x"70565b5c", +1841 => x"8c140856", +1842 => x"75742ea3", +1843 => x"38841608", +1844 => x"fc067079", +1845 => x"31585376", +1846 => x"8f2483f1", +1847 => x"38768025", +1848 => x"84af388c", +1849 => x"16085675", +1850 => x"742e0981", +1851 => x"06df3888", +1852 => x"14811a70", +1853 => x"8306555a", +1854 => x"5472c938", +1855 => x"7b830656", +1856 => x"75802efd", +1857 => x"b838ff1c", +1858 => x"f81b5b5c", +1859 => x"881a087a", +1860 => x"2eea38fd", +1861 => x"b5398319", +1862 => x"53fce439", +1863 => x"83147082", +1864 => x"2c81712b", +1865 => x"80d7ac08", +1866 => x"077080d7", +1867 => x"a80b8405", +1868 => x"0c761010", +1869 => x"1080d7a8", +1870 => x"05881108", +1871 => x"718c1c0c", +1872 => x"70881c0c", +1873 => x"7a88130c", +1874 => x"58535d56", +1875 => x"53fee139", +1876 => x"80d6ec08", +1877 => x"17598008", +1878 => x"762e818b", +1879 => x"3880d79c", +1880 => x"08ff2e84", +1881 => x"8e387376", +1882 => x"311980d6", +1883 => x"ec0c7387", +1884 => x"06705653", +1885 => x"72802e88", +1886 => x"38887331", +1887 => x"70155555", +1888 => x"76149fff", +1889 => x"06a08071", +1890 => x"31167054", +1891 => x"7e535153", +1892 => x"869d3f80", +1893 => x"08568008", +1894 => x"ff2e819e", +1895 => x"3880d6ec", +1896 => x"08137080", +1897 => x"d6ec0c74", +1898 => x"7580d7a8", +1899 => x"0b88050c", +1900 => x"77763115", +1901 => x"81075556", +1902 => x"597a80d7", +1903 => x"a82e83c0", +1904 => x"38798f26", +1905 => x"82ef3881", +1906 => x"0b84150c", +1907 => x"841508fc", +1908 => x"06707931", +1909 => x"7972268f", +1910 => x"7225075d", +1911 => x"555a7a80", +1912 => x"2efced38", +1913 => x"80db3980", +1914 => x"089fff06", +1915 => x"5574feed", +1916 => x"387880d6", +1917 => x"ec0c80d7", +1918 => x"a80b8805", +1919 => x"087a1881", +1920 => x"0784120c", +1921 => x"5580d798", +1922 => x"08792786", +1923 => x"387880d7", +1924 => x"980c80d7", +1925 => x"94087927", +1926 => x"fca03878", +1927 => x"80d7940c", +1928 => x"841508fc", +1929 => x"06707931", +1930 => x"7972268f", +1931 => x"7225075d", +1932 => x"555a7a80", +1933 => x"2efc9938", +1934 => x"88398074", +1935 => x"5753fedd", +1936 => x"397c5184", +1937 => x"e93f800b", +1938 => x"800c8e3d", +1939 => x"0d048073", +1940 => x"24a53872", +1941 => x"822c8171", +1942 => x"2b80d7ac", +1943 => x"08077080", +1944 => x"d7a80b84", +1945 => x"050c5c5a", +1946 => x"768c170c", +1947 => x"7388170c", +1948 => x"7588180c", +1949 => x"f9fd3983", +1950 => x"1370822c", +1951 => x"81712b80", +1952 => x"d7ac0807", +1953 => x"7080d7a8", +1954 => x"0b84050c", +1955 => x"5d5b53d8", +1956 => x"397a7506", +1957 => x"5c7bfc9f", +1958 => x"38841975", +1959 => x"105659f1", +1960 => x"39ff1781", +1961 => x"0559f7ab", +1962 => x"398c1508", +1963 => x"88160871", +1964 => x"8c120c88", +1965 => x"120c5975", +1966 => x"15841108", +1967 => x"81078412", +1968 => x"0c587c51", +1969 => x"83e83f88", +1970 => x"1554fba3", +1971 => x"39771678", +1972 => x"81078418", +1973 => x"0c8c1708", +1974 => x"88180871", +1975 => x"8c120c88", +1976 => x"120c5c70", +1977 => x"80d7bc0c", +1978 => x"7080d7b8", +1979 => x"0c80d7b0", +1980 => x"0b8c120c", +1981 => x"8c110888", +1982 => x"120c7781", +1983 => x"0784120c", +1984 => x"77057771", +1985 => x"0c557c51", +1986 => x"83a43f88", +1987 => x"1654f5ba", +1988 => x"39721684", +1989 => x"11088107", +1990 => x"84120c58", +1991 => x"8c160888", +1992 => x"1708718c", +1993 => x"120c8812", +1994 => x"0c577c51", +1995 => x"83803f88", +1996 => x"1654f596", +1997 => x"39728415", +1998 => x"0cf41af8", +1999 => x"0670841d", +2000 => x"08810607", +2001 => x"841d0c70", +2002 => x"1c555685", +2003 => x"0b84150c", +2004 => x"850b8815", +2005 => x"0c8f7627", +2006 => x"fdab3888", +2007 => x"1b527c51", +2008 => x"ebe83f80", +2009 => x"d7a80b88", +2010 => x"050880d6", +2011 => x"ec085a55", +2012 => x"fd933978", +2013 => x"80d6ec0c", +2014 => x"7380d79c", +2015 => x"0cfbef39", +2016 => x"7284150c", +2017 => x"fcff39fb", +2018 => x"3d0d7770", +2019 => x"7a7c5855", +2020 => x"53568f75", +2021 => x"2780e638", +2022 => x"72760783", +2023 => x"06517080", +2024 => x"dc387573", +2025 => x"52547070", +2026 => x"84055208", +2027 => x"74708405", +2028 => x"560c7371", +2029 => x"70840553", +2030 => x"08717084", +2031 => x"05530c71", +2032 => x"70840553", +2033 => x"08717084", +2034 => x"05530c71", +2035 => x"70840553", +2036 => x"08717084", +2037 => x"05530cf0", +2038 => x"16565474", +2039 => x"8f26c738", +2040 => x"83752795", +2041 => x"38707084", +2042 => x"05520874", +2043 => x"70840556", +2044 => x"0cfc1555", +2045 => x"748326ed", +2046 => x"38737154", +2047 => x"52ff1551", +2048 => x"70ff2e98", +2049 => x"38727081", +2050 => x"05543372", +2051 => x"70810554", +2052 => x"34ff1151", +2053 => x"70ff2e09", +2054 => x"8106ea38", +2055 => x"75800c87", +2056 => x"3d0d04fb", +2057 => x"3d0d777a", +2058 => x"71028c05", +2059 => x"a3053358", +2060 => x"54545683", +2061 => x"732780d4", +2062 => x"38758306", +2063 => x"517080cc", +2064 => x"3874882b", +2065 => x"75077071", +2066 => x"902b0755", +2067 => x"518f7327", +2068 => x"a7387372", +2069 => x"70840554", +2070 => x"0c717471", +2071 => x"70840553", +2072 => x"0c747170", +2073 => x"8405530c", +2074 => x"74717084", +2075 => x"05530cf0", +2076 => x"14545272", +2077 => x"8f26db38", +2078 => x"83732790", +2079 => x"38737270", +2080 => x"8405540c", +2081 => x"fc135372", +2082 => x"8326f238", +2083 => x"ff135170", +2084 => x"ff2e9338", +2085 => x"74727081", +2086 => x"055434ff", +2087 => x"115170ff", +2088 => x"2e098106", +2089 => x"ef387580", +2090 => x"0c873d0d", +2091 => x"04040470", +2092 => x"70707080", +2093 => x"0b80dfe4", +2094 => x"0c765184", +2095 => x"f33f8008", +2096 => x"538008ff", +2097 => x"2e893872", +2098 => x"800c5050", +2099 => x"50500480", +2100 => x"dfe40854", +2101 => x"73802eef", +2102 => x"38757471", +2103 => x"0c527280", +2104 => x"0c505050", +2105 => x"5004f93d", +2106 => x"0d797c55", +2107 => x"7b548e11", +2108 => x"2270902b", +2109 => x"70902c55", +2110 => x"5780cfec", +2111 => x"08535856", +2112 => x"83f63f80", +2113 => x"0857800b", +2114 => x"80082493", +2115 => x"3880d016", +2116 => x"08800805", +2117 => x"80d0170c", +2118 => x"76800c89", +2119 => x"3d0d048c", +2120 => x"162283df", +2121 => x"ff065574", +2122 => x"8c172376", +2123 => x"800c893d", +2124 => x"0d04fa3d", +2125 => x"0d788c11", +2126 => x"2270882a", +2127 => x"70810651", +2128 => x"57585674", +2129 => x"a9388c16", +2130 => x"2283dfff", +2131 => x"0655748c", +2132 => x"17237a54", +2133 => x"79538e16", +2134 => x"2270902b", +2135 => x"70902c54", +2136 => x"5680cfec", +2137 => x"08525681", +2138 => x"b23f883d", +2139 => x"0d048254", +2140 => x"80538e16", +2141 => x"2270902b", +2142 => x"70902c54", +2143 => x"5680cfec", +2144 => x"08525782", +2145 => x"bb3f8c16", +2146 => x"2283dfff", +2147 => x"0655748c", +2148 => x"17237a54", +2149 => x"79538e16", +2150 => x"2270902b", +2151 => x"70902c54", +2152 => x"5680cfec", +2153 => x"08525680", +2154 => x"f23f883d", +2155 => x"0d04f93d", +2156 => x"0d797c55", +2157 => x"7b548e11", +2158 => x"2270902b", +2159 => x"70902c55", +2160 => x"5780cfec", +2161 => x"08535856", +2162 => x"81f63f80", +2163 => x"08578008", +2164 => x"ff2e9938", +2165 => x"8c1622a0", +2166 => x"80075574", +2167 => x"8c172380", +2168 => x"0880d017", +2169 => x"0c76800c", +2170 => x"893d0d04", +2171 => x"8c162283", +2172 => x"dfff0655", +2173 => x"748c1723", +2174 => x"76800c89", +2175 => x"3d0d0470", +2176 => x"7070748e", +2177 => x"11227090", +2178 => x"2b70902c", +2179 => x"55515153", +2180 => x"80cfec08", +2181 => x"51bd3f50", +2182 => x"505004fb", +2183 => x"3d0d800b", +2184 => x"80dfe40c", +2185 => x"7a537952", +2186 => x"785182fc", +2187 => x"3f800855", +2188 => x"8008ff2e", +2189 => x"88387480", +2190 => x"0c873d0d", +2191 => x"0480dfe4", +2192 => x"08567580", +2193 => x"2ef03877", +2194 => x"76710c54", +2195 => x"74800c87", +2196 => x"3d0d0470", +2197 => x"70707080", +2198 => x"0b80dfe4", +2199 => x"0c765184", +2200 => x"c93f8008", +2201 => x"538008ff", +2202 => x"2e893872", +2203 => x"800c5050", +2204 => x"50500480", +2205 => x"dfe40854", +2206 => x"73802eef", +2207 => x"38757471", +2208 => x"0c527280", +2209 => x"0c505050", +2210 => x"5004fc3d", +2211 => x"0d800b80", +2212 => x"dfe40c78", +2213 => x"52775187", +2214 => x"b03f8008", +2215 => x"548008ff", +2216 => x"2e883873", +2217 => x"800c863d", +2218 => x"0d0480df", +2219 => x"e4085574", +2220 => x"802ef038", +2221 => x"7675710c", +2222 => x"5373800c", +2223 => x"863d0d04", +2224 => x"fb3d0d80", +2225 => x"0b80dfe4", +2226 => x"0c7a5379", +2227 => x"52785184", +2228 => x"8b3f8008", +2229 => x"558008ff", +2230 => x"2e883874", +2231 => x"800c873d", +2232 => x"0d0480df", +2233 => x"e4085675", +2234 => x"802ef038", +2235 => x"7776710c", +2236 => x"5474800c", +2237 => x"873d0d04", +2238 => x"fb3d0d80", +2239 => x"0b80dfe4", +2240 => x"0c7a5379", +2241 => x"52785182", +2242 => x"933f8008", +2243 => x"558008ff", +2244 => x"2e883874", +2245 => x"800c873d", +2246 => x"0d0480df", +2247 => x"e4085675", +2248 => x"802ef038", +2249 => x"7776710c", +2250 => x"5474800c", +2251 => x"873d0d04", +2252 => x"70707080", +2253 => x"dfd80889", +2254 => x"3880dfe8", +2255 => x"0b80dfd8", +2256 => x"0c80dfd8", +2257 => x"08751152", +2258 => x"52ff5370", +2259 => x"87fb8080", +2260 => x"26883870", +2261 => x"80dfd80c", +2262 => x"71537280", +2263 => x"0c505050", +2264 => x"04fd3d0d", +2265 => x"800b80cf", +2266 => x"e0085454", +2267 => x"72812e9b", +2268 => x"387380df", +2269 => x"dc0cc2ae", +2270 => x"3fc1853f", +2271 => x"80dfb052", +2272 => x"8151c3f7", +2273 => x"3f800851", +2274 => x"86bf3f72", +2275 => x"80dfdc0c", +2276 => x"c2943fc0", +2277 => x"eb3f80df", +2278 => x"b0528151", +2279 => x"c3dd3f80", +2280 => x"085186a5", +2281 => x"3f00ff39", +2282 => x"f53d0d7e", +2283 => x"6080dfdc", +2284 => x"08705b58", +2285 => x"5b5b7580", +2286 => x"c238777a", +2287 => x"25a13877", +2288 => x"1b703370", +2289 => x"81ff0658", +2290 => x"5859758a", +2291 => x"2e983876", +2292 => x"81ff0651", +2293 => x"c1af3f81", +2294 => x"18587978", +2295 => x"24e13879", +2296 => x"800c8d3d", +2297 => x"0d048d51", +2298 => x"c19b3f78", +2299 => x"337081ff", +2300 => x"065257c1", +2301 => x"903f8118", +2302 => x"58e03979", +2303 => x"557a547d", +2304 => x"5385528d", +2305 => x"3dfc0551", +2306 => x"c0b83f80", +2307 => x"085685b2", +2308 => x"3f7b8008", +2309 => x"0c75800c", +2310 => x"8d3d0d04", +2311 => x"f63d0d7d", +2312 => x"7f80dfdc", +2313 => x"08705b58", +2314 => x"5a5a7580", +2315 => x"c1387779", +2316 => x"25b338c0", +2317 => x"ab3f8008", +2318 => x"81ff0670", +2319 => x"8d327030", +2320 => x"709f2a51", +2321 => x"51575776", +2322 => x"8a2e80c4", +2323 => x"3875802e", +2324 => x"bf38771a", +2325 => x"56767634", +2326 => x"7651c0a9", +2327 => x"3f811858", +2328 => x"787824cf", +2329 => x"38775675", +2330 => x"800c8c3d", +2331 => x"0d047855", +2332 => x"79547c53", +2333 => x"84528c3d", +2334 => x"fc0551ff", +2335 => x"bfc43f80", +2336 => x"085684be", +2337 => x"3f7a8008", +2338 => x"0c75800c", +2339 => x"8c3d0d04", +2340 => x"771a598a", +2341 => x"79348118", +2342 => x"588d51ff", +2343 => x"bfe73f8a", +2344 => x"51ffbfe1", +2345 => x"3f7756ff", +2346 => x"be39fb3d", +2347 => x"0d80dfdc", +2348 => x"08705654", +2349 => x"73883874", +2350 => x"800c873d", +2351 => x"0d047753", +2352 => x"8352873d", +2353 => x"fc0551ff", +2354 => x"bef83f80", +2355 => x"085483f2", +2356 => x"3f758008", +2357 => x"0c73800c", +2358 => x"873d0d04", +2359 => x"fa3d0d80", +2360 => x"dfdc0880", +2361 => x"2ea3387a", +2362 => x"55795478", +2363 => x"53865288", +2364 => x"3dfc0551", +2365 => x"ffbecb3f", +2366 => x"80085683", +2367 => x"c53f7680", +2368 => x"080c7580", +2369 => x"0c883d0d", +2370 => x"0483b73f", +2371 => x"9d0b8008", +2372 => x"0cff0b80", +2373 => x"0c883d0d", +2374 => x"04f73d0d", +2375 => x"7b7d5b59", +2376 => x"bc538052", +2377 => x"7951f5fb", +2378 => x"3f807056", +2379 => x"57985674", +2380 => x"19703370", +2381 => x"782b7907", +2382 => x"8118f81a", +2383 => x"5a585955", +2384 => x"58847524", +2385 => x"ea38767a", +2386 => x"23841958", +2387 => x"80705657", +2388 => x"98567418", +2389 => x"70337078", +2390 => x"2b790781", +2391 => x"18f81a5a", +2392 => x"58595154", +2393 => x"847524ea", +2394 => x"3876821b", +2395 => x"23881958", +2396 => x"80705657", +2397 => x"98567418", +2398 => x"70337078", +2399 => x"2b790781", +2400 => x"18f81a5a", +2401 => x"58595154", +2402 => x"847524ea", +2403 => x"3876841b", +2404 => x"0c8c1958", +2405 => x"80705657", +2406 => x"98567418", +2407 => x"70337078", +2408 => x"2b790781", +2409 => x"18f81a5a", +2410 => x"58595154", +2411 => x"847524ea", +2412 => x"3876881b", +2413 => x"23901958", +2414 => x"80705657", +2415 => x"98567418", +2416 => x"70337078", +2417 => x"2b790781", +2418 => x"18f81a5a", +2419 => x"58595154", +2420 => x"847524ea", +2421 => x"38768a1b", +2422 => x"23941958", +2423 => x"80705657", +2424 => x"98567418", +2425 => x"70337078", +2426 => x"2b790781", +2427 => x"18f81a5a", +2428 => x"58595154", +2429 => x"847524ea", +2430 => x"38768c1b", +2431 => x"23981958", +2432 => x"80705657", +2433 => x"98567418", +2434 => x"70337078", +2435 => x"2b790781", +2436 => x"18f81a5a", +2437 => x"58595154", +2438 => x"847524ea", +2439 => x"38768e1b", +2440 => x"239c1958", +2441 => x"80705657", +2442 => x"b8567418", +2443 => x"70337078", +2444 => x"2b790781", +2445 => x"18f81a5a", +2446 => x"58595a54", +2447 => x"887524ea", +2448 => x"3876901b", +2449 => x"0c8b3d0d", +2450 => x"04e93d0d", +2451 => x"6a80dfdc", +2452 => x"08575775", +2453 => x"933880c0", +2454 => x"800b8418", +2455 => x"0c75ac18", +2456 => x"0c75800c", +2457 => x"993d0d04", +2458 => x"893d7055", +2459 => x"6a54558a", +2460 => x"52993dff", +2461 => x"bc0551ff", +2462 => x"bbc83f80", +2463 => x"08775375", +2464 => x"5256fd95", +2465 => x"3fbc3f77", +2466 => x"80080c75", +2467 => x"800c993d", +2468 => x"0d04fc3d", +2469 => x"0d815480", +2470 => x"dfdc0888", +2471 => x"3873800c", +2472 => x"863d0d04", +2473 => x"765397b9", +2474 => x"52863dfc", +2475 => x"0551ffbb", +2476 => x"913f8008", +2477 => x"548c3f74", +2478 => x"80080c73", +2479 => x"800c863d", +2480 => x"0d0480cf", +2481 => x"ec08800c", +2482 => x"04f73d0d", +2483 => x"7b80cfec", +2484 => x"0882c811", +2485 => x"085a545a", +2486 => x"77802e80", +2487 => x"da388188", +2488 => x"18841908", +2489 => x"ff058171", +2490 => x"2b595559", +2491 => x"80742480", +2492 => x"ea388074", +2493 => x"24b53873", +2494 => x"822b7811", +2495 => x"88055656", +2496 => x"81801908", +2497 => x"77065372", +2498 => x"802eb638", +2499 => x"78167008", +2500 => x"53537951", +2501 => x"74085372", +2502 => x"2dff14fc", +2503 => x"17fc1779", +2504 => x"812c5a57", +2505 => x"57547380", +2506 => x"25d63877", +2507 => x"085877ff", +2508 => x"ad3880cf", +2509 => x"ec0853bc", +2510 => x"1308a538", +2511 => x"7951f8e5", +2512 => x"3f740853", +2513 => x"722dff14", +2514 => x"fc17fc17", +2515 => x"79812c5a", +2516 => x"57575473", +2517 => x"8025ffa8", +2518 => x"38d13980", +2519 => x"57ff9339", +2520 => x"7251bc13", +2521 => x"0854732d", +2522 => x"7951f8b9", +2523 => x"3f707080", +2524 => x"dfb80bfc", +2525 => x"05700852", +2526 => x"5270ff2e", +2527 => x"9138702d", +2528 => x"fc127008", +2529 => x"525270ff", +2530 => x"2e098106", +2531 => x"f1385050", +2532 => x"0404ffba", +2533 => x"fe3f0400", +2534 => x"00000040", +2535 => x"476f7420", +2536 => x"696e7465", +2537 => x"72727570", +2538 => x"740a0000", +2539 => x"4e6f2069", +2540 => x"6e746572", +2541 => x"72757074", +2542 => x"0a000000", +2543 => x"43000000", +2544 => x"64756d6d", +2545 => x"792e6578", +2546 => x"65000000", +2547 => x"00ffffff", +2548 => x"ff00ffff", +2549 => x"ffff00ff", +2550 => x"ffffff00", +2551 => x"00000000", +2552 => x"00000000", +2553 => x"00000000", +2554 => x"00002fc0", +2555 => x"000027f0", +2556 => x"00000000", +2557 => x"00002a58", +2558 => x"00002ab4", +2559 => x"00002b10", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"00000000", +2568 => x"00000000", +2569 => x"000027bc", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000000", +2597 => x"00000000", +2598 => x"00000001", +2599 => x"330eabcd", +2600 => x"1234e66d", +2601 => x"deec0005", +2602 => x"000b0000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00000000", +2663 => x"00000000", +2664 => x"00000000", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", +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"00000000", +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"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", +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"ffffffff", +2792 => x"00000000", +2793 => x"00020000", +2794 => x"00000000", +2795 => x"00000000", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", +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"000027c0", +3053 => x"ffffffff", +3054 => x"00000000", +3055 => x"ffffffff", +3056 => x"00000000", -- cgit v1.1 From 28011391a8f5ed1cfd5b289ab3a016e4da69f772 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 5 May 2008 18:31:21 +0000 Subject: * added eCos HAL for ZPU zpu/zpu/sw/ecos/repository --- zpu/ChangeLog | 3 + .../current/cdl/phi_opencores_ethmac_drivers.cdl | 127 +++++++ .../current/include/devs_eth_zpu_opencores_phi.inl | 92 ++++++ .../zpu/opencores/phi/current/src/if_opencores.c | 112 +++++++ .../repository/hal/zylin/arch/current/ChangeLog | 39 +++ .../hal/zylin/arch/current/cdl/hal_zylin.cdl | 108 ++++++ .../hal/zylin/arch/current/include/arch.inc | 79 +++++ .../hal/zylin/arch/current/include/basetype.h | 83 +++++ .../hal/zylin/arch/current/include/hal_arch.h | 255 ++++++++++++++ .../hal/zylin/arch/current/include/hal_intr.h | 261 +++++++++++++++ .../hal/zylin/arch/current/include/hal_io.h | 305 +++++++++++++++++ .../hal/zylin/arch/current/src/context.S | 324 ++++++++++++++++++ .../hal/zylin/arch/current/src/hal_misc.c | 177 ++++++++++ .../hal/zylin/arch/current/src/hal_mk_defs.c | 102 ++++++ .../hal/zylin/arch/current/src/vectors.c | 116 +++++++ .../repository/hal/zylin/arch/current/src/zylin.ld | 226 +++++++++++++ .../hal/zylin/zpu/abel/current/ChangeLog | 39 +++ .../zpu/abel/current/cdl/hal_zylin_zpu_abel.cdl | 298 +++++++++++++++++ .../zpu/abel/current/include/hal_platform_ints.h | 79 +++++ .../include/pkgconf/mlt_zylin_zpu_abel_ram.h | 17 + .../include/pkgconf/mlt_zylin_zpu_abel_ram.ldi | 27 ++ .../hal/zylin/zpu/abel/current/include/plf_io.h | 64 ++++ .../zylin/zpu/abel/current/misc/redboot_RAM.ecm | 53 +++ .../hal/zylin/zpu/abel/current/src/abel_misc.c | 61 ++++ .../repository/hal/zylin/zpu/phi/current/ChangeLog | 39 +++ .../zpu/phi/current/cdl/hal_zylin_zpu_phi.cdl | 292 ++++++++++++++++ .../zpu/phi/current/include/hal_platform_ints.h | 81 +++++ .../include/pkgconf/mlt_zylin_zpu_phi_ram.h | 17 + .../include/pkgconf/mlt_zylin_zpu_phi_ram.ldi | 27 ++ .../hal/zylin/zpu/phi/current/include/plf_io.h | 58 ++++ .../hal/zylin/zpu/phi/current/src/phi_misc.c | 72 ++++ .../repository/hal/zylin/zpu/var/current/ChangeLog | 38 +++ .../zylin/zpu/var/current/cdl/hal_zylin_zpu.cdl | 83 +++++ .../hal/zylin/zpu/var/current/include/hal_cache.h | 192 +++++++++++ .../hal/zylin/zpu/var/current/include/hal_diag.h | 90 +++++ .../hal/zylin/zpu/var/current/include/plf_stub.h | 85 +++++ .../hal/zylin/zpu/var/current/include/var_arch.h | 73 ++++ .../hal/zylin/zpu/var/current/include/var_io.h | 73 ++++ .../hal/zylin/zpu/var/current/src/hal_diag.c | 88 +++++ .../hal/zylin/zpu/var/current/src/zpu_misc.c | 252 ++++++++++++++ .../hal/zylin/zpu/zeta/current/ChangeLog | 39 +++ .../zpu/zeta/current/cdl/hal_zylin_zpu_zeta.cdl | 298 +++++++++++++++++ .../zpu/zeta/current/include/hal_platform_ints.h | 79 +++++ .../include/pkgconf/mlt_zylin_zpu_zeta_ram.h | 17 + .../include/pkgconf/mlt_zylin_zpu_zeta_ram.ldi | 27 ++ .../hal/zylin/zpu/zeta/current/include/plf_io.h | 58 ++++ .../zylin/zpu/zeta/current/misc/redboot_RAM.ecm | 53 +++ .../hal/zylin/zpu/zeta/current/src/zeta_misc.c | 64 ++++ .../repository/net/zylin/current/cdl/phi_net.cdl | 56 ++++ .../net/zylin/current/src/phi_network_support.c | 368 +++++++++++++++++++++ zpu/sw/ecos/repository/pkgconf/rules.mak | 210 ++++++++++++ 51 files changed, 5876 insertions(+) create mode 100644 zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/cdl/phi_opencores_ethmac_drivers.cdl create mode 100644 zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/include/devs_eth_zpu_opencores_phi.inl create mode 100644 zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/src/if_opencores.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/ChangeLog create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/cdl/hal_zylin.cdl create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/include/arch.inc create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/include/basetype.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_arch.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_intr.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_io.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/src/context.S create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/src/hal_misc.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/src/hal_mk_defs.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/src/vectors.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/arch/current/src/zylin.ld create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/ChangeLog create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/cdl/hal_zylin_zpu_abel.cdl create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/hal_platform_ints.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.ldi create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/plf_io.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/misc/redboot_RAM.ecm create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/src/abel_misc.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/ChangeLog create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/cdl/hal_zylin_zpu_phi.cdl create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/hal_platform_ints.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.ldi create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/plf_io.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/src/phi_misc.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/ChangeLog create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/cdl/hal_zylin_zpu.cdl create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_cache.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_diag.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/plf_stub.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_arch.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_io.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/hal_diag.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/zpu_misc.c create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/ChangeLog create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/cdl/hal_zylin_zpu_zeta.cdl create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/hal_platform_ints.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.ldi create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/plf_io.h create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/misc/redboot_RAM.ecm create mode 100644 zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/src/zeta_misc.c create mode 100644 zpu/sw/ecos/repository/net/zylin/current/cdl/phi_net.cdl create mode 100644 zpu/sw/ecos/repository/net/zylin/current/src/phi_network_support.c create mode 100644 zpu/sw/ecos/repository/pkgconf/rules.mak diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 3100fdb..8384d0d 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,6 @@ +2008-05-05 Øyvind Harboe + * added eCos HAL for ZPU + zpu/zpu/sw/ecos/repository 2008-05-04 Øyvind Harboe * moved ZPU core files to seperate folder * deleted some obsolete files diff --git a/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/cdl/phi_opencores_ethmac_drivers.cdl b/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/cdl/phi_opencores_ethmac_drivers.cdl new file mode 100644 index 0000000..580890d --- /dev/null +++ b/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/cdl/phi_opencores_ethmac_drivers.cdl @@ -0,0 +1,127 @@ +# ==================================================================== +# +# phi_opencores_ethmac_drivers.cdl +# +# Ethernet drivers - support for Opencores ethermac controller +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Gaisler Research, (Konrad Eisele) +# Contributors: Zylin AS, (Edgar Grimberg) +# Date: 2005-01-20 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI { + + display "PHI opencores ethernet driver" + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_HAL_ZYLIN_ZPU_PHI + + requires CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC + description "Ethernet driver for ethermac in on a Zylin Phi Board." + + include_dir cyg/io + compile -library=libextras.a if_opencores.c + + define_proc { + puts $::cdl_system_header "/***** ethernet driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_OPENCORES_ETHERMAC_INL " + puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_OPENCORES_ETHERMAC_CFG " + puts $::cdl_system_header "/***** ethernet driver proc output end *****/" + } + + # Arguably this should do in the generic package + # but then there is a logic loop so you can never enable it. + + cdl_interface CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_REQUIRED { + display "opencores ethermac driver required" + } + + cdl_component CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0 { + display "Ethernet port 0 driver" + flavor bool + default_value 1 + + implements CYGHWR_NET_DRIVERS + implements CYGHWR_NET_DRIVER_ETH0 + implements CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_REQUIRED + + cdl_option CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0_NAME { + display "Device name for the ethernet driver" + flavor data + default_value {"\"eth0\""} + description " + This option sets the name of the ethernet device for the + ethernet port." + } + + cdl_option CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0_ESA { + display "The ethernet station address (MAC)" + flavor data + default_value {"{0x00, 0x00, 0x5E, 0x21, 0x00, 0x01}"} + description "A static ethernet station address. + Caution: Booting two systems with the same MAC on the same + network, will cause severe conflicts." + } + } + + cdl_component CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_OPTIONS { + display "Opencores ethermac driver build options" + flavor none + no_define + + cdl_option CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the opencores ethermac driver package. + These flags are used in addition + to the set of global flags." + } + } + +} + +# EOF phi_opencores_ethmac_drivers.cdl diff --git a/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/include/devs_eth_zpu_opencores_phi.inl b/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/include/devs_eth_zpu_opencores_phi.inl new file mode 100644 index 0000000..7cfa114 --- /dev/null +++ b/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/include/devs_eth_zpu_opencores_phi.inl @@ -0,0 +1,92 @@ +//========================================================================== +// +// +// +// Opencores ethermac I/O definitions. +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Gaisler Research, (Konrad Eisele) +// Contributors: +// Date: 2000-11-22 +//####DESCRIPTIONEND#### +//========================================================================== + +#include +#include + +#define CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_ETH0_ESA CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0_ESA +#define CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_INITFN openeth_phi_init + +#ifdef CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0 + +//structs and tables for eth0 +static oeth_info openeth_priv; +ETH_DRV_SC(oeth_sc, + &openeth_priv, // Driver specific data + CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0_NAME, // Name for device + openeth_start, + openeth_stop, + openeth_ioctl, + openeth_can_send, + openeth_send, + openeth_recv, + openeth_deliver, + openeth_poll, + openeth_int_vector +); + +NETDEVTAB_ENTRY(oeth_netdev, + "openeth_" CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0_NAME, + openeth_init, + &oeth_sc); +#endif + +#if CYGNUM_DEVS_ETH_OPENCORES_ETHERMAC_DEV_COUNT > 1 +#error Only 1 ethermac at a time supported yet (eth0) +#endif + +oeth_info *openeth_priv_array[CYGNUM_DEVS_ETH_OPENCORES_ETHERMAC_DEV_COUNT] = { +#ifdef CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI_ETH0 + &openeth_priv +#endif +}; + + +//EOF devs_eth_zpu_opencorec_phi.inl + + diff --git a/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/src/if_opencores.c b/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/src/if_opencores.c new file mode 100644 index 0000000..c18caca --- /dev/null +++ b/zpu/sw/ecos/repository/dev/eth/zpu/opencores/phi/current/src/if_opencores.c @@ -0,0 +1,112 @@ +//========================================================================== +// +// +// +// Ethernet device driver for Opencore's ethermac on Zylin Phi +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): Gaisler Research, (Konrad Eisele) +// Contributors: +// Date: 2005-01-20 +// Purpose: +// Description: hardware driver for Opencores ethernet +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include +#ifdef CYGPKG_IO_ETH_DRIVERS +#include +#endif +#include + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CYGPKG_NET +#include +#include +#include /* Needed for struct ifnet */ +#endif + +#include +#include +//#include + +externC void openeth_device_init(struct eth_drv_sc *sc, cyg_uint32 idx, cyg_uint32 base, cyg_uint32 irq); + +bool openeth_phi_init(struct cyg_netdevtab_entry *ndp) +{ + struct eth_drv_sc *sc = (struct eth_drv_sc *)(ndp->device_instance); + +#if !defined(CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_FLUSH) +#error "CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_FLUSH must be 1 for Zylin Phi" +#endif + +#if 0 + int i,j; + amba_ahb_device adev[CYGNUM_DEVS_ETH_OPENCORES_ETHERMAC_DEV_COUNT]; + j = amba_get_free_ahbslv_devices (VENDOR_GAISLER, GAISLER_ETHAHB, adev, CYGNUM_DEVS_ETH_OPENCORES_ETHERMAC_DEV_COUNT); + for (i = 0;i < j;i++) { + openeth_device_init(sc,i,adev[i].start[0],adev[i].irq); + } +#endif + openeth_device_init(sc, 0, 0x080C0000, CYGNUM_HAL_INTERRUPT_ETHERMAC); + return 1; +} diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/ChangeLog b/zpu/sw/ecos/repository/hal/zylin/arch/current/ChangeLog new file mode 100644 index 0000000..6403c63 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/ChangeLog @@ -0,0 +1,39 @@ +2004-11-05 Øyvind Harboe + + * First cut of ZYLIN support + + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/cdl/hal_zylin.cdl b/zpu/sw/ecos/repository/hal/zylin/arch/current/cdl/hal_zylin.cdl new file mode 100644 index 0000000..cecc879 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/cdl/hal_zylin.cdl @@ -0,0 +1,108 @@ +# ==================================================================== +# +# hal_zylin.cdl +# +# ZYLIN architectural HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): bartv +# Original data: gthomas +# Contributors: +# Date: 1999-06-13 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ZYLIN { + display "ZYLIN architecture" + parent CYGPKG_HAL + hardware + include_dir cyg/hal + requires !CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + define_header hal_zylin.h + description " + The ZYLIN architecture HAL package provides generic + support for this processor architecture. It is also + necessary to select a specific target platform HAL + package." + + compile hal_misc.c context.S vectors.c + + # The "-o file" is a workaround for CR100958 - without it the + # output file would end up in the source directory under CygWin. + # n.b. grep does not behave itself under win32 + make -priority 1 { + zylin.inc : /src/hal_mk_defs.c + $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,zylin.tmp -o hal_mk_defs.tmp -S $< + fgrep .equ hal_mk_defs.tmp | sed s/#// > $@ + @echo $@ ": \\" > $(notdir $@).deps + @tail -n +2 zylin.tmp >> $(notdir $@).deps + @echo >> $(notdir $@).deps + @rm zylin.tmp hal_mk_defs.tmp + } + + make { + /lib/vectors.o : /src/vectors.c + $(CC) -Wp,-MD,vectors.tmp $(INCLUDE_PATH) $(CFLAGS) -c -o $@ $< + @echo $@ ": \\" > $(notdir $@).deps + @tail -n +2 vectors.tmp >> $(notdir $@).deps + @echo >> $(notdir $@).deps + @rm vectors.tmp + } + + + make { + /lib/target.ld: /src/zylin.ld + $(CC) -E -P -Wp,-MD,target.tmp -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + @echo $@ ": \\" > $(notdir $@).deps + @tail -n +2 target.tmp >> $(notdir $@).deps + @echo >> $(notdir $@).deps + @rm target.tmp + } + + + cdl_option CYGBLD_LINKER_SCRIPT { + display "Linker script" + flavor data + no_define + calculated { "src/zylin.ld" } + } + +} + +# EOF hal_zylin.cdl diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/include/arch.inc b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/arch.inc new file mode 100644 index 0000000..a30819e --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/arch.inc @@ -0,0 +1,79 @@ +##============================================================================= +## +## arch.inc +## +## ZYLIN architecture assembler header file +## +##============================================================================= +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:jskov +## Date: 2000-11-15 +## Purpose: ZYLIN definitions. +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the ZYLIN +## It also includes the variant/platform assembly header file. +## Usage: +## #include +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include + +##----------------------------------------------------------------------------- +## ZYLIN entry definitions. This allows _ prefixing to change by modifying +## the CYG_LABEL_DEFN macro. + +#define FUNC_START(name) \ + .type CYG_LABEL_DEFN(name),@function; \ + .globl CYG_LABEL_DEFN(name); \ +CYG_LABEL_DEFN(name): + +#define FUNC_END(name) \ + .globl CYG_LABEL_DEFN(name); \ +CYG_LABEL_DEFN(name): + +#define SYM_DEF(name) \ + .globl CYG_LABEL_DEFN(name); \ +CYG_LABEL_DEFN(name): + +#------------------------------------------------------------------------------ +# end of arch.inc diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/include/basetype.h b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/basetype.h new file mode 100644 index 0000000..6f2c2c7 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/basetype.h @@ -0,0 +1,83 @@ +#ifndef CYGONCE_HAL_BASETYPE_H +#define CYGONCE_HAL_BASETYPE_H + +//============================================================================= +// +// basetype.h +// +// Standard types for this architecture. +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1998-09-11 +// Purpose: Define architecture base types. +// Usage: Included by "cyg_type.h", do not use directly + +// +//####DESCRIPTIONEND#### +// + +//----------------------------------------------------------------------------- +// Characterize the architecture + +#define CYG_BYTEORDER CYG_MSBFIRST // Big endian +#define CYG_DOUBLE_BYTEORDER CYG_MSBFIRST // Big? endian + +//----------------------------------------------------------------------------- +// ZYLIN does not usually use labels with underscores. + +#define CYG_LABEL_NAME(_name_) _name_ +#define CYG_LABEL_DEFN(_name_) _name_ + +//----------------------------------------------------------------------------- +// Override the alignment definitions from cyg_type.h. ZYLIN only allows 4 +// byte alignment whereas the default is 8 byte. + +#define CYGARC_ALIGNMENT 4 +#define CYGARC_P2ALIGNMENT 2 + +//----------------------------------------------------------------------------- +// Define the standard variable sizes + +// The ZYLIN architecture uses the default definitions of the base types, +// so we do not need to define any here. + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_BASETYPE_H +// End of basetype.h diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_arch.h b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_arch.h new file mode 100644 index 0000000..cd61277 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_arch.h @@ -0,0 +1,255 @@ +#ifndef CYGONCE_HAL_ARCH_H +#define CYGONCE_HAL_ARCH_H + +//========================================================================== +// +// hal_arch.h +// +// Architecture specific abstractions +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1999-02-20 +// Purpose: Define architecture abstractions +// Usage: #include + +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include // To decide on stack usage +#include +#include +#ifdef CYGBLD_HAL_ZYLIN_PLF_ARCH_H +#include +#endif + +#ifdef CYGBLD_HAL_ZYLIN_VAR_ARCH_H +#include +#endif + + +// It seems that r0-r3,r12 are considered scratch by function calls + +typedef struct +{ + cyg_uint32 reg[8]; + cyg_uint32 interrupt; + cyg_uint32 pc; // must be last... +} HAL_SavedRegisters; + +//------------------------------------------------------------------------- +// Exception handling function. +// This function is defined by the kernel according to this prototype. It is +// invoked from the HAL to deal with any CPU exceptions that the HAL does +// not want to deal with itself. It usually invokes the kernel's exception +// delivery mechanism. + +externC void cyg_hal_deliver_exception( CYG_WORD code, CYG_ADDRWORD data ); + +//------------------------------------------------------------------------- +// Bit manipulation macros + +externC int hal_lsbindex(int); +externC int hal_msbindex(int); + +#define HAL_LSBIT_INDEX(index, mask) index = hal_lsbindex(mask) +#define HAL_MSBIT_INDEX(index, mask) index = hal_msbindex(mask) + +//------------------------------------------------------------------------- +// Context Initialization +// Initialize the context of a thread. +// Arguments: +// _sparg_ name of variable containing current sp, will be changed to new sp +// _thread_ thread object address, passed as argument to entry point +// _entry_ entry point address. +// _id_ bit pattern used in initializing registers, for debugging. + +#define HAL_THREAD_INIT_CONTEXT( _sparg_, _thread_, _entry_, _id_ ) \ + CYG_MACRO_START \ + cyg_uint32 *_sp_=(cyg_uint32 *)(((CYG_WORD)_sparg_) &~3); \ + *--_sp_=(CYG_ADDRWORD)_thread_; \ + *--_sp_=(CYG_ADDRWORD)0xffffffff; /* dummy return address */ \ + *--_sp_=(cyg_uint32)(_entry_); /* PC = [initial] entry point */ \ + *--_sp_= 0; /* interrupt mask */ \ + *--_sp_= (_id_)|7; \ + *--_sp_= (_id_)|6; \ + *--_sp_= (_id_)|5; \ + *--_sp_= (_id_)|4; \ + *--_sp_= (_id_)|3; \ + *--_sp_= (_id_)|2; \ + *--_sp_= (_id_)|1; \ + *--_sp_=(_id_)|0; \ + _sparg_ = (CYG_ADDRWORD)_sp_; \ + CYG_MACRO_END + +//-------------------------------------------------------------------------- +// Context switch macros. +// The arguments are pointers to locations where the stack pointer +// of the current thread is to be stored, and from where the sp of the +// next thread is to be fetched. + +externC void hal_thread_switch_context( CYG_ADDRESS to, CYG_ADDRESS from ); +externC void hal_thread_load_context( CYG_ADDRESS to ) + __attribute__ ((noreturn)); + +#define HAL_THREAD_SWITCH_CONTEXT(_fspptr_,_tspptr_) \ + hal_thread_switch_context((CYG_ADDRESS)_tspptr_, \ + (CYG_ADDRESS)_fspptr_); + +#define HAL_THREAD_LOAD_CONTEXT(_tspptr_) \ + hal_thread_load_context( (CYG_ADDRESS)_tspptr_ ); + +//-------------------------------------------------------------------------- +// Execution reorder barrier. +// When optimizing the compiler can reorder code. In multithreaded systems +// where the order of actions is vital, this can sometimes cause problems. +// This macro may be inserted into places where reordering should not happen. + +#define HAL_REORDER_BARRIER() asm volatile ( "" : : : "memory" ) + +//-------------------------------------------------------------------------- +// Breakpoint support +// HAL_BREAKPOINT() is a code sequence that will cause a breakpoint to happen +// if executed. +// HAL_BREAKINST is the value of the breakpoint instruction and +// HAL_BREAKINST_SIZE is its size in bytes. + +#define _stringify1(__arg) #__arg +#define _stringify(__arg) _stringify1(__arg) + +#define HAL_BREAKINST_ZYLIN 0 +#define HAL_BREAKINST_ZYLIN_SIZE 1 + + +#define HAL_BREAKPOINT(_label_) \ +asm volatile (" .globl " #_label_ ";" \ + #_label_":" \ + " .byte " _stringify(HAL_BREAKINST_ZYLIN) \ + ); + +//#define HAL_BREAKINST {0xFE, 0xDE, 0xFF, 0xE7} +#define HAL_BREAKINST HAL_BREAKINST_ZYLIN +#define HAL_BREAKINST_SIZE HAL_BREAKINST_ZYLIN_SIZE +#define HAL_BREAKINST_TYPE cyg_uint8 + +extern cyg_uint32 __zylin_breakinst; +#define HAL_BREAKINST_ADDR(x) (void*)&__zylin_breakinst) + + +// Translate a stack pointer as saved by the thread context macros above into +// a pointer to a HAL_SavedRegisters structure. +#define HAL_THREAD_GET_SAVED_REGISTERS( _sp_, _regs_ ) \ + (_regs_) = (HAL_SavedRegisters *)(_sp_) + + + +//-------------------------------------------------------------------------- +// HAL setjmp + +#define CYGARC_JMP_BUF_SIZE 16 // Actually 11, but some room left over + +typedef cyg_uint32 hal_jmp_buf[CYGARC_JMP_BUF_SIZE]; + +externC int hal_setjmp(hal_jmp_buf env); +externC void hal_longjmp(hal_jmp_buf env, int val); + + +//-------------------------------------------------------------------------- +// Idle thread code. +// This macro is called in the idle thread loop, and gives the HAL the +// chance to insert code. Typical idle thread behaviour might be to halt the +// processor. Here we only supply a default fallback if the variant/platform +// doesn't define anything. + +#ifndef HAL_IDLE_THREAD_ACTION +#define HAL_IDLE_THREAD_ACTION(_count_) CYG_EMPTY_STATEMENT +#endif + +//--------------------------------------------------------------------------- + +// Minimal and sensible stack sizes: the intention is that applications +// will use these to provide a stack size in the first instance prior to +// proper analysis. Idle thread stack should be this big. + +// THESE ARE NOT INTENDED TO BE MICROMETRICALLY ACCURATE FIGURES. +// THEY ARE HOWEVER ENOUGH TO START PROGRAMMING. +// YOU MUST MAKE YOUR STACKS LARGER IF YOU HAVE LARGE "AUTO" VARIABLES! + +// This is not a config option because it should not be adjusted except +// under "enough rope" sort of disclaimers. + +// A minimal, optimized stack frame, rounded up - no autos +#define CYGNUM_HAL_STACK_FRAME_SIZE (4 * 80) + +// Stack needed for a context switch: this is implicit in the estimate for +// interrupts so not explicitly used below: +#define CYGNUM_HAL_STACK_CONTEXT_SIZE (4 * 80) + +// Interrupt + call to ISR, interrupt_end() and the DSR +#define CYGNUM_HAL_STACK_INTERRUPT_SIZE \ + ((4 * 80) + 2 * CYGNUM_HAL_STACK_FRAME_SIZE) + +// Space for the maximum number of nested interrupts, plus room to call functions +#define CYGNUM_HAL_MAX_INTERRUPT_NESTING 16 + +#if 0 +#define CYGNUM_HAL_STACK_SIZE_MINIMUM + (CYGNUM_HAL_MAX_INTERRUPT_NESTING * CYGNUM_HAL_STACK_INTERRUPT_SIZE + \ + 2 * CYGNUM_HAL_STACK_FRAME_SIZE) + +#define CYGNUM_HAL_STACK_SIZE_TYPICAL \ + (CYGNUM_HAL_STACK_SIZE_MINIMUM + \ + 16 * CYGNUM_HAL_STACK_FRAME_SIZE) +#else +#define CYGNUM_HAL_STACK_SIZE_MINIMUM 16384 // KLUDGE!!! until interrupt stacks can be added + +#define CYGNUM_HAL_STACK_SIZE_TYPICAL 32768 // KLUDGE!!! until interrupt stacks can be added + +#endif + +//-------------------------------------------------------------------------- +// Macros for switching context between two eCos instances (jump from +// code in ROM to code in RAM or vice versa). +#define CYGARC_HAL_SAVE_GP() +#define CYGARC_HAL_RESTORE_GP() + +#endif // CYGONCE_HAL_ARCH_H +// End of hal_arch.h diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_intr.h b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_intr.h new file mode 100644 index 0000000..6ec6070 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_intr.h @@ -0,0 +1,261 @@ +#ifndef CYGONCE_HAL_INTR_H +#define CYGONCE_HAL_INTR_H + +//========================================================================== +// +// hal_intr.h +// +// HAL Interrupt and clock support +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas, +// jlzylinour +// Date: 1999-02-20 +// Purpose: Define Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock. +// +// Usage: #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include + +#include + +// This is to allow a variant to decide that there is no platform-specific +// interrupts file; and that in turn can be overridden by a platform that +// refines the variant's ideas. +#ifdef CYGBLD_HAL_PLF_INTS_H +# include CYGBLD_HAL_PLF_INTS_H // should include variant data as required +#else +# ifdef CYGBLD_HAL_VAR_INTS_H +# include CYGBLD_HAL_VAR_INTS_H +# else +# include // default less-complex platforms +# endif +#endif + +// Spurious interrupt (no interrupt source could be found) +#define CYGNUM_HAL_INTERRUPT_NONE -1 + +//-------------------------------------------------------------------------- +// ZYLIN exception vectors. + +// These vectors correspond to VSRs. These values are the ones to use for +// HAL_VSR_GET/SET + +#define CYGNUM_HAL_VECTOR_RESET 0 +#define CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION 1 +#define CYGNUM_HAL_VECTOR_MISC 2 +#define CYGNUM_HAL_VECTOR_IRQ 3 +#define CYGNUM_HAL_VECTOR_MEMORY 4 + +#define CYGNUM_HAL_VSR_MIN 0 +#define CYGNUM_HAL_VSR_MAX 4 +#define CYGNUM_HAL_VSR_COUNT 5 + +// Exception vectors. These are the values used when passed out to an +// external exception handler using cyg_hal_deliver_exception() + +#define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION \ + CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION +#define CYGNUM_HAL_EXCEPTION_INTERRUPT \ + CYGNUM_HAL_VECTOR_SOFTWARE_INTERRUPT +#define CYGNUM_HAL_EXCEPTION_CODE_ACCESS CYGNUM_HAL_VECTOR_MEMORY +#define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_MEMORY + +#define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_VSR_MIN +#define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_VSR_MAX +#define CYGNUM_HAL_EXCEPTION_COUNT (CYGNUM_HAL_EXCEPTION_MAX - \ + CYGNUM_HAL_EXCEPTION_MIN + 1) + +//-------------------------------------------------------------------------- +// Static data used by HAL + +// ISR tables + +externC CYG_ADDRESS hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT]; +externC CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT]; +externC CYG_ADDRESS hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT]; + +// VSR table +externC CYG_ADDRESS hal_vsr_table[CYGNUM_HAL_VSR_COUNT]; + +//-------------------------------------------------------------------------- +// Default ISR +// The #define is used to test whether this routine exists, and to allow +// code outside the HAL to call it. + +externC cyg_uint32 hal_default_isr(cyg_uint32 vector, CYG_ADDRWORD data); + +#define HAL_DEFAULT_ISR hal_default_isr + +//-------------------------------------------------------------------------- +// Interrupt state storage + +typedef cyg_uint32 CYG_INTERRUPT_STATE; + +//-------------------------------------------------------------------------- +// Interrupt control macros + +externC cyg_uint32 zpu_disable_interrupts(); +externC void zpu_enable_interrupts(); +externC void zpu_restore_interrupts(cyg_uint32); +externC cyg_uint32 zpu_query_interrupts(); + +#define HAL_DISABLE_INTERRUPTS(_old_) {_old_=zpu_disable_interrupts();} +#define HAL_ENABLE_INTERRUPTS() zpu_enable_interrupts() +#define HAL_RESTORE_INTERRUPTS(_old_) { zpu_restore_interrupts(_old_); } +#define HAL_QUERY_INTERRUPTS(_old_) { _old_=zpu_query_interrupts(); } + + +//-------------------------------------------------------------------------- +// Vector translation. + +#ifndef HAL_TRANSLATE_VECTOR +#define HAL_TRANSLATE_VECTOR(_vector_,_index_) \ + (_index_) = (_vector_) +#endif + +//-------------------------------------------------------------------------- +// Interrupt and VSR attachment macros + +#define HAL_INTERRUPT_IN_USE( _vector_, _state_) \ + CYG_MACRO_START \ + cyg_uint32 _index_; \ + HAL_TRANSLATE_VECTOR ((_vector_), _index_); \ + \ + if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)hal_default_isr ) \ + (_state_) = 0; \ + else \ + (_state_) = 1; \ + CYG_MACRO_END + +#define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ ) \ + CYG_MACRO_START \ + if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)hal_default_isr ) \ + { \ + hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)_isr_; \ + hal_interrupt_data[_vector_] = (CYG_ADDRWORD) _data_; \ + hal_interrupt_objects[_vector_] = (CYG_ADDRESS)_object_; \ + } \ + CYG_MACRO_END + +#define HAL_INTERRUPT_DETACH( _vector_, _isr_ ) \ + CYG_MACRO_START \ + if( hal_interrupt_handlers[_vector_] == (CYG_ADDRESS)_isr_ ) \ + { \ + hal_interrupt_handlers[_vector_] = (CYG_ADDRESS)hal_default_isr; \ + hal_interrupt_data[_vector_] = 0; \ + hal_interrupt_objects[_vector_] = 0; \ + } \ + CYG_MACRO_END + +#define HAL_VSR_GET( _vector_, _pvsr_ ) \ + *(CYG_ADDRESS *)(_pvsr_) = hal_vsr_table[_vector_]; + + +#define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ ) \ + CYG_MACRO_START \ + if( _poldvsr_ != NULL ) \ + *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_]; \ + hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_; \ + CYG_MACRO_END + +//-------------------------------------------------------------------------- +// Interrupt controller access + +externC void hal_interrupt_mask(int); +externC void hal_interrupt_unmask(int); +externC void hal_interrupt_acknowledge(int); +externC void hal_interrupt_configure(int, int, int); +externC void hal_interrupt_set_level(int, int); + +#define HAL_INTERRUPT_MASK( _vector_ ) \ + hal_interrupt_mask( _vector_ ) +#define HAL_INTERRUPT_UNMASK( _vector_ ) \ + hal_interrupt_unmask( _vector_ ) +#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \ + hal_interrupt_acknowledge( _vector_ ) +#define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) \ + hal_interrupt_configure( _vector_, _level_, _up_ ) +#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \ + hal_interrupt_set_level( _vector_, _level_ ) + +//-------------------------------------------------------------------------- +// Clock control + +externC void hal_clock_initialize(cyg_uint32); +externC void hal_clock_read(cyg_uint32 *); +externC void hal_clock_reset(cyg_uint32, cyg_uint32); + +#define HAL_CLOCK_INITIALIZE( _period_ ) hal_clock_initialize( _period_ ) +#define HAL_CLOCK_RESET( _vec_, _period_ ) hal_clock_reset( _vec_, _period_ ) +#define HAL_CLOCK_READ( _pvalue_ ) hal_clock_read( _pvalue_ ) +#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY +# ifndef HAL_CLOCK_LATENCY +# define HAL_CLOCK_LATENCY( _pvalue_ ) HAL_CLOCK_READ( (cyg_uint32 *)_pvalue_ ) +# endif +#endif + + +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK +externC void hal_interrupt_stack_call_pending_DSRs(void); +#define HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() \ + hal_interrupt_stack_call_pending_DSRs() + +// these are offered solely for stack usage testing +// if they are not defined, then there is no interrupt stack. +#define HAL_INTERRUPT_STACK_BASE cyg_interrupt_stack_base +#define HAL_INTERRUPT_STACK_TOP cyg_interrupt_stack +// use them to declare these extern however you want: +// extern char HAL_INTERRUPT_STACK_BASE[]; +// extern char HAL_INTERRUPT_STACK_TOP[]; +// is recommended +#endif + + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_INTR_H +// End of hal_intr.h diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_io.h b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_io.h new file mode 100644 index 0000000..64ad695 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/include/hal_io.h @@ -0,0 +1,305 @@ +#ifndef CYGONCE_HAL_IO_H +#define CYGONCE_HAL_IO_H + +//============================================================================= +// +// hal_io.h +// +// HAL device IO register support. +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: Fabrice Gautier +// Date: 1998-09-11 +// Purpose: Define IO register support +// Description: The macros defined here provide the HAL APIs for handling +// device IO control registers. +// +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +#include + +//----------------------------------------------------------------------------- +// Include plf_io.h for platforms. Either via var_io.h or directly. +#ifdef CYGBLD_HAL_ZYLIN_VAR_IO_H +#include +#else +#include +#endif + + +//----------------------------------------------------------------------------- +// IO Register address. +// This type is for recording the address of an IO register. + +typedef volatile CYG_ADDRWORD HAL_IO_REGISTER; + +//----------------------------------------------------------------------------- +// HAL IO macros. +#ifndef HAL_IO_MACROS_DEFINED + +//----------------------------------------------------------------------------- +// BYTE Register access. +// Individual and vectorized access to 8 bit registers. + +// Little-endian version or big-endian version that doesn't need address munging +#if (CYG_BYTEORDER == CYG_LSBFIRST) || defined(HAL_IO_MACROS_NO_ADDRESS_MUNGING) + +#define HAL_READ_UINT8( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_BYTE *)(_register_))) + +#define HAL_WRITE_UINT8( _register_, _value_ ) \ + (*((volatile CYG_BYTE *)(_register_)) = (_value_)) + +#define HAL_READ_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = ((volatile CYG_BYTE *)(_register_))[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + ((volatile CYG_BYTE *)(_register_))[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#define HAL_READ_UINT8_STRING( _register_, _buf_, _count_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + for( _i_ = 0; _i_ < (_count_); _i_++) \ + (_buf_)[_i_] = ((volatile CYG_BYTE *)(_register_))[_i_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT8_STRING( _register_, _buf_, _count_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + for( _i_ = 0; _i_ < (_count_); _i_++) \ + ((volatile CYG_BYTE *)(_register_)) = (_buf_)[_i_]; \ + CYG_MACRO_END + +#else // Big-endian version + +#define HAL_READ_UINT8( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_BYTE *)((CYG_ADDRWORD)(_register_)^3))) + +#define HAL_WRITE_UINT8( _register_, _value_ ) \ + (*((volatile CYG_BYTE *)((CYG_ADDRWORD)(_register_)^3)) = (_value_)) + +#define HAL_READ_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = _r_[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + _r_[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#define HAL_READ_UINT8_STRING( _register_, _buf_, _count_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0; _i_ < (_count_); _i_++; \ + (_buf_)[_i_] = _r_[_i_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT8_STRING( _register_, _buf_, _count_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0; _i_ < (_count_); _i_++) \ + _r_[_i_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#endif // Big-endian + +//----------------------------------------------------------------------------- +// 16 bit access. +// Individual and vectorized access to 16 bit registers. + +// Little-endian version or big-endian version that doesn't need address munging +#if (CYG_BYTEORDER == CYG_LSBFIRST) || defined(HAL_IO_MACROS_NO_ADDRESS_MUNGING) + +#define HAL_READ_UINT16( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_WORD16 *)(_register_))) + +#define HAL_WRITE_UINT16( _register_, _value_ ) \ + (*((volatile CYG_WORD16 *)(_register_)) = (_value_)) + +#define HAL_READ_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = ((volatile CYG_WORD16 *)(_register_))[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + ((volatile CYG_WORD16 *)(_register_))[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#define HAL_READ_UINT16_STRING( _register_, _buf_, _count_) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + for( _i_ = 0; _i_ < (_count_); _i_++) \ + (_buf_)[_i_] = ((volatile CYG_WORD16 *)(_register_))[_i_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT16_STRING( _register_, _buf_, _count_) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + for( _i_ = 0; _i_ < (_count_); _i_++) \ + ((volatile CYG_WORD16 *)(_register_))[_i_] = (_buf_)[_i_]; \ + CYG_MACRO_END + + +#else // Big-endian version + +#define HAL_READ_UINT16( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_WORD16 *)((CYG_ADDRWORD)(_register_)^3))) + +#define HAL_WRITE_UINT16( _register_, _value_ ) \ + (*((volatile CYG_WORD16 *)((CYG_ADDRWORD)(_register_)^3)) = (_value_)) + +#define HAL_READ_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = _r_[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + _r_[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#define HAL_READ_UINT16_STRING( _register_, _buf_, _count_) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0 = 0; _i_ < (_count_); _i_++) \ + (_buf_)[_i_] = _r_[_i_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT16_STRING( _register_, _buf_, _count_) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0 = 0; _i_ < (_count_); _i_++) \ + _r_[_i_] = (_buf_)[_i_]; \ + CYG_MACRO_END + + +#endif // Big-endian + +//----------------------------------------------------------------------------- +// 32 bit access. +// Individual and vectorized access to 32 bit registers. + +// Note: same macros for little- and big-endian systems. + +#define HAL_READ_UINT32( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_WORD32 *)(_register_))) + +#define HAL_WRITE_UINT32( _register_, _value_ ) \ + (*((volatile CYG_WORD32 *)(_register_)) = (_value_)) + +#define HAL_READ_UINT32_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = ((volatile CYG_WORD32 *)(_register_))[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT32_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + ((volatile CYG_WORD32 *)(_register_))[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#define HAL_READ_UINT32_STRING( _register_, _buf_, _count_) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + for( _i_ = 0; _i_ < (_count_); _i_++) \ + (_buf_)[_i_] = ((volatile CYG_WORD32 *)(_register_))[_i_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT32_STRING( _register_, _buf_, _count_) \ + CYG_MACRO_START \ + cyg_count32 _i_; \ + for( _i_ = 0; _i_ < (_count_); _i_++) \ + ((volatile CYG_WORD32 *)(_register_))[_i_] = (_buf_)[_i_]; \ + CYG_MACRO_END + + +#define HAL_IO_MACROS_DEFINED + +#endif // !HAL_IO_MACROS_DEFINED + +// Enforce a flow "barrier" to prevent optimizing compiler from reordering +// operations. +#define HAL_IO_BARRIER() + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_IO_H +// End of hal_io.h diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/src/context.S b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/context.S new file mode 100644 index 0000000..6b0b833 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/context.S @@ -0,0 +1,324 @@ +// #=========================================================================== +// # +// # context.S +// # +// # ZYLIN context switch code +// # +// #=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +// #=========================================================================== +// ######DESCRIPTIONBEGIN#### +// # +// # Author(s): nickg, gthomas +// # Contributors: nickg, gthomas +// # Date: 1998-09-15 +// # Purpose: ZYLIN context switch code +// # Description: This file contains implementations of the thread context +// # switch routines. It also contains the longjmp() and setjmp() +// # routines. +// # +// #####DESCRIPTIONEND#### +// # +// #=========================================================================== + +#include +#ifdef CYGPKG_KERNEL // no CDL yet +#include +#else +# undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT +# undef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK +#endif + + + + +#include "zylin.inc" + + .text + + +;; By using a macro, we get multiple breakpoint sites + .macro LOAD_STATE + popsp + ; stack pointer now points to beginning of HAL_SavedRegisters + ; we now pop the state of the CPU + + ; this will restore r0-r3 + im 0 + store + im 4 + store + im 8 + store + im 12 + store + im 16 + store + im 20 + store + im 24 + store + im 28 + store + + ;; restore interrupts + im INTERRUPT_MASK + load + store + + + .endm + + +// ---------------------------------------------------------------------------- +// hal_thread_switch_context +// Switch thread contexts + + + .globl hal_thread_switch_context +hal_thread_switch_context: + + ;; save interrupt state + im INTERRUPT_MASK + load + load + + ; store current state on stack + im 28 + load + im 24 + load + im 20 + load + im 16 + load + im 12 + load + im 8 + load + im 4 + load + im 0 + load + + + ;; store pointer to SP in "from" pointer + pushsp + pushsp + im 8+8*4+4+4 + add + load + store + + ;; put pointer to '*to' on stack + pushsp + im 4+8*4+4 + add + load + load + + LOAD_STATE + + poppc ; voila! jump to saved pc + + + + +// ---------------------------------------------------------------------------- +// hal_thread_load_context +// Load thread context + + .globl hal_thread_load_context +hal_thread_load_context: + pushsp + im 4 + add + load + load ; pointer to HAL_SavedRegisters on stack + +load_state_internal: + LOAD_STATE + + poppc ; voila! jump to saved pc + +// ---------------------------------------------------------------------------- +// HAL longjmp, setjmp implementations + + .globl hal_setjmp +hal_setjmp: + .byte 0 + + + .globl hal_longjmp + hal_longjmp: + .byte 0 + +// ---------------------------------------------------------------------------- +// end of context.S + +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK + + ; push 1 onto stack if we're already switched, 0 otherwise + .macro check_thread_stack + pushsp ; 0xda68 + im __interrupt_stack ; 0x241a + lessthan ; => 1 + im __interrupt_stack_base + pushsp + lessthan + or + + .endm + + ; push 1 onto stack if we're already switched, 0 otherwise + .macro switch_stack + pushsp + im __interrupt_stack-4 + store ; saved stack pointer on interrupt stack. + + im __interrupt_stack-4 + popsp + ; we're now on the interrupt stack + + .endm + + .macro switch_stack_back + ; return to thread stack + popsp + .endm + +_zpu_invoke_zpu_interrupt_stack: + im hal_IRQ_handler + call + im 0 + load ; return value - source + + im _zpu_interrupt_stack + call + im 0 + load ; return value - result + + ; we've got source and ISR result args on the stack + im _zpu_interrupt_thread + call + storesp 0 ; destroy args + storesp 0 + + poppc + + +// switch to interrupt stack, invoke interrupt handler, switch back to original stack, enable interrupts + .globl _zpu_interrupt +_zpu_interrupt: + ; disable interrupts, we don't nest + im 1 + nop + im INTERRUPT_MASK + load + store + + ; if we're interrupting the DSRs then + ; we're already on the interrupt stack + check_thread_stack + + impcrel _already_switched + eqbranch + +_zpu_interrupt_switch_stack: + switch_stack + + im _zpu_invoke_zpu_interrupt_stack + call + + switch_stack_back + + im .already_switched2 + poppc + +_already_switched: + im _zpu_invoke_zpu_interrupt_stack + call + +.already_switched2: + ; turn on interrupts and run on thread stack. + im 0 + nop + im INTERRUPT_MASK + load + store ; unmask interrupts + + ; we're now running on thread stack + + im _zpu_interrupt_thread + call + + poppc + + .globl hal_interrupt_stack_call_pending_DSRs +hal_interrupt_stack_call_pending_DSRs: + ; the scheduler is not running, so only interrupts + ; could have switched stacks at this point and + ; since we're running, interrupts are not + switch_stack + + im cyg_interrupt_call_pending_DSRs + call + + switch_stack_back + + ; back on thread stack + poppc + + + + +// Runtime stack used during all interrupt processing +#ifndef CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE +#define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096 +#endif + .bss + .balign 4,0 + .global cyg_interrupt_stack_base +cyg_interrupt_stack_base: +__interrupt_stack_base: + .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + .byte 0 + .endr + .balign 4,0 + .global cyg_interrupt_stack +cyg_interrupt_stack: +__interrupt_stack: +#endif + + diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/src/hal_misc.c b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/hal_misc.c new file mode 100644 index 0000000..eea2465 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/hal_misc.c @@ -0,0 +1,177 @@ +/*========================================================================== +// +// hal_misc.c +// +// HAL miscellaneous functions +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1999-02-20 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//=========================================================================*/ + +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif +#ifdef CYGPKG_CYGMON +#include +#endif + +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header + +#include +#include + +externC void diag_printf(const char *fmt, ...); + +/*------------------------------------------------------------------------*/ +/* First level C exception handler. */ + + +/*------------------------------------------------------------------------*/ +/* C++ support - run initial constructors */ + +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +cyg_bool cyg_hal_stop_constructors; +#endif + +typedef void (*pfunc) (void); +extern pfunc __CTOR_LIST__[]; +extern pfunc __CTOR_END__[]; + +void +cyg_hal_invoke_constructors (void) +{ +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + static pfunc *p = &__CTOR_END__[-1]; + + cyg_hal_stop_constructors = 0; + for (; p >= __CTOR_LIST__; p--) { + (*p) (); + if (cyg_hal_stop_constructors) { + p--; + break; + } + } +#else + pfunc *p; + + for (p = &__CTOR_END__[-1]; p >= __CTOR_LIST__; p--) + (*p) (); +#endif +} + + +/*-------------------------------------------------------------------------*/ +/* Misc functions */ + +int +hal_lsbindex(int mask) +{ + int i; + for (i = 0; i < 32; i++) { + if (mask & (1<= 0; i--) { + if (mask & (1< + +#include // HAL header +#include // HAL header +#ifdef CYGPKG_KERNEL +# include +# include +#endif +#include + +/* + * This program is used to generate definitions needed by + * assembly language modules. + * + * This technique was first used in the OSF Mach kernel code: + * generate asm statements containing #defines, + * compile this file to assembler, and then extract the + * #defines from the assembly-language output. + */ + +#define DEFINE(sym, val) \ + asm volatile("\n\t.equ\t" #sym ",%0" : : "i" (val)) + +int +main(void) +{ + DEFINE(CYGNUM_HAL_ISR_COUNT, CYGNUM_HAL_ISR_COUNT); + DEFINE(CYGNUM_HAL_VSR_COUNT, CYGNUM_HAL_VSR_COUNT); + DEFINE(CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION, + CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION); + DEFINE(CYGNUM_HAL_EXCEPTION_CODE_ACCESS, + CYGNUM_HAL_EXCEPTION_CODE_ACCESS); + DEFINE(CYGNUM_HAL_EXCEPTION_DATA_ACCESS, + CYGNUM_HAL_EXCEPTION_DATA_ACCESS); + DEFINE(CYGNUM_HAL_VECTOR_IRQ, CYGNUM_HAL_VECTOR_IRQ); +#ifdef CYGPKG_KERNEL + DEFINE(RAISE_INTR, CYG_INSTRUMENT_CLASS_INTR|CYG_INSTRUMENT_EVENT_INTR_RAISE); +#endif +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT) + DEFINE(CYGNUM_CALL_IF_TABLE_SIZE, CYGNUM_CALL_IF_TABLE_SIZE); +#endif + DEFINE(CYGNUM_HAL_INTERRUPT_NONE, CYGNUM_HAL_INTERRUPT_NONE); + return 0; +} + + +/*------------------------------------------------------------------------*/ +// EOF hal_mk_defs.c diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/src/vectors.c b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/vectors.c new file mode 100644 index 0000000..b254a85 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/vectors.c @@ -0,0 +1,116 @@ +#include +#include +#ifdef CYGPKG_KERNEL +#include +#endif +#ifdef CYGPKG_CYGMON +#include +#endif + +#include +#include // tracing macros +#include // assertion macros + +#include // HAL header +#include // HAL header +#include +#include // Register state info + +extern char __bss_start[]; +extern char __bss_end[]; + +externC void cyg_hal_invoke_constructors (void); +externC void cyg_start (void); +externC void hal_hardware_init (void); +externC void _initIO(); + +void _premain(void) +{ + // clear BSS + memset(__bss_start, 0, __bss_end-__bss_start); + + _initIO(); + + hal_hardware_init(); + + cyg_hal_invoke_constructors(); + + cyg_start(); + + __asm("breakpoint"); // stop debugger/sim here for now +// for (;;); // hang forever +} + +CYG_ADDRWORD hal_vsr_table[CYGNUM_HAL_VSR_COUNT]; +CYG_ADDRWORD hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT]; +CYG_ADDRWORD hal_interrupt_data[CYGNUM_HAL_ISR_COUNT]; +CYG_ADDRWORD hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT]; + +externC cyg_ucount32 cyg_scheduler_sched_lock; +externC cyg_uint32 hal_IRQ_handler(); + +externC void interrupt_end( + cyg_uint32 isr_ret, + CYG_ADDRWORD intr, + HAL_SavedRegisters *ctx + ); + + +#ifndef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK + + +void _zpu_interrupt(void) +{ + cyg_uint32 source; +#ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT + cyg_scheduler_sched_lock++; +#endif + /* we don't support reentrant interrupts, so we disable interrupts here. */ + cyg_uint32 t; + HAL_DISABLE_INTERRUPTS(t); + + source=hal_IRQ_handler(); + if (source!=CYGNUM_HAL_INTERRUPT_NONE) + { + + cyg_uint32 result; + + result=((cyg_uint32 (*)(cyg_uint32, CYG_ADDRWORD))hal_interrupt_handlers[source])(source, hal_interrupt_data[source]); + /* restore interrupts again. */ + HAL_ENABLE_INTERRUPTS(); + /* Interrupts must be enabled here as the scheduler is invoked here. */ + interrupt_end(result, hal_interrupt_objects[source], NULL); + } else + { + /* restore interrupts again. */ + HAL_ENABLE_INTERRUPTS(); + } +} +#else +/* low-level interrupt handling routine */ +cyg_uint32 _zpu_interrupt_stack(cyg_uint32 source) +{ +#ifdef CYGFUN_HAL_COMMON_KERNEL_SUPPORT + cyg_scheduler_sched_lock++; +#endif + /* we don't support reentrant interrupts, so we disable interrupts here. */ + cyg_uint32 t; + HAL_DISABLE_INTERRUPTS(t); + + cyg_uint32 result=0; + if (source!=CYGNUM_HAL_INTERRUPT_NONE) + { + cyg_uint32 result; + result=((cyg_uint32 (*)(cyg_uint32, CYG_ADDRWORD))hal_interrupt_handlers[source])(source, hal_interrupt_data[source]); + } + return result; +} +void _zpu_interrupt_thread(cyg_uint32 source, cyg_uint32 result) +{ + if (source!=CYGNUM_HAL_INTERRUPT_NONE) + { + /* Interrupts must be enabled here as the scheduler is invoked here. */ + interrupt_end(result, hal_interrupt_objects[source], NULL); + } +} +#endif diff --git a/zpu/sw/ecos/repository/hal/zylin/arch/current/src/zylin.ld b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/zylin.ld new file mode 100644 index 0000000..eef2cd7 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/arch/current/src/zylin.ld @@ -0,0 +1,226 @@ +//============================================================================= +// +// MLT linker script for ZYLIN +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= + +#include + +STARTUP(crt0.o) +ENTRY(_start) +INPUT(crt_io.o) +INPUT(extras.o) +INPUT(vectors.o) +GROUP(libtarget.a libgcc.a libsupc++.a) + +// Keep RODATA in separate sections. +#define MERGE_IN_RODATA + +#define ALIGN_LMA 4 +#define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1)) +#define LMA_EQ_VMA +#define FORCE_OUTPUT . = . + +#define SECTIONS_BEGIN + +#define SECTION_fixed_vectors(_region_, _vma_, _lma_) \ + .fixed_vectors _vma_ : _lma_ \ + { FORCE_OUTPUT; KEEP (*(.fixed_vectors)) } \ + > _region_ + +#define SECTION_rom_vectors(_region_, _vma_, _lma_) \ + .rom_vectors _vma_ : _lma_ \ + { __rom_vectors_vma = ABSOLUTE(.); \ + FORCE_OUTPUT; KEEP (*(.vectors)) } \ + > _region_ \ + __rom_vectors_lma = LOADADDR(.rom_vectors); + +#define SECTION_text(_region_, _vma_, _lma_) \ + .text _vma_ : _lma_ \ + { _stext = ABSOLUTE(.); \ + PROVIDE (__stext = ABSOLUTE(.)); \ + *(.text*) *(.gnu.warning) *(.gnu.linkonce.t.*) *(.init) \ + *(.glue_7) *(.glue_7t) \ + } > _region_ \ + _etext = .; PROVIDE (__etext = .); + +#define SECTION_fini(_region_, _vma_, _lma_) \ + .fini _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.fini) } \ + > _region_ + +#define SECTION_rodata(_region_, _vma_, _lma_) \ + .rodata _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.rodata*) *(.gnu.linkonce.r.*) } \ + > _region_ + +#define SECTION_rodata1(_region_, _vma_, _lma_) \ + .rodata1 _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.rodata1) } \ + > _region_ + +#define SECTION_fixup(_region_, _vma_, _lma_) \ + .fixup _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.fixup) } \ + > _region_ + +#define SECTION_gcc_except_table(_region_, _vma_, _lma_) \ + .gcc_except_table _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.gcc_except_table) } \ + > _region_ + +#define SECTION_eh_frame(_region_, _vma_, _lma_) \ + .eh_frame _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; __EH_FRAME_BEGIN__ = .; \ + KEEP(*(.eh_frame)) \ + __FRAME_END__ = .; \ + . = . + 8; \ + } > _region_ = 0 + +#define SECTION_RELOCS(_region_, _vma_, _lma_) \ + .rel.text : \ + { \ + *(.rel.text) \ + *(.rel.text.*) \ + *(.rel.gnu.linkonce.t*) \ + } > _region_ \ + .rela.text : \ + { \ + *(.rela.text) \ + *(.rela.text.*) \ + *(.rela.gnu.linkonce.t*) \ + } > _region_ \ + .rel.data : \ + { \ + *(.rel.data) \ + *(.rel.data.*) \ + *(.rel.gnu.linkonce.d*) \ + } > _region_ \ + .rela.data : \ + { \ + *(.rela.data) \ + *(.rela.data.*) \ + *(.rela.gnu.linkonce.d*) \ + } > _region_ \ + .rel.rodata : \ + { \ + *(.rel.rodata) \ + *(.rel.rodata.*) \ + *(.rel.gnu.linkonce.r*) \ + } > _region_ \ + .rela.rodata : \ + { \ + *(.rela.rodata) \ + *(.rela.rodata.*) \ + *(.rela.gnu.linkonce.r*) \ + } > _region_ \ + .rel.got : { *(.rel.got) } > _region_ \ + .rela.got : { *(.rela.got) } > _region_ \ + .rel.ctors : { *(.rel.ctors) } > _region_ \ + .rela.ctors : { *(.rela.ctors) } > _region_ \ + .rel.dtors : { *(.rel.dtors) } > _region_ \ + .rela.dtors : { *(.rela.dtors) } > _region_ \ + .rel.init : { *(.rel.init) } > _region_ \ + .rela.init : { *(.rela.init) } > _region_ \ + .rel.fini : { *(.rel.fini) } > _region_ \ + .rela.fini : { *(.rela.fini) } > _region_ \ + .rel.bss : { *(.rel.bss) } > _region_ \ + .rela.bss : { *(.rela.bss) } > _region_ \ + .rel.plt : { *(.rel.plt) } > _region_ \ + .rela.plt : { *(.rela.plt) } > _region_ \ + .rel.dyn : { *(.rel.dyn) } > _region_ + +#define SECTION_got(_region_, _vma_, _lma_) \ + .got _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.got.plt) *(.got) \ + _GOT1_START_ = ABSOLUTE (.); *(.got1) _GOT1_END_ = ABSOLUTE (.); \ + _GOT2_START_ = ABSOLUTE (.); *(.got2) _GOT2_END_ = ABSOLUTE (.); \ + } > _region_ + +#define SECTION_mmu_tables(_region_, _vma_, _lma_) \ + .mmu_tables _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.mmu_tables) } \ + > _region_ + +#define SECTION_sram(_region_, _vma_, _lma_) \ + .sram _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.sram*) } \ + > _region_ + +#define SECTION_data(_region_, _vma_, _lma_) \ + .data _vma_ : _lma_ \ + { __ram_data_start = ABSOLUTE (.); \ + *(.data*) *(.data1) *(.gnu.linkonce.d.*) MERGE_IN_RODATA \ + . = ALIGN (4); \ + KEEP(*( SORT (.ecos.table.*))) ; \ + . = ALIGN (4); \ + __CTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.ctors*))) __CTOR_END__ = ABSOLUTE (.); \ + __DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) __DTOR_END__ = ABSOLUTE (.); \ + *(.dynamic) *(.sdata*) *(.gnu.linkonce.s.*) \ + . = ALIGN (4); *(.2ram.*) } \ + > _region_ \ + __rom_data_start = LOADADDR (.data); \ + __ram_data_end = .; PROVIDE (__ram_data_end = .); _edata = .; PROVIDE (edata = .); \ + PROVIDE (__rom_data_end = LOADADDR (.data) + SIZEOF(.data)); + +#define SECTION_bss(_region_, _vma_, _lma_) \ + .bss _vma_ : _lma_ \ + { __bss_start = ABSOLUTE (.); \ + *(.scommon) *(.dynsbss) *(.sbss*) *(.gnu.linkonce.sb.*) \ + *(.dynbss) *(.bss*) *(.gnu.linkonce.b.*) *(COMMON) \ + __bss_end = ABSOLUTE (.); } \ + > _region_ + +// Some versions of gcc define "zpu" which causes problems with .note.arm.ident +#undef zpu +#define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); \ + /* Debug information */ \ + .debug_aranges 0 : { *(.debug_aranges) } \ + .debug_pubnames 0 : { *(.debug_pubnames) } \ + .debug_info 0 : { *(.debug_info) } \ + .debug_abbrev 0 : { *(.debug_abbrev) } \ + .debug_line 0 : { *(.debug_line) } \ + .debug_frame 0 : { *(.debug_frame) } \ + .debug_str 0 : { *(.debug_str) } \ + .debug_loc 0 : { *(.debug_loc) } \ + .debug_macinfo 0 : { *(.debug_macinfo) } \ + .note.gnu.zpu.ident 0 : { KEEP (*(.note.gnu.zpu.ident)) } + + +#include +#include CYGHWR_MEMORY_LAYOUT_LDI diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/ChangeLog b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/ChangeLog new file mode 100644 index 0000000..a29dbf8 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/ChangeLog @@ -0,0 +1,39 @@ +2004-09-16 Øyvind Harboe + + * first cut HAL support for ZPU + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/cdl/hal_zylin_zpu_abel.cdl b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/cdl/hal_zylin_zpu_abel.cdl new file mode 100644 index 0000000..f5c2f81 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/cdl/hal_zylin_zpu_abel.cdl @@ -0,0 +1,298 @@ +# ==================================================================== +# +# hal_zpu.cdl +# +# ZPU HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): +# Contributors: +# Date: 2001-07-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_ZYLIN_ZPU_ABEL { + display "Zylin ZPU HAL" + parent CYGPKG_HAL_ZYLIN_ZPU + define_header hal_zylin_zpu_abel.h + include_dir cyg/hal + hardware + description " + The Zylin ZPU HAL package provides the support needed to run + eCos on an Zylin ZPU board using the Abel board." + + compile abel_misc.c + + requires { CYGHWR_HAL_ZYLIN_ZPU == "ZPU1" } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"ZPU1\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Zylin Abel\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + # Real-time clock/counter specifics + cdl_option CYGNUM_HAL_ZYLIN_ZPU_CLOCK_SPEED { + display "CPU clock speed" + flavor data + default_value 90000000 + } + + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + default_value 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + default_value 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + default_value (CYGNUM_HAL_ZYLIN_ZPU_CLOCK_SPEED / CYGNUM_HAL_RTC_DENOMINATOR) + } + } + + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the ZPU board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Using ROMRAM will allow the program to exist in + ROM, but be copied to RAM during startup." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the baud rate used for the GDB connection." + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" } + default_value { 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL options" + flavor none + no_define + parent CYGPKG_REDBOOT + active_if CYGPKG_REDBOOT + description " + This option lists the target's requirements for a valid Redboot + configuration." + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/redboot.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ + } + + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "zpu-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Winline -Wundef -g -Os -ffunction-sections -fdata-sections -fno-exceptions -finit-priority -abel" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -g -nostdlib -abel -Wl,--relax -Os" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "RAM") ? "zpu_ram" : + (CYG_HAL_STARTUP == "ROMRAM") ? "zpu_romram" : + "zpu_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + } +} diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/hal_platform_ints.h b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/hal_platform_ints.h new file mode 100644 index 0000000..9ff0029 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/hal_platform_ints.h @@ -0,0 +1,79 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock assignments for ZPU +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-12 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for the ZPU board/platform are +// defined here. +// +// Usage: #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_TIMER 0 + +#define CYGNUM_HAL_ISR_MIN 0 + +#define CYGNUM_HAL_ISR_MAX 0 + +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER + + +//---------------------------------------------------------------------------- +// Reset. +__externC void hal_zpu_reset_cpu(void); +#define HAL_PLATFORM_RESET() hal_zpu_reset_cpu() + + + +#endif // CYGONCE_HAL_PLATFORM_INTS_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.h b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.h new file mode 100644 index 0000000..4d31221 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.h @@ -0,0 +1,17 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x00000000) +#define CYGMEM_REGION_ram_SIZE (0x00008000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE ((CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE) - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.ldi b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.ldi new file mode 100644 index 0000000..9a50a17 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/pkgconf/mlt_zylin_zpu_abel_ram.ldi @@ -0,0 +1,27 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#include + +MEMORY +{ + ram : ORIGIN = 0x00000000, LENGTH = 0x8000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (ram, 0x0, LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rom_vectors (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/plf_io.h b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/plf_io.h new file mode 100644 index 0000000..7e6a234 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/include/plf_io.h @@ -0,0 +1,64 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// ZPU board specific registers +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): tkoeller +// Contributors: tdrury +// Date: 2002-06-22 +// Purpose: Zylin ZPU board specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +/* cause an "interrupt" from the idle thread */ + +void _zpu_interrupt(void); +/* KLUDGE!!!! some linker problem with _zpu_interrupt() that I'll solve later */ +#define HAL_IDLE_THREAD_ACTION(_count_) ((void (*)())0x20)(); + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/misc/redboot_RAM.ecm b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/misc/redboot_RAM.ecm new file mode 100644 index 0000000..04eae62 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/misc/redboot_RAM.ecm @@ -0,0 +1,53 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware zpu_board ; + template redboot ; + package -hardware CYGPKG_HAL_ZPU current ; + package -hardware CYGPKG_HAL_ZPU_CPU current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; +}; + + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGOPT_REDBOOT_FIS { + user_value 0 +}; + +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 0 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; + diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/src/abel_misc.c b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/src/abel_misc.c new file mode 100644 index 0000000..ed5a0e9 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/abel/current/src/abel_misc.c @@ -0,0 +1,61 @@ +//========================================================================== +// +// zpu_misc.c +// +// HAL misc board support code for Zylin ZPU board +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov, tkoeller, tdrury, nickg +// Date: 2002-05-30 +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +#include // base types +#include // low level i/o +#include // common registers +#include // platform registers + + diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/ChangeLog b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/ChangeLog new file mode 100644 index 0000000..a29dbf8 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/ChangeLog @@ -0,0 +1,39 @@ +2004-09-16 Øyvind Harboe + + * first cut HAL support for ZPU + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/cdl/hal_zylin_zpu_phi.cdl b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/cdl/hal_zylin_zpu_phi.cdl new file mode 100644 index 0000000..d7b7234 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/cdl/hal_zylin_zpu_phi.cdl @@ -0,0 +1,292 @@ +# ==================================================================== +# +# hal_zpu.cdl +# +# ZPU HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): +# Contributors: +# Date: 2001-07-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_ZYLIN_ZPU_PHI { + display "Zylin ZPU HAL" + parent CYGPKG_HAL_ZYLIN_ZPU + define_header hal_zylin_zpu_phi.h + include_dir cyg/hal + hardware + description " + The Zylin ZPU HAL package provides the support needed to run + eCos on an Zylin ZPU board." + + compile phi_misc.c + + requires { CYGHWR_HAL_ZYLIN_ZPU == "ZPU1" } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"ZPU1\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Zylin Phi\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + # Real-time clock/counter specifics + cdl_option CYGNUM_HAL_ZYLIN_ZPU_CLOCK_SPEED { + display "CPU clock speed" + flavor data + default_value 64000000 + } + + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + default_value 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + default_value 100 + description "How many times a second to invoke the timer interrupt, normally 100" + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + default_value (CYGNUM_HAL_ZYLIN_ZPU_CLOCK_SPEED / CYGNUM_HAL_RTC_DENOMINATOR) + } + } + + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM"} + no_define + define -file system.h CYG_HAL_STARTUP + description "For now the eCosBoard only supports DRAM startup" + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the baud rate used for the GDB connection." + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" } + default_value { 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL options" + flavor none + no_define + parent CYGPKG_REDBOOT + active_if CYGPKG_REDBOOT + description " + This option lists the target's requirements for a valid Redboot + configuration." + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/redboot.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ + } + + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "zpu-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Winline -Wundef -g -Os -ffunction-sections -fdata-sections -fno-exceptions -phi" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -g -nostdlib -phi -Wl,--relax -Os" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "RAM") ? "zpu_ram" : + (CYG_HAL_STARTUP == "ROMRAM") ? "zpu_romram" : + "zpu_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + } +} diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/hal_platform_ints.h b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/hal_platform_ints.h new file mode 100644 index 0000000..1ec0475 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/hal_platform_ints.h @@ -0,0 +1,81 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock assignments for ZPU +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-12 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for the ZPU board/platform are +// defined here. +// +// Usage: #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_TIMER 0 +#define CYGNUM_HAL_INTERRUPT_UART 1 +#define CYGNUM_HAL_INTERRUPT_ETHERMAC 2 + +#define CYGNUM_HAL_ISR_MIN 0 + +#define CYGNUM_HAL_ISR_MAX 2 + +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER + + +//---------------------------------------------------------------------------- +// Reset. +__externC void hal_zpu_reset_cpu(void); +#define HAL_PLATFORM_RESET() hal_zpu_reset_cpu() + + + +#endif // CYGONCE_HAL_PLATFORM_INTS_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.h b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.h new file mode 100644 index 0000000..165467f --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.h @@ -0,0 +1,17 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x00000000) +#define CYGMEM_REGION_ram_SIZE (0x01ff0000) // 0x10000 as startup stack... +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE ((CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE) - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.ldi b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.ldi new file mode 100644 index 0000000..ef5947c --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/pkgconf/mlt_zylin_zpu_phi_ram.ldi @@ -0,0 +1,27 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#include + +MEMORY +{ + ram : ORIGIN = 0x00000000, LENGTH = 0x01ff0000 // 0x10000 as startup stack... +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (ram, 0x0, LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rom_vectors (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/plf_io.h b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/plf_io.h new file mode 100644 index 0000000..1c6f53b --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/include/plf_io.h @@ -0,0 +1,58 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// ZPU board specific registers +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): tkoeller +// Contributors: tdrury +// Date: 2002-06-22 +// Purpose: Zylin ZPU board specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/src/phi_misc.c b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/src/phi_misc.c new file mode 100644 index 0000000..f7393f7 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/phi/current/src/phi_misc.c @@ -0,0 +1,72 @@ +//========================================================================== +// +// zpu_misc.c +// +// HAL misc board support code for Zylin ZPU board +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov, tkoeller, tdrury, nickg +// Date: 2002-05-30 +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +#include // base types +#include // low level i/o +#include // common registers +#include // platform registers + + +volatile int *INTERRUPT_MASK=(volatile int *)0x080a0020; + +volatile int *TIMER_PERIOD=(volatile int *)0x080a0034; +volatile int *TIMER_INTERRUPT=(volatile int *)0x080a0030; +volatile int *TIMER_ENABLE=(volatile int *)0x080a002c; +volatile int *TIMER_COUNTER=(volatile int *)0x080a0038; +volatile int *UART_INTERRUPT=(volatile int *)0x080a0028; +volatile int *UART_ENABLE=(volatile int *)0x080a0024; + + + diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/ChangeLog b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/ChangeLog new file mode 100644 index 0000000..519b620 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/ChangeLog @@ -0,0 +1,38 @@ +2004-12-05 Øyvind Harboe + + * first cut ZPU HAL + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/cdl/hal_zylin_zpu.cdl b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/cdl/hal_zylin_zpu.cdl new file mode 100644 index 0000000..8d96088 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/cdl/hal_zylin_zpu.cdl @@ -0,0 +1,83 @@ +# ==================================================================== +# +# hal_zpu.cdl +# +# Zylin ZPU HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## Copyright (C) 2003 Nick Garnett +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas +# Contributors: gthomas, tkoeller, tdrury, nickg +# Date: 2001-07-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_ZYLIN_ZPU { + display "Zylin ZPU variant HAL" + parent CYGPKG_HAL_ZYLIN + define_header hal_zylin_zpu.h + include_dir cyg/hal + hardware + description " + The ZPU HAL package provides the support needed to run + eCos on Zylin ZPU based targets." + + compile hal_diag.c zpu_misc.c + + + # Let the architectural HAL see this variant's files + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_ZPU_VAR_IO_H" + puts $::cdl_system_header "#define CYGBLD_HAL_ZPU_VAR_ARCH_H" + } + + cdl_option CYGHWR_HAL_ZYLIN_ZPU { + display "ZPU variant used" + flavor data + default_value {"ZPU1"} + legal_values {"ZPU1"} + description "The ZPU microcontroller family has several variants, + the main differences being the amount of on-chip SRAM, + peripherals and their layout. This option allows the + platform HALs to select the specific microcontroller + being used." + } + +} diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_cache.h b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_cache.h new file mode 100644 index 0000000..d3fef4f --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_cache.h @@ -0,0 +1,192 @@ +#ifndef CYGONCE_HAL_CACHE_H +#define CYGONCE_HAL_CACHE_H + +//============================================================================= +// +// hal_cache.h +// +// HAL cache control API +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, gthomas +// Contributors: nickg, gthomas +// Date: 1998-09-28 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +//----------------------------------------------------------------------------- +// Cache dimensions + +// Data cache +//#define HAL_DCACHE_SIZE 0 // Size of data cache in bytes +//#define HAL_DCACHE_LINE_SIZE 0 // Size of a data cache line +//#define HAL_DCACHE_WAYS 0 // Associativity of the cache + +// Instruction cache +//#define HAL_ICACHE_SIZE 0 // Size of cache in bytes +//#define HAL_ICACHE_LINE_SIZE 0 // Size of a cache line +//#define HAL_ICACHE_WAYS 0 // Associativity of the cache + +//#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) +//#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +#define HAL_DCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() + +// Purge contents of data cache +#define HAL_DCACHE_PURGE_ALL() + +// Query the state of the data cache (does not affect the caching) +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +//#define HAL_DCACHE_WRITETHRU_MODE 0 +//#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Load the contents of the given address range into the data cache +// and then lock the cache so that it stays there. +//#define HAL_DCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_DCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_DCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Data cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +//#define HAL_DCACHE_FLUSH( _base_ , _size_ ) + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +//#define HAL_DCACHE_STORE( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_DCACHE_ZERO( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() + +// Query the state of the instruction cache (does not affect the caching) +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_CACHE_H +// End of hal_cache.h diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_diag.h b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_diag.h new file mode 100644 index 0000000..3a9dba4 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/hal_diag.h @@ -0,0 +1,90 @@ +#ifndef CYGONCE_HAL_DIAG_H +#define CYGONCE_HAL_DIAG_H + +//============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, gthomas, tkoeller +// Date: 2001-07-12 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + +#include + +#include + +externC void zpu_if_diag_init(void); +externC void zpu_if_diag_write_char(char c); +externC void zpu_if_diag_read_char(char *c); + +#define HAL_DIAG_INIT() zpu_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) zpu_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) zpu_if_diag_read_char(&_c_) + +//----------------------------------------------------------------------------- +// LED +externC void hal_diag_led(int mask); + +externC void hal_zpu_set_leds(int mask); + +//----------------------------------------------------------------------------- +// delay + +externC void hal_delay_us(cyg_int32 usecs); +#define HAL_DELAY_US(n) hal_delay_us(n); + +//----------------------------------------------------------------------------- +// reset + +extern void hal_zpu_reset_cpu(void); + +//----------------------------------------------------------------------------- +// end of hal_diag.h +#endif // CYGONCE_HAL_DIAG_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/plf_stub.h b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/plf_stub.h new file mode 100644 index 0000000..eb87958 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/plf_stub.h @@ -0,0 +1,85 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, gthomas +// Date: 2001-07-12 +// Purpose: Platform HAL stub support for ZPU boards. +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include CYGBLD_HAL_PLATFORM_H + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include // CYG_UNUSED_PARAM + + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. +#define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_arch.h b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_arch.h new file mode 100644 index 0000000..293d7fc --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_arch.h @@ -0,0 +1,73 @@ +#ifndef CYGONCE_HAL_VAR_ARCH_H +#define CYGONCE_HAL_VAR_ARCH_H +//============================================================================= +// +// var_arch.h +// +// ZPU variant architecture overrides +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2003 Jonathan Larmour +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting the copyright +// holders. +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: Daniel Neri +// Date: 2003-06-24 +// Purpose: ZPU variant architecture overrides +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include +#include + +//-------------------------------------------------------------------------- +// Idle thread code. +// This macro is called in the idle thread loop, and gives the HAL the +// chance to insert code. Typical idle thread behaviour might be to halt the +// processor. These implementations halt the system core clock. + +#ifndef HAL_IDLE_THREAD_ACTION +#define HAL_IDLE_THREAD_ACTION(_count_) \ +CYG_MACRO_START \ +CYG_MACRO_END +#endif + +//----------------------------------------------------------------------------- +// end of var_arch.h +#endif // CYGONCE_HAL_VAR_ARCH_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_io.h b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_io.h new file mode 100644 index 0000000..f1ef035 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/include/var_io.h @@ -0,0 +1,73 @@ +#ifndef CYGONCE_HAL_VAR_IO_H +#define CYGONCE_HAL_VAR_IO_H +//============================================================================= +// +// var_io.h +// +// Variant specific registers +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, gthomas, tkoeller, tdrury, nickg +// Date: 2001-07-12 +// Purpose: ZPU variant specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include + + +extern volatile int *INTERRUPT_MASK; +extern volatile int *TIMER_PERIOD; +extern volatile int *TIMER_INTERRUPT; +extern volatile int *TIMER_ENABLE; +extern volatile int *TIMER_COUNTER; +extern volatile int *UART_INTERRUPT; +extern volatile int *UART_ENABLE; +void ethermac_enable(int enable); +int ethermac_interrupt(); +void ethermac_ack(); + +//----------------------------------------------------------------------------- +// end of var_io.h +#endif // CYGONCE_HAL_VAR_IO_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/hal_diag.c b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/hal_diag.c new file mode 100644 index 0000000..0b0f901 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/hal_diag.c @@ -0,0 +1,88 @@ +/*============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, gthomas +// Date: 2001-07-12 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include +#include CYGBLD_HAL_PLATFORM_H + +#include // base types + +#include // SAVE/RESTORE GP macros +#include // IO macros +#include // interface API +#include // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include // Helper functions +#include // CYG_ISR_HANDLED +#include + +#include // USART registers + +void zpu_if_diag_init(void) +{ +} + +extern void outbyte(int c); +extern int inbyte(); + +void +zpu_if_diag_write_char(char c) +{ + outbyte(c); +} + +void +zpu_if_diag_read_char(char *c) +{ + *c=inbyte(); +} + +//----------------------------------------------------------------------------- +// End of hal_diag.c diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/zpu_misc.c b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/zpu_misc.c new file mode 100644 index 0000000..019e024 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/var/current/src/zpu_misc.c @@ -0,0 +1,252 @@ +/*========================================================================== +// +// zpu_misc.c +// +// HAL misc board support code for Zylin ZPU +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov, nickg, tkoeller +// Date: 2001-07-12 +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +#include // base types +#include // tracing macros +#include // assertion macros + +#include // IO macros +#include // Register state info +#include +#ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +#include // HAL ISR support +#endif +#include // necessary? + +#include +#include // calling interface +#include // helper functions +#include // platform registers + + + + + +// ------------------------------------------------------------------------- +// Clock support + +static cyg_uint32 _period; + + +void hal_clock_initialize(cyg_uint32 period) +{ + _period=period; + *TIMER_PERIOD=period; + *TIMER_INTERRUPT=0x2; // reset counter +} + +void hal_clock_reset(cyg_uint32 vector, cyg_uint32 period) +{ + /* the next interrupt will happen without further action */ +} + + +long long _readCycles(); + +void hal_clock_read(cyg_uint32 *pvalue) +{ + *pvalue=_period-1-*TIMER_COUNTER; +} + +// ------------------------------------------------------------------------- +// +void hal_delay_us(cyg_int32 usecs) +{ + long long until=_readCycles(); + until+=((long long)usecs*(long long)(CYGNUM_HAL_ZYLIN_ZPU_CLOCK_SPEED))/(long long)1000000; + + /* waiting for the moment to pass.... */ + for (;;) + { + if (_readCycles()>until) + { + break; + } + } +} + +// ------------------------------------------------------------------------- +// Hardware init + +void hal_hardware_init(void) +{ + int i; + for (i=0; i= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + + if (vector==CYGNUM_HAL_INTERRUPT_TIMER) + { + *TIMER_ENABLE=0; + } else if (vector==CYGNUM_HAL_INTERRUPT_UART) + { + *UART_ENABLE=0; + } +#ifdef CYGPKG_IO_ETH_DRIVERS + else if (vector==CYGNUM_HAL_INTERRUPT_ETHERMAC) + { + ethermac_enable(0); + } +#endif +} + +void hal_interrupt_unmask(int vector) +{ + CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX && + vector >= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + if (vector==CYGNUM_HAL_INTERRUPT_TIMER) + { + *TIMER_ENABLE=1; + } else if (vector==CYGNUM_HAL_INTERRUPT_UART) + { + *UART_ENABLE=1; + } +#ifdef CYGPKG_IO_ETH_DRIVERS + else if (vector==CYGNUM_HAL_INTERRUPT_ETHERMAC) + { + ethermac_enable(1); + } +#endif + +} + +void hal_interrupt_acknowledge(int vector) +{ + if (vector==CYGNUM_HAL_INTERRUPT_TIMER) + { + *TIMER_INTERRUPT=0x1; + } else if (vector==CYGNUM_HAL_INTERRUPT_UART) + { + *UART_INTERRUPT=0x1; + } +#ifdef CYGPKG_IO_ETH_DRIVERS + else if (vector==CYGNUM_HAL_INTERRUPT_ETHERMAC) + { + ethermac_ack(); + } +#endif + +} + +void hal_interrupt_configure(int vector, int level, int up) +{ + CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX && + vector >= CYGNUM_HAL_ISR_MIN , "Invalid vector"); +} + +void hal_interrupt_set_level(int vector, int level) +{ + CYG_ASSERT(vector <= CYGNUM_HAL_ISR_MAX && + vector >= CYGNUM_HAL_ISR_MIN , "Invalid vector"); + CYG_ASSERT(level >= 0 && level <= 7, "Invalid level"); + +} + +void hal_show_IRQ(int vector, int data, int handler) +{ +} + + +/* Use the watchdog to generate a reset */ +void hal_zpu_reset_cpu(void) +{ +} + +/* nothing to do by default */ +cyg_uint32 +hal_default_isr(cyg_uint32 vector, CYG_ADDRWORD data) +{ + return 0; +} + +//-------------------------------------------------------------------------- +// EOF zpu_misc.c diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/ChangeLog b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/ChangeLog new file mode 100644 index 0000000..a29dbf8 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/ChangeLog @@ -0,0 +1,39 @@ +2004-09-16 Øyvind Harboe + + * first cut HAL support for ZPU + +//=========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/cdl/hal_zylin_zpu_zeta.cdl b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/cdl/hal_zylin_zpu_zeta.cdl new file mode 100644 index 0000000..65a8d59 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/cdl/hal_zylin_zpu_zeta.cdl @@ -0,0 +1,298 @@ +# ==================================================================== +# +# hal_zpu.cdl +# +# ZPU HAL package configuration data +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): +# Contributors: +# Date: 2001-07-12 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_ZYLIN_ZPU_ZETA { + display "Zylin ZPU HAL" + parent CYGPKG_HAL_ZYLIN_ZPU + define_header hal_zylin_zpu_zeta.h + include_dir cyg/hal + hardware + description " + The Zylin ZPU HAL package provides the support needed to run + eCos on an Zylin ZPU board." + + compile zeta_misc.c + + requires { CYGHWR_HAL_ZYLIN_ZPU == "ZPU1" } + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H " + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H " + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H " + puts $::cdl_header "#define HAL_PLATFORM_CPU \"ZPU1\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Zylin Zeta\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + # Real-time clock/counter specifics + cdl_option CYGNUM_HAL_ZYLIN_ZPU_CLOCK_SPEED { + display "CPU clock speed" + flavor data + default_value 90000000 + } + + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants" + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + default_value 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + default_value 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + default_value (CYGNUM_HAL_ZYLIN_ZPU_CLOCK_SPEED / CYGNUM_HAL_RTC_DENOMINATOR) + } + } + + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the ZPU board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using onboard + debug software such as Angel or eCos GDB stubs. Select 'rom' + when building a stand-alone application which will be put + into ROM. Using ROMRAM will allow the program to exist in + ROM, but be copied to RAM during startup." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + active_if CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + This option + chooses which port will be used for diagnostic output." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 57600 115200 + default_value 38400 + description " + This option controls the baud rate used for the GDB connection." + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" || CYG_HAL_STARTUP == "ROMRAM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" } + default_value { 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL options" + flavor none + no_define + parent CYGPKG_REDBOOT + active_if CYGPKG_REDBOOT + description " + This option lists the target's requirements for a valid Redboot + configuration." + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + /bin/redboot.bin : /bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ + } + + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "zpu-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-Wall -Wpointer-arith -Winline -Wundef -g -Os -ffunction-sections -fdata-sections -fno-exceptions -finit-priority -zeta" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -g -nostdlib -zeta -Wl,--relax -Os" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { (CYG_HAL_STARTUP == "RAM") ? "zpu_ram" : + (CYG_HAL_STARTUP == "ROMRAM") ? "zpu_romram" : + "zpu_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { (CYG_HAL_STARTUP == "RAM") ? "" : + (CYG_HAL_STARTUP == "ROMRAM") ? "" : + "" } + } + } +} diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/hal_platform_ints.h b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/hal_platform_ints.h new file mode 100644 index 0000000..9ff0029 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/hal_platform_ints.h @@ -0,0 +1,79 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock assignments for ZPU +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-07-12 +// Purpose: Define Interrupt support +// Description: The interrupt specifics for the ZPU board/platform are +// defined here. +// +// Usage: #include +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_TIMER 0 + +#define CYGNUM_HAL_ISR_MIN 0 + +#define CYGNUM_HAL_ISR_MAX 0 + +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX + 1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER + + +//---------------------------------------------------------------------------- +// Reset. +__externC void hal_zpu_reset_cpu(void); +#define HAL_PLATFORM_RESET() hal_zpu_reset_cpu() + + + +#endif // CYGONCE_HAL_PLATFORM_INTS_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.h b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.h new file mode 100644 index 0000000..ddbaae8 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.h @@ -0,0 +1,17 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include +#include + +#endif +#define CYGMEM_REGION_ram (0x10000000) +#define CYGMEM_REGION_ram_SIZE (0x00100000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE ((CYGMEM_REGION_ram+CYGMEM_REGION_ram_SIZE) - (size_t) CYG_LABEL_NAME (__heap1)) diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.ldi b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.ldi new file mode 100644 index 0000000..d9a14be --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/pkgconf/mlt_zylin_zpu_zeta_ram.ldi @@ -0,0 +1,27 @@ +// eCos memory layout - Mon Jul 23 11:49:04 2001 + +// This is a generated file - do not edit + +#include + +MEMORY +{ + ram : ORIGIN = 0x00000000, LENGTH = 0x100000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (ram, 0x0, LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rom_vectors (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +} diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/plf_io.h b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/plf_io.h new file mode 100644 index 0000000..1c6f53b --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/include/plf_io.h @@ -0,0 +1,58 @@ +#ifndef CYGONCE_HAL_PLF_IO_H +#define CYGONCE_HAL_PLF_IO_H +//============================================================================= +// +// plf_io.h +// +// ZPU board specific registers +// +//============================================================================= +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): tkoeller +// Contributors: tdrury +// Date: 2002-06-22 +// Purpose: Zylin ZPU board specific registers +// Description: +// Usage: #include +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// end of plf_io.h +#endif // CYGONCE_HAL_PLF_IO_H diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/misc/redboot_RAM.ecm b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/misc/redboot_RAM.ecm new file mode 100644 index 0000000..04eae62 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/misc/redboot_RAM.ecm @@ -0,0 +1,53 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware zpu_board ; + template redboot ; + package -hardware CYGPKG_HAL_ZPU current ; + package -hardware CYGPKG_HAL_ZPU_CPU current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; +}; + + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + inferred_value 0 0 +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +cdl_option CYGOPT_REDBOOT_FIS { + user_value 0 +}; + +cdl_component CYGSEM_REDBOOT_FLASH_CONFIG { + user_value 0 +}; + +cdl_option CYGBLD_BUILD_REDBOOT_WITH_EXEC { + user_value 0 +}; + diff --git a/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/src/zeta_misc.c b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/src/zeta_misc.c new file mode 100644 index 0000000..b8b2e39 --- /dev/null +++ b/zpu/sw/ecos/repository/hal/zylin/zpu/zeta/current/src/zeta_misc.c @@ -0,0 +1,64 @@ +//========================================================================== +// +// zpu_misc.c +// +// HAL misc board support code for Zylin ZPU board +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Nick Garnett +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov, tkoeller, tdrury, nickg +// Date: 2002-05-30 +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include + +#include // base types +#include // low level i/o +#include // common registers +#include // platform registers + + +void hal_zpu_set_leds(int leds) +{ +} diff --git a/zpu/sw/ecos/repository/net/zylin/current/cdl/phi_net.cdl b/zpu/sw/ecos/repository/net/zylin/current/cdl/phi_net.cdl new file mode 100644 index 0000000..d98bc96 --- /dev/null +++ b/zpu/sw/ecos/repository/net/zylin/current/cdl/phi_net.cdl @@ -0,0 +1,56 @@ +# ==================================================================== +# +# net.cdl +# +# Networking configuration data +# +# ==================================================================== +#####ECOSPDCOPYRIGHTBEGIN#### +# +# Copyright (C) 2000, 2001, 2002 Red Hat, Inc. +# All Rights Reserved. +# +# Permission is granted to use, copy, modify and redistribute this +# file. +# +#####ECOSPDCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): gthomas +# Original data: gthomas +# Contributors: +# Date: 1999-11-29 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_PHI_NET { + display "Basic networking framework" + doc nothing.html + include_dir . + requires CYGPKG_IO + requires CYGPKG_ISOINFRA + requires CYGINT_ISO_C_TIME_TYPES + requires CYGINT_ISO_STRERROR + requires CYGINT_ISO_ERRNO + requires CYGINT_ISO_ERRNO_CODES + requires CYGINT_ISO_MALLOC + requires CYGINT_ISO_STRING_BSD_FUNCS + requires CYGPKG_NET + description "Basic networking support, including TCP/IP." + + cdl_component CYGPKG_PHI_NET_INET { + display "INET support" + active_if CYGPKG_NET_STACK_INET + flavor bool + no_define + default_value 1 + description " + This option enables support for PHI INET (IP) network processing." + compile \ + phi_network_support.c + + } +} diff --git a/zpu/sw/ecos/repository/net/zylin/current/src/phi_network_support.c b/zpu/sw/ecos/repository/net/zylin/current/src/phi_network_support.c new file mode 100644 index 0000000..c297651 --- /dev/null +++ b/zpu/sw/ecos/repository/net/zylin/current/src/phi_network_support.c @@ -0,0 +1,368 @@ +//========================================================================== +// +// ph_network_support.c +// +// Misc network support functions +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Andrew Lunn +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, sorin@netappi.com ("Sorin Babeanu"), hmt, jlarmour, +// andrew.lunn@ascom.ch +// Date: 2000-01-10 +// Purpose: +// Description: +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +// BOOTP support + +#include +#undef _KERNEL +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include // for 'sprintf()' +#include // for strncpy and strtok_r +#include +#include +#include + +#ifdef CYGPKG_IO_PCMCIA +#include +#endif + +#ifdef CYGPKG_NET_DHCP +#include +#endif + +#ifdef CYGPKG_NS_DNS +#include +#endif + +#ifdef CYGHWR_NET_DRIVER_ETH0 +//struct bootp eth0_bootp_data; +//cyg_bool_t eth0_up = false; +//const char *eth0_name = "eth0"; +#endif +#ifdef CYGHWR_NET_DRIVER_ETH1 +struct bootp eth1_bootp_data; +//cyg_bool_t eth1_up = false; +//const char *eth1_name = "eth1"; +#endif + +#define _string(s) #s +#define string(s) _string(s) + +#ifndef CYGPKG_LIBC_STDIO +#define perror(s) diag_printf(#s ": %s\n", strerror(errno)) +#endif + + +static int hasIP(char *ip, char *mask, char *broadcast, char *gateway, char *server) +{ + int retVal = false; + int len = -1; + char buf[81]; + char *ptr1 = NULL; + char *token = NULL; + + if(ip == NULL) + return 0; + + //try to open ip file + int fd = open("/jffs2/ip", O_RDONLY); + if(fd < 0) + { + ip[0] = '\0'; + return 0; + } + //return ip address + if( (len = read(fd, buf, 80)) > 0) + { + buf[len] = '\0'; + //get IP + token = strtok_r(buf, "_", &ptr1); + if(token != NULL) + strncpy(ip, token, 15); + else + { + close(fd); + return 0; + } + //get MASK + token = strtok_r(NULL, "_", &ptr1); + if(token != NULL) + strncpy(mask, token, 15); + else + { + close(fd); + return 0; + } + //get broadcast + token = strtok_r(NULL, "_", &ptr1); + if(token != NULL) + strncpy(broadcast, token, 15); + else + { + close(fd); + return 0; + } + //get gateway + token = strtok_r(NULL, "_", &ptr1); + if(token != NULL) + strncpy(gateway, token, 15); + else + { + close(fd); + return 0; + } + //get server + token = strtok_r(NULL, "_", &ptr1); + if(token != NULL) + strncpy(server, token, 15); + else + { + close(fd); + return 0; + } + + retVal = 1; + } + else + { + retVal = 0; + ip[0] = '\0'; + } + return retVal; +} + +// +// Initialize network interface[s] using BOOTP/DHCP +// +void +phi_init_all_network_interfaces(void) +{ + static volatile int in_init_all_network_interfaces = 0; + +#ifdef CYGOPT_NET_IPV6_ROUTING_THREAD + int rs_wait = 40; +#endif + + cyg_scheduler_lock(); + while ( in_init_all_network_interfaces ) { + // Another thread is doing this... + cyg_scheduler_unlock(); + cyg_thread_delay( 10 ); + cyg_scheduler_lock(); + } + in_init_all_network_interfaces = 1; + cyg_scheduler_unlock(); + +#ifdef CYGHWR_NET_DRIVER_ETH0 + if ( ! eth0_up ) { // Make this call idempotent + char ip[16], mask[16], broadcast[16], gateway[16], server[16]; + if(!hasIP(ip, mask, broadcast, gateway, server)) + { + // Perform a complete initialization, using BOOTP/DHCP + eth0_up = true; + eth0_dhcpstate = 0; // Says that initialization is external to dhcp + if (do_dhcp(eth0_name, ð0_bootp_data, ð0_dhcpstate, ð0_lease)) +// { +// if (do_bootp(eth0_name, ð0_bootp_data)) + { + show_bootp(eth0_name, ð0_bootp_data); + } else { + diag_printf("BOOTP/DHCP failed on eth0\n"); + eth0_up = false; + } +// } + } + else + { + + eth0_up = true; + build_bootp_record(ð0_bootp_data, + eth0_name, + ip, + mask, + broadcast, + gateway, + server); + show_bootp(eth0_name, ð0_bootp_data); + } + } +#endif // CYGHWR_NET_DRIVER_ETH0 +#ifdef CYGHWR_NET_DRIVER_ETH1 + if ( ! eth1_up ) { // Make this call idempotent +#ifdef CYGHWR_NET_DRIVER_ETH1_BOOTP + // Perform a complete initialization, using BOOTP/DHCP + eth1_up = true; +#ifdef CYGHWR_NET_DRIVER_ETH1_DHCP + eth1_dhcpstate = 0; // Says that initialization is external to dhcp + if (do_dhcp(eth1_name, ð1_bootp_data, ð1_dhcpstate, ð1_lease)) +#else +#ifdef CYGPKG_NET_DHCP + eth1_dhcpstate = DHCPSTATE_BOOTP_FALLBACK; + // so the dhcp machine does no harm if called +#endif + if (do_bootp(eth1_name, ð1_bootp_data)) +#endif + { +#ifdef CYGHWR_NET_DRIVER_ETH1_BOOTP_SHOW + show_bootp(eth1_name, ð1_bootp_data); +#endif + } else { + diag_printf("BOOTP/DHCP failed on eth1\n"); + eth1_up = false; + } +#elif defined(CYGHWR_NET_DRIVER_ETH1_ADDRS_IP) + eth1_up = true; + build_bootp_record(ð1_bootp_data, + eth1_name, + string(CYGHWR_NET_DRIVER_ETH1_ADDRS_IP), + string(CYGHWR_NET_DRIVER_ETH1_ADDRS_NETMASK), + string(CYGHWR_NET_DRIVER_ETH1_ADDRS_BROADCAST), + string(CYGHWR_NET_DRIVER_ETH1_ADDRS_GATEWAY), + string(CYGHWR_NET_DRIVER_ETH1_ADDRS_SERVER)); + show_bootp(eth1_name, ð1_bootp_data); +#endif + } +#endif // CYGHWR_NET_DRIVER_ETH1 +#ifdef CYGHWR_NET_DRIVER_ETH0 +#ifndef CYGHWR_NET_DRIVER_ETH0_MANUAL + if (eth0_up) { + if (!init_net(eth0_name, ð0_bootp_data)) { + diag_printf("Network initialization failed for eth0\n"); + eth0_up = false; + } +#ifdef CYGHWR_NET_DRIVER_ETH0_IPV6_PREFIX + if (!init_net_IPv6(eth0_name, ð0_bootp_data, + string(CYGHWR_NET_DRIVER_ETH0_IPV6_PREFIX))) { + diag_printf("Static IPv6 network initialization failed for eth0\n"); + eth0_up = false; // ??? + } +#endif + } +#endif +#endif +#ifdef CYGHWR_NET_DRIVER_ETH1 +#ifndef CYGHWR_NET_DRIVER_ETH1_MANUAL + if (eth1_up) { + if (!init_net(eth1_name, ð1_bootp_data)) { + diag_printf("Network initialization failed for eth1\n"); + eth1_up = false; + } +#ifdef CYGHWR_NET_DRIVER_ETH1_IPV6_PREFIX + if (!init_net_IPv6(eth1_name, ð1_bootp_data, + string(CYGHWR_NET_DRIVER_ETH1_IPV6_PREFIX))) { + diag_printf("Static IPv6 network initialization failed for eth1\n"); + eth1_up = false; // ??? + } +#endif + } +#endif +#endif + +#ifdef CYGPKG_NET_NLOOP +#if 0 < CYGPKG_NET_NLOOP + { + static int loop_init = 0; + int i; + if ( 0 == loop_init++ ) + for ( i = 0; i < CYGPKG_NET_NLOOP; i++ ) + init_loopback_interface( i ); + } +#endif +#endif + +#ifdef CYGOPT_NET_DHCP_DHCP_THREAD + dhcp_start_dhcp_mgt_thread(); +#endif + +#ifdef CYGOPT_NET_IPV6_ROUTING_THREAD + ipv6_start_routing_thread(); + + // Wait for router solicit process to happen. + while (rs_wait-- && !cyg_net_get_ipv6_advrouter(NULL)) { + cyg_thread_delay(10); + } + if (rs_wait == 0 ) { + diag_printf("No router solicit received\n"); + } else { + // Give Duplicate Address Detection time to work + cyg_thread_delay(200); + } +#endif + +#ifdef CYGDAT_NS_DNS_DEFAULT_SERVER + cyg_dns_res_start(string(CYGDAT_NS_DNS_DEFAULT_SERVER)); +#endif + +#ifdef CYGDAT_NS_DNS_DOMAINNAME_NAME +#define _NAME string(CYGDAT_NS_DNS_DOMAINNAME_NAME) + { + const char buf[] = _NAME; + int len = strlen(_NAME); + + setdomainname(buf,len); + } +#endif + // Open the monitor to other threads. + in_init_all_network_interfaces = 0; + +} + +// EOF phi_network_support.c diff --git a/zpu/sw/ecos/repository/pkgconf/rules.mak b/zpu/sw/ecos/repository/pkgconf/rules.mak new file mode 100644 index 0000000..e043efa --- /dev/null +++ b/zpu/sw/ecos/repository/pkgconf/rules.mak @@ -0,0 +1,210 @@ +#============================================================================= +# +# rules.mak +# +# Generic rules for inclusion by all package makefiles. +# +#============================================================================= +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## +## eCos is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free +## Software Foundation; either version 2 or (at your option) any later version. +## +## eCos is distributed in the hope that it will be useful, but WITHOUT ANY +## WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +## for more details. +## +## You should have received a copy of the GNU General Public License along +## with eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +#============================================================================= +#####DESCRIPTIONBEGIN#### +# +# Author(s): jld +# Contributors: bartv +# Date: 1999-11-04 +# Purpose: Generic rules for inclusion by all package makefiles +# Description: +# +#####DESCRIPTIONEND#### +#============================================================================= + +# FIXME: This definition belongs in the top-level makefile. +export HOST_CC := gcc + +.PHONY: default build clean tests headers mlt_headers + +# include any dependency rules generated previously +ifneq ($(wildcard *.deps),) +include $(wildcard *.deps) +endif + +# GCC since 2.95 does -finit-priority by default so remove it from old HALs +CFLAGS := $(subst -finit-priority,,$(CFLAGS)) + +# -fvtable-gc is known to be broken in all recent GCC. +CFLAGS := $(subst -fvtable-gc,,$(CFLAGS)) + +# To support more recent GCC whilst preserving existing behaviour, we need +# to increase the inlining limit globally from the default 600. Note this +# will break GCC 2.95 based tools and earlier. You must use "make OLDGCC=1" +# to avoid this. +ifneq ($(OLDGCC),1) +CFLAGS := -finline-limit=7000 $(CFLAGS) +endif + +# Separate C++ flags out from C flags. +ACTUAL_CFLAGS = $(CFLAGS) +ACTUAL_CFLAGS := $(subst -fno-rtti,,$(ACTUAL_CFLAGS)) +ACTUAL_CFLAGS := $(subst -frtti,,$(ACTUAL_CFLAGS)) +ACTUAL_CFLAGS := $(subst -Woverloaded-virtual,,$(ACTUAL_CFLAGS)) +ACTUAL_CFLAGS := $(subst -fvtable-gc,,$(ACTUAL_CFLAGS)) + +ACTUAL_CXXFLAGS = $(subst -Wstrict-prototypes,,$(CFLAGS)) + +# pattern matching rules to generate a library object from source code +# object filenames are prefixed to avoid name clashes +# a single dependency rule is generated (file extension = ".o.d") +%.o.d : %.c +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CFLAGS) -Wp,-MD,$(@:.o.d=.tmp) -o $(dir $@)$(OBJECT_PREFIX)_$(notdir $(@:.o.d=.o)) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.o.d=.tmp) > $@ + @rm $(@:.o.d=.tmp) + +%.o.d : %.cxx +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CXXFLAGS) -Wp,-MD,$(@:.o.d=.tmp) -o $(dir $@)$(OBJECT_PREFIX)_$(notdir $(@:.o.d=.o)) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.o.d=.tmp) > $@ + @rm $(@:.o.d=.tmp) + +%.o.d : %.cpp +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CXXFLAGS) -Wp,-MD,$(@:.o.d=.tmp) -o $(dir $@)$(OBJECT_PREFIX)_$(notdir $(@:.o.d=.o)) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.o.d=.tmp) > $@ + @rm $(@:.o.d=.tmp) + +%.o.d : %.S +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CFLAGS) -Wp,-MD,$(@:.o.d=.tmp) -o $(dir $@)$(OBJECT_PREFIX)_$(notdir $(@:.o.d=.o)) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.o.d=.tmp) > $@ + @rm $(@:.o.d=.tmp) + +# pattern matching rules to generate a test object from source code +# object filenames are not prefixed +# a single dependency rule is generated (file extension = ".d") +%.d : %.c +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CFLAGS) -Wp,-MD,$(@:.d=.tmp) -o $(@:.d=.o) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.d=.tmp) > $@ + @rm $(@:.d=.tmp) + +%.d : %.cxx +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CXXFLAGS) -Wp,-MD,$(@:.d=.tmp) -o $(@:.d=.o) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.d=.tmp) > $@ + @rm $(@:.d=.tmp) + +%.d : %.cpp +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CXXFLAGS) -Wp,-MD,$(@:.d=.tmp) -o $(@:.d=.o) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.d=.tmp) > $@ + @rm $(@:.d=.tmp) + +%.d : %.S +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif + $(CC) -c $(INCLUDE_PATH) -I$(dir $<) $(ACTUAL_CFLAGS) -Wp,-MD,$(@:.d=.tmp) -o $(@:.d=.o) $< + @sed -e '/^ *\\/d' -e "s#.*: #$@: #" $(@:.d=.tmp) > $@ + @rm $(@:.d=.tmp) + +# rule to generate a test executable from object code +$(PREFIX)/tests/$(PACKAGE)/%$(EXEEXT): %.d $(wildcard $(PREFIX)/lib/target.ld) $(wildcard $(PREFIX)/lib/*.[ao]) +ifeq ($(HOST),CYGWIN) + @mkdir -p `cygpath -w "$(dir $@)" | sed "s@\\\\\\\\@/@g"` +else + @mkdir -p $(dir $@) +endif +ifneq ($(IGNORE_LINK_ERRORS),) + -$(CC) -L$(PREFIX)/lib -Ttarget.ld -o $@ $(<:.d=.o) $(LDFLAGS) +else + $(CC) -L$(PREFIX)/lib -Ttarget.ld -o $@ $(<:.d=.o) $(LDFLAGS) +endif + +# rule to generate all tests and create a dependency file "tests.deps" by +# concatenating the individual dependency rule files (file extension = ".d") +# generated during compilation +tests: tests.stamp + +TESTS := $(TESTS:.cpp=) +TESTS := $(TESTS:.cxx=) +TESTS := $(TESTS:.c=) +TESTS := $(TESTS:.S=) +tests.stamp: $(foreach target,$(TESTS),$(target).d $(PREFIX)/tests/$(PACKAGE)/$(target)$(EXEEXT)) +ifneq ($(strip $(TESTS)),) + @cat $(TESTS:%=%.d) > $(@:.stamp=.deps) +endif + @touch $@ + +# rule to clean the build tree +clean: + @find . -type f -print | grep -v makefile | xargs rm -f + +# rule to copy MLT files +mlt_headers: $(foreach x,$(MLT),$(PREFIX)/include/pkgconf/$(notdir $x)) + +$(foreach x,$(MLT),$(PREFIX)/include/pkgconf/$(notdir $x)): $(MLT) + @cp $(dir $<)/$(notdir $@) $(PREFIX)/include/pkgconf + @chmod u+w $(PREFIX)/include/pkgconf/$(notdir $@) + +# end of file -- cgit v1.1 From 3d2b8306640ae65aa9b48f70f50c3396324455be Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 6 May 2008 06:00:31 +0000 Subject: forgot to commit log message. --- zpu/ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 8384d0d..7d881d9 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -4,6 +4,10 @@ 2008-05-04 Øyvind Harboe * moved ZPU core files to seperate folder * deleted some obsolete files +2008-05-04 jurij kostasenko + * Make code synthesize on Synopsis + zpu/hdl/zpu4/src/zpu_core_small.vhd + zpu/hdl/zpu4/src/io.vhd 2008-05-01 Øyvind Harboe * zpu/hdl/zy2000 - ZPU implementation used on the zy2000 dev kit 2008-04-17 Arnim Läuger -- cgit v1.1 From 6c7ee841131808466eb0c93e5c8f112771004fbf Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 6 May 2008 06:39:21 +0000 Subject: * Small ZPU now supports interrupts * added simulation example demonstrating interrupts --- .settings/org.eclipse.core.resources.prefs | 3 - zpu/ChangeLog | 3 + zpu/docs/zpu_arch.html | 9 + zpu/hdl/example/bram_dmips.vhd | 3717 +++++++++++++++++++++++ zpu/hdl/example/interrupt.vhd | 3122 +++++++++++++++++++ zpu/hdl/example/log.txt | 58 +- zpu/hdl/example/sim_small_fpga_top.vhd | 19 +- zpu/hdl/example/simzpu_interrupt.do | 29 + zpu/hdl/example_medium/.cvsignore | 4 + zpu/hdl/example_medium/dram_dmips.vhd | 3308 ++++++++++++++++++++ zpu/hdl/example_medium/dram_hello.vhd | 3107 +++++++++++++++++++ zpu/hdl/example_medium/simzpu_medium.do | 14 +- zpu/hdl/example_medium/zpu_config_trace.vhd | 17 + zpu/hdl/index.html | 5 +- zpu/hdl/zpu4/core/zpu_core_small.vhd | 83 +- zpu/hdl/zpu4/core/zpu_core_small_wip.vhd | 498 --- zpu/hdl/zpu4/src/bram.vhd | 3807 ----------------------- zpu/hdl/zpu4/src/bram_dmips.vhd | 3717 ----------------------- zpu/hdl/zpu4/src/dram_dmips.vhd | 3308 -------------------- zpu/hdl/zpu4/src/dram_hello.vhd | 3107 ------------------- zpu/hdl/zpu4/src/zpu_config_trace.vhd | 17 - zpu/hdl/zpu4/test/interrupt/int.bin | Bin 12232 -> 12232 bytes zpu/hdl/zpu4/test/interrupt/int.c | 7 +- zpu/hdl/zpu4/test/interrupt/int.elf | Bin 150454 -> 150458 bytes zpu/hdl/zpu4/test/interrupt/int.ram | 4380 +++++++++++++-------------- 25 files changed, 15638 insertions(+), 16701 deletions(-) delete mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 zpu/hdl/example/bram_dmips.vhd create mode 100644 zpu/hdl/example/interrupt.vhd create mode 100644 zpu/hdl/example/simzpu_interrupt.do create mode 100644 zpu/hdl/example_medium/.cvsignore create mode 100644 zpu/hdl/example_medium/dram_dmips.vhd create mode 100644 zpu/hdl/example_medium/dram_hello.vhd create mode 100644 zpu/hdl/example_medium/zpu_config_trace.vhd delete mode 100644 zpu/hdl/zpu4/core/zpu_core_small_wip.vhd delete mode 100644 zpu/hdl/zpu4/src/bram.vhd delete mode 100644 zpu/hdl/zpu4/src/bram_dmips.vhd delete mode 100644 zpu/hdl/zpu4/src/dram_dmips.vhd delete mode 100644 zpu/hdl/zpu4/src/dram_hello.vhd delete mode 100644 zpu/hdl/zpu4/src/zpu_config_trace.vhd diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 197db03..0000000 --- a/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -#Sun May 04 22:37:24 CEST 2008 -eclipse.preferences.version=1 -encoding//zpu/hdl/zpu4/core/zpu_core_small_wip.vhd=UTF-8 diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 7d881d9..e7bbb93 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,6 @@ +2008-05-06 Øyvind Harboe + * Small ZPU now supports interrupts + * added simulation example demonstrating interrupts 2008-05-05 Øyvind Harboe * added eCos HAL for ZPU zpu/zpu/sw/ecos/repository diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 8582afb..021e987 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -2,12 +2,18 @@

      Index

      + +

      Getting started

      +The ZPU comes with a few simulation examples. +

      +Start with VHDL synthesis examples

      Introduction

      The ZPU is a zero operand, or stack based CPU. The opcodes have a fixed width of 8 bits. @@ -802,5 +808,8 @@ rather uncommon operations. These 32 registers are mapped to memory locations 0x 0x4, 0x8, 0xc. The default interrupt vector at address 0x20 will load the value of these memory locations onto the stack, call _zpu_interrupt and restore them. +

      +See zpu/hdl/zpu4/test/interrupt/ for C code and zpu/hdl/example/simzpu_interrupt.do +for simulation example. \ No newline at end of file diff --git a/zpu/hdl/example/bram_dmips.vhd b/zpu/hdl/example/bram_dmips.vhd new file mode 100644 index 0000000..1d62d21 --- /dev/null +++ b/zpu/hdl/example/bram_dmips.vhd @@ -0,0 +1,3717 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(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 dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+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(to_integer(unsigned(memAAddr))) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(to_integer(unsigned(memAAddr))); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(to_integer(unsigned(memBAddr))) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(to_integer(unsigned(memBAddr))); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/example/interrupt.vhd b/zpu/hdl/example/interrupt.vhd new file mode 100644 index 0000000..821e29a --- /dev/null +++ b/zpu/hdl/example/interrupt.vhd @@ -0,0 +1,3122 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(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 dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80cfe00c", +3 => x"3a0b0b80", +4 => x"c6e00400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"0b8af02d", +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"0b0b80cf", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8b", +171 => x"ab2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8b", +179 => x"ef2d5050", +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"80cfdc0c", +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"82c53f80", +257 => x"c6e63f04", +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"fe3d0d0b", +281 => x"0b80dfc8", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c8085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"dc08802e", +299 => x"a43880cf", +300 => x"e008822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc80c", +304 => x"82a0800b", +305 => x"80dfcc0c", +306 => x"8290800b", +307 => x"80dfd00c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc8", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfcc0cf8", +314 => x"80808480", +315 => x"0b80dfd0", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c80c80c0", +320 => x"a880940b", +321 => x"80dfcc0c", +322 => x"0b0b80cf", +323 => x"980b80df", +324 => x"d00c0470", +325 => x"7080dfd4", +326 => x"335170a7", +327 => x"3880cfe8", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe80c", +332 => x"702d80cf", +333 => x"e8087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfd43450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"c408802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfc4510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"803d0d80", +349 => x"dfe00881", +350 => x"1180dfe0", +351 => x"0c51823d", +352 => x"0d04fe3d", +353 => x"0d80dfe0", +354 => x"085380df", +355 => x"e0085272", +356 => x"722e8f38", +357 => x"80cf9c51", +358 => x"82b03f80", +359 => x"dfe00853", +360 => x"e93980cf", +361 => x"ac5182a2", +362 => x"3fe039fb", +363 => x"3d0d7779", +364 => x"55558056", +365 => x"757524ab", +366 => x"38807424", +367 => x"9d388053", +368 => x"73527451", +369 => x"80e13f80", +370 => x"08547580", +371 => x"2e853880", +372 => x"08305473", +373 => x"800c873d", +374 => x"0d047330", +375 => x"76813257", +376 => x"54dc3974", +377 => x"30558156", +378 => x"738025d2", +379 => x"38ec39fa", +380 => x"3d0d787a", +381 => x"57558057", +382 => x"767524a4", +383 => x"38759f2c", +384 => x"54815375", +385 => x"74327431", +386 => x"5274519b", +387 => x"3f800854", +388 => x"76802e85", +389 => x"38800830", +390 => x"5473800c", +391 => x"883d0d04", +392 => x"74305581", +393 => x"57d739fc", +394 => x"3d0d7678", +395 => x"53548153", +396 => x"80747326", +397 => x"52557280", +398 => x"2e983870", +399 => x"802eab38", +400 => x"807224a6", +401 => x"38711073", +402 => x"10757226", +403 => x"53545272", +404 => x"ea387351", +405 => x"78833874", +406 => x"5170800c", +407 => x"863d0d04", +408 => x"720a100a", +409 => x"720a100a", +410 => x"53537280", +411 => x"2ee43871", +412 => x"7426ed38", +413 => x"73723175", +414 => x"7407740a", +415 => x"100a740a", +416 => x"100a5555", +417 => x"5654e339", +418 => x"f73d0d7c", +419 => x"70525380", +420 => x"fd3f7254", +421 => x"8008550b", +422 => x"0b80cfb8", +423 => x"56815780", +424 => x"0881055a", +425 => x"8b3de411", +426 => x"59538259", +427 => x"f413527b", +428 => x"88110852", +429 => x"5381b43f", +430 => x"80083070", +431 => x"8008079f", +432 => x"2c8a0780", +433 => x"0c538b3d", +434 => x"0d04f63d", +435 => x"0d7c80cf", +436 => x"ec087153", +437 => x"5553b73f", +438 => x"72558008", +439 => x"560b0b80", +440 => x"cfb85781", +441 => x"58800881", +442 => x"055b8c3d", +443 => x"e4115a53", +444 => x"825af413", +445 => x"52881408", +446 => x"5180f03f", +447 => x"80083070", +448 => x"8008079f", +449 => x"2c8a0780", +450 => x"0c548c3d", +451 => x"0d047070", +452 => x"70707570", +453 => x"71830653", +454 => x"555270b4", +455 => x"38717008", +456 => x"7009f7fb", +457 => x"fdff1206", +458 => x"f8848281", +459 => x"80065452", +460 => x"53719b38", +461 => x"84137008", +462 => x"7009f7fb", +463 => x"fdff1206", +464 => x"f8848281", +465 => x"80065452", +466 => x"5371802e", +467 => x"e7387252", +468 => x"71335372", +469 => x"802e8a38", +470 => x"81127033", +471 => x"545272f8", +472 => x"38717431", +473 => x"800c5050", +474 => x"505004f2", +475 => x"3d0d6062", +476 => x"88110870", +477 => x"58565f5a", +478 => x"73802e81", +479 => x"8c388c1a", +480 => x"2270832a", +481 => x"81328106", +482 => x"56587486", +483 => x"38901a08", +484 => x"91387951", +485 => x"90b73fff", +486 => x"55800880", +487 => x"ec388c1a", +488 => x"22587d08", +489 => x"55807883", +490 => x"ffff0670", +491 => x"0a100a81", +492 => x"06415c57", +493 => x"7e772e80", +494 => x"d7387690", +495 => x"38740884", +496 => x"16088817", +497 => x"57585676", +498 => x"802ef238", +499 => x"76548880", +500 => x"77278438", +501 => x"88805473", +502 => x"5375529c", +503 => x"1a0851a4", +504 => x"1a085877", +505 => x"2d800b80", +506 => x"082582e0", +507 => x"38800816", +508 => x"77800831", +509 => x"7f880508", +510 => x"80083170", +511 => x"6188050c", +512 => x"5b585678", +513 => x"ffb43880", +514 => x"5574800c", +515 => x"903d0d04", +516 => x"7a813281", +517 => x"06774056", +518 => x"75802e81", +519 => x"bd387690", +520 => x"38740884", +521 => x"16088817", +522 => x"57585976", +523 => x"802ef238", +524 => x"881a0878", +525 => x"83ffff06", +526 => x"70892a81", +527 => x"06565956", +528 => x"73802e82", +529 => x"f8387577", +530 => x"278b3877", +531 => x"872a8106", +532 => x"5c7b82b5", +533 => x"38767627", +534 => x"83387656", +535 => x"75537852", +536 => x"79085185", +537 => x"833f881a", +538 => x"08763188", +539 => x"1b0c7908", +540 => x"167a0c76", +541 => x"56751977", +542 => x"77317f88", +543 => x"05087831", +544 => x"70618805", +545 => x"0c415859", +546 => x"7e802efe", +547 => x"fa388c1a", +548 => x"2258ff8a", +549 => x"39787954", +550 => x"7c537b52", +551 => x"5684c93f", +552 => x"881a0879", +553 => x"31881b0c", +554 => x"7908197a", +555 => x"0c7c7631", +556 => x"5d7c8e38", +557 => x"79518ff2", +558 => x"3f800881", +559 => x"8f388008", +560 => x"5f751c77", +561 => x"77317f88", +562 => x"05087831", +563 => x"70618805", +564 => x"0c5d585c", +565 => x"7a802efe", +566 => x"ae387681", +567 => x"83387408", +568 => x"84160888", +569 => x"1757585c", +570 => x"76802ef2", +571 => x"3876538a", +572 => x"527b5182", +573 => x"d33f8008", +574 => x"7c318105", +575 => x"5d800884", +576 => x"3881175d", +577 => x"815f7c59", +578 => x"767d2783", +579 => x"38765994", +580 => x"1a08881b", +581 => x"08115758", +582 => x"807a085c", +583 => x"54901a08", +584 => x"7b278338", +585 => x"81547579", +586 => x"25843873", +587 => x"ba387779", +588 => x"24fee238", +589 => x"77537b52", +590 => x"9c1a0851", +591 => x"a41a0859", +592 => x"782d8008", +593 => x"56800880", +594 => x"24fee238", +595 => x"8c1a2280", +596 => x"c0075e7d", +597 => x"8c1b23ff", +598 => x"5574800c", +599 => x"903d0d04", +600 => x"7effa338", +601 => x"ff873975", +602 => x"537b527a", +603 => x"5182f93f", +604 => x"7908167a", +605 => x"0c79518e", +606 => x"b13f8008", +607 => x"cf387c76", +608 => x"315d7cfe", +609 => x"bc38feac", +610 => x"39901a08", +611 => x"7a087131", +612 => x"78117056", +613 => x"5a575280", +614 => x"cfec0851", +615 => x"84943f80", +616 => x"08802eff", +617 => x"a7388008", +618 => x"901b0c80", +619 => x"08167a0c", +620 => x"77941b0c", +621 => x"76881b0c", +622 => x"7656fd99", +623 => x"39790858", +624 => x"901a0878", +625 => x"27833881", +626 => x"54757727", +627 => x"843873b3", +628 => x"38941a08", +629 => x"54737726", +630 => x"80d33873", +631 => x"5378529c", +632 => x"1a0851a4", +633 => x"1a085877", +634 => x"2d800856", +635 => x"80088024", +636 => x"fd83388c", +637 => x"1a2280c0", +638 => x"075e7d8c", +639 => x"1b23ff55", +640 => x"fed73975", +641 => x"53785277", +642 => x"5181dd3f", +643 => x"7908167a", +644 => x"0c79518d", +645 => x"953f8008", +646 => x"802efcd9", +647 => x"388c1a22", +648 => x"80c0075e", +649 => x"7d8c1b23", +650 => x"ff55fead", +651 => x"39767754", +652 => x"79537852", +653 => x"5681b13f", +654 => x"881a0877", +655 => x"31881b0c", +656 => x"7908177a", +657 => x"0cfcae39", +658 => x"fa3d0d7a", +659 => x"79028805", +660 => x"a7053355", +661 => x"53548374", +662 => x"2780df38", +663 => x"71830651", +664 => x"7080d738", +665 => x"71715755", +666 => x"83517582", +667 => x"802913ff", +668 => x"12525670", +669 => x"8025f338", +670 => x"837427bc", +671 => x"38740876", +672 => x"327009f7", +673 => x"fbfdff12", +674 => x"06f88482", +675 => x"81800651", +676 => x"5170802e", +677 => x"98387451", +678 => x"80527033", +679 => x"5772772e", +680 => x"b9388111", +681 => x"81135351", +682 => x"837227ee", +683 => x"38fc1484", +684 => x"16565473", +685 => x"8326c638", +686 => x"7452ff14", +687 => x"5170ff2e", +688 => x"97387133", +689 => x"5472742e", +690 => x"98388112", +691 => x"ff125252", +692 => x"70ff2e09", +693 => x"8106eb38", +694 => x"80517080", +695 => x"0c883d0d", +696 => x"0471800c", +697 => x"883d0d04", +698 => x"fa3d0d78", +699 => x"7a7c7272", +700 => x"72595755", +701 => x"58565774", +702 => x"7727b238", +703 => x"75155176", +704 => x"7127aa38", +705 => x"707618ff", +706 => x"18535353", +707 => x"70ff2e96", +708 => x"38ff12ff", +709 => x"14545272", +710 => x"337234ff", +711 => x"115170ff", +712 => x"2e098106", +713 => x"ec387680", +714 => x"0c883d0d", +715 => x"048f7627", +716 => x"80e63874", +717 => x"77078306", +718 => x"517080dc", +719 => x"38767552", +720 => x"53707084", +721 => x"05520873", +722 => x"70840555", +723 => x"0c727170", +724 => x"84055308", +725 => x"71708405", +726 => x"530c7170", +727 => x"84055308", +728 => x"71708405", +729 => x"530c7170", +730 => x"84055308", +731 => x"71708405", +732 => x"530cf015", +733 => x"5553738f", +734 => x"26c73883", +735 => x"74279538", +736 => x"70708405", +737 => x"52087370", +738 => x"8405550c", +739 => x"fc145473", +740 => x"8326ed38", +741 => x"72715452", +742 => x"ff145170", +743 => x"ff2eff86", +744 => x"38727081", +745 => x"05543372", +746 => x"70810554", +747 => x"34ff1151", +748 => x"ea39ef3d", +749 => x"0d636567", +750 => x"405d427b", +751 => x"802e8582", +752 => x"386151a9", +753 => x"e73ff81c", +754 => x"70841208", +755 => x"70fc0670", +756 => x"628b0570", +757 => x"f8064159", +758 => x"455c5f41", +759 => x"57967427", +760 => x"82c53880", +761 => x"7b247e7c", +762 => x"26075880", +763 => x"5477742e", +764 => x"09810682", +765 => x"ab38787b", +766 => x"2581fe38", +767 => x"781780d7", +768 => x"a80b8805", +769 => x"085b5679", +770 => x"762e84c5", +771 => x"38841608", +772 => x"70fe0617", +773 => x"84110881", +774 => x"06415555", +775 => x"7e828d38", +776 => x"74fc0658", +777 => x"79762e84", +778 => x"e3387818", +779 => x"5f7e7b25", +780 => x"81ff387c", +781 => x"81065473", +782 => x"82c13876", +783 => x"77083184", +784 => x"1108fc06", +785 => x"56577580", +786 => x"2e913879", +787 => x"762e84f0", +788 => x"38741819", +789 => x"58777b25", +790 => x"84913876", +791 => x"802e829b", +792 => x"38781556", +793 => x"7a762482", +794 => x"92388c17", +795 => x"08881808", +796 => x"718c120c", +797 => x"88120c5e", +798 => x"75598817", +799 => x"61fc055b", +800 => x"5679a426", +801 => x"85ff387b", +802 => x"76595593", +803 => x"7a2780c9", +804 => x"387b7084", +805 => x"055d087c", +806 => x"56760c74", +807 => x"70840556", +808 => x"088c180c", +809 => x"9017589b", +810 => x"7a27ae38", +811 => x"74708405", +812 => x"5608780c", +813 => x"74708405", +814 => x"56089418", +815 => x"0c981758", +816 => x"a37a2795", +817 => x"38747084", +818 => x"05560878", +819 => x"0c747084", +820 => x"0556089c", +821 => x"180ca017", +822 => x"58747084", +823 => x"05560875", +824 => x"5f787084", +825 => x"055a0c77", +826 => x"7e708405", +827 => x"40087170", +828 => x"8405530c", +829 => x"7e08710c", +830 => x"5d787b31", +831 => x"56758f26", +832 => x"80c93884", +833 => x"17088106", +834 => x"79078418", +835 => x"0c781784", +836 => x"11088107", +837 => x"84120c5b", +838 => x"6151a791", +839 => x"3f881754", +840 => x"73800c93", +841 => x"3d0d0490", +842 => x"5bfdb839", +843 => x"7756fe83", +844 => x"398c1608", +845 => x"88170871", +846 => x"8c120c88", +847 => x"120c587e", +848 => x"707c3157", +849 => x"598f7627", +850 => x"ffb9387a", +851 => x"17841808", +852 => x"81067c07", +853 => x"84190c76", +854 => x"81078412", +855 => x"0c761184", +856 => x"11088107", +857 => x"84120c5b", +858 => x"88055261", +859 => x"518fda3f", +860 => x"6151a6b9", +861 => x"3f881754", +862 => x"ffa6397d", +863 => x"52615197", +864 => x"d73f8008", +865 => x"5a800880", +866 => x"2e81ab38", +867 => x"8008f805", +868 => x"60840508", +869 => x"fe066105", +870 => x"58557477", +871 => x"2e83f238", +872 => x"fc195877", +873 => x"a42681b0", +874 => x"387b8008", +875 => x"56579378", +876 => x"2780dc38", +877 => x"7b707084", +878 => x"05520880", +879 => x"08708405", +880 => x"800c0c80", +881 => x"08717084", +882 => x"0553085d", +883 => x"567b7670", +884 => x"8405580c", +885 => x"579b7827", +886 => x"b6387670", +887 => x"84055808", +888 => x"75708405", +889 => x"570c7670", +890 => x"84055808", +891 => x"75708405", +892 => x"570ca378", +893 => x"27993876", +894 => x"70840558", +895 => x"08757084", +896 => x"05570c76", +897 => x"70840558", +898 => x"08757084", +899 => x"05570c76", +900 => x"70840558", +901 => x"08775e75", +902 => x"70840557", +903 => x"0c747d70", +904 => x"84055f08", +905 => x"71708405", +906 => x"530c7d08", +907 => x"710c5f7b", +908 => x"5261518e", +909 => x"943f6151", +910 => x"a4f33f79", +911 => x"800c933d", +912 => x"0d047d52", +913 => x"61519690", +914 => x"3f800880", +915 => x"0c933d0d", +916 => x"04841608", +917 => x"55fbc939", +918 => x"77537b52", +919 => x"800851a2", +920 => x"a53f7b52", +921 => x"61518de1", +922 => x"3fcc398c", +923 => x"16088817", +924 => x"08718c12", +925 => x"0c88120c", +926 => x"5d8c1708", +927 => x"88180871", +928 => x"8c120c88", +929 => x"120c5977", +930 => x"59fbef39", +931 => x"7818901c", +932 => x"40557e75", +933 => x"24fb9c38", +934 => x"7a177080", +935 => x"d7a80b88", +936 => x"050c757c", +937 => x"31810784", +938 => x"120c5684", +939 => x"17088106", +940 => x"7b078418", +941 => x"0c6151a3", +942 => x"f43f8817", +943 => x"54fce139", +944 => x"74181990", +945 => x"1c5e5a7c", +946 => x"7a24fb8f", +947 => x"388c1708", +948 => x"88180871", +949 => x"8c120c88", +950 => x"120c5e88", +951 => x"1761fc05", +952 => x"575975a4", +953 => x"2681b638", +954 => x"7b795955", +955 => x"93762780", +956 => x"c9387b70", +957 => x"84055d08", +958 => x"7c56790c", +959 => x"74708405", +960 => x"56088c18", +961 => x"0c901758", +962 => x"9b7627ae", +963 => x"38747084", +964 => x"05560878", +965 => x"0c747084", +966 => x"05560894", +967 => x"180c9817", +968 => x"58a37627", +969 => x"95387470", +970 => x"84055608", +971 => x"780c7470", +972 => x"84055608", +973 => x"9c180ca0", +974 => x"17587470", +975 => x"84055608", +976 => x"75417870", +977 => x"84055a0c", +978 => x"77607084", +979 => x"05420871", +980 => x"70840553", +981 => x"0c600871", +982 => x"0c5e7a17", +983 => x"7080d7a8", +984 => x"0b88050c", +985 => x"7a7c3181", +986 => x"0784120c", +987 => x"58841708", +988 => x"81067b07", +989 => x"84180c61", +990 => x"51a2b23f", +991 => x"78547380", +992 => x"0c933d0d", +993 => x"0479537b", +994 => x"5275519f", +995 => x"f93ffae9", +996 => x"39841508", +997 => x"fc061960", +998 => x"5859fadd", +999 => x"3975537b", +1000 => x"5278519f", +1001 => x"e13f7a17", +1002 => x"7080d7a8", +1003 => x"0b88050c", +1004 => x"7a7c3181", +1005 => x"0784120c", +1006 => x"58841708", +1007 => x"81067b07", +1008 => x"84180c61", +1009 => x"51a1e63f", +1010 => x"7854ffb2", +1011 => x"39fa3d0d", +1012 => x"7880cfec", +1013 => x"085455b8", +1014 => x"1308802e", +1015 => x"81af388c", +1016 => x"15227083", +1017 => x"ffff0670", +1018 => x"832a8132", +1019 => x"81065555", +1020 => x"5672802e", +1021 => x"80da3873", +1022 => x"842a8132", +1023 => x"810657ff", +1024 => x"537680f2", +1025 => x"3873822a", +1026 => x"81065473", +1027 => x"802eb938", +1028 => x"b0150854", +1029 => x"73802e9c", +1030 => x"3880c015", +1031 => x"5373732e", +1032 => x"8f387352", +1033 => x"80cfec08", +1034 => x"518a9e3f", +1035 => x"8c152256", +1036 => x"76b0160c", +1037 => x"75db0657", +1038 => x"768c1623", +1039 => x"800b8416", +1040 => x"0c901508", +1041 => x"750c7656", +1042 => x"75880754", +1043 => x"738c1623", +1044 => x"90150880", +1045 => x"2ebf388c", +1046 => x"15227081", +1047 => x"06555373", +1048 => x"9c38720a", +1049 => x"100a8106", +1050 => x"56758538", +1051 => x"94150854", +1052 => x"7388160c", +1053 => x"80537280", +1054 => x"0c883d0d", +1055 => x"04800b88", +1056 => x"160c9415", +1057 => x"08309816", +1058 => x"0c8053ea", +1059 => x"39725182", +1060 => x"a63ffecb", +1061 => x"3974518f", +1062 => x"bc3f8c15", +1063 => x"22708106", +1064 => x"55537380", +1065 => x"2effbb38", +1066 => x"d439f83d", +1067 => x"0d7a5776", +1068 => x"802e8197", +1069 => x"3880cfec", +1070 => x"0854b814", +1071 => x"08802e80", +1072 => x"eb388c17", +1073 => x"2270902b", +1074 => x"70902c70", +1075 => x"832a8132", +1076 => x"81065b5b", +1077 => x"57557780", +1078 => x"cb389017", +1079 => x"08567580", +1080 => x"2e80c138", +1081 => x"76087631", +1082 => x"76780c79", +1083 => x"83065555", +1084 => x"73853894", +1085 => x"17085877", +1086 => x"88180c80", +1087 => x"7525a538", +1088 => x"74537552", +1089 => x"9c170851", +1090 => x"a4170854", +1091 => x"732d800b", +1092 => x"80082580", +1093 => x"c9388008", +1094 => x"16758008", +1095 => x"31565674", +1096 => x"8024dd38", +1097 => x"800b800c", +1098 => x"8a3d0d04", +1099 => x"73518187", +1100 => x"3f8c1722", +1101 => x"70902b70", +1102 => x"902c7083", +1103 => x"2a813281", +1104 => x"065b5b57", +1105 => x"5577dd38", +1106 => x"ff9039a1", +1107 => x"aa5280cf", +1108 => x"ec08518c", +1109 => x"d03f8008", +1110 => x"800c8a3d", +1111 => x"0d048c17", +1112 => x"2280c007", +1113 => x"58778c18", +1114 => x"23ff0b80", +1115 => x"0c8a3d0d", +1116 => x"04fa3d0d", +1117 => x"797080dc", +1118 => x"298c1154", +1119 => x"7a535657", +1120 => x"8fd63f80", +1121 => x"08800855", +1122 => x"56800880", +1123 => x"2ea23880", +1124 => x"088c0554", +1125 => x"800b8008", +1126 => x"0c768008", +1127 => x"84050c73", +1128 => x"80088805", +1129 => x"0c745380", +1130 => x"5273519c", +1131 => x"f53f7554", +1132 => x"73800c88", +1133 => x"3d0d0470", +1134 => x"707074a8", +1135 => x"f60bbc12", +1136 => x"0c53810b", +1137 => x"b8140c80", +1138 => x"0b84dc14", +1139 => x"0c830b84", +1140 => x"e0140c84", +1141 => x"e81384e4", +1142 => x"140c8413", +1143 => x"08518070", +1144 => x"720c7084", +1145 => x"130c7088", +1146 => x"130c5284", +1147 => x"0b8c1223", +1148 => x"718e1223", +1149 => x"7190120c", +1150 => x"7194120c", +1151 => x"7198120c", +1152 => x"709c120c", +1153 => x"80c1e50b", +1154 => x"a0120c80", +1155 => x"c2b10ba4", +1156 => x"120c80c3", +1157 => x"ad0ba812", +1158 => x"0c80c3fe", +1159 => x"0bac120c", +1160 => x"88130872", +1161 => x"710c7284", +1162 => x"120c7288", +1163 => x"120c5189", +1164 => x"0b8c1223", +1165 => x"810b8e12", +1166 => x"23719012", +1167 => x"0c719412", +1168 => x"0c719812", +1169 => x"0c709c12", +1170 => x"0c80c1e5", +1171 => x"0ba0120c", +1172 => x"80c2b10b", +1173 => x"a4120c80", +1174 => x"c3ad0ba8", +1175 => x"120c80c3", +1176 => x"fe0bac12", +1177 => x"0c8c1308", +1178 => x"72710c72", +1179 => x"84120c72", +1180 => x"88120c51", +1181 => x"8a0b8c12", +1182 => x"23820b8e", +1183 => x"12237190", +1184 => x"120c7194", +1185 => x"120c7198", +1186 => x"120c709c", +1187 => x"120c80c1", +1188 => x"e50ba012", +1189 => x"0c80c2b1", +1190 => x"0ba4120c", +1191 => x"80c3ad0b", +1192 => x"a8120c80", +1193 => x"c3fe0bac", +1194 => x"120c5050", +1195 => x"5004f83d", +1196 => x"0d7a80cf", +1197 => x"ec08b811", +1198 => x"08575758", +1199 => x"7481ec38", +1200 => x"a8f60bbc", +1201 => x"170c810b", +1202 => x"b8170c74", +1203 => x"84dc170c", +1204 => x"830b84e0", +1205 => x"170c84e8", +1206 => x"1684e417", +1207 => x"0c841608", +1208 => x"75710c75", +1209 => x"84120c75", +1210 => x"88120c59", +1211 => x"840b8c1a", +1212 => x"23748e1a", +1213 => x"2374901a", +1214 => x"0c74941a", +1215 => x"0c74981a", +1216 => x"0c789c1a", +1217 => x"0c80c1e5", +1218 => x"0ba01a0c", +1219 => x"80c2b10b", +1220 => x"a41a0c80", +1221 => x"c3ad0ba8", +1222 => x"1a0c80c3", +1223 => x"fe0bac1a", +1224 => x"0c881608", +1225 => x"75710c75", +1226 => x"84120c75", +1227 => x"88120c57", +1228 => x"890b8c18", +1229 => x"23810b8e", +1230 => x"18237490", +1231 => x"180c7494", +1232 => x"180c7498", +1233 => x"180c769c", +1234 => x"180c80c1", +1235 => x"e50ba018", +1236 => x"0c80c2b1", +1237 => x"0ba4180c", +1238 => x"80c3ad0b", +1239 => x"a8180c80", +1240 => x"c3fe0bac", +1241 => x"180c8c16", +1242 => x"0875710c", +1243 => x"7584120c", +1244 => x"7588120c", +1245 => x"548a0b8c", +1246 => x"1523820b", +1247 => x"8e152374", +1248 => x"90150c74", +1249 => x"94150c74", +1250 => x"98150c73", +1251 => x"9c150c80", +1252 => x"c1e50ba0", +1253 => x"150c80c2", +1254 => x"b10ba415", +1255 => x"0c80c3ad", +1256 => x"0ba8150c", +1257 => x"80c3fe0b", +1258 => x"ac150c84", +1259 => x"dc168811", +1260 => x"08841208", +1261 => x"ff055757", +1262 => x"57807524", +1263 => x"9f388c16", +1264 => x"2270902b", +1265 => x"70902c51", +1266 => x"55597380", +1267 => x"2e80ed38", +1268 => x"80dc16ff", +1269 => x"16565674", +1270 => x"8025e338", +1271 => x"76085574", +1272 => x"802e8f38", +1273 => x"74881108", +1274 => x"841208ff", +1275 => x"05575757", +1276 => x"c83982fc", +1277 => x"5277518a", +1278 => x"df3f8008", +1279 => x"80085556", +1280 => x"8008802e", +1281 => x"a3388008", +1282 => x"8c057580", +1283 => x"080c5484", +1284 => x"0b800884", +1285 => x"050c7380", +1286 => x"0888050c", +1287 => x"82f05374", +1288 => x"52735197", +1289 => x"fd3f7554", +1290 => x"7374780c", +1291 => x"5573ffb4", +1292 => x"388c780c", +1293 => x"800b800c", +1294 => x"8a3d0d04", +1295 => x"810b8c17", +1296 => x"2373760c", +1297 => x"7388170c", +1298 => x"7384170c", +1299 => x"7390170c", +1300 => x"7394170c", +1301 => x"7398170c", +1302 => x"ff0b8e17", +1303 => x"2373b017", +1304 => x"0c73b417", +1305 => x"0c7380c4", +1306 => x"170c7380", +1307 => x"c8170c75", +1308 => x"800c8a3d", +1309 => x"0d047070", +1310 => x"a1aa5273", +1311 => x"5186a63f", +1312 => x"50500470", +1313 => x"70a1aa52", +1314 => x"80cfec08", +1315 => x"5186963f", +1316 => x"505004fb", +1317 => x"3d0d7770", +1318 => x"52569890", +1319 => x"3f80d7a8", +1320 => x"0b880508", +1321 => x"841108fc", +1322 => x"06707b31", +1323 => x"9fef05e0", +1324 => x"8006e080", +1325 => x"05525555", +1326 => x"a0807524", +1327 => x"94388052", +1328 => x"755197ea", +1329 => x"3f80d7b0", +1330 => x"08145372", +1331 => x"80082e8f", +1332 => x"38755197", +1333 => x"d83f8053", +1334 => x"72800c87", +1335 => x"3d0d0474", +1336 => x"30527551", +1337 => x"97c83f80", +1338 => x"08ff2ea8", +1339 => x"3880d7a8", +1340 => x"0b880508", +1341 => x"74763181", +1342 => x"0784120c", +1343 => x"5380d6ec", +1344 => x"08753180", +1345 => x"d6ec0c75", +1346 => x"5197a23f", +1347 => x"810b800c", +1348 => x"873d0d04", +1349 => x"80527551", +1350 => x"97943f80", +1351 => x"d7a80b88", +1352 => x"05088008", +1353 => x"71315454", +1354 => x"8f7325ff", +1355 => x"a4388008", +1356 => x"80d79c08", +1357 => x"3180d6ec", +1358 => x"0c728107", +1359 => x"84150c75", +1360 => x"5196ea3f", +1361 => x"8053ff90", +1362 => x"39f73d0d", +1363 => x"7b7d545a", +1364 => x"72802e82", +1365 => x"83387951", +1366 => x"96d23ff8", +1367 => x"13841108", +1368 => x"70fe0670", +1369 => x"13841108", +1370 => x"fc065c57", +1371 => x"58545780", +1372 => x"d7b00874", +1373 => x"2e82de38", +1374 => x"7784150c", +1375 => x"80738106", +1376 => x"56597479", +1377 => x"2e81d538", +1378 => x"77148411", +1379 => x"08810656", +1380 => x"5374a038", +1381 => x"77165678", +1382 => x"81e63888", +1383 => x"14085574", +1384 => x"80d7b02e", +1385 => x"82f9388c", +1386 => x"1408708c", +1387 => x"170c7588", +1388 => x"120c5875", +1389 => x"81078418", +1390 => x"0c751776", +1391 => x"710c5478", +1392 => x"81913883", +1393 => x"ff762781", +1394 => x"c8387589", +1395 => x"2a76832a", +1396 => x"54547380", +1397 => x"2ebf3875", +1398 => x"862ab805", +1399 => x"53847427", +1400 => x"b43880db", +1401 => x"14539474", +1402 => x"27ab3875", +1403 => x"8c2a80ee", +1404 => x"055380d4", +1405 => x"74279e38", +1406 => x"758f2a80", +1407 => x"f7055382", +1408 => x"d4742791", +1409 => x"3875922a", +1410 => x"80fc0553", +1411 => x"8ad47427", +1412 => x"843880fe", +1413 => x"53721010", +1414 => x"1080d7a8", +1415 => x"05881108", +1416 => x"55557375", +1417 => x"2e82bf38", +1418 => x"841408fc", +1419 => x"06597579", +1420 => x"278d3888", +1421 => x"14085473", +1422 => x"752e0981", +1423 => x"06ea388c", +1424 => x"1408708c", +1425 => x"190c7488", +1426 => x"190c7788", +1427 => x"120c5576", +1428 => x"8c150c79", +1429 => x"5194d63f", +1430 => x"8b3d0d04", +1431 => x"76087771", +1432 => x"31587605", +1433 => x"88180856", +1434 => x"567480d7", +1435 => x"b02e80e0", +1436 => x"388c1708", +1437 => x"708c170c", +1438 => x"7588120c", +1439 => x"53fe8939", +1440 => x"8814088c", +1441 => x"1508708c", +1442 => x"130c5988", +1443 => x"190cfea3", +1444 => x"3975832a", +1445 => x"70545480", +1446 => x"74248198", +1447 => x"3872822c", +1448 => x"81712b80", +1449 => x"d7ac0807", +1450 => x"80d7a80b", +1451 => x"84050c74", +1452 => x"10101080", +1453 => x"d7a80588", +1454 => x"1108718c", +1455 => x"1b0c7088", +1456 => x"1b0c7988", +1457 => x"130c565a", +1458 => x"55768c15", +1459 => x"0cff8439", +1460 => x"8159fdb4", +1461 => x"39771673", +1462 => x"81065455", +1463 => x"72983876", +1464 => x"08777131", +1465 => x"5875058c", +1466 => x"18088819", +1467 => x"08718c12", +1468 => x"0c88120c", +1469 => x"55557481", +1470 => x"0784180c", +1471 => x"7680d7a8", +1472 => x"0b88050c", +1473 => x"80d7a408", +1474 => x"7526fec7", +1475 => x"3880d7a0", +1476 => x"08527951", +1477 => x"fafd3f79", +1478 => x"5193923f", +1479 => x"feba3981", +1480 => x"778c170c", +1481 => x"7788170c", +1482 => x"758c190c", +1483 => x"7588190c", +1484 => x"59fd8039", +1485 => x"83147082", +1486 => x"2c81712b", +1487 => x"80d7ac08", +1488 => x"0780d7a8", +1489 => x"0b84050c", +1490 => x"75101010", +1491 => x"80d7a805", +1492 => x"88110871", +1493 => x"8c1c0c70", +1494 => x"881c0c7a", +1495 => x"88130c57", +1496 => x"5b5653fe", +1497 => x"e4398073", +1498 => x"24a33872", +1499 => x"822c8171", +1500 => x"2b80d7ac", +1501 => x"080780d7", +1502 => x"a80b8405", +1503 => x"0c58748c", +1504 => x"180c7388", +1505 => x"180c7688", +1506 => x"160cfdc3", +1507 => x"39831370", +1508 => x"822c8171", +1509 => x"2b80d7ac", +1510 => x"080780d7", +1511 => x"a80b8405", +1512 => x"0c5953da", +1513 => x"39f93d0d", +1514 => x"797b5853", +1515 => x"800b80cf", +1516 => x"ec085356", +1517 => x"72722ebc", +1518 => x"3884dc13", +1519 => x"5574762e", +1520 => x"b3388815", +1521 => x"08841608", +1522 => x"ff055454", +1523 => x"80732499", +1524 => x"388c1422", +1525 => x"70902b53", +1526 => x"587180d4", +1527 => x"3880dc14", +1528 => x"ff145454", +1529 => x"728025e9", +1530 => x"38740855", +1531 => x"74d43880", +1532 => x"cfec0852", +1533 => x"84dc1255", +1534 => x"74802ead", +1535 => x"38881508", +1536 => x"841608ff", +1537 => x"05545480", +1538 => x"73249838", +1539 => x"8c142270", +1540 => x"902b5358", +1541 => x"71ad3880", +1542 => x"dc14ff14", +1543 => x"54547280", +1544 => x"25ea3874", +1545 => x"085574d5", +1546 => x"3875800c", +1547 => x"893d0d04", +1548 => x"7351762d", +1549 => x"75800807", +1550 => x"80dc15ff", +1551 => x"15555556", +1552 => x"ffa23973", +1553 => x"51762d75", +1554 => x"80080780", +1555 => x"dc15ff15", +1556 => x"555556ca", +1557 => x"39ea3d0d", +1558 => x"688c1122", +1559 => x"700a100a", +1560 => x"81065758", +1561 => x"567480e4", +1562 => x"388e1622", +1563 => x"70902b70", +1564 => x"902c5155", +1565 => x"58807424", +1566 => x"b138983d", +1567 => x"c4055373", +1568 => x"5280cfec", +1569 => x"08519481", +1570 => x"3f800b80", +1571 => x"08249738", +1572 => x"7983e080", +1573 => x"06547380", +1574 => x"c0802e81", +1575 => x"8f387382", +1576 => x"80802e81", +1577 => x"91388c16", +1578 => x"22577690", +1579 => x"80075473", +1580 => x"8c172388", +1581 => x"805280cf", +1582 => x"ec085181", +1583 => x"9b3f8008", +1584 => x"9d388c16", +1585 => x"22820755", +1586 => x"748c1723", +1587 => x"80c31670", +1588 => x"770c9017", +1589 => x"0c810b94", +1590 => x"170c983d", +1591 => x"0d0480cf", +1592 => x"ec08a8f6", +1593 => x"0bbc120c", +1594 => x"588c1622", +1595 => x"81800754", +1596 => x"738c1723", +1597 => x"8008760c", +1598 => x"80089017", +1599 => x"0c88800b", +1600 => x"94170c74", +1601 => x"802ed338", +1602 => x"8e162270", +1603 => x"902b7090", +1604 => x"2c535654", +1605 => x"9afb3f80", +1606 => x"08802eff", +1607 => x"bd388c16", +1608 => x"22810757", +1609 => x"768c1723", +1610 => x"983d0d04", +1611 => x"810b8c17", +1612 => x"225855fe", +1613 => x"f539a816", +1614 => x"0880c3ad", +1615 => x"2e098106", +1616 => x"fee4388c", +1617 => x"16228880", +1618 => x"0754738c", +1619 => x"17238880", +1620 => x"0b80cc17", +1621 => x"0cfedc39", +1622 => x"f43d0d7e", +1623 => x"608b1170", +1624 => x"f8065b55", +1625 => x"555d7296", +1626 => x"26833890", +1627 => x"58807824", +1628 => x"74792607", +1629 => x"55805474", +1630 => x"742e0981", +1631 => x"0680ca38", +1632 => x"7c518ea8", +1633 => x"3f7783f7", +1634 => x"2680c538", +1635 => x"77832a70", +1636 => x"10101080", +1637 => x"d7a8058c", +1638 => x"11085858", +1639 => x"5475772e", +1640 => x"81f03884", +1641 => x"1608fc06", +1642 => x"8c170888", +1643 => x"1808718c", +1644 => x"120c8812", +1645 => x"0c5b7605", +1646 => x"84110881", +1647 => x"0784120c", +1648 => x"537c518d", +1649 => x"e83f8816", +1650 => x"5473800c", +1651 => x"8e3d0d04", +1652 => x"77892a78", +1653 => x"832a5854", +1654 => x"73802ebf", +1655 => x"3877862a", +1656 => x"b8055784", +1657 => x"7427b438", +1658 => x"80db1457", +1659 => x"947427ab", +1660 => x"38778c2a", +1661 => x"80ee0557", +1662 => x"80d47427", +1663 => x"9e38778f", +1664 => x"2a80f705", +1665 => x"5782d474", +1666 => x"27913877", +1667 => x"922a80fc", +1668 => x"05578ad4", +1669 => x"74278438", +1670 => x"80fe5776", +1671 => x"10101080", +1672 => x"d7a8058c", +1673 => x"11085653", +1674 => x"74732ea3", +1675 => x"38841508", +1676 => x"fc067079", +1677 => x"31555673", +1678 => x"8f2488e4", +1679 => x"38738025", +1680 => x"88e6388c", +1681 => x"15085574", +1682 => x"732e0981", +1683 => x"06df3881", +1684 => x"175980d7", +1685 => x"b8085675", +1686 => x"80d7b02e", +1687 => x"82cc3884", +1688 => x"1608fc06", +1689 => x"70793155", +1690 => x"55738f24", +1691 => x"bb3880d7", +1692 => x"b00b80d7", +1693 => x"bc0c80d7", +1694 => x"b00b80d7", +1695 => x"b80c8074", +1696 => x"2480db38", +1697 => x"74168411", +1698 => x"08810784", +1699 => x"120c53fe", +1700 => x"b0398816", +1701 => x"8c110857", +1702 => x"5975792e", +1703 => x"098106fe", +1704 => x"82388214", +1705 => x"59ffab39", +1706 => x"77167881", +1707 => x"0784180c", +1708 => x"7080d7bc", +1709 => x"0c7080d7", +1710 => x"b80c80d7", +1711 => x"b00b8c12", +1712 => x"0c8c1108", +1713 => x"88120c74", +1714 => x"81078412", +1715 => x"0c740574", +1716 => x"710c5b7c", +1717 => x"518bd63f", +1718 => x"881654fd", +1719 => x"ec3983ff", +1720 => x"75278391", +1721 => x"3874892a", +1722 => x"75832a54", +1723 => x"5473802e", +1724 => x"bf387486", +1725 => x"2ab80553", +1726 => x"847427b4", +1727 => x"3880db14", +1728 => x"53947427", +1729 => x"ab38748c", +1730 => x"2a80ee05", +1731 => x"5380d474", +1732 => x"279e3874", +1733 => x"8f2a80f7", +1734 => x"055382d4", +1735 => x"74279138", +1736 => x"74922a80", +1737 => x"fc05538a", +1738 => x"d4742784", +1739 => x"3880fe53", +1740 => x"72101010", +1741 => x"80d7a805", +1742 => x"88110855", +1743 => x"5773772e", +1744 => x"868b3884", +1745 => x"1408fc06", +1746 => x"5b747b27", +1747 => x"8d388814", +1748 => x"08547377", +1749 => x"2e098106", +1750 => x"ea388c14", +1751 => x"0880d7a8", +1752 => x"0b840508", +1753 => x"718c190c", +1754 => x"7588190c", +1755 => x"7788130c", +1756 => x"5c57758c", +1757 => x"150c7853", +1758 => x"80792483", +1759 => x"98387282", +1760 => x"2c81712b", +1761 => x"5656747b", +1762 => x"2680ca38", +1763 => x"7a750657", +1764 => x"7682a338", +1765 => x"78fc0684", +1766 => x"05597410", +1767 => x"707c0655", +1768 => x"55738292", +1769 => x"38841959", +1770 => x"f13980d7", +1771 => x"a80b8405", +1772 => x"0879545b", +1773 => x"788025c6", +1774 => x"3882da39", +1775 => x"74097b06", +1776 => x"7080d7a8", +1777 => x"0b84050c", +1778 => x"5b741055", +1779 => x"747b2685", +1780 => x"387485bc", +1781 => x"3880d7a8", +1782 => x"0b880508", +1783 => x"70841208", +1784 => x"fc06707b", +1785 => x"317b7226", +1786 => x"8f722507", +1787 => x"5d575c5c", +1788 => x"5578802e", +1789 => x"80d93879", +1790 => x"1580d7a0", +1791 => x"08199011", +1792 => x"59545680", +1793 => x"d79c08ff", +1794 => x"2e8838a0", +1795 => x"8f13e080", +1796 => x"06577652", +1797 => x"7c518996", +1798 => x"3f800854", +1799 => x"8008ff2e", +1800 => x"90388008", +1801 => x"762782a7", +1802 => x"387480d7", +1803 => x"a82e829f", +1804 => x"3880d7a8", +1805 => x"0b880508", +1806 => x"55841508", +1807 => x"fc067079", +1808 => x"31797226", +1809 => x"8f722507", +1810 => x"5d555a7a", +1811 => x"83f23877", +1812 => x"81078416", +1813 => x"0c771570", +1814 => x"80d7a80b", +1815 => x"88050c74", +1816 => x"81078412", +1817 => x"0c567c51", +1818 => x"88c33f88", +1819 => x"15547380", +1820 => x"0c8e3d0d", +1821 => x"0474832a", +1822 => x"70545480", +1823 => x"7424819b", +1824 => x"3872822c", +1825 => x"81712b80", +1826 => x"d7ac0807", +1827 => x"7080d7a8", +1828 => x"0b84050c", +1829 => x"75101010", +1830 => x"80d7a805", +1831 => x"88110871", +1832 => x"8c1b0c70", +1833 => x"881b0c79", +1834 => x"88130c57", +1835 => x"555c5575", +1836 => x"8c150cfd", +1837 => x"c1397879", +1838 => x"10101080", +1839 => x"d7a80570", +1840 => x"565b5c8c", +1841 => x"14085675", +1842 => x"742ea338", +1843 => x"841608fc", +1844 => x"06707931", +1845 => x"5853768f", +1846 => x"2483f138", +1847 => x"76802584", +1848 => x"af388c16", +1849 => x"08567574", +1850 => x"2e098106", +1851 => x"df388814", +1852 => x"811a7083", +1853 => x"06555a54", +1854 => x"72c9387b", +1855 => x"83065675", +1856 => x"802efdb8", +1857 => x"38ff1cf8", +1858 => x"1b5b5c88", +1859 => x"1a087a2e", +1860 => x"ea38fdb5", +1861 => x"39831953", +1862 => x"fce43983", +1863 => x"1470822c", +1864 => x"81712b80", +1865 => x"d7ac0807", +1866 => x"7080d7a8", +1867 => x"0b84050c", +1868 => x"76101010", +1869 => x"80d7a805", +1870 => x"88110871", +1871 => x"8c1c0c70", +1872 => x"881c0c7a", +1873 => x"88130c58", +1874 => x"535d5653", +1875 => x"fee13980", +1876 => x"d6ec0817", +1877 => x"59800876", +1878 => x"2e818b38", +1879 => x"80d79c08", +1880 => x"ff2e848e", +1881 => x"38737631", +1882 => x"1980d6ec", +1883 => x"0c738706", +1884 => x"70565372", +1885 => x"802e8838", +1886 => x"88733170", +1887 => x"15555576", +1888 => x"149fff06", +1889 => x"a0807131", +1890 => x"1670547e", +1891 => x"53515386", +1892 => x"9d3f8008", +1893 => x"568008ff", +1894 => x"2e819e38", +1895 => x"80d6ec08", +1896 => x"137080d6", +1897 => x"ec0c7475", +1898 => x"80d7a80b", +1899 => x"88050c77", +1900 => x"76311581", +1901 => x"07555659", +1902 => x"7a80d7a8", +1903 => x"2e83c038", +1904 => x"798f2682", +1905 => x"ef38810b", +1906 => x"84150c84", +1907 => x"1508fc06", +1908 => x"70793179", +1909 => x"72268f72", +1910 => x"25075d55", +1911 => x"5a7a802e", +1912 => x"fced3880", +1913 => x"db398008", +1914 => x"9fff0655", +1915 => x"74feed38", +1916 => x"7880d6ec", +1917 => x"0c80d7a8", +1918 => x"0b880508", +1919 => x"7a188107", +1920 => x"84120c55", +1921 => x"80d79808", +1922 => x"79278638", +1923 => x"7880d798", +1924 => x"0c80d794", +1925 => x"087927fc", +1926 => x"a0387880", +1927 => x"d7940c84", +1928 => x"1508fc06", +1929 => x"70793179", +1930 => x"72268f72", +1931 => x"25075d55", +1932 => x"5a7a802e", +1933 => x"fc993888", +1934 => x"39807457", +1935 => x"53fedd39", +1936 => x"7c5184e9", +1937 => x"3f800b80", +1938 => x"0c8e3d0d", +1939 => x"04807324", +1940 => x"a5387282", +1941 => x"2c81712b", +1942 => x"80d7ac08", +1943 => x"077080d7", +1944 => x"a80b8405", +1945 => x"0c5c5a76", +1946 => x"8c170c73", +1947 => x"88170c75", +1948 => x"88180cf9", +1949 => x"fd398313", +1950 => x"70822c81", +1951 => x"712b80d7", +1952 => x"ac080770", +1953 => x"80d7a80b", +1954 => x"84050c5d", +1955 => x"5b53d839", +1956 => x"7a75065c", +1957 => x"7bfc9f38", +1958 => x"84197510", +1959 => x"5659f139", +1960 => x"ff178105", +1961 => x"59f7ab39", +1962 => x"8c150888", +1963 => x"1608718c", +1964 => x"120c8812", +1965 => x"0c597515", +1966 => x"84110881", +1967 => x"0784120c", +1968 => x"587c5183", +1969 => x"e83f8815", +1970 => x"54fba339", +1971 => x"77167881", +1972 => x"0784180c", +1973 => x"8c170888", +1974 => x"1808718c", +1975 => x"120c8812", +1976 => x"0c5c7080", +1977 => x"d7bc0c70", +1978 => x"80d7b80c", +1979 => x"80d7b00b", +1980 => x"8c120c8c", +1981 => x"11088812", +1982 => x"0c778107", +1983 => x"84120c77", +1984 => x"0577710c", +1985 => x"557c5183", +1986 => x"a43f8816", +1987 => x"54f5ba39", +1988 => x"72168411", +1989 => x"08810784", +1990 => x"120c588c", +1991 => x"16088817", +1992 => x"08718c12", +1993 => x"0c88120c", +1994 => x"577c5183", +1995 => x"803f8816", +1996 => x"54f59639", +1997 => x"7284150c", +1998 => x"f41af806", +1999 => x"70841d08", +2000 => x"81060784", +2001 => x"1d0c701c", +2002 => x"5556850b", +2003 => x"84150c85", +2004 => x"0b88150c", +2005 => x"8f7627fd", +2006 => x"ab38881b", +2007 => x"527c51eb", +2008 => x"e83f80d7", +2009 => x"a80b8805", +2010 => x"0880d6ec", +2011 => x"085a55fd", +2012 => x"93397880", +2013 => x"d6ec0c73", +2014 => x"80d79c0c", +2015 => x"fbef3972", +2016 => x"84150cfc", +2017 => x"ff39fb3d", +2018 => x"0d77707a", +2019 => x"7c585553", +2020 => x"568f7527", +2021 => x"80e63872", +2022 => x"76078306", +2023 => x"517080dc", +2024 => x"38757352", +2025 => x"54707084", +2026 => x"05520874", +2027 => x"70840556", +2028 => x"0c737170", +2029 => x"84055308", +2030 => x"71708405", +2031 => x"530c7170", +2032 => x"84055308", +2033 => x"71708405", +2034 => x"530c7170", +2035 => x"84055308", +2036 => x"71708405", +2037 => x"530cf016", +2038 => x"5654748f", +2039 => x"26c73883", +2040 => x"75279538", +2041 => x"70708405", +2042 => x"52087470", +2043 => x"8405560c", +2044 => x"fc155574", +2045 => x"8326ed38", +2046 => x"73715452", +2047 => x"ff155170", +2048 => x"ff2e9838", +2049 => x"72708105", +2050 => x"54337270", +2051 => x"81055434", +2052 => x"ff115170", +2053 => x"ff2e0981", +2054 => x"06ea3875", +2055 => x"800c873d", +2056 => x"0d04fb3d", +2057 => x"0d777a71", +2058 => x"028c05a3", +2059 => x"05335854", +2060 => x"54568373", +2061 => x"2780d438", +2062 => x"75830651", +2063 => x"7080cc38", +2064 => x"74882b75", +2065 => x"07707190", +2066 => x"2b075551", +2067 => x"8f7327a7", +2068 => x"38737270", +2069 => x"8405540c", +2070 => x"71747170", +2071 => x"8405530c", +2072 => x"74717084", +2073 => x"05530c74", +2074 => x"71708405", +2075 => x"530cf014", +2076 => x"5452728f", +2077 => x"26db3883", +2078 => x"73279038", +2079 => x"73727084", +2080 => x"05540cfc", +2081 => x"13537283", +2082 => x"26f238ff", +2083 => x"135170ff", +2084 => x"2e933874", +2085 => x"72708105", +2086 => x"5434ff11", +2087 => x"5170ff2e", +2088 => x"098106ef", +2089 => x"3875800c", +2090 => x"873d0d04", +2091 => x"04047070", +2092 => x"7070800b", +2093 => x"80dfe40c", +2094 => x"765184f3", +2095 => x"3f800853", +2096 => x"8008ff2e", +2097 => x"89387280", +2098 => x"0c505050", +2099 => x"500480df", +2100 => x"e4085473", +2101 => x"802eef38", +2102 => x"7574710c", +2103 => x"5272800c", +2104 => x"50505050", +2105 => x"04f93d0d", +2106 => x"797c557b", +2107 => x"548e1122", +2108 => x"70902b70", +2109 => x"902c5557", +2110 => x"80cfec08", +2111 => x"53585683", +2112 => x"f63f8008", +2113 => x"57800b80", +2114 => x"08249338", +2115 => x"80d01608", +2116 => x"80080580", +2117 => x"d0170c76", +2118 => x"800c893d", +2119 => x"0d048c16", +2120 => x"2283dfff", +2121 => x"0655748c", +2122 => x"17237680", +2123 => x"0c893d0d", +2124 => x"04fa3d0d", +2125 => x"788c1122", +2126 => x"70882a70", +2127 => x"81065157", +2128 => x"585674a9", +2129 => x"388c1622", +2130 => x"83dfff06", +2131 => x"55748c17", +2132 => x"237a5479", +2133 => x"538e1622", +2134 => x"70902b70", +2135 => x"902c5456", +2136 => x"80cfec08", +2137 => x"525681b2", +2138 => x"3f883d0d", +2139 => x"04825480", +2140 => x"538e1622", +2141 => x"70902b70", +2142 => x"902c5456", +2143 => x"80cfec08", +2144 => x"525782bb", +2145 => x"3f8c1622", +2146 => x"83dfff06", +2147 => x"55748c17", +2148 => x"237a5479", +2149 => x"538e1622", +2150 => x"70902b70", +2151 => x"902c5456", +2152 => x"80cfec08", +2153 => x"525680f2", +2154 => x"3f883d0d", +2155 => x"04f93d0d", +2156 => x"797c557b", +2157 => x"548e1122", +2158 => x"70902b70", +2159 => x"902c5557", +2160 => x"80cfec08", +2161 => x"53585681", +2162 => x"f63f8008", +2163 => x"578008ff", +2164 => x"2e99388c", +2165 => x"1622a080", +2166 => x"0755748c", +2167 => x"17238008", +2168 => x"80d0170c", +2169 => x"76800c89", +2170 => x"3d0d048c", +2171 => x"162283df", +2172 => x"ff065574", +2173 => x"8c172376", +2174 => x"800c893d", +2175 => x"0d047070", +2176 => x"70748e11", +2177 => x"2270902b", +2178 => x"70902c55", +2179 => x"51515380", +2180 => x"cfec0851", +2181 => x"bd3f5050", +2182 => x"5004fb3d", +2183 => x"0d800b80", +2184 => x"dfe40c7a", +2185 => x"53795278", +2186 => x"5182fc3f", +2187 => x"80085580", +2188 => x"08ff2e88", +2189 => x"3874800c", +2190 => x"873d0d04", +2191 => x"80dfe408", +2192 => x"5675802e", +2193 => x"f0387776", +2194 => x"710c5474", +2195 => x"800c873d", +2196 => x"0d047070", +2197 => x"7070800b", +2198 => x"80dfe40c", +2199 => x"765184c9", +2200 => x"3f800853", +2201 => x"8008ff2e", +2202 => x"89387280", +2203 => x"0c505050", +2204 => x"500480df", +2205 => x"e4085473", +2206 => x"802eef38", +2207 => x"7574710c", +2208 => x"5272800c", +2209 => x"50505050", +2210 => x"04fc3d0d", +2211 => x"800b80df", +2212 => x"e40c7852", +2213 => x"775187b0", +2214 => x"3f800854", +2215 => x"8008ff2e", +2216 => x"88387380", +2217 => x"0c863d0d", +2218 => x"0480dfe4", +2219 => x"08557480", +2220 => x"2ef03876", +2221 => x"75710c53", +2222 => x"73800c86", +2223 => x"3d0d04fb", +2224 => x"3d0d800b", +2225 => x"80dfe40c", +2226 => x"7a537952", +2227 => x"7851848b", +2228 => x"3f800855", +2229 => x"8008ff2e", +2230 => x"88387480", +2231 => x"0c873d0d", +2232 => x"0480dfe4", +2233 => x"08567580", +2234 => x"2ef03877", +2235 => x"76710c54", +2236 => x"74800c87", +2237 => x"3d0d04fb", +2238 => x"3d0d800b", +2239 => x"80dfe40c", +2240 => x"7a537952", +2241 => x"78518293", +2242 => x"3f800855", +2243 => x"8008ff2e", +2244 => x"88387480", +2245 => x"0c873d0d", +2246 => x"0480dfe4", +2247 => x"08567580", +2248 => x"2ef03877", +2249 => x"76710c54", +2250 => x"74800c87", +2251 => x"3d0d0470", +2252 => x"707080df", +2253 => x"d8088938", +2254 => x"80dfe80b", +2255 => x"80dfd80c", +2256 => x"80dfd808", +2257 => x"75115252", +2258 => x"ff537087", +2259 => x"fb808026", +2260 => x"88387080", +2261 => x"dfd80c71", +2262 => x"5372800c", +2263 => x"50505004", +2264 => x"fd3d0d80", +2265 => x"0b80cfe0", +2266 => x"08545472", +2267 => x"812e9b38", +2268 => x"7380dfdc", +2269 => x"0cc2af3f", +2270 => x"c1863f80", +2271 => x"dfb05281", +2272 => x"51c3ff3f", +2273 => x"80085186", +2274 => x"bf3f7280", +2275 => x"dfdc0cc2", +2276 => x"953fc0ec", +2277 => x"3f80dfb0", +2278 => x"528151c3", +2279 => x"e53f8008", +2280 => x"5186a53f", +2281 => x"00ff39f5", +2282 => x"3d0d7e60", +2283 => x"80dfdc08", +2284 => x"705b585b", +2285 => x"5b7580c2", +2286 => x"38777a25", +2287 => x"a138771b", +2288 => x"70337081", +2289 => x"ff065858", +2290 => x"59758a2e", +2291 => x"98387681", +2292 => x"ff0651c1", +2293 => x"b03f8118", +2294 => x"58797824", +2295 => x"e1387980", +2296 => x"0c8d3d0d", +2297 => x"048d51c1", +2298 => x"9c3f7833", +2299 => x"7081ff06", +2300 => x"5257c191", +2301 => x"3f811858", +2302 => x"e0397955", +2303 => x"7a547d53", +2304 => x"85528d3d", +2305 => x"fc0551c0", +2306 => x"b93f8008", +2307 => x"5685b23f", +2308 => x"7b80080c", +2309 => x"75800c8d", +2310 => x"3d0d04f6", +2311 => x"3d0d7d7f", +2312 => x"80dfdc08", +2313 => x"705b585a", +2314 => x"5a7580c1", +2315 => x"38777925", +2316 => x"b338c0ac", +2317 => x"3f800881", +2318 => x"ff06708d", +2319 => x"32703070", +2320 => x"9f2a5151", +2321 => x"5757768a", +2322 => x"2e80c438", +2323 => x"75802ebf", +2324 => x"38771a56", +2325 => x"76763476", +2326 => x"51c0aa3f", +2327 => x"81185878", +2328 => x"7824cf38", +2329 => x"77567580", +2330 => x"0c8c3d0d", +2331 => x"04785579", +2332 => x"547c5384", +2333 => x"528c3dfc", +2334 => x"0551ffbf", +2335 => x"c53f8008", +2336 => x"5684be3f", +2337 => x"7a80080c", +2338 => x"75800c8c", +2339 => x"3d0d0477", +2340 => x"1a598a79", +2341 => x"34811858", +2342 => x"8d51ffbf", +2343 => x"e83f8a51", +2344 => x"ffbfe23f", +2345 => x"7756ffbe", +2346 => x"39fb3d0d", +2347 => x"80dfdc08", +2348 => x"70565473", +2349 => x"88387480", +2350 => x"0c873d0d", +2351 => x"04775383", +2352 => x"52873dfc", +2353 => x"0551ffbe", +2354 => x"f93f8008", +2355 => x"5483f23f", +2356 => x"7580080c", +2357 => x"73800c87", +2358 => x"3d0d04fa", +2359 => x"3d0d80df", +2360 => x"dc08802e", +2361 => x"a3387a55", +2362 => x"79547853", +2363 => x"8652883d", +2364 => x"fc0551ff", +2365 => x"becc3f80", +2366 => x"085683c5", +2367 => x"3f768008", +2368 => x"0c75800c", +2369 => x"883d0d04", +2370 => x"83b73f9d", +2371 => x"0b80080c", +2372 => x"ff0b800c", +2373 => x"883d0d04", +2374 => x"f73d0d7b", +2375 => x"7d5b59bc", +2376 => x"53805279", +2377 => x"51f5fb3f", +2378 => x"80705657", +2379 => x"98567419", +2380 => x"70337078", +2381 => x"2b790781", +2382 => x"18f81a5a", +2383 => x"58595558", +2384 => x"847524ea", +2385 => x"38767a23", +2386 => x"84195880", +2387 => x"70565798", +2388 => x"56741870", +2389 => x"3370782b", +2390 => x"79078118", +2391 => x"f81a5a58", +2392 => x"59515484", +2393 => x"7524ea38", +2394 => x"76821b23", +2395 => x"88195880", +2396 => x"70565798", +2397 => x"56741870", +2398 => x"3370782b", +2399 => x"79078118", +2400 => x"f81a5a58", +2401 => x"59515484", +2402 => x"7524ea38", +2403 => x"76841b0c", +2404 => x"8c195880", +2405 => x"70565798", +2406 => x"56741870", +2407 => x"3370782b", +2408 => x"79078118", +2409 => x"f81a5a58", +2410 => x"59515484", +2411 => x"7524ea38", +2412 => x"76881b23", +2413 => x"90195880", +2414 => x"70565798", +2415 => x"56741870", +2416 => x"3370782b", +2417 => x"79078118", +2418 => x"f81a5a58", +2419 => x"59515484", +2420 => x"7524ea38", +2421 => x"768a1b23", +2422 => x"94195880", +2423 => x"70565798", +2424 => x"56741870", +2425 => x"3370782b", +2426 => x"79078118", +2427 => x"f81a5a58", +2428 => x"59515484", +2429 => x"7524ea38", +2430 => x"768c1b23", +2431 => x"98195880", +2432 => x"70565798", +2433 => x"56741870", +2434 => x"3370782b", +2435 => x"79078118", +2436 => x"f81a5a58", +2437 => x"59515484", +2438 => x"7524ea38", +2439 => x"768e1b23", +2440 => x"9c195880", +2441 => x"705657b8", +2442 => x"56741870", +2443 => x"3370782b", +2444 => x"79078118", +2445 => x"f81a5a58", +2446 => x"595a5488", +2447 => x"7524ea38", +2448 => x"76901b0c", +2449 => x"8b3d0d04", +2450 => x"e93d0d6a", +2451 => x"80dfdc08", +2452 => x"57577593", +2453 => x"3880c080", +2454 => x"0b84180c", +2455 => x"75ac180c", +2456 => x"75800c99", +2457 => x"3d0d0489", +2458 => x"3d70556a", +2459 => x"54558a52", +2460 => x"993dffbc", +2461 => x"0551ffbb", +2462 => x"c93f8008", +2463 => x"77537552", +2464 => x"56fd953f", +2465 => x"bc3f7780", +2466 => x"080c7580", +2467 => x"0c993d0d", +2468 => x"04fc3d0d", +2469 => x"815480df", +2470 => x"dc088838", +2471 => x"73800c86", +2472 => x"3d0d0476", +2473 => x"5397b952", +2474 => x"863dfc05", +2475 => x"51ffbb92", +2476 => x"3f800854", +2477 => x"8c3f7480", +2478 => x"080c7380", +2479 => x"0c863d0d", +2480 => x"0480cfec", +2481 => x"08800c04", +2482 => x"f73d0d7b", +2483 => x"80cfec08", +2484 => x"82c81108", +2485 => x"5a545a77", +2486 => x"802e80da", +2487 => x"38818818", +2488 => x"841908ff", +2489 => x"0581712b", +2490 => x"59555980", +2491 => x"742480ea", +2492 => x"38807424", +2493 => x"b5387382", +2494 => x"2b781188", +2495 => x"05565681", +2496 => x"80190877", +2497 => x"06537280", +2498 => x"2eb63878", +2499 => x"16700853", +2500 => x"53795174", +2501 => x"0853722d", +2502 => x"ff14fc17", +2503 => x"fc177981", +2504 => x"2c5a5757", +2505 => x"54738025", +2506 => x"d6387708", +2507 => x"5877ffad", +2508 => x"3880cfec", +2509 => x"0853bc13", +2510 => x"08a53879", +2511 => x"51f8e53f", +2512 => x"74085372", +2513 => x"2dff14fc", +2514 => x"17fc1779", +2515 => x"812c5a57", +2516 => x"57547380", +2517 => x"25ffa838", +2518 => x"d1398057", +2519 => x"ff933972", +2520 => x"51bc1308", +2521 => x"54732d79", +2522 => x"51f8b93f", +2523 => x"707080df", +2524 => x"b80bfc05", +2525 => x"70085252", +2526 => x"70ff2e91", +2527 => x"38702dfc", +2528 => x"12700852", +2529 => x"5270ff2e", +2530 => x"098106f1", +2531 => x"38505004", +2532 => x"04ffbaff", +2533 => x"3f040000", +2534 => x"00000040", +2535 => x"476f7420", +2536 => x"696e7465", +2537 => x"72727570", +2538 => x"740a0000", +2539 => x"4e6f2069", +2540 => x"6e746572", +2541 => x"72757074", +2542 => x"0a000000", +2543 => x"43000000", +2544 => x"64756d6d", +2545 => x"792e6578", +2546 => x"65000000", +2547 => x"00ffffff", +2548 => x"ff00ffff", +2549 => x"ffff00ff", +2550 => x"ffffff00", +2551 => x"00000000", +2552 => x"00000000", +2553 => x"00000000", +2554 => x"00002fc0", +2555 => x"000027f0", +2556 => x"00000000", +2557 => x"00002a58", +2558 => x"00002ab4", +2559 => x"00002b10", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"00000000", +2568 => x"00000000", +2569 => x"000027bc", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000000", +2597 => x"00000000", +2598 => x"00000001", +2599 => x"330eabcd", +2600 => x"1234e66d", +2601 => x"deec0005", +2602 => x"000b0000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00000000", +2663 => x"00000000", +2664 => x"00000000", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", +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"00000000", +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"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", +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"ffffffff", +2792 => x"00000000", +2793 => x"00020000", +2794 => x"00000000", +2795 => x"00000000", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", +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"000027c0", +3053 => x"ffffffff", +3054 => x"00000000", +3055 => x"ffffffff", +3056 => 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(to_integer(unsigned(memAAddr))) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(to_integer(unsigned(memAAddr))); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(to_integer(unsigned(memBAddr))) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(to_integer(unsigned(memBAddr))); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/example/log.txt b/zpu/hdl/example/log.txt index 6966062..a8b4893 100644 --- a/zpu/hdl/example/log.txt +++ b/zpu/hdl/example/log.txt @@ -1,35 +1,55 @@ -H -e -l -l +N o -w -o +i +n +t +e r -l -d - -1 +r +u +p +t -H -e -l -l +G o +t -w -o +i +n +t +e +r r -l -d +u +p +t + + + + + + +N +o -2 +i +n +t +e +r +r +u +p +t + + + diff --git a/zpu/hdl/example/sim_small_fpga_top.vhd b/zpu/hdl/example/sim_small_fpga_top.vhd index 5c05881..2a7a9f5 100644 --- a/zpu/hdl/example/sim_small_fpga_top.vhd +++ b/zpu/hdl/example/sim_small_fpga_top.vhd @@ -19,6 +19,7 @@ -------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.all; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. @@ -88,6 +89,9 @@ signal io_mem_readEnable : std_logic; signal dram_ready : std_logic; signal io_ready : std_logic; signal io_reading : std_logic; +signal interruptcounter : unsigned(15 downto 0); +signal interrupt : std_logic; + signal break : std_logic; @@ -108,7 +112,7 @@ begin out_mem_writeEnable => mem_writeEnable, out_mem_readEnable => mem_readEnable, mem_writeMask => mem_writeMask, - interrupt => '0', + interrupt => interrupt, break => break); @@ -146,6 +150,7 @@ begin end if; end process; + io_ready <= (io_reading or io_mem_readEnable) and not io_busy; @@ -156,11 +161,23 @@ begin enable <= '0'; io_reading <= '0'; dram_ready <= '0'; + + interruptcounter <= to_unsigned(32, 16); + interrupt <= '0'; + elsif (clk'event and clk = '1') then enable <= '1'; io_reading <= io_busy or io_mem_readEnable; dram_ready<=dram_mem_readEnable; + -- keep interrupt signal high for 16 cycles + interruptcounter <= interruptcounter + 1; + if (interruptcounter < 16) then + report "Interrupt asserted!" severity note; + interrupt <='1'; + else + interrupt <='0'; + end if; end if; end process; diff --git a/zpu/hdl/example/simzpu_interrupt.do b/zpu/hdl/example/simzpu_interrupt.do new file mode 100644 index 0000000..864bf76 --- /dev/null +++ b/zpu/hdl/example/simzpu_interrupt.do @@ -0,0 +1,29 @@ +# Xilinx WebPack modelsim script +# +# +# cd C:/workspace/zpu/zpu/hdl/example +# do simzpu_interrupt.do + +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config.vhd +vcom -93 -explicit ../zpu4/core/zpupkg.vhd +vcom -93 -explicit ../zpu4/src/txt_util.vhd +vcom -93 -explicit sim_small_fpga_top.vhd +vcom -93 -explicit ../zpu4/core/zpu_core_small.vhd +vcom -93 -explicit interrupt.vhd +vcom -93 -explicit ../zpu4/src/timer.vhd +vcom -93 -explicit ../zpu4/src/io.vhd +vcom -93 -explicit ../zpu4/src/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 10 ms diff --git a/zpu/hdl/example_medium/.cvsignore b/zpu/hdl/example_medium/.cvsignore new file mode 100644 index 0000000..3add443 --- /dev/null +++ b/zpu/hdl/example_medium/.cvsignore @@ -0,0 +1,4 @@ +vsim.wlf +work +log.txt +trace.txt diff --git a/zpu/hdl/example_medium/dram_dmips.vhd b/zpu/hdl/example_medium/dram_dmips.vhd new file mode 100644 index 0000000..a9fd59e --- /dev/null +++ b/zpu/hdl/example_medium/dram_dmips.vhd @@ -0,0 +1,3308 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80d5f40c", +3 => x"3a0b0b80", +4 => x"c4fb0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c5c22d", +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"c3040000", +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"0b0b88a6", +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"0b0b80d5", +162 => x"e0738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88a90400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0bad", +171 => x"aa2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0bad", +179 => x"ee2d5050", +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"80d5f00c", +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"82fd3fbf", +257 => x"a03f0410", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10105351", +266 => x"047381ff", +267 => x"06738306", +268 => x"09810583", +269 => x"05101010", +270 => x"2b0772fc", +271 => x"060c5151", +272 => x"043c0472", +273 => x"72807281", +274 => x"06ff0509", +275 => x"72060571", +276 => x"1052720a", +277 => x"100a5372", +278 => x"ed385151", +279 => x"535104ff", +280 => x"3d0d0b0b", +281 => x"80e5e408", +282 => x"52710870", +283 => x"882a8132", +284 => x"70810651", +285 => x"515170f1", +286 => x"3873720c", +287 => x"833d0d04", +288 => x"80d5f008", +289 => x"802ea438", +290 => x"80d5f408", +291 => x"822ebd38", +292 => x"8380800b", +293 => x"0b0b80e5", +294 => x"e40c82a0", +295 => x"800b80e5", +296 => x"e80c8290", +297 => x"800b80e5", +298 => x"ec0c04f8", +299 => x"808080a4", +300 => x"0b0b0b80", +301 => x"e5e40cf8", +302 => x"80808280", +303 => x"0b80e5e8", +304 => x"0cf88080", +305 => x"84800b80", +306 => x"e5ec0c04", +307 => x"80c0a880", +308 => x"8c0b0b0b", +309 => x"80e5e40c", +310 => x"80c0a880", +311 => x"940b80e5", +312 => x"e80c0b0b", +313 => x"80c7d00b", +314 => x"80e5ec0c", +315 => x"04f23d0d", +316 => x"6080e5e8", +317 => x"08565d82", +318 => x"750c8059", +319 => x"805a800b", +320 => x"8f3d5d5b", +321 => x"7a101015", +322 => x"70087108", +323 => x"719f2c7e", +324 => x"852b5855", +325 => x"557d5359", +326 => x"5799993f", +327 => x"7d7f7a72", +328 => x"077c7207", +329 => x"71716081", +330 => x"05415f5d", +331 => x"5b595755", +332 => x"817b278f", +333 => x"38767d0c", +334 => x"77841e0c", +335 => x"7c800c90", +336 => x"3d0d0480", +337 => x"e5e80855", +338 => x"ffba3970", +339 => x"7080e5f0", +340 => x"335170a7", +341 => x"3880d5fc", +342 => x"08700852", +343 => x"5270802e", +344 => x"94388412", +345 => x"80d5fc0c", +346 => x"702d80d5", +347 => x"fc087008", +348 => x"525270ee", +349 => x"38810b80", +350 => x"e5f03450", +351 => x"50040470", +352 => x"0b0b80e5", +353 => x"e008802e", +354 => x"8e380b0b", +355 => x"0b0b800b", +356 => x"802e0981", +357 => x"06833850", +358 => x"040b0b80", +359 => x"e5e0510b", +360 => x"0b0bf4dc", +361 => x"3f500404", +362 => x"ff3d0d02", +363 => x"8f053352", +364 => x"718a2e8a", +365 => x"387151fd", +366 => x"a63f833d", +367 => x"0d048d51", +368 => x"fd9d3f71", +369 => x"51fd983f", +370 => x"833d0d04", +371 => x"ce3d0db5", +372 => x"3d707084", +373 => x"0552088b", +374 => x"a85c56a5", +375 => x"3d5e5c80", +376 => x"75708105", +377 => x"5733765b", +378 => x"55587378", +379 => x"2e80c138", +380 => x"8e3d5b73", +381 => x"a52e0981", +382 => x"0680c538", +383 => x"78708105", +384 => x"5a335473", +385 => x"80e42e81", +386 => x"b6387380", +387 => x"e42480c6", +388 => x"387380e3", +389 => x"2ea13880", +390 => x"52a55179", +391 => x"2d805273", +392 => x"51792d82", +393 => x"18587870", +394 => x"81055a33", +395 => x"5473c438", +396 => x"77800cb4", +397 => x"3d0d047b", +398 => x"841d8312", +399 => x"33565d57", +400 => x"80527351", +401 => x"792d8118", +402 => x"79708105", +403 => x"5b335558", +404 => x"73ffa038", +405 => x"db397380", +406 => x"f32e0981", +407 => x"06ffb838", +408 => x"7b841d71", +409 => x"08595d56", +410 => x"80773355", +411 => x"5673762e", +412 => x"8d388116", +413 => x"70187033", +414 => x"57555674", +415 => x"f538ff16", +416 => x"55807625", +417 => x"ffa03876", +418 => x"70810558", +419 => x"33548052", +420 => x"7351792d", +421 => x"811875ff", +422 => x"17575758", +423 => x"807625ff", +424 => x"85387670", +425 => x"81055833", +426 => x"54805273", +427 => x"51792d81", +428 => x"1875ff17", +429 => x"57575875", +430 => x"8024cc38", +431 => x"fee8397b", +432 => x"841d7108", +433 => x"70719f2c", +434 => x"5953595d", +435 => x"56807524", +436 => x"81913875", +437 => x"7d7c5856", +438 => x"54805773", +439 => x"772e0981", +440 => x"06b638b0", +441 => x"7b3402b5", +442 => x"05567a76", +443 => x"2e9738ff", +444 => x"16567533", +445 => x"75708105", +446 => x"57348117", +447 => x"577a762e", +448 => x"098106eb", +449 => x"38807534", +450 => x"767dff12", +451 => x"57585675", +452 => x"8024fef3", +453 => x"38fe8f39", +454 => x"8a527351", +455 => x"9fd03f80", +456 => x"0880c7d4", +457 => x"05337670", +458 => x"81055834", +459 => x"8a527351", +460 => x"9ef83f80", +461 => x"08548008", +462 => x"802effae", +463 => x"388a5273", +464 => x"519fab3f", +465 => x"800880c7", +466 => x"d4053376", +467 => x"70810558", +468 => x"348a5273", +469 => x"519ed33f", +470 => x"80085480", +471 => x"08ffb938", +472 => x"ff883974", +473 => x"527653b4", +474 => x"3dffb805", +475 => x"51949a3f", +476 => x"a33d0856", +477 => x"fedd3980", +478 => x"3d0d80c1", +479 => x"0b81b4bc", +480 => x"34800b81", +481 => x"b6980c70", +482 => x"800c823d", +483 => x"0d04ff3d", +484 => x"0d800b81", +485 => x"b4bc3352", +486 => x"527080c1", +487 => x"2e993871", +488 => x"81b69808", +489 => x"0781b698", +490 => x"0c80c20b", +491 => x"81b4c034", +492 => x"70800c83", +493 => x"3d0d0481", +494 => x"0b81b698", +495 => x"080781b6", +496 => x"980c80c2", +497 => x"0b81b4c0", +498 => x"3470800c", +499 => x"833d0d04", +500 => x"fd3d0d75", +501 => x"70088a05", +502 => x"535381b4", +503 => x"bc335170", +504 => x"80c12e8b", +505 => x"3873f338", +506 => x"70800c85", +507 => x"3d0d04ff", +508 => x"127081b4", +509 => x"b8083174", +510 => x"0c800c85", +511 => x"3d0d04fc", +512 => x"3d0d81b4", +513 => x"c4085574", +514 => x"802e8c38", +515 => x"76750871", +516 => x"0c81b4c4", +517 => x"0856548c", +518 => x"155381b4", +519 => x"b808528a", +520 => x"518fd43f", +521 => x"73800c86", +522 => x"3d0d04fb", +523 => x"3d0d7770", +524 => x"085656b0", +525 => x"5381b4c4", +526 => x"08527451", +527 => x"ab943f85", +528 => x"0b8c170c", +529 => x"850b8c16", +530 => x"0c750875", +531 => x"0c81b4c4", +532 => x"08547380", +533 => x"2e8a3873", +534 => x"08750c81", +535 => x"b4c40854", +536 => x"8c145381", +537 => x"b4b80852", +538 => x"8a518f8b", +539 => x"3f841508", +540 => x"ad38860b", +541 => x"8c160c88", +542 => x"15528816", +543 => x"08518e97", +544 => x"3f81b4c4", +545 => x"08700876", +546 => x"0c548c15", +547 => x"7054548a", +548 => x"52730851", +549 => x"8ee13f73", +550 => x"800c873d", +551 => x"0d047508", +552 => x"54b05373", +553 => x"527551aa", +554 => x"a93f7380", +555 => x"0c873d0d", +556 => x"04d93d0d", +557 => x"b0519dcf", +558 => x"3f800881", +559 => x"b4b40cb0", +560 => x"519dc43f", +561 => x"800881b4", +562 => x"c40c81b4", +563 => x"b4088008", +564 => x"0c800b80", +565 => x"0884050c", +566 => x"820b8008", +567 => x"88050ca8", +568 => x"0b80088c", +569 => x"050c9f53", +570 => x"80c7e052", +571 => x"80089005", +572 => x"51a9df3f", +573 => x"a13d5e9f", +574 => x"5380c880", +575 => x"527d51a9", +576 => x"d13f8a0b", +577 => x"80f2f80c", +578 => x"80d2a451", +579 => x"f9be3f80", +580 => x"c8a051f9", +581 => x"b73f80d2", +582 => x"a451f9b0", +583 => x"3f80d684", +584 => x"08802e89", +585 => x"d33880c8", +586 => x"d051f9a0", +587 => x"3f80d2a4", +588 => x"51f9993f", +589 => x"80d68008", +590 => x"5280c8fc", +591 => x"51f98d3f", +592 => x"80e69451", +593 => x"b2ff3f81", +594 => x"0b9a3d5e", +595 => x"5b800b80", +596 => x"d6800825", +597 => x"82d43890", +598 => x"3d5f80c1", +599 => x"0b81b4bc", +600 => x"34810b81", +601 => x"b6980c80", +602 => x"c20b81b4", +603 => x"c0348240", +604 => x"835a9f53", +605 => x"80c9ac52", +606 => x"7c51a8d6", +607 => x"3f814180", +608 => x"7d537e52", +609 => x"568e943f", +610 => x"8008762e", +611 => x"09810683", +612 => x"38815675", +613 => x"81b6980c", +614 => x"7f705856", +615 => x"758325a2", +616 => x"38751010", +617 => x"16fd0542", +618 => x"a93dffa4", +619 => x"05538352", +620 => x"76518cc3", +621 => x"3f7f8105", +622 => x"70417058", +623 => x"56837624", +624 => x"e0386154", +625 => x"755380e6", +626 => x"9c5281b4", +627 => x"d0518cb7", +628 => x"3f81b4c4", +629 => x"08700858", +630 => x"58b05377", +631 => x"527651a7", +632 => x"f13f850b", +633 => x"8c190c85", +634 => x"0b8c180c", +635 => x"7708770c", +636 => x"81b4c408", +637 => x"5675802e", +638 => x"8a387508", +639 => x"770c81b4", +640 => x"c408568c", +641 => x"165381b4", +642 => x"b808528a", +643 => x"518be83f", +644 => x"84170887", +645 => x"ea38860b", +646 => x"8c180c88", +647 => x"17528818", +648 => x"08518af3", +649 => x"3f81b4c4", +650 => x"08700878", +651 => x"0c568c17", +652 => x"7054598a", +653 => x"52780851", +654 => x"8bbd3f80", +655 => x"c10b81b4", +656 => x"c0335757", +657 => x"767626a2", +658 => x"3880c352", +659 => x"76518ca1", +660 => x"3f800861", +661 => x"2e89e438", +662 => x"81177081", +663 => x"ff0681b4", +664 => x"c0335858", +665 => x"58757727", +666 => x"e0387960", +667 => x"29627054", +668 => x"71535b59", +669 => x"98b43f80", +670 => x"0840787a", +671 => x"31708729", +672 => x"80083180", +673 => x"088a0581", +674 => x"b4bc3381", +675 => x"b4b8085e", +676 => x"5b525a56", +677 => x"7780c12e", +678 => x"89ce387b", +679 => x"f738811b", +680 => x"5b80d680", +681 => x"087b25fd", +682 => x"b13881b4", +683 => x"ac51b095", +684 => x"3f80c9cc", +685 => x"51f6953f", +686 => x"80d2a451", +687 => x"f68e3f80", +688 => x"c9dc51f6", +689 => x"873f80d2", +690 => x"a451f680", +691 => x"3f81b4b8", +692 => x"085280ca", +693 => x"9451f5f4", +694 => x"3f855280", +695 => x"cab051f5", +696 => x"eb3f81b6", +697 => x"98085280", +698 => x"cacc51f5", +699 => x"df3f8152", +700 => x"80cab051", +701 => x"f5d63f81", +702 => x"b4bc3352", +703 => x"80cae851", +704 => x"f5ca3f80", +705 => x"c15280cb", +706 => x"8451f5c0", +707 => x"3f81b4c0", +708 => x"335280cb", +709 => x"a051f5b4", +710 => x"3f80c252", +711 => x"80cb8451", +712 => x"f5aa3f81", +713 => x"b4f00852", +714 => x"80cbbc51", +715 => x"f59e3f87", +716 => x"5280cab0", +717 => x"51f5953f", +718 => x"80f2f808", +719 => x"5280cbd8", +720 => x"51f5893f", +721 => x"80cbf451", +722 => x"f5823f80", +723 => x"cca051f4", +724 => x"fb3f81b4", +725 => x"c4087008", +726 => x"535a80cc", +727 => x"ac51f4ec", +728 => x"3f80ccc8", +729 => x"51f4e53f", +730 => x"81b4c408", +731 => x"84110853", +732 => x"5680ccfc", +733 => x"51f4d53f", +734 => x"805280ca", +735 => x"b051f4cc", +736 => x"3f81b4c4", +737 => x"08881108", +738 => x"535880cd", +739 => x"9851f4bc", +740 => x"3f825280", +741 => x"cab051f4", +742 => x"b33f81b4", +743 => x"c4088c11", +744 => x"08535780", +745 => x"cdb451f4", +746 => x"a33f9152", +747 => x"80cab051", +748 => x"f49a3f81", +749 => x"b4c40890", +750 => x"055280cd", +751 => x"d051f48c", +752 => x"3f80cdec", +753 => x"51f4853f", +754 => x"80cea451", +755 => x"f3fe3f81", +756 => x"b4b40870", +757 => x"08535f80", +758 => x"ccac51f3", +759 => x"ef3f80ce", +760 => x"b851f3e8", +761 => x"3f81b4b4", +762 => x"08841108", +763 => x"535b80cc", +764 => x"fc51f3d8", +765 => x"3f805280", +766 => x"cab051f3", +767 => x"cf3f81b4", +768 => x"b4088811", +769 => x"08535c80", +770 => x"cd9851f3", +771 => x"bf3f8152", +772 => x"80cab051", +773 => x"f3b63f81", +774 => x"b4b4088c", +775 => x"1108535a", +776 => x"80cdb451", +777 => x"f3a63f92", +778 => x"5280cab0", +779 => x"51f39d3f", +780 => x"81b4b408", +781 => x"90055280", +782 => x"cdd051f3", +783 => x"8f3f80cd", +784 => x"ec51f388", +785 => x"3f7f5280", +786 => x"cef851f2", +787 => x"ff3f8552", +788 => x"80cab051", +789 => x"f2f63f78", +790 => x"5280cf94", +791 => x"51f2ed3f", +792 => x"8d5280ca", +793 => x"b051f2e4", +794 => x"3f615280", +795 => x"cfb051f2", +796 => x"db3f8752", +797 => x"80cab051", +798 => x"f2d23f60", +799 => x"5280cfcc", +800 => x"51f2c93f", +801 => x"815280ca", +802 => x"b051f2c0", +803 => x"3f7d5280", +804 => x"cfe851f2", +805 => x"b73f80d0", +806 => x"8451f2b0", +807 => x"3f7c5280", +808 => x"d0bc51f2", +809 => x"a73f80d0", +810 => x"d851f2a0", +811 => x"3f80d2a4", +812 => x"51f2993f", +813 => x"81b4ac08", +814 => x"81b4b008", +815 => x"80e69408", +816 => x"80e69808", +817 => x"72713170", +818 => x"74267574", +819 => x"31707231", +820 => x"80e68c0c", +821 => x"444480e6", +822 => x"900c80e6", +823 => x"90085680", +824 => x"d190555c", +825 => x"595758f1", +826 => x"e33f80e6", +827 => x"8c085680", +828 => x"762582a3", +829 => x"3880d680", +830 => x"0870719f", +831 => x"2c9a3d53", +832 => x"565680e6", +833 => x"8c0880e6", +834 => x"90084153", +835 => x"7f547052", +836 => x"5a89eb3f", +837 => x"66685f80", +838 => x"e5fc0c7d", +839 => x"80e6800c", +840 => x"80d68008", +841 => x"709f2c58", +842 => x"568058bd", +843 => x"84c07855", +844 => x"55765275", +845 => x"53795187", +846 => x"d13f953d", +847 => x"80e68c08", +848 => x"80e69008", +849 => x"41557f56", +850 => x"67694053", +851 => x"7e547052", +852 => x"5c89ab3f", +853 => x"64665e80", +854 => x"e6840c7c", +855 => x"80e6880c", +856 => x"80d68008", +857 => x"709f2c40", +858 => x"58805783", +859 => x"dceb9480", +860 => x"7755557e", +861 => x"5277537b", +862 => x"51878f3f", +863 => x"64665d5b", +864 => x"805e8ddd", +865 => x"7e555580", +866 => x"e68c0880", +867 => x"e6900859", +868 => x"52775379", +869 => x"5186f33f", +870 => x"66684054", +871 => x"7e557a52", +872 => x"7b53a93d", +873 => x"ffa80551", +874 => x"88d43f62", +875 => x"645e81b4", +876 => x"c80c7c81", +877 => x"b4cc0c80", +878 => x"d1a051f0", +879 => x"8f3f80e6", +880 => x"80085280", +881 => x"d1d051f0", +882 => x"833f80d1", +883 => x"d851effc", +884 => x"3f80e688", +885 => x"085280d1", +886 => x"d051eff0", +887 => x"3f81b4cc", +888 => x"085280d2", +889 => x"8851efe4", +890 => x"3f80d2a4", +891 => x"51efdd3f", +892 => x"800b800c", +893 => x"a93d0d04", +894 => x"80d2a851", +895 => x"f6ac3977", +896 => x"0857b053", +897 => x"76527751", +898 => x"9fc83f80", +899 => x"c10b81b4", +900 => x"c0335757", +901 => x"f8ae3975", +902 => x"8a3880e6", +903 => x"90088126", +904 => x"fdd33880", +905 => x"d2d851ef", +906 => x"a33f80d3", +907 => x"9051ef9c", +908 => x"3f80d2a4", +909 => x"51ef953f", +910 => x"80d68008", +911 => x"70719f2c", +912 => x"9a3d5356", +913 => x"5680e68c", +914 => x"0880e690", +915 => x"0841537f", +916 => x"5470525a", +917 => x"87a83f66", +918 => x"685f80e5", +919 => x"fc0c7d80", +920 => x"e6800c80", +921 => x"d6800870", +922 => x"9f2c5856", +923 => x"8058bd84", +924 => x"c0785555", +925 => x"76527553", +926 => x"7951858e", +927 => x"3f953d80", +928 => x"e68c0880", +929 => x"e6900841", +930 => x"557f5667", +931 => x"6940537e", +932 => x"5470525c", +933 => x"86e83f64", +934 => x"665e80e6", +935 => x"840c7c80", +936 => x"e6880c80", +937 => x"d6800870", +938 => x"9f2c4058", +939 => x"805783dc", +940 => x"eb948077", +941 => x"55557e52", +942 => x"77537b51", +943 => x"84cc3f64", +944 => x"665d5b80", +945 => x"5e8ddd7e", +946 => x"555580e6", +947 => x"8c0880e6", +948 => x"90085952", +949 => x"77537951", +950 => x"84b03f66", +951 => x"6840547e", +952 => x"557a527b", +953 => x"53a93dff", +954 => x"a8055186", +955 => x"913f6264", +956 => x"5e81b4c8", +957 => x"0c7c81b4", +958 => x"cc0c80d1", +959 => x"a051edcc", +960 => x"3f80e680", +961 => x"085280d1", +962 => x"d051edc0", +963 => x"3f80d1d8", +964 => x"51edb93f", +965 => x"80e68808", +966 => x"5280d1d0", +967 => x"51edad3f", +968 => x"81b4cc08", +969 => x"5280d288", +970 => x"51eda13f", +971 => x"80d2a451", +972 => x"ed9a3f80", +973 => x"0b800ca9", +974 => x"3d0d04a9", +975 => x"3dffa005", +976 => x"52805180", +977 => x"d23f9f53", +978 => x"80d3b052", +979 => x"7c519d82", +980 => x"3f7a7b81", +981 => x"b4b80c81", +982 => x"187081ff", +983 => x"0681b4c0", +984 => x"33595959", +985 => x"5af5fe39", +986 => x"ff16707b", +987 => x"31600c5c", +988 => x"800b811c", +989 => x"5c5c80d6", +990 => x"80087b25", +991 => x"f3dc38f6", +992 => x"a939ff3d", +993 => x"0d738232", +994 => x"70307072", +995 => x"07802580", +996 => x"0c525283", +997 => x"3d0d04fe", +998 => x"3d0d7476", +999 => x"71535452", +1000 => x"71822e83", +1001 => x"38835171", +1002 => x"812e9a38", +1003 => x"8172269f", +1004 => x"3871822e", +1005 => x"b8387184", +1006 => x"2ea93870", +1007 => x"730c7080", +1008 => x"0c843d0d", +1009 => x"0480e40b", +1010 => x"81b4b808", +1011 => x"258b3880", +1012 => x"730c7080", +1013 => x"0c843d0d", +1014 => x"0483730c", +1015 => x"70800c84", +1016 => x"3d0d0482", +1017 => x"730c7080", +1018 => x"0c843d0d", +1019 => x"0481730c", +1020 => x"70800c84", +1021 => x"3d0d0480", +1022 => x"3d0d7474", +1023 => x"14820571", +1024 => x"0c800c82", +1025 => x"3d0d04f7", +1026 => x"3d0d7b7d", +1027 => x"7f618512", +1028 => x"70822b75", +1029 => x"11707471", +1030 => x"70840553", +1031 => x"0c5a5a5d", +1032 => x"5b760c79", +1033 => x"80f8180c", +1034 => x"79861252", +1035 => x"57585a5a", +1036 => x"76762499", +1037 => x"3876b329", +1038 => x"822b7911", +1039 => x"51537673", +1040 => x"70840555", +1041 => x"0c811454", +1042 => x"757425f2", +1043 => x"387681cc", +1044 => x"2919fc11", +1045 => x"088105fc", +1046 => x"120c7a19", +1047 => x"70089fa0", +1048 => x"130c5856", +1049 => x"850b81b4", +1050 => x"b80c7580", +1051 => x"0c8b3d0d", +1052 => x"04fe3d0d", +1053 => x"02930533", +1054 => x"51800284", +1055 => x"05970533", +1056 => x"54527073", +1057 => x"2e883871", +1058 => x"800c843d", +1059 => x"0d047081", +1060 => x"b4bc3481", +1061 => x"0b800c84", +1062 => x"3d0d04f8", +1063 => x"3d0d7a7c", +1064 => x"5956820b", +1065 => x"83195555", +1066 => x"74167033", +1067 => x"75335b51", +1068 => x"5372792e", +1069 => x"80c63880", +1070 => x"c10b8116", +1071 => x"81165656", +1072 => x"57827525", +1073 => x"e338ffa9", +1074 => x"177081ff", +1075 => x"06555973", +1076 => x"82268338", +1077 => x"87558153", +1078 => x"7680d22e", +1079 => x"98387752", +1080 => x"75519bc3", +1081 => x"3f805372", +1082 => x"80082589", +1083 => x"38871581", +1084 => x"b4b80c81", +1085 => x"5372800c", +1086 => x"8a3d0d04", +1087 => x"7281b4bc", +1088 => x"34827525", +1089 => x"ffa238ff", +1090 => x"bd39ef3d", +1091 => x"0d636567", +1092 => x"5b427943", +1093 => x"67695940", +1094 => x"77415a80", +1095 => x"5d805e61", +1096 => x"7083ffff", +1097 => x"0671902a", +1098 => x"627083ff", +1099 => x"ff067190", +1100 => x"2a747229", +1101 => x"74732975", +1102 => x"73297774", +1103 => x"2973902a", +1104 => x"05721151", +1105 => x"5856535f", +1106 => x"5a575a58", +1107 => x"55587373", +1108 => x"27863884", +1109 => x"80801656", +1110 => x"73902a16", +1111 => x"5b7883ff", +1112 => x"ff067484", +1113 => x"80802905", +1114 => x"5c7a7c5a", +1115 => x"5d785e77", +1116 => x"7f296178", +1117 => x"29057d05", +1118 => x"5d7c7e56", +1119 => x"7a0c7484", +1120 => x"1b0c7980", +1121 => x"0c933d0d", +1122 => x"04f93d0d", +1123 => x"797b7d54", +1124 => x"58725977", +1125 => x"30797030", +1126 => x"7072079f", +1127 => x"2a737131", +1128 => x"5a525977", +1129 => x"7956730c", +1130 => x"53738413", +1131 => x"0c54800c", +1132 => x"893d0d04", +1133 => x"f93d0d79", +1134 => x"7b7d7f56", +1135 => x"54525472", +1136 => x"802ea038", +1137 => x"70577158", +1138 => x"a0733152", +1139 => x"807225a1", +1140 => x"38777074", +1141 => x"2b577073", +1142 => x"2a78752b", +1143 => x"07565174", +1144 => x"76535170", +1145 => x"740c7184", +1146 => x"150c7380", +1147 => x"0c893d0d", +1148 => x"04805677", +1149 => x"72302b55", +1150 => x"74765351", +1151 => x"e639e43d", +1152 => x"0d6ea13d", +1153 => x"08a33d08", +1154 => x"59575f80", +1155 => x"764d774e", +1156 => x"a33d08a5", +1157 => x"3d08574b", +1158 => x"754c5e7d", +1159 => x"6c2486fb", +1160 => x"38806a24", +1161 => x"878f3869", +1162 => x"6b58566b", +1163 => x"6d5d467b", +1164 => x"47754476", +1165 => x"45646468", +1166 => x"685c5c56", +1167 => x"567481e7", +1168 => x"38787627", +1169 => x"82c73875", +1170 => x"81ff2683", +1171 => x"2b5583ff", +1172 => x"ff76278c", +1173 => x"389055fe", +1174 => x"800a7627", +1175 => x"83389855", +1176 => x"75752a80", +1177 => x"d3d00570", +1178 => x"33a07731", +1179 => x"71315755", +1180 => x"5774802e", +1181 => x"95387575", +1182 => x"2ba07631", +1183 => x"7a772b7c", +1184 => x"722a077c", +1185 => x"782b5d5b", +1186 => x"59567590", +1187 => x"2a7683ff", +1188 => x"ff067154", +1189 => x"7a535957", +1190 => x"88803f80", +1191 => x"085b87ea", +1192 => x"3f800880", +1193 => x"0879297c", +1194 => x"902b7c90", +1195 => x"2a075656", +1196 => x"59737527", +1197 => x"94388008", +1198 => x"ff057615", +1199 => x"55597574", +1200 => x"26873874", +1201 => x"742687b9", +1202 => x"38765273", +1203 => x"75315187", +1204 => x"c93f8008", +1205 => x"5587b33f", +1206 => x"80088008", +1207 => x"79297b83", +1208 => x"ffff0677", +1209 => x"902b0756", +1210 => x"59577378", +1211 => x"27963880", +1212 => x"08ff0576", +1213 => x"15555775", +1214 => x"74268938", +1215 => x"77742677", +1216 => x"71315856", +1217 => x"78902b77", +1218 => x"0758805b", +1219 => x"7a407741", +1220 => x"7f615654", +1221 => x"7d80d938", +1222 => x"737f0c74", +1223 => x"7f84050c", +1224 => x"7e800c9e", +1225 => x"3d0d0480", +1226 => x"705c5874", +1227 => x"7926dd38", +1228 => x"7481ff26", +1229 => x"832b5774", +1230 => x"83ffff26", +1231 => x"82a53874", +1232 => x"772a80d3", +1233 => x"d0057033", +1234 => x"a0793171", +1235 => x"31595c5d", +1236 => x"7682b338", +1237 => x"76547479", +1238 => x"27833881", +1239 => x"54797627", +1240 => x"74075981", +1241 => x"5878ffa2", +1242 => x"38765880", +1243 => x"5bff9d39", +1244 => x"73527453", +1245 => x"9e3de805", +1246 => x"51fc8e3f", +1247 => x"6769567f", +1248 => x"0c747f84", +1249 => x"050c7e80", +1250 => x"0c9e3d0d", +1251 => x"0475802e", +1252 => x"81c43875", +1253 => x"81ff2683", +1254 => x"2b5583ff", +1255 => x"ff76278c", +1256 => x"389055fe", +1257 => x"800a7627", +1258 => x"83389855", +1259 => x"75752a80", +1260 => x"d3d00570", +1261 => x"33a07731", +1262 => x"7131575e", +1263 => x"54748491", +1264 => x"38787631", +1265 => x"54817690", +1266 => x"2a7783ff", +1267 => x"ff065f5d", +1268 => x"5b7b5273", +1269 => x"5185c33f", +1270 => x"80085785", +1271 => x"ad3f8008", +1272 => x"80087e29", +1273 => x"78902b7c", +1274 => x"902a0756", +1275 => x"56597375", +1276 => x"27943880", +1277 => x"08ff0576", +1278 => x"15555975", +1279 => x"74268738", +1280 => x"74742684", +1281 => x"f3387b52", +1282 => x"73753151", +1283 => x"858c3f80", +1284 => x"085584f6", +1285 => x"3f800880", +1286 => x"087e297b", +1287 => x"83ffff06", +1288 => x"77902b07", +1289 => x"56595773", +1290 => x"78279638", +1291 => x"8008ff05", +1292 => x"76155557", +1293 => x"75742689", +1294 => x"38777426", +1295 => x"77713158", +1296 => x"5a78902b", +1297 => x"77077b41", +1298 => x"417f6156", +1299 => x"547d802e", +1300 => x"fdc638fe", +1301 => x"9b397552", +1302 => x"815184ae", +1303 => x"3f800856", +1304 => x"feb13990", +1305 => x"57fe800a", +1306 => x"7527fdd3", +1307 => x"38987571", +1308 => x"2a80d3d0", +1309 => x"057033a0", +1310 => x"73317131", +1311 => x"535d5e57", +1312 => x"76802efd", +1313 => x"cf38a077", +1314 => x"3175782b", +1315 => x"77722a07", +1316 => x"77792b7b", +1317 => x"7a2b7d74", +1318 => x"2a077d7b", +1319 => x"2b73902a", +1320 => x"7483ffff", +1321 => x"0671597f", +1322 => x"772a585e", +1323 => x"5c415f58", +1324 => x"5c5483e6", +1325 => x"3f800854", +1326 => x"83d03f80", +1327 => x"08800879", +1328 => x"2975902b", +1329 => x"7e902a07", +1330 => x"56565973", +1331 => x"75279938", +1332 => x"8008ff05", +1333 => x"7b155559", +1334 => x"7a74268c", +1335 => x"38737527", +1336 => x"8738ff19", +1337 => x"7b155559", +1338 => x"76527375", +1339 => x"315183aa", +1340 => x"3f800855", +1341 => x"83943f80", +1342 => x"08800879", +1343 => x"297d83ff", +1344 => x"ff067790", +1345 => x"2b075659", +1346 => x"57737827", +1347 => x"99388008", +1348 => x"ff057b15", +1349 => x"55577a74", +1350 => x"268c3873", +1351 => x"78278738", +1352 => x"ff177b15", +1353 => x"55577378", +1354 => x"3179902b", +1355 => x"78077083", +1356 => x"ffff0671", +1357 => x"902a7983", +1358 => x"ffff067a", +1359 => x"902a7372", +1360 => x"29737329", +1361 => x"74732976", +1362 => x"74297390", +1363 => x"2a057205", +1364 => x"5755435f", +1365 => x"5b585a57", +1366 => x"595a747c", +1367 => x"27863884", +1368 => x"80801757", +1369 => x"74902a17", +1370 => x"7983ffff", +1371 => x"06768480", +1372 => x"80290557", +1373 => x"57767a26", +1374 => x"9a38767a", +1375 => x"32703070", +1376 => x"72078025", +1377 => x"565a5b7c", +1378 => x"7627fafe", +1379 => x"3873802e", +1380 => x"faf838ff", +1381 => x"1858805b", +1382 => x"faf239ff", +1383 => x"76537754", +1384 => x"9f3de805", +1385 => x"525ef7e1", +1386 => x"3f676957", +1387 => x"4c754d69", +1388 => x"8025f8f3", +1389 => x"387d096a", +1390 => x"6c5c537a", +1391 => x"549f3de8", +1392 => x"05525ef7", +1393 => x"c43f6769", +1394 => x"714c704d", +1395 => x"5856f8db", +1396 => x"39a07531", +1397 => x"76762b7a", +1398 => x"772b7c73", +1399 => x"2a077c78", +1400 => x"2b72902a", +1401 => x"7383ffff", +1402 => x"0671587e", +1403 => x"762a5742", +1404 => x"405d5d57", +1405 => x"5881a33f", +1406 => x"80085781", +1407 => x"8d3f8008", +1408 => x"80087e29", +1409 => x"78902b7d", +1410 => x"902a0756", +1411 => x"56597375", +1412 => x"27993880", +1413 => x"08ff0576", +1414 => x"15555975", +1415 => x"74268c38", +1416 => x"73752787", +1417 => x"38ff1976", +1418 => x"1555597b", +1419 => x"52737531", +1420 => x"5180e73f", +1421 => x"80085580", +1422 => x"d13f8008", +1423 => x"80087e29", +1424 => x"7c83ffff", +1425 => x"06707890", +1426 => x"2b075156", +1427 => x"58587377", +1428 => x"27993880", +1429 => x"08ff0576", +1430 => x"15555875", +1431 => x"74268c38", +1432 => x"73772787", +1433 => x"38ff1876", +1434 => x"15555878", +1435 => x"902b7807", +1436 => x"74783155", +1437 => x"5bfada39", +1438 => x"ff197615", +1439 => x"5559fb86", +1440 => x"39ff1976", +1441 => x"155559f8", +1442 => x"c0397070", +1443 => x"70805375", +1444 => x"52745181", +1445 => x"913f5050", +1446 => x"50047070", +1447 => x"70815375", +1448 => x"52745181", +1449 => x"813f5050", +1450 => x"5004fb3d", +1451 => x"0d777955", +1452 => x"55805675", +1453 => x"7524ab38", +1454 => x"8074249d", +1455 => x"38805373", +1456 => x"52745180", +1457 => x"e13f8008", +1458 => x"5475802e", +1459 => x"85388008", +1460 => x"30547380", +1461 => x"0c873d0d", +1462 => x"04733076", +1463 => x"81325754", +1464 => x"dc397430", +1465 => x"55815673", +1466 => x"8025d238", +1467 => x"ec39fa3d", +1468 => x"0d787a57", +1469 => x"55805776", +1470 => x"7524a438", +1471 => x"759f2c54", +1472 => x"81537574", +1473 => x"32743152", +1474 => x"74519b3f", +1475 => x"80085476", +1476 => x"802e8538", +1477 => x"80083054", +1478 => x"73800c88", +1479 => x"3d0d0474", +1480 => x"30558157", +1481 => x"d739fc3d", +1482 => x"0d767853", +1483 => x"54815380", +1484 => x"74732652", +1485 => x"5572802e", +1486 => x"98387080", +1487 => x"2eab3880", +1488 => x"7224a638", +1489 => x"71107310", +1490 => x"75722653", +1491 => x"545272ea", +1492 => x"38735178", +1493 => x"83387451", +1494 => x"70800c86", +1495 => x"3d0d0472", +1496 => x"0a100a72", +1497 => x"0a100a53", +1498 => x"5372802e", +1499 => x"e4387174", +1500 => x"26ed3873", +1501 => x"72317574", +1502 => x"07740a10", +1503 => x"0a740a10", +1504 => x"0a555556", +1505 => x"54e33970", +1506 => x"70735280", +1507 => x"decc0851", +1508 => x"933f5050", +1509 => x"04707073", +1510 => x"5280decc", +1511 => x"085190ce", +1512 => x"3f505004", +1513 => x"f43d0d7e", +1514 => x"608b1170", +1515 => x"f8065b55", +1516 => x"555d7296", +1517 => x"26833890", +1518 => x"58807824", +1519 => x"74792607", +1520 => x"55805474", +1521 => x"742e0981", +1522 => x"0680ca38", +1523 => x"7c518d9e", +1524 => x"3f7783f7", +1525 => x"2680c538", +1526 => x"77832a70", +1527 => x"10101080", +1528 => x"d6c4058c", +1529 => x"11085858", +1530 => x"5475772e", +1531 => x"81f03884", +1532 => x"1608fc06", +1533 => x"8c170888", +1534 => x"1808718c", +1535 => x"120c8812", +1536 => x"0c5b7605", +1537 => x"84110881", +1538 => x"0784120c", +1539 => x"537c518c", +1540 => x"de3f8816", +1541 => x"5473800c", +1542 => x"8e3d0d04", +1543 => x"77892a78", +1544 => x"832a5854", +1545 => x"73802ebf", +1546 => x"3877862a", +1547 => x"b8055784", +1548 => x"7427b438", +1549 => x"80db1457", +1550 => x"947427ab", +1551 => x"38778c2a", +1552 => x"80ee0557", +1553 => x"80d47427", +1554 => x"9e38778f", +1555 => x"2a80f705", +1556 => x"5782d474", +1557 => x"27913877", +1558 => x"922a80fc", +1559 => x"05578ad4", +1560 => x"74278438", +1561 => x"80fe5776", +1562 => x"10101080", +1563 => x"d6c4058c", +1564 => x"11085653", +1565 => x"74732ea3", +1566 => x"38841508", +1567 => x"fc067079", +1568 => x"31555673", +1569 => x"8f2488e4", +1570 => x"38738025", +1571 => x"88e6388c", +1572 => x"15085574", +1573 => x"732e0981", +1574 => x"06df3881", +1575 => x"175980d6", +1576 => x"d4085675", +1577 => x"80d6cc2e", +1578 => x"82cc3884", +1579 => x"1608fc06", +1580 => x"70793155", +1581 => x"55738f24", +1582 => x"bb3880d6", +1583 => x"cc0b80d6", +1584 => x"d80c80d6", +1585 => x"cc0b80d6", +1586 => x"d40c8074", +1587 => x"2480db38", +1588 => x"74168411", +1589 => x"08810784", +1590 => x"120c53fe", +1591 => x"b0398816", +1592 => x"8c110857", +1593 => x"5975792e", +1594 => x"098106fe", +1595 => x"82388214", +1596 => x"59ffab39", +1597 => x"77167881", +1598 => x"0784180c", +1599 => x"7080d6d8", +1600 => x"0c7080d6", +1601 => x"d40c80d6", +1602 => x"cc0b8c12", +1603 => x"0c8c1108", +1604 => x"88120c74", +1605 => x"81078412", +1606 => x"0c740574", +1607 => x"710c5b7c", +1608 => x"518acc3f", +1609 => x"881654fd", +1610 => x"ec3983ff", +1611 => x"75278391", +1612 => x"3874892a", +1613 => x"75832a54", +1614 => x"5473802e", +1615 => x"bf387486", +1616 => x"2ab80553", +1617 => x"847427b4", +1618 => x"3880db14", +1619 => x"53947427", +1620 => x"ab38748c", +1621 => x"2a80ee05", +1622 => x"5380d474", +1623 => x"279e3874", +1624 => x"8f2a80f7", +1625 => x"055382d4", +1626 => x"74279138", +1627 => x"74922a80", +1628 => x"fc05538a", +1629 => x"d4742784", +1630 => x"3880fe53", +1631 => x"72101010", +1632 => x"80d6c405", +1633 => x"88110855", +1634 => x"5773772e", +1635 => x"868b3884", +1636 => x"1408fc06", +1637 => x"5b747b27", +1638 => x"8d388814", +1639 => x"08547377", +1640 => x"2e098106", +1641 => x"ea388c14", +1642 => x"0880d6c4", +1643 => x"0b840508", +1644 => x"718c190c", +1645 => x"7588190c", +1646 => x"7788130c", +1647 => x"5c57758c", +1648 => x"150c7853", +1649 => x"80792483", +1650 => x"98387282", +1651 => x"2c81712b", +1652 => x"5656747b", +1653 => x"2680ca38", +1654 => x"7a750657", +1655 => x"7682a338", +1656 => x"78fc0684", +1657 => x"05597410", +1658 => x"707c0655", +1659 => x"55738292", +1660 => x"38841959", +1661 => x"f13980d6", +1662 => x"c40b8405", +1663 => x"0879545b", +1664 => x"788025c6", +1665 => x"3882da39", +1666 => x"74097b06", +1667 => x"7080d6c4", +1668 => x"0b84050c", +1669 => x"5b741055", +1670 => x"747b2685", +1671 => x"387485bc", +1672 => x"3880d6c4", +1673 => x"0b880508", +1674 => x"70841208", +1675 => x"fc06707b", +1676 => x"317b7226", +1677 => x"8f722507", +1678 => x"5d575c5c", +1679 => x"5578802e", +1680 => x"80d93879", +1681 => x"1580d6bc", +1682 => x"08199011", +1683 => x"59545680", +1684 => x"d6b808ff", +1685 => x"2e8838a0", +1686 => x"8f13e080", +1687 => x"06577652", +1688 => x"7c51888c", +1689 => x"3f800854", +1690 => x"8008ff2e", +1691 => x"90388008", +1692 => x"762782a7", +1693 => x"387480d6", +1694 => x"c42e829f", +1695 => x"3880d6c4", +1696 => x"0b880508", +1697 => x"55841508", +1698 => x"fc067079", +1699 => x"31797226", +1700 => x"8f722507", +1701 => x"5d555a7a", +1702 => x"83f23877", +1703 => x"81078416", +1704 => x"0c771570", +1705 => x"80d6c40b", +1706 => x"88050c74", +1707 => x"81078412", +1708 => x"0c567c51", +1709 => x"87b93f88", +1710 => x"15547380", +1711 => x"0c8e3d0d", +1712 => x"0474832a", +1713 => x"70545480", +1714 => x"7424819b", +1715 => x"3872822c", +1716 => x"81712b80", +1717 => x"d6c80807", +1718 => x"7080d6c4", +1719 => x"0b84050c", +1720 => x"75101010", +1721 => x"80d6c405", +1722 => x"88110871", +1723 => x"8c1b0c70", +1724 => x"881b0c79", +1725 => x"88130c57", +1726 => x"555c5575", +1727 => x"8c150cfd", +1728 => x"c1397879", +1729 => x"10101080", +1730 => x"d6c40570", +1731 => x"565b5c8c", +1732 => x"14085675", +1733 => x"742ea338", +1734 => x"841608fc", +1735 => x"06707931", +1736 => x"5853768f", +1737 => x"2483f138", +1738 => x"76802584", +1739 => x"af388c16", +1740 => x"08567574", +1741 => x"2e098106", +1742 => x"df388814", +1743 => x"811a7083", +1744 => x"06555a54", +1745 => x"72c9387b", +1746 => x"83065675", +1747 => x"802efdb8", +1748 => x"38ff1cf8", +1749 => x"1b5b5c88", +1750 => x"1a087a2e", +1751 => x"ea38fdb5", +1752 => x"39831953", +1753 => x"fce43983", +1754 => x"1470822c", +1755 => x"81712b80", +1756 => x"d6c80807", +1757 => x"7080d6c4", +1758 => x"0b84050c", +1759 => x"76101010", +1760 => x"80d6c405", +1761 => x"88110871", +1762 => x"8c1c0c70", +1763 => x"881c0c7a", +1764 => x"88130c58", +1765 => x"535d5653", +1766 => x"fee13980", +1767 => x"d6880817", +1768 => x"59800876", +1769 => x"2e818b38", +1770 => x"80d6b808", +1771 => x"ff2e848e", +1772 => x"38737631", +1773 => x"1980d688", +1774 => x"0c738706", +1775 => x"70565372", +1776 => x"802e8838", +1777 => x"88733170", +1778 => x"15555576", +1779 => x"149fff06", +1780 => x"a0807131", +1781 => x"1670547e", +1782 => x"53515385", +1783 => x"933f8008", +1784 => x"568008ff", +1785 => x"2e819e38", +1786 => x"80d68808", +1787 => x"137080d6", +1788 => x"880c7475", +1789 => x"80d6c40b", +1790 => x"88050c77", +1791 => x"76311581", +1792 => x"07555659", +1793 => x"7a80d6c4", +1794 => x"2e83c038", +1795 => x"798f2682", +1796 => x"ef38810b", +1797 => x"84150c84", +1798 => x"1508fc06", +1799 => x"70793179", +1800 => x"72268f72", +1801 => x"25075d55", +1802 => x"5a7a802e", +1803 => x"fced3880", +1804 => x"db398008", +1805 => x"9fff0655", +1806 => x"74feed38", +1807 => x"7880d688", +1808 => x"0c80d6c4", +1809 => x"0b880508", +1810 => x"7a188107", +1811 => x"84120c55", +1812 => x"80d6b408", +1813 => x"79278638", +1814 => x"7880d6b4", +1815 => x"0c80d6b0", +1816 => x"087927fc", +1817 => x"a0387880", +1818 => x"d6b00c84", +1819 => x"1508fc06", +1820 => x"70793179", +1821 => x"72268f72", +1822 => x"25075d55", +1823 => x"5a7a802e", +1824 => x"fc993888", +1825 => x"39807457", +1826 => x"53fedd39", +1827 => x"7c5183df", +1828 => x"3f800b80", +1829 => x"0c8e3d0d", +1830 => x"04807324", +1831 => x"a5387282", +1832 => x"2c81712b", +1833 => x"80d6c808", +1834 => x"077080d6", +1835 => x"c40b8405", +1836 => x"0c5c5a76", +1837 => x"8c170c73", +1838 => x"88170c75", +1839 => x"88180cf9", +1840 => x"fd398313", +1841 => x"70822c81", +1842 => x"712b80d6", +1843 => x"c8080770", +1844 => x"80d6c40b", +1845 => x"84050c5d", +1846 => x"5b53d839", +1847 => x"7a75065c", +1848 => x"7bfc9f38", +1849 => x"84197510", +1850 => x"5659f139", +1851 => x"ff178105", +1852 => x"59f7ab39", +1853 => x"8c150888", +1854 => x"1608718c", +1855 => x"120c8812", +1856 => x"0c597515", +1857 => x"84110881", +1858 => x"0784120c", +1859 => x"587c5182", +1860 => x"de3f8815", +1861 => x"54fba339", +1862 => x"77167881", +1863 => x"0784180c", +1864 => x"8c170888", +1865 => x"1808718c", +1866 => x"120c8812", +1867 => x"0c5c7080", +1868 => x"d6d80c70", +1869 => x"80d6d40c", +1870 => x"80d6cc0b", +1871 => x"8c120c8c", +1872 => x"11088812", +1873 => x"0c778107", +1874 => x"84120c77", +1875 => x"0577710c", +1876 => x"557c5182", +1877 => x"9a3f8816", +1878 => x"54f5ba39", +1879 => x"72168411", +1880 => x"08810784", +1881 => x"120c588c", +1882 => x"16088817", +1883 => x"08718c12", +1884 => x"0c88120c", +1885 => x"577c5181", +1886 => x"f63f8816", +1887 => x"54f59639", +1888 => x"7284150c", +1889 => x"f41af806", +1890 => x"70841d08", +1891 => x"81060784", +1892 => x"1d0c701c", +1893 => x"5556850b", +1894 => x"84150c85", +1895 => x"0b88150c", +1896 => x"8f7627fd", +1897 => x"ab38881b", +1898 => x"527c5184", +1899 => x"c13f80d6", +1900 => x"c40b8805", +1901 => x"0880d688", +1902 => x"085a55fd", +1903 => x"93397880", +1904 => x"d6880c73", +1905 => x"80d6b80c", +1906 => x"fbef3972", +1907 => x"84150cfc", +1908 => x"ff39fb3d", +1909 => x"0d77707a", +1910 => x"7c585553", +1911 => x"568f7527", +1912 => x"80e63872", +1913 => x"76078306", +1914 => x"517080dc", +1915 => x"38757352", +1916 => x"54707084", +1917 => x"05520874", +1918 => x"70840556", +1919 => x"0c737170", +1920 => x"84055308", +1921 => x"71708405", +1922 => x"530c7170", +1923 => x"84055308", +1924 => x"71708405", +1925 => x"530c7170", +1926 => x"84055308", +1927 => x"71708405", +1928 => x"530cf016", +1929 => x"5654748f", +1930 => x"26c73883", +1931 => x"75279538", +1932 => x"70708405", +1933 => x"52087470", +1934 => x"8405560c", +1935 => x"fc155574", +1936 => x"8326ed38", +1937 => x"73715452", +1938 => x"ff155170", +1939 => x"ff2e9838", +1940 => x"72708105", +1941 => x"54337270", +1942 => x"81055434", +1943 => x"ff115170", +1944 => x"ff2e0981", +1945 => x"06ea3875", +1946 => x"800c873d", +1947 => x"0d040404", +1948 => x"70707070", +1949 => x"800b81b6", +1950 => x"9c0c7651", +1951 => x"87cc3f80", +1952 => x"08538008", +1953 => x"ff2e8938", +1954 => x"72800c50", +1955 => x"50505004", +1956 => x"81b69c08", +1957 => x"5473802e", +1958 => x"ef387574", +1959 => x"710c5272", +1960 => x"800c5050", +1961 => x"505004fb", +1962 => x"3d0d7779", +1963 => x"70720783", +1964 => x"06535452", +1965 => x"70933871", +1966 => x"73730854", +1967 => x"56547173", +1968 => x"082e80c4", +1969 => x"38737554", +1970 => x"52713370", +1971 => x"81ff0652", +1972 => x"5470802e", +1973 => x"9d387233", +1974 => x"5570752e", +1975 => x"09810695", +1976 => x"38811281", +1977 => x"14713370", +1978 => x"81ff0654", +1979 => x"56545270", +1980 => x"e5387233", +1981 => x"557381ff", +1982 => x"067581ff", +1983 => x"06717131", +1984 => x"800c5552", +1985 => x"873d0d04", +1986 => x"7109f7fb", +1987 => x"fdff1306", +1988 => x"f8848281", +1989 => x"80065271", +1990 => x"97388414", +1991 => x"84167108", +1992 => x"54565471", +1993 => x"75082ee0", +1994 => x"38737554", +1995 => x"52ff9a39", +1996 => x"800b800c", +1997 => x"873d0d04", +1998 => x"fb3d0d77", +1999 => x"705256fe", +2000 => x"ad3f80d6", +2001 => x"c40b8805", +2002 => x"08841108", +2003 => x"fc06707b", +2004 => x"319fef05", +2005 => x"e08006e0", +2006 => x"80055255", +2007 => x"55a08075", +2008 => x"24943880", +2009 => x"527551fe", +2010 => x"873f80d6", +2011 => x"cc081453", +2012 => x"7280082e", +2013 => x"8f387551", +2014 => x"fdf53f80", +2015 => x"5372800c", +2016 => x"873d0d04", +2017 => x"74305275", +2018 => x"51fde53f", +2019 => x"8008ff2e", +2020 => x"a83880d6", +2021 => x"c40b8805", +2022 => x"08747631", +2023 => x"81078412", +2024 => x"0c5380d6", +2025 => x"88087531", +2026 => x"80d6880c", +2027 => x"7551fdbf", +2028 => x"3f810b80", +2029 => x"0c873d0d", +2030 => x"04805275", +2031 => x"51fdb13f", +2032 => x"80d6c40b", +2033 => x"88050880", +2034 => x"08713154", +2035 => x"548f7325", +2036 => x"ffa43880", +2037 => x"0880d6b8", +2038 => x"083180d6", +2039 => x"880c7281", +2040 => x"0784150c", +2041 => x"7551fd87", +2042 => x"3f8053ff", +2043 => x"9039f73d", +2044 => x"0d7b7d54", +2045 => x"5a72802e", +2046 => x"82833879", +2047 => x"51fcef3f", +2048 => x"f8138411", +2049 => x"0870fe06", +2050 => x"70138411", +2051 => x"08fc065c", +2052 => x"57585457", +2053 => x"80d6cc08", +2054 => x"742e82de", +2055 => x"38778415", +2056 => x"0c807381", +2057 => x"06565974", +2058 => x"792e81d5", +2059 => x"38771484", +2060 => x"11088106", +2061 => x"565374a0", +2062 => x"38771656", +2063 => x"7881e638", +2064 => x"88140855", +2065 => x"7480d6cc", +2066 => x"2e82f938", +2067 => x"8c140870", +2068 => x"8c170c75", +2069 => x"88120c58", +2070 => x"75810784", +2071 => x"180c7517", +2072 => x"76710c54", +2073 => x"78819138", +2074 => x"83ff7627", +2075 => x"81c83875", +2076 => x"892a7683", +2077 => x"2a545473", +2078 => x"802ebf38", +2079 => x"75862ab8", +2080 => x"05538474", +2081 => x"27b43880", +2082 => x"db145394", +2083 => x"7427ab38", +2084 => x"758c2a80", +2085 => x"ee055380", +2086 => x"d474279e", +2087 => x"38758f2a", +2088 => x"80f70553", +2089 => x"82d47427", +2090 => x"91387592", +2091 => x"2a80fc05", +2092 => x"538ad474", +2093 => x"27843880", +2094 => x"fe537210", +2095 => x"101080d6", +2096 => x"c4058811", +2097 => x"08555573", +2098 => x"752e82bf", +2099 => x"38841408", +2100 => x"fc065975", +2101 => x"79278d38", +2102 => x"88140854", +2103 => x"73752e09", +2104 => x"8106ea38", +2105 => x"8c140870", +2106 => x"8c190c74", +2107 => x"88190c77", +2108 => x"88120c55", +2109 => x"768c150c", +2110 => x"7951faf3", +2111 => x"3f8b3d0d", +2112 => x"04760877", +2113 => x"71315876", +2114 => x"05881808", +2115 => x"56567480", +2116 => x"d6cc2e80", +2117 => x"e0388c17", +2118 => x"08708c17", +2119 => x"0c758812", +2120 => x"0c53fe89", +2121 => x"39881408", +2122 => x"8c150870", +2123 => x"8c130c59", +2124 => x"88190cfe", +2125 => x"a3397583", +2126 => x"2a705454", +2127 => x"80742481", +2128 => x"98387282", +2129 => x"2c81712b", +2130 => x"80d6c808", +2131 => x"0780d6c4", +2132 => x"0b84050c", +2133 => x"74101010", +2134 => x"80d6c405", +2135 => x"88110871", +2136 => x"8c1b0c70", +2137 => x"881b0c79", +2138 => x"88130c56", +2139 => x"5a55768c", +2140 => x"150cff84", +2141 => x"398159fd", +2142 => x"b4397716", +2143 => x"73810654", +2144 => x"55729838", +2145 => x"76087771", +2146 => x"31587505", +2147 => x"8c180888", +2148 => x"1908718c", +2149 => x"120c8812", +2150 => x"0c555574", +2151 => x"81078418", +2152 => x"0c7680d6", +2153 => x"c40b8805", +2154 => x"0c80d6c0", +2155 => x"087526fe", +2156 => x"c73880d6", +2157 => x"bc085279", +2158 => x"51fafd3f", +2159 => x"7951f9af", +2160 => x"3ffeba39", +2161 => x"81778c17", +2162 => x"0c778817", +2163 => x"0c758c19", +2164 => x"0c758819", +2165 => x"0c59fd80", +2166 => x"39831470", +2167 => x"822c8171", +2168 => x"2b80d6c8", +2169 => x"080780d6", +2170 => x"c40b8405", +2171 => x"0c751010", +2172 => x"1080d6c4", +2173 => x"05881108", +2174 => x"718c1c0c", +2175 => x"70881c0c", +2176 => x"7a88130c", +2177 => x"575b5653", +2178 => x"fee43980", +2179 => x"7324a338", +2180 => x"72822c81", +2181 => x"712b80d6", +2182 => x"c8080780", +2183 => x"d6c40b84", +2184 => x"050c5874", +2185 => x"8c180c73", +2186 => x"88180c76", +2187 => x"88160cfd", +2188 => x"c3398313", +2189 => x"70822c81", +2190 => x"712b80d6", +2191 => x"c8080780", +2192 => x"d6c40b84", +2193 => x"050c5953", +2194 => x"da397070", +2195 => x"7080e5f4", +2196 => x"08893881", +2197 => x"b6a00b80", +2198 => x"e5f40c80", +2199 => x"e5f40875", +2200 => x"115252ff", +2201 => x"537087fb", +2202 => x"80802688", +2203 => x"387080e5", +2204 => x"f40c7153", +2205 => x"72800c50", +2206 => x"505004fd", +2207 => x"3d0d800b", +2208 => x"80d5f408", +2209 => x"54547281", +2210 => x"2e9b3873", +2211 => x"80e5f80c", +2212 => x"c3ee3fc2", +2213 => x"eb3f80e5", +2214 => x"cc528151", +2215 => x"cc933f80", +2216 => x"085180dd", +2217 => x"3f7280e5", +2218 => x"f80cc3d4", +2219 => x"3fc2d13f", +2220 => x"80e5cc52", +2221 => x"8151cbf9", +2222 => x"3f800851", +2223 => x"80c33f00", +2224 => x"ff3900ff", +2225 => x"39f43d0d", +2226 => x"7e80e5ec", +2227 => x"08700870", +2228 => x"81ff0692", +2229 => x"3df80555", +2230 => x"515a5759", +2231 => x"c48f3f80", +2232 => x"5477557b", +2233 => x"7d585276", +2234 => x"538e3df0", +2235 => x"0551de8e", +2236 => x"3f797b58", +2237 => x"790c7684", +2238 => x"1a0c7880", +2239 => x"0c8e3d0d", +2240 => x"04f73d0d", +2241 => x"7b80decc", +2242 => x"0882c811", +2243 => x"085a545a", +2244 => x"77802e80", +2245 => x"da388188", +2246 => x"18841908", +2247 => x"ff058171", +2248 => x"2b595559", +2249 => x"80742480", +2250 => x"ea388074", +2251 => x"24b53873", +2252 => x"822b7811", +2253 => x"88055656", +2254 => x"81801908", +2255 => x"77065372", +2256 => x"802eb638", +2257 => x"78167008", +2258 => x"53537951", +2259 => x"74085372", +2260 => x"2dff14fc", +2261 => x"17fc1779", +2262 => x"812c5a57", +2263 => x"57547380", +2264 => x"25d63877", +2265 => x"085877ff", +2266 => x"ad3880de", +2267 => x"cc0853bc", +2268 => x"1308a538", +2269 => x"7951fec7", +2270 => x"3f740853", +2271 => x"722dff14", +2272 => x"fc17fc17", +2273 => x"79812c5a", +2274 => x"57575473", +2275 => x"8025ffa8", +2276 => x"38d13980", +2277 => x"57ff9339", +2278 => x"7251bc13", +2279 => x"0854732d", +2280 => x"7951fe9b", +2281 => x"3f707080", +2282 => x"e5d40bfc", +2283 => x"05700852", +2284 => x"5270ff2e", +2285 => x"9138702d", +2286 => x"fc127008", +2287 => x"525270ff", +2288 => x"2e098106", +2289 => x"f1385050", +2290 => x"0404c2ff", +2291 => x"3f040000", +2292 => x"00000040", +2293 => x"30313233", +2294 => x"34353637", +2295 => x"38390000", +2296 => x"44485259", +2297 => x"53544f4e", +2298 => x"45205052", +2299 => x"4f475241", +2300 => x"4d2c2053", +2301 => x"4f4d4520", +2302 => x"53545249", +2303 => x"4e470000", +2304 => x"44485259", +2305 => x"53544f4e", +2306 => x"45205052", +2307 => x"4f475241", +2308 => x"4d2c2031", +2309 => x"27535420", +2310 => x"53545249", +2311 => x"4e470000", +2312 => x"44687279", +2313 => x"73746f6e", +2314 => x"65204265", +2315 => x"6e63686d", +2316 => x"61726b2c", +2317 => x"20566572", +2318 => x"73696f6e", +2319 => x"20322e31", +2320 => x"20284c61", +2321 => x"6e677561", +2322 => x"67653a20", +2323 => x"43290a00", +2324 => x"50726f67", +2325 => x"72616d20", +2326 => x"636f6d70", +2327 => x"696c6564", +2328 => x"20776974", +2329 => x"68202772", +2330 => x"65676973", +2331 => x"74657227", +2332 => x"20617474", +2333 => x"72696275", +2334 => x"74650a00", +2335 => x"45786563", +2336 => x"7574696f", +2337 => x"6e207374", +2338 => x"61727473", +2339 => x"2c202564", +2340 => x"2072756e", +2341 => x"73207468", +2342 => x"726f7567", +2343 => x"68204468", +2344 => x"72797374", +2345 => x"6f6e650a", +2346 => x"00000000", +2347 => x"44485259", +2348 => x"53544f4e", +2349 => x"45205052", +2350 => x"4f475241", +2351 => x"4d2c2032", +2352 => x"274e4420", +2353 => x"53545249", +2354 => x"4e470000", +2355 => x"45786563", +2356 => x"7574696f", +2357 => x"6e20656e", +2358 => x"64730a00", +2359 => x"46696e61", +2360 => x"6c207661", +2361 => x"6c756573", +2362 => x"206f6620", +2363 => x"74686520", +2364 => x"76617269", +2365 => x"61626c65", +2366 => x"73207573", +2367 => x"65642069", +2368 => x"6e207468", +2369 => x"65206265", +2370 => x"6e63686d", +2371 => x"61726b3a", +2372 => x"0a000000", +2373 => x"496e745f", +2374 => x"476c6f62", +2375 => x"3a202020", +2376 => x"20202020", +2377 => x"20202020", +2378 => x"2025640a", +2379 => x"00000000", +2380 => x"20202020", +2381 => x"20202020", +2382 => x"73686f75", +2383 => x"6c642062", +2384 => x"653a2020", +2385 => x"2025640a", +2386 => x"00000000", +2387 => x"426f6f6c", +2388 => x"5f476c6f", +2389 => x"623a2020", +2390 => x"20202020", +2391 => x"20202020", +2392 => x"2025640a", +2393 => x"00000000", +2394 => x"43685f31", +2395 => x"5f476c6f", +2396 => x"623a2020", +2397 => x"20202020", +2398 => x"20202020", +2399 => x"2025630a", +2400 => x"00000000", +2401 => x"20202020", +2402 => x"20202020", +2403 => x"73686f75", +2404 => x"6c642062", +2405 => x"653a2020", +2406 => x"2025630a", +2407 => x"00000000", +2408 => x"43685f32", +2409 => x"5f476c6f", +2410 => x"623a2020", +2411 => x"20202020", +2412 => x"20202020", +2413 => x"2025630a", +2414 => x"00000000", +2415 => x"4172725f", +2416 => x"315f476c", +2417 => x"6f625b38", +2418 => x"5d3a2020", +2419 => x"20202020", +2420 => x"2025640a", +2421 => x"00000000", +2422 => x"4172725f", +2423 => x"325f476c", +2424 => x"6f625b38", +2425 => x"5d5b375d", +2426 => x"3a202020", +2427 => x"2025640a", +2428 => x"00000000", +2429 => x"20202020", +2430 => x"20202020", +2431 => x"73686f75", +2432 => x"6c642062", +2433 => x"653a2020", +2434 => x"204e756d", +2435 => x"6265725f", +2436 => x"4f665f52", +2437 => x"756e7320", +2438 => x"2b203130", +2439 => x"0a000000", +2440 => x"5074725f", +2441 => x"476c6f62", +2442 => x"2d3e0a00", +2443 => x"20205074", +2444 => x"725f436f", +2445 => x"6d703a20", +2446 => x"20202020", +2447 => x"20202020", +2448 => x"2025640a", +2449 => x"00000000", +2450 => x"20202020", +2451 => x"20202020", +2452 => x"73686f75", +2453 => x"6c642062", +2454 => x"653a2020", +2455 => x"2028696d", +2456 => x"706c656d", +2457 => x"656e7461", +2458 => x"74696f6e", +2459 => x"2d646570", +2460 => x"656e6465", +2461 => x"6e74290a", +2462 => x"00000000", +2463 => x"20204469", +2464 => x"7363723a", +2465 => x"20202020", +2466 => x"20202020", +2467 => x"20202020", +2468 => x"2025640a", +2469 => x"00000000", +2470 => x"2020456e", +2471 => x"756d5f43", +2472 => x"6f6d703a", +2473 => x"20202020", +2474 => x"20202020", +2475 => x"2025640a", +2476 => x"00000000", +2477 => x"2020496e", +2478 => x"745f436f", +2479 => x"6d703a20", +2480 => x"20202020", +2481 => x"20202020", +2482 => x"2025640a", +2483 => x"00000000", +2484 => x"20205374", +2485 => x"725f436f", +2486 => x"6d703a20", +2487 => x"20202020", +2488 => x"20202020", +2489 => x"2025730a", +2490 => x"00000000", +2491 => x"20202020", +2492 => x"20202020", +2493 => x"73686f75", +2494 => x"6c642062", +2495 => x"653a2020", +2496 => x"20444852", +2497 => x"5953544f", +2498 => x"4e452050", +2499 => x"524f4752", +2500 => x"414d2c20", +2501 => x"534f4d45", +2502 => x"20535452", +2503 => x"494e470a", +2504 => x"00000000", +2505 => x"4e657874", +2506 => x"5f507472", +2507 => x"5f476c6f", +2508 => x"622d3e0a", +2509 => x"00000000", +2510 => x"20202020", +2511 => x"20202020", +2512 => x"73686f75", +2513 => x"6c642062", +2514 => x"653a2020", +2515 => x"2028696d", +2516 => x"706c656d", +2517 => x"656e7461", +2518 => x"74696f6e", +2519 => x"2d646570", +2520 => x"656e6465", +2521 => x"6e74292c", +2522 => x"2073616d", +2523 => x"65206173", +2524 => x"2061626f", +2525 => x"76650a00", +2526 => x"496e745f", +2527 => x"315f4c6f", +2528 => x"633a2020", +2529 => x"20202020", +2530 => x"20202020", +2531 => x"2025640a", +2532 => x"00000000", +2533 => x"496e745f", +2534 => x"325f4c6f", +2535 => x"633a2020", +2536 => x"20202020", +2537 => x"20202020", +2538 => x"2025640a", +2539 => x"00000000", +2540 => x"496e745f", +2541 => x"335f4c6f", +2542 => x"633a2020", +2543 => x"20202020", +2544 => x"20202020", +2545 => x"2025640a", +2546 => x"00000000", +2547 => x"456e756d", +2548 => x"5f4c6f63", +2549 => x"3a202020", +2550 => x"20202020", +2551 => x"20202020", +2552 => x"2025640a", +2553 => x"00000000", +2554 => x"5374725f", +2555 => x"315f4c6f", +2556 => x"633a2020", +2557 => x"20202020", +2558 => x"20202020", +2559 => x"2025730a", +2560 => x"00000000", +2561 => x"20202020", +2562 => x"20202020", +2563 => x"73686f75", +2564 => x"6c642062", +2565 => x"653a2020", +2566 => x"20444852", +2567 => x"5953544f", +2568 => x"4e452050", +2569 => x"524f4752", +2570 => x"414d2c20", +2571 => x"31275354", +2572 => x"20535452", +2573 => x"494e470a", +2574 => x"00000000", +2575 => x"5374725f", +2576 => x"325f4c6f", +2577 => x"633a2020", +2578 => x"20202020", +2579 => x"20202020", +2580 => x"2025730a", +2581 => x"00000000", +2582 => x"20202020", +2583 => x"20202020", +2584 => x"73686f75", +2585 => x"6c642062", +2586 => x"653a2020", +2587 => x"20444852", +2588 => x"5953544f", +2589 => x"4e452050", +2590 => x"524f4752", +2591 => x"414d2c20", +2592 => x"32274e44", +2593 => x"20535452", +2594 => x"494e470a", +2595 => x"00000000", +2596 => x"55736572", +2597 => x"2074696d", +2598 => x"653a2025", +2599 => x"640a0000", +2600 => x"4d696372", +2601 => x"6f736563", +2602 => x"6f6e6473", +2603 => x"20666f72", +2604 => x"206f6e65", +2605 => x"2072756e", +2606 => x"20746872", +2607 => x"6f756768", +2608 => x"20446872", +2609 => x"7973746f", +2610 => x"6e653a20", +2611 => x"00000000", +2612 => x"2564200a", +2613 => x"00000000", +2614 => x"44687279", +2615 => x"73746f6e", +2616 => x"65732070", +2617 => x"65722053", +2618 => x"65636f6e", +2619 => x"643a2020", +2620 => x"20202020", +2621 => x"20202020", +2622 => x"20202020", +2623 => x"20202020", +2624 => x"20202020", +2625 => x"00000000", +2626 => x"56415820", +2627 => x"4d495053", +2628 => x"20726174", +2629 => x"696e6720", +2630 => x"2a203130", +2631 => x"3030203d", +2632 => x"20256420", +2633 => x"0a000000", +2634 => x"50726f67", +2635 => x"72616d20", +2636 => x"636f6d70", +2637 => x"696c6564", +2638 => x"20776974", +2639 => x"686f7574", +2640 => x"20277265", +2641 => x"67697374", +2642 => x"65722720", +2643 => x"61747472", +2644 => x"69627574", +2645 => x"650a0000", +2646 => x"4d656173", +2647 => x"75726564", +2648 => x"2074696d", +2649 => x"6520746f", +2650 => x"6f20736d", +2651 => x"616c6c20", +2652 => x"746f206f", +2653 => x"62746169", +2654 => x"6e206d65", +2655 => x"616e696e", +2656 => x"6766756c", +2657 => x"20726573", +2658 => x"756c7473", +2659 => x"0a000000", +2660 => x"506c6561", +2661 => x"73652069", +2662 => x"6e637265", +2663 => x"61736520", +2664 => x"6e756d62", +2665 => x"6572206f", +2666 => x"66207275", +2667 => x"6e730a00", +2668 => x"44485259", +2669 => x"53544f4e", +2670 => x"45205052", +2671 => x"4f475241", +2672 => x"4d2c2033", +2673 => x"27524420", +2674 => x"53545249", +2675 => x"4e470000", +2676 => x"00010202", +2677 => x"03030303", +2678 => x"04040404", +2679 => x"04040404", +2680 => x"05050505", +2681 => x"05050505", +2682 => x"05050505", +2683 => x"05050505", +2684 => x"06060606", +2685 => x"06060606", +2686 => x"06060606", +2687 => x"06060606", +2688 => x"06060606", +2689 => x"06060606", +2690 => x"06060606", +2691 => x"06060606", +2692 => x"07070707", +2693 => x"07070707", +2694 => x"07070707", +2695 => x"07070707", +2696 => x"07070707", +2697 => x"07070707", +2698 => x"07070707", +2699 => x"07070707", +2700 => x"07070707", +2701 => x"07070707", +2702 => x"07070707", +2703 => x"07070707", +2704 => x"07070707", +2705 => x"07070707", +2706 => x"07070707", +2707 => x"07070707", +2708 => x"08080808", +2709 => x"08080808", +2710 => x"08080808", +2711 => x"08080808", +2712 => x"08080808", +2713 => x"08080808", +2714 => x"08080808", +2715 => x"08080808", +2716 => x"08080808", +2717 => x"08080808", +2718 => x"08080808", +2719 => x"08080808", +2720 => x"08080808", +2721 => x"08080808", +2722 => x"08080808", +2723 => x"08080808", +2724 => x"08080808", +2725 => x"08080808", +2726 => x"08080808", +2727 => x"08080808", +2728 => x"08080808", +2729 => x"08080808", +2730 => x"08080808", +2731 => x"08080808", +2732 => x"08080808", +2733 => x"08080808", +2734 => x"08080808", +2735 => x"08080808", +2736 => x"08080808", +2737 => x"08080808", +2738 => x"08080808", +2739 => x"08080808", +2740 => x"43000000", +2741 => x"64756d6d", +2742 => x"792e6578", +2743 => x"65000000", +2744 => x"00ffffff", +2745 => x"ff00ffff", +2746 => x"ffff00ff", +2747 => x"ffffff00", +2748 => x"00000000", +2749 => x"00000000", +2750 => x"00000000", +2751 => x"000032dc", +2752 => x"0000c350", +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"ffffffff", +2767 => x"00000000", +2768 => x"00020000", +2769 => x"00000000", +2770 => x"00000000", +2771 => x"00002b44", +2772 => x"00002b44", +2773 => x"00002b4c", +2774 => x"00002b4c", +2775 => x"00002b54", +2776 => x"00002b54", +2777 => x"00002b5c", +2778 => x"00002b5c", +2779 => x"00002b64", +2780 => x"00002b64", +2781 => x"00002b6c", +2782 => x"00002b6c", +2783 => x"00002b74", +2784 => x"00002b74", +2785 => x"00002b7c", +2786 => x"00002b7c", +2787 => x"00002b84", +2788 => x"00002b84", +2789 => x"00002b8c", +2790 => x"00002b8c", +2791 => x"00002b94", +2792 => x"00002b94", +2793 => x"00002b9c", +2794 => x"00002b9c", +2795 => x"00002ba4", +2796 => x"00002ba4", +2797 => x"00002bac", +2798 => x"00002bac", +2799 => x"00002bb4", +2800 => x"00002bb4", +2801 => x"00002bbc", +2802 => x"00002bbc", +2803 => x"00002bc4", +2804 => x"00002bc4", +2805 => x"00002bcc", +2806 => x"00002bcc", +2807 => x"00002bd4", +2808 => x"00002bd4", +2809 => x"00002bdc", +2810 => x"00002bdc", +2811 => x"00002be4", +2812 => x"00002be4", +2813 => x"00002bec", +2814 => x"00002bec", +2815 => x"00002bf4", +2816 => x"00002bf4", +2817 => x"00002bfc", +2818 => x"00002bfc", +2819 => x"00002c04", +2820 => x"00002c04", +2821 => x"00002c0c", +2822 => x"00002c0c", +2823 => x"00002c14", +2824 => x"00002c14", +2825 => x"00002c1c", +2826 => x"00002c1c", +2827 => x"00002c24", +2828 => x"00002c24", +2829 => x"00002c2c", +2830 => x"00002c2c", +2831 => x"00002c34", +2832 => x"00002c34", +2833 => x"00002c3c", +2834 => x"00002c3c", +2835 => x"00002c44", +2836 => x"00002c44", +2837 => x"00002c4c", +2838 => x"00002c4c", +2839 => x"00002c54", +2840 => x"00002c54", +2841 => x"00002c5c", +2842 => x"00002c5c", +2843 => x"00002c64", +2844 => x"00002c64", +2845 => x"00002c6c", +2846 => x"00002c6c", +2847 => x"00002c74", +2848 => x"00002c74", +2849 => x"00002c7c", +2850 => x"00002c7c", +2851 => x"00002c84", +2852 => x"00002c84", +2853 => x"00002c8c", +2854 => x"00002c8c", +2855 => x"00002c94", +2856 => x"00002c94", +2857 => x"00002c9c", +2858 => x"00002c9c", +2859 => x"00002ca4", +2860 => x"00002ca4", +2861 => x"00002cac", +2862 => x"00002cac", +2863 => x"00002cb4", +2864 => x"00002cb4", +2865 => x"00002cbc", +2866 => x"00002cbc", +2867 => x"00002cc4", +2868 => x"00002cc4", +2869 => x"00002ccc", +2870 => x"00002ccc", +2871 => x"00002cd4", +2872 => x"00002cd4", +2873 => x"00002cdc", +2874 => x"00002cdc", +2875 => x"00002ce4", +2876 => x"00002ce4", +2877 => x"00002cec", +2878 => x"00002cec", +2879 => x"00002cf4", +2880 => x"00002cf4", +2881 => x"00002cfc", +2882 => x"00002cfc", +2883 => x"00002d04", +2884 => x"00002d04", +2885 => x"00002d0c", +2886 => x"00002d0c", +2887 => x"00002d14", +2888 => x"00002d14", +2889 => x"00002d1c", +2890 => x"00002d1c", +2891 => x"00002d24", +2892 => x"00002d24", +2893 => x"00002d2c", +2894 => x"00002d2c", +2895 => x"00002d34", +2896 => x"00002d34", +2897 => x"00002d3c", +2898 => x"00002d3c", +2899 => x"00002d44", +2900 => x"00002d44", +2901 => x"00002d4c", +2902 => x"00002d4c", +2903 => x"00002d54", +2904 => x"00002d54", +2905 => x"00002d5c", +2906 => x"00002d5c", +2907 => x"00002d64", +2908 => x"00002d64", +2909 => x"00002d6c", +2910 => x"00002d6c", +2911 => x"00002d74", +2912 => x"00002d74", +2913 => x"00002d7c", +2914 => x"00002d7c", +2915 => x"00002d84", +2916 => x"00002d84", +2917 => x"00002d8c", +2918 => x"00002d8c", +2919 => x"00002d94", +2920 => x"00002d94", +2921 => x"00002d9c", +2922 => x"00002d9c", +2923 => x"00002da4", +2924 => x"00002da4", +2925 => x"00002dac", +2926 => x"00002dac", +2927 => x"00002db4", +2928 => x"00002db4", +2929 => x"00002dbc", +2930 => x"00002dbc", +2931 => x"00002dc4", +2932 => x"00002dc4", +2933 => x"00002dcc", +2934 => x"00002dcc", +2935 => x"00002dd4", +2936 => x"00002dd4", +2937 => x"00002ddc", +2938 => x"00002ddc", +2939 => x"00002de4", +2940 => x"00002de4", +2941 => x"00002dec", +2942 => x"00002dec", +2943 => x"00002df4", +2944 => x"00002df4", +2945 => x"00002dfc", +2946 => x"00002dfc", +2947 => x"00002e04", +2948 => x"00002e04", +2949 => x"00002e0c", +2950 => x"00002e0c", +2951 => x"00002e14", +2952 => x"00002e14", +2953 => x"00002e1c", +2954 => x"00002e1c", +2955 => x"00002e24", +2956 => x"00002e24", +2957 => x"00002e2c", +2958 => x"00002e2c", +2959 => x"00002e34", +2960 => x"00002e34", +2961 => x"00002e3c", +2962 => x"00002e3c", +2963 => x"00002e44", +2964 => x"00002e44", +2965 => x"00002e4c", +2966 => x"00002e4c", +2967 => x"00002e54", +2968 => x"00002e54", +2969 => x"00002e5c", +2970 => x"00002e5c", +2971 => x"00002e64", +2972 => x"00002e64", +2973 => x"00002e6c", +2974 => x"00002e6c", +2975 => x"00002e74", +2976 => x"00002e74", +2977 => x"00002e7c", +2978 => x"00002e7c", +2979 => x"00002e84", +2980 => x"00002e84", +2981 => x"00002e8c", +2982 => x"00002e8c", +2983 => x"00002e94", +2984 => x"00002e94", +2985 => x"00002e9c", +2986 => x"00002e9c", +2987 => x"00002ea4", +2988 => x"00002ea4", +2989 => x"00002eac", +2990 => x"00002eac", +2991 => x"00002eb4", +2992 => x"00002eb4", +2993 => x"00002ebc", +2994 => x"00002ebc", +2995 => x"00002ec4", +2996 => x"00002ec4", +2997 => x"00002ecc", +2998 => x"00002ecc", +2999 => x"00002ed4", +3000 => x"00002ed4", +3001 => x"00002edc", +3002 => x"00002edc", +3003 => x"00002ee4", +3004 => x"00002ee4", +3005 => x"00002eec", +3006 => x"00002eec", +3007 => x"00002ef4", +3008 => x"00002ef4", +3009 => x"00002efc", +3010 => x"00002efc", +3011 => x"00002f04", +3012 => x"00002f04", +3013 => x"00002f0c", +3014 => x"00002f0c", +3015 => x"00002f14", +3016 => x"00002f14", +3017 => x"00002f1c", +3018 => x"00002f1c", +3019 => x"00002f24", +3020 => x"00002f24", +3021 => x"00002f2c", +3022 => x"00002f2c", +3023 => x"00002f34", +3024 => x"00002f34", +3025 => x"00002f3c", +3026 => x"00002f3c", +3027 => x"00002f50", +3028 => x"00000000", +3029 => x"000031b8", +3030 => x"00003214", +3031 => x"00003270", +3032 => x"00000000", +3033 => x"00000000", +3034 => x"00000000", +3035 => x"00000000", +3036 => x"00000000", +3037 => x"00000000", +3038 => x"00000000", +3039 => x"00000000", +3040 => x"00000000", +3041 => x"00002ad0", +3042 => x"00000000", +3043 => x"00000000", +3044 => x"00000000", +3045 => x"00000000", +3046 => x"00000000", +3047 => x"00000000", +3048 => x"00000000", +3049 => x"00000000", +3050 => x"00000000", +3051 => x"00000000", +3052 => x"00000000", +3053 => x"00000000", +3054 => x"00000000", +3055 => x"00000000", +3056 => x"00000000", +3057 => x"00000000", +3058 => x"00000000", +3059 => x"00000000", +3060 => x"00000000", +3061 => x"00000000", +3062 => x"00000000", +3063 => x"00000000", +3064 => x"00000000", +3065 => x"00000000", +3066 => x"00000000", +3067 => x"00000000", +3068 => x"00000000", +3069 => x"00000000", +3070 => x"00000001", +3071 => x"330eabcd", +3072 => x"1234e66d", +3073 => x"deec0005", +3074 => x"000b0000", +3075 => x"00000000", +3076 => x"00000000", +3077 => x"00000000", +3078 => x"00000000", +3079 => x"00000000", +3080 => x"00000000", +3081 => x"00000000", +3082 => x"00000000", +3083 => x"00000000", +3084 => x"00000000", +3085 => x"00000000", +3086 => x"00000000", +3087 => x"00000000", +3088 => x"00000000", +3089 => x"00000000", +3090 => x"00000000", +3091 => x"00000000", +3092 => x"00000000", +3093 => x"00000000", +3094 => x"00000000", +3095 => x"00000000", +3096 => x"00000000", +3097 => x"00000000", +3098 => x"00000000", +3099 => x"00000000", +3100 => x"00000000", +3101 => x"00000000", +3102 => x"00000000", +3103 => x"00000000", +3104 => x"00000000", +3105 => x"00000000", +3106 => x"00000000", +3107 => x"00000000", +3108 => x"00000000", +3109 => x"00000000", +3110 => x"00000000", +3111 => x"00000000", +3112 => x"00000000", +3113 => x"00000000", +3114 => x"00000000", +3115 => x"00000000", +3116 => x"00000000", +3117 => x"00000000", +3118 => x"00000000", +3119 => x"00000000", +3120 => x"00000000", +3121 => x"00000000", +3122 => x"00000000", +3123 => x"00000000", +3124 => x"00000000", +3125 => x"00000000", +3126 => x"00000000", +3127 => x"00000000", +3128 => x"00000000", +3129 => x"00000000", +3130 => x"00000000", +3131 => x"00000000", +3132 => x"00000000", +3133 => x"00000000", +3134 => x"00000000", +3135 => x"00000000", +3136 => x"00000000", +3137 => x"00000000", +3138 => x"00000000", +3139 => x"00000000", +3140 => x"00000000", +3141 => x"00000000", +3142 => x"00000000", +3143 => x"00000000", +3144 => x"00000000", +3145 => x"00000000", +3146 => x"00000000", +3147 => x"00000000", +3148 => x"00000000", +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"00000000", +3163 => x"00000000", +3164 => x"00000000", +3165 => x"00000000", +3166 => x"00000000", +3167 => x"00000000", +3168 => x"00000000", +3169 => x"00000000", +3170 => x"00000000", +3171 => x"00000000", +3172 => x"00000000", +3173 => x"00000000", +3174 => x"00000000", +3175 => x"00000000", +3176 => x"00000000", +3177 => x"00000000", +3178 => x"00000000", +3179 => x"00000000", +3180 => x"00000000", +3181 => x"00000000", +3182 => x"00000000", +3183 => x"00000000", +3184 => x"00000000", +3185 => x"00000000", +3186 => x"00000000", +3187 => x"00000000", +3188 => x"00000000", +3189 => x"00000000", +3190 => x"00000000", +3191 => x"00000000", +3192 => x"00000000", +3193 => x"00000000", +3194 => x"00000000", +3195 => x"00000000", +3196 => x"00000000", +3197 => x"00000000", +3198 => x"00000000", +3199 => x"00000000", +3200 => x"00000000", +3201 => x"00000000", +3202 => x"00000000", +3203 => x"00000000", +3204 => x"00000000", +3205 => x"00000000", +3206 => x"00000000", +3207 => x"00000000", +3208 => x"00000000", +3209 => x"00000000", +3210 => x"00000000", +3211 => x"00000000", +3212 => x"00000000", +3213 => x"00000000", +3214 => x"00000000", +3215 => x"00000000", +3216 => x"00000000", +3217 => x"00000000", +3218 => x"00000000", +3219 => x"00000000", +3220 => x"00000000", +3221 => x"00000000", +3222 => x"00000000", +3223 => x"00000000", +3224 => x"00000000", +3225 => x"00000000", +3226 => x"00000000", +3227 => x"00000000", +3228 => x"00000000", +3229 => x"00000000", +3230 => x"00000000", +3231 => x"00000000", +3232 => x"00000000", +3233 => x"00000000", +3234 => x"00000000", +3235 => x"00000000", +3236 => x"00000000", +3237 => x"00000000", +3238 => x"00000000", +3239 => x"00000000", +3240 => x"00000000", +3241 => x"00000000", +3242 => x"00000000", +3243 => x"00000000", +3244 => x"00000000", +3245 => x"00000000", +3246 => x"00000000", +3247 => x"00000000", +3248 => x"00000000", +3249 => x"00000000", +3250 => x"00000000", +3251 => x"00002ad4", +3252 => x"ffffffff", +3253 => x"00000000", +3254 => x"ffffffff", +3255 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; + end if; + if (mem_readEnable = '1') then + mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); + end if; + end if; +end process; + + + + +end dram_arch; diff --git a/zpu/hdl/example_medium/dram_hello.vhd b/zpu/hdl/example_medium/dram_hello.vhd new file mode 100644 index 0000000..4f02cca --- /dev/null +++ b/zpu/hdl/example_medium/dram_hello.vhd @@ -0,0 +1,3107 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80cfd80c", +3 => x"3a0b0b80", +4 => x"c6d00400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c7972d", +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"0b0b80cf", +162 => x"c4738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8b", +171 => x"9f2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8b", +179 => x"e32d5050", +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"80cfd40c", +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"82c53f80", +257 => x"c6d93f04", +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"fe3d0d0b", +281 => x"0b80dfc0", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c0085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"d408802e", +299 => x"a43880cf", +300 => x"d808822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc00c", +304 => x"82a0800b", +305 => x"80dfc40c", +306 => x"8290800b", +307 => x"80dfc80c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc0", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfc40cf8", +314 => x"80808480", +315 => x"0b80dfc8", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c00c80c0", +320 => x"a880940b", +321 => x"80dfc40c", +322 => x"0b0b80cf", +323 => x"8c0b80df", +324 => x"c80c0470", +325 => x"7080dfcc", +326 => x"335170a7", +327 => x"3880cfe0", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe00c", +332 => x"702d80cf", +333 => x"e0087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfcc3450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"bc08802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfbc510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"fe3d0d89", +349 => x"5380cf90", +350 => x"5182c13f", +351 => x"80cfa051", +352 => x"82ba3f81", +353 => x"0a0b80df", +354 => x"d80cff0b", +355 => x"80dfdc0c", +356 => x"ff135372", +357 => x"8025de38", +358 => x"72800c84", +359 => x"3d0d04fb", +360 => x"3d0d7779", +361 => x"55558056", +362 => x"757524ab", +363 => x"38807424", +364 => x"9d388053", +365 => x"73527451", +366 => x"80e13f80", +367 => x"08547580", +368 => x"2e853880", +369 => x"08305473", +370 => x"800c873d", +371 => x"0d047330", +372 => x"76813257", +373 => x"54dc3974", +374 => x"30558156", +375 => x"738025d2", +376 => x"38ec39fa", +377 => x"3d0d787a", +378 => x"57558057", +379 => x"767524a4", +380 => x"38759f2c", +381 => x"54815375", +382 => x"74327431", +383 => x"5274519b", +384 => x"3f800854", +385 => x"76802e85", +386 => x"38800830", +387 => x"5473800c", +388 => x"883d0d04", +389 => x"74305581", +390 => x"57d739fc", +391 => x"3d0d7678", +392 => x"53548153", +393 => x"80747326", +394 => x"52557280", +395 => x"2e983870", +396 => x"802eab38", +397 => x"807224a6", +398 => x"38711073", +399 => x"10757226", +400 => x"53545272", +401 => x"ea387351", +402 => x"78833874", +403 => x"5170800c", +404 => x"863d0d04", +405 => x"720a100a", +406 => x"720a100a", +407 => x"53537280", +408 => x"2ee43871", +409 => x"7426ed38", +410 => x"73723175", +411 => x"7407740a", +412 => x"100a740a", +413 => x"100a5555", +414 => x"5654e339", +415 => x"f73d0d7c", +416 => x"70525380", +417 => x"f93f7254", +418 => x"80085580", +419 => x"cfb05681", +420 => x"57800881", +421 => x"055a8b3d", +422 => x"e4115953", +423 => x"8259f413", +424 => x"527b8811", +425 => x"08525381", +426 => x"b23f8008", +427 => x"30708008", +428 => x"079f2c8a", +429 => x"07800c53", +430 => x"8b3d0d04", +431 => x"f63d0d7c", +432 => x"80cfe408", +433 => x"71535553", +434 => x"b53f7255", +435 => x"80085680", +436 => x"cfb05781", +437 => x"58800881", +438 => x"055b8c3d", +439 => x"e4115a53", +440 => x"825af413", +441 => x"52881408", +442 => x"5180f03f", +443 => x"80083070", +444 => x"8008079f", +445 => x"2c8a0780", +446 => x"0c548c3d", +447 => x"0d047070", +448 => x"70707570", +449 => x"71830653", +450 => x"555270b4", +451 => x"38717008", +452 => x"7009f7fb", +453 => x"fdff1206", +454 => x"f8848281", +455 => x"80065452", +456 => x"53719b38", +457 => x"84137008", +458 => x"7009f7fb", +459 => x"fdff1206", +460 => x"f8848281", +461 => x"80065452", +462 => x"5371802e", +463 => x"e7387252", +464 => x"71335372", +465 => x"802e8a38", +466 => x"81127033", +467 => x"545272f8", +468 => x"38717431", +469 => x"800c5050", +470 => x"505004f2", +471 => x"3d0d6062", +472 => x"88110870", +473 => x"58565f5a", +474 => x"73802e81", +475 => x"8c388c1a", +476 => x"2270832a", +477 => x"81328106", +478 => x"56587486", +479 => x"38901a08", +480 => x"91387951", +481 => x"90b73fff", +482 => x"55800880", +483 => x"ec388c1a", +484 => x"22587d08", +485 => x"55807883", +486 => x"ffff0670", +487 => x"0a100a81", +488 => x"06415c57", +489 => x"7e772e80", +490 => x"d7387690", +491 => x"38740884", +492 => x"16088817", +493 => x"57585676", +494 => x"802ef238", +495 => x"76548880", +496 => x"77278438", +497 => x"88805473", +498 => x"5375529c", +499 => x"1a0851a4", +500 => x"1a085877", +501 => x"2d800b80", +502 => x"082582e0", +503 => x"38800816", +504 => x"77800831", +505 => x"7f880508", +506 => x"80083170", +507 => x"6188050c", +508 => x"5b585678", +509 => x"ffb43880", +510 => x"5574800c", +511 => x"903d0d04", +512 => x"7a813281", +513 => x"06774056", +514 => x"75802e81", +515 => x"bd387690", +516 => x"38740884", +517 => x"16088817", +518 => x"57585976", +519 => x"802ef238", +520 => x"881a0878", +521 => x"83ffff06", +522 => x"70892a81", +523 => x"06565956", +524 => x"73802e82", +525 => x"f8387577", +526 => x"278b3877", +527 => x"872a8106", +528 => x"5c7b82b5", +529 => x"38767627", +530 => x"83387656", +531 => x"75537852", +532 => x"79085185", +533 => x"833f881a", +534 => x"08763188", +535 => x"1b0c7908", +536 => x"167a0c76", +537 => x"56751977", +538 => x"77317f88", +539 => x"05087831", +540 => x"70618805", +541 => x"0c415859", +542 => x"7e802efe", +543 => x"fa388c1a", +544 => x"2258ff8a", +545 => x"39787954", +546 => x"7c537b52", +547 => x"5684c93f", +548 => x"881a0879", +549 => x"31881b0c", +550 => x"7908197a", +551 => x"0c7c7631", +552 => x"5d7c8e38", +553 => x"79518ff2", +554 => x"3f800881", +555 => x"8f388008", +556 => x"5f751c77", +557 => x"77317f88", +558 => x"05087831", +559 => x"70618805", +560 => x"0c5d585c", +561 => x"7a802efe", +562 => x"ae387681", +563 => x"83387408", +564 => x"84160888", +565 => x"1757585c", +566 => x"76802ef2", +567 => x"3876538a", +568 => x"527b5182", +569 => x"d33f8008", +570 => x"7c318105", +571 => x"5d800884", +572 => x"3881175d", +573 => x"815f7c59", +574 => x"767d2783", +575 => x"38765994", +576 => x"1a08881b", +577 => x"08115758", +578 => x"807a085c", +579 => x"54901a08", +580 => x"7b278338", +581 => x"81547579", +582 => x"25843873", +583 => x"ba387779", +584 => x"24fee238", +585 => x"77537b52", +586 => x"9c1a0851", +587 => x"a41a0859", +588 => x"782d8008", +589 => x"56800880", +590 => x"24fee238", +591 => x"8c1a2280", +592 => x"c0075e7d", +593 => x"8c1b23ff", +594 => x"5574800c", +595 => x"903d0d04", +596 => x"7effa338", +597 => x"ff873975", +598 => x"537b527a", +599 => x"5182f93f", +600 => x"7908167a", +601 => x"0c79518e", +602 => x"b13f8008", +603 => x"cf387c76", +604 => x"315d7cfe", +605 => x"bc38feac", +606 => x"39901a08", +607 => x"7a087131", +608 => x"78117056", +609 => x"5a575280", +610 => x"cfe40851", +611 => x"84943f80", +612 => x"08802eff", +613 => x"a7388008", +614 => x"901b0c80", +615 => x"08167a0c", +616 => x"77941b0c", +617 => x"76881b0c", +618 => x"7656fd99", +619 => x"39790858", +620 => x"901a0878", +621 => x"27833881", +622 => x"54757727", +623 => x"843873b3", +624 => x"38941a08", +625 => x"54737726", +626 => x"80d33873", +627 => x"5378529c", +628 => x"1a0851a4", +629 => x"1a085877", +630 => x"2d800856", +631 => x"80088024", +632 => x"fd83388c", +633 => x"1a2280c0", +634 => x"075e7d8c", +635 => x"1b23ff55", +636 => x"fed73975", +637 => x"53785277", +638 => x"5181dd3f", +639 => x"7908167a", +640 => x"0c79518d", +641 => x"953f8008", +642 => x"802efcd9", +643 => x"388c1a22", +644 => x"80c0075e", +645 => x"7d8c1b23", +646 => x"ff55fead", +647 => x"39767754", +648 => x"79537852", +649 => x"5681b13f", +650 => x"881a0877", +651 => x"31881b0c", +652 => x"7908177a", +653 => x"0cfcae39", +654 => x"fa3d0d7a", +655 => x"79028805", +656 => x"a7053355", +657 => x"53548374", +658 => x"2780df38", +659 => x"71830651", +660 => x"7080d738", +661 => x"71715755", +662 => x"83517582", +663 => x"802913ff", +664 => x"12525670", +665 => x"8025f338", +666 => x"837427bc", +667 => x"38740876", +668 => x"327009f7", +669 => x"fbfdff12", +670 => x"06f88482", +671 => x"81800651", +672 => x"5170802e", +673 => x"98387451", +674 => x"80527033", +675 => x"5772772e", +676 => x"b9388111", +677 => x"81135351", +678 => x"837227ee", +679 => x"38fc1484", +680 => x"16565473", +681 => x"8326c638", +682 => x"7452ff14", +683 => x"5170ff2e", +684 => x"97387133", +685 => x"5472742e", +686 => x"98388112", +687 => x"ff125252", +688 => x"70ff2e09", +689 => x"8106eb38", +690 => x"80517080", +691 => x"0c883d0d", +692 => x"0471800c", +693 => x"883d0d04", +694 => x"fa3d0d78", +695 => x"7a7c7272", +696 => x"72595755", +697 => x"58565774", +698 => x"7727b238", +699 => x"75155176", +700 => x"7127aa38", +701 => x"707618ff", +702 => x"18535353", +703 => x"70ff2e96", +704 => x"38ff12ff", +705 => x"14545272", +706 => x"337234ff", +707 => x"115170ff", +708 => x"2e098106", +709 => x"ec387680", +710 => x"0c883d0d", +711 => x"048f7627", +712 => x"80e63874", +713 => x"77078306", +714 => x"517080dc", +715 => x"38767552", +716 => x"53707084", +717 => x"05520873", +718 => x"70840555", +719 => x"0c727170", +720 => x"84055308", +721 => x"71708405", +722 => x"530c7170", +723 => x"84055308", +724 => x"71708405", +725 => x"530c7170", +726 => x"84055308", +727 => x"71708405", +728 => x"530cf015", +729 => x"5553738f", +730 => x"26c73883", +731 => x"74279538", +732 => x"70708405", +733 => x"52087370", +734 => x"8405550c", +735 => x"fc145473", +736 => x"8326ed38", +737 => x"72715452", +738 => x"ff145170", +739 => x"ff2eff86", +740 => x"38727081", +741 => x"05543372", +742 => x"70810554", +743 => x"34ff1151", +744 => x"ea39ef3d", +745 => x"0d636567", +746 => x"405d427b", +747 => x"802e8582", +748 => x"386151a9", +749 => x"e73ff81c", +750 => x"70841208", +751 => x"70fc0670", +752 => x"628b0570", +753 => x"f8064159", +754 => x"455c5f41", +755 => x"57967427", +756 => x"82c53880", +757 => x"7b247e7c", +758 => x"26075880", +759 => x"5477742e", +760 => x"09810682", +761 => x"ab38787b", +762 => x"2581fe38", +763 => x"781780d7", +764 => x"a00b8805", +765 => x"085b5679", +766 => x"762e84c5", +767 => x"38841608", +768 => x"70fe0617", +769 => x"84110881", +770 => x"06415555", +771 => x"7e828d38", +772 => x"74fc0658", +773 => x"79762e84", +774 => x"e3387818", +775 => x"5f7e7b25", +776 => x"81ff387c", +777 => x"81065473", +778 => x"82c13876", +779 => x"77083184", +780 => x"1108fc06", +781 => x"56577580", +782 => x"2e913879", +783 => x"762e84f0", +784 => x"38741819", +785 => x"58777b25", +786 => x"84913876", +787 => x"802e829b", +788 => x"38781556", +789 => x"7a762482", +790 => x"92388c17", +791 => x"08881808", +792 => x"718c120c", +793 => x"88120c5e", +794 => x"75598817", +795 => x"61fc055b", +796 => x"5679a426", +797 => x"85ff387b", +798 => x"76595593", +799 => x"7a2780c9", +800 => x"387b7084", +801 => x"055d087c", +802 => x"56760c74", +803 => x"70840556", +804 => x"088c180c", +805 => x"9017589b", +806 => x"7a27ae38", +807 => x"74708405", +808 => x"5608780c", +809 => x"74708405", +810 => x"56089418", +811 => x"0c981758", +812 => x"a37a2795", +813 => x"38747084", +814 => x"05560878", +815 => x"0c747084", +816 => x"0556089c", +817 => x"180ca017", +818 => x"58747084", +819 => x"05560875", +820 => x"5f787084", +821 => x"055a0c77", +822 => x"7e708405", +823 => x"40087170", +824 => x"8405530c", +825 => x"7e08710c", +826 => x"5d787b31", +827 => x"56758f26", +828 => x"80c93884", +829 => x"17088106", +830 => x"79078418", +831 => x"0c781784", +832 => x"11088107", +833 => x"84120c5b", +834 => x"6151a791", +835 => x"3f881754", +836 => x"73800c93", +837 => x"3d0d0490", +838 => x"5bfdb839", +839 => x"7756fe83", +840 => x"398c1608", +841 => x"88170871", +842 => x"8c120c88", +843 => x"120c587e", +844 => x"707c3157", +845 => x"598f7627", +846 => x"ffb9387a", +847 => x"17841808", +848 => x"81067c07", +849 => x"84190c76", +850 => x"81078412", +851 => x"0c761184", +852 => x"11088107", +853 => x"84120c5b", +854 => x"88055261", +855 => x"518fda3f", +856 => x"6151a6b9", +857 => x"3f881754", +858 => x"ffa6397d", +859 => x"52615197", +860 => x"d73f8008", +861 => x"5a800880", +862 => x"2e81ab38", +863 => x"8008f805", +864 => x"60840508", +865 => x"fe066105", +866 => x"58557477", +867 => x"2e83f238", +868 => x"fc195877", +869 => x"a42681b0", +870 => x"387b8008", +871 => x"56579378", +872 => x"2780dc38", +873 => x"7b707084", +874 => x"05520880", +875 => x"08708405", +876 => x"800c0c80", +877 => x"08717084", +878 => x"0553085d", +879 => x"567b7670", +880 => x"8405580c", +881 => x"579b7827", +882 => x"b6387670", +883 => x"84055808", +884 => x"75708405", +885 => x"570c7670", +886 => x"84055808", +887 => x"75708405", +888 => x"570ca378", +889 => x"27993876", +890 => x"70840558", +891 => x"08757084", +892 => x"05570c76", +893 => x"70840558", +894 => x"08757084", +895 => x"05570c76", +896 => x"70840558", +897 => x"08775e75", +898 => x"70840557", +899 => x"0c747d70", +900 => x"84055f08", +901 => x"71708405", +902 => x"530c7d08", +903 => x"710c5f7b", +904 => x"5261518e", +905 => x"943f6151", +906 => x"a4f33f79", +907 => x"800c933d", +908 => x"0d047d52", +909 => x"61519690", +910 => x"3f800880", +911 => x"0c933d0d", +912 => x"04841608", +913 => x"55fbc939", +914 => x"77537b52", +915 => x"800851a2", +916 => x"a53f7b52", +917 => x"61518de1", +918 => x"3fcc398c", +919 => x"16088817", +920 => x"08718c12", +921 => x"0c88120c", +922 => x"5d8c1708", +923 => x"88180871", +924 => x"8c120c88", +925 => x"120c5977", +926 => x"59fbef39", +927 => x"7818901c", +928 => x"40557e75", +929 => x"24fb9c38", +930 => x"7a177080", +931 => x"d7a00b88", +932 => x"050c757c", +933 => x"31810784", +934 => x"120c5684", +935 => x"17088106", +936 => x"7b078418", +937 => x"0c6151a3", +938 => x"f43f8817", +939 => x"54fce139", +940 => x"74181990", +941 => x"1c5e5a7c", +942 => x"7a24fb8f", +943 => x"388c1708", +944 => x"88180871", +945 => x"8c120c88", +946 => x"120c5e88", +947 => x"1761fc05", +948 => x"575975a4", +949 => x"2681b638", +950 => x"7b795955", +951 => x"93762780", +952 => x"c9387b70", +953 => x"84055d08", +954 => x"7c56790c", +955 => x"74708405", +956 => x"56088c18", +957 => x"0c901758", +958 => x"9b7627ae", +959 => x"38747084", +960 => x"05560878", +961 => x"0c747084", +962 => x"05560894", +963 => x"180c9817", +964 => x"58a37627", +965 => x"95387470", +966 => x"84055608", +967 => x"780c7470", +968 => x"84055608", +969 => x"9c180ca0", +970 => x"17587470", +971 => x"84055608", +972 => x"75417870", +973 => x"84055a0c", +974 => x"77607084", +975 => x"05420871", +976 => x"70840553", +977 => x"0c600871", +978 => x"0c5e7a17", +979 => x"7080d7a0", +980 => x"0b88050c", +981 => x"7a7c3181", +982 => x"0784120c", +983 => x"58841708", +984 => x"81067b07", +985 => x"84180c61", +986 => x"51a2b23f", +987 => x"78547380", +988 => x"0c933d0d", +989 => x"0479537b", +990 => x"5275519f", +991 => x"f93ffae9", +992 => x"39841508", +993 => x"fc061960", +994 => x"5859fadd", +995 => x"3975537b", +996 => x"5278519f", +997 => x"e13f7a17", +998 => x"7080d7a0", +999 => x"0b88050c", +1000 => x"7a7c3181", +1001 => x"0784120c", +1002 => x"58841708", +1003 => x"81067b07", +1004 => x"84180c61", +1005 => x"51a1e63f", +1006 => x"7854ffb2", +1007 => x"39fa3d0d", +1008 => x"7880cfe4", +1009 => x"085455b8", +1010 => x"1308802e", +1011 => x"81af388c", +1012 => x"15227083", +1013 => x"ffff0670", +1014 => x"832a8132", +1015 => x"81065555", +1016 => x"5672802e", +1017 => x"80da3873", +1018 => x"842a8132", +1019 => x"810657ff", +1020 => x"537680f2", +1021 => x"3873822a", +1022 => x"81065473", +1023 => x"802eb938", +1024 => x"b0150854", +1025 => x"73802e9c", +1026 => x"3880c015", +1027 => x"5373732e", +1028 => x"8f387352", +1029 => x"80cfe408", +1030 => x"518a9e3f", +1031 => x"8c152256", +1032 => x"76b0160c", +1033 => x"75db0657", +1034 => x"768c1623", +1035 => x"800b8416", +1036 => x"0c901508", +1037 => x"750c7656", +1038 => x"75880754", +1039 => x"738c1623", +1040 => x"90150880", +1041 => x"2ebf388c", +1042 => x"15227081", +1043 => x"06555373", +1044 => x"9c38720a", +1045 => x"100a8106", +1046 => x"56758538", +1047 => x"94150854", +1048 => x"7388160c", +1049 => x"80537280", +1050 => x"0c883d0d", +1051 => x"04800b88", +1052 => x"160c9415", +1053 => x"08309816", +1054 => x"0c8053ea", +1055 => x"39725182", +1056 => x"a63ffecb", +1057 => x"3974518f", +1058 => x"bc3f8c15", +1059 => x"22708106", +1060 => x"55537380", +1061 => x"2effbb38", +1062 => x"d439f83d", +1063 => x"0d7a5776", +1064 => x"802e8197", +1065 => x"3880cfe4", +1066 => x"0854b814", +1067 => x"08802e80", +1068 => x"eb388c17", +1069 => x"2270902b", +1070 => x"70902c70", +1071 => x"832a8132", +1072 => x"81065b5b", +1073 => x"57557780", +1074 => x"cb389017", +1075 => x"08567580", +1076 => x"2e80c138", +1077 => x"76087631", +1078 => x"76780c79", +1079 => x"83065555", +1080 => x"73853894", +1081 => x"17085877", +1082 => x"88180c80", +1083 => x"7525a538", +1084 => x"74537552", +1085 => x"9c170851", +1086 => x"a4170854", +1087 => x"732d800b", +1088 => x"80082580", +1089 => x"c9388008", +1090 => x"16758008", +1091 => x"31565674", +1092 => x"8024dd38", +1093 => x"800b800c", +1094 => x"8a3d0d04", +1095 => x"73518187", +1096 => x"3f8c1722", +1097 => x"70902b70", +1098 => x"902c7083", +1099 => x"2a813281", +1100 => x"065b5b57", +1101 => x"5577dd38", +1102 => x"ff9039a1", +1103 => x"9a5280cf", +1104 => x"e408518c", +1105 => x"d03f8008", +1106 => x"800c8a3d", +1107 => x"0d048c17", +1108 => x"2280c007", +1109 => x"58778c18", +1110 => x"23ff0b80", +1111 => x"0c8a3d0d", +1112 => x"04fa3d0d", +1113 => x"797080dc", +1114 => x"298c1154", +1115 => x"7a535657", +1116 => x"8fd63f80", +1117 => x"08800855", +1118 => x"56800880", +1119 => x"2ea23880", +1120 => x"088c0554", +1121 => x"800b8008", +1122 => x"0c768008", +1123 => x"84050c73", +1124 => x"80088805", +1125 => x"0c745380", +1126 => x"5273519c", +1127 => x"f53f7554", +1128 => x"73800c88", +1129 => x"3d0d0470", +1130 => x"707074a8", +1131 => x"e60bbc12", +1132 => x"0c53810b", +1133 => x"b8140c80", +1134 => x"0b84dc14", +1135 => x"0c830b84", +1136 => x"e0140c84", +1137 => x"e81384e4", +1138 => x"140c8413", +1139 => x"08518070", +1140 => x"720c7084", +1141 => x"130c7088", +1142 => x"130c5284", +1143 => x"0b8c1223", +1144 => x"718e1223", +1145 => x"7190120c", +1146 => x"7194120c", +1147 => x"7198120c", +1148 => x"709c120c", +1149 => x"80c1d50b", +1150 => x"a0120c80", +1151 => x"c2a10ba4", +1152 => x"120c80c3", +1153 => x"9d0ba812", +1154 => x"0c80c3ee", +1155 => x"0bac120c", +1156 => x"88130872", +1157 => x"710c7284", +1158 => x"120c7288", +1159 => x"120c5189", +1160 => x"0b8c1223", +1161 => x"810b8e12", +1162 => x"23719012", +1163 => x"0c719412", +1164 => x"0c719812", +1165 => x"0c709c12", +1166 => x"0c80c1d5", +1167 => x"0ba0120c", +1168 => x"80c2a10b", +1169 => x"a4120c80", +1170 => x"c39d0ba8", +1171 => x"120c80c3", +1172 => x"ee0bac12", +1173 => x"0c8c1308", +1174 => x"72710c72", +1175 => x"84120c72", +1176 => x"88120c51", +1177 => x"8a0b8c12", +1178 => x"23820b8e", +1179 => x"12237190", +1180 => x"120c7194", +1181 => x"120c7198", +1182 => x"120c709c", +1183 => x"120c80c1", +1184 => x"d50ba012", +1185 => x"0c80c2a1", +1186 => x"0ba4120c", +1187 => x"80c39d0b", +1188 => x"a8120c80", +1189 => x"c3ee0bac", +1190 => x"120c5050", +1191 => x"5004f83d", +1192 => x"0d7a80cf", +1193 => x"e408b811", +1194 => x"08575758", +1195 => x"7481ec38", +1196 => x"a8e60bbc", +1197 => x"170c810b", +1198 => x"b8170c74", +1199 => x"84dc170c", +1200 => x"830b84e0", +1201 => x"170c84e8", +1202 => x"1684e417", +1203 => x"0c841608", +1204 => x"75710c75", +1205 => x"84120c75", +1206 => x"88120c59", +1207 => x"840b8c1a", +1208 => x"23748e1a", +1209 => x"2374901a", +1210 => x"0c74941a", +1211 => x"0c74981a", +1212 => x"0c789c1a", +1213 => x"0c80c1d5", +1214 => x"0ba01a0c", +1215 => x"80c2a10b", +1216 => x"a41a0c80", +1217 => x"c39d0ba8", +1218 => x"1a0c80c3", +1219 => x"ee0bac1a", +1220 => x"0c881608", +1221 => x"75710c75", +1222 => x"84120c75", +1223 => x"88120c57", +1224 => x"890b8c18", +1225 => x"23810b8e", +1226 => x"18237490", +1227 => x"180c7494", +1228 => x"180c7498", +1229 => x"180c769c", +1230 => x"180c80c1", +1231 => x"d50ba018", +1232 => x"0c80c2a1", +1233 => x"0ba4180c", +1234 => x"80c39d0b", +1235 => x"a8180c80", +1236 => x"c3ee0bac", +1237 => x"180c8c16", +1238 => x"0875710c", +1239 => x"7584120c", +1240 => x"7588120c", +1241 => x"548a0b8c", +1242 => x"1523820b", +1243 => x"8e152374", +1244 => x"90150c74", +1245 => x"94150c74", +1246 => x"98150c73", +1247 => x"9c150c80", +1248 => x"c1d50ba0", +1249 => x"150c80c2", +1250 => x"a10ba415", +1251 => x"0c80c39d", +1252 => x"0ba8150c", +1253 => x"80c3ee0b", +1254 => x"ac150c84", +1255 => x"dc168811", +1256 => x"08841208", +1257 => x"ff055757", +1258 => x"57807524", +1259 => x"9f388c16", +1260 => x"2270902b", +1261 => x"70902c51", +1262 => x"55597380", +1263 => x"2e80ed38", +1264 => x"80dc16ff", +1265 => x"16565674", +1266 => x"8025e338", +1267 => x"76085574", +1268 => x"802e8f38", +1269 => x"74881108", +1270 => x"841208ff", +1271 => x"05575757", +1272 => x"c83982fc", +1273 => x"5277518a", +1274 => x"df3f8008", +1275 => x"80085556", +1276 => x"8008802e", +1277 => x"a3388008", +1278 => x"8c057580", +1279 => x"080c5484", +1280 => x"0b800884", +1281 => x"050c7380", +1282 => x"0888050c", +1283 => x"82f05374", +1284 => x"52735197", +1285 => x"fd3f7554", +1286 => x"7374780c", +1287 => x"5573ffb4", +1288 => x"388c780c", +1289 => x"800b800c", +1290 => x"8a3d0d04", +1291 => x"810b8c17", +1292 => x"2373760c", +1293 => x"7388170c", +1294 => x"7384170c", +1295 => x"7390170c", +1296 => x"7394170c", +1297 => x"7398170c", +1298 => x"ff0b8e17", +1299 => x"2373b017", +1300 => x"0c73b417", +1301 => x"0c7380c4", +1302 => x"170c7380", +1303 => x"c8170c75", +1304 => x"800c8a3d", +1305 => x"0d047070", +1306 => x"a19a5273", +1307 => x"5186a63f", +1308 => x"50500470", +1309 => x"70a19a52", +1310 => x"80cfe408", +1311 => x"5186963f", +1312 => x"505004fb", +1313 => x"3d0d7770", +1314 => x"52569890", +1315 => x"3f80d7a0", +1316 => x"0b880508", +1317 => x"841108fc", +1318 => x"06707b31", +1319 => x"9fef05e0", +1320 => x"8006e080", +1321 => x"05525555", +1322 => x"a0807524", +1323 => x"94388052", +1324 => x"755197ea", +1325 => x"3f80d7a8", +1326 => x"08145372", +1327 => x"80082e8f", +1328 => x"38755197", +1329 => x"d83f8053", +1330 => x"72800c87", +1331 => x"3d0d0474", +1332 => x"30527551", +1333 => x"97c83f80", +1334 => x"08ff2ea8", +1335 => x"3880d7a0", +1336 => x"0b880508", +1337 => x"74763181", +1338 => x"0784120c", +1339 => x"5380d6e4", +1340 => x"08753180", +1341 => x"d6e40c75", +1342 => x"5197a23f", +1343 => x"810b800c", +1344 => x"873d0d04", +1345 => x"80527551", +1346 => x"97943f80", +1347 => x"d7a00b88", +1348 => x"05088008", +1349 => x"71315454", +1350 => x"8f7325ff", +1351 => x"a4388008", +1352 => x"80d79408", +1353 => x"3180d6e4", +1354 => x"0c728107", +1355 => x"84150c75", +1356 => x"5196ea3f", +1357 => x"8053ff90", +1358 => x"39f73d0d", +1359 => x"7b7d545a", +1360 => x"72802e82", +1361 => x"83387951", +1362 => x"96d23ff8", +1363 => x"13841108", +1364 => x"70fe0670", +1365 => x"13841108", +1366 => x"fc065c57", +1367 => x"58545780", +1368 => x"d7a80874", +1369 => x"2e82de38", +1370 => x"7784150c", +1371 => x"80738106", +1372 => x"56597479", +1373 => x"2e81d538", +1374 => x"77148411", +1375 => x"08810656", +1376 => x"5374a038", +1377 => x"77165678", +1378 => x"81e63888", +1379 => x"14085574", +1380 => x"80d7a82e", +1381 => x"82f9388c", +1382 => x"1408708c", +1383 => x"170c7588", +1384 => x"120c5875", +1385 => x"81078418", +1386 => x"0c751776", +1387 => x"710c5478", +1388 => x"81913883", +1389 => x"ff762781", +1390 => x"c8387589", +1391 => x"2a76832a", +1392 => x"54547380", +1393 => x"2ebf3875", +1394 => x"862ab805", +1395 => x"53847427", +1396 => x"b43880db", +1397 => x"14539474", +1398 => x"27ab3875", +1399 => x"8c2a80ee", +1400 => x"055380d4", +1401 => x"74279e38", +1402 => x"758f2a80", +1403 => x"f7055382", +1404 => x"d4742791", +1405 => x"3875922a", +1406 => x"80fc0553", +1407 => x"8ad47427", +1408 => x"843880fe", +1409 => x"53721010", +1410 => x"1080d7a0", +1411 => x"05881108", +1412 => x"55557375", +1413 => x"2e82bf38", +1414 => x"841408fc", +1415 => x"06597579", +1416 => x"278d3888", +1417 => x"14085473", +1418 => x"752e0981", +1419 => x"06ea388c", +1420 => x"1408708c", +1421 => x"190c7488", +1422 => x"190c7788", +1423 => x"120c5576", +1424 => x"8c150c79", +1425 => x"5194d63f", +1426 => x"8b3d0d04", +1427 => x"76087771", +1428 => x"31587605", +1429 => x"88180856", +1430 => x"567480d7", +1431 => x"a82e80e0", +1432 => x"388c1708", +1433 => x"708c170c", +1434 => x"7588120c", +1435 => x"53fe8939", +1436 => x"8814088c", +1437 => x"1508708c", +1438 => x"130c5988", +1439 => x"190cfea3", +1440 => x"3975832a", +1441 => x"70545480", +1442 => x"74248198", +1443 => x"3872822c", +1444 => x"81712b80", +1445 => x"d7a40807", +1446 => x"80d7a00b", +1447 => x"84050c74", +1448 => x"10101080", +1449 => x"d7a00588", +1450 => x"1108718c", +1451 => x"1b0c7088", +1452 => x"1b0c7988", +1453 => x"130c565a", +1454 => x"55768c15", +1455 => x"0cff8439", +1456 => x"8159fdb4", +1457 => x"39771673", +1458 => x"81065455", +1459 => x"72983876", +1460 => x"08777131", +1461 => x"5875058c", +1462 => x"18088819", +1463 => x"08718c12", +1464 => x"0c88120c", +1465 => x"55557481", +1466 => x"0784180c", +1467 => x"7680d7a0", +1468 => x"0b88050c", +1469 => x"80d79c08", +1470 => x"7526fec7", +1471 => x"3880d798", +1472 => x"08527951", +1473 => x"fafd3f79", +1474 => x"5193923f", +1475 => x"feba3981", +1476 => x"778c170c", +1477 => x"7788170c", +1478 => x"758c190c", +1479 => x"7588190c", +1480 => x"59fd8039", +1481 => x"83147082", +1482 => x"2c81712b", +1483 => x"80d7a408", +1484 => x"0780d7a0", +1485 => x"0b84050c", +1486 => x"75101010", +1487 => x"80d7a005", +1488 => x"88110871", +1489 => x"8c1c0c70", +1490 => x"881c0c7a", +1491 => x"88130c57", +1492 => x"5b5653fe", +1493 => x"e4398073", +1494 => x"24a33872", +1495 => x"822c8171", +1496 => x"2b80d7a4", +1497 => x"080780d7", +1498 => x"a00b8405", +1499 => x"0c58748c", +1500 => x"180c7388", +1501 => x"180c7688", +1502 => x"160cfdc3", +1503 => x"39831370", +1504 => x"822c8171", +1505 => x"2b80d7a4", +1506 => x"080780d7", +1507 => x"a00b8405", +1508 => x"0c5953da", +1509 => x"39f93d0d", +1510 => x"797b5853", +1511 => x"800b80cf", +1512 => x"e4085356", +1513 => x"72722ebc", +1514 => x"3884dc13", +1515 => x"5574762e", +1516 => x"b3388815", +1517 => x"08841608", +1518 => x"ff055454", +1519 => x"80732499", +1520 => x"388c1422", +1521 => x"70902b53", +1522 => x"587180d4", +1523 => x"3880dc14", +1524 => x"ff145454", +1525 => x"728025e9", +1526 => x"38740855", +1527 => x"74d43880", +1528 => x"cfe40852", +1529 => x"84dc1255", +1530 => x"74802ead", +1531 => x"38881508", +1532 => x"841608ff", +1533 => x"05545480", +1534 => x"73249838", +1535 => x"8c142270", +1536 => x"902b5358", +1537 => x"71ad3880", +1538 => x"dc14ff14", +1539 => x"54547280", +1540 => x"25ea3874", +1541 => x"085574d5", +1542 => x"3875800c", +1543 => x"893d0d04", +1544 => x"7351762d", +1545 => x"75800807", +1546 => x"80dc15ff", +1547 => x"15555556", +1548 => x"ffa23973", +1549 => x"51762d75", +1550 => x"80080780", +1551 => x"dc15ff15", +1552 => x"555556ca", +1553 => x"39ea3d0d", +1554 => x"688c1122", +1555 => x"700a100a", +1556 => x"81065758", +1557 => x"567480e4", +1558 => x"388e1622", +1559 => x"70902b70", +1560 => x"902c5155", +1561 => x"58807424", +1562 => x"b138983d", +1563 => x"c4055373", +1564 => x"5280cfe4", +1565 => x"08519481", +1566 => x"3f800b80", +1567 => x"08249738", +1568 => x"7983e080", +1569 => x"06547380", +1570 => x"c0802e81", +1571 => x"8f387382", +1572 => x"80802e81", +1573 => x"91388c16", +1574 => x"22577690", +1575 => x"80075473", +1576 => x"8c172388", +1577 => x"805280cf", +1578 => x"e4085181", +1579 => x"9b3f8008", +1580 => x"9d388c16", +1581 => x"22820755", +1582 => x"748c1723", +1583 => x"80c31670", +1584 => x"770c9017", +1585 => x"0c810b94", +1586 => x"170c983d", +1587 => x"0d0480cf", +1588 => x"e408a8e6", +1589 => x"0bbc120c", +1590 => x"588c1622", +1591 => x"81800754", +1592 => x"738c1723", +1593 => x"8008760c", +1594 => x"80089017", +1595 => x"0c88800b", +1596 => x"94170c74", +1597 => x"802ed338", +1598 => x"8e162270", +1599 => x"902b7090", +1600 => x"2c535654", +1601 => x"9afe3f80", +1602 => x"08802eff", +1603 => x"bd388c16", +1604 => x"22810757", +1605 => x"768c1723", +1606 => x"983d0d04", +1607 => x"810b8c17", +1608 => x"225855fe", +1609 => x"f539a816", +1610 => x"0880c39d", +1611 => x"2e098106", +1612 => x"fee4388c", +1613 => x"16228880", +1614 => x"0754738c", +1615 => x"17238880", +1616 => x"0b80cc17", +1617 => x"0cfedc39", +1618 => x"f43d0d7e", +1619 => x"608b1170", +1620 => x"f8065b55", +1621 => x"555d7296", +1622 => x"26833890", +1623 => x"58807824", +1624 => x"74792607", +1625 => x"55805474", +1626 => x"742e0981", +1627 => x"0680ca38", +1628 => x"7c518ea8", +1629 => x"3f7783f7", +1630 => x"2680c538", +1631 => x"77832a70", +1632 => x"10101080", +1633 => x"d7a0058c", +1634 => x"11085858", +1635 => x"5475772e", +1636 => x"81f03884", +1637 => x"1608fc06", +1638 => x"8c170888", +1639 => x"1808718c", +1640 => x"120c8812", +1641 => x"0c5b7605", +1642 => x"84110881", +1643 => x"0784120c", +1644 => x"537c518d", +1645 => x"e83f8816", +1646 => x"5473800c", +1647 => x"8e3d0d04", +1648 => x"77892a78", +1649 => x"832a5854", +1650 => x"73802ebf", +1651 => x"3877862a", +1652 => x"b8055784", +1653 => x"7427b438", +1654 => x"80db1457", +1655 => x"947427ab", +1656 => x"38778c2a", +1657 => x"80ee0557", +1658 => x"80d47427", +1659 => x"9e38778f", +1660 => x"2a80f705", +1661 => x"5782d474", +1662 => x"27913877", +1663 => x"922a80fc", +1664 => x"05578ad4", +1665 => x"74278438", +1666 => x"80fe5776", +1667 => x"10101080", +1668 => x"d7a0058c", +1669 => x"11085653", +1670 => x"74732ea3", +1671 => x"38841508", +1672 => x"fc067079", +1673 => x"31555673", +1674 => x"8f2488e4", +1675 => x"38738025", +1676 => x"88e6388c", +1677 => x"15085574", +1678 => x"732e0981", +1679 => x"06df3881", +1680 => x"175980d7", +1681 => x"b0085675", +1682 => x"80d7a82e", +1683 => x"82cc3884", +1684 => x"1608fc06", +1685 => x"70793155", +1686 => x"55738f24", +1687 => x"bb3880d7", +1688 => x"a80b80d7", +1689 => x"b40c80d7", +1690 => x"a80b80d7", +1691 => x"b00c8074", +1692 => x"2480db38", +1693 => x"74168411", +1694 => x"08810784", +1695 => x"120c53fe", +1696 => x"b0398816", +1697 => x"8c110857", +1698 => x"5975792e", +1699 => x"098106fe", +1700 => x"82388214", +1701 => x"59ffab39", +1702 => x"77167881", +1703 => x"0784180c", +1704 => x"7080d7b4", +1705 => x"0c7080d7", +1706 => x"b00c80d7", +1707 => x"a80b8c12", +1708 => x"0c8c1108", +1709 => x"88120c74", +1710 => x"81078412", +1711 => x"0c740574", +1712 => x"710c5b7c", +1713 => x"518bd63f", +1714 => x"881654fd", +1715 => x"ec3983ff", +1716 => x"75278391", +1717 => x"3874892a", +1718 => x"75832a54", +1719 => x"5473802e", +1720 => x"bf387486", +1721 => x"2ab80553", +1722 => x"847427b4", +1723 => x"3880db14", +1724 => x"53947427", +1725 => x"ab38748c", +1726 => x"2a80ee05", +1727 => x"5380d474", +1728 => x"279e3874", +1729 => x"8f2a80f7", +1730 => x"055382d4", +1731 => x"74279138", +1732 => x"74922a80", +1733 => x"fc05538a", +1734 => x"d4742784", +1735 => x"3880fe53", +1736 => x"72101010", +1737 => x"80d7a005", +1738 => x"88110855", +1739 => x"5773772e", +1740 => x"868b3884", +1741 => x"1408fc06", +1742 => x"5b747b27", +1743 => x"8d388814", +1744 => x"08547377", +1745 => x"2e098106", +1746 => x"ea388c14", +1747 => x"0880d7a0", +1748 => x"0b840508", +1749 => x"718c190c", +1750 => x"7588190c", +1751 => x"7788130c", +1752 => x"5c57758c", +1753 => x"150c7853", +1754 => x"80792483", +1755 => x"98387282", +1756 => x"2c81712b", +1757 => x"5656747b", +1758 => x"2680ca38", +1759 => x"7a750657", +1760 => x"7682a338", +1761 => x"78fc0684", +1762 => x"05597410", +1763 => x"707c0655", +1764 => x"55738292", +1765 => x"38841959", +1766 => x"f13980d7", +1767 => x"a00b8405", +1768 => x"0879545b", +1769 => x"788025c6", +1770 => x"3882da39", +1771 => x"74097b06", +1772 => x"7080d7a0", +1773 => x"0b84050c", +1774 => x"5b741055", +1775 => x"747b2685", +1776 => x"387485bc", +1777 => x"3880d7a0", +1778 => x"0b880508", +1779 => x"70841208", +1780 => x"fc06707b", +1781 => x"317b7226", +1782 => x"8f722507", +1783 => x"5d575c5c", +1784 => x"5578802e", +1785 => x"80d93879", +1786 => x"1580d798", +1787 => x"08199011", +1788 => x"59545680", +1789 => x"d79408ff", +1790 => x"2e8838a0", +1791 => x"8f13e080", +1792 => x"06577652", +1793 => x"7c518996", +1794 => x"3f800854", +1795 => x"8008ff2e", +1796 => x"90388008", +1797 => x"762782a7", +1798 => x"387480d7", +1799 => x"a02e829f", +1800 => x"3880d7a0", +1801 => x"0b880508", +1802 => x"55841508", +1803 => x"fc067079", +1804 => x"31797226", +1805 => x"8f722507", +1806 => x"5d555a7a", +1807 => x"83f23877", +1808 => x"81078416", +1809 => x"0c771570", +1810 => x"80d7a00b", +1811 => x"88050c74", +1812 => x"81078412", +1813 => x"0c567c51", +1814 => x"88c33f88", +1815 => x"15547380", +1816 => x"0c8e3d0d", +1817 => x"0474832a", +1818 => x"70545480", +1819 => x"7424819b", +1820 => x"3872822c", +1821 => x"81712b80", +1822 => x"d7a40807", +1823 => x"7080d7a0", +1824 => x"0b84050c", +1825 => x"75101010", +1826 => x"80d7a005", +1827 => x"88110871", +1828 => x"8c1b0c70", +1829 => x"881b0c79", +1830 => x"88130c57", +1831 => x"555c5575", +1832 => x"8c150cfd", +1833 => x"c1397879", +1834 => x"10101080", +1835 => x"d7a00570", +1836 => x"565b5c8c", +1837 => x"14085675", +1838 => x"742ea338", +1839 => x"841608fc", +1840 => x"06707931", +1841 => x"5853768f", +1842 => x"2483f138", +1843 => x"76802584", +1844 => x"af388c16", +1845 => x"08567574", +1846 => x"2e098106", +1847 => x"df388814", +1848 => x"811a7083", +1849 => x"06555a54", +1850 => x"72c9387b", +1851 => x"83065675", +1852 => x"802efdb8", +1853 => x"38ff1cf8", +1854 => x"1b5b5c88", +1855 => x"1a087a2e", +1856 => x"ea38fdb5", +1857 => x"39831953", +1858 => x"fce43983", +1859 => x"1470822c", +1860 => x"81712b80", +1861 => x"d7a40807", +1862 => x"7080d7a0", +1863 => x"0b84050c", +1864 => x"76101010", +1865 => x"80d7a005", +1866 => x"88110871", +1867 => x"8c1c0c70", +1868 => x"881c0c7a", +1869 => x"88130c58", +1870 => x"535d5653", +1871 => x"fee13980", +1872 => x"d6e40817", +1873 => x"59800876", +1874 => x"2e818b38", +1875 => x"80d79408", +1876 => x"ff2e848e", +1877 => x"38737631", +1878 => x"1980d6e4", +1879 => x"0c738706", +1880 => x"70565372", +1881 => x"802e8838", +1882 => x"88733170", +1883 => x"15555576", +1884 => x"149fff06", +1885 => x"a0807131", +1886 => x"1670547e", +1887 => x"53515386", +1888 => x"9d3f8008", +1889 => x"568008ff", +1890 => x"2e819e38", +1891 => x"80d6e408", +1892 => x"137080d6", +1893 => x"e40c7475", +1894 => x"80d7a00b", +1895 => x"88050c77", +1896 => x"76311581", +1897 => x"07555659", +1898 => x"7a80d7a0", +1899 => x"2e83c038", +1900 => x"798f2682", +1901 => x"ef38810b", +1902 => x"84150c84", +1903 => x"1508fc06", +1904 => x"70793179", +1905 => x"72268f72", +1906 => x"25075d55", +1907 => x"5a7a802e", +1908 => x"fced3880", +1909 => x"db398008", +1910 => x"9fff0655", +1911 => x"74feed38", +1912 => x"7880d6e4", +1913 => x"0c80d7a0", +1914 => x"0b880508", +1915 => x"7a188107", +1916 => x"84120c55", +1917 => x"80d79008", +1918 => x"79278638", +1919 => x"7880d790", +1920 => x"0c80d78c", +1921 => x"087927fc", +1922 => x"a0387880", +1923 => x"d78c0c84", +1924 => x"1508fc06", +1925 => x"70793179", +1926 => x"72268f72", +1927 => x"25075d55", +1928 => x"5a7a802e", +1929 => x"fc993888", +1930 => x"39807457", +1931 => x"53fedd39", +1932 => x"7c5184e9", +1933 => x"3f800b80", +1934 => x"0c8e3d0d", +1935 => x"04807324", +1936 => x"a5387282", +1937 => x"2c81712b", +1938 => x"80d7a408", +1939 => x"077080d7", +1940 => x"a00b8405", +1941 => x"0c5c5a76", +1942 => x"8c170c73", +1943 => x"88170c75", +1944 => x"88180cf9", +1945 => x"fd398313", +1946 => x"70822c81", +1947 => x"712b80d7", +1948 => x"a4080770", +1949 => x"80d7a00b", +1950 => x"84050c5d", +1951 => x"5b53d839", +1952 => x"7a75065c", +1953 => x"7bfc9f38", +1954 => x"84197510", +1955 => x"5659f139", +1956 => x"ff178105", +1957 => x"59f7ab39", +1958 => x"8c150888", +1959 => x"1608718c", +1960 => x"120c8812", +1961 => x"0c597515", +1962 => x"84110881", +1963 => x"0784120c", +1964 => x"587c5183", +1965 => x"e83f8815", +1966 => x"54fba339", +1967 => x"77167881", +1968 => x"0784180c", +1969 => x"8c170888", +1970 => x"1808718c", +1971 => x"120c8812", +1972 => x"0c5c7080", +1973 => x"d7b40c70", +1974 => x"80d7b00c", +1975 => x"80d7a80b", +1976 => x"8c120c8c", +1977 => x"11088812", +1978 => x"0c778107", +1979 => x"84120c77", +1980 => x"0577710c", +1981 => x"557c5183", +1982 => x"a43f8816", +1983 => x"54f5ba39", +1984 => x"72168411", +1985 => x"08810784", +1986 => x"120c588c", +1987 => x"16088817", +1988 => x"08718c12", +1989 => x"0c88120c", +1990 => x"577c5183", +1991 => x"803f8816", +1992 => x"54f59639", +1993 => x"7284150c", +1994 => x"f41af806", +1995 => x"70841d08", +1996 => x"81060784", +1997 => x"1d0c701c", +1998 => x"5556850b", +1999 => x"84150c85", +2000 => x"0b88150c", +2001 => x"8f7627fd", +2002 => x"ab38881b", +2003 => x"527c51eb", +2004 => x"e83f80d7", +2005 => x"a00b8805", +2006 => x"0880d6e4", +2007 => x"085a55fd", +2008 => x"93397880", +2009 => x"d6e40c73", +2010 => x"80d7940c", +2011 => x"fbef3972", +2012 => x"84150cfc", +2013 => x"ff39fb3d", +2014 => x"0d77707a", +2015 => x"7c585553", +2016 => x"568f7527", +2017 => x"80e63872", +2018 => x"76078306", +2019 => x"517080dc", +2020 => x"38757352", +2021 => x"54707084", +2022 => x"05520874", +2023 => x"70840556", +2024 => x"0c737170", +2025 => x"84055308", +2026 => x"71708405", +2027 => x"530c7170", +2028 => x"84055308", +2029 => x"71708405", +2030 => x"530c7170", +2031 => x"84055308", +2032 => x"71708405", +2033 => x"530cf016", +2034 => x"5654748f", +2035 => x"26c73883", +2036 => x"75279538", +2037 => x"70708405", +2038 => x"52087470", +2039 => x"8405560c", +2040 => x"fc155574", +2041 => x"8326ed38", +2042 => x"73715452", +2043 => x"ff155170", +2044 => x"ff2e9838", +2045 => x"72708105", +2046 => x"54337270", +2047 => x"81055434", +2048 => x"ff115170", +2049 => x"ff2e0981", +2050 => x"06ea3875", +2051 => x"800c873d", +2052 => x"0d04fb3d", +2053 => x"0d777a71", +2054 => x"028c05a3", +2055 => x"05335854", +2056 => x"54568373", +2057 => x"2780d438", +2058 => x"75830651", +2059 => x"7080cc38", +2060 => x"74882b75", +2061 => x"07707190", +2062 => x"2b075551", +2063 => x"8f7327a7", +2064 => x"38737270", +2065 => x"8405540c", +2066 => x"71747170", +2067 => x"8405530c", +2068 => x"74717084", +2069 => x"05530c74", +2070 => x"71708405", +2071 => x"530cf014", +2072 => x"5452728f", +2073 => x"26db3883", +2074 => x"73279038", +2075 => x"73727084", +2076 => x"05540cfc", +2077 => x"13537283", +2078 => x"26f238ff", +2079 => x"135170ff", +2080 => x"2e933874", +2081 => x"72708105", +2082 => x"5434ff11", +2083 => x"5170ff2e", +2084 => x"098106ef", +2085 => x"3875800c", +2086 => x"873d0d04", +2087 => x"04047070", +2088 => x"7070800b", +2089 => x"80dfe00c", +2090 => x"765184f3", +2091 => x"3f800853", +2092 => x"8008ff2e", +2093 => x"89387280", +2094 => x"0c505050", +2095 => x"500480df", +2096 => x"e0085473", +2097 => x"802eef38", +2098 => x"7574710c", +2099 => x"5272800c", +2100 => x"50505050", +2101 => x"04f93d0d", +2102 => x"797c557b", +2103 => x"548e1122", +2104 => x"70902b70", +2105 => x"902c5557", +2106 => x"80cfe408", +2107 => x"53585683", +2108 => x"f63f8008", +2109 => x"57800b80", +2110 => x"08249338", +2111 => x"80d01608", +2112 => x"80080580", +2113 => x"d0170c76", +2114 => x"800c893d", +2115 => x"0d048c16", +2116 => x"2283dfff", +2117 => x"0655748c", +2118 => x"17237680", +2119 => x"0c893d0d", +2120 => x"04fa3d0d", +2121 => x"788c1122", +2122 => x"70882a70", +2123 => x"81065157", +2124 => x"585674a9", +2125 => x"388c1622", +2126 => x"83dfff06", +2127 => x"55748c17", +2128 => x"237a5479", +2129 => x"538e1622", +2130 => x"70902b70", +2131 => x"902c5456", +2132 => x"80cfe408", +2133 => x"525681b2", +2134 => x"3f883d0d", +2135 => x"04825480", +2136 => x"538e1622", +2137 => x"70902b70", +2138 => x"902c5456", +2139 => x"80cfe408", +2140 => x"525782bb", +2141 => x"3f8c1622", +2142 => x"83dfff06", +2143 => x"55748c17", +2144 => x"237a5479", +2145 => x"538e1622", +2146 => x"70902b70", +2147 => x"902c5456", +2148 => x"80cfe408", +2149 => x"525680f2", +2150 => x"3f883d0d", +2151 => x"04f93d0d", +2152 => x"797c557b", +2153 => x"548e1122", +2154 => x"70902b70", +2155 => x"902c5557", +2156 => x"80cfe408", +2157 => x"53585681", +2158 => x"f63f8008", +2159 => x"578008ff", +2160 => x"2e99388c", +2161 => x"1622a080", +2162 => x"0755748c", +2163 => x"17238008", +2164 => x"80d0170c", +2165 => x"76800c89", +2166 => x"3d0d048c", +2167 => x"162283df", +2168 => x"ff065574", +2169 => x"8c172376", +2170 => x"800c893d", +2171 => x"0d047070", +2172 => x"70748e11", +2173 => x"2270902b", +2174 => x"70902c55", +2175 => x"51515380", +2176 => x"cfe40851", +2177 => x"bd3f5050", +2178 => x"5004fb3d", +2179 => x"0d800b80", +2180 => x"dfe00c7a", +2181 => x"53795278", +2182 => x"5182ff3f", +2183 => x"80085580", +2184 => x"08ff2e88", +2185 => x"3874800c", +2186 => x"873d0d04", +2187 => x"80dfe008", +2188 => x"5675802e", +2189 => x"f0387776", +2190 => x"710c5474", +2191 => x"800c873d", +2192 => x"0d047070", +2193 => x"7070800b", +2194 => x"80dfe00c", +2195 => x"765184cc", +2196 => x"3f800853", +2197 => x"8008ff2e", +2198 => x"89387280", +2199 => x"0c505050", +2200 => x"500480df", +2201 => x"e0085473", +2202 => x"802eef38", +2203 => x"7574710c", +2204 => x"5272800c", +2205 => x"50505050", +2206 => x"04fc3d0d", +2207 => x"800b80df", +2208 => x"e00c7852", +2209 => x"775187b3", +2210 => x"3f800854", +2211 => x"8008ff2e", +2212 => x"88387380", +2213 => x"0c863d0d", +2214 => x"0480dfe0", +2215 => x"08557480", +2216 => x"2ef03876", +2217 => x"75710c53", +2218 => x"73800c86", +2219 => x"3d0d04fb", +2220 => x"3d0d800b", +2221 => x"80dfe00c", +2222 => x"7a537952", +2223 => x"7851848e", +2224 => x"3f800855", +2225 => x"8008ff2e", +2226 => x"88387480", +2227 => x"0c873d0d", +2228 => x"0480dfe0", +2229 => x"08567580", +2230 => x"2ef03877", +2231 => x"76710c54", +2232 => x"74800c87", +2233 => x"3d0d04fb", +2234 => x"3d0d800b", +2235 => x"80dfe00c", +2236 => x"7a537952", +2237 => x"78518296", +2238 => x"3f800855", +2239 => x"8008ff2e", +2240 => x"88387480", +2241 => x"0c873d0d", +2242 => x"0480dfe0", +2243 => x"08567580", +2244 => x"2ef03877", +2245 => x"76710c54", +2246 => x"74800c87", +2247 => x"3d0d0470", +2248 => x"707080df", +2249 => x"d0088938", +2250 => x"80dfe40b", +2251 => x"80dfd00c", +2252 => x"80dfd008", +2253 => x"75115252", +2254 => x"ff537087", +2255 => x"fb808026", +2256 => x"88387080", +2257 => x"dfd00c71", +2258 => x"5372800c", +2259 => x"50505004", +2260 => x"fd3d0d80", +2261 => x"0b80cfd8", +2262 => x"08545472", +2263 => x"812e9b38", +2264 => x"7380dfd4", +2265 => x"0cc2bf3f", +2266 => x"c1963f80", +2267 => x"dfa85281", +2268 => x"51c3fd3f", +2269 => x"80085186", +2270 => x"c23f7280", +2271 => x"dfd40cc2", +2272 => x"a53fc0fc", +2273 => x"3f80dfa8", +2274 => x"528151c3", +2275 => x"e33f8008", +2276 => x"5186a83f", +2277 => x"00ff3900", +2278 => x"ff39f53d", +2279 => x"0d7e6080", +2280 => x"dfd40870", +2281 => x"5b585b5b", +2282 => x"7580c238", +2283 => x"777a25a1", +2284 => x"38771b70", +2285 => x"337081ff", +2286 => x"06585859", +2287 => x"758a2e98", +2288 => x"387681ff", +2289 => x"0651c1bd", +2290 => x"3f811858", +2291 => x"797824e1", +2292 => x"3879800c", +2293 => x"8d3d0d04", +2294 => x"8d51c1a9", +2295 => x"3f783370", +2296 => x"81ff0652", +2297 => x"57c19e3f", +2298 => x"811858e0", +2299 => x"3979557a", +2300 => x"547d5385", +2301 => x"528d3dfc", +2302 => x"0551c0c6", +2303 => x"3f800856", +2304 => x"85b23f7b", +2305 => x"80080c75", +2306 => x"800c8d3d", +2307 => x"0d04f63d", +2308 => x"0d7d7f80", +2309 => x"dfd40870", +2310 => x"5b585a5a", +2311 => x"7580c138", +2312 => x"777925b3", +2313 => x"38c0b93f", +2314 => x"800881ff", +2315 => x"06708d32", +2316 => x"7030709f", +2317 => x"2a515157", +2318 => x"57768a2e", +2319 => x"80c43875", +2320 => x"802ebf38", +2321 => x"771a5676", +2322 => x"76347651", +2323 => x"c0b73f81", +2324 => x"18587878", +2325 => x"24cf3877", +2326 => x"5675800c", +2327 => x"8c3d0d04", +2328 => x"78557954", +2329 => x"7c538452", +2330 => x"8c3dfc05", +2331 => x"51ffbfd2", +2332 => x"3f800856", +2333 => x"84be3f7a", +2334 => x"80080c75", +2335 => x"800c8c3d", +2336 => x"0d04771a", +2337 => x"598a7934", +2338 => x"8118588d", +2339 => x"51ffbff5", +2340 => x"3f8a51ff", +2341 => x"bfef3f77", +2342 => x"56ffbe39", +2343 => x"fb3d0d80", +2344 => x"dfd40870", +2345 => x"56547388", +2346 => x"3874800c", +2347 => x"873d0d04", +2348 => x"77538352", +2349 => x"873dfc05", +2350 => x"51ffbf86", +2351 => x"3f800854", +2352 => x"83f23f75", +2353 => x"80080c73", +2354 => x"800c873d", +2355 => x"0d04fa3d", +2356 => x"0d80dfd4", +2357 => x"08802ea3", +2358 => x"387a5579", +2359 => x"54785386", +2360 => x"52883dfc", +2361 => x"0551ffbe", +2362 => x"d93f8008", +2363 => x"5683c53f", +2364 => x"7680080c", +2365 => x"75800c88", +2366 => x"3d0d0483", +2367 => x"b73f9d0b", +2368 => x"80080cff", +2369 => x"0b800c88", +2370 => x"3d0d04f7", +2371 => x"3d0d7b7d", +2372 => x"5b59bc53", +2373 => x"80527951", +2374 => x"f5f83f80", +2375 => x"70565798", +2376 => x"56741970", +2377 => x"3370782b", +2378 => x"79078118", +2379 => x"f81a5a58", +2380 => x"59555884", +2381 => x"7524ea38", +2382 => x"767a2384", +2383 => x"19588070", +2384 => x"56579856", +2385 => x"74187033", +2386 => x"70782b79", +2387 => x"078118f8", +2388 => x"1a5a5859", +2389 => x"51548475", +2390 => x"24ea3876", +2391 => x"821b2388", +2392 => x"19588070", +2393 => x"56579856", +2394 => x"74187033", +2395 => x"70782b79", +2396 => x"078118f8", +2397 => x"1a5a5859", +2398 => x"51548475", +2399 => x"24ea3876", +2400 => x"841b0c8c", +2401 => x"19588070", +2402 => x"56579856", +2403 => x"74187033", +2404 => x"70782b79", +2405 => x"078118f8", +2406 => x"1a5a5859", +2407 => x"51548475", +2408 => x"24ea3876", +2409 => x"881b2390", +2410 => x"19588070", +2411 => x"56579856", +2412 => x"74187033", +2413 => x"70782b79", +2414 => x"078118f8", +2415 => x"1a5a5859", +2416 => x"51548475", +2417 => x"24ea3876", +2418 => x"8a1b2394", +2419 => x"19588070", +2420 => x"56579856", +2421 => x"74187033", +2422 => x"70782b79", +2423 => x"078118f8", +2424 => x"1a5a5859", +2425 => x"51548475", +2426 => x"24ea3876", +2427 => x"8c1b2398", +2428 => x"19588070", +2429 => x"56579856", +2430 => x"74187033", +2431 => x"70782b79", +2432 => x"078118f8", +2433 => x"1a5a5859", +2434 => x"51548475", +2435 => x"24ea3876", +2436 => x"8e1b239c", +2437 => x"19588070", +2438 => x"5657b856", +2439 => x"74187033", +2440 => x"70782b79", +2441 => x"078118f8", +2442 => x"1a5a5859", +2443 => x"5a548875", +2444 => x"24ea3876", +2445 => x"901b0c8b", +2446 => x"3d0d04e9", +2447 => x"3d0d6a80", +2448 => x"dfd40857", +2449 => x"57759338", +2450 => x"80c0800b", +2451 => x"84180c75", +2452 => x"ac180c75", +2453 => x"800c993d", +2454 => x"0d04893d", +2455 => x"70556a54", +2456 => x"558a5299", +2457 => x"3dffbc05", +2458 => x"51ffbbd6", +2459 => x"3f800877", +2460 => x"53755256", +2461 => x"fd953fbc", +2462 => x"3f778008", +2463 => x"0c75800c", +2464 => x"993d0d04", +2465 => x"fc3d0d81", +2466 => x"5480dfd4", +2467 => x"08883873", +2468 => x"800c863d", +2469 => x"0d047653", +2470 => x"97b95286", +2471 => x"3dfc0551", +2472 => x"ffbb9f3f", +2473 => x"8008548c", +2474 => x"3f748008", +2475 => x"0c73800c", +2476 => x"863d0d04", +2477 => x"80cfe408", +2478 => x"800c04f7", +2479 => x"3d0d7b80", +2480 => x"cfe40882", +2481 => x"c811085a", +2482 => x"545a7780", +2483 => x"2e80da38", +2484 => x"81881884", +2485 => x"1908ff05", +2486 => x"81712b59", +2487 => x"55598074", +2488 => x"2480ea38", +2489 => x"807424b5", +2490 => x"3873822b", +2491 => x"78118805", +2492 => x"56568180", +2493 => x"19087706", +2494 => x"5372802e", +2495 => x"b6387816", +2496 => x"70085353", +2497 => x"79517408", +2498 => x"53722dff", +2499 => x"14fc17fc", +2500 => x"1779812c", +2501 => x"5a575754", +2502 => x"738025d6", +2503 => x"38770858", +2504 => x"77ffad38", +2505 => x"80cfe408", +2506 => x"53bc1308", +2507 => x"a5387951", +2508 => x"f8e23f74", +2509 => x"0853722d", +2510 => x"ff14fc17", +2511 => x"fc177981", +2512 => x"2c5a5757", +2513 => x"54738025", +2514 => x"ffa838d1", +2515 => x"398057ff", +2516 => x"93397251", +2517 => x"bc130854", +2518 => x"732d7951", +2519 => x"f8b63f70", +2520 => x"7080dfb0", +2521 => x"0bfc0570", +2522 => x"08525270", +2523 => x"ff2e9138", +2524 => x"702dfc12", +2525 => x"70085252", +2526 => x"70ff2e09", +2527 => x"8106f138", +2528 => x"50500404", +2529 => x"ffbb8c3f", +2530 => x"04000000", +2531 => x"00000040", +2532 => x"48656c6c", +2533 => x"6f20776f", +2534 => x"726c6420", +2535 => x"310a0000", +2536 => x"48656c6c", +2537 => x"6f20776f", +2538 => x"726c6420", +2539 => x"320a0000", +2540 => x"0a000000", +2541 => x"43000000", +2542 => x"64756d6d", +2543 => x"792e6578", +2544 => x"65000000", +2545 => x"00ffffff", +2546 => x"ff00ffff", +2547 => x"ffff00ff", +2548 => x"ffffff00", +2549 => x"00000000", +2550 => x"00000000", +2551 => x"00000000", +2552 => x"00002fb8", +2553 => x"000027e8", +2554 => x"00000000", +2555 => x"00002a50", +2556 => x"00002aac", +2557 => x"00002b08", +2558 => x"00000000", +2559 => x"00000000", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"000027b4", +2568 => x"00000000", +2569 => x"00000000", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000001", +2597 => x"330eabcd", +2598 => x"1234e66d", +2599 => x"deec0005", +2600 => x"000b0000", +2601 => x"00000000", +2602 => x"00000000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00000000", +2663 => x"00000000", +2664 => x"00000000", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", +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"00000000", +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"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", +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"ffffffff", +2790 => x"00000000", +2791 => x"00020000", +2792 => x"00000000", +2793 => x"00000000", +2794 => x"00002ba0", +2795 => x"00002ba0", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", +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"000027b8", +3051 => x"ffffffff", +3052 => x"00000000", +3053 => x"ffffffff", +3054 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; + end if; + if (mem_readEnable = '1') then + mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); + end if; + end if; +end process; + + + + +end dram_arch; diff --git a/zpu/hdl/example_medium/simzpu_medium.do b/zpu/hdl/example_medium/simzpu_medium.do index a6c1fe2..2b77ba6 100644 --- a/zpu/hdl/example_medium/simzpu_medium.do +++ b/zpu/hdl/example_medium/simzpu_medium.do @@ -1,20 +1,20 @@ # Xilinx WebPack modelsim script # -# cd C:/workspace/zpu/zpu/hdl/zpu4/src +# cd C:/workspace/zpu/zpu/hdl/example_medium # do simzpu_medium.do 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 ../zpu4/core/zpupkg.vhd +vcom -93 -explicit ../zpu4/src/txt_util.vhd vcom -93 -explicit sim_fpga_top.vhd -vcom -93 -explicit zpu_core.vhd +vcom -93 -explicit ../zpu4/core/zpu_core.vhd vcom -93 -explicit dram_hello.vhd -vcom -93 -explicit timer.vhd -vcom -93 -explicit io.vhd -vcom -93 -explicit trace.vhd +vcom -93 -explicit ../zpu4/src/timer.vhd +vcom -93 -explicit ../zpu4/src/io.vhd +vcom -93 -explicit ../zpu4/src/trace.vhd # run ZPU vsim fpga_top diff --git a/zpu/hdl/example_medium/zpu_config_trace.vhd b/zpu/hdl/example_medium/zpu_config_trace.vhd new file mode 100644 index 0000000..d765d9a --- /dev/null +++ b/zpu/hdl/example_medium/zpu_config_trace.vhd @@ -0,0 +1,17 @@ +library ieee; +use ieee.std_logic_1164.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 := 27; + constant maxAddrBitDRAM : integer := 16; + constant maxAddrBitBRAM : integer := 16; + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8"; + +end zpu_config; diff --git a/zpu/hdl/index.html b/zpu/hdl/index.html index d5bc256..e206113 100644 --- a/zpu/hdl/index.html +++ b/zpu/hdl/index.html @@ -4,8 +4,9 @@ The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART is a good place to start.

      -You'll find a working simulation script in hdl/example/simzpu_small.do and hdl/zpu4/src/simzpu_medium.do, which -show simulation of the small(zpu_core_small.vhd) and medium sized ZPU(zpu_core.vhd). +You'll find a working simulation script in hdl/example/simzpu_small.do and hdl/example_medium/simzpu_medium.do, which +show simulation of the small(zpu_core_small.vhd) and medium sized ZPU(zpu_core.vhd). hdl/example/simzpu_interrupt.do +shows use of interrupts.

      When implementing the ZPU, copy the following files and modify them to your needs:

        diff --git a/zpu/hdl/zpu4/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd index 9cda01c..03526bd 100644 --- a/zpu/hdl/zpu4/core/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd @@ -81,7 +81,9 @@ State_FetchNext, State_AddSP, State_ReadIODone, State_Decode, -State_Resync +State_Resync, +State_Interrupt + ); type DecodedOpcodeType is @@ -103,7 +105,8 @@ Decoded_Load, Decoded_Not, Decoded_Flip, Decoded_Store, -Decoded_PopSP +Decoded_PopSP, +Decoded_Interrupt ); @@ -125,11 +128,15 @@ signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); signal memBRead_stdlogic : std_logic_vector(memBRead'range); --- debug -subtype index is integer range 0 to 3; -signal tOpcode_sel : index; - - +subtype index is integer range 0 to 3; + +signal tOpcode_sel : index; + + +signal inInterrupt : std_logic; + + + begin traceFileGenerate: if Generate_Trace generate @@ -146,8 +153,13 @@ begin ); end generate; - -- not used in this design - mem_writeMask <= (others => '1'); + + + -- not used in this design + + mem_writeMask <= (others => '1'); + + memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); memAWrite_stdlogic <= std_logic_vector(memAWrite); @@ -167,23 +179,31 @@ begin memARead <= unsigned(memARead_stdlogic); memBRead <= unsigned(memBRead_stdlogic); -tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); + + + tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); + decodeControl: - process(memBRead, pc,tOpcode_sel) + process(memBRead, pc,tOpcode_sel) variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); begin - -- not worked with synopsys - -- tOpcode := std_logic_vector(memBRead((wordBytes-1-to_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-to_integer(pc(minAddrBit-1 downto 0)))*8)); - -- use full case - case (tOpcode_sel) is - when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); - when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); - when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); - when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); - when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); - end case; + + -- simplify opcode selection a bit so it passes more synthesizers + case (tOpcode_sel) is + + when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); + + when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); + + when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); + + when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); + + when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); + end case; + sampledOpcode <= tOpcode; if (tOpcode(7 downto 7)=OpCode_Im) then @@ -246,13 +266,12 @@ tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); out_mem_readEnable <= '0'; memAWrite <= (others => '0'); memBWrite <= (others => '0'); - -- avoid Latch in synopsys - -- mem_writeMask <= (others => '1'); + inInterrupt <= '0'; 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 + -- memAWrite can be left at whatever value if memAWriteEnable is -- not set. memAWrite <= (others => DontCareValue); memBWrite <= (others => DontCareValue); @@ -270,6 +289,9 @@ tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); decodedOpcode <= sampledDecodedOpcode; opcode <= sampledOpcode; + if interrupt='0' then + inInterrupt <= '0'; -- no longer in an interrupt + end if; case state is when State_Execute => @@ -295,6 +317,14 @@ tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); idim_flag <= '0'; case decodedOpcode is + when Decoded_Interrupt => + sp <= sp - 1; + memAAddr <= sp - 1; + memAWriteEnable <= '1'; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc; + pc <= to_unsigned(32, maxAddrBit+1); -- interrupt address + report "ZPU jumped to interrupt!" severity note; when Decoded_Im => idim_flag <= '1'; memAWriteEnable <= '1'; @@ -422,6 +452,11 @@ tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); memBAddr <= sp + 1; state <= State_Decode; when State_Decode => + if interrupt='1' and inInterrupt='0' and idim_flag='0' then + -- We got an interrupt, execute interrupt instead of next instruction + inInterrupt <= '1'; + decodedOpcode <= Decoded_Interrupt; + end if; -- during the State_Execute cycle we'll be fetching SP+1 memAAddr <= sp; memBAddr <= sp + 1; diff --git a/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd b/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd deleted file mode 100644 index a169103..0000000 --- a/zpu/hdl/zpu4/core/zpu_core_small_wip.vhd +++ /dev/null @@ -1,498 +0,0 @@ --- Company: ZPU3 --- Engineer: Øyvind Harboe - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use ieee.numeric_std.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 : unsigned(maxAddrBit downto minAddrBit); -signal memAWrite : unsigned(wordSize-1 downto 0); -signal memARead : unsigned(wordSize-1 downto 0); -signal memBWriteEnable : std_logic; -signal memBAddr : unsigned(maxAddrBit downto minAddrBit); -signal memBWrite : unsigned(wordSize-1 downto 0); -signal memBRead : unsigned(wordSize-1 downto 0); - - - -signal pc : unsigned(maxAddrBit downto 0); -signal sp : unsigned(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, -State_Interrupt - -); - -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; - -subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; -signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); -signal memARead_stdlogic : std_logic_vector(memARead'range); -signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); -signal memBRead_stdlogic : std_logic_vector(memBRead'range); - -subtype index is integer range 0 to 3; - -signal tOpcode_sel : index; - - -signal inInterrupt : std_logic; - - - -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; - - - - -- not used in this design - - mem_writeMask <= (others => '1'); - - - - memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); - memAWrite_stdlogic <= std_logic_vector(memAWrite); - memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); - memBWrite_stdlogic <= std_logic_vector(memBWrite); - memory: dualport_ram port map ( - clk => clk, - memAWriteEnable => memAWriteEnable, - memAAddr => memAAddr_stdlogic, - memAWrite => memAWrite_stdlogic, - memARead => memARead_stdlogic, - memBWriteEnable => memBWriteEnable, - memBAddr => memBAddr_stdlogic, - memBWrite => memBWrite_stdlogic, - memBRead => memBRead_stdlogic - ); - memARead <= unsigned(memARead_stdlogic); - memBRead <= unsigned(memBRead_stdlogic); - - - - tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); - - - - decodeControl: - process(memBRead, pc,tOpcode_sel) - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - begin - - -- simplify opcode selection a bit so it passes more synthesizers - case (tOpcode_sel) is - - when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); - - when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); - - when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); - - when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); - - when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); - end case; - - 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 : unsigned(4 downto 0); - begin - if areset = '1' then - state <= State_Resync; - break <= '0'; - sp <= unsigned(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'); - inInterrupt <= '0'; - 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(memBRead); - - decodedOpcode <= sampledDecodedOpcode; - opcode <= sampledOpcode; - if interrupt='0' then - inInterrupt <= '0'; -- no longer in an interrupt - end if; - - 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) <= std_logic_vector(pc); - trace_opcode <= opcode; - trace_sp <= (others => '0'); - trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); - trace_topOfStack <= std_logic_vector(memARead); - trace_topOfStackB <= std_logic_vector(memBRead); - - -- during the next cycle we'll be reading the next opcode - spOffset(4):=not opcode(4); - spOffset(3 downto 0) := unsigned(opcode(3 downto 0)); - - idim_flag <= '0'; - case decodedOpcode is - when Decoded_Interrupt => - sp <= sp - 1; - memAAddr <= sp - 1; - memAWriteEnable <= '1'; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBitIncIO downto 0) <= pc; - pc <= conv_std_logic_vector(32, maxAddrBitIncIo+1); -- interrupt address - report "ZPU jumped to interrupt!" severity note; - 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) <= unsigned(opcode(6 downto 0)); - else - memAAddr <= sp; - memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); - memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 <= unsigned(mem_read); - end if; - when State_WriteIO => - sp <= sp + 1; - out_mem_writeEnable <= '1'; - out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(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 => - if interrupt='1' and inInterrupt='0' and idim_flag='0' then - -- We got an interrupt, execute interrupt instead of next instruction - inInterrupt <= '1'; - decodedOpcode <= Decoded_Interrupt; - end if; - -- 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/bram.vhd b/zpu/hdl/zpu4/src/bram.vhd deleted file mode 100644 index 435f3f4..0000000 --- a/zpu/hdl/zpu4/src/bram.vhd +++ /dev/null @@ -1,3807 +0,0 @@ -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 deleted file mode 100644 index 1d62d21..0000000 --- a/zpu/hdl/zpu4/src/bram_dmips.vhd +++ /dev/null @@ -1,3717 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(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 dualport_ram; - -architecture dualport_ram_arch of dualport_ram is - - -type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+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(to_integer(unsigned(memAAddr))) := memAWrite; - memARead <= memAWrite; - else - memARead <= ram(to_integer(unsigned(memAAddr))); - end if; - end if; -end process; - -process (clk) -begin - if (clk'event and clk = '1') then - if (memBWriteEnable = '1') then - ram(to_integer(unsigned(memBAddr))) := memBWrite; - memBRead <= memBWrite; - else - memBRead <= ram(to_integer(unsigned(memBAddr))); - end if; - end if; -end process; - - - - -end dualport_ram_arch; diff --git a/zpu/hdl/zpu4/src/dram_dmips.vhd b/zpu/hdl/zpu4/src/dram_dmips.vhd deleted file mode 100644 index a9fd59e..0000000 --- a/zpu/hdl/zpu4/src/dram_dmips.vhd +++ /dev/null @@ -1,3308 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); - -shared variable ram : ram_type := -( -0 => x"0b0b0b0b", -1 => x"82700b0b", -2 => x"80d5f40c", -3 => x"3a0b0b80", -4 => x"c4fb0400", -5 => x"00000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80c5c22d", -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"c3040000", -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"0b0b88a6", -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"0b0b80d5", -162 => x"e0738306", -163 => x"10100508", -164 => x"060b0b0b", -165 => x"88a90400", -166 => x"00000000", -167 => x"00000000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0bad", -171 => x"aa2d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0bad", -179 => x"ee2d5050", -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"80d5f00c", -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"82fd3fbf", -257 => x"a03f0410", -258 => x"10101010", -259 => x"10101010", -260 => x"10101010", -261 => x"10101010", -262 => x"10101010", -263 => x"10101010", -264 => x"10101010", -265 => x"10105351", -266 => x"047381ff", -267 => x"06738306", -268 => x"09810583", -269 => x"05101010", -270 => x"2b0772fc", -271 => x"060c5151", -272 => x"043c0472", -273 => x"72807281", -274 => x"06ff0509", -275 => x"72060571", -276 => x"1052720a", -277 => x"100a5372", -278 => x"ed385151", -279 => x"535104ff", -280 => x"3d0d0b0b", -281 => x"80e5e408", -282 => x"52710870", -283 => x"882a8132", -284 => x"70810651", -285 => x"515170f1", -286 => x"3873720c", -287 => x"833d0d04", -288 => x"80d5f008", -289 => x"802ea438", -290 => x"80d5f408", -291 => x"822ebd38", -292 => x"8380800b", -293 => x"0b0b80e5", -294 => x"e40c82a0", -295 => x"800b80e5", -296 => x"e80c8290", -297 => x"800b80e5", -298 => x"ec0c04f8", -299 => x"808080a4", -300 => x"0b0b0b80", -301 => x"e5e40cf8", -302 => x"80808280", -303 => x"0b80e5e8", -304 => x"0cf88080", -305 => x"84800b80", -306 => x"e5ec0c04", -307 => x"80c0a880", -308 => x"8c0b0b0b", -309 => x"80e5e40c", -310 => x"80c0a880", -311 => x"940b80e5", -312 => x"e80c0b0b", -313 => x"80c7d00b", -314 => x"80e5ec0c", -315 => x"04f23d0d", -316 => x"6080e5e8", -317 => x"08565d82", -318 => x"750c8059", -319 => x"805a800b", -320 => x"8f3d5d5b", -321 => x"7a101015", -322 => x"70087108", -323 => x"719f2c7e", -324 => x"852b5855", -325 => x"557d5359", -326 => x"5799993f", -327 => x"7d7f7a72", -328 => x"077c7207", -329 => x"71716081", -330 => x"05415f5d", -331 => x"5b595755", -332 => x"817b278f", -333 => x"38767d0c", -334 => x"77841e0c", -335 => x"7c800c90", -336 => x"3d0d0480", -337 => x"e5e80855", -338 => x"ffba3970", -339 => x"7080e5f0", -340 => x"335170a7", -341 => x"3880d5fc", -342 => x"08700852", -343 => x"5270802e", -344 => x"94388412", -345 => x"80d5fc0c", -346 => x"702d80d5", -347 => x"fc087008", -348 => x"525270ee", -349 => x"38810b80", -350 => x"e5f03450", -351 => x"50040470", -352 => x"0b0b80e5", -353 => x"e008802e", -354 => x"8e380b0b", -355 => x"0b0b800b", -356 => x"802e0981", -357 => x"06833850", -358 => x"040b0b80", -359 => x"e5e0510b", -360 => x"0b0bf4dc", -361 => x"3f500404", -362 => x"ff3d0d02", -363 => x"8f053352", -364 => x"718a2e8a", -365 => x"387151fd", -366 => x"a63f833d", -367 => x"0d048d51", -368 => x"fd9d3f71", -369 => x"51fd983f", -370 => x"833d0d04", -371 => x"ce3d0db5", -372 => x"3d707084", -373 => x"0552088b", -374 => x"a85c56a5", -375 => x"3d5e5c80", -376 => x"75708105", -377 => x"5733765b", -378 => x"55587378", -379 => x"2e80c138", -380 => x"8e3d5b73", -381 => x"a52e0981", -382 => x"0680c538", -383 => x"78708105", -384 => x"5a335473", -385 => x"80e42e81", -386 => x"b6387380", -387 => x"e42480c6", -388 => x"387380e3", -389 => x"2ea13880", -390 => x"52a55179", -391 => x"2d805273", -392 => x"51792d82", -393 => x"18587870", -394 => x"81055a33", -395 => x"5473c438", -396 => x"77800cb4", -397 => x"3d0d047b", -398 => x"841d8312", -399 => x"33565d57", -400 => x"80527351", -401 => x"792d8118", -402 => x"79708105", -403 => x"5b335558", -404 => x"73ffa038", -405 => x"db397380", -406 => x"f32e0981", -407 => x"06ffb838", -408 => x"7b841d71", -409 => x"08595d56", -410 => x"80773355", -411 => x"5673762e", -412 => x"8d388116", -413 => x"70187033", -414 => x"57555674", -415 => x"f538ff16", -416 => x"55807625", -417 => x"ffa03876", -418 => x"70810558", -419 => x"33548052", -420 => x"7351792d", -421 => x"811875ff", -422 => x"17575758", -423 => x"807625ff", -424 => x"85387670", -425 => x"81055833", -426 => x"54805273", -427 => x"51792d81", -428 => x"1875ff17", -429 => x"57575875", -430 => x"8024cc38", -431 => x"fee8397b", -432 => x"841d7108", -433 => x"70719f2c", -434 => x"5953595d", -435 => x"56807524", -436 => x"81913875", -437 => x"7d7c5856", -438 => x"54805773", -439 => x"772e0981", -440 => x"06b638b0", -441 => x"7b3402b5", -442 => x"05567a76", -443 => x"2e9738ff", -444 => x"16567533", -445 => x"75708105", -446 => x"57348117", -447 => x"577a762e", -448 => x"098106eb", -449 => x"38807534", -450 => x"767dff12", -451 => x"57585675", -452 => x"8024fef3", -453 => x"38fe8f39", -454 => x"8a527351", -455 => x"9fd03f80", -456 => x"0880c7d4", -457 => x"05337670", -458 => x"81055834", -459 => x"8a527351", -460 => x"9ef83f80", -461 => x"08548008", -462 => x"802effae", -463 => x"388a5273", -464 => x"519fab3f", -465 => x"800880c7", -466 => x"d4053376", -467 => x"70810558", -468 => x"348a5273", -469 => x"519ed33f", -470 => x"80085480", -471 => x"08ffb938", -472 => x"ff883974", -473 => x"527653b4", -474 => x"3dffb805", -475 => x"51949a3f", -476 => x"a33d0856", -477 => x"fedd3980", -478 => x"3d0d80c1", -479 => x"0b81b4bc", -480 => x"34800b81", -481 => x"b6980c70", -482 => x"800c823d", -483 => x"0d04ff3d", -484 => x"0d800b81", -485 => x"b4bc3352", -486 => x"527080c1", -487 => x"2e993871", -488 => x"81b69808", -489 => x"0781b698", -490 => x"0c80c20b", -491 => x"81b4c034", -492 => x"70800c83", -493 => x"3d0d0481", -494 => x"0b81b698", -495 => x"080781b6", -496 => x"980c80c2", -497 => x"0b81b4c0", -498 => x"3470800c", -499 => x"833d0d04", -500 => x"fd3d0d75", -501 => x"70088a05", -502 => x"535381b4", -503 => x"bc335170", -504 => x"80c12e8b", -505 => x"3873f338", -506 => x"70800c85", -507 => x"3d0d04ff", -508 => x"127081b4", -509 => x"b8083174", -510 => x"0c800c85", -511 => x"3d0d04fc", -512 => x"3d0d81b4", -513 => x"c4085574", -514 => x"802e8c38", -515 => x"76750871", -516 => x"0c81b4c4", -517 => x"0856548c", -518 => x"155381b4", -519 => x"b808528a", -520 => x"518fd43f", -521 => x"73800c86", -522 => x"3d0d04fb", -523 => x"3d0d7770", -524 => x"085656b0", -525 => x"5381b4c4", -526 => x"08527451", -527 => x"ab943f85", -528 => x"0b8c170c", -529 => x"850b8c16", -530 => x"0c750875", -531 => x"0c81b4c4", -532 => x"08547380", -533 => x"2e8a3873", -534 => x"08750c81", -535 => x"b4c40854", -536 => x"8c145381", -537 => x"b4b80852", -538 => x"8a518f8b", -539 => x"3f841508", -540 => x"ad38860b", -541 => x"8c160c88", -542 => x"15528816", -543 => x"08518e97", -544 => x"3f81b4c4", -545 => x"08700876", -546 => x"0c548c15", -547 => x"7054548a", -548 => x"52730851", -549 => x"8ee13f73", -550 => x"800c873d", -551 => x"0d047508", -552 => x"54b05373", -553 => x"527551aa", -554 => x"a93f7380", -555 => x"0c873d0d", -556 => x"04d93d0d", -557 => x"b0519dcf", -558 => x"3f800881", -559 => x"b4b40cb0", -560 => x"519dc43f", -561 => x"800881b4", -562 => x"c40c81b4", -563 => x"b4088008", -564 => x"0c800b80", -565 => x"0884050c", -566 => x"820b8008", -567 => x"88050ca8", -568 => x"0b80088c", -569 => x"050c9f53", -570 => x"80c7e052", -571 => x"80089005", -572 => x"51a9df3f", -573 => x"a13d5e9f", -574 => x"5380c880", -575 => x"527d51a9", -576 => x"d13f8a0b", -577 => x"80f2f80c", -578 => x"80d2a451", -579 => x"f9be3f80", -580 => x"c8a051f9", -581 => x"b73f80d2", -582 => x"a451f9b0", -583 => x"3f80d684", -584 => x"08802e89", -585 => x"d33880c8", -586 => x"d051f9a0", -587 => x"3f80d2a4", -588 => x"51f9993f", -589 => x"80d68008", -590 => x"5280c8fc", -591 => x"51f98d3f", -592 => x"80e69451", -593 => x"b2ff3f81", -594 => x"0b9a3d5e", -595 => x"5b800b80", -596 => x"d6800825", -597 => x"82d43890", -598 => x"3d5f80c1", -599 => x"0b81b4bc", -600 => x"34810b81", -601 => x"b6980c80", -602 => x"c20b81b4", -603 => x"c0348240", -604 => x"835a9f53", -605 => x"80c9ac52", -606 => x"7c51a8d6", -607 => x"3f814180", -608 => x"7d537e52", -609 => x"568e943f", -610 => x"8008762e", -611 => x"09810683", -612 => x"38815675", -613 => x"81b6980c", -614 => x"7f705856", -615 => x"758325a2", -616 => x"38751010", -617 => x"16fd0542", -618 => x"a93dffa4", -619 => x"05538352", -620 => x"76518cc3", -621 => x"3f7f8105", -622 => x"70417058", -623 => x"56837624", -624 => x"e0386154", -625 => x"755380e6", -626 => x"9c5281b4", -627 => x"d0518cb7", -628 => x"3f81b4c4", -629 => x"08700858", -630 => x"58b05377", -631 => x"527651a7", -632 => x"f13f850b", -633 => x"8c190c85", -634 => x"0b8c180c", -635 => x"7708770c", -636 => x"81b4c408", -637 => x"5675802e", -638 => x"8a387508", -639 => x"770c81b4", -640 => x"c408568c", -641 => x"165381b4", -642 => x"b808528a", -643 => x"518be83f", -644 => x"84170887", -645 => x"ea38860b", -646 => x"8c180c88", -647 => x"17528818", -648 => x"08518af3", -649 => x"3f81b4c4", -650 => x"08700878", -651 => x"0c568c17", -652 => x"7054598a", -653 => x"52780851", -654 => x"8bbd3f80", -655 => x"c10b81b4", -656 => x"c0335757", -657 => x"767626a2", -658 => x"3880c352", -659 => x"76518ca1", -660 => x"3f800861", -661 => x"2e89e438", -662 => x"81177081", -663 => x"ff0681b4", -664 => x"c0335858", -665 => x"58757727", -666 => x"e0387960", -667 => x"29627054", -668 => x"71535b59", -669 => x"98b43f80", -670 => x"0840787a", -671 => x"31708729", -672 => x"80083180", -673 => x"088a0581", -674 => x"b4bc3381", -675 => x"b4b8085e", -676 => x"5b525a56", -677 => x"7780c12e", -678 => x"89ce387b", -679 => x"f738811b", -680 => x"5b80d680", -681 => x"087b25fd", -682 => x"b13881b4", -683 => x"ac51b095", -684 => x"3f80c9cc", -685 => x"51f6953f", -686 => x"80d2a451", -687 => x"f68e3f80", -688 => x"c9dc51f6", -689 => x"873f80d2", -690 => x"a451f680", -691 => x"3f81b4b8", -692 => x"085280ca", -693 => x"9451f5f4", -694 => x"3f855280", -695 => x"cab051f5", -696 => x"eb3f81b6", -697 => x"98085280", -698 => x"cacc51f5", -699 => x"df3f8152", -700 => x"80cab051", -701 => x"f5d63f81", -702 => x"b4bc3352", -703 => x"80cae851", -704 => x"f5ca3f80", -705 => x"c15280cb", -706 => x"8451f5c0", -707 => x"3f81b4c0", -708 => x"335280cb", -709 => x"a051f5b4", -710 => x"3f80c252", -711 => x"80cb8451", -712 => x"f5aa3f81", -713 => x"b4f00852", -714 => x"80cbbc51", -715 => x"f59e3f87", -716 => x"5280cab0", -717 => x"51f5953f", -718 => x"80f2f808", -719 => x"5280cbd8", -720 => x"51f5893f", -721 => x"80cbf451", -722 => x"f5823f80", -723 => x"cca051f4", -724 => x"fb3f81b4", -725 => x"c4087008", -726 => x"535a80cc", -727 => x"ac51f4ec", -728 => x"3f80ccc8", -729 => x"51f4e53f", -730 => x"81b4c408", -731 => x"84110853", -732 => x"5680ccfc", -733 => x"51f4d53f", -734 => x"805280ca", -735 => x"b051f4cc", -736 => x"3f81b4c4", -737 => x"08881108", -738 => x"535880cd", -739 => x"9851f4bc", -740 => x"3f825280", -741 => x"cab051f4", -742 => x"b33f81b4", -743 => x"c4088c11", -744 => x"08535780", -745 => x"cdb451f4", -746 => x"a33f9152", -747 => x"80cab051", -748 => x"f49a3f81", -749 => x"b4c40890", -750 => x"055280cd", -751 => x"d051f48c", -752 => x"3f80cdec", -753 => x"51f4853f", -754 => x"80cea451", -755 => x"f3fe3f81", -756 => x"b4b40870", -757 => x"08535f80", -758 => x"ccac51f3", -759 => x"ef3f80ce", -760 => x"b851f3e8", -761 => x"3f81b4b4", -762 => x"08841108", -763 => x"535b80cc", -764 => x"fc51f3d8", -765 => x"3f805280", -766 => x"cab051f3", -767 => x"cf3f81b4", -768 => x"b4088811", -769 => x"08535c80", -770 => x"cd9851f3", -771 => x"bf3f8152", -772 => x"80cab051", -773 => x"f3b63f81", -774 => x"b4b4088c", -775 => x"1108535a", -776 => x"80cdb451", -777 => x"f3a63f92", -778 => x"5280cab0", -779 => x"51f39d3f", -780 => x"81b4b408", -781 => x"90055280", -782 => x"cdd051f3", -783 => x"8f3f80cd", -784 => x"ec51f388", -785 => x"3f7f5280", -786 => x"cef851f2", -787 => x"ff3f8552", -788 => x"80cab051", -789 => x"f2f63f78", -790 => x"5280cf94", -791 => x"51f2ed3f", -792 => x"8d5280ca", -793 => x"b051f2e4", -794 => x"3f615280", -795 => x"cfb051f2", -796 => x"db3f8752", -797 => x"80cab051", -798 => x"f2d23f60", -799 => x"5280cfcc", -800 => x"51f2c93f", -801 => x"815280ca", -802 => x"b051f2c0", -803 => x"3f7d5280", -804 => x"cfe851f2", -805 => x"b73f80d0", -806 => x"8451f2b0", -807 => x"3f7c5280", -808 => x"d0bc51f2", -809 => x"a73f80d0", -810 => x"d851f2a0", -811 => x"3f80d2a4", -812 => x"51f2993f", -813 => x"81b4ac08", -814 => x"81b4b008", -815 => x"80e69408", -816 => x"80e69808", -817 => x"72713170", -818 => x"74267574", -819 => x"31707231", -820 => x"80e68c0c", -821 => x"444480e6", -822 => x"900c80e6", -823 => x"90085680", -824 => x"d190555c", -825 => x"595758f1", -826 => x"e33f80e6", -827 => x"8c085680", -828 => x"762582a3", -829 => x"3880d680", -830 => x"0870719f", -831 => x"2c9a3d53", -832 => x"565680e6", -833 => x"8c0880e6", -834 => x"90084153", -835 => x"7f547052", -836 => x"5a89eb3f", -837 => x"66685f80", -838 => x"e5fc0c7d", -839 => x"80e6800c", -840 => x"80d68008", -841 => x"709f2c58", -842 => x"568058bd", -843 => x"84c07855", -844 => x"55765275", -845 => x"53795187", -846 => x"d13f953d", -847 => x"80e68c08", -848 => x"80e69008", -849 => x"41557f56", -850 => x"67694053", -851 => x"7e547052", -852 => x"5c89ab3f", -853 => x"64665e80", -854 => x"e6840c7c", -855 => x"80e6880c", -856 => x"80d68008", -857 => x"709f2c40", -858 => x"58805783", -859 => x"dceb9480", -860 => x"7755557e", -861 => x"5277537b", -862 => x"51878f3f", -863 => x"64665d5b", -864 => x"805e8ddd", -865 => x"7e555580", -866 => x"e68c0880", -867 => x"e6900859", -868 => x"52775379", -869 => x"5186f33f", -870 => x"66684054", -871 => x"7e557a52", -872 => x"7b53a93d", -873 => x"ffa80551", -874 => x"88d43f62", -875 => x"645e81b4", -876 => x"c80c7c81", -877 => x"b4cc0c80", -878 => x"d1a051f0", -879 => x"8f3f80e6", -880 => x"80085280", -881 => x"d1d051f0", -882 => x"833f80d1", -883 => x"d851effc", -884 => x"3f80e688", -885 => x"085280d1", -886 => x"d051eff0", -887 => x"3f81b4cc", -888 => x"085280d2", -889 => x"8851efe4", -890 => x"3f80d2a4", -891 => x"51efdd3f", -892 => x"800b800c", -893 => x"a93d0d04", -894 => x"80d2a851", -895 => x"f6ac3977", -896 => x"0857b053", -897 => x"76527751", -898 => x"9fc83f80", -899 => x"c10b81b4", -900 => x"c0335757", -901 => x"f8ae3975", -902 => x"8a3880e6", -903 => x"90088126", -904 => x"fdd33880", -905 => x"d2d851ef", -906 => x"a33f80d3", -907 => x"9051ef9c", -908 => x"3f80d2a4", -909 => x"51ef953f", -910 => x"80d68008", -911 => x"70719f2c", -912 => x"9a3d5356", -913 => x"5680e68c", -914 => x"0880e690", -915 => x"0841537f", -916 => x"5470525a", -917 => x"87a83f66", -918 => x"685f80e5", -919 => x"fc0c7d80", -920 => x"e6800c80", -921 => x"d6800870", -922 => x"9f2c5856", -923 => x"8058bd84", -924 => x"c0785555", -925 => x"76527553", -926 => x"7951858e", -927 => x"3f953d80", -928 => x"e68c0880", -929 => x"e6900841", -930 => x"557f5667", -931 => x"6940537e", -932 => x"5470525c", -933 => x"86e83f64", -934 => x"665e80e6", -935 => x"840c7c80", -936 => x"e6880c80", -937 => x"d6800870", -938 => x"9f2c4058", -939 => x"805783dc", -940 => x"eb948077", -941 => x"55557e52", -942 => x"77537b51", -943 => x"84cc3f64", -944 => x"665d5b80", -945 => x"5e8ddd7e", -946 => x"555580e6", -947 => x"8c0880e6", -948 => x"90085952", -949 => x"77537951", -950 => x"84b03f66", -951 => x"6840547e", -952 => x"557a527b", -953 => x"53a93dff", -954 => x"a8055186", -955 => x"913f6264", -956 => x"5e81b4c8", -957 => x"0c7c81b4", -958 => x"cc0c80d1", -959 => x"a051edcc", -960 => x"3f80e680", -961 => x"085280d1", -962 => x"d051edc0", -963 => x"3f80d1d8", -964 => x"51edb93f", -965 => x"80e68808", -966 => x"5280d1d0", -967 => x"51edad3f", -968 => x"81b4cc08", -969 => x"5280d288", -970 => x"51eda13f", -971 => x"80d2a451", -972 => x"ed9a3f80", -973 => x"0b800ca9", -974 => x"3d0d04a9", -975 => x"3dffa005", -976 => x"52805180", -977 => x"d23f9f53", -978 => x"80d3b052", -979 => x"7c519d82", -980 => x"3f7a7b81", -981 => x"b4b80c81", -982 => x"187081ff", -983 => x"0681b4c0", -984 => x"33595959", -985 => x"5af5fe39", -986 => x"ff16707b", -987 => x"31600c5c", -988 => x"800b811c", -989 => x"5c5c80d6", -990 => x"80087b25", -991 => x"f3dc38f6", -992 => x"a939ff3d", -993 => x"0d738232", -994 => x"70307072", -995 => x"07802580", -996 => x"0c525283", -997 => x"3d0d04fe", -998 => x"3d0d7476", -999 => x"71535452", -1000 => x"71822e83", -1001 => x"38835171", -1002 => x"812e9a38", -1003 => x"8172269f", -1004 => x"3871822e", -1005 => x"b8387184", -1006 => x"2ea93870", -1007 => x"730c7080", -1008 => x"0c843d0d", -1009 => x"0480e40b", -1010 => x"81b4b808", -1011 => x"258b3880", -1012 => x"730c7080", -1013 => x"0c843d0d", -1014 => x"0483730c", -1015 => x"70800c84", -1016 => x"3d0d0482", -1017 => x"730c7080", -1018 => x"0c843d0d", -1019 => x"0481730c", -1020 => x"70800c84", -1021 => x"3d0d0480", -1022 => x"3d0d7474", -1023 => x"14820571", -1024 => x"0c800c82", -1025 => x"3d0d04f7", -1026 => x"3d0d7b7d", -1027 => x"7f618512", -1028 => x"70822b75", -1029 => x"11707471", -1030 => x"70840553", -1031 => x"0c5a5a5d", -1032 => x"5b760c79", -1033 => x"80f8180c", -1034 => x"79861252", -1035 => x"57585a5a", -1036 => x"76762499", -1037 => x"3876b329", -1038 => x"822b7911", -1039 => x"51537673", -1040 => x"70840555", -1041 => x"0c811454", -1042 => x"757425f2", -1043 => x"387681cc", -1044 => x"2919fc11", -1045 => x"088105fc", -1046 => x"120c7a19", -1047 => x"70089fa0", -1048 => x"130c5856", -1049 => x"850b81b4", -1050 => x"b80c7580", -1051 => x"0c8b3d0d", -1052 => x"04fe3d0d", -1053 => x"02930533", -1054 => x"51800284", -1055 => x"05970533", -1056 => x"54527073", -1057 => x"2e883871", -1058 => x"800c843d", -1059 => x"0d047081", -1060 => x"b4bc3481", -1061 => x"0b800c84", -1062 => x"3d0d04f8", -1063 => x"3d0d7a7c", -1064 => x"5956820b", -1065 => x"83195555", -1066 => x"74167033", -1067 => x"75335b51", -1068 => x"5372792e", -1069 => x"80c63880", -1070 => x"c10b8116", -1071 => x"81165656", -1072 => x"57827525", -1073 => x"e338ffa9", -1074 => x"177081ff", -1075 => x"06555973", -1076 => x"82268338", -1077 => x"87558153", -1078 => x"7680d22e", -1079 => x"98387752", -1080 => x"75519bc3", -1081 => x"3f805372", -1082 => x"80082589", -1083 => x"38871581", -1084 => x"b4b80c81", -1085 => x"5372800c", -1086 => x"8a3d0d04", -1087 => x"7281b4bc", -1088 => x"34827525", -1089 => x"ffa238ff", -1090 => x"bd39ef3d", -1091 => x"0d636567", -1092 => x"5b427943", -1093 => x"67695940", -1094 => x"77415a80", -1095 => x"5d805e61", -1096 => x"7083ffff", -1097 => x"0671902a", -1098 => x"627083ff", -1099 => x"ff067190", -1100 => x"2a747229", -1101 => x"74732975", -1102 => x"73297774", -1103 => x"2973902a", -1104 => x"05721151", -1105 => x"5856535f", -1106 => x"5a575a58", -1107 => x"55587373", -1108 => x"27863884", -1109 => x"80801656", -1110 => x"73902a16", -1111 => x"5b7883ff", -1112 => x"ff067484", -1113 => x"80802905", -1114 => x"5c7a7c5a", -1115 => x"5d785e77", -1116 => x"7f296178", -1117 => x"29057d05", -1118 => x"5d7c7e56", -1119 => x"7a0c7484", -1120 => x"1b0c7980", -1121 => x"0c933d0d", -1122 => x"04f93d0d", -1123 => x"797b7d54", -1124 => x"58725977", -1125 => x"30797030", -1126 => x"7072079f", -1127 => x"2a737131", -1128 => x"5a525977", -1129 => x"7956730c", -1130 => x"53738413", -1131 => x"0c54800c", -1132 => x"893d0d04", -1133 => x"f93d0d79", -1134 => x"7b7d7f56", -1135 => x"54525472", -1136 => x"802ea038", -1137 => x"70577158", -1138 => x"a0733152", -1139 => x"807225a1", -1140 => x"38777074", -1141 => x"2b577073", -1142 => x"2a78752b", -1143 => x"07565174", -1144 => x"76535170", -1145 => x"740c7184", -1146 => x"150c7380", -1147 => x"0c893d0d", -1148 => x"04805677", -1149 => x"72302b55", -1150 => x"74765351", -1151 => x"e639e43d", -1152 => x"0d6ea13d", -1153 => x"08a33d08", -1154 => x"59575f80", -1155 => x"764d774e", -1156 => x"a33d08a5", -1157 => x"3d08574b", -1158 => x"754c5e7d", -1159 => x"6c2486fb", -1160 => x"38806a24", -1161 => x"878f3869", -1162 => x"6b58566b", -1163 => x"6d5d467b", -1164 => x"47754476", -1165 => x"45646468", -1166 => x"685c5c56", -1167 => x"567481e7", -1168 => x"38787627", -1169 => x"82c73875", -1170 => x"81ff2683", -1171 => x"2b5583ff", -1172 => x"ff76278c", -1173 => x"389055fe", -1174 => x"800a7627", -1175 => x"83389855", -1176 => x"75752a80", -1177 => x"d3d00570", -1178 => x"33a07731", -1179 => x"71315755", -1180 => x"5774802e", -1181 => x"95387575", -1182 => x"2ba07631", -1183 => x"7a772b7c", -1184 => x"722a077c", -1185 => x"782b5d5b", -1186 => x"59567590", -1187 => x"2a7683ff", -1188 => x"ff067154", -1189 => x"7a535957", -1190 => x"88803f80", -1191 => x"085b87ea", -1192 => x"3f800880", -1193 => x"0879297c", -1194 => x"902b7c90", -1195 => x"2a075656", -1196 => x"59737527", -1197 => x"94388008", -1198 => x"ff057615", -1199 => x"55597574", -1200 => x"26873874", -1201 => x"742687b9", -1202 => x"38765273", -1203 => x"75315187", -1204 => x"c93f8008", -1205 => x"5587b33f", -1206 => x"80088008", -1207 => x"79297b83", -1208 => x"ffff0677", -1209 => x"902b0756", -1210 => x"59577378", -1211 => x"27963880", -1212 => x"08ff0576", -1213 => x"15555775", -1214 => x"74268938", -1215 => x"77742677", -1216 => x"71315856", -1217 => x"78902b77", -1218 => x"0758805b", -1219 => x"7a407741", -1220 => x"7f615654", -1221 => x"7d80d938", -1222 => x"737f0c74", -1223 => x"7f84050c", -1224 => x"7e800c9e", -1225 => x"3d0d0480", -1226 => x"705c5874", -1227 => x"7926dd38", -1228 => x"7481ff26", -1229 => x"832b5774", -1230 => x"83ffff26", -1231 => x"82a53874", -1232 => x"772a80d3", -1233 => x"d0057033", -1234 => x"a0793171", -1235 => x"31595c5d", -1236 => x"7682b338", -1237 => x"76547479", -1238 => x"27833881", -1239 => x"54797627", -1240 => x"74075981", -1241 => x"5878ffa2", -1242 => x"38765880", -1243 => x"5bff9d39", -1244 => x"73527453", -1245 => x"9e3de805", -1246 => x"51fc8e3f", -1247 => x"6769567f", -1248 => x"0c747f84", -1249 => x"050c7e80", -1250 => x"0c9e3d0d", -1251 => x"0475802e", -1252 => x"81c43875", -1253 => x"81ff2683", -1254 => x"2b5583ff", -1255 => x"ff76278c", -1256 => x"389055fe", -1257 => x"800a7627", -1258 => x"83389855", -1259 => x"75752a80", -1260 => x"d3d00570", -1261 => x"33a07731", -1262 => x"7131575e", -1263 => x"54748491", -1264 => x"38787631", -1265 => x"54817690", -1266 => x"2a7783ff", -1267 => x"ff065f5d", -1268 => x"5b7b5273", -1269 => x"5185c33f", -1270 => x"80085785", -1271 => x"ad3f8008", -1272 => x"80087e29", -1273 => x"78902b7c", -1274 => x"902a0756", -1275 => x"56597375", -1276 => x"27943880", -1277 => x"08ff0576", -1278 => x"15555975", -1279 => x"74268738", -1280 => x"74742684", -1281 => x"f3387b52", -1282 => x"73753151", -1283 => x"858c3f80", -1284 => x"085584f6", -1285 => x"3f800880", -1286 => x"087e297b", -1287 => x"83ffff06", -1288 => x"77902b07", -1289 => x"56595773", -1290 => x"78279638", -1291 => x"8008ff05", -1292 => x"76155557", -1293 => x"75742689", -1294 => x"38777426", -1295 => x"77713158", -1296 => x"5a78902b", -1297 => x"77077b41", -1298 => x"417f6156", -1299 => x"547d802e", -1300 => x"fdc638fe", -1301 => x"9b397552", -1302 => x"815184ae", -1303 => x"3f800856", -1304 => x"feb13990", -1305 => x"57fe800a", -1306 => x"7527fdd3", -1307 => x"38987571", -1308 => x"2a80d3d0", -1309 => x"057033a0", -1310 => x"73317131", -1311 => x"535d5e57", -1312 => x"76802efd", -1313 => x"cf38a077", -1314 => x"3175782b", -1315 => x"77722a07", -1316 => x"77792b7b", -1317 => x"7a2b7d74", -1318 => x"2a077d7b", -1319 => x"2b73902a", -1320 => x"7483ffff", -1321 => x"0671597f", -1322 => x"772a585e", -1323 => x"5c415f58", -1324 => x"5c5483e6", -1325 => x"3f800854", -1326 => x"83d03f80", -1327 => x"08800879", -1328 => x"2975902b", -1329 => x"7e902a07", -1330 => x"56565973", -1331 => x"75279938", -1332 => x"8008ff05", -1333 => x"7b155559", -1334 => x"7a74268c", -1335 => x"38737527", -1336 => x"8738ff19", -1337 => x"7b155559", -1338 => x"76527375", -1339 => x"315183aa", -1340 => x"3f800855", -1341 => x"83943f80", -1342 => x"08800879", -1343 => x"297d83ff", -1344 => x"ff067790", -1345 => x"2b075659", -1346 => x"57737827", -1347 => x"99388008", -1348 => x"ff057b15", -1349 => x"55577a74", -1350 => x"268c3873", -1351 => x"78278738", -1352 => x"ff177b15", -1353 => x"55577378", -1354 => x"3179902b", -1355 => x"78077083", -1356 => x"ffff0671", -1357 => x"902a7983", -1358 => x"ffff067a", -1359 => x"902a7372", -1360 => x"29737329", -1361 => x"74732976", -1362 => x"74297390", -1363 => x"2a057205", -1364 => x"5755435f", -1365 => x"5b585a57", -1366 => x"595a747c", -1367 => x"27863884", -1368 => x"80801757", -1369 => x"74902a17", -1370 => x"7983ffff", -1371 => x"06768480", -1372 => x"80290557", -1373 => x"57767a26", -1374 => x"9a38767a", -1375 => x"32703070", -1376 => x"72078025", -1377 => x"565a5b7c", -1378 => x"7627fafe", -1379 => x"3873802e", -1380 => x"faf838ff", -1381 => x"1858805b", -1382 => x"faf239ff", -1383 => x"76537754", -1384 => x"9f3de805", -1385 => x"525ef7e1", -1386 => x"3f676957", -1387 => x"4c754d69", -1388 => x"8025f8f3", -1389 => x"387d096a", -1390 => x"6c5c537a", -1391 => x"549f3de8", -1392 => x"05525ef7", -1393 => x"c43f6769", -1394 => x"714c704d", -1395 => x"5856f8db", -1396 => x"39a07531", -1397 => x"76762b7a", -1398 => x"772b7c73", -1399 => x"2a077c78", -1400 => x"2b72902a", -1401 => x"7383ffff", -1402 => x"0671587e", -1403 => x"762a5742", -1404 => x"405d5d57", -1405 => x"5881a33f", -1406 => x"80085781", -1407 => x"8d3f8008", -1408 => x"80087e29", -1409 => x"78902b7d", -1410 => x"902a0756", -1411 => x"56597375", -1412 => x"27993880", -1413 => x"08ff0576", -1414 => x"15555975", -1415 => x"74268c38", -1416 => x"73752787", -1417 => x"38ff1976", -1418 => x"1555597b", -1419 => x"52737531", -1420 => x"5180e73f", -1421 => x"80085580", -1422 => x"d13f8008", -1423 => x"80087e29", -1424 => x"7c83ffff", -1425 => x"06707890", -1426 => x"2b075156", -1427 => x"58587377", -1428 => x"27993880", -1429 => x"08ff0576", -1430 => x"15555875", -1431 => x"74268c38", -1432 => x"73772787", -1433 => x"38ff1876", -1434 => x"15555878", -1435 => x"902b7807", -1436 => x"74783155", -1437 => x"5bfada39", -1438 => x"ff197615", -1439 => x"5559fb86", -1440 => x"39ff1976", -1441 => x"155559f8", -1442 => x"c0397070", -1443 => x"70805375", -1444 => x"52745181", -1445 => x"913f5050", -1446 => x"50047070", -1447 => x"70815375", -1448 => x"52745181", -1449 => x"813f5050", -1450 => x"5004fb3d", -1451 => x"0d777955", -1452 => x"55805675", -1453 => x"7524ab38", -1454 => x"8074249d", -1455 => x"38805373", -1456 => x"52745180", -1457 => x"e13f8008", -1458 => x"5475802e", -1459 => x"85388008", -1460 => x"30547380", -1461 => x"0c873d0d", -1462 => x"04733076", -1463 => x"81325754", -1464 => x"dc397430", -1465 => x"55815673", -1466 => x"8025d238", -1467 => x"ec39fa3d", -1468 => x"0d787a57", -1469 => x"55805776", -1470 => x"7524a438", -1471 => x"759f2c54", -1472 => x"81537574", -1473 => x"32743152", -1474 => x"74519b3f", -1475 => x"80085476", -1476 => x"802e8538", -1477 => x"80083054", -1478 => x"73800c88", -1479 => x"3d0d0474", -1480 => x"30558157", -1481 => x"d739fc3d", -1482 => x"0d767853", -1483 => x"54815380", -1484 => x"74732652", -1485 => x"5572802e", -1486 => x"98387080", -1487 => x"2eab3880", -1488 => x"7224a638", -1489 => x"71107310", -1490 => x"75722653", -1491 => x"545272ea", -1492 => x"38735178", -1493 => x"83387451", -1494 => x"70800c86", -1495 => x"3d0d0472", -1496 => x"0a100a72", -1497 => x"0a100a53", -1498 => x"5372802e", -1499 => x"e4387174", -1500 => x"26ed3873", -1501 => x"72317574", -1502 => x"07740a10", -1503 => x"0a740a10", -1504 => x"0a555556", -1505 => x"54e33970", -1506 => x"70735280", -1507 => x"decc0851", -1508 => x"933f5050", -1509 => x"04707073", -1510 => x"5280decc", -1511 => x"085190ce", -1512 => x"3f505004", -1513 => x"f43d0d7e", -1514 => x"608b1170", -1515 => x"f8065b55", -1516 => x"555d7296", -1517 => x"26833890", -1518 => x"58807824", -1519 => x"74792607", -1520 => x"55805474", -1521 => x"742e0981", -1522 => x"0680ca38", -1523 => x"7c518d9e", -1524 => x"3f7783f7", -1525 => x"2680c538", -1526 => x"77832a70", -1527 => x"10101080", -1528 => x"d6c4058c", -1529 => x"11085858", -1530 => x"5475772e", -1531 => x"81f03884", -1532 => x"1608fc06", -1533 => x"8c170888", -1534 => x"1808718c", -1535 => x"120c8812", -1536 => x"0c5b7605", -1537 => x"84110881", -1538 => x"0784120c", -1539 => x"537c518c", -1540 => x"de3f8816", -1541 => x"5473800c", -1542 => x"8e3d0d04", -1543 => x"77892a78", -1544 => x"832a5854", -1545 => x"73802ebf", -1546 => x"3877862a", -1547 => x"b8055784", -1548 => x"7427b438", -1549 => x"80db1457", -1550 => x"947427ab", -1551 => x"38778c2a", -1552 => x"80ee0557", -1553 => x"80d47427", -1554 => x"9e38778f", -1555 => x"2a80f705", -1556 => x"5782d474", -1557 => x"27913877", -1558 => x"922a80fc", -1559 => x"05578ad4", -1560 => x"74278438", -1561 => x"80fe5776", -1562 => x"10101080", -1563 => x"d6c4058c", -1564 => x"11085653", -1565 => x"74732ea3", -1566 => x"38841508", -1567 => x"fc067079", -1568 => x"31555673", -1569 => x"8f2488e4", -1570 => x"38738025", -1571 => x"88e6388c", -1572 => x"15085574", -1573 => x"732e0981", -1574 => x"06df3881", -1575 => x"175980d6", -1576 => x"d4085675", -1577 => x"80d6cc2e", -1578 => x"82cc3884", -1579 => x"1608fc06", -1580 => x"70793155", -1581 => x"55738f24", -1582 => x"bb3880d6", -1583 => x"cc0b80d6", -1584 => x"d80c80d6", -1585 => x"cc0b80d6", -1586 => x"d40c8074", -1587 => x"2480db38", -1588 => x"74168411", -1589 => x"08810784", -1590 => x"120c53fe", -1591 => x"b0398816", -1592 => x"8c110857", -1593 => x"5975792e", -1594 => x"098106fe", -1595 => x"82388214", -1596 => x"59ffab39", -1597 => x"77167881", -1598 => x"0784180c", -1599 => x"7080d6d8", -1600 => x"0c7080d6", -1601 => x"d40c80d6", -1602 => x"cc0b8c12", -1603 => x"0c8c1108", -1604 => x"88120c74", -1605 => x"81078412", -1606 => x"0c740574", -1607 => x"710c5b7c", -1608 => x"518acc3f", -1609 => x"881654fd", -1610 => x"ec3983ff", -1611 => x"75278391", -1612 => x"3874892a", -1613 => x"75832a54", -1614 => x"5473802e", -1615 => x"bf387486", -1616 => x"2ab80553", -1617 => x"847427b4", -1618 => x"3880db14", -1619 => x"53947427", -1620 => x"ab38748c", -1621 => x"2a80ee05", -1622 => x"5380d474", -1623 => x"279e3874", -1624 => x"8f2a80f7", -1625 => x"055382d4", -1626 => x"74279138", -1627 => x"74922a80", -1628 => x"fc05538a", -1629 => x"d4742784", -1630 => x"3880fe53", -1631 => x"72101010", -1632 => x"80d6c405", -1633 => x"88110855", -1634 => x"5773772e", -1635 => x"868b3884", -1636 => x"1408fc06", -1637 => x"5b747b27", -1638 => x"8d388814", -1639 => x"08547377", -1640 => x"2e098106", -1641 => x"ea388c14", -1642 => x"0880d6c4", -1643 => x"0b840508", -1644 => x"718c190c", -1645 => x"7588190c", -1646 => x"7788130c", -1647 => x"5c57758c", -1648 => x"150c7853", -1649 => x"80792483", -1650 => x"98387282", -1651 => x"2c81712b", -1652 => x"5656747b", -1653 => x"2680ca38", -1654 => x"7a750657", -1655 => x"7682a338", -1656 => x"78fc0684", -1657 => x"05597410", -1658 => x"707c0655", -1659 => x"55738292", -1660 => x"38841959", -1661 => x"f13980d6", -1662 => x"c40b8405", -1663 => x"0879545b", -1664 => x"788025c6", -1665 => x"3882da39", -1666 => x"74097b06", -1667 => x"7080d6c4", -1668 => x"0b84050c", -1669 => x"5b741055", -1670 => x"747b2685", -1671 => x"387485bc", -1672 => x"3880d6c4", -1673 => x"0b880508", -1674 => x"70841208", -1675 => x"fc06707b", -1676 => x"317b7226", -1677 => x"8f722507", -1678 => x"5d575c5c", -1679 => x"5578802e", -1680 => x"80d93879", -1681 => x"1580d6bc", -1682 => x"08199011", -1683 => x"59545680", -1684 => x"d6b808ff", -1685 => x"2e8838a0", -1686 => x"8f13e080", -1687 => x"06577652", -1688 => x"7c51888c", -1689 => x"3f800854", -1690 => x"8008ff2e", -1691 => x"90388008", -1692 => x"762782a7", -1693 => x"387480d6", -1694 => x"c42e829f", -1695 => x"3880d6c4", -1696 => x"0b880508", -1697 => x"55841508", -1698 => x"fc067079", -1699 => x"31797226", -1700 => x"8f722507", -1701 => x"5d555a7a", -1702 => x"83f23877", -1703 => x"81078416", -1704 => x"0c771570", -1705 => x"80d6c40b", -1706 => x"88050c74", -1707 => x"81078412", -1708 => x"0c567c51", -1709 => x"87b93f88", -1710 => x"15547380", -1711 => x"0c8e3d0d", -1712 => x"0474832a", -1713 => x"70545480", -1714 => x"7424819b", -1715 => x"3872822c", -1716 => x"81712b80", -1717 => x"d6c80807", -1718 => x"7080d6c4", -1719 => x"0b84050c", -1720 => x"75101010", -1721 => x"80d6c405", -1722 => x"88110871", -1723 => x"8c1b0c70", -1724 => x"881b0c79", -1725 => x"88130c57", -1726 => x"555c5575", -1727 => x"8c150cfd", -1728 => x"c1397879", -1729 => x"10101080", -1730 => x"d6c40570", -1731 => x"565b5c8c", -1732 => x"14085675", -1733 => x"742ea338", -1734 => x"841608fc", -1735 => x"06707931", -1736 => x"5853768f", -1737 => x"2483f138", -1738 => x"76802584", -1739 => x"af388c16", -1740 => x"08567574", -1741 => x"2e098106", -1742 => x"df388814", -1743 => x"811a7083", -1744 => x"06555a54", -1745 => x"72c9387b", -1746 => x"83065675", -1747 => x"802efdb8", -1748 => x"38ff1cf8", -1749 => x"1b5b5c88", -1750 => x"1a087a2e", -1751 => x"ea38fdb5", -1752 => x"39831953", -1753 => x"fce43983", -1754 => x"1470822c", -1755 => x"81712b80", -1756 => x"d6c80807", -1757 => x"7080d6c4", -1758 => x"0b84050c", -1759 => x"76101010", -1760 => x"80d6c405", -1761 => x"88110871", -1762 => x"8c1c0c70", -1763 => x"881c0c7a", -1764 => x"88130c58", -1765 => x"535d5653", -1766 => x"fee13980", -1767 => x"d6880817", -1768 => x"59800876", -1769 => x"2e818b38", -1770 => x"80d6b808", -1771 => x"ff2e848e", -1772 => x"38737631", -1773 => x"1980d688", -1774 => x"0c738706", -1775 => x"70565372", -1776 => x"802e8838", -1777 => x"88733170", -1778 => x"15555576", -1779 => x"149fff06", -1780 => x"a0807131", -1781 => x"1670547e", -1782 => x"53515385", -1783 => x"933f8008", -1784 => x"568008ff", -1785 => x"2e819e38", -1786 => x"80d68808", -1787 => x"137080d6", -1788 => x"880c7475", -1789 => x"80d6c40b", -1790 => x"88050c77", -1791 => x"76311581", -1792 => x"07555659", -1793 => x"7a80d6c4", -1794 => x"2e83c038", -1795 => x"798f2682", -1796 => x"ef38810b", -1797 => x"84150c84", -1798 => x"1508fc06", -1799 => x"70793179", -1800 => x"72268f72", -1801 => x"25075d55", -1802 => x"5a7a802e", -1803 => x"fced3880", -1804 => x"db398008", -1805 => x"9fff0655", -1806 => x"74feed38", -1807 => x"7880d688", -1808 => x"0c80d6c4", -1809 => x"0b880508", -1810 => x"7a188107", -1811 => x"84120c55", -1812 => x"80d6b408", -1813 => x"79278638", -1814 => x"7880d6b4", -1815 => x"0c80d6b0", -1816 => x"087927fc", -1817 => x"a0387880", -1818 => x"d6b00c84", -1819 => x"1508fc06", -1820 => x"70793179", -1821 => x"72268f72", -1822 => x"25075d55", -1823 => x"5a7a802e", -1824 => x"fc993888", -1825 => x"39807457", -1826 => x"53fedd39", -1827 => x"7c5183df", -1828 => x"3f800b80", -1829 => x"0c8e3d0d", -1830 => x"04807324", -1831 => x"a5387282", -1832 => x"2c81712b", -1833 => x"80d6c808", -1834 => x"077080d6", -1835 => x"c40b8405", -1836 => x"0c5c5a76", -1837 => x"8c170c73", -1838 => x"88170c75", -1839 => x"88180cf9", -1840 => x"fd398313", -1841 => x"70822c81", -1842 => x"712b80d6", -1843 => x"c8080770", -1844 => x"80d6c40b", -1845 => x"84050c5d", -1846 => x"5b53d839", -1847 => x"7a75065c", -1848 => x"7bfc9f38", -1849 => x"84197510", -1850 => x"5659f139", -1851 => x"ff178105", -1852 => x"59f7ab39", -1853 => x"8c150888", -1854 => x"1608718c", -1855 => x"120c8812", -1856 => x"0c597515", -1857 => x"84110881", -1858 => x"0784120c", -1859 => x"587c5182", -1860 => x"de3f8815", -1861 => x"54fba339", -1862 => x"77167881", -1863 => x"0784180c", -1864 => x"8c170888", -1865 => x"1808718c", -1866 => x"120c8812", -1867 => x"0c5c7080", -1868 => x"d6d80c70", -1869 => x"80d6d40c", -1870 => x"80d6cc0b", -1871 => x"8c120c8c", -1872 => x"11088812", -1873 => x"0c778107", -1874 => x"84120c77", -1875 => x"0577710c", -1876 => x"557c5182", -1877 => x"9a3f8816", -1878 => x"54f5ba39", -1879 => x"72168411", -1880 => x"08810784", -1881 => x"120c588c", -1882 => x"16088817", -1883 => x"08718c12", -1884 => x"0c88120c", -1885 => x"577c5181", -1886 => x"f63f8816", -1887 => x"54f59639", -1888 => x"7284150c", -1889 => x"f41af806", -1890 => x"70841d08", -1891 => x"81060784", -1892 => x"1d0c701c", -1893 => x"5556850b", -1894 => x"84150c85", -1895 => x"0b88150c", -1896 => x"8f7627fd", -1897 => x"ab38881b", -1898 => x"527c5184", -1899 => x"c13f80d6", -1900 => x"c40b8805", -1901 => x"0880d688", -1902 => x"085a55fd", -1903 => x"93397880", -1904 => x"d6880c73", -1905 => x"80d6b80c", -1906 => x"fbef3972", -1907 => x"84150cfc", -1908 => x"ff39fb3d", -1909 => x"0d77707a", -1910 => x"7c585553", -1911 => x"568f7527", -1912 => x"80e63872", -1913 => x"76078306", -1914 => x"517080dc", -1915 => x"38757352", -1916 => x"54707084", -1917 => x"05520874", -1918 => x"70840556", -1919 => x"0c737170", -1920 => x"84055308", -1921 => x"71708405", -1922 => x"530c7170", -1923 => x"84055308", -1924 => x"71708405", -1925 => x"530c7170", -1926 => x"84055308", -1927 => x"71708405", -1928 => x"530cf016", -1929 => x"5654748f", -1930 => x"26c73883", -1931 => x"75279538", -1932 => x"70708405", -1933 => x"52087470", -1934 => x"8405560c", -1935 => x"fc155574", -1936 => x"8326ed38", -1937 => x"73715452", -1938 => x"ff155170", -1939 => x"ff2e9838", -1940 => x"72708105", -1941 => x"54337270", -1942 => x"81055434", -1943 => x"ff115170", -1944 => x"ff2e0981", -1945 => x"06ea3875", -1946 => x"800c873d", -1947 => x"0d040404", -1948 => x"70707070", -1949 => x"800b81b6", -1950 => x"9c0c7651", -1951 => x"87cc3f80", -1952 => x"08538008", -1953 => x"ff2e8938", -1954 => x"72800c50", -1955 => x"50505004", -1956 => x"81b69c08", -1957 => x"5473802e", -1958 => x"ef387574", -1959 => x"710c5272", -1960 => x"800c5050", -1961 => x"505004fb", -1962 => x"3d0d7779", -1963 => x"70720783", -1964 => x"06535452", -1965 => x"70933871", -1966 => x"73730854", -1967 => x"56547173", -1968 => x"082e80c4", -1969 => x"38737554", -1970 => x"52713370", -1971 => x"81ff0652", -1972 => x"5470802e", -1973 => x"9d387233", -1974 => x"5570752e", -1975 => x"09810695", -1976 => x"38811281", -1977 => x"14713370", -1978 => x"81ff0654", -1979 => x"56545270", -1980 => x"e5387233", -1981 => x"557381ff", -1982 => x"067581ff", -1983 => x"06717131", -1984 => x"800c5552", -1985 => x"873d0d04", -1986 => x"7109f7fb", -1987 => x"fdff1306", -1988 => x"f8848281", -1989 => x"80065271", -1990 => x"97388414", -1991 => x"84167108", -1992 => x"54565471", -1993 => x"75082ee0", -1994 => x"38737554", -1995 => x"52ff9a39", -1996 => x"800b800c", -1997 => x"873d0d04", -1998 => x"fb3d0d77", -1999 => x"705256fe", -2000 => x"ad3f80d6", -2001 => x"c40b8805", -2002 => x"08841108", -2003 => x"fc06707b", -2004 => x"319fef05", -2005 => x"e08006e0", -2006 => x"80055255", -2007 => x"55a08075", -2008 => x"24943880", -2009 => x"527551fe", -2010 => x"873f80d6", -2011 => x"cc081453", -2012 => x"7280082e", -2013 => x"8f387551", -2014 => x"fdf53f80", -2015 => x"5372800c", -2016 => x"873d0d04", -2017 => x"74305275", -2018 => x"51fde53f", -2019 => x"8008ff2e", -2020 => x"a83880d6", -2021 => x"c40b8805", -2022 => x"08747631", -2023 => x"81078412", -2024 => x"0c5380d6", -2025 => x"88087531", -2026 => x"80d6880c", -2027 => x"7551fdbf", -2028 => x"3f810b80", -2029 => x"0c873d0d", -2030 => x"04805275", -2031 => x"51fdb13f", -2032 => x"80d6c40b", -2033 => x"88050880", -2034 => x"08713154", -2035 => x"548f7325", -2036 => x"ffa43880", -2037 => x"0880d6b8", -2038 => x"083180d6", -2039 => x"880c7281", -2040 => x"0784150c", -2041 => x"7551fd87", -2042 => x"3f8053ff", -2043 => x"9039f73d", -2044 => x"0d7b7d54", -2045 => x"5a72802e", -2046 => x"82833879", -2047 => x"51fcef3f", -2048 => x"f8138411", -2049 => x"0870fe06", -2050 => x"70138411", -2051 => x"08fc065c", -2052 => x"57585457", -2053 => x"80d6cc08", -2054 => x"742e82de", -2055 => x"38778415", -2056 => x"0c807381", -2057 => x"06565974", -2058 => x"792e81d5", -2059 => x"38771484", -2060 => x"11088106", -2061 => x"565374a0", -2062 => x"38771656", -2063 => x"7881e638", -2064 => x"88140855", -2065 => x"7480d6cc", -2066 => x"2e82f938", -2067 => x"8c140870", -2068 => x"8c170c75", -2069 => x"88120c58", -2070 => x"75810784", -2071 => x"180c7517", -2072 => x"76710c54", -2073 => x"78819138", -2074 => x"83ff7627", -2075 => x"81c83875", -2076 => x"892a7683", -2077 => x"2a545473", -2078 => x"802ebf38", -2079 => x"75862ab8", -2080 => x"05538474", -2081 => x"27b43880", -2082 => x"db145394", -2083 => x"7427ab38", -2084 => x"758c2a80", -2085 => x"ee055380", -2086 => x"d474279e", -2087 => x"38758f2a", -2088 => x"80f70553", -2089 => x"82d47427", -2090 => x"91387592", -2091 => x"2a80fc05", -2092 => x"538ad474", -2093 => x"27843880", -2094 => x"fe537210", -2095 => x"101080d6", -2096 => x"c4058811", -2097 => x"08555573", -2098 => x"752e82bf", -2099 => x"38841408", -2100 => x"fc065975", -2101 => x"79278d38", -2102 => x"88140854", -2103 => x"73752e09", -2104 => x"8106ea38", -2105 => x"8c140870", -2106 => x"8c190c74", -2107 => x"88190c77", -2108 => x"88120c55", -2109 => x"768c150c", -2110 => x"7951faf3", -2111 => x"3f8b3d0d", -2112 => x"04760877", -2113 => x"71315876", -2114 => x"05881808", -2115 => x"56567480", -2116 => x"d6cc2e80", -2117 => x"e0388c17", -2118 => x"08708c17", -2119 => x"0c758812", -2120 => x"0c53fe89", -2121 => x"39881408", -2122 => x"8c150870", -2123 => x"8c130c59", -2124 => x"88190cfe", -2125 => x"a3397583", -2126 => x"2a705454", -2127 => x"80742481", -2128 => x"98387282", -2129 => x"2c81712b", -2130 => x"80d6c808", -2131 => x"0780d6c4", -2132 => x"0b84050c", -2133 => x"74101010", -2134 => x"80d6c405", -2135 => x"88110871", -2136 => x"8c1b0c70", -2137 => x"881b0c79", -2138 => x"88130c56", -2139 => x"5a55768c", -2140 => x"150cff84", -2141 => x"398159fd", -2142 => x"b4397716", -2143 => x"73810654", -2144 => x"55729838", -2145 => x"76087771", -2146 => x"31587505", -2147 => x"8c180888", -2148 => x"1908718c", -2149 => x"120c8812", -2150 => x"0c555574", -2151 => x"81078418", -2152 => x"0c7680d6", -2153 => x"c40b8805", -2154 => x"0c80d6c0", -2155 => x"087526fe", -2156 => x"c73880d6", -2157 => x"bc085279", -2158 => x"51fafd3f", -2159 => x"7951f9af", -2160 => x"3ffeba39", -2161 => x"81778c17", -2162 => x"0c778817", -2163 => x"0c758c19", -2164 => x"0c758819", -2165 => x"0c59fd80", -2166 => x"39831470", -2167 => x"822c8171", -2168 => x"2b80d6c8", -2169 => x"080780d6", -2170 => x"c40b8405", -2171 => x"0c751010", -2172 => x"1080d6c4", -2173 => x"05881108", -2174 => x"718c1c0c", -2175 => x"70881c0c", -2176 => x"7a88130c", -2177 => x"575b5653", -2178 => x"fee43980", -2179 => x"7324a338", -2180 => x"72822c81", -2181 => x"712b80d6", -2182 => x"c8080780", -2183 => x"d6c40b84", -2184 => x"050c5874", -2185 => x"8c180c73", -2186 => x"88180c76", -2187 => x"88160cfd", -2188 => x"c3398313", -2189 => x"70822c81", -2190 => x"712b80d6", -2191 => x"c8080780", -2192 => x"d6c40b84", -2193 => x"050c5953", -2194 => x"da397070", -2195 => x"7080e5f4", -2196 => x"08893881", -2197 => x"b6a00b80", -2198 => x"e5f40c80", -2199 => x"e5f40875", -2200 => x"115252ff", -2201 => x"537087fb", -2202 => x"80802688", -2203 => x"387080e5", -2204 => x"f40c7153", -2205 => x"72800c50", -2206 => x"505004fd", -2207 => x"3d0d800b", -2208 => x"80d5f408", -2209 => x"54547281", -2210 => x"2e9b3873", -2211 => x"80e5f80c", -2212 => x"c3ee3fc2", -2213 => x"eb3f80e5", -2214 => x"cc528151", -2215 => x"cc933f80", -2216 => x"085180dd", -2217 => x"3f7280e5", -2218 => x"f80cc3d4", -2219 => x"3fc2d13f", -2220 => x"80e5cc52", -2221 => x"8151cbf9", -2222 => x"3f800851", -2223 => x"80c33f00", -2224 => x"ff3900ff", -2225 => x"39f43d0d", -2226 => x"7e80e5ec", -2227 => x"08700870", -2228 => x"81ff0692", -2229 => x"3df80555", -2230 => x"515a5759", -2231 => x"c48f3f80", -2232 => x"5477557b", -2233 => x"7d585276", -2234 => x"538e3df0", -2235 => x"0551de8e", -2236 => x"3f797b58", -2237 => x"790c7684", -2238 => x"1a0c7880", -2239 => x"0c8e3d0d", -2240 => x"04f73d0d", -2241 => x"7b80decc", -2242 => x"0882c811", -2243 => x"085a545a", -2244 => x"77802e80", -2245 => x"da388188", -2246 => x"18841908", -2247 => x"ff058171", -2248 => x"2b595559", -2249 => x"80742480", -2250 => x"ea388074", -2251 => x"24b53873", -2252 => x"822b7811", -2253 => x"88055656", -2254 => x"81801908", -2255 => x"77065372", -2256 => x"802eb638", -2257 => x"78167008", -2258 => x"53537951", -2259 => x"74085372", -2260 => x"2dff14fc", -2261 => x"17fc1779", -2262 => x"812c5a57", -2263 => x"57547380", -2264 => x"25d63877", -2265 => x"085877ff", -2266 => x"ad3880de", -2267 => x"cc0853bc", -2268 => x"1308a538", -2269 => x"7951fec7", -2270 => x"3f740853", -2271 => x"722dff14", -2272 => x"fc17fc17", -2273 => x"79812c5a", -2274 => x"57575473", -2275 => x"8025ffa8", -2276 => x"38d13980", -2277 => x"57ff9339", -2278 => x"7251bc13", -2279 => x"0854732d", -2280 => x"7951fe9b", -2281 => x"3f707080", -2282 => x"e5d40bfc", -2283 => x"05700852", -2284 => x"5270ff2e", -2285 => x"9138702d", -2286 => x"fc127008", -2287 => x"525270ff", -2288 => x"2e098106", -2289 => x"f1385050", -2290 => x"0404c2ff", -2291 => x"3f040000", -2292 => x"00000040", -2293 => x"30313233", -2294 => x"34353637", -2295 => x"38390000", -2296 => x"44485259", -2297 => x"53544f4e", -2298 => x"45205052", -2299 => x"4f475241", -2300 => x"4d2c2053", -2301 => x"4f4d4520", -2302 => x"53545249", -2303 => x"4e470000", -2304 => x"44485259", -2305 => x"53544f4e", -2306 => x"45205052", -2307 => x"4f475241", -2308 => x"4d2c2031", -2309 => x"27535420", -2310 => x"53545249", -2311 => x"4e470000", -2312 => x"44687279", -2313 => x"73746f6e", -2314 => x"65204265", -2315 => x"6e63686d", -2316 => x"61726b2c", -2317 => x"20566572", -2318 => x"73696f6e", -2319 => x"20322e31", -2320 => x"20284c61", -2321 => x"6e677561", -2322 => x"67653a20", -2323 => x"43290a00", -2324 => x"50726f67", -2325 => x"72616d20", -2326 => x"636f6d70", -2327 => x"696c6564", -2328 => x"20776974", -2329 => x"68202772", -2330 => x"65676973", -2331 => x"74657227", -2332 => x"20617474", -2333 => x"72696275", -2334 => x"74650a00", -2335 => x"45786563", -2336 => x"7574696f", -2337 => x"6e207374", -2338 => x"61727473", -2339 => x"2c202564", -2340 => x"2072756e", -2341 => x"73207468", -2342 => x"726f7567", -2343 => x"68204468", -2344 => x"72797374", -2345 => x"6f6e650a", -2346 => x"00000000", -2347 => x"44485259", -2348 => x"53544f4e", -2349 => x"45205052", -2350 => x"4f475241", -2351 => x"4d2c2032", -2352 => x"274e4420", -2353 => x"53545249", -2354 => x"4e470000", -2355 => x"45786563", -2356 => x"7574696f", -2357 => x"6e20656e", -2358 => x"64730a00", -2359 => x"46696e61", -2360 => x"6c207661", -2361 => x"6c756573", -2362 => x"206f6620", -2363 => x"74686520", -2364 => x"76617269", -2365 => x"61626c65", -2366 => x"73207573", -2367 => x"65642069", -2368 => x"6e207468", -2369 => x"65206265", -2370 => x"6e63686d", -2371 => x"61726b3a", -2372 => x"0a000000", -2373 => x"496e745f", -2374 => x"476c6f62", -2375 => x"3a202020", -2376 => x"20202020", -2377 => x"20202020", -2378 => x"2025640a", -2379 => x"00000000", -2380 => x"20202020", -2381 => x"20202020", -2382 => x"73686f75", -2383 => x"6c642062", -2384 => x"653a2020", -2385 => x"2025640a", -2386 => x"00000000", -2387 => x"426f6f6c", -2388 => x"5f476c6f", -2389 => x"623a2020", -2390 => x"20202020", -2391 => x"20202020", -2392 => x"2025640a", -2393 => x"00000000", -2394 => x"43685f31", -2395 => x"5f476c6f", -2396 => x"623a2020", -2397 => x"20202020", -2398 => x"20202020", -2399 => x"2025630a", -2400 => x"00000000", -2401 => x"20202020", -2402 => x"20202020", -2403 => x"73686f75", -2404 => x"6c642062", -2405 => x"653a2020", -2406 => x"2025630a", -2407 => x"00000000", -2408 => x"43685f32", -2409 => x"5f476c6f", -2410 => x"623a2020", -2411 => x"20202020", -2412 => x"20202020", -2413 => x"2025630a", -2414 => x"00000000", -2415 => x"4172725f", -2416 => x"315f476c", -2417 => x"6f625b38", -2418 => x"5d3a2020", -2419 => x"20202020", -2420 => x"2025640a", -2421 => x"00000000", -2422 => x"4172725f", -2423 => x"325f476c", -2424 => x"6f625b38", -2425 => x"5d5b375d", -2426 => x"3a202020", -2427 => x"2025640a", -2428 => x"00000000", -2429 => x"20202020", -2430 => x"20202020", -2431 => x"73686f75", -2432 => x"6c642062", -2433 => x"653a2020", -2434 => x"204e756d", -2435 => x"6265725f", -2436 => x"4f665f52", -2437 => x"756e7320", -2438 => x"2b203130", -2439 => x"0a000000", -2440 => x"5074725f", -2441 => x"476c6f62", -2442 => x"2d3e0a00", -2443 => x"20205074", -2444 => x"725f436f", -2445 => x"6d703a20", -2446 => x"20202020", -2447 => x"20202020", -2448 => x"2025640a", -2449 => x"00000000", -2450 => x"20202020", -2451 => x"20202020", -2452 => x"73686f75", -2453 => x"6c642062", -2454 => x"653a2020", -2455 => x"2028696d", -2456 => x"706c656d", -2457 => x"656e7461", -2458 => x"74696f6e", -2459 => x"2d646570", -2460 => x"656e6465", -2461 => x"6e74290a", -2462 => x"00000000", -2463 => x"20204469", -2464 => x"7363723a", -2465 => x"20202020", -2466 => x"20202020", -2467 => x"20202020", -2468 => x"2025640a", -2469 => x"00000000", -2470 => x"2020456e", -2471 => x"756d5f43", -2472 => x"6f6d703a", -2473 => x"20202020", -2474 => x"20202020", -2475 => x"2025640a", -2476 => x"00000000", -2477 => x"2020496e", -2478 => x"745f436f", -2479 => x"6d703a20", -2480 => x"20202020", -2481 => x"20202020", -2482 => x"2025640a", -2483 => x"00000000", -2484 => x"20205374", -2485 => x"725f436f", -2486 => x"6d703a20", -2487 => x"20202020", -2488 => x"20202020", -2489 => x"2025730a", -2490 => x"00000000", -2491 => x"20202020", -2492 => x"20202020", -2493 => x"73686f75", -2494 => x"6c642062", -2495 => x"653a2020", -2496 => x"20444852", -2497 => x"5953544f", -2498 => x"4e452050", -2499 => x"524f4752", -2500 => x"414d2c20", -2501 => x"534f4d45", -2502 => x"20535452", -2503 => x"494e470a", -2504 => x"00000000", -2505 => x"4e657874", -2506 => x"5f507472", -2507 => x"5f476c6f", -2508 => x"622d3e0a", -2509 => x"00000000", -2510 => x"20202020", -2511 => x"20202020", -2512 => x"73686f75", -2513 => x"6c642062", -2514 => x"653a2020", -2515 => x"2028696d", -2516 => x"706c656d", -2517 => x"656e7461", -2518 => x"74696f6e", -2519 => x"2d646570", -2520 => x"656e6465", -2521 => x"6e74292c", -2522 => x"2073616d", -2523 => x"65206173", -2524 => x"2061626f", -2525 => x"76650a00", -2526 => x"496e745f", -2527 => x"315f4c6f", -2528 => x"633a2020", -2529 => x"20202020", -2530 => x"20202020", -2531 => x"2025640a", -2532 => x"00000000", -2533 => x"496e745f", -2534 => x"325f4c6f", -2535 => x"633a2020", -2536 => x"20202020", -2537 => x"20202020", -2538 => x"2025640a", -2539 => x"00000000", -2540 => x"496e745f", -2541 => x"335f4c6f", -2542 => x"633a2020", -2543 => x"20202020", -2544 => x"20202020", -2545 => x"2025640a", -2546 => x"00000000", -2547 => x"456e756d", -2548 => x"5f4c6f63", -2549 => x"3a202020", -2550 => x"20202020", -2551 => x"20202020", -2552 => x"2025640a", -2553 => x"00000000", -2554 => x"5374725f", -2555 => x"315f4c6f", -2556 => x"633a2020", -2557 => x"20202020", -2558 => x"20202020", -2559 => x"2025730a", -2560 => x"00000000", -2561 => x"20202020", -2562 => x"20202020", -2563 => x"73686f75", -2564 => x"6c642062", -2565 => x"653a2020", -2566 => x"20444852", -2567 => x"5953544f", -2568 => x"4e452050", -2569 => x"524f4752", -2570 => x"414d2c20", -2571 => x"31275354", -2572 => x"20535452", -2573 => x"494e470a", -2574 => x"00000000", -2575 => x"5374725f", -2576 => x"325f4c6f", -2577 => x"633a2020", -2578 => x"20202020", -2579 => x"20202020", -2580 => x"2025730a", -2581 => x"00000000", -2582 => x"20202020", -2583 => x"20202020", -2584 => x"73686f75", -2585 => x"6c642062", -2586 => x"653a2020", -2587 => x"20444852", -2588 => x"5953544f", -2589 => x"4e452050", -2590 => x"524f4752", -2591 => x"414d2c20", -2592 => x"32274e44", -2593 => x"20535452", -2594 => x"494e470a", -2595 => x"00000000", -2596 => x"55736572", -2597 => x"2074696d", -2598 => x"653a2025", -2599 => x"640a0000", -2600 => x"4d696372", -2601 => x"6f736563", -2602 => x"6f6e6473", -2603 => x"20666f72", -2604 => x"206f6e65", -2605 => x"2072756e", -2606 => x"20746872", -2607 => x"6f756768", -2608 => x"20446872", -2609 => x"7973746f", -2610 => x"6e653a20", -2611 => x"00000000", -2612 => x"2564200a", -2613 => x"00000000", -2614 => x"44687279", -2615 => x"73746f6e", -2616 => x"65732070", -2617 => x"65722053", -2618 => x"65636f6e", -2619 => x"643a2020", -2620 => x"20202020", -2621 => x"20202020", -2622 => x"20202020", -2623 => x"20202020", -2624 => x"20202020", -2625 => x"00000000", -2626 => x"56415820", -2627 => x"4d495053", -2628 => x"20726174", -2629 => x"696e6720", -2630 => x"2a203130", -2631 => x"3030203d", -2632 => x"20256420", -2633 => x"0a000000", -2634 => x"50726f67", -2635 => x"72616d20", -2636 => x"636f6d70", -2637 => x"696c6564", -2638 => x"20776974", -2639 => x"686f7574", -2640 => x"20277265", -2641 => x"67697374", -2642 => x"65722720", -2643 => x"61747472", -2644 => x"69627574", -2645 => x"650a0000", -2646 => x"4d656173", -2647 => x"75726564", -2648 => x"2074696d", -2649 => x"6520746f", -2650 => x"6f20736d", -2651 => x"616c6c20", -2652 => x"746f206f", -2653 => x"62746169", -2654 => x"6e206d65", -2655 => x"616e696e", -2656 => x"6766756c", -2657 => x"20726573", -2658 => x"756c7473", -2659 => x"0a000000", -2660 => x"506c6561", -2661 => x"73652069", -2662 => x"6e637265", -2663 => x"61736520", -2664 => x"6e756d62", -2665 => x"6572206f", -2666 => x"66207275", -2667 => x"6e730a00", -2668 => x"44485259", -2669 => x"53544f4e", -2670 => x"45205052", -2671 => x"4f475241", -2672 => x"4d2c2033", -2673 => x"27524420", -2674 => x"53545249", -2675 => x"4e470000", -2676 => x"00010202", -2677 => x"03030303", -2678 => x"04040404", -2679 => x"04040404", -2680 => x"05050505", -2681 => x"05050505", -2682 => x"05050505", -2683 => x"05050505", -2684 => x"06060606", -2685 => x"06060606", -2686 => x"06060606", -2687 => x"06060606", -2688 => x"06060606", -2689 => x"06060606", -2690 => x"06060606", -2691 => x"06060606", -2692 => x"07070707", -2693 => x"07070707", -2694 => x"07070707", -2695 => x"07070707", -2696 => x"07070707", -2697 => x"07070707", -2698 => x"07070707", -2699 => x"07070707", -2700 => x"07070707", -2701 => x"07070707", -2702 => x"07070707", -2703 => x"07070707", -2704 => x"07070707", -2705 => x"07070707", -2706 => x"07070707", -2707 => x"07070707", -2708 => x"08080808", -2709 => x"08080808", -2710 => x"08080808", -2711 => x"08080808", -2712 => x"08080808", -2713 => x"08080808", -2714 => x"08080808", -2715 => x"08080808", -2716 => x"08080808", -2717 => x"08080808", -2718 => x"08080808", -2719 => x"08080808", -2720 => x"08080808", -2721 => x"08080808", -2722 => x"08080808", -2723 => x"08080808", -2724 => x"08080808", -2725 => x"08080808", -2726 => x"08080808", -2727 => x"08080808", -2728 => x"08080808", -2729 => x"08080808", -2730 => x"08080808", -2731 => x"08080808", -2732 => x"08080808", -2733 => x"08080808", -2734 => x"08080808", -2735 => x"08080808", -2736 => x"08080808", -2737 => x"08080808", -2738 => x"08080808", -2739 => x"08080808", -2740 => x"43000000", -2741 => x"64756d6d", -2742 => x"792e6578", -2743 => x"65000000", -2744 => x"00ffffff", -2745 => x"ff00ffff", -2746 => x"ffff00ff", -2747 => x"ffffff00", -2748 => x"00000000", -2749 => x"00000000", -2750 => x"00000000", -2751 => x"000032dc", -2752 => x"0000c350", -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"ffffffff", -2767 => x"00000000", -2768 => x"00020000", -2769 => x"00000000", -2770 => x"00000000", -2771 => x"00002b44", -2772 => x"00002b44", -2773 => x"00002b4c", -2774 => x"00002b4c", -2775 => x"00002b54", -2776 => x"00002b54", -2777 => x"00002b5c", -2778 => x"00002b5c", -2779 => x"00002b64", -2780 => x"00002b64", -2781 => x"00002b6c", -2782 => x"00002b6c", -2783 => x"00002b74", -2784 => x"00002b74", -2785 => x"00002b7c", -2786 => x"00002b7c", -2787 => x"00002b84", -2788 => x"00002b84", -2789 => x"00002b8c", -2790 => x"00002b8c", -2791 => x"00002b94", -2792 => x"00002b94", -2793 => x"00002b9c", -2794 => x"00002b9c", -2795 => x"00002ba4", -2796 => x"00002ba4", -2797 => x"00002bac", -2798 => x"00002bac", -2799 => x"00002bb4", -2800 => x"00002bb4", -2801 => x"00002bbc", -2802 => x"00002bbc", -2803 => x"00002bc4", -2804 => x"00002bc4", -2805 => x"00002bcc", -2806 => x"00002bcc", -2807 => x"00002bd4", -2808 => x"00002bd4", -2809 => x"00002bdc", -2810 => x"00002bdc", -2811 => x"00002be4", -2812 => x"00002be4", -2813 => x"00002bec", -2814 => x"00002bec", -2815 => x"00002bf4", -2816 => x"00002bf4", -2817 => x"00002bfc", -2818 => x"00002bfc", -2819 => x"00002c04", -2820 => x"00002c04", -2821 => x"00002c0c", -2822 => x"00002c0c", -2823 => x"00002c14", -2824 => x"00002c14", -2825 => x"00002c1c", -2826 => x"00002c1c", -2827 => x"00002c24", -2828 => x"00002c24", -2829 => x"00002c2c", -2830 => x"00002c2c", -2831 => x"00002c34", -2832 => x"00002c34", -2833 => x"00002c3c", -2834 => x"00002c3c", -2835 => x"00002c44", -2836 => x"00002c44", -2837 => x"00002c4c", -2838 => x"00002c4c", -2839 => x"00002c54", -2840 => x"00002c54", -2841 => x"00002c5c", -2842 => x"00002c5c", -2843 => x"00002c64", -2844 => x"00002c64", -2845 => x"00002c6c", -2846 => x"00002c6c", -2847 => x"00002c74", -2848 => x"00002c74", -2849 => x"00002c7c", -2850 => x"00002c7c", -2851 => x"00002c84", -2852 => x"00002c84", -2853 => x"00002c8c", -2854 => x"00002c8c", -2855 => x"00002c94", -2856 => x"00002c94", -2857 => x"00002c9c", -2858 => x"00002c9c", -2859 => x"00002ca4", -2860 => x"00002ca4", -2861 => x"00002cac", -2862 => x"00002cac", -2863 => x"00002cb4", -2864 => x"00002cb4", -2865 => x"00002cbc", -2866 => x"00002cbc", -2867 => x"00002cc4", -2868 => x"00002cc4", -2869 => x"00002ccc", -2870 => x"00002ccc", -2871 => x"00002cd4", -2872 => x"00002cd4", -2873 => x"00002cdc", -2874 => x"00002cdc", -2875 => x"00002ce4", -2876 => x"00002ce4", -2877 => x"00002cec", -2878 => x"00002cec", -2879 => x"00002cf4", -2880 => x"00002cf4", -2881 => x"00002cfc", -2882 => x"00002cfc", -2883 => x"00002d04", -2884 => x"00002d04", -2885 => x"00002d0c", -2886 => x"00002d0c", -2887 => x"00002d14", -2888 => x"00002d14", -2889 => x"00002d1c", -2890 => x"00002d1c", -2891 => x"00002d24", -2892 => x"00002d24", -2893 => x"00002d2c", -2894 => x"00002d2c", -2895 => x"00002d34", -2896 => x"00002d34", -2897 => x"00002d3c", -2898 => x"00002d3c", -2899 => x"00002d44", -2900 => x"00002d44", -2901 => x"00002d4c", -2902 => x"00002d4c", -2903 => x"00002d54", -2904 => x"00002d54", -2905 => x"00002d5c", -2906 => x"00002d5c", -2907 => x"00002d64", -2908 => x"00002d64", -2909 => x"00002d6c", -2910 => x"00002d6c", -2911 => x"00002d74", -2912 => x"00002d74", -2913 => x"00002d7c", -2914 => x"00002d7c", -2915 => x"00002d84", -2916 => x"00002d84", -2917 => x"00002d8c", -2918 => x"00002d8c", -2919 => x"00002d94", -2920 => x"00002d94", -2921 => x"00002d9c", -2922 => x"00002d9c", -2923 => x"00002da4", -2924 => x"00002da4", -2925 => x"00002dac", -2926 => x"00002dac", -2927 => x"00002db4", -2928 => x"00002db4", -2929 => x"00002dbc", -2930 => x"00002dbc", -2931 => x"00002dc4", -2932 => x"00002dc4", -2933 => x"00002dcc", -2934 => x"00002dcc", -2935 => x"00002dd4", -2936 => x"00002dd4", -2937 => x"00002ddc", -2938 => x"00002ddc", -2939 => x"00002de4", -2940 => x"00002de4", -2941 => x"00002dec", -2942 => x"00002dec", -2943 => x"00002df4", -2944 => x"00002df4", -2945 => x"00002dfc", -2946 => x"00002dfc", -2947 => x"00002e04", -2948 => x"00002e04", -2949 => x"00002e0c", -2950 => x"00002e0c", -2951 => x"00002e14", -2952 => x"00002e14", -2953 => x"00002e1c", -2954 => x"00002e1c", -2955 => x"00002e24", -2956 => x"00002e24", -2957 => x"00002e2c", -2958 => x"00002e2c", -2959 => x"00002e34", -2960 => x"00002e34", -2961 => x"00002e3c", -2962 => x"00002e3c", -2963 => x"00002e44", -2964 => x"00002e44", -2965 => x"00002e4c", -2966 => x"00002e4c", -2967 => x"00002e54", -2968 => x"00002e54", -2969 => x"00002e5c", -2970 => x"00002e5c", -2971 => x"00002e64", -2972 => x"00002e64", -2973 => x"00002e6c", -2974 => x"00002e6c", -2975 => x"00002e74", -2976 => x"00002e74", -2977 => x"00002e7c", -2978 => x"00002e7c", -2979 => x"00002e84", -2980 => x"00002e84", -2981 => x"00002e8c", -2982 => x"00002e8c", -2983 => x"00002e94", -2984 => x"00002e94", -2985 => x"00002e9c", -2986 => x"00002e9c", -2987 => x"00002ea4", -2988 => x"00002ea4", -2989 => x"00002eac", -2990 => x"00002eac", -2991 => x"00002eb4", -2992 => x"00002eb4", -2993 => x"00002ebc", -2994 => x"00002ebc", -2995 => x"00002ec4", -2996 => x"00002ec4", -2997 => x"00002ecc", -2998 => x"00002ecc", -2999 => x"00002ed4", -3000 => x"00002ed4", -3001 => x"00002edc", -3002 => x"00002edc", -3003 => x"00002ee4", -3004 => x"00002ee4", -3005 => x"00002eec", -3006 => x"00002eec", -3007 => x"00002ef4", -3008 => x"00002ef4", -3009 => x"00002efc", -3010 => x"00002efc", -3011 => x"00002f04", -3012 => x"00002f04", -3013 => x"00002f0c", -3014 => x"00002f0c", -3015 => x"00002f14", -3016 => x"00002f14", -3017 => x"00002f1c", -3018 => x"00002f1c", -3019 => x"00002f24", -3020 => x"00002f24", -3021 => x"00002f2c", -3022 => x"00002f2c", -3023 => x"00002f34", -3024 => x"00002f34", -3025 => x"00002f3c", -3026 => x"00002f3c", -3027 => x"00002f50", -3028 => x"00000000", -3029 => x"000031b8", -3030 => x"00003214", -3031 => x"00003270", -3032 => x"00000000", -3033 => x"00000000", -3034 => x"00000000", -3035 => x"00000000", -3036 => x"00000000", -3037 => x"00000000", -3038 => x"00000000", -3039 => x"00000000", -3040 => x"00000000", -3041 => x"00002ad0", -3042 => x"00000000", -3043 => x"00000000", -3044 => x"00000000", -3045 => x"00000000", -3046 => x"00000000", -3047 => x"00000000", -3048 => x"00000000", -3049 => x"00000000", -3050 => x"00000000", -3051 => x"00000000", -3052 => x"00000000", -3053 => x"00000000", -3054 => x"00000000", -3055 => x"00000000", -3056 => x"00000000", -3057 => x"00000000", -3058 => x"00000000", -3059 => x"00000000", -3060 => x"00000000", -3061 => x"00000000", -3062 => x"00000000", -3063 => x"00000000", -3064 => x"00000000", -3065 => x"00000000", -3066 => x"00000000", -3067 => x"00000000", -3068 => x"00000000", -3069 => x"00000000", -3070 => x"00000001", -3071 => x"330eabcd", -3072 => x"1234e66d", -3073 => x"deec0005", -3074 => x"000b0000", -3075 => x"00000000", -3076 => x"00000000", -3077 => x"00000000", -3078 => x"00000000", -3079 => x"00000000", -3080 => x"00000000", -3081 => x"00000000", -3082 => x"00000000", -3083 => x"00000000", -3084 => x"00000000", -3085 => x"00000000", -3086 => x"00000000", -3087 => x"00000000", -3088 => x"00000000", -3089 => x"00000000", -3090 => x"00000000", -3091 => x"00000000", -3092 => x"00000000", -3093 => x"00000000", -3094 => x"00000000", -3095 => x"00000000", -3096 => x"00000000", -3097 => x"00000000", -3098 => x"00000000", -3099 => x"00000000", -3100 => x"00000000", -3101 => x"00000000", -3102 => x"00000000", -3103 => x"00000000", -3104 => x"00000000", -3105 => x"00000000", -3106 => x"00000000", -3107 => x"00000000", -3108 => x"00000000", -3109 => x"00000000", -3110 => x"00000000", -3111 => x"00000000", -3112 => x"00000000", -3113 => x"00000000", -3114 => x"00000000", -3115 => x"00000000", -3116 => x"00000000", -3117 => x"00000000", -3118 => x"00000000", -3119 => x"00000000", -3120 => x"00000000", -3121 => x"00000000", -3122 => x"00000000", -3123 => x"00000000", -3124 => x"00000000", -3125 => x"00000000", -3126 => x"00000000", -3127 => x"00000000", -3128 => x"00000000", -3129 => x"00000000", -3130 => x"00000000", -3131 => x"00000000", -3132 => x"00000000", -3133 => x"00000000", -3134 => x"00000000", -3135 => x"00000000", -3136 => x"00000000", -3137 => x"00000000", -3138 => x"00000000", -3139 => x"00000000", -3140 => x"00000000", -3141 => x"00000000", -3142 => x"00000000", -3143 => x"00000000", -3144 => x"00000000", -3145 => x"00000000", -3146 => x"00000000", -3147 => x"00000000", -3148 => x"00000000", -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"00000000", -3163 => x"00000000", -3164 => x"00000000", -3165 => x"00000000", -3166 => x"00000000", -3167 => x"00000000", -3168 => x"00000000", -3169 => x"00000000", -3170 => x"00000000", -3171 => x"00000000", -3172 => x"00000000", -3173 => x"00000000", -3174 => x"00000000", -3175 => x"00000000", -3176 => x"00000000", -3177 => x"00000000", -3178 => x"00000000", -3179 => x"00000000", -3180 => x"00000000", -3181 => x"00000000", -3182 => x"00000000", -3183 => x"00000000", -3184 => x"00000000", -3185 => x"00000000", -3186 => x"00000000", -3187 => x"00000000", -3188 => x"00000000", -3189 => x"00000000", -3190 => x"00000000", -3191 => x"00000000", -3192 => x"00000000", -3193 => x"00000000", -3194 => x"00000000", -3195 => x"00000000", -3196 => x"00000000", -3197 => x"00000000", -3198 => x"00000000", -3199 => x"00000000", -3200 => x"00000000", -3201 => x"00000000", -3202 => x"00000000", -3203 => x"00000000", -3204 => x"00000000", -3205 => x"00000000", -3206 => x"00000000", -3207 => x"00000000", -3208 => x"00000000", -3209 => x"00000000", -3210 => x"00000000", -3211 => x"00000000", -3212 => x"00000000", -3213 => x"00000000", -3214 => x"00000000", -3215 => x"00000000", -3216 => x"00000000", -3217 => x"00000000", -3218 => x"00000000", -3219 => x"00000000", -3220 => x"00000000", -3221 => x"00000000", -3222 => x"00000000", -3223 => x"00000000", -3224 => x"00000000", -3225 => x"00000000", -3226 => x"00000000", -3227 => x"00000000", -3228 => x"00000000", -3229 => x"00000000", -3230 => x"00000000", -3231 => x"00000000", -3232 => x"00000000", -3233 => x"00000000", -3234 => x"00000000", -3235 => x"00000000", -3236 => x"00000000", -3237 => x"00000000", -3238 => x"00000000", -3239 => x"00000000", -3240 => x"00000000", -3241 => x"00000000", -3242 => x"00000000", -3243 => x"00000000", -3244 => x"00000000", -3245 => x"00000000", -3246 => x"00000000", -3247 => x"00000000", -3248 => x"00000000", -3249 => x"00000000", -3250 => x"00000000", -3251 => x"00002ad4", -3252 => x"ffffffff", -3253 => x"00000000", -3254 => x"ffffffff", -3255 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; - end if; - if (mem_readEnable = '1') then - mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); - end if; - 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 deleted file mode 100644 index 4f02cca..0000000 --- a/zpu/hdl/zpu4/src/dram_hello.vhd +++ /dev/null @@ -1,3107 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); - -shared variable ram : ram_type := -( -0 => x"0b0b0b0b", -1 => x"82700b0b", -2 => x"80cfd80c", -3 => x"3a0b0b80", -4 => x"c6d00400", -5 => x"00000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80c7972d", -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"0b0b80cf", -162 => x"c4738306", -163 => x"10100508", -164 => x"060b0b0b", -165 => x"88aa0400", -166 => x"00000000", -167 => x"00000000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0b8b", -171 => x"9f2d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0b8b", -179 => x"e32d5050", -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"80cfd40c", -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"82c53f80", -257 => x"c6d93f04", -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"fe3d0d0b", -281 => x"0b80dfc0", -282 => x"08538413", -283 => x"0870882a", -284 => x"70810651", -285 => x"52527080", -286 => x"2ef03871", -287 => x"81ff0680", -288 => x"0c843d0d", -289 => x"04ff3d0d", -290 => x"0b0b80df", -291 => x"c0085271", -292 => x"0870882a", -293 => x"81327081", -294 => x"06515151", -295 => x"70f13873", -296 => x"720c833d", -297 => x"0d0480cf", -298 => x"d408802e", -299 => x"a43880cf", -300 => x"d808822e", -301 => x"bd388380", -302 => x"800b0b0b", -303 => x"80dfc00c", -304 => x"82a0800b", -305 => x"80dfc40c", -306 => x"8290800b", -307 => x"80dfc80c", -308 => x"04f88080", -309 => x"80a40b0b", -310 => x"0b80dfc0", -311 => x"0cf88080", -312 => x"82800b80", -313 => x"dfc40cf8", -314 => x"80808480", -315 => x"0b80dfc8", -316 => x"0c0480c0", -317 => x"a8808c0b", -318 => x"0b0b80df", -319 => x"c00c80c0", -320 => x"a880940b", -321 => x"80dfc40c", -322 => x"0b0b80cf", -323 => x"8c0b80df", -324 => x"c80c0470", -325 => x"7080dfcc", -326 => x"335170a7", -327 => x"3880cfe0", -328 => x"08700852", -329 => x"5270802e", -330 => x"94388412", -331 => x"80cfe00c", -332 => x"702d80cf", -333 => x"e0087008", -334 => x"525270ee", -335 => x"38810b80", -336 => x"dfcc3450", -337 => x"50040470", -338 => x"0b0b80df", -339 => x"bc08802e", -340 => x"8e380b0b", -341 => x"0b0b800b", -342 => x"802e0981", -343 => x"06833850", -344 => x"040b0b80", -345 => x"dfbc510b", -346 => x"0b0bf594", -347 => x"3f500404", -348 => x"fe3d0d89", -349 => x"5380cf90", -350 => x"5182c13f", -351 => x"80cfa051", -352 => x"82ba3f81", -353 => x"0a0b80df", -354 => x"d80cff0b", -355 => x"80dfdc0c", -356 => x"ff135372", -357 => x"8025de38", -358 => x"72800c84", -359 => x"3d0d04fb", -360 => x"3d0d7779", -361 => x"55558056", -362 => x"757524ab", -363 => x"38807424", -364 => x"9d388053", -365 => x"73527451", -366 => x"80e13f80", -367 => x"08547580", -368 => x"2e853880", -369 => x"08305473", -370 => x"800c873d", -371 => x"0d047330", -372 => x"76813257", -373 => x"54dc3974", -374 => x"30558156", -375 => x"738025d2", -376 => x"38ec39fa", -377 => x"3d0d787a", -378 => x"57558057", -379 => x"767524a4", -380 => x"38759f2c", -381 => x"54815375", -382 => x"74327431", -383 => x"5274519b", -384 => x"3f800854", -385 => x"76802e85", -386 => x"38800830", -387 => x"5473800c", -388 => x"883d0d04", -389 => x"74305581", -390 => x"57d739fc", -391 => x"3d0d7678", -392 => x"53548153", -393 => x"80747326", -394 => x"52557280", -395 => x"2e983870", -396 => x"802eab38", -397 => x"807224a6", -398 => x"38711073", -399 => x"10757226", -400 => x"53545272", -401 => x"ea387351", -402 => x"78833874", -403 => x"5170800c", -404 => x"863d0d04", -405 => x"720a100a", -406 => x"720a100a", -407 => x"53537280", -408 => x"2ee43871", -409 => x"7426ed38", -410 => x"73723175", -411 => x"7407740a", -412 => x"100a740a", -413 => x"100a5555", -414 => x"5654e339", -415 => x"f73d0d7c", -416 => x"70525380", -417 => x"f93f7254", -418 => x"80085580", -419 => x"cfb05681", -420 => x"57800881", -421 => x"055a8b3d", -422 => x"e4115953", -423 => x"8259f413", -424 => x"527b8811", -425 => x"08525381", -426 => x"b23f8008", -427 => x"30708008", -428 => x"079f2c8a", -429 => x"07800c53", -430 => x"8b3d0d04", -431 => x"f63d0d7c", -432 => x"80cfe408", -433 => x"71535553", -434 => x"b53f7255", -435 => x"80085680", -436 => x"cfb05781", -437 => x"58800881", -438 => x"055b8c3d", -439 => x"e4115a53", -440 => x"825af413", -441 => x"52881408", -442 => x"5180f03f", -443 => x"80083070", -444 => x"8008079f", -445 => x"2c8a0780", -446 => x"0c548c3d", -447 => x"0d047070", -448 => x"70707570", -449 => x"71830653", -450 => x"555270b4", -451 => x"38717008", -452 => x"7009f7fb", -453 => x"fdff1206", -454 => x"f8848281", -455 => x"80065452", -456 => x"53719b38", -457 => x"84137008", -458 => x"7009f7fb", -459 => x"fdff1206", -460 => x"f8848281", -461 => x"80065452", -462 => x"5371802e", -463 => x"e7387252", -464 => x"71335372", -465 => x"802e8a38", -466 => x"81127033", -467 => x"545272f8", -468 => x"38717431", -469 => x"800c5050", -470 => x"505004f2", -471 => x"3d0d6062", -472 => x"88110870", -473 => x"58565f5a", -474 => x"73802e81", -475 => x"8c388c1a", -476 => x"2270832a", -477 => x"81328106", -478 => x"56587486", -479 => x"38901a08", -480 => x"91387951", -481 => x"90b73fff", -482 => x"55800880", -483 => x"ec388c1a", -484 => x"22587d08", -485 => x"55807883", -486 => x"ffff0670", -487 => x"0a100a81", -488 => x"06415c57", -489 => x"7e772e80", -490 => x"d7387690", -491 => x"38740884", -492 => x"16088817", -493 => x"57585676", -494 => x"802ef238", -495 => x"76548880", -496 => x"77278438", -497 => x"88805473", -498 => x"5375529c", -499 => x"1a0851a4", -500 => x"1a085877", -501 => x"2d800b80", -502 => x"082582e0", -503 => x"38800816", -504 => x"77800831", -505 => x"7f880508", -506 => x"80083170", -507 => x"6188050c", -508 => x"5b585678", -509 => x"ffb43880", -510 => x"5574800c", -511 => x"903d0d04", -512 => x"7a813281", -513 => x"06774056", -514 => x"75802e81", -515 => x"bd387690", -516 => x"38740884", -517 => x"16088817", -518 => x"57585976", -519 => x"802ef238", -520 => x"881a0878", -521 => x"83ffff06", -522 => x"70892a81", -523 => x"06565956", -524 => x"73802e82", -525 => x"f8387577", -526 => x"278b3877", -527 => x"872a8106", -528 => x"5c7b82b5", -529 => x"38767627", -530 => x"83387656", -531 => x"75537852", -532 => x"79085185", -533 => x"833f881a", -534 => x"08763188", -535 => x"1b0c7908", -536 => x"167a0c76", -537 => x"56751977", -538 => x"77317f88", -539 => x"05087831", -540 => x"70618805", -541 => x"0c415859", -542 => x"7e802efe", -543 => x"fa388c1a", -544 => x"2258ff8a", -545 => x"39787954", -546 => x"7c537b52", -547 => x"5684c93f", -548 => x"881a0879", -549 => x"31881b0c", -550 => x"7908197a", -551 => x"0c7c7631", -552 => x"5d7c8e38", -553 => x"79518ff2", -554 => x"3f800881", -555 => x"8f388008", -556 => x"5f751c77", -557 => x"77317f88", -558 => x"05087831", -559 => x"70618805", -560 => x"0c5d585c", -561 => x"7a802efe", -562 => x"ae387681", -563 => x"83387408", -564 => x"84160888", -565 => x"1757585c", -566 => x"76802ef2", -567 => x"3876538a", -568 => x"527b5182", -569 => x"d33f8008", -570 => x"7c318105", -571 => x"5d800884", -572 => x"3881175d", -573 => x"815f7c59", -574 => x"767d2783", -575 => x"38765994", -576 => x"1a08881b", -577 => x"08115758", -578 => x"807a085c", -579 => x"54901a08", -580 => x"7b278338", -581 => x"81547579", -582 => x"25843873", -583 => x"ba387779", -584 => x"24fee238", -585 => x"77537b52", -586 => x"9c1a0851", -587 => x"a41a0859", -588 => x"782d8008", -589 => x"56800880", -590 => x"24fee238", -591 => x"8c1a2280", -592 => x"c0075e7d", -593 => x"8c1b23ff", -594 => x"5574800c", -595 => x"903d0d04", -596 => x"7effa338", -597 => x"ff873975", -598 => x"537b527a", -599 => x"5182f93f", -600 => x"7908167a", -601 => x"0c79518e", -602 => x"b13f8008", -603 => x"cf387c76", -604 => x"315d7cfe", -605 => x"bc38feac", -606 => x"39901a08", -607 => x"7a087131", -608 => x"78117056", -609 => x"5a575280", -610 => x"cfe40851", -611 => x"84943f80", -612 => x"08802eff", -613 => x"a7388008", -614 => x"901b0c80", -615 => x"08167a0c", -616 => x"77941b0c", -617 => x"76881b0c", -618 => x"7656fd99", -619 => x"39790858", -620 => x"901a0878", -621 => x"27833881", -622 => x"54757727", -623 => x"843873b3", -624 => x"38941a08", -625 => x"54737726", -626 => x"80d33873", -627 => x"5378529c", -628 => x"1a0851a4", -629 => x"1a085877", -630 => x"2d800856", -631 => x"80088024", -632 => x"fd83388c", -633 => x"1a2280c0", -634 => x"075e7d8c", -635 => x"1b23ff55", -636 => x"fed73975", -637 => x"53785277", -638 => x"5181dd3f", -639 => x"7908167a", -640 => x"0c79518d", -641 => x"953f8008", -642 => x"802efcd9", -643 => x"388c1a22", -644 => x"80c0075e", -645 => x"7d8c1b23", -646 => x"ff55fead", -647 => x"39767754", -648 => x"79537852", -649 => x"5681b13f", -650 => x"881a0877", -651 => x"31881b0c", -652 => x"7908177a", -653 => x"0cfcae39", -654 => x"fa3d0d7a", -655 => x"79028805", -656 => x"a7053355", -657 => x"53548374", -658 => x"2780df38", -659 => x"71830651", -660 => x"7080d738", -661 => x"71715755", -662 => x"83517582", -663 => x"802913ff", -664 => x"12525670", -665 => x"8025f338", -666 => x"837427bc", -667 => x"38740876", -668 => x"327009f7", -669 => x"fbfdff12", -670 => x"06f88482", -671 => x"81800651", -672 => x"5170802e", -673 => x"98387451", -674 => x"80527033", -675 => x"5772772e", -676 => x"b9388111", -677 => x"81135351", -678 => x"837227ee", -679 => x"38fc1484", -680 => x"16565473", -681 => x"8326c638", -682 => x"7452ff14", -683 => x"5170ff2e", -684 => x"97387133", -685 => x"5472742e", -686 => x"98388112", -687 => x"ff125252", -688 => x"70ff2e09", -689 => x"8106eb38", -690 => x"80517080", -691 => x"0c883d0d", -692 => x"0471800c", -693 => x"883d0d04", -694 => x"fa3d0d78", -695 => x"7a7c7272", -696 => x"72595755", -697 => x"58565774", -698 => x"7727b238", -699 => x"75155176", -700 => x"7127aa38", -701 => x"707618ff", -702 => x"18535353", -703 => x"70ff2e96", -704 => x"38ff12ff", -705 => x"14545272", -706 => x"337234ff", -707 => x"115170ff", -708 => x"2e098106", -709 => x"ec387680", -710 => x"0c883d0d", -711 => x"048f7627", -712 => x"80e63874", -713 => x"77078306", -714 => x"517080dc", -715 => x"38767552", -716 => x"53707084", -717 => x"05520873", -718 => x"70840555", -719 => x"0c727170", -720 => x"84055308", -721 => x"71708405", -722 => x"530c7170", -723 => x"84055308", -724 => x"71708405", -725 => x"530c7170", -726 => x"84055308", -727 => x"71708405", -728 => x"530cf015", -729 => x"5553738f", -730 => x"26c73883", -731 => x"74279538", -732 => x"70708405", -733 => x"52087370", -734 => x"8405550c", -735 => x"fc145473", -736 => x"8326ed38", -737 => x"72715452", -738 => x"ff145170", -739 => x"ff2eff86", -740 => x"38727081", -741 => x"05543372", -742 => x"70810554", -743 => x"34ff1151", -744 => x"ea39ef3d", -745 => x"0d636567", -746 => x"405d427b", -747 => x"802e8582", -748 => x"386151a9", -749 => x"e73ff81c", -750 => x"70841208", -751 => x"70fc0670", -752 => x"628b0570", -753 => x"f8064159", -754 => x"455c5f41", -755 => x"57967427", -756 => x"82c53880", -757 => x"7b247e7c", -758 => x"26075880", -759 => x"5477742e", -760 => x"09810682", -761 => x"ab38787b", -762 => x"2581fe38", -763 => x"781780d7", -764 => x"a00b8805", -765 => x"085b5679", -766 => x"762e84c5", -767 => x"38841608", -768 => x"70fe0617", -769 => x"84110881", -770 => x"06415555", -771 => x"7e828d38", -772 => x"74fc0658", -773 => x"79762e84", -774 => x"e3387818", -775 => x"5f7e7b25", -776 => x"81ff387c", -777 => x"81065473", -778 => x"82c13876", -779 => x"77083184", -780 => x"1108fc06", -781 => x"56577580", -782 => x"2e913879", -783 => x"762e84f0", -784 => x"38741819", -785 => x"58777b25", -786 => x"84913876", -787 => x"802e829b", -788 => x"38781556", -789 => x"7a762482", -790 => x"92388c17", -791 => x"08881808", -792 => x"718c120c", -793 => x"88120c5e", -794 => x"75598817", -795 => x"61fc055b", -796 => x"5679a426", -797 => x"85ff387b", -798 => x"76595593", -799 => x"7a2780c9", -800 => x"387b7084", -801 => x"055d087c", -802 => x"56760c74", -803 => x"70840556", -804 => x"088c180c", -805 => x"9017589b", -806 => x"7a27ae38", -807 => x"74708405", -808 => x"5608780c", -809 => x"74708405", -810 => x"56089418", -811 => x"0c981758", -812 => x"a37a2795", -813 => x"38747084", -814 => x"05560878", -815 => x"0c747084", -816 => x"0556089c", -817 => x"180ca017", -818 => x"58747084", -819 => x"05560875", -820 => x"5f787084", -821 => x"055a0c77", -822 => x"7e708405", -823 => x"40087170", -824 => x"8405530c", -825 => x"7e08710c", -826 => x"5d787b31", -827 => x"56758f26", -828 => x"80c93884", -829 => x"17088106", -830 => x"79078418", -831 => x"0c781784", -832 => x"11088107", -833 => x"84120c5b", -834 => x"6151a791", -835 => x"3f881754", -836 => x"73800c93", -837 => x"3d0d0490", -838 => x"5bfdb839", -839 => x"7756fe83", -840 => x"398c1608", -841 => x"88170871", -842 => x"8c120c88", -843 => x"120c587e", -844 => x"707c3157", -845 => x"598f7627", -846 => x"ffb9387a", -847 => x"17841808", -848 => x"81067c07", -849 => x"84190c76", -850 => x"81078412", -851 => x"0c761184", -852 => x"11088107", -853 => x"84120c5b", -854 => x"88055261", -855 => x"518fda3f", -856 => x"6151a6b9", -857 => x"3f881754", -858 => x"ffa6397d", -859 => x"52615197", -860 => x"d73f8008", -861 => x"5a800880", -862 => x"2e81ab38", -863 => x"8008f805", -864 => x"60840508", -865 => x"fe066105", -866 => x"58557477", -867 => x"2e83f238", -868 => x"fc195877", -869 => x"a42681b0", -870 => x"387b8008", -871 => x"56579378", -872 => x"2780dc38", -873 => x"7b707084", -874 => x"05520880", -875 => x"08708405", -876 => x"800c0c80", -877 => x"08717084", -878 => x"0553085d", -879 => x"567b7670", -880 => x"8405580c", -881 => x"579b7827", -882 => x"b6387670", -883 => x"84055808", -884 => x"75708405", -885 => x"570c7670", -886 => x"84055808", -887 => x"75708405", -888 => x"570ca378", -889 => x"27993876", -890 => x"70840558", -891 => x"08757084", -892 => x"05570c76", -893 => x"70840558", -894 => x"08757084", -895 => x"05570c76", -896 => x"70840558", -897 => x"08775e75", -898 => x"70840557", -899 => x"0c747d70", -900 => x"84055f08", -901 => x"71708405", -902 => x"530c7d08", -903 => x"710c5f7b", -904 => x"5261518e", -905 => x"943f6151", -906 => x"a4f33f79", -907 => x"800c933d", -908 => x"0d047d52", -909 => x"61519690", -910 => x"3f800880", -911 => x"0c933d0d", -912 => x"04841608", -913 => x"55fbc939", -914 => x"77537b52", -915 => x"800851a2", -916 => x"a53f7b52", -917 => x"61518de1", -918 => x"3fcc398c", -919 => x"16088817", -920 => x"08718c12", -921 => x"0c88120c", -922 => x"5d8c1708", -923 => x"88180871", -924 => x"8c120c88", -925 => x"120c5977", -926 => x"59fbef39", -927 => x"7818901c", -928 => x"40557e75", -929 => x"24fb9c38", -930 => x"7a177080", -931 => x"d7a00b88", -932 => x"050c757c", -933 => x"31810784", -934 => x"120c5684", -935 => x"17088106", -936 => x"7b078418", -937 => x"0c6151a3", -938 => x"f43f8817", -939 => x"54fce139", -940 => x"74181990", -941 => x"1c5e5a7c", -942 => x"7a24fb8f", -943 => x"388c1708", -944 => x"88180871", -945 => x"8c120c88", -946 => x"120c5e88", -947 => x"1761fc05", -948 => x"575975a4", -949 => x"2681b638", -950 => x"7b795955", -951 => x"93762780", -952 => x"c9387b70", -953 => x"84055d08", -954 => x"7c56790c", -955 => x"74708405", -956 => x"56088c18", -957 => x"0c901758", -958 => x"9b7627ae", -959 => x"38747084", -960 => x"05560878", -961 => x"0c747084", -962 => x"05560894", -963 => x"180c9817", -964 => x"58a37627", -965 => x"95387470", -966 => x"84055608", -967 => x"780c7470", -968 => x"84055608", -969 => x"9c180ca0", -970 => x"17587470", -971 => x"84055608", -972 => x"75417870", -973 => x"84055a0c", -974 => x"77607084", -975 => x"05420871", -976 => x"70840553", -977 => x"0c600871", -978 => x"0c5e7a17", -979 => x"7080d7a0", -980 => x"0b88050c", -981 => x"7a7c3181", -982 => x"0784120c", -983 => x"58841708", -984 => x"81067b07", -985 => x"84180c61", -986 => x"51a2b23f", -987 => x"78547380", -988 => x"0c933d0d", -989 => x"0479537b", -990 => x"5275519f", -991 => x"f93ffae9", -992 => x"39841508", -993 => x"fc061960", -994 => x"5859fadd", -995 => x"3975537b", -996 => x"5278519f", -997 => x"e13f7a17", -998 => x"7080d7a0", -999 => x"0b88050c", -1000 => x"7a7c3181", -1001 => x"0784120c", -1002 => x"58841708", -1003 => x"81067b07", -1004 => x"84180c61", -1005 => x"51a1e63f", -1006 => x"7854ffb2", -1007 => x"39fa3d0d", -1008 => x"7880cfe4", -1009 => x"085455b8", -1010 => x"1308802e", -1011 => x"81af388c", -1012 => x"15227083", -1013 => x"ffff0670", -1014 => x"832a8132", -1015 => x"81065555", -1016 => x"5672802e", -1017 => x"80da3873", -1018 => x"842a8132", -1019 => x"810657ff", -1020 => x"537680f2", -1021 => x"3873822a", -1022 => x"81065473", -1023 => x"802eb938", -1024 => x"b0150854", -1025 => x"73802e9c", -1026 => x"3880c015", -1027 => x"5373732e", -1028 => x"8f387352", -1029 => x"80cfe408", -1030 => x"518a9e3f", -1031 => x"8c152256", -1032 => x"76b0160c", -1033 => x"75db0657", -1034 => x"768c1623", -1035 => x"800b8416", -1036 => x"0c901508", -1037 => x"750c7656", -1038 => x"75880754", -1039 => x"738c1623", -1040 => x"90150880", -1041 => x"2ebf388c", -1042 => x"15227081", -1043 => x"06555373", -1044 => x"9c38720a", -1045 => x"100a8106", -1046 => x"56758538", -1047 => x"94150854", -1048 => x"7388160c", -1049 => x"80537280", -1050 => x"0c883d0d", -1051 => x"04800b88", -1052 => x"160c9415", -1053 => x"08309816", -1054 => x"0c8053ea", -1055 => x"39725182", -1056 => x"a63ffecb", -1057 => x"3974518f", -1058 => x"bc3f8c15", -1059 => x"22708106", -1060 => x"55537380", -1061 => x"2effbb38", -1062 => x"d439f83d", -1063 => x"0d7a5776", -1064 => x"802e8197", -1065 => x"3880cfe4", -1066 => x"0854b814", -1067 => x"08802e80", -1068 => x"eb388c17", -1069 => x"2270902b", -1070 => x"70902c70", -1071 => x"832a8132", -1072 => x"81065b5b", -1073 => x"57557780", -1074 => x"cb389017", -1075 => x"08567580", -1076 => x"2e80c138", -1077 => x"76087631", -1078 => x"76780c79", -1079 => x"83065555", -1080 => x"73853894", -1081 => x"17085877", -1082 => x"88180c80", -1083 => x"7525a538", -1084 => x"74537552", -1085 => x"9c170851", -1086 => x"a4170854", -1087 => x"732d800b", -1088 => x"80082580", -1089 => x"c9388008", -1090 => x"16758008", -1091 => x"31565674", -1092 => x"8024dd38", -1093 => x"800b800c", -1094 => x"8a3d0d04", -1095 => x"73518187", -1096 => x"3f8c1722", -1097 => x"70902b70", -1098 => x"902c7083", -1099 => x"2a813281", -1100 => x"065b5b57", -1101 => x"5577dd38", -1102 => x"ff9039a1", -1103 => x"9a5280cf", -1104 => x"e408518c", -1105 => x"d03f8008", -1106 => x"800c8a3d", -1107 => x"0d048c17", -1108 => x"2280c007", -1109 => x"58778c18", -1110 => x"23ff0b80", -1111 => x"0c8a3d0d", -1112 => x"04fa3d0d", -1113 => x"797080dc", -1114 => x"298c1154", -1115 => x"7a535657", -1116 => x"8fd63f80", -1117 => x"08800855", -1118 => x"56800880", -1119 => x"2ea23880", -1120 => x"088c0554", -1121 => x"800b8008", -1122 => x"0c768008", -1123 => x"84050c73", -1124 => x"80088805", -1125 => x"0c745380", -1126 => x"5273519c", -1127 => x"f53f7554", -1128 => x"73800c88", -1129 => x"3d0d0470", -1130 => x"707074a8", -1131 => x"e60bbc12", -1132 => x"0c53810b", -1133 => x"b8140c80", -1134 => x"0b84dc14", -1135 => x"0c830b84", -1136 => x"e0140c84", -1137 => x"e81384e4", -1138 => x"140c8413", -1139 => x"08518070", -1140 => x"720c7084", -1141 => x"130c7088", -1142 => x"130c5284", -1143 => x"0b8c1223", -1144 => x"718e1223", -1145 => x"7190120c", -1146 => x"7194120c", -1147 => x"7198120c", -1148 => x"709c120c", -1149 => x"80c1d50b", -1150 => x"a0120c80", -1151 => x"c2a10ba4", -1152 => x"120c80c3", -1153 => x"9d0ba812", -1154 => x"0c80c3ee", -1155 => x"0bac120c", -1156 => x"88130872", -1157 => x"710c7284", -1158 => x"120c7288", -1159 => x"120c5189", -1160 => x"0b8c1223", -1161 => x"810b8e12", -1162 => x"23719012", -1163 => x"0c719412", -1164 => x"0c719812", -1165 => x"0c709c12", -1166 => x"0c80c1d5", -1167 => x"0ba0120c", -1168 => x"80c2a10b", -1169 => x"a4120c80", -1170 => x"c39d0ba8", -1171 => x"120c80c3", -1172 => x"ee0bac12", -1173 => x"0c8c1308", -1174 => x"72710c72", -1175 => x"84120c72", -1176 => x"88120c51", -1177 => x"8a0b8c12", -1178 => x"23820b8e", -1179 => x"12237190", -1180 => x"120c7194", -1181 => x"120c7198", -1182 => x"120c709c", -1183 => x"120c80c1", -1184 => x"d50ba012", -1185 => x"0c80c2a1", -1186 => x"0ba4120c", -1187 => x"80c39d0b", -1188 => x"a8120c80", -1189 => x"c3ee0bac", -1190 => x"120c5050", -1191 => x"5004f83d", -1192 => x"0d7a80cf", -1193 => x"e408b811", -1194 => x"08575758", -1195 => x"7481ec38", -1196 => x"a8e60bbc", -1197 => x"170c810b", -1198 => x"b8170c74", -1199 => x"84dc170c", -1200 => x"830b84e0", -1201 => x"170c84e8", -1202 => x"1684e417", -1203 => x"0c841608", -1204 => x"75710c75", -1205 => x"84120c75", -1206 => x"88120c59", -1207 => x"840b8c1a", -1208 => x"23748e1a", -1209 => x"2374901a", -1210 => x"0c74941a", -1211 => x"0c74981a", -1212 => x"0c789c1a", -1213 => x"0c80c1d5", -1214 => x"0ba01a0c", -1215 => x"80c2a10b", -1216 => x"a41a0c80", -1217 => x"c39d0ba8", -1218 => x"1a0c80c3", -1219 => x"ee0bac1a", -1220 => x"0c881608", -1221 => x"75710c75", -1222 => x"84120c75", -1223 => x"88120c57", -1224 => x"890b8c18", -1225 => x"23810b8e", -1226 => x"18237490", -1227 => x"180c7494", -1228 => x"180c7498", -1229 => x"180c769c", -1230 => x"180c80c1", -1231 => x"d50ba018", -1232 => x"0c80c2a1", -1233 => x"0ba4180c", -1234 => x"80c39d0b", -1235 => x"a8180c80", -1236 => x"c3ee0bac", -1237 => x"180c8c16", -1238 => x"0875710c", -1239 => x"7584120c", -1240 => x"7588120c", -1241 => x"548a0b8c", -1242 => x"1523820b", -1243 => x"8e152374", -1244 => x"90150c74", -1245 => x"94150c74", -1246 => x"98150c73", -1247 => x"9c150c80", -1248 => x"c1d50ba0", -1249 => x"150c80c2", -1250 => x"a10ba415", -1251 => x"0c80c39d", -1252 => x"0ba8150c", -1253 => x"80c3ee0b", -1254 => x"ac150c84", -1255 => x"dc168811", -1256 => x"08841208", -1257 => x"ff055757", -1258 => x"57807524", -1259 => x"9f388c16", -1260 => x"2270902b", -1261 => x"70902c51", -1262 => x"55597380", -1263 => x"2e80ed38", -1264 => x"80dc16ff", -1265 => x"16565674", -1266 => x"8025e338", -1267 => x"76085574", -1268 => x"802e8f38", -1269 => x"74881108", -1270 => x"841208ff", -1271 => x"05575757", -1272 => x"c83982fc", -1273 => x"5277518a", -1274 => x"df3f8008", -1275 => x"80085556", -1276 => x"8008802e", -1277 => x"a3388008", -1278 => x"8c057580", -1279 => x"080c5484", -1280 => x"0b800884", -1281 => x"050c7380", -1282 => x"0888050c", -1283 => x"82f05374", -1284 => x"52735197", -1285 => x"fd3f7554", -1286 => x"7374780c", -1287 => x"5573ffb4", -1288 => x"388c780c", -1289 => x"800b800c", -1290 => x"8a3d0d04", -1291 => x"810b8c17", -1292 => x"2373760c", -1293 => x"7388170c", -1294 => x"7384170c", -1295 => x"7390170c", -1296 => x"7394170c", -1297 => x"7398170c", -1298 => x"ff0b8e17", -1299 => x"2373b017", -1300 => x"0c73b417", -1301 => x"0c7380c4", -1302 => x"170c7380", -1303 => x"c8170c75", -1304 => x"800c8a3d", -1305 => x"0d047070", -1306 => x"a19a5273", -1307 => x"5186a63f", -1308 => x"50500470", -1309 => x"70a19a52", -1310 => x"80cfe408", -1311 => x"5186963f", -1312 => x"505004fb", -1313 => x"3d0d7770", -1314 => x"52569890", -1315 => x"3f80d7a0", -1316 => x"0b880508", -1317 => x"841108fc", -1318 => x"06707b31", -1319 => x"9fef05e0", -1320 => x"8006e080", -1321 => x"05525555", -1322 => x"a0807524", -1323 => x"94388052", -1324 => x"755197ea", -1325 => x"3f80d7a8", -1326 => x"08145372", -1327 => x"80082e8f", -1328 => x"38755197", -1329 => x"d83f8053", -1330 => x"72800c87", -1331 => x"3d0d0474", -1332 => x"30527551", -1333 => x"97c83f80", -1334 => x"08ff2ea8", -1335 => x"3880d7a0", -1336 => x"0b880508", -1337 => x"74763181", -1338 => x"0784120c", -1339 => x"5380d6e4", -1340 => x"08753180", -1341 => x"d6e40c75", -1342 => x"5197a23f", -1343 => x"810b800c", -1344 => x"873d0d04", -1345 => x"80527551", -1346 => x"97943f80", -1347 => x"d7a00b88", -1348 => x"05088008", -1349 => x"71315454", -1350 => x"8f7325ff", -1351 => x"a4388008", -1352 => x"80d79408", -1353 => x"3180d6e4", -1354 => x"0c728107", -1355 => x"84150c75", -1356 => x"5196ea3f", -1357 => x"8053ff90", -1358 => x"39f73d0d", -1359 => x"7b7d545a", -1360 => x"72802e82", -1361 => x"83387951", -1362 => x"96d23ff8", -1363 => x"13841108", -1364 => x"70fe0670", -1365 => x"13841108", -1366 => x"fc065c57", -1367 => x"58545780", -1368 => x"d7a80874", -1369 => x"2e82de38", -1370 => x"7784150c", -1371 => x"80738106", -1372 => x"56597479", -1373 => x"2e81d538", -1374 => x"77148411", -1375 => x"08810656", -1376 => x"5374a038", -1377 => x"77165678", -1378 => x"81e63888", -1379 => x"14085574", -1380 => x"80d7a82e", -1381 => x"82f9388c", -1382 => x"1408708c", -1383 => x"170c7588", -1384 => x"120c5875", -1385 => x"81078418", -1386 => x"0c751776", -1387 => x"710c5478", -1388 => x"81913883", -1389 => x"ff762781", -1390 => x"c8387589", -1391 => x"2a76832a", -1392 => x"54547380", -1393 => x"2ebf3875", -1394 => x"862ab805", -1395 => x"53847427", -1396 => x"b43880db", -1397 => x"14539474", -1398 => x"27ab3875", -1399 => x"8c2a80ee", -1400 => x"055380d4", -1401 => x"74279e38", -1402 => x"758f2a80", -1403 => x"f7055382", -1404 => x"d4742791", -1405 => x"3875922a", -1406 => x"80fc0553", -1407 => x"8ad47427", -1408 => x"843880fe", -1409 => x"53721010", -1410 => x"1080d7a0", -1411 => x"05881108", -1412 => x"55557375", -1413 => x"2e82bf38", -1414 => x"841408fc", -1415 => x"06597579", -1416 => x"278d3888", -1417 => x"14085473", -1418 => x"752e0981", -1419 => x"06ea388c", -1420 => x"1408708c", -1421 => x"190c7488", -1422 => x"190c7788", -1423 => x"120c5576", -1424 => x"8c150c79", -1425 => x"5194d63f", -1426 => x"8b3d0d04", -1427 => x"76087771", -1428 => x"31587605", -1429 => x"88180856", -1430 => x"567480d7", -1431 => x"a82e80e0", -1432 => x"388c1708", -1433 => x"708c170c", -1434 => x"7588120c", -1435 => x"53fe8939", -1436 => x"8814088c", -1437 => x"1508708c", -1438 => x"130c5988", -1439 => x"190cfea3", -1440 => x"3975832a", -1441 => x"70545480", -1442 => x"74248198", -1443 => x"3872822c", -1444 => x"81712b80", -1445 => x"d7a40807", -1446 => x"80d7a00b", -1447 => x"84050c74", -1448 => x"10101080", -1449 => x"d7a00588", -1450 => x"1108718c", -1451 => x"1b0c7088", -1452 => x"1b0c7988", -1453 => x"130c565a", -1454 => x"55768c15", -1455 => x"0cff8439", -1456 => x"8159fdb4", -1457 => x"39771673", -1458 => x"81065455", -1459 => x"72983876", -1460 => x"08777131", -1461 => x"5875058c", -1462 => x"18088819", -1463 => x"08718c12", -1464 => x"0c88120c", -1465 => x"55557481", -1466 => x"0784180c", -1467 => x"7680d7a0", -1468 => x"0b88050c", -1469 => x"80d79c08", -1470 => x"7526fec7", -1471 => x"3880d798", -1472 => x"08527951", -1473 => x"fafd3f79", -1474 => x"5193923f", -1475 => x"feba3981", -1476 => x"778c170c", -1477 => x"7788170c", -1478 => x"758c190c", -1479 => x"7588190c", -1480 => x"59fd8039", -1481 => x"83147082", -1482 => x"2c81712b", -1483 => x"80d7a408", -1484 => x"0780d7a0", -1485 => x"0b84050c", -1486 => x"75101010", -1487 => x"80d7a005", -1488 => x"88110871", -1489 => x"8c1c0c70", -1490 => x"881c0c7a", -1491 => x"88130c57", -1492 => x"5b5653fe", -1493 => x"e4398073", -1494 => x"24a33872", -1495 => x"822c8171", -1496 => x"2b80d7a4", -1497 => x"080780d7", -1498 => x"a00b8405", -1499 => x"0c58748c", -1500 => x"180c7388", -1501 => x"180c7688", -1502 => x"160cfdc3", -1503 => x"39831370", -1504 => x"822c8171", -1505 => x"2b80d7a4", -1506 => x"080780d7", -1507 => x"a00b8405", -1508 => x"0c5953da", -1509 => x"39f93d0d", -1510 => x"797b5853", -1511 => x"800b80cf", -1512 => x"e4085356", -1513 => x"72722ebc", -1514 => x"3884dc13", -1515 => x"5574762e", -1516 => x"b3388815", -1517 => x"08841608", -1518 => x"ff055454", -1519 => x"80732499", -1520 => x"388c1422", -1521 => x"70902b53", -1522 => x"587180d4", -1523 => x"3880dc14", -1524 => x"ff145454", -1525 => x"728025e9", -1526 => x"38740855", -1527 => x"74d43880", -1528 => x"cfe40852", -1529 => x"84dc1255", -1530 => x"74802ead", -1531 => x"38881508", -1532 => x"841608ff", -1533 => x"05545480", -1534 => x"73249838", -1535 => x"8c142270", -1536 => x"902b5358", -1537 => x"71ad3880", -1538 => x"dc14ff14", -1539 => x"54547280", -1540 => x"25ea3874", -1541 => x"085574d5", -1542 => x"3875800c", -1543 => x"893d0d04", -1544 => x"7351762d", -1545 => x"75800807", -1546 => x"80dc15ff", -1547 => x"15555556", -1548 => x"ffa23973", -1549 => x"51762d75", -1550 => x"80080780", -1551 => x"dc15ff15", -1552 => x"555556ca", -1553 => x"39ea3d0d", -1554 => x"688c1122", -1555 => x"700a100a", -1556 => x"81065758", -1557 => x"567480e4", -1558 => x"388e1622", -1559 => x"70902b70", -1560 => x"902c5155", -1561 => x"58807424", -1562 => x"b138983d", -1563 => x"c4055373", -1564 => x"5280cfe4", -1565 => x"08519481", -1566 => x"3f800b80", -1567 => x"08249738", -1568 => x"7983e080", -1569 => x"06547380", -1570 => x"c0802e81", -1571 => x"8f387382", -1572 => x"80802e81", -1573 => x"91388c16", -1574 => x"22577690", -1575 => x"80075473", -1576 => x"8c172388", -1577 => x"805280cf", -1578 => x"e4085181", -1579 => x"9b3f8008", -1580 => x"9d388c16", -1581 => x"22820755", -1582 => x"748c1723", -1583 => x"80c31670", -1584 => x"770c9017", -1585 => x"0c810b94", -1586 => x"170c983d", -1587 => x"0d0480cf", -1588 => x"e408a8e6", -1589 => x"0bbc120c", -1590 => x"588c1622", -1591 => x"81800754", -1592 => x"738c1723", -1593 => x"8008760c", -1594 => x"80089017", -1595 => x"0c88800b", -1596 => x"94170c74", -1597 => x"802ed338", -1598 => x"8e162270", -1599 => x"902b7090", -1600 => x"2c535654", -1601 => x"9afe3f80", -1602 => x"08802eff", -1603 => x"bd388c16", -1604 => x"22810757", -1605 => x"768c1723", -1606 => x"983d0d04", -1607 => x"810b8c17", -1608 => x"225855fe", -1609 => x"f539a816", -1610 => x"0880c39d", -1611 => x"2e098106", -1612 => x"fee4388c", -1613 => x"16228880", -1614 => x"0754738c", -1615 => x"17238880", -1616 => x"0b80cc17", -1617 => x"0cfedc39", -1618 => x"f43d0d7e", -1619 => x"608b1170", -1620 => x"f8065b55", -1621 => x"555d7296", -1622 => x"26833890", -1623 => x"58807824", -1624 => x"74792607", -1625 => x"55805474", -1626 => x"742e0981", -1627 => x"0680ca38", -1628 => x"7c518ea8", -1629 => x"3f7783f7", -1630 => x"2680c538", -1631 => x"77832a70", -1632 => x"10101080", -1633 => x"d7a0058c", -1634 => x"11085858", -1635 => x"5475772e", -1636 => x"81f03884", -1637 => x"1608fc06", -1638 => x"8c170888", -1639 => x"1808718c", -1640 => x"120c8812", -1641 => x"0c5b7605", -1642 => x"84110881", -1643 => x"0784120c", -1644 => x"537c518d", -1645 => x"e83f8816", -1646 => x"5473800c", -1647 => x"8e3d0d04", -1648 => x"77892a78", -1649 => x"832a5854", -1650 => x"73802ebf", -1651 => x"3877862a", -1652 => x"b8055784", -1653 => x"7427b438", -1654 => x"80db1457", -1655 => x"947427ab", -1656 => x"38778c2a", -1657 => x"80ee0557", -1658 => x"80d47427", -1659 => x"9e38778f", -1660 => x"2a80f705", -1661 => x"5782d474", -1662 => x"27913877", -1663 => x"922a80fc", -1664 => x"05578ad4", -1665 => x"74278438", -1666 => x"80fe5776", -1667 => x"10101080", -1668 => x"d7a0058c", -1669 => x"11085653", -1670 => x"74732ea3", -1671 => x"38841508", -1672 => x"fc067079", -1673 => x"31555673", -1674 => x"8f2488e4", -1675 => x"38738025", -1676 => x"88e6388c", -1677 => x"15085574", -1678 => x"732e0981", -1679 => x"06df3881", -1680 => x"175980d7", -1681 => x"b0085675", -1682 => x"80d7a82e", -1683 => x"82cc3884", -1684 => x"1608fc06", -1685 => x"70793155", -1686 => x"55738f24", -1687 => x"bb3880d7", -1688 => x"a80b80d7", -1689 => x"b40c80d7", -1690 => x"a80b80d7", -1691 => x"b00c8074", -1692 => x"2480db38", -1693 => x"74168411", -1694 => x"08810784", -1695 => x"120c53fe", -1696 => x"b0398816", -1697 => x"8c110857", -1698 => x"5975792e", -1699 => x"098106fe", -1700 => x"82388214", -1701 => x"59ffab39", -1702 => x"77167881", -1703 => x"0784180c", -1704 => x"7080d7b4", -1705 => x"0c7080d7", -1706 => x"b00c80d7", -1707 => x"a80b8c12", -1708 => x"0c8c1108", -1709 => x"88120c74", -1710 => x"81078412", -1711 => x"0c740574", -1712 => x"710c5b7c", -1713 => x"518bd63f", -1714 => x"881654fd", -1715 => x"ec3983ff", -1716 => x"75278391", -1717 => x"3874892a", -1718 => x"75832a54", -1719 => x"5473802e", -1720 => x"bf387486", -1721 => x"2ab80553", -1722 => x"847427b4", -1723 => x"3880db14", -1724 => x"53947427", -1725 => x"ab38748c", -1726 => x"2a80ee05", -1727 => x"5380d474", -1728 => x"279e3874", -1729 => x"8f2a80f7", -1730 => x"055382d4", -1731 => x"74279138", -1732 => x"74922a80", -1733 => x"fc05538a", -1734 => x"d4742784", -1735 => x"3880fe53", -1736 => x"72101010", -1737 => x"80d7a005", -1738 => x"88110855", -1739 => x"5773772e", -1740 => x"868b3884", -1741 => x"1408fc06", -1742 => x"5b747b27", -1743 => x"8d388814", -1744 => x"08547377", -1745 => x"2e098106", -1746 => x"ea388c14", -1747 => x"0880d7a0", -1748 => x"0b840508", -1749 => x"718c190c", -1750 => x"7588190c", -1751 => x"7788130c", -1752 => x"5c57758c", -1753 => x"150c7853", -1754 => x"80792483", -1755 => x"98387282", -1756 => x"2c81712b", -1757 => x"5656747b", -1758 => x"2680ca38", -1759 => x"7a750657", -1760 => x"7682a338", -1761 => x"78fc0684", -1762 => x"05597410", -1763 => x"707c0655", -1764 => x"55738292", -1765 => x"38841959", -1766 => x"f13980d7", -1767 => x"a00b8405", -1768 => x"0879545b", -1769 => x"788025c6", -1770 => x"3882da39", -1771 => x"74097b06", -1772 => x"7080d7a0", -1773 => x"0b84050c", -1774 => x"5b741055", -1775 => x"747b2685", -1776 => x"387485bc", -1777 => x"3880d7a0", -1778 => x"0b880508", -1779 => x"70841208", -1780 => x"fc06707b", -1781 => x"317b7226", -1782 => x"8f722507", -1783 => x"5d575c5c", -1784 => x"5578802e", -1785 => x"80d93879", -1786 => x"1580d798", -1787 => x"08199011", -1788 => x"59545680", -1789 => x"d79408ff", -1790 => x"2e8838a0", -1791 => x"8f13e080", -1792 => x"06577652", -1793 => x"7c518996", -1794 => x"3f800854", -1795 => x"8008ff2e", -1796 => x"90388008", -1797 => x"762782a7", -1798 => x"387480d7", -1799 => x"a02e829f", -1800 => x"3880d7a0", -1801 => x"0b880508", -1802 => x"55841508", -1803 => x"fc067079", -1804 => x"31797226", -1805 => x"8f722507", -1806 => x"5d555a7a", -1807 => x"83f23877", -1808 => x"81078416", -1809 => x"0c771570", -1810 => x"80d7a00b", -1811 => x"88050c74", -1812 => x"81078412", -1813 => x"0c567c51", -1814 => x"88c33f88", -1815 => x"15547380", -1816 => x"0c8e3d0d", -1817 => x"0474832a", -1818 => x"70545480", -1819 => x"7424819b", -1820 => x"3872822c", -1821 => x"81712b80", -1822 => x"d7a40807", -1823 => x"7080d7a0", -1824 => x"0b84050c", -1825 => x"75101010", -1826 => x"80d7a005", -1827 => x"88110871", -1828 => x"8c1b0c70", -1829 => x"881b0c79", -1830 => x"88130c57", -1831 => x"555c5575", -1832 => x"8c150cfd", -1833 => x"c1397879", -1834 => x"10101080", -1835 => x"d7a00570", -1836 => x"565b5c8c", -1837 => x"14085675", -1838 => x"742ea338", -1839 => x"841608fc", -1840 => x"06707931", -1841 => x"5853768f", -1842 => x"2483f138", -1843 => x"76802584", -1844 => x"af388c16", -1845 => x"08567574", -1846 => x"2e098106", -1847 => x"df388814", -1848 => x"811a7083", -1849 => x"06555a54", -1850 => x"72c9387b", -1851 => x"83065675", -1852 => x"802efdb8", -1853 => x"38ff1cf8", -1854 => x"1b5b5c88", -1855 => x"1a087a2e", -1856 => x"ea38fdb5", -1857 => x"39831953", -1858 => x"fce43983", -1859 => x"1470822c", -1860 => x"81712b80", -1861 => x"d7a40807", -1862 => x"7080d7a0", -1863 => x"0b84050c", -1864 => x"76101010", -1865 => x"80d7a005", -1866 => x"88110871", -1867 => x"8c1c0c70", -1868 => x"881c0c7a", -1869 => x"88130c58", -1870 => x"535d5653", -1871 => x"fee13980", -1872 => x"d6e40817", -1873 => x"59800876", -1874 => x"2e818b38", -1875 => x"80d79408", -1876 => x"ff2e848e", -1877 => x"38737631", -1878 => x"1980d6e4", -1879 => x"0c738706", -1880 => x"70565372", -1881 => x"802e8838", -1882 => x"88733170", -1883 => x"15555576", -1884 => x"149fff06", -1885 => x"a0807131", -1886 => x"1670547e", -1887 => x"53515386", -1888 => x"9d3f8008", -1889 => x"568008ff", -1890 => x"2e819e38", -1891 => x"80d6e408", -1892 => x"137080d6", -1893 => x"e40c7475", -1894 => x"80d7a00b", -1895 => x"88050c77", -1896 => x"76311581", -1897 => x"07555659", -1898 => x"7a80d7a0", -1899 => x"2e83c038", -1900 => x"798f2682", -1901 => x"ef38810b", -1902 => x"84150c84", -1903 => x"1508fc06", -1904 => x"70793179", -1905 => x"72268f72", -1906 => x"25075d55", -1907 => x"5a7a802e", -1908 => x"fced3880", -1909 => x"db398008", -1910 => x"9fff0655", -1911 => x"74feed38", -1912 => x"7880d6e4", -1913 => x"0c80d7a0", -1914 => x"0b880508", -1915 => x"7a188107", -1916 => x"84120c55", -1917 => x"80d79008", -1918 => x"79278638", -1919 => x"7880d790", -1920 => x"0c80d78c", -1921 => x"087927fc", -1922 => x"a0387880", -1923 => x"d78c0c84", -1924 => x"1508fc06", -1925 => x"70793179", -1926 => x"72268f72", -1927 => x"25075d55", -1928 => x"5a7a802e", -1929 => x"fc993888", -1930 => x"39807457", -1931 => x"53fedd39", -1932 => x"7c5184e9", -1933 => x"3f800b80", -1934 => x"0c8e3d0d", -1935 => x"04807324", -1936 => x"a5387282", -1937 => x"2c81712b", -1938 => x"80d7a408", -1939 => x"077080d7", -1940 => x"a00b8405", -1941 => x"0c5c5a76", -1942 => x"8c170c73", -1943 => x"88170c75", -1944 => x"88180cf9", -1945 => x"fd398313", -1946 => x"70822c81", -1947 => x"712b80d7", -1948 => x"a4080770", -1949 => x"80d7a00b", -1950 => x"84050c5d", -1951 => x"5b53d839", -1952 => x"7a75065c", -1953 => x"7bfc9f38", -1954 => x"84197510", -1955 => x"5659f139", -1956 => x"ff178105", -1957 => x"59f7ab39", -1958 => x"8c150888", -1959 => x"1608718c", -1960 => x"120c8812", -1961 => x"0c597515", -1962 => x"84110881", -1963 => x"0784120c", -1964 => x"587c5183", -1965 => x"e83f8815", -1966 => x"54fba339", -1967 => x"77167881", -1968 => x"0784180c", -1969 => x"8c170888", -1970 => x"1808718c", -1971 => x"120c8812", -1972 => x"0c5c7080", -1973 => x"d7b40c70", -1974 => x"80d7b00c", -1975 => x"80d7a80b", -1976 => x"8c120c8c", -1977 => x"11088812", -1978 => x"0c778107", -1979 => x"84120c77", -1980 => x"0577710c", -1981 => x"557c5183", -1982 => x"a43f8816", -1983 => x"54f5ba39", -1984 => x"72168411", -1985 => x"08810784", -1986 => x"120c588c", -1987 => x"16088817", -1988 => x"08718c12", -1989 => x"0c88120c", -1990 => x"577c5183", -1991 => x"803f8816", -1992 => x"54f59639", -1993 => x"7284150c", -1994 => x"f41af806", -1995 => x"70841d08", -1996 => x"81060784", -1997 => x"1d0c701c", -1998 => x"5556850b", -1999 => x"84150c85", -2000 => x"0b88150c", -2001 => x"8f7627fd", -2002 => x"ab38881b", -2003 => x"527c51eb", -2004 => x"e83f80d7", -2005 => x"a00b8805", -2006 => x"0880d6e4", -2007 => x"085a55fd", -2008 => x"93397880", -2009 => x"d6e40c73", -2010 => x"80d7940c", -2011 => x"fbef3972", -2012 => x"84150cfc", -2013 => x"ff39fb3d", -2014 => x"0d77707a", -2015 => x"7c585553", -2016 => x"568f7527", -2017 => x"80e63872", -2018 => x"76078306", -2019 => x"517080dc", -2020 => x"38757352", -2021 => x"54707084", -2022 => x"05520874", -2023 => x"70840556", -2024 => x"0c737170", -2025 => x"84055308", -2026 => x"71708405", -2027 => x"530c7170", -2028 => x"84055308", -2029 => x"71708405", -2030 => x"530c7170", -2031 => x"84055308", -2032 => x"71708405", -2033 => x"530cf016", -2034 => x"5654748f", -2035 => x"26c73883", -2036 => x"75279538", -2037 => x"70708405", -2038 => x"52087470", -2039 => x"8405560c", -2040 => x"fc155574", -2041 => x"8326ed38", -2042 => x"73715452", -2043 => x"ff155170", -2044 => x"ff2e9838", -2045 => x"72708105", -2046 => x"54337270", -2047 => x"81055434", -2048 => x"ff115170", -2049 => x"ff2e0981", -2050 => x"06ea3875", -2051 => x"800c873d", -2052 => x"0d04fb3d", -2053 => x"0d777a71", -2054 => x"028c05a3", -2055 => x"05335854", -2056 => x"54568373", -2057 => x"2780d438", -2058 => x"75830651", -2059 => x"7080cc38", -2060 => x"74882b75", -2061 => x"07707190", -2062 => x"2b075551", -2063 => x"8f7327a7", -2064 => x"38737270", -2065 => x"8405540c", -2066 => x"71747170", -2067 => x"8405530c", -2068 => x"74717084", -2069 => x"05530c74", -2070 => x"71708405", -2071 => x"530cf014", -2072 => x"5452728f", -2073 => x"26db3883", -2074 => x"73279038", -2075 => x"73727084", -2076 => x"05540cfc", -2077 => x"13537283", -2078 => x"26f238ff", -2079 => x"135170ff", -2080 => x"2e933874", -2081 => x"72708105", -2082 => x"5434ff11", -2083 => x"5170ff2e", -2084 => x"098106ef", -2085 => x"3875800c", -2086 => x"873d0d04", -2087 => x"04047070", -2088 => x"7070800b", -2089 => x"80dfe00c", -2090 => x"765184f3", -2091 => x"3f800853", -2092 => x"8008ff2e", -2093 => x"89387280", -2094 => x"0c505050", -2095 => x"500480df", -2096 => x"e0085473", -2097 => x"802eef38", -2098 => x"7574710c", -2099 => x"5272800c", -2100 => x"50505050", -2101 => x"04f93d0d", -2102 => x"797c557b", -2103 => x"548e1122", -2104 => x"70902b70", -2105 => x"902c5557", -2106 => x"80cfe408", -2107 => x"53585683", -2108 => x"f63f8008", -2109 => x"57800b80", -2110 => x"08249338", -2111 => x"80d01608", -2112 => x"80080580", -2113 => x"d0170c76", -2114 => x"800c893d", -2115 => x"0d048c16", -2116 => x"2283dfff", -2117 => x"0655748c", -2118 => x"17237680", -2119 => x"0c893d0d", -2120 => x"04fa3d0d", -2121 => x"788c1122", -2122 => x"70882a70", -2123 => x"81065157", -2124 => x"585674a9", -2125 => x"388c1622", -2126 => x"83dfff06", -2127 => x"55748c17", -2128 => x"237a5479", -2129 => x"538e1622", -2130 => x"70902b70", -2131 => x"902c5456", -2132 => x"80cfe408", -2133 => x"525681b2", -2134 => x"3f883d0d", -2135 => x"04825480", -2136 => x"538e1622", -2137 => x"70902b70", -2138 => x"902c5456", -2139 => x"80cfe408", -2140 => x"525782bb", -2141 => x"3f8c1622", -2142 => x"83dfff06", -2143 => x"55748c17", -2144 => x"237a5479", -2145 => x"538e1622", -2146 => x"70902b70", -2147 => x"902c5456", -2148 => x"80cfe408", -2149 => x"525680f2", -2150 => x"3f883d0d", -2151 => x"04f93d0d", -2152 => x"797c557b", -2153 => x"548e1122", -2154 => x"70902b70", -2155 => x"902c5557", -2156 => x"80cfe408", -2157 => x"53585681", -2158 => x"f63f8008", -2159 => x"578008ff", -2160 => x"2e99388c", -2161 => x"1622a080", -2162 => x"0755748c", -2163 => x"17238008", -2164 => x"80d0170c", -2165 => x"76800c89", -2166 => x"3d0d048c", -2167 => x"162283df", -2168 => x"ff065574", -2169 => x"8c172376", -2170 => x"800c893d", -2171 => x"0d047070", -2172 => x"70748e11", -2173 => x"2270902b", -2174 => x"70902c55", -2175 => x"51515380", -2176 => x"cfe40851", -2177 => x"bd3f5050", -2178 => x"5004fb3d", -2179 => x"0d800b80", -2180 => x"dfe00c7a", -2181 => x"53795278", -2182 => x"5182ff3f", -2183 => x"80085580", -2184 => x"08ff2e88", -2185 => x"3874800c", -2186 => x"873d0d04", -2187 => x"80dfe008", -2188 => x"5675802e", -2189 => x"f0387776", -2190 => x"710c5474", -2191 => x"800c873d", -2192 => x"0d047070", -2193 => x"7070800b", -2194 => x"80dfe00c", -2195 => x"765184cc", -2196 => x"3f800853", -2197 => x"8008ff2e", -2198 => x"89387280", -2199 => x"0c505050", -2200 => x"500480df", -2201 => x"e0085473", -2202 => x"802eef38", -2203 => x"7574710c", -2204 => x"5272800c", -2205 => x"50505050", -2206 => x"04fc3d0d", -2207 => x"800b80df", -2208 => x"e00c7852", -2209 => x"775187b3", -2210 => x"3f800854", -2211 => x"8008ff2e", -2212 => x"88387380", -2213 => x"0c863d0d", -2214 => x"0480dfe0", -2215 => x"08557480", -2216 => x"2ef03876", -2217 => x"75710c53", -2218 => x"73800c86", -2219 => x"3d0d04fb", -2220 => x"3d0d800b", -2221 => x"80dfe00c", -2222 => x"7a537952", -2223 => x"7851848e", -2224 => x"3f800855", -2225 => x"8008ff2e", -2226 => x"88387480", -2227 => x"0c873d0d", -2228 => x"0480dfe0", -2229 => x"08567580", -2230 => x"2ef03877", -2231 => x"76710c54", -2232 => x"74800c87", -2233 => x"3d0d04fb", -2234 => x"3d0d800b", -2235 => x"80dfe00c", -2236 => x"7a537952", -2237 => x"78518296", -2238 => x"3f800855", -2239 => x"8008ff2e", -2240 => x"88387480", -2241 => x"0c873d0d", -2242 => x"0480dfe0", -2243 => x"08567580", -2244 => x"2ef03877", -2245 => x"76710c54", -2246 => x"74800c87", -2247 => x"3d0d0470", -2248 => x"707080df", -2249 => x"d0088938", -2250 => x"80dfe40b", -2251 => x"80dfd00c", -2252 => x"80dfd008", -2253 => x"75115252", -2254 => x"ff537087", -2255 => x"fb808026", -2256 => x"88387080", -2257 => x"dfd00c71", -2258 => x"5372800c", -2259 => x"50505004", -2260 => x"fd3d0d80", -2261 => x"0b80cfd8", -2262 => x"08545472", -2263 => x"812e9b38", -2264 => x"7380dfd4", -2265 => x"0cc2bf3f", -2266 => x"c1963f80", -2267 => x"dfa85281", -2268 => x"51c3fd3f", -2269 => x"80085186", -2270 => x"c23f7280", -2271 => x"dfd40cc2", -2272 => x"a53fc0fc", -2273 => x"3f80dfa8", -2274 => x"528151c3", -2275 => x"e33f8008", -2276 => x"5186a83f", -2277 => x"00ff3900", -2278 => x"ff39f53d", -2279 => x"0d7e6080", -2280 => x"dfd40870", -2281 => x"5b585b5b", -2282 => x"7580c238", -2283 => x"777a25a1", -2284 => x"38771b70", -2285 => x"337081ff", -2286 => x"06585859", -2287 => x"758a2e98", -2288 => x"387681ff", -2289 => x"0651c1bd", -2290 => x"3f811858", -2291 => x"797824e1", -2292 => x"3879800c", -2293 => x"8d3d0d04", -2294 => x"8d51c1a9", -2295 => x"3f783370", -2296 => x"81ff0652", -2297 => x"57c19e3f", -2298 => x"811858e0", -2299 => x"3979557a", -2300 => x"547d5385", -2301 => x"528d3dfc", -2302 => x"0551c0c6", -2303 => x"3f800856", -2304 => x"85b23f7b", -2305 => x"80080c75", -2306 => x"800c8d3d", -2307 => x"0d04f63d", -2308 => x"0d7d7f80", -2309 => x"dfd40870", -2310 => x"5b585a5a", -2311 => x"7580c138", -2312 => x"777925b3", -2313 => x"38c0b93f", -2314 => x"800881ff", -2315 => x"06708d32", -2316 => x"7030709f", -2317 => x"2a515157", -2318 => x"57768a2e", -2319 => x"80c43875", -2320 => x"802ebf38", -2321 => x"771a5676", -2322 => x"76347651", -2323 => x"c0b73f81", -2324 => x"18587878", -2325 => x"24cf3877", -2326 => x"5675800c", -2327 => x"8c3d0d04", -2328 => x"78557954", -2329 => x"7c538452", -2330 => x"8c3dfc05", -2331 => x"51ffbfd2", -2332 => x"3f800856", -2333 => x"84be3f7a", -2334 => x"80080c75", -2335 => x"800c8c3d", -2336 => x"0d04771a", -2337 => x"598a7934", -2338 => x"8118588d", -2339 => x"51ffbff5", -2340 => x"3f8a51ff", -2341 => x"bfef3f77", -2342 => x"56ffbe39", -2343 => x"fb3d0d80", -2344 => x"dfd40870", -2345 => x"56547388", -2346 => x"3874800c", -2347 => x"873d0d04", -2348 => x"77538352", -2349 => x"873dfc05", -2350 => x"51ffbf86", -2351 => x"3f800854", -2352 => x"83f23f75", -2353 => x"80080c73", -2354 => x"800c873d", -2355 => x"0d04fa3d", -2356 => x"0d80dfd4", -2357 => x"08802ea3", -2358 => x"387a5579", -2359 => x"54785386", -2360 => x"52883dfc", -2361 => x"0551ffbe", -2362 => x"d93f8008", -2363 => x"5683c53f", -2364 => x"7680080c", -2365 => x"75800c88", -2366 => x"3d0d0483", -2367 => x"b73f9d0b", -2368 => x"80080cff", -2369 => x"0b800c88", -2370 => x"3d0d04f7", -2371 => x"3d0d7b7d", -2372 => x"5b59bc53", -2373 => x"80527951", -2374 => x"f5f83f80", -2375 => x"70565798", -2376 => x"56741970", -2377 => x"3370782b", -2378 => x"79078118", -2379 => x"f81a5a58", -2380 => x"59555884", -2381 => x"7524ea38", -2382 => x"767a2384", -2383 => x"19588070", -2384 => x"56579856", -2385 => x"74187033", -2386 => x"70782b79", -2387 => x"078118f8", -2388 => x"1a5a5859", -2389 => x"51548475", -2390 => x"24ea3876", -2391 => x"821b2388", -2392 => x"19588070", -2393 => x"56579856", -2394 => x"74187033", -2395 => x"70782b79", -2396 => x"078118f8", -2397 => x"1a5a5859", -2398 => x"51548475", -2399 => x"24ea3876", -2400 => x"841b0c8c", -2401 => x"19588070", -2402 => x"56579856", -2403 => x"74187033", -2404 => x"70782b79", -2405 => x"078118f8", -2406 => x"1a5a5859", -2407 => x"51548475", -2408 => x"24ea3876", -2409 => x"881b2390", -2410 => x"19588070", -2411 => x"56579856", -2412 => x"74187033", -2413 => x"70782b79", -2414 => x"078118f8", -2415 => x"1a5a5859", -2416 => x"51548475", -2417 => x"24ea3876", -2418 => x"8a1b2394", -2419 => x"19588070", -2420 => x"56579856", -2421 => x"74187033", -2422 => x"70782b79", -2423 => x"078118f8", -2424 => x"1a5a5859", -2425 => x"51548475", -2426 => x"24ea3876", -2427 => x"8c1b2398", -2428 => x"19588070", -2429 => x"56579856", -2430 => x"74187033", -2431 => x"70782b79", -2432 => x"078118f8", -2433 => x"1a5a5859", -2434 => x"51548475", -2435 => x"24ea3876", -2436 => x"8e1b239c", -2437 => x"19588070", -2438 => x"5657b856", -2439 => x"74187033", -2440 => x"70782b79", -2441 => x"078118f8", -2442 => x"1a5a5859", -2443 => x"5a548875", -2444 => x"24ea3876", -2445 => x"901b0c8b", -2446 => x"3d0d04e9", -2447 => x"3d0d6a80", -2448 => x"dfd40857", -2449 => x"57759338", -2450 => x"80c0800b", -2451 => x"84180c75", -2452 => x"ac180c75", -2453 => x"800c993d", -2454 => x"0d04893d", -2455 => x"70556a54", -2456 => x"558a5299", -2457 => x"3dffbc05", -2458 => x"51ffbbd6", -2459 => x"3f800877", -2460 => x"53755256", -2461 => x"fd953fbc", -2462 => x"3f778008", -2463 => x"0c75800c", -2464 => x"993d0d04", -2465 => x"fc3d0d81", -2466 => x"5480dfd4", -2467 => x"08883873", -2468 => x"800c863d", -2469 => x"0d047653", -2470 => x"97b95286", -2471 => x"3dfc0551", -2472 => x"ffbb9f3f", -2473 => x"8008548c", -2474 => x"3f748008", -2475 => x"0c73800c", -2476 => x"863d0d04", -2477 => x"80cfe408", -2478 => x"800c04f7", -2479 => x"3d0d7b80", -2480 => x"cfe40882", -2481 => x"c811085a", -2482 => x"545a7780", -2483 => x"2e80da38", -2484 => x"81881884", -2485 => x"1908ff05", -2486 => x"81712b59", -2487 => x"55598074", -2488 => x"2480ea38", -2489 => x"807424b5", -2490 => x"3873822b", -2491 => x"78118805", -2492 => x"56568180", -2493 => x"19087706", -2494 => x"5372802e", -2495 => x"b6387816", -2496 => x"70085353", -2497 => x"79517408", -2498 => x"53722dff", -2499 => x"14fc17fc", -2500 => x"1779812c", -2501 => x"5a575754", -2502 => x"738025d6", -2503 => x"38770858", -2504 => x"77ffad38", -2505 => x"80cfe408", -2506 => x"53bc1308", -2507 => x"a5387951", -2508 => x"f8e23f74", -2509 => x"0853722d", -2510 => x"ff14fc17", -2511 => x"fc177981", -2512 => x"2c5a5757", -2513 => x"54738025", -2514 => x"ffa838d1", -2515 => x"398057ff", -2516 => x"93397251", -2517 => x"bc130854", -2518 => x"732d7951", -2519 => x"f8b63f70", -2520 => x"7080dfb0", -2521 => x"0bfc0570", -2522 => x"08525270", -2523 => x"ff2e9138", -2524 => x"702dfc12", -2525 => x"70085252", -2526 => x"70ff2e09", -2527 => x"8106f138", -2528 => x"50500404", -2529 => x"ffbb8c3f", -2530 => x"04000000", -2531 => x"00000040", -2532 => x"48656c6c", -2533 => x"6f20776f", -2534 => x"726c6420", -2535 => x"310a0000", -2536 => x"48656c6c", -2537 => x"6f20776f", -2538 => x"726c6420", -2539 => x"320a0000", -2540 => x"0a000000", -2541 => x"43000000", -2542 => x"64756d6d", -2543 => x"792e6578", -2544 => x"65000000", -2545 => x"00ffffff", -2546 => x"ff00ffff", -2547 => x"ffff00ff", -2548 => x"ffffff00", -2549 => x"00000000", -2550 => x"00000000", -2551 => x"00000000", -2552 => x"00002fb8", -2553 => x"000027e8", -2554 => x"00000000", -2555 => x"00002a50", -2556 => x"00002aac", -2557 => x"00002b08", -2558 => x"00000000", -2559 => x"00000000", -2560 => x"00000000", -2561 => x"00000000", -2562 => x"00000000", -2563 => x"00000000", -2564 => x"00000000", -2565 => x"00000000", -2566 => x"00000000", -2567 => x"000027b4", -2568 => x"00000000", -2569 => x"00000000", -2570 => x"00000000", -2571 => x"00000000", -2572 => x"00000000", -2573 => x"00000000", -2574 => x"00000000", -2575 => x"00000000", -2576 => x"00000000", -2577 => x"00000000", -2578 => x"00000000", -2579 => x"00000000", -2580 => x"00000000", -2581 => x"00000000", -2582 => x"00000000", -2583 => x"00000000", -2584 => x"00000000", -2585 => x"00000000", -2586 => x"00000000", -2587 => x"00000000", -2588 => x"00000000", -2589 => x"00000000", -2590 => x"00000000", -2591 => x"00000000", -2592 => x"00000000", -2593 => x"00000000", -2594 => x"00000000", -2595 => x"00000000", -2596 => x"00000001", -2597 => x"330eabcd", -2598 => x"1234e66d", -2599 => x"deec0005", -2600 => x"000b0000", -2601 => x"00000000", -2602 => x"00000000", -2603 => x"00000000", -2604 => x"00000000", -2605 => x"00000000", -2606 => x"00000000", -2607 => x"00000000", -2608 => x"00000000", -2609 => x"00000000", -2610 => x"00000000", -2611 => x"00000000", -2612 => x"00000000", -2613 => x"00000000", -2614 => x"00000000", -2615 => x"00000000", -2616 => x"00000000", -2617 => x"00000000", -2618 => x"00000000", -2619 => x"00000000", -2620 => x"00000000", -2621 => x"00000000", -2622 => x"00000000", -2623 => x"00000000", -2624 => x"00000000", -2625 => x"00000000", -2626 => x"00000000", -2627 => x"00000000", -2628 => x"00000000", -2629 => x"00000000", -2630 => x"00000000", -2631 => x"00000000", -2632 => x"00000000", -2633 => x"00000000", -2634 => x"00000000", -2635 => x"00000000", -2636 => x"00000000", -2637 => x"00000000", -2638 => x"00000000", -2639 => x"00000000", -2640 => x"00000000", -2641 => x"00000000", -2642 => x"00000000", -2643 => x"00000000", -2644 => x"00000000", -2645 => x"00000000", -2646 => x"00000000", -2647 => x"00000000", -2648 => x"00000000", -2649 => x"00000000", -2650 => x"00000000", -2651 => x"00000000", -2652 => x"00000000", -2653 => x"00000000", -2654 => x"00000000", -2655 => x"00000000", -2656 => x"00000000", -2657 => x"00000000", -2658 => x"00000000", -2659 => x"00000000", -2660 => x"00000000", -2661 => x"00000000", -2662 => x"00000000", -2663 => x"00000000", -2664 => x"00000000", -2665 => x"00000000", -2666 => x"00000000", -2667 => x"00000000", -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"00000000", -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"00000000", -2707 => x"00000000", -2708 => x"00000000", -2709 => x"00000000", -2710 => x"00000000", -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"ffffffff", -2790 => x"00000000", -2791 => x"00020000", -2792 => x"00000000", -2793 => x"00000000", -2794 => x"00002ba0", -2795 => x"00002ba0", -2796 => x"00002ba8", -2797 => x"00002ba8", -2798 => x"00002bb0", -2799 => x"00002bb0", -2800 => x"00002bb8", -2801 => x"00002bb8", -2802 => x"00002bc0", -2803 => x"00002bc0", -2804 => x"00002bc8", -2805 => x"00002bc8", -2806 => x"00002bd0", -2807 => x"00002bd0", -2808 => x"00002bd8", -2809 => x"00002bd8", -2810 => x"00002be0", -2811 => x"00002be0", -2812 => x"00002be8", -2813 => x"00002be8", -2814 => x"00002bf0", -2815 => x"00002bf0", -2816 => x"00002bf8", -2817 => x"00002bf8", -2818 => x"00002c00", -2819 => x"00002c00", -2820 => x"00002c08", -2821 => x"00002c08", -2822 => x"00002c10", -2823 => x"00002c10", -2824 => x"00002c18", -2825 => x"00002c18", -2826 => x"00002c20", -2827 => x"00002c20", -2828 => x"00002c28", -2829 => x"00002c28", -2830 => x"00002c30", -2831 => x"00002c30", -2832 => x"00002c38", -2833 => x"00002c38", -2834 => x"00002c40", -2835 => x"00002c40", -2836 => x"00002c48", -2837 => x"00002c48", -2838 => x"00002c50", -2839 => x"00002c50", -2840 => x"00002c58", -2841 => x"00002c58", -2842 => x"00002c60", -2843 => x"00002c60", -2844 => x"00002c68", -2845 => x"00002c68", -2846 => x"00002c70", -2847 => x"00002c70", -2848 => x"00002c78", -2849 => x"00002c78", -2850 => x"00002c80", -2851 => x"00002c80", -2852 => x"00002c88", -2853 => x"00002c88", -2854 => x"00002c90", -2855 => x"00002c90", -2856 => x"00002c98", -2857 => x"00002c98", -2858 => x"00002ca0", -2859 => x"00002ca0", -2860 => x"00002ca8", -2861 => x"00002ca8", -2862 => x"00002cb0", -2863 => x"00002cb0", -2864 => x"00002cb8", -2865 => x"00002cb8", -2866 => x"00002cc0", -2867 => x"00002cc0", -2868 => x"00002cc8", -2869 => x"00002cc8", -2870 => x"00002cd0", -2871 => x"00002cd0", -2872 => x"00002cd8", -2873 => x"00002cd8", -2874 => x"00002ce0", -2875 => x"00002ce0", -2876 => x"00002ce8", -2877 => x"00002ce8", -2878 => x"00002cf0", -2879 => x"00002cf0", -2880 => x"00002cf8", -2881 => x"00002cf8", -2882 => x"00002d00", -2883 => x"00002d00", -2884 => x"00002d08", -2885 => x"00002d08", -2886 => x"00002d10", -2887 => x"00002d10", -2888 => x"00002d18", -2889 => x"00002d18", -2890 => x"00002d20", -2891 => x"00002d20", -2892 => x"00002d28", -2893 => x"00002d28", -2894 => x"00002d30", -2895 => x"00002d30", -2896 => x"00002d38", -2897 => x"00002d38", -2898 => x"00002d40", -2899 => x"00002d40", -2900 => x"00002d48", -2901 => x"00002d48", -2902 => x"00002d50", -2903 => x"00002d50", -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"000027b8", -3051 => x"ffffffff", -3052 => x"00000000", -3053 => x"ffffffff", -3054 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; - end if; - if (mem_readEnable = '1') then - mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); - end if; - end if; -end process; - - - - -end dram_arch; diff --git a/zpu/hdl/zpu4/src/zpu_config_trace.vhd b/zpu/hdl/zpu4/src/zpu_config_trace.vhd deleted file mode 100644 index d765d9a..0000000 --- a/zpu/hdl/zpu4/src/zpu_config_trace.vhd +++ /dev/null @@ -1,17 +0,0 @@ -library ieee; -use ieee.std_logic_1164.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 := 27; - constant maxAddrBitDRAM : integer := 16; - constant maxAddrBitBRAM : integer := 16; - constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8"; - -end zpu_config; diff --git a/zpu/hdl/zpu4/test/interrupt/int.bin b/zpu/hdl/zpu4/test/interrupt/int.bin index 94cbe31..282f53b 100644 Binary files a/zpu/hdl/zpu4/test/interrupt/int.bin and b/zpu/hdl/zpu4/test/interrupt/int.bin differ diff --git a/zpu/hdl/zpu4/test/interrupt/int.c b/zpu/hdl/zpu4/test/interrupt/int.c index 1b6ec01..6ab28f7 100644 --- a/zpu/hdl/zpu4/test/interrupt/int.c +++ b/zpu/hdl/zpu4/test/interrupt/int.c @@ -4,11 +4,15 @@ #include -int counter; +volatile int counter; /* Example of single, fixed interval non-maskable, nested interrupt. The interrupt signal is * held high for enough cycles to guarantee that it will be noticed, i.e. longer than * any io access + 4 cycles roughly. + * + * Any non-trivial interrupt controller would have support for + * acknowledging interrupts(i.e. keep interrupts asserted until + * software acknowledges them via memory mapped IO). */ void _zpu_interrupt(void) { @@ -29,6 +33,7 @@ int main(int argc, char **argv) } else { puts("Got interrupt\n"); + t=counter; } } diff --git a/zpu/hdl/zpu4/test/interrupt/int.elf b/zpu/hdl/zpu4/test/interrupt/int.elf index a550987..346d148 100644 Binary files a/zpu/hdl/zpu4/test/interrupt/int.elf and b/zpu/hdl/zpu4/test/interrupt/int.elf differ diff --git a/zpu/hdl/zpu4/test/interrupt/int.ram b/zpu/hdl/zpu4/test/interrupt/int.ram index bcb424a..6751ec2 100644 --- a/zpu/hdl/zpu4/test/interrupt/int.ram +++ b/zpu/hdl/zpu4/test/interrupt/int.ram @@ -2,7 +2,7 @@ 1 => x"82700b0b", 2 => x"80cfe00c", 3 => x"3a0b0b80", -4 => x"c6e10400", +4 => x"c6e00400", 5 => x"00000000", 6 => x"00000000", 7 => x"00000000", @@ -169,7 +169,7 @@ 168 => x"80088408", 169 => x"88087575", 170 => x"0b0b0b8b", -171 => x"ac2d5050", +171 => x"ab2d5050", 172 => x"80085688", 173 => x"0c840c80", 174 => x"0c510400", @@ -177,7 +177,7 @@ 176 => x"80088408", 177 => x"88087575", 178 => x"0b0b0b8b", -179 => x"f02d5050", +179 => x"ef2d5050", 180 => x"80085688", 181 => x"0c840c80", 182 => x"0c510400", @@ -255,7 +255,7 @@ 254 => x"00000000", 255 => x"00000000", 256 => x"82c53f80", -257 => x"c6e73f04", +257 => x"c6e63f04", 258 => x"10101010", 259 => x"10101010", 260 => x"10101010", @@ -346,2192 +346,2192 @@ 345 => x"dfc4510b", 346 => x"0b0bf594", 347 => x"3f500404", -348 => x"80dfe008", -349 => x"810580df", -350 => x"e00c04fe", -351 => x"3d0d80df", -352 => x"e0087054", -353 => x"5272722e", -354 => x"953880cf", -355 => x"9c5182bb", -356 => x"3f80dfe0", -357 => x"08527272", -358 => x"2e098106", -359 => x"ed3880cf", -360 => x"ac5182a7", -361 => x"3f80dfe0", -362 => x"0852eb39", -363 => x"fb3d0d77", -364 => x"79555580", -365 => x"56757524", -366 => x"ab388074", -367 => x"249d3880", -368 => x"53735274", -369 => x"5180e13f", -370 => x"80085475", -371 => x"802e8538", -372 => x"80083054", -373 => x"73800c87", -374 => x"3d0d0473", -375 => x"30768132", -376 => x"5754dc39", -377 => x"74305581", -378 => x"56738025", -379 => x"d238ec39", -380 => x"fa3d0d78", -381 => x"7a575580", -382 => x"57767524", -383 => x"a438759f", -384 => x"2c548153", -385 => x"75743274", -386 => x"31527451", -387 => x"9b3f8008", -388 => x"5476802e", -389 => x"85388008", -390 => x"30547380", -391 => x"0c883d0d", -392 => x"04743055", -393 => x"8157d739", -394 => x"fc3d0d76", -395 => x"78535481", -396 => x"53807473", -397 => x"26525572", -398 => x"802e9838", -399 => x"70802eab", -400 => x"38807224", -401 => x"a6387110", -402 => x"73107572", -403 => x"26535452", -404 => x"72ea3873", -405 => x"51788338", -406 => x"74517080", -407 => x"0c863d0d", -408 => x"04720a10", -409 => x"0a720a10", -410 => x"0a535372", -411 => x"802ee438", -412 => x"717426ed", -413 => x"38737231", -414 => x"75740774", -415 => x"0a100a74", -416 => x"0a100a55", -417 => x"555654e3", -418 => x"39f73d0d", -419 => x"7c705253", -420 => x"80fd3f72", -421 => x"54800855", -422 => x"0b0b80cf", -423 => x"b8568157", -424 => x"80088105", -425 => x"5a8b3de4", -426 => x"11595382", -427 => x"59f41352", -428 => x"7b881108", -429 => x"525381b4", -430 => x"3f800830", -431 => x"70800807", -432 => x"9f2c8a07", -433 => x"800c538b", -434 => x"3d0d04f6", -435 => x"3d0d7c80", -436 => x"cfec0871", -437 => x"535553b7", -438 => x"3f725580", -439 => x"08560b0b", -440 => x"80cfb857", -441 => x"81588008", -442 => x"81055b8c", -443 => x"3de4115a", -444 => x"53825af4", -445 => x"13528814", -446 => x"085180f0", -447 => x"3f800830", -448 => x"70800807", -449 => x"9f2c8a07", -450 => x"800c548c", -451 => x"3d0d0470", -452 => x"70707075", -453 => x"70718306", -454 => x"53555270", -455 => x"b4387170", -456 => x"087009f7", -457 => x"fbfdff12", -458 => x"06f88482", -459 => x"81800654", -460 => x"5253719b", -461 => x"38841370", -462 => x"087009f7", -463 => x"fbfdff12", -464 => x"06f88482", -465 => x"81800654", -466 => x"52537180", -467 => x"2ee73872", -468 => x"52713353", -469 => x"72802e8a", -470 => x"38811270", -471 => x"33545272", -472 => x"f8387174", -473 => x"31800c50", -474 => x"50505004", -475 => x"f23d0d60", -476 => x"62881108", -477 => x"7058565f", -478 => x"5a73802e", -479 => x"818c388c", -480 => x"1a227083", -481 => x"2a813281", -482 => x"06565874", -483 => x"8638901a", -484 => x"08913879", -485 => x"5190b73f", -486 => x"ff558008", -487 => x"80ec388c", -488 => x"1a22587d", -489 => x"08558078", -490 => x"83ffff06", -491 => x"700a100a", -492 => x"8106415c", -493 => x"577e772e", -494 => x"80d73876", -495 => x"90387408", -496 => x"84160888", -497 => x"17575856", -498 => x"76802ef2", -499 => x"38765488", -500 => x"80772784", -501 => x"38888054", -502 => x"73537552", -503 => x"9c1a0851", -504 => x"a41a0858", -505 => x"772d800b", -506 => x"80082582", -507 => x"e0388008", -508 => x"16778008", -509 => x"317f8805", -510 => x"08800831", -511 => x"70618805", -512 => x"0c5b5856", -513 => x"78ffb438", -514 => x"80557480", -515 => x"0c903d0d", -516 => x"047a8132", -517 => x"81067740", -518 => x"5675802e", -519 => x"81bd3876", -520 => x"90387408", -521 => x"84160888", -522 => x"17575859", -523 => x"76802ef2", -524 => x"38881a08", -525 => x"7883ffff", -526 => x"0670892a", -527 => x"81065659", -528 => x"5673802e", -529 => x"82f83875", -530 => x"77278b38", -531 => x"77872a81", -532 => x"065c7b82", -533 => x"b5387676", -534 => x"27833876", -535 => x"56755378", -536 => x"52790851", -537 => x"85833f88", -538 => x"1a087631", -539 => x"881b0c79", -540 => x"08167a0c", -541 => x"76567519", -542 => x"7777317f", -543 => x"88050878", -544 => x"31706188", -545 => x"050c4158", -546 => x"597e802e", -547 => x"fefa388c", -548 => x"1a2258ff", -549 => x"8a397879", -550 => x"547c537b", -551 => x"525684c9", -552 => x"3f881a08", -553 => x"7931881b", -554 => x"0c790819", -555 => x"7a0c7c76", -556 => x"315d7c8e", -557 => x"3879518f", -558 => x"f23f8008", -559 => x"818f3880", -560 => x"085f751c", -561 => x"7777317f", -562 => x"88050878", -563 => x"31706188", -564 => x"050c5d58", -565 => x"5c7a802e", -566 => x"feae3876", -567 => x"81833874", -568 => x"08841608", -569 => x"88175758", -570 => x"5c76802e", -571 => x"f2387653", -572 => x"8a527b51", -573 => x"82d33f80", -574 => x"087c3181", -575 => x"055d8008", -576 => x"84388117", -577 => x"5d815f7c", -578 => x"59767d27", -579 => x"83387659", -580 => x"941a0888", -581 => x"1b081157", -582 => x"58807a08", -583 => x"5c54901a", -584 => x"087b2783", -585 => x"38815475", -586 => x"79258438", -587 => x"73ba3877", -588 => x"7924fee2", -589 => x"3877537b", -590 => x"529c1a08", -591 => x"51a41a08", -592 => x"59782d80", -593 => x"08568008", -594 => x"8024fee2", -595 => x"388c1a22", -596 => x"80c0075e", -597 => x"7d8c1b23", -598 => x"ff557480", -599 => x"0c903d0d", -600 => x"047effa3", -601 => x"38ff8739", -602 => x"75537b52", -603 => x"7a5182f9", -604 => x"3f790816", -605 => x"7a0c7951", -606 => x"8eb13f80", -607 => x"08cf387c", -608 => x"76315d7c", -609 => x"febc38fe", -610 => x"ac39901a", -611 => x"087a0871", -612 => x"31781170", -613 => x"565a5752", -614 => x"80cfec08", -615 => x"5184943f", -616 => x"8008802e", -617 => x"ffa73880", -618 => x"08901b0c", -619 => x"8008167a", -620 => x"0c77941b", -621 => x"0c76881b", -622 => x"0c7656fd", -623 => x"99397908", -624 => x"58901a08", -625 => x"78278338", -626 => x"81547577", -627 => x"27843873", -628 => x"b338941a", -629 => x"08547377", -630 => x"2680d338", -631 => x"73537852", -632 => x"9c1a0851", -633 => x"a41a0858", -634 => x"772d8008", -635 => x"56800880", -636 => x"24fd8338", -637 => x"8c1a2280", -638 => x"c0075e7d", -639 => x"8c1b23ff", -640 => x"55fed739", -641 => x"75537852", -642 => x"775181dd", -643 => x"3f790816", -644 => x"7a0c7951", -645 => x"8d953f80", -646 => x"08802efc", -647 => x"d9388c1a", -648 => x"2280c007", -649 => x"5e7d8c1b", -650 => x"23ff55fe", -651 => x"ad397677", -652 => x"54795378", -653 => x"525681b1", -654 => x"3f881a08", -655 => x"7731881b", -656 => x"0c790817", -657 => x"7a0cfcae", -658 => x"39fa3d0d", -659 => x"7a790288", -660 => x"05a70533", -661 => x"55535483", -662 => x"742780df", -663 => x"38718306", -664 => x"517080d7", -665 => x"38717157", -666 => x"55835175", -667 => x"82802913", -668 => x"ff125256", -669 => x"708025f3", -670 => x"38837427", -671 => x"bc387408", -672 => x"76327009", -673 => x"f7fbfdff", -674 => x"1206f884", -675 => x"82818006", -676 => x"51517080", -677 => x"2e983874", -678 => x"51805270", -679 => x"33577277", -680 => x"2eb93881", -681 => x"11811353", -682 => x"51837227", -683 => x"ee38fc14", -684 => x"84165654", -685 => x"738326c6", -686 => x"387452ff", -687 => x"145170ff", -688 => x"2e973871", -689 => x"33547274", -690 => x"2e983881", -691 => x"12ff1252", -692 => x"5270ff2e", -693 => x"098106eb", -694 => x"38805170", -695 => x"800c883d", -696 => x"0d047180", -697 => x"0c883d0d", -698 => x"04fa3d0d", -699 => x"787a7c72", -700 => x"72725957", -701 => x"55585657", -702 => x"747727b2", -703 => x"38751551", -704 => x"767127aa", -705 => x"38707618", -706 => x"ff185353", -707 => x"5370ff2e", -708 => x"9638ff12", -709 => x"ff145452", -710 => x"72337234", -711 => x"ff115170", -712 => x"ff2e0981", -713 => x"06ec3876", -714 => x"800c883d", -715 => x"0d048f76", -716 => x"2780e638", -717 => x"74770783", -718 => x"06517080", -719 => x"dc387675", -720 => x"52537070", -721 => x"84055208", -722 => x"73708405", -723 => x"550c7271", -724 => x"70840553", -725 => x"08717084", -726 => x"05530c71", -727 => x"70840553", -728 => x"08717084", -729 => x"05530c71", -730 => x"70840553", -731 => x"08717084", -732 => x"05530cf0", -733 => x"15555373", -734 => x"8f26c738", -735 => x"83742795", -736 => x"38707084", -737 => x"05520873", -738 => x"70840555", -739 => x"0cfc1454", -740 => x"738326ed", -741 => x"38727154", -742 => x"52ff1451", -743 => x"70ff2eff", -744 => x"86387270", -745 => x"81055433", -746 => x"72708105", -747 => x"5434ff11", -748 => x"51ea39ef", -749 => x"3d0d6365", -750 => x"67405d42", -751 => x"7b802e85", -752 => x"82386151", -753 => x"a9e73ff8", -754 => x"1c708412", -755 => x"0870fc06", -756 => x"70628b05", -757 => x"70f80641", -758 => x"59455c5f", -759 => x"41579674", -760 => x"2782c538", -761 => x"807b247e", -762 => x"7c260758", -763 => x"80547774", -764 => x"2e098106", -765 => x"82ab3878", -766 => x"7b2581fe", -767 => x"38781780", -768 => x"d7a80b88", -769 => x"05085b56", -770 => x"79762e84", -771 => x"c5388416", -772 => x"0870fe06", -773 => x"17841108", -774 => x"81064155", -775 => x"557e828d", -776 => x"3874fc06", -777 => x"5879762e", -778 => x"84e33878", -779 => x"185f7e7b", -780 => x"2581ff38", -781 => x"7c810654", -782 => x"7382c138", -783 => x"76770831", -784 => x"841108fc", -785 => x"06565775", -786 => x"802e9138", -787 => x"79762e84", -788 => x"f0387418", -789 => x"1958777b", -790 => x"25849138", -791 => x"76802e82", -792 => x"9b387815", -793 => x"567a7624", -794 => x"8292388c", -795 => x"17088818", -796 => x"08718c12", -797 => x"0c88120c", -798 => x"5e755988", -799 => x"1761fc05", -800 => x"5b5679a4", -801 => x"2685ff38", -802 => x"7b765955", -803 => x"937a2780", -804 => x"c9387b70", -805 => x"84055d08", -806 => x"7c56760c", -807 => x"74708405", -808 => x"56088c18", -809 => x"0c901758", -810 => x"9b7a27ae", -811 => x"38747084", -812 => x"05560878", -813 => x"0c747084", -814 => x"05560894", -815 => x"180c9817", -816 => x"58a37a27", -817 => x"95387470", -818 => x"84055608", -819 => x"780c7470", -820 => x"84055608", -821 => x"9c180ca0", -822 => x"17587470", -823 => x"84055608", -824 => x"755f7870", -825 => x"84055a0c", -826 => x"777e7084", -827 => x"05400871", -828 => x"70840553", -829 => x"0c7e0871", -830 => x"0c5d787b", -831 => x"3156758f", -832 => x"2680c938", -833 => x"84170881", -834 => x"06790784", -835 => x"180c7817", -836 => x"84110881", -837 => x"0784120c", -838 => x"5b6151a7", -839 => x"913f8817", -840 => x"5473800c", -841 => x"933d0d04", -842 => x"905bfdb8", -843 => x"397756fe", -844 => x"83398c16", -845 => x"08881708", -846 => x"718c120c", -847 => x"88120c58", -848 => x"7e707c31", -849 => x"57598f76", -850 => x"27ffb938", -851 => x"7a178418", -852 => x"0881067c", -853 => x"0784190c", -854 => x"76810784", -855 => x"120c7611", -856 => x"84110881", -857 => x"0784120c", -858 => x"5b880552", -859 => x"61518fda", -860 => x"3f6151a6", -861 => x"b93f8817", -862 => x"54ffa639", -863 => x"7d526151", -864 => x"97d73f80", -865 => x"085a8008", -866 => x"802e81ab", -867 => x"388008f8", -868 => x"05608405", -869 => x"08fe0661", -870 => x"05585574", -871 => x"772e83f2", -872 => x"38fc1958", -873 => x"77a42681", -874 => x"b0387b80", -875 => x"08565793", -876 => x"782780dc", -877 => x"387b7070", -878 => x"84055208", -879 => x"80087084", -880 => x"05800c0c", -881 => x"80087170", -882 => x"84055308", -883 => x"5d567b76", -884 => x"70840558", -885 => x"0c579b78", -886 => x"27b63876", -887 => x"70840558", -888 => x"08757084", -889 => x"05570c76", -890 => x"70840558", -891 => x"08757084", -892 => x"05570ca3", -893 => x"78279938", -894 => x"76708405", -895 => x"58087570", -896 => x"8405570c", -897 => x"76708405", -898 => x"58087570", -899 => x"8405570c", -900 => x"76708405", -901 => x"5808775e", -902 => x"75708405", -903 => x"570c747d", -904 => x"7084055f", -905 => x"08717084", -906 => x"05530c7d", -907 => x"08710c5f", -908 => x"7b526151", -909 => x"8e943f61", -910 => x"51a4f33f", -911 => x"79800c93", -912 => x"3d0d047d", -913 => x"52615196", -914 => x"903f8008", -915 => x"800c933d", -916 => x"0d048416", -917 => x"0855fbc9", -918 => x"3977537b", -919 => x"52800851", -920 => x"a2a53f7b", -921 => x"5261518d", -922 => x"e13fcc39", -923 => x"8c160888", -924 => x"1708718c", -925 => x"120c8812", -926 => x"0c5d8c17", -927 => x"08881808", -928 => x"718c120c", -929 => x"88120c59", -930 => x"7759fbef", -931 => x"39781890", -932 => x"1c40557e", -933 => x"7524fb9c", -934 => x"387a1770", -935 => x"80d7a80b", -936 => x"88050c75", -937 => x"7c318107", -938 => x"84120c56", -939 => x"84170881", -940 => x"067b0784", -941 => x"180c6151", -942 => x"a3f43f88", -943 => x"1754fce1", -944 => x"39741819", -945 => x"901c5e5a", -946 => x"7c7a24fb", -947 => x"8f388c17", -948 => x"08881808", -949 => x"718c120c", -950 => x"88120c5e", -951 => x"881761fc", -952 => x"05575975", -953 => x"a42681b6", -954 => x"387b7959", -955 => x"55937627", -956 => x"80c9387b", -957 => x"7084055d", -958 => x"087c5679", -959 => x"0c747084", -960 => x"0556088c", -961 => x"180c9017", -962 => x"589b7627", -963 => x"ae387470", -964 => x"84055608", -965 => x"780c7470", -966 => x"84055608", -967 => x"94180c98", -968 => x"1758a376", -969 => x"27953874", -970 => x"70840556", -971 => x"08780c74", -972 => x"70840556", -973 => x"089c180c", -974 => x"a0175874", -975 => x"70840556", -976 => x"08754178", -977 => x"7084055a", -978 => x"0c776070", -979 => x"84054208", -980 => x"71708405", -981 => x"530c6008", -982 => x"710c5e7a", -983 => x"177080d7", -984 => x"a80b8805", -985 => x"0c7a7c31", -986 => x"81078412", -987 => x"0c588417", -988 => x"0881067b", -989 => x"0784180c", -990 => x"6151a2b2", -991 => x"3f785473", -992 => x"800c933d", -993 => x"0d047953", -994 => x"7b527551", -995 => x"9ff93ffa", -996 => x"e9398415", -997 => x"08fc0619", -998 => x"605859fa", -999 => x"dd397553", -1000 => x"7b527851", -1001 => x"9fe13f7a", -1002 => x"177080d7", -1003 => x"a80b8805", -1004 => x"0c7a7c31", -1005 => x"81078412", -1006 => x"0c588417", -1007 => x"0881067b", -1008 => x"0784180c", -1009 => x"6151a1e6", -1010 => x"3f7854ff", -1011 => x"b239fa3d", -1012 => x"0d7880cf", -1013 => x"ec085455", -1014 => x"b8130880", -1015 => x"2e81af38", -1016 => x"8c152270", -1017 => x"83ffff06", -1018 => x"70832a81", -1019 => x"32810655", -1020 => x"55567280", -1021 => x"2e80da38", -1022 => x"73842a81", -1023 => x"32810657", -1024 => x"ff537680", -1025 => x"f2387382", -1026 => x"2a810654", -1027 => x"73802eb9", -1028 => x"38b01508", -1029 => x"5473802e", -1030 => x"9c3880c0", -1031 => x"15537373", -1032 => x"2e8f3873", -1033 => x"5280cfec", -1034 => x"08518a9e", -1035 => x"3f8c1522", -1036 => x"5676b016", -1037 => x"0c75db06", -1038 => x"57768c16", -1039 => x"23800b84", -1040 => x"160c9015", -1041 => x"08750c76", -1042 => x"56758807", -1043 => x"54738c16", -1044 => x"23901508", -1045 => x"802ebf38", -1046 => x"8c152270", -1047 => x"81065553", -1048 => x"739c3872", -1049 => x"0a100a81", -1050 => x"06567585", -1051 => x"38941508", -1052 => x"54738816", -1053 => x"0c805372", -1054 => x"800c883d", -1055 => x"0d04800b", -1056 => x"88160c94", -1057 => x"15083098", -1058 => x"160c8053", -1059 => x"ea397251", -1060 => x"82a63ffe", -1061 => x"cb397451", -1062 => x"8fbc3f8c", -1063 => x"15227081", -1064 => x"06555373", -1065 => x"802effbb", -1066 => x"38d439f8", -1067 => x"3d0d7a57", -1068 => x"76802e81", -1069 => x"973880cf", -1070 => x"ec0854b8", -1071 => x"1408802e", -1072 => x"80eb388c", -1073 => x"17227090", -1074 => x"2b70902c", -1075 => x"70832a81", -1076 => x"3281065b", -1077 => x"5b575577", -1078 => x"80cb3890", -1079 => x"17085675", -1080 => x"802e80c1", -1081 => x"38760876", -1082 => x"3176780c", -1083 => x"79830655", -1084 => x"55738538", -1085 => x"94170858", -1086 => x"7788180c", -1087 => x"807525a5", -1088 => x"38745375", -1089 => x"529c1708", -1090 => x"51a41708", -1091 => x"54732d80", -1092 => x"0b800825", -1093 => x"80c93880", -1094 => x"08167580", -1095 => x"08315656", -1096 => x"748024dd", -1097 => x"38800b80", -1098 => x"0c8a3d0d", -1099 => x"04735181", -1100 => x"873f8c17", -1101 => x"2270902b", -1102 => x"70902c70", -1103 => x"832a8132", -1104 => x"81065b5b", -1105 => x"575577dd", -1106 => x"38ff9039", -1107 => x"a1ab5280", -1108 => x"cfec0851", -1109 => x"8cd03f80", -1110 => x"08800c8a", -1111 => x"3d0d048c", -1112 => x"172280c0", -1113 => x"0758778c", -1114 => x"1823ff0b", -1115 => x"800c8a3d", -1116 => x"0d04fa3d", -1117 => x"0d797080", -1118 => x"dc298c11", -1119 => x"547a5356", -1120 => x"578fd63f", -1121 => x"80088008", -1122 => x"55568008", -1123 => x"802ea238", -1124 => x"80088c05", -1125 => x"54800b80", -1126 => x"080c7680", -1127 => x"0884050c", -1128 => x"73800888", -1129 => x"050c7453", -1130 => x"80527351", -1131 => x"9cf53f75", -1132 => x"5473800c", -1133 => x"883d0d04", -1134 => x"70707074", -1135 => x"a8f70bbc", -1136 => x"120c5381", -1137 => x"0bb8140c", -1138 => x"800b84dc", -1139 => x"140c830b", -1140 => x"84e0140c", -1141 => x"84e81384", -1142 => x"e4140c84", -1143 => x"13085180", -1144 => x"70720c70", -1145 => x"84130c70", -1146 => x"88130c52", -1147 => x"840b8c12", -1148 => x"23718e12", -1149 => x"23719012", -1150 => x"0c719412", -1151 => x"0c719812", -1152 => x"0c709c12", -1153 => x"0c80c1e6", -1154 => x"0ba0120c", -1155 => x"80c2b20b", -1156 => x"a4120c80", -1157 => x"c3ae0ba8", -1158 => x"120c80c3", -1159 => x"ff0bac12", -1160 => x"0c881308", -1161 => x"72710c72", -1162 => x"84120c72", -1163 => x"88120c51", -1164 => x"890b8c12", -1165 => x"23810b8e", -1166 => x"12237190", -1167 => x"120c7194", -1168 => x"120c7198", -1169 => x"120c709c", -1170 => x"120c80c1", -1171 => x"e60ba012", -1172 => x"0c80c2b2", -1173 => x"0ba4120c", -1174 => x"80c3ae0b", -1175 => x"a8120c80", -1176 => x"c3ff0bac", -1177 => x"120c8c13", -1178 => x"0872710c", -1179 => x"7284120c", -1180 => x"7288120c", -1181 => x"518a0b8c", -1182 => x"1223820b", -1183 => x"8e122371", -1184 => x"90120c71", -1185 => x"94120c71", -1186 => x"98120c70", -1187 => x"9c120c80", -1188 => x"c1e60ba0", -1189 => x"120c80c2", -1190 => x"b20ba412", -1191 => x"0c80c3ae", -1192 => x"0ba8120c", -1193 => x"80c3ff0b", -1194 => x"ac120c50", -1195 => x"505004f8", -1196 => x"3d0d7a80", -1197 => x"cfec08b8", -1198 => x"11085757", -1199 => x"587481ec", -1200 => x"38a8f70b", -1201 => x"bc170c81", -1202 => x"0bb8170c", -1203 => x"7484dc17", -1204 => x"0c830b84", -1205 => x"e0170c84", -1206 => x"e81684e4", -1207 => x"170c8416", -1208 => x"0875710c", -1209 => x"7584120c", -1210 => x"7588120c", -1211 => x"59840b8c", -1212 => x"1a23748e", -1213 => x"1a237490", -1214 => x"1a0c7494", -1215 => x"1a0c7498", -1216 => x"1a0c789c", -1217 => x"1a0c80c1", -1218 => x"e60ba01a", -1219 => x"0c80c2b2", -1220 => x"0ba41a0c", -1221 => x"80c3ae0b", -1222 => x"a81a0c80", -1223 => x"c3ff0bac", -1224 => x"1a0c8816", -1225 => x"0875710c", -1226 => x"7584120c", -1227 => x"7588120c", -1228 => x"57890b8c", -1229 => x"1823810b", -1230 => x"8e182374", -1231 => x"90180c74", -1232 => x"94180c74", -1233 => x"98180c76", -1234 => x"9c180c80", -1235 => x"c1e60ba0", -1236 => x"180c80c2", -1237 => x"b20ba418", -1238 => x"0c80c3ae", -1239 => x"0ba8180c", -1240 => x"80c3ff0b", -1241 => x"ac180c8c", -1242 => x"16087571", -1243 => x"0c758412", -1244 => x"0c758812", -1245 => x"0c548a0b", -1246 => x"8c152382", -1247 => x"0b8e1523", -1248 => x"7490150c", -1249 => x"7494150c", -1250 => x"7498150c", -1251 => x"739c150c", -1252 => x"80c1e60b", -1253 => x"a0150c80", -1254 => x"c2b20ba4", -1255 => x"150c80c3", -1256 => x"ae0ba815", -1257 => x"0c80c3ff", -1258 => x"0bac150c", -1259 => x"84dc1688", -1260 => x"11088412", -1261 => x"08ff0557", -1262 => x"57578075", -1263 => x"249f388c", -1264 => x"16227090", -1265 => x"2b70902c", -1266 => x"51555973", -1267 => x"802e80ed", -1268 => x"3880dc16", -1269 => x"ff165656", -1270 => x"748025e3", -1271 => x"38760855", -1272 => x"74802e8f", -1273 => x"38748811", -1274 => x"08841208", -1275 => x"ff055757", -1276 => x"57c83982", -1277 => x"fc527751", -1278 => x"8adf3f80", -1279 => x"08800855", -1280 => x"56800880", -1281 => x"2ea33880", -1282 => x"088c0575", -1283 => x"80080c54", -1284 => x"840b8008", -1285 => x"84050c73", -1286 => x"80088805", -1287 => x"0c82f053", -1288 => x"74527351", -1289 => x"97fd3f75", -1290 => x"54737478", -1291 => x"0c5573ff", -1292 => x"b4388c78", -1293 => x"0c800b80", -1294 => x"0c8a3d0d", -1295 => x"04810b8c", -1296 => x"17237376", -1297 => x"0c738817", -1298 => x"0c738417", -1299 => x"0c739017", -1300 => x"0c739417", -1301 => x"0c739817", -1302 => x"0cff0b8e", -1303 => x"172373b0", -1304 => x"170c73b4", -1305 => x"170c7380", -1306 => x"c4170c73", -1307 => x"80c8170c", -1308 => x"75800c8a", -1309 => x"3d0d0470", -1310 => x"70a1ab52", -1311 => x"735186a6", -1312 => x"3f505004", -1313 => x"7070a1ab", -1314 => x"5280cfec", -1315 => x"08518696", -1316 => x"3f505004", -1317 => x"fb3d0d77", -1318 => x"70525698", -1319 => x"903f80d7", -1320 => x"a80b8805", -1321 => x"08841108", -1322 => x"fc06707b", -1323 => x"319fef05", -1324 => x"e08006e0", -1325 => x"80055255", -1326 => x"55a08075", -1327 => x"24943880", -1328 => x"52755197", -1329 => x"ea3f80d7", -1330 => x"b0081453", -1331 => x"7280082e", -1332 => x"8f387551", -1333 => x"97d83f80", -1334 => x"5372800c", -1335 => x"873d0d04", -1336 => x"74305275", -1337 => x"5197c83f", -1338 => x"8008ff2e", -1339 => x"a83880d7", -1340 => x"a80b8805", -1341 => x"08747631", -1342 => x"81078412", -1343 => x"0c5380d6", -1344 => x"ec087531", -1345 => x"80d6ec0c", -1346 => x"755197a2", -1347 => x"3f810b80", -1348 => x"0c873d0d", -1349 => x"04805275", -1350 => x"5197943f", -1351 => x"80d7a80b", -1352 => x"88050880", -1353 => x"08713154", -1354 => x"548f7325", -1355 => x"ffa43880", -1356 => x"0880d79c", -1357 => x"083180d6", -1358 => x"ec0c7281", -1359 => x"0784150c", -1360 => x"755196ea", -1361 => x"3f8053ff", -1362 => x"9039f73d", -1363 => x"0d7b7d54", -1364 => x"5a72802e", -1365 => x"82833879", -1366 => x"5196d23f", -1367 => x"f8138411", -1368 => x"0870fe06", -1369 => x"70138411", -1370 => x"08fc065c", -1371 => x"57585457", -1372 => x"80d7b008", -1373 => x"742e82de", -1374 => x"38778415", -1375 => x"0c807381", -1376 => x"06565974", -1377 => x"792e81d5", -1378 => x"38771484", -1379 => x"11088106", -1380 => x"565374a0", -1381 => x"38771656", -1382 => x"7881e638", -1383 => x"88140855", -1384 => x"7480d7b0", -1385 => x"2e82f938", -1386 => x"8c140870", -1387 => x"8c170c75", -1388 => x"88120c58", -1389 => x"75810784", -1390 => x"180c7517", -1391 => x"76710c54", -1392 => x"78819138", -1393 => x"83ff7627", -1394 => x"81c83875", -1395 => x"892a7683", -1396 => x"2a545473", -1397 => x"802ebf38", -1398 => x"75862ab8", -1399 => x"05538474", -1400 => x"27b43880", -1401 => x"db145394", -1402 => x"7427ab38", -1403 => x"758c2a80", -1404 => x"ee055380", -1405 => x"d474279e", -1406 => x"38758f2a", -1407 => x"80f70553", -1408 => x"82d47427", -1409 => x"91387592", -1410 => x"2a80fc05", -1411 => x"538ad474", -1412 => x"27843880", -1413 => x"fe537210", -1414 => x"101080d7", -1415 => x"a8058811", -1416 => x"08555573", -1417 => x"752e82bf", -1418 => x"38841408", -1419 => x"fc065975", -1420 => x"79278d38", -1421 => x"88140854", -1422 => x"73752e09", -1423 => x"8106ea38", -1424 => x"8c140870", -1425 => x"8c190c74", -1426 => x"88190c77", -1427 => x"88120c55", -1428 => x"768c150c", -1429 => x"795194d6", -1430 => x"3f8b3d0d", -1431 => x"04760877", -1432 => x"71315876", -1433 => x"05881808", -1434 => x"56567480", -1435 => x"d7b02e80", -1436 => x"e0388c17", -1437 => x"08708c17", -1438 => x"0c758812", -1439 => x"0c53fe89", -1440 => x"39881408", -1441 => x"8c150870", -1442 => x"8c130c59", -1443 => x"88190cfe", -1444 => x"a3397583", -1445 => x"2a705454", -1446 => x"80742481", -1447 => x"98387282", -1448 => x"2c81712b", -1449 => x"80d7ac08", -1450 => x"0780d7a8", -1451 => x"0b84050c", -1452 => x"74101010", -1453 => x"80d7a805", -1454 => x"88110871", -1455 => x"8c1b0c70", -1456 => x"881b0c79", -1457 => x"88130c56", -1458 => x"5a55768c", -1459 => x"150cff84", -1460 => x"398159fd", -1461 => x"b4397716", -1462 => x"73810654", -1463 => x"55729838", -1464 => x"76087771", -1465 => x"31587505", -1466 => x"8c180888", -1467 => x"1908718c", -1468 => x"120c8812", -1469 => x"0c555574", -1470 => x"81078418", -1471 => x"0c7680d7", -1472 => x"a80b8805", -1473 => x"0c80d7a4", -1474 => x"087526fe", -1475 => x"c73880d7", -1476 => x"a0085279", -1477 => x"51fafd3f", -1478 => x"79519392", -1479 => x"3ffeba39", -1480 => x"81778c17", -1481 => x"0c778817", -1482 => x"0c758c19", -1483 => x"0c758819", -1484 => x"0c59fd80", -1485 => x"39831470", -1486 => x"822c8171", -1487 => x"2b80d7ac", -1488 => x"080780d7", -1489 => x"a80b8405", -1490 => x"0c751010", -1491 => x"1080d7a8", -1492 => x"05881108", -1493 => x"718c1c0c", -1494 => x"70881c0c", -1495 => x"7a88130c", -1496 => x"575b5653", -1497 => x"fee43980", -1498 => x"7324a338", -1499 => x"72822c81", -1500 => x"712b80d7", -1501 => x"ac080780", -1502 => x"d7a80b84", -1503 => x"050c5874", -1504 => x"8c180c73", -1505 => x"88180c76", -1506 => x"88160cfd", -1507 => x"c3398313", -1508 => x"70822c81", -1509 => x"712b80d7", -1510 => x"ac080780", -1511 => x"d7a80b84", -1512 => x"050c5953", -1513 => x"da39f93d", -1514 => x"0d797b58", -1515 => x"53800b80", -1516 => x"cfec0853", -1517 => x"5672722e", -1518 => x"bc3884dc", -1519 => x"13557476", -1520 => x"2eb33888", -1521 => x"15088416", -1522 => x"08ff0554", -1523 => x"54807324", -1524 => x"99388c14", -1525 => x"2270902b", -1526 => x"53587180", -1527 => x"d43880dc", -1528 => x"14ff1454", -1529 => x"54728025", -1530 => x"e9387408", -1531 => x"5574d438", -1532 => x"80cfec08", -1533 => x"5284dc12", -1534 => x"5574802e", -1535 => x"ad388815", -1536 => x"08841608", -1537 => x"ff055454", -1538 => x"80732498", -1539 => x"388c1422", -1540 => x"70902b53", -1541 => x"5871ad38", -1542 => x"80dc14ff", -1543 => x"14545472", -1544 => x"8025ea38", -1545 => x"74085574", -1546 => x"d5387580", -1547 => x"0c893d0d", -1548 => x"04735176", -1549 => x"2d758008", -1550 => x"0780dc15", -1551 => x"ff155555", -1552 => x"56ffa239", -1553 => x"7351762d", -1554 => x"75800807", -1555 => x"80dc15ff", -1556 => x"15555556", -1557 => x"ca39ea3d", -1558 => x"0d688c11", -1559 => x"22700a10", -1560 => x"0a810657", -1561 => x"58567480", -1562 => x"e4388e16", -1563 => x"2270902b", -1564 => x"70902c51", -1565 => x"55588074", -1566 => x"24b13898", -1567 => x"3dc40553", -1568 => x"735280cf", -1569 => x"ec085194", -1570 => x"813f800b", -1571 => x"80082497", -1572 => x"387983e0", -1573 => x"80065473", -1574 => x"80c0802e", -1575 => x"818f3873", -1576 => x"8280802e", -1577 => x"8191388c", -1578 => x"16225776", -1579 => x"90800754", -1580 => x"738c1723", -1581 => x"88805280", -1582 => x"cfec0851", -1583 => x"819b3f80", -1584 => x"089d388c", -1585 => x"16228207", -1586 => x"55748c17", -1587 => x"2380c316", -1588 => x"70770c90", -1589 => x"170c810b", -1590 => x"94170c98", -1591 => x"3d0d0480", -1592 => x"cfec08a8", -1593 => x"f70bbc12", -1594 => x"0c588c16", -1595 => x"22818007", -1596 => x"54738c17", -1597 => x"23800876", -1598 => x"0c800890", -1599 => x"170c8880", -1600 => x"0b94170c", -1601 => x"74802ed3", -1602 => x"388e1622", -1603 => x"70902b70", -1604 => x"902c5356", -1605 => x"549afb3f", -1606 => x"8008802e", -1607 => x"ffbd388c", -1608 => x"16228107", -1609 => x"57768c17", -1610 => x"23983d0d", -1611 => x"04810b8c", -1612 => x"17225855", -1613 => x"fef539a8", -1614 => x"160880c3", -1615 => x"ae2e0981", -1616 => x"06fee438", -1617 => x"8c162288", -1618 => x"80075473", -1619 => x"8c172388", -1620 => x"800b80cc", -1621 => x"170cfedc", -1622 => x"39f43d0d", -1623 => x"7e608b11", -1624 => x"70f8065b", -1625 => x"55555d72", -1626 => x"96268338", -1627 => x"90588078", -1628 => x"24747926", -1629 => x"07558054", -1630 => x"74742e09", -1631 => x"810680ca", -1632 => x"387c518e", -1633 => x"a83f7783", -1634 => x"f72680c5", -1635 => x"3877832a", -1636 => x"70101010", -1637 => x"80d7a805", -1638 => x"8c110858", -1639 => x"58547577", -1640 => x"2e81f038", -1641 => x"841608fc", -1642 => x"068c1708", -1643 => x"88180871", -1644 => x"8c120c88", -1645 => x"120c5b76", -1646 => x"05841108", -1647 => x"81078412", -1648 => x"0c537c51", -1649 => x"8de83f88", -1650 => x"16547380", -1651 => x"0c8e3d0d", -1652 => x"0477892a", -1653 => x"78832a58", -1654 => x"5473802e", -1655 => x"bf387786", -1656 => x"2ab80557", -1657 => x"847427b4", -1658 => x"3880db14", -1659 => x"57947427", -1660 => x"ab38778c", -1661 => x"2a80ee05", -1662 => x"5780d474", -1663 => x"279e3877", -1664 => x"8f2a80f7", -1665 => x"055782d4", -1666 => x"74279138", -1667 => x"77922a80", -1668 => x"fc05578a", -1669 => x"d4742784", -1670 => x"3880fe57", -1671 => x"76101010", -1672 => x"80d7a805", -1673 => x"8c110856", -1674 => x"5374732e", -1675 => x"a3388415", -1676 => x"08fc0670", -1677 => x"79315556", -1678 => x"738f2488", -1679 => x"e4387380", -1680 => x"2588e638", -1681 => x"8c150855", -1682 => x"74732e09", -1683 => x"8106df38", -1684 => x"81175980", -1685 => x"d7b80856", -1686 => x"7580d7b0", -1687 => x"2e82cc38", -1688 => x"841608fc", -1689 => x"06707931", -1690 => x"5555738f", -1691 => x"24bb3880", -1692 => x"d7b00b80", -1693 => x"d7bc0c80", -1694 => x"d7b00b80", -1695 => x"d7b80c80", -1696 => x"742480db", -1697 => x"38741684", -1698 => x"11088107", -1699 => x"84120c53", -1700 => x"feb03988", -1701 => x"168c1108", -1702 => x"57597579", -1703 => x"2e098106", -1704 => x"fe823882", -1705 => x"1459ffab", -1706 => x"39771678", -1707 => x"81078418", -1708 => x"0c7080d7", -1709 => x"bc0c7080", -1710 => x"d7b80c80", -1711 => x"d7b00b8c", -1712 => x"120c8c11", -1713 => x"0888120c", -1714 => x"74810784", -1715 => x"120c7405", -1716 => x"74710c5b", -1717 => x"7c518bd6", -1718 => x"3f881654", -1719 => x"fdec3983", -1720 => x"ff752783", -1721 => x"91387489", -1722 => x"2a75832a", -1723 => x"54547380", -1724 => x"2ebf3874", -1725 => x"862ab805", -1726 => x"53847427", -1727 => x"b43880db", -1728 => x"14539474", -1729 => x"27ab3874", -1730 => x"8c2a80ee", -1731 => x"055380d4", -1732 => x"74279e38", -1733 => x"748f2a80", -1734 => x"f7055382", -1735 => x"d4742791", -1736 => x"3874922a", -1737 => x"80fc0553", -1738 => x"8ad47427", -1739 => x"843880fe", -1740 => x"53721010", -1741 => x"1080d7a8", -1742 => x"05881108", -1743 => x"55577377", -1744 => x"2e868b38", -1745 => x"841408fc", -1746 => x"065b747b", -1747 => x"278d3888", -1748 => x"14085473", -1749 => x"772e0981", -1750 => x"06ea388c", -1751 => x"140880d7", -1752 => x"a80b8405", -1753 => x"08718c19", -1754 => x"0c758819", -1755 => x"0c778813", -1756 => x"0c5c5775", -1757 => x"8c150c78", -1758 => x"53807924", -1759 => x"83983872", -1760 => x"822c8171", -1761 => x"2b565674", -1762 => x"7b2680ca", -1763 => x"387a7506", -1764 => x"577682a3", -1765 => x"3878fc06", -1766 => x"84055974", -1767 => x"10707c06", -1768 => x"55557382", -1769 => x"92388419", -1770 => x"59f13980", -1771 => x"d7a80b84", -1772 => x"05087954", -1773 => x"5b788025", -1774 => x"c63882da", -1775 => x"3974097b", -1776 => x"067080d7", -1777 => x"a80b8405", -1778 => x"0c5b7410", -1779 => x"55747b26", -1780 => x"85387485", -1781 => x"bc3880d7", -1782 => x"a80b8805", -1783 => x"08708412", -1784 => x"08fc0670", -1785 => x"7b317b72", -1786 => x"268f7225", -1787 => x"075d575c", -1788 => x"5c557880", -1789 => x"2e80d938", -1790 => x"791580d7", -1791 => x"a0081990", -1792 => x"11595456", -1793 => x"80d79c08", -1794 => x"ff2e8838", -1795 => x"a08f13e0", -1796 => x"80065776", -1797 => x"527c5189", -1798 => x"963f8008", -1799 => x"548008ff", -1800 => x"2e903880", -1801 => x"08762782", -1802 => x"a7387480", -1803 => x"d7a82e82", -1804 => x"9f3880d7", -1805 => x"a80b8805", -1806 => x"08558415", -1807 => x"08fc0670", -1808 => x"79317972", -1809 => x"268f7225", -1810 => x"075d555a", -1811 => x"7a83f238", -1812 => x"77810784", -1813 => x"160c7715", -1814 => x"7080d7a8", -1815 => x"0b88050c", -1816 => x"74810784", -1817 => x"120c567c", -1818 => x"5188c33f", -1819 => x"88155473", -1820 => x"800c8e3d", -1821 => x"0d047483", -1822 => x"2a705454", -1823 => x"80742481", -1824 => x"9b387282", -1825 => x"2c81712b", -1826 => x"80d7ac08", -1827 => x"077080d7", -1828 => x"a80b8405", -1829 => x"0c751010", -1830 => x"1080d7a8", -1831 => x"05881108", -1832 => x"718c1b0c", -1833 => x"70881b0c", -1834 => x"7988130c", -1835 => x"57555c55", -1836 => x"758c150c", -1837 => x"fdc13978", -1838 => x"79101010", -1839 => x"80d7a805", -1840 => x"70565b5c", -1841 => x"8c140856", -1842 => x"75742ea3", -1843 => x"38841608", -1844 => x"fc067079", -1845 => x"31585376", -1846 => x"8f2483f1", -1847 => x"38768025", -1848 => x"84af388c", -1849 => x"16085675", -1850 => x"742e0981", -1851 => x"06df3888", -1852 => x"14811a70", -1853 => x"8306555a", -1854 => x"5472c938", -1855 => x"7b830656", -1856 => x"75802efd", -1857 => x"b838ff1c", -1858 => x"f81b5b5c", -1859 => x"881a087a", -1860 => x"2eea38fd", -1861 => x"b5398319", -1862 => x"53fce439", -1863 => x"83147082", -1864 => x"2c81712b", -1865 => x"80d7ac08", -1866 => x"077080d7", -1867 => x"a80b8405", -1868 => x"0c761010", -1869 => x"1080d7a8", -1870 => x"05881108", -1871 => x"718c1c0c", -1872 => x"70881c0c", -1873 => x"7a88130c", -1874 => x"58535d56", -1875 => x"53fee139", -1876 => x"80d6ec08", -1877 => x"17598008", -1878 => x"762e818b", -1879 => x"3880d79c", -1880 => x"08ff2e84", -1881 => x"8e387376", -1882 => x"311980d6", -1883 => x"ec0c7387", -1884 => x"06705653", -1885 => x"72802e88", -1886 => x"38887331", -1887 => x"70155555", -1888 => x"76149fff", -1889 => x"06a08071", -1890 => x"31167054", -1891 => x"7e535153", -1892 => x"869d3f80", -1893 => x"08568008", -1894 => x"ff2e819e", -1895 => x"3880d6ec", -1896 => x"08137080", -1897 => x"d6ec0c74", -1898 => x"7580d7a8", -1899 => x"0b88050c", -1900 => x"77763115", -1901 => x"81075556", -1902 => x"597a80d7", -1903 => x"a82e83c0", -1904 => x"38798f26", -1905 => x"82ef3881", -1906 => x"0b84150c", -1907 => x"841508fc", -1908 => x"06707931", -1909 => x"7972268f", -1910 => x"7225075d", -1911 => x"555a7a80", -1912 => x"2efced38", -1913 => x"80db3980", -1914 => x"089fff06", -1915 => x"5574feed", -1916 => x"387880d6", -1917 => x"ec0c80d7", -1918 => x"a80b8805", -1919 => x"087a1881", -1920 => x"0784120c", -1921 => x"5580d798", -1922 => x"08792786", -1923 => x"387880d7", -1924 => x"980c80d7", -1925 => x"94087927", -1926 => x"fca03878", -1927 => x"80d7940c", -1928 => x"841508fc", -1929 => x"06707931", -1930 => x"7972268f", -1931 => x"7225075d", -1932 => x"555a7a80", -1933 => x"2efc9938", -1934 => x"88398074", -1935 => x"5753fedd", -1936 => x"397c5184", -1937 => x"e93f800b", -1938 => x"800c8e3d", -1939 => x"0d048073", -1940 => x"24a53872", -1941 => x"822c8171", -1942 => x"2b80d7ac", -1943 => x"08077080", -1944 => x"d7a80b84", -1945 => x"050c5c5a", -1946 => x"768c170c", -1947 => x"7388170c", -1948 => x"7588180c", -1949 => x"f9fd3983", -1950 => x"1370822c", -1951 => x"81712b80", -1952 => x"d7ac0807", -1953 => x"7080d7a8", -1954 => x"0b84050c", -1955 => x"5d5b53d8", -1956 => x"397a7506", -1957 => x"5c7bfc9f", -1958 => x"38841975", -1959 => x"105659f1", -1960 => x"39ff1781", -1961 => x"0559f7ab", -1962 => x"398c1508", -1963 => x"88160871", -1964 => x"8c120c88", -1965 => x"120c5975", -1966 => x"15841108", -1967 => x"81078412", -1968 => x"0c587c51", -1969 => x"83e83f88", -1970 => x"1554fba3", -1971 => x"39771678", -1972 => x"81078418", -1973 => x"0c8c1708", -1974 => x"88180871", -1975 => x"8c120c88", -1976 => x"120c5c70", -1977 => x"80d7bc0c", -1978 => x"7080d7b8", -1979 => x"0c80d7b0", -1980 => x"0b8c120c", -1981 => x"8c110888", -1982 => x"120c7781", -1983 => x"0784120c", -1984 => x"77057771", -1985 => x"0c557c51", -1986 => x"83a43f88", -1987 => x"1654f5ba", -1988 => x"39721684", -1989 => x"11088107", -1990 => x"84120c58", -1991 => x"8c160888", -1992 => x"1708718c", -1993 => x"120c8812", -1994 => x"0c577c51", -1995 => x"83803f88", -1996 => x"1654f596", -1997 => x"39728415", -1998 => x"0cf41af8", -1999 => x"0670841d", -2000 => x"08810607", -2001 => x"841d0c70", -2002 => x"1c555685", -2003 => x"0b84150c", -2004 => x"850b8815", -2005 => x"0c8f7627", -2006 => x"fdab3888", -2007 => x"1b527c51", -2008 => x"ebe83f80", -2009 => x"d7a80b88", -2010 => x"050880d6", -2011 => x"ec085a55", -2012 => x"fd933978", -2013 => x"80d6ec0c", -2014 => x"7380d79c", -2015 => x"0cfbef39", -2016 => x"7284150c", -2017 => x"fcff39fb", -2018 => x"3d0d7770", -2019 => x"7a7c5855", -2020 => x"53568f75", -2021 => x"2780e638", -2022 => x"72760783", -2023 => x"06517080", -2024 => x"dc387573", -2025 => x"52547070", -2026 => x"84055208", -2027 => x"74708405", -2028 => x"560c7371", -2029 => x"70840553", -2030 => x"08717084", -2031 => x"05530c71", -2032 => x"70840553", -2033 => x"08717084", -2034 => x"05530c71", -2035 => x"70840553", -2036 => x"08717084", -2037 => x"05530cf0", -2038 => x"16565474", -2039 => x"8f26c738", -2040 => x"83752795", -2041 => x"38707084", -2042 => x"05520874", -2043 => x"70840556", -2044 => x"0cfc1555", -2045 => x"748326ed", -2046 => x"38737154", -2047 => x"52ff1551", -2048 => x"70ff2e98", -2049 => x"38727081", -2050 => x"05543372", -2051 => x"70810554", -2052 => x"34ff1151", -2053 => x"70ff2e09", -2054 => x"8106ea38", -2055 => x"75800c87", -2056 => x"3d0d04fb", -2057 => x"3d0d777a", -2058 => x"71028c05", -2059 => x"a3053358", -2060 => x"54545683", -2061 => x"732780d4", -2062 => x"38758306", -2063 => x"517080cc", -2064 => x"3874882b", -2065 => x"75077071", -2066 => x"902b0755", -2067 => x"518f7327", -2068 => x"a7387372", -2069 => x"70840554", -2070 => x"0c717471", -2071 => x"70840553", -2072 => x"0c747170", -2073 => x"8405530c", -2074 => x"74717084", -2075 => x"05530cf0", -2076 => x"14545272", -2077 => x"8f26db38", -2078 => x"83732790", -2079 => x"38737270", -2080 => x"8405540c", -2081 => x"fc135372", -2082 => x"8326f238", -2083 => x"ff135170", -2084 => x"ff2e9338", -2085 => x"74727081", -2086 => x"055434ff", -2087 => x"115170ff", -2088 => x"2e098106", -2089 => x"ef387580", -2090 => x"0c873d0d", -2091 => x"04040470", -2092 => x"70707080", -2093 => x"0b80dfe4", -2094 => x"0c765184", -2095 => x"f33f8008", -2096 => x"538008ff", -2097 => x"2e893872", -2098 => x"800c5050", -2099 => x"50500480", -2100 => x"dfe40854", -2101 => x"73802eef", -2102 => x"38757471", -2103 => x"0c527280", -2104 => x"0c505050", -2105 => x"5004f93d", -2106 => x"0d797c55", -2107 => x"7b548e11", -2108 => x"2270902b", -2109 => x"70902c55", -2110 => x"5780cfec", -2111 => x"08535856", -2112 => x"83f63f80", -2113 => x"0857800b", -2114 => x"80082493", -2115 => x"3880d016", -2116 => x"08800805", -2117 => x"80d0170c", -2118 => x"76800c89", -2119 => x"3d0d048c", -2120 => x"162283df", -2121 => x"ff065574", -2122 => x"8c172376", -2123 => x"800c893d", -2124 => x"0d04fa3d", -2125 => x"0d788c11", -2126 => x"2270882a", -2127 => x"70810651", -2128 => x"57585674", -2129 => x"a9388c16", -2130 => x"2283dfff", -2131 => x"0655748c", -2132 => x"17237a54", -2133 => x"79538e16", -2134 => x"2270902b", -2135 => x"70902c54", -2136 => x"5680cfec", -2137 => x"08525681", -2138 => x"b23f883d", -2139 => x"0d048254", -2140 => x"80538e16", -2141 => x"2270902b", -2142 => x"70902c54", -2143 => x"5680cfec", -2144 => x"08525782", -2145 => x"bb3f8c16", -2146 => x"2283dfff", -2147 => x"0655748c", -2148 => x"17237a54", -2149 => x"79538e16", -2150 => x"2270902b", -2151 => x"70902c54", -2152 => x"5680cfec", -2153 => x"08525680", -2154 => x"f23f883d", -2155 => x"0d04f93d", -2156 => x"0d797c55", -2157 => x"7b548e11", -2158 => x"2270902b", -2159 => x"70902c55", -2160 => x"5780cfec", -2161 => x"08535856", -2162 => x"81f63f80", -2163 => x"08578008", -2164 => x"ff2e9938", -2165 => x"8c1622a0", -2166 => x"80075574", -2167 => x"8c172380", -2168 => x"0880d017", -2169 => x"0c76800c", -2170 => x"893d0d04", -2171 => x"8c162283", -2172 => x"dfff0655", -2173 => x"748c1723", -2174 => x"76800c89", -2175 => x"3d0d0470", -2176 => x"7070748e", -2177 => x"11227090", -2178 => x"2b70902c", -2179 => x"55515153", -2180 => x"80cfec08", -2181 => x"51bd3f50", -2182 => x"505004fb", -2183 => x"3d0d800b", -2184 => x"80dfe40c", -2185 => x"7a537952", -2186 => x"785182fc", -2187 => x"3f800855", -2188 => x"8008ff2e", -2189 => x"88387480", -2190 => x"0c873d0d", -2191 => x"0480dfe4", -2192 => x"08567580", -2193 => x"2ef03877", -2194 => x"76710c54", -2195 => x"74800c87", -2196 => x"3d0d0470", -2197 => x"70707080", -2198 => x"0b80dfe4", -2199 => x"0c765184", -2200 => x"c93f8008", -2201 => x"538008ff", -2202 => x"2e893872", -2203 => x"800c5050", -2204 => x"50500480", -2205 => x"dfe40854", -2206 => x"73802eef", -2207 => x"38757471", -2208 => x"0c527280", -2209 => x"0c505050", -2210 => x"5004fc3d", -2211 => x"0d800b80", -2212 => x"dfe40c78", -2213 => x"52775187", -2214 => x"b03f8008", -2215 => x"548008ff", -2216 => x"2e883873", -2217 => x"800c863d", -2218 => x"0d0480df", -2219 => x"e4085574", -2220 => x"802ef038", -2221 => x"7675710c", -2222 => x"5373800c", -2223 => x"863d0d04", -2224 => x"fb3d0d80", -2225 => x"0b80dfe4", -2226 => x"0c7a5379", -2227 => x"52785184", -2228 => x"8b3f8008", -2229 => x"558008ff", -2230 => x"2e883874", -2231 => x"800c873d", -2232 => x"0d0480df", -2233 => x"e4085675", -2234 => x"802ef038", -2235 => x"7776710c", -2236 => x"5474800c", -2237 => x"873d0d04", -2238 => x"fb3d0d80", -2239 => x"0b80dfe4", -2240 => x"0c7a5379", -2241 => x"52785182", -2242 => x"933f8008", -2243 => x"558008ff", -2244 => x"2e883874", -2245 => x"800c873d", -2246 => x"0d0480df", -2247 => x"e4085675", -2248 => x"802ef038", -2249 => x"7776710c", -2250 => x"5474800c", -2251 => x"873d0d04", -2252 => x"70707080", -2253 => x"dfd80889", -2254 => x"3880dfe8", -2255 => x"0b80dfd8", -2256 => x"0c80dfd8", -2257 => x"08751152", -2258 => x"52ff5370", -2259 => x"87fb8080", -2260 => x"26883870", -2261 => x"80dfd80c", -2262 => x"71537280", -2263 => x"0c505050", -2264 => x"04fd3d0d", -2265 => x"800b80cf", -2266 => x"e0085454", -2267 => x"72812e9b", -2268 => x"387380df", -2269 => x"dc0cc2ae", -2270 => x"3fc1853f", -2271 => x"80dfb052", -2272 => x"8151c3f7", -2273 => x"3f800851", -2274 => x"86bf3f72", -2275 => x"80dfdc0c", -2276 => x"c2943fc0", -2277 => x"eb3f80df", -2278 => x"b0528151", -2279 => x"c3dd3f80", -2280 => x"085186a5", -2281 => x"3f00ff39", -2282 => x"f53d0d7e", -2283 => x"6080dfdc", -2284 => x"08705b58", -2285 => x"5b5b7580", -2286 => x"c238777a", -2287 => x"25a13877", -2288 => x"1b703370", -2289 => x"81ff0658", -2290 => x"5859758a", -2291 => x"2e983876", -2292 => x"81ff0651", -2293 => x"c1af3f81", -2294 => x"18587978", -2295 => x"24e13879", -2296 => x"800c8d3d", -2297 => x"0d048d51", -2298 => x"c19b3f78", -2299 => x"337081ff", -2300 => x"065257c1", -2301 => x"903f8118", -2302 => x"58e03979", -2303 => x"557a547d", -2304 => x"5385528d", -2305 => x"3dfc0551", -2306 => x"c0b83f80", -2307 => x"085685b2", -2308 => x"3f7b8008", -2309 => x"0c75800c", -2310 => x"8d3d0d04", -2311 => x"f63d0d7d", -2312 => x"7f80dfdc", -2313 => x"08705b58", -2314 => x"5a5a7580", -2315 => x"c1387779", -2316 => x"25b338c0", -2317 => x"ab3f8008", -2318 => x"81ff0670", -2319 => x"8d327030", -2320 => x"709f2a51", -2321 => x"51575776", -2322 => x"8a2e80c4", -2323 => x"3875802e", -2324 => x"bf38771a", -2325 => x"56767634", -2326 => x"7651c0a9", -2327 => x"3f811858", -2328 => x"787824cf", -2329 => x"38775675", -2330 => x"800c8c3d", -2331 => x"0d047855", -2332 => x"79547c53", -2333 => x"84528c3d", -2334 => x"fc0551ff", -2335 => x"bfc43f80", -2336 => x"085684be", -2337 => x"3f7a8008", -2338 => x"0c75800c", -2339 => x"8c3d0d04", -2340 => x"771a598a", -2341 => x"79348118", -2342 => x"588d51ff", -2343 => x"bfe73f8a", -2344 => x"51ffbfe1", -2345 => x"3f7756ff", -2346 => x"be39fb3d", -2347 => x"0d80dfdc", -2348 => x"08705654", -2349 => x"73883874", -2350 => x"800c873d", -2351 => x"0d047753", -2352 => x"8352873d", -2353 => x"fc0551ff", -2354 => x"bef83f80", -2355 => x"085483f2", -2356 => x"3f758008", -2357 => x"0c73800c", -2358 => x"873d0d04", -2359 => x"fa3d0d80", -2360 => x"dfdc0880", -2361 => x"2ea3387a", -2362 => x"55795478", -2363 => x"53865288", -2364 => x"3dfc0551", -2365 => x"ffbecb3f", -2366 => x"80085683", -2367 => x"c53f7680", -2368 => x"080c7580", -2369 => x"0c883d0d", -2370 => x"0483b73f", -2371 => x"9d0b8008", -2372 => x"0cff0b80", -2373 => x"0c883d0d", -2374 => x"04f73d0d", -2375 => x"7b7d5b59", -2376 => x"bc538052", -2377 => x"7951f5fb", -2378 => x"3f807056", -2379 => x"57985674", -2380 => x"19703370", -2381 => x"782b7907", -2382 => x"8118f81a", -2383 => x"5a585955", -2384 => x"58847524", -2385 => x"ea38767a", -2386 => x"23841958", -2387 => x"80705657", -2388 => x"98567418", -2389 => x"70337078", -2390 => x"2b790781", -2391 => x"18f81a5a", -2392 => x"58595154", -2393 => x"847524ea", -2394 => x"3876821b", -2395 => x"23881958", -2396 => x"80705657", -2397 => x"98567418", -2398 => x"70337078", -2399 => x"2b790781", -2400 => x"18f81a5a", -2401 => x"58595154", -2402 => x"847524ea", -2403 => x"3876841b", -2404 => x"0c8c1958", -2405 => x"80705657", -2406 => x"98567418", -2407 => x"70337078", -2408 => x"2b790781", -2409 => x"18f81a5a", -2410 => x"58595154", -2411 => x"847524ea", -2412 => x"3876881b", -2413 => x"23901958", -2414 => x"80705657", -2415 => x"98567418", -2416 => x"70337078", -2417 => x"2b790781", -2418 => x"18f81a5a", -2419 => x"58595154", -2420 => x"847524ea", -2421 => x"38768a1b", -2422 => x"23941958", -2423 => x"80705657", -2424 => x"98567418", -2425 => x"70337078", -2426 => x"2b790781", -2427 => x"18f81a5a", -2428 => x"58595154", -2429 => x"847524ea", -2430 => x"38768c1b", -2431 => x"23981958", -2432 => x"80705657", -2433 => x"98567418", -2434 => x"70337078", -2435 => x"2b790781", -2436 => x"18f81a5a", -2437 => x"58595154", -2438 => x"847524ea", -2439 => x"38768e1b", -2440 => x"239c1958", -2441 => x"80705657", -2442 => x"b8567418", -2443 => x"70337078", -2444 => x"2b790781", -2445 => x"18f81a5a", -2446 => x"58595a54", -2447 => x"887524ea", -2448 => x"3876901b", -2449 => x"0c8b3d0d", -2450 => x"04e93d0d", -2451 => x"6a80dfdc", -2452 => x"08575775", -2453 => x"933880c0", -2454 => x"800b8418", -2455 => x"0c75ac18", -2456 => x"0c75800c", -2457 => x"993d0d04", -2458 => x"893d7055", -2459 => x"6a54558a", -2460 => x"52993dff", -2461 => x"bc0551ff", -2462 => x"bbc83f80", -2463 => x"08775375", -2464 => x"5256fd95", -2465 => x"3fbc3f77", -2466 => x"80080c75", -2467 => x"800c993d", -2468 => x"0d04fc3d", -2469 => x"0d815480", -2470 => x"dfdc0888", -2471 => x"3873800c", -2472 => x"863d0d04", -2473 => x"765397b9", -2474 => x"52863dfc", -2475 => x"0551ffbb", -2476 => x"913f8008", -2477 => x"548c3f74", -2478 => x"80080c73", -2479 => x"800c863d", -2480 => x"0d0480cf", -2481 => x"ec08800c", -2482 => x"04f73d0d", -2483 => x"7b80cfec", -2484 => x"0882c811", -2485 => x"085a545a", -2486 => x"77802e80", -2487 => x"da388188", -2488 => x"18841908", -2489 => x"ff058171", -2490 => x"2b595559", -2491 => x"80742480", -2492 => x"ea388074", -2493 => x"24b53873", -2494 => x"822b7811", -2495 => x"88055656", -2496 => x"81801908", -2497 => x"77065372", -2498 => x"802eb638", -2499 => x"78167008", -2500 => x"53537951", -2501 => x"74085372", -2502 => x"2dff14fc", -2503 => x"17fc1779", -2504 => x"812c5a57", -2505 => x"57547380", -2506 => x"25d63877", -2507 => x"085877ff", -2508 => x"ad3880cf", -2509 => x"ec0853bc", -2510 => x"1308a538", -2511 => x"7951f8e5", -2512 => x"3f740853", -2513 => x"722dff14", -2514 => x"fc17fc17", -2515 => x"79812c5a", -2516 => x"57575473", -2517 => x"8025ffa8", -2518 => x"38d13980", -2519 => x"57ff9339", -2520 => x"7251bc13", -2521 => x"0854732d", -2522 => x"7951f8b9", -2523 => x"3f707080", -2524 => x"dfb80bfc", -2525 => x"05700852", -2526 => x"5270ff2e", -2527 => x"9138702d", -2528 => x"fc127008", -2529 => x"525270ff", -2530 => x"2e098106", -2531 => x"f1385050", -2532 => x"0404ffba", -2533 => x"fe3f0400", +348 => x"803d0d80", +349 => x"dfe00881", +350 => x"1180dfe0", +351 => x"0c51823d", +352 => x"0d04fe3d", +353 => x"0d80dfe0", +354 => x"085380df", +355 => x"e0085272", +356 => x"722e8f38", +357 => x"80cf9c51", +358 => x"82b03f80", +359 => x"dfe00853", +360 => x"e93980cf", +361 => x"ac5182a2", +362 => x"3fe039fb", +363 => x"3d0d7779", +364 => x"55558056", +365 => x"757524ab", +366 => x"38807424", +367 => x"9d388053", +368 => x"73527451", +369 => x"80e13f80", +370 => x"08547580", +371 => x"2e853880", +372 => x"08305473", +373 => x"800c873d", +374 => x"0d047330", +375 => x"76813257", +376 => x"54dc3974", +377 => x"30558156", +378 => x"738025d2", +379 => x"38ec39fa", +380 => x"3d0d787a", +381 => x"57558057", +382 => x"767524a4", +383 => x"38759f2c", +384 => x"54815375", +385 => x"74327431", +386 => x"5274519b", +387 => x"3f800854", +388 => x"76802e85", +389 => x"38800830", +390 => x"5473800c", +391 => x"883d0d04", +392 => x"74305581", +393 => x"57d739fc", +394 => x"3d0d7678", +395 => x"53548153", +396 => x"80747326", +397 => x"52557280", +398 => x"2e983870", +399 => x"802eab38", +400 => x"807224a6", +401 => x"38711073", +402 => x"10757226", +403 => x"53545272", +404 => x"ea387351", +405 => x"78833874", +406 => x"5170800c", +407 => x"863d0d04", +408 => x"720a100a", +409 => x"720a100a", +410 => x"53537280", +411 => x"2ee43871", +412 => x"7426ed38", +413 => x"73723175", +414 => x"7407740a", +415 => x"100a740a", +416 => x"100a5555", +417 => x"5654e339", +418 => x"f73d0d7c", +419 => x"70525380", +420 => x"fd3f7254", +421 => x"8008550b", +422 => x"0b80cfb8", +423 => x"56815780", +424 => x"0881055a", +425 => x"8b3de411", +426 => x"59538259", +427 => x"f413527b", +428 => x"88110852", +429 => x"5381b43f", +430 => x"80083070", +431 => x"8008079f", +432 => x"2c8a0780", +433 => x"0c538b3d", +434 => x"0d04f63d", +435 => x"0d7c80cf", +436 => x"ec087153", +437 => x"5553b73f", +438 => x"72558008", +439 => x"560b0b80", +440 => x"cfb85781", +441 => x"58800881", +442 => x"055b8c3d", +443 => x"e4115a53", +444 => x"825af413", +445 => x"52881408", +446 => x"5180f03f", +447 => x"80083070", +448 => x"8008079f", +449 => x"2c8a0780", +450 => x"0c548c3d", +451 => x"0d047070", +452 => x"70707570", +453 => x"71830653", +454 => x"555270b4", +455 => x"38717008", +456 => x"7009f7fb", +457 => x"fdff1206", +458 => x"f8848281", +459 => x"80065452", +460 => x"53719b38", +461 => x"84137008", +462 => x"7009f7fb", +463 => x"fdff1206", +464 => x"f8848281", +465 => x"80065452", +466 => x"5371802e", +467 => x"e7387252", +468 => x"71335372", +469 => x"802e8a38", +470 => x"81127033", +471 => x"545272f8", +472 => x"38717431", +473 => x"800c5050", +474 => x"505004f2", +475 => x"3d0d6062", +476 => x"88110870", +477 => x"58565f5a", +478 => x"73802e81", +479 => x"8c388c1a", +480 => x"2270832a", +481 => x"81328106", +482 => x"56587486", +483 => x"38901a08", +484 => x"91387951", +485 => x"90b73fff", +486 => x"55800880", +487 => x"ec388c1a", +488 => x"22587d08", +489 => x"55807883", +490 => x"ffff0670", +491 => x"0a100a81", +492 => x"06415c57", +493 => x"7e772e80", +494 => x"d7387690", +495 => x"38740884", +496 => x"16088817", +497 => x"57585676", +498 => x"802ef238", +499 => x"76548880", +500 => x"77278438", +501 => x"88805473", +502 => x"5375529c", +503 => x"1a0851a4", +504 => x"1a085877", +505 => x"2d800b80", +506 => x"082582e0", +507 => x"38800816", +508 => x"77800831", +509 => x"7f880508", +510 => x"80083170", +511 => x"6188050c", +512 => x"5b585678", +513 => x"ffb43880", +514 => x"5574800c", +515 => x"903d0d04", +516 => x"7a813281", +517 => x"06774056", +518 => x"75802e81", +519 => x"bd387690", +520 => x"38740884", +521 => x"16088817", +522 => x"57585976", +523 => x"802ef238", +524 => x"881a0878", +525 => x"83ffff06", +526 => x"70892a81", +527 => x"06565956", +528 => x"73802e82", +529 => x"f8387577", +530 => x"278b3877", +531 => x"872a8106", +532 => x"5c7b82b5", +533 => x"38767627", +534 => x"83387656", +535 => x"75537852", +536 => x"79085185", +537 => x"833f881a", +538 => x"08763188", +539 => x"1b0c7908", +540 => x"167a0c76", +541 => x"56751977", +542 => x"77317f88", +543 => x"05087831", +544 => x"70618805", +545 => x"0c415859", +546 => x"7e802efe", +547 => x"fa388c1a", +548 => x"2258ff8a", +549 => x"39787954", +550 => x"7c537b52", +551 => x"5684c93f", +552 => x"881a0879", +553 => x"31881b0c", +554 => x"7908197a", +555 => x"0c7c7631", +556 => x"5d7c8e38", +557 => x"79518ff2", +558 => x"3f800881", +559 => x"8f388008", +560 => x"5f751c77", +561 => x"77317f88", +562 => x"05087831", +563 => x"70618805", +564 => x"0c5d585c", +565 => x"7a802efe", +566 => x"ae387681", +567 => x"83387408", +568 => x"84160888", +569 => x"1757585c", +570 => x"76802ef2", +571 => x"3876538a", +572 => x"527b5182", +573 => x"d33f8008", +574 => x"7c318105", +575 => x"5d800884", +576 => x"3881175d", +577 => x"815f7c59", +578 => x"767d2783", +579 => x"38765994", +580 => x"1a08881b", +581 => x"08115758", +582 => x"807a085c", +583 => x"54901a08", +584 => x"7b278338", +585 => x"81547579", +586 => x"25843873", +587 => x"ba387779", +588 => x"24fee238", +589 => x"77537b52", +590 => x"9c1a0851", +591 => x"a41a0859", +592 => x"782d8008", +593 => x"56800880", +594 => x"24fee238", +595 => x"8c1a2280", +596 => x"c0075e7d", +597 => x"8c1b23ff", +598 => x"5574800c", +599 => x"903d0d04", +600 => x"7effa338", +601 => x"ff873975", +602 => x"537b527a", +603 => x"5182f93f", +604 => x"7908167a", +605 => x"0c79518e", +606 => x"b13f8008", +607 => x"cf387c76", +608 => x"315d7cfe", +609 => x"bc38feac", +610 => x"39901a08", +611 => x"7a087131", +612 => x"78117056", +613 => x"5a575280", +614 => x"cfec0851", +615 => x"84943f80", +616 => x"08802eff", +617 => x"a7388008", +618 => x"901b0c80", +619 => x"08167a0c", +620 => x"77941b0c", +621 => x"76881b0c", +622 => x"7656fd99", +623 => x"39790858", +624 => x"901a0878", +625 => x"27833881", +626 => x"54757727", +627 => x"843873b3", +628 => x"38941a08", +629 => x"54737726", +630 => x"80d33873", +631 => x"5378529c", +632 => x"1a0851a4", +633 => x"1a085877", +634 => x"2d800856", +635 => x"80088024", +636 => x"fd83388c", +637 => x"1a2280c0", +638 => x"075e7d8c", +639 => x"1b23ff55", +640 => x"fed73975", +641 => x"53785277", +642 => x"5181dd3f", +643 => x"7908167a", +644 => x"0c79518d", +645 => x"953f8008", +646 => x"802efcd9", +647 => x"388c1a22", +648 => x"80c0075e", +649 => x"7d8c1b23", +650 => x"ff55fead", +651 => x"39767754", +652 => x"79537852", +653 => x"5681b13f", +654 => x"881a0877", +655 => x"31881b0c", +656 => x"7908177a", +657 => x"0cfcae39", +658 => x"fa3d0d7a", +659 => x"79028805", +660 => x"a7053355", +661 => x"53548374", +662 => x"2780df38", +663 => x"71830651", +664 => x"7080d738", +665 => x"71715755", +666 => x"83517582", +667 => x"802913ff", +668 => x"12525670", +669 => x"8025f338", +670 => x"837427bc", +671 => x"38740876", +672 => x"327009f7", +673 => x"fbfdff12", +674 => x"06f88482", +675 => x"81800651", +676 => x"5170802e", +677 => x"98387451", +678 => x"80527033", +679 => x"5772772e", +680 => x"b9388111", +681 => x"81135351", +682 => x"837227ee", +683 => x"38fc1484", +684 => x"16565473", +685 => x"8326c638", +686 => x"7452ff14", +687 => x"5170ff2e", +688 => x"97387133", +689 => x"5472742e", +690 => x"98388112", +691 => x"ff125252", +692 => x"70ff2e09", +693 => x"8106eb38", +694 => x"80517080", +695 => x"0c883d0d", +696 => x"0471800c", +697 => x"883d0d04", +698 => x"fa3d0d78", +699 => x"7a7c7272", +700 => x"72595755", +701 => x"58565774", +702 => x"7727b238", +703 => x"75155176", +704 => x"7127aa38", +705 => x"707618ff", +706 => x"18535353", +707 => x"70ff2e96", +708 => x"38ff12ff", +709 => x"14545272", +710 => x"337234ff", +711 => x"115170ff", +712 => x"2e098106", +713 => x"ec387680", +714 => x"0c883d0d", +715 => x"048f7627", +716 => x"80e63874", +717 => x"77078306", +718 => x"517080dc", +719 => x"38767552", +720 => x"53707084", +721 => x"05520873", +722 => x"70840555", +723 => x"0c727170", +724 => x"84055308", +725 => x"71708405", +726 => x"530c7170", +727 => x"84055308", +728 => x"71708405", +729 => x"530c7170", +730 => x"84055308", +731 => x"71708405", +732 => x"530cf015", +733 => x"5553738f", +734 => x"26c73883", +735 => x"74279538", +736 => x"70708405", +737 => x"52087370", +738 => x"8405550c", +739 => x"fc145473", +740 => x"8326ed38", +741 => x"72715452", +742 => x"ff145170", +743 => x"ff2eff86", +744 => x"38727081", +745 => x"05543372", +746 => x"70810554", +747 => x"34ff1151", +748 => x"ea39ef3d", +749 => x"0d636567", +750 => x"405d427b", +751 => x"802e8582", +752 => x"386151a9", +753 => x"e73ff81c", +754 => x"70841208", +755 => x"70fc0670", +756 => x"628b0570", +757 => x"f8064159", +758 => x"455c5f41", +759 => x"57967427", +760 => x"82c53880", +761 => x"7b247e7c", +762 => x"26075880", +763 => x"5477742e", +764 => x"09810682", +765 => x"ab38787b", +766 => x"2581fe38", +767 => x"781780d7", +768 => x"a80b8805", +769 => x"085b5679", +770 => x"762e84c5", +771 => x"38841608", +772 => x"70fe0617", +773 => x"84110881", +774 => x"06415555", +775 => x"7e828d38", +776 => x"74fc0658", +777 => x"79762e84", +778 => x"e3387818", +779 => x"5f7e7b25", +780 => x"81ff387c", +781 => x"81065473", +782 => x"82c13876", +783 => x"77083184", +784 => x"1108fc06", +785 => x"56577580", +786 => x"2e913879", +787 => x"762e84f0", +788 => x"38741819", +789 => x"58777b25", +790 => x"84913876", +791 => x"802e829b", +792 => x"38781556", +793 => x"7a762482", +794 => x"92388c17", +795 => x"08881808", +796 => x"718c120c", +797 => x"88120c5e", +798 => x"75598817", +799 => x"61fc055b", +800 => x"5679a426", +801 => x"85ff387b", +802 => x"76595593", +803 => x"7a2780c9", +804 => x"387b7084", +805 => x"055d087c", +806 => x"56760c74", +807 => x"70840556", +808 => x"088c180c", +809 => x"9017589b", +810 => x"7a27ae38", +811 => x"74708405", +812 => x"5608780c", +813 => x"74708405", +814 => x"56089418", +815 => x"0c981758", +816 => x"a37a2795", +817 => x"38747084", +818 => x"05560878", +819 => x"0c747084", +820 => x"0556089c", +821 => x"180ca017", +822 => x"58747084", +823 => x"05560875", +824 => x"5f787084", +825 => x"055a0c77", +826 => x"7e708405", +827 => x"40087170", +828 => x"8405530c", +829 => x"7e08710c", +830 => x"5d787b31", +831 => x"56758f26", +832 => x"80c93884", +833 => x"17088106", +834 => x"79078418", +835 => x"0c781784", +836 => x"11088107", +837 => x"84120c5b", +838 => x"6151a791", +839 => x"3f881754", +840 => x"73800c93", +841 => x"3d0d0490", +842 => x"5bfdb839", +843 => x"7756fe83", +844 => x"398c1608", +845 => x"88170871", +846 => x"8c120c88", +847 => x"120c587e", +848 => x"707c3157", +849 => x"598f7627", +850 => x"ffb9387a", +851 => x"17841808", +852 => x"81067c07", +853 => x"84190c76", +854 => x"81078412", +855 => x"0c761184", +856 => x"11088107", +857 => x"84120c5b", +858 => x"88055261", +859 => x"518fda3f", +860 => x"6151a6b9", +861 => x"3f881754", +862 => x"ffa6397d", +863 => x"52615197", +864 => x"d73f8008", +865 => x"5a800880", +866 => x"2e81ab38", +867 => x"8008f805", +868 => x"60840508", +869 => x"fe066105", +870 => x"58557477", +871 => x"2e83f238", +872 => x"fc195877", +873 => x"a42681b0", +874 => x"387b8008", +875 => x"56579378", +876 => x"2780dc38", +877 => x"7b707084", +878 => x"05520880", +879 => x"08708405", +880 => x"800c0c80", +881 => x"08717084", +882 => x"0553085d", +883 => x"567b7670", +884 => x"8405580c", +885 => x"579b7827", +886 => x"b6387670", +887 => x"84055808", +888 => x"75708405", +889 => x"570c7670", +890 => x"84055808", +891 => x"75708405", +892 => x"570ca378", +893 => x"27993876", +894 => x"70840558", +895 => x"08757084", +896 => x"05570c76", +897 => x"70840558", +898 => x"08757084", +899 => x"05570c76", +900 => x"70840558", +901 => x"08775e75", +902 => x"70840557", +903 => x"0c747d70", +904 => x"84055f08", +905 => x"71708405", +906 => x"530c7d08", +907 => x"710c5f7b", +908 => x"5261518e", +909 => x"943f6151", +910 => x"a4f33f79", +911 => x"800c933d", +912 => x"0d047d52", +913 => x"61519690", +914 => x"3f800880", +915 => x"0c933d0d", +916 => x"04841608", +917 => x"55fbc939", +918 => x"77537b52", +919 => x"800851a2", +920 => x"a53f7b52", +921 => x"61518de1", +922 => x"3fcc398c", +923 => x"16088817", +924 => x"08718c12", +925 => x"0c88120c", +926 => x"5d8c1708", +927 => x"88180871", +928 => x"8c120c88", +929 => x"120c5977", +930 => x"59fbef39", +931 => x"7818901c", +932 => x"40557e75", +933 => x"24fb9c38", +934 => x"7a177080", +935 => x"d7a80b88", +936 => x"050c757c", +937 => x"31810784", +938 => x"120c5684", +939 => x"17088106", +940 => x"7b078418", +941 => x"0c6151a3", +942 => x"f43f8817", +943 => x"54fce139", +944 => x"74181990", +945 => x"1c5e5a7c", +946 => x"7a24fb8f", +947 => x"388c1708", +948 => x"88180871", +949 => x"8c120c88", +950 => x"120c5e88", +951 => x"1761fc05", +952 => x"575975a4", +953 => x"2681b638", +954 => x"7b795955", +955 => x"93762780", +956 => x"c9387b70", +957 => x"84055d08", +958 => x"7c56790c", +959 => x"74708405", +960 => x"56088c18", +961 => x"0c901758", +962 => x"9b7627ae", +963 => x"38747084", +964 => x"05560878", +965 => x"0c747084", +966 => x"05560894", +967 => x"180c9817", +968 => x"58a37627", +969 => x"95387470", +970 => x"84055608", +971 => x"780c7470", +972 => x"84055608", +973 => x"9c180ca0", +974 => x"17587470", +975 => x"84055608", +976 => x"75417870", +977 => x"84055a0c", +978 => x"77607084", +979 => x"05420871", +980 => x"70840553", +981 => x"0c600871", +982 => x"0c5e7a17", +983 => x"7080d7a8", +984 => x"0b88050c", +985 => x"7a7c3181", +986 => x"0784120c", +987 => x"58841708", +988 => x"81067b07", +989 => x"84180c61", +990 => x"51a2b23f", +991 => x"78547380", +992 => x"0c933d0d", +993 => x"0479537b", +994 => x"5275519f", +995 => x"f93ffae9", +996 => x"39841508", +997 => x"fc061960", +998 => x"5859fadd", +999 => x"3975537b", +1000 => x"5278519f", +1001 => x"e13f7a17", +1002 => x"7080d7a8", +1003 => x"0b88050c", +1004 => x"7a7c3181", +1005 => x"0784120c", +1006 => x"58841708", +1007 => x"81067b07", +1008 => x"84180c61", +1009 => x"51a1e63f", +1010 => x"7854ffb2", +1011 => x"39fa3d0d", +1012 => x"7880cfec", +1013 => x"085455b8", +1014 => x"1308802e", +1015 => x"81af388c", +1016 => x"15227083", +1017 => x"ffff0670", +1018 => x"832a8132", +1019 => x"81065555", +1020 => x"5672802e", +1021 => x"80da3873", +1022 => x"842a8132", +1023 => x"810657ff", +1024 => x"537680f2", +1025 => x"3873822a", +1026 => x"81065473", +1027 => x"802eb938", +1028 => x"b0150854", +1029 => x"73802e9c", +1030 => x"3880c015", +1031 => x"5373732e", +1032 => x"8f387352", +1033 => x"80cfec08", +1034 => x"518a9e3f", +1035 => x"8c152256", +1036 => x"76b0160c", +1037 => x"75db0657", +1038 => x"768c1623", +1039 => x"800b8416", +1040 => x"0c901508", +1041 => x"750c7656", +1042 => x"75880754", +1043 => x"738c1623", +1044 => x"90150880", +1045 => x"2ebf388c", +1046 => x"15227081", +1047 => x"06555373", +1048 => x"9c38720a", +1049 => x"100a8106", +1050 => x"56758538", +1051 => x"94150854", +1052 => x"7388160c", +1053 => x"80537280", +1054 => x"0c883d0d", +1055 => x"04800b88", +1056 => x"160c9415", +1057 => x"08309816", +1058 => x"0c8053ea", +1059 => x"39725182", +1060 => x"a63ffecb", +1061 => x"3974518f", +1062 => x"bc3f8c15", +1063 => x"22708106", +1064 => x"55537380", +1065 => x"2effbb38", +1066 => x"d439f83d", +1067 => x"0d7a5776", +1068 => x"802e8197", +1069 => x"3880cfec", +1070 => x"0854b814", +1071 => x"08802e80", +1072 => x"eb388c17", +1073 => x"2270902b", +1074 => x"70902c70", +1075 => x"832a8132", +1076 => x"81065b5b", +1077 => x"57557780", +1078 => x"cb389017", +1079 => x"08567580", +1080 => x"2e80c138", +1081 => x"76087631", +1082 => x"76780c79", +1083 => x"83065555", +1084 => x"73853894", +1085 => x"17085877", +1086 => x"88180c80", +1087 => x"7525a538", +1088 => x"74537552", +1089 => x"9c170851", +1090 => x"a4170854", +1091 => x"732d800b", +1092 => x"80082580", +1093 => x"c9388008", +1094 => x"16758008", +1095 => x"31565674", +1096 => x"8024dd38", +1097 => x"800b800c", +1098 => x"8a3d0d04", +1099 => x"73518187", +1100 => x"3f8c1722", +1101 => x"70902b70", +1102 => x"902c7083", +1103 => x"2a813281", +1104 => x"065b5b57", +1105 => x"5577dd38", +1106 => x"ff9039a1", +1107 => x"aa5280cf", +1108 => x"ec08518c", +1109 => x"d03f8008", +1110 => x"800c8a3d", +1111 => x"0d048c17", +1112 => x"2280c007", +1113 => x"58778c18", +1114 => x"23ff0b80", +1115 => x"0c8a3d0d", +1116 => x"04fa3d0d", +1117 => x"797080dc", +1118 => x"298c1154", +1119 => x"7a535657", +1120 => x"8fd63f80", +1121 => x"08800855", +1122 => x"56800880", +1123 => x"2ea23880", +1124 => x"088c0554", +1125 => x"800b8008", +1126 => x"0c768008", +1127 => x"84050c73", +1128 => x"80088805", +1129 => x"0c745380", +1130 => x"5273519c", +1131 => x"f53f7554", +1132 => x"73800c88", +1133 => x"3d0d0470", +1134 => x"707074a8", +1135 => x"f60bbc12", +1136 => x"0c53810b", +1137 => x"b8140c80", +1138 => x"0b84dc14", +1139 => x"0c830b84", +1140 => x"e0140c84", +1141 => x"e81384e4", +1142 => x"140c8413", +1143 => x"08518070", +1144 => x"720c7084", +1145 => x"130c7088", +1146 => x"130c5284", +1147 => x"0b8c1223", +1148 => x"718e1223", +1149 => x"7190120c", +1150 => x"7194120c", +1151 => x"7198120c", +1152 => x"709c120c", +1153 => x"80c1e50b", +1154 => x"a0120c80", +1155 => x"c2b10ba4", +1156 => x"120c80c3", +1157 => x"ad0ba812", +1158 => x"0c80c3fe", +1159 => x"0bac120c", +1160 => x"88130872", +1161 => x"710c7284", +1162 => x"120c7288", +1163 => x"120c5189", +1164 => x"0b8c1223", +1165 => x"810b8e12", +1166 => x"23719012", +1167 => x"0c719412", +1168 => x"0c719812", +1169 => x"0c709c12", +1170 => x"0c80c1e5", +1171 => x"0ba0120c", +1172 => x"80c2b10b", +1173 => x"a4120c80", +1174 => x"c3ad0ba8", +1175 => x"120c80c3", +1176 => x"fe0bac12", +1177 => x"0c8c1308", +1178 => x"72710c72", +1179 => x"84120c72", +1180 => x"88120c51", +1181 => x"8a0b8c12", +1182 => x"23820b8e", +1183 => x"12237190", +1184 => x"120c7194", +1185 => x"120c7198", +1186 => x"120c709c", +1187 => x"120c80c1", +1188 => x"e50ba012", +1189 => x"0c80c2b1", +1190 => x"0ba4120c", +1191 => x"80c3ad0b", +1192 => x"a8120c80", +1193 => x"c3fe0bac", +1194 => x"120c5050", +1195 => x"5004f83d", +1196 => x"0d7a80cf", +1197 => x"ec08b811", +1198 => x"08575758", +1199 => x"7481ec38", +1200 => x"a8f60bbc", +1201 => x"170c810b", +1202 => x"b8170c74", +1203 => x"84dc170c", +1204 => x"830b84e0", +1205 => x"170c84e8", +1206 => x"1684e417", +1207 => x"0c841608", +1208 => x"75710c75", +1209 => x"84120c75", +1210 => x"88120c59", +1211 => x"840b8c1a", +1212 => x"23748e1a", +1213 => x"2374901a", +1214 => x"0c74941a", +1215 => x"0c74981a", +1216 => x"0c789c1a", +1217 => x"0c80c1e5", +1218 => x"0ba01a0c", +1219 => x"80c2b10b", +1220 => x"a41a0c80", +1221 => x"c3ad0ba8", +1222 => x"1a0c80c3", +1223 => x"fe0bac1a", +1224 => x"0c881608", +1225 => x"75710c75", +1226 => x"84120c75", +1227 => x"88120c57", +1228 => x"890b8c18", +1229 => x"23810b8e", +1230 => x"18237490", +1231 => x"180c7494", +1232 => x"180c7498", +1233 => x"180c769c", +1234 => x"180c80c1", +1235 => x"e50ba018", +1236 => x"0c80c2b1", +1237 => x"0ba4180c", +1238 => x"80c3ad0b", +1239 => x"a8180c80", +1240 => x"c3fe0bac", +1241 => x"180c8c16", +1242 => x"0875710c", +1243 => x"7584120c", +1244 => x"7588120c", +1245 => x"548a0b8c", +1246 => x"1523820b", +1247 => x"8e152374", +1248 => x"90150c74", +1249 => x"94150c74", +1250 => x"98150c73", +1251 => x"9c150c80", +1252 => x"c1e50ba0", +1253 => x"150c80c2", +1254 => x"b10ba415", +1255 => x"0c80c3ad", +1256 => x"0ba8150c", +1257 => x"80c3fe0b", +1258 => x"ac150c84", +1259 => x"dc168811", +1260 => x"08841208", +1261 => x"ff055757", +1262 => x"57807524", +1263 => x"9f388c16", +1264 => x"2270902b", +1265 => x"70902c51", +1266 => x"55597380", +1267 => x"2e80ed38", +1268 => x"80dc16ff", +1269 => x"16565674", +1270 => x"8025e338", +1271 => x"76085574", +1272 => x"802e8f38", +1273 => x"74881108", +1274 => x"841208ff", +1275 => x"05575757", +1276 => x"c83982fc", +1277 => x"5277518a", +1278 => x"df3f8008", +1279 => x"80085556", +1280 => x"8008802e", +1281 => x"a3388008", +1282 => x"8c057580", +1283 => x"080c5484", +1284 => x"0b800884", +1285 => x"050c7380", +1286 => x"0888050c", +1287 => x"82f05374", +1288 => x"52735197", +1289 => x"fd3f7554", +1290 => x"7374780c", +1291 => x"5573ffb4", +1292 => x"388c780c", +1293 => x"800b800c", +1294 => x"8a3d0d04", +1295 => x"810b8c17", +1296 => x"2373760c", +1297 => x"7388170c", +1298 => x"7384170c", +1299 => x"7390170c", +1300 => x"7394170c", +1301 => x"7398170c", +1302 => x"ff0b8e17", +1303 => x"2373b017", +1304 => x"0c73b417", +1305 => x"0c7380c4", +1306 => x"170c7380", +1307 => x"c8170c75", +1308 => x"800c8a3d", +1309 => x"0d047070", +1310 => x"a1aa5273", +1311 => x"5186a63f", +1312 => x"50500470", +1313 => x"70a1aa52", +1314 => x"80cfec08", +1315 => x"5186963f", +1316 => x"505004fb", +1317 => x"3d0d7770", +1318 => x"52569890", +1319 => x"3f80d7a8", +1320 => x"0b880508", +1321 => x"841108fc", +1322 => x"06707b31", +1323 => x"9fef05e0", +1324 => x"8006e080", +1325 => x"05525555", +1326 => x"a0807524", +1327 => x"94388052", +1328 => x"755197ea", +1329 => x"3f80d7b0", +1330 => x"08145372", +1331 => x"80082e8f", +1332 => x"38755197", +1333 => x"d83f8053", +1334 => x"72800c87", +1335 => x"3d0d0474", +1336 => x"30527551", +1337 => x"97c83f80", +1338 => x"08ff2ea8", +1339 => x"3880d7a8", +1340 => x"0b880508", +1341 => x"74763181", +1342 => x"0784120c", +1343 => x"5380d6ec", +1344 => x"08753180", +1345 => x"d6ec0c75", +1346 => x"5197a23f", +1347 => x"810b800c", +1348 => x"873d0d04", +1349 => x"80527551", +1350 => x"97943f80", +1351 => x"d7a80b88", +1352 => x"05088008", +1353 => x"71315454", +1354 => x"8f7325ff", +1355 => x"a4388008", +1356 => x"80d79c08", +1357 => x"3180d6ec", +1358 => x"0c728107", +1359 => x"84150c75", +1360 => x"5196ea3f", +1361 => x"8053ff90", +1362 => x"39f73d0d", +1363 => x"7b7d545a", +1364 => x"72802e82", +1365 => x"83387951", +1366 => x"96d23ff8", +1367 => x"13841108", +1368 => x"70fe0670", +1369 => x"13841108", +1370 => x"fc065c57", +1371 => x"58545780", +1372 => x"d7b00874", +1373 => x"2e82de38", +1374 => x"7784150c", +1375 => x"80738106", +1376 => x"56597479", +1377 => x"2e81d538", +1378 => x"77148411", +1379 => x"08810656", +1380 => x"5374a038", +1381 => x"77165678", +1382 => x"81e63888", +1383 => x"14085574", +1384 => x"80d7b02e", +1385 => x"82f9388c", +1386 => x"1408708c", +1387 => x"170c7588", +1388 => x"120c5875", +1389 => x"81078418", +1390 => x"0c751776", +1391 => x"710c5478", +1392 => x"81913883", +1393 => x"ff762781", +1394 => x"c8387589", +1395 => x"2a76832a", +1396 => x"54547380", +1397 => x"2ebf3875", +1398 => x"862ab805", +1399 => x"53847427", +1400 => x"b43880db", +1401 => x"14539474", +1402 => x"27ab3875", +1403 => x"8c2a80ee", +1404 => x"055380d4", +1405 => x"74279e38", +1406 => x"758f2a80", +1407 => x"f7055382", +1408 => x"d4742791", +1409 => x"3875922a", +1410 => x"80fc0553", +1411 => x"8ad47427", +1412 => x"843880fe", +1413 => x"53721010", +1414 => x"1080d7a8", +1415 => x"05881108", +1416 => x"55557375", +1417 => x"2e82bf38", +1418 => x"841408fc", +1419 => x"06597579", +1420 => x"278d3888", +1421 => x"14085473", +1422 => x"752e0981", +1423 => x"06ea388c", +1424 => x"1408708c", +1425 => x"190c7488", +1426 => x"190c7788", +1427 => x"120c5576", +1428 => x"8c150c79", +1429 => x"5194d63f", +1430 => x"8b3d0d04", +1431 => x"76087771", +1432 => x"31587605", +1433 => x"88180856", +1434 => x"567480d7", +1435 => x"b02e80e0", +1436 => x"388c1708", +1437 => x"708c170c", +1438 => x"7588120c", +1439 => x"53fe8939", +1440 => x"8814088c", +1441 => x"1508708c", +1442 => x"130c5988", +1443 => x"190cfea3", +1444 => x"3975832a", +1445 => x"70545480", +1446 => x"74248198", +1447 => x"3872822c", +1448 => x"81712b80", +1449 => x"d7ac0807", +1450 => x"80d7a80b", +1451 => x"84050c74", +1452 => x"10101080", +1453 => x"d7a80588", +1454 => x"1108718c", +1455 => x"1b0c7088", +1456 => x"1b0c7988", +1457 => x"130c565a", +1458 => x"55768c15", +1459 => x"0cff8439", +1460 => x"8159fdb4", +1461 => x"39771673", +1462 => x"81065455", +1463 => x"72983876", +1464 => x"08777131", +1465 => x"5875058c", +1466 => x"18088819", +1467 => x"08718c12", +1468 => x"0c88120c", +1469 => x"55557481", +1470 => x"0784180c", +1471 => x"7680d7a8", +1472 => x"0b88050c", +1473 => x"80d7a408", +1474 => x"7526fec7", +1475 => x"3880d7a0", +1476 => x"08527951", +1477 => x"fafd3f79", +1478 => x"5193923f", +1479 => x"feba3981", +1480 => x"778c170c", +1481 => x"7788170c", +1482 => x"758c190c", +1483 => x"7588190c", +1484 => x"59fd8039", +1485 => x"83147082", +1486 => x"2c81712b", +1487 => x"80d7ac08", +1488 => x"0780d7a8", +1489 => x"0b84050c", +1490 => x"75101010", +1491 => x"80d7a805", +1492 => x"88110871", +1493 => x"8c1c0c70", +1494 => x"881c0c7a", +1495 => x"88130c57", +1496 => x"5b5653fe", +1497 => x"e4398073", +1498 => x"24a33872", +1499 => x"822c8171", +1500 => x"2b80d7ac", +1501 => x"080780d7", +1502 => x"a80b8405", +1503 => x"0c58748c", +1504 => x"180c7388", +1505 => x"180c7688", +1506 => x"160cfdc3", +1507 => x"39831370", +1508 => x"822c8171", +1509 => x"2b80d7ac", +1510 => x"080780d7", +1511 => x"a80b8405", +1512 => x"0c5953da", +1513 => x"39f93d0d", +1514 => x"797b5853", +1515 => x"800b80cf", +1516 => x"ec085356", +1517 => x"72722ebc", +1518 => x"3884dc13", +1519 => x"5574762e", +1520 => x"b3388815", +1521 => x"08841608", +1522 => x"ff055454", +1523 => x"80732499", +1524 => x"388c1422", +1525 => x"70902b53", +1526 => x"587180d4", +1527 => x"3880dc14", +1528 => x"ff145454", +1529 => x"728025e9", +1530 => x"38740855", +1531 => x"74d43880", +1532 => x"cfec0852", +1533 => x"84dc1255", +1534 => x"74802ead", +1535 => x"38881508", +1536 => x"841608ff", +1537 => x"05545480", +1538 => x"73249838", +1539 => x"8c142270", +1540 => x"902b5358", +1541 => x"71ad3880", +1542 => x"dc14ff14", +1543 => x"54547280", +1544 => x"25ea3874", +1545 => x"085574d5", +1546 => x"3875800c", +1547 => x"893d0d04", +1548 => x"7351762d", +1549 => x"75800807", +1550 => x"80dc15ff", +1551 => x"15555556", +1552 => x"ffa23973", +1553 => x"51762d75", +1554 => x"80080780", +1555 => x"dc15ff15", +1556 => x"555556ca", +1557 => x"39ea3d0d", +1558 => x"688c1122", +1559 => x"700a100a", +1560 => x"81065758", +1561 => x"567480e4", +1562 => x"388e1622", +1563 => x"70902b70", +1564 => x"902c5155", +1565 => x"58807424", +1566 => x"b138983d", +1567 => x"c4055373", +1568 => x"5280cfec", +1569 => x"08519481", +1570 => x"3f800b80", +1571 => x"08249738", +1572 => x"7983e080", +1573 => x"06547380", +1574 => x"c0802e81", +1575 => x"8f387382", +1576 => x"80802e81", +1577 => x"91388c16", +1578 => x"22577690", +1579 => x"80075473", +1580 => x"8c172388", +1581 => x"805280cf", +1582 => x"ec085181", +1583 => x"9b3f8008", +1584 => x"9d388c16", +1585 => x"22820755", +1586 => x"748c1723", +1587 => x"80c31670", +1588 => x"770c9017", +1589 => x"0c810b94", +1590 => x"170c983d", +1591 => x"0d0480cf", +1592 => x"ec08a8f6", +1593 => x"0bbc120c", +1594 => x"588c1622", +1595 => x"81800754", +1596 => x"738c1723", +1597 => x"8008760c", +1598 => x"80089017", +1599 => x"0c88800b", +1600 => x"94170c74", +1601 => x"802ed338", +1602 => x"8e162270", +1603 => x"902b7090", +1604 => x"2c535654", +1605 => x"9afb3f80", +1606 => x"08802eff", +1607 => x"bd388c16", +1608 => x"22810757", +1609 => x"768c1723", +1610 => x"983d0d04", +1611 => x"810b8c17", +1612 => x"225855fe", +1613 => x"f539a816", +1614 => x"0880c3ad", +1615 => x"2e098106", +1616 => x"fee4388c", +1617 => x"16228880", +1618 => x"0754738c", +1619 => x"17238880", +1620 => x"0b80cc17", +1621 => x"0cfedc39", +1622 => x"f43d0d7e", +1623 => x"608b1170", +1624 => x"f8065b55", +1625 => x"555d7296", +1626 => x"26833890", +1627 => x"58807824", +1628 => x"74792607", +1629 => x"55805474", +1630 => x"742e0981", +1631 => x"0680ca38", +1632 => x"7c518ea8", +1633 => x"3f7783f7", +1634 => x"2680c538", +1635 => x"77832a70", +1636 => x"10101080", +1637 => x"d7a8058c", +1638 => x"11085858", +1639 => x"5475772e", +1640 => x"81f03884", +1641 => x"1608fc06", +1642 => x"8c170888", +1643 => x"1808718c", +1644 => x"120c8812", +1645 => x"0c5b7605", +1646 => x"84110881", +1647 => x"0784120c", +1648 => x"537c518d", +1649 => x"e83f8816", +1650 => x"5473800c", +1651 => x"8e3d0d04", +1652 => x"77892a78", +1653 => x"832a5854", +1654 => x"73802ebf", +1655 => x"3877862a", +1656 => x"b8055784", +1657 => x"7427b438", +1658 => x"80db1457", +1659 => x"947427ab", +1660 => x"38778c2a", +1661 => x"80ee0557", +1662 => x"80d47427", +1663 => x"9e38778f", +1664 => x"2a80f705", +1665 => x"5782d474", +1666 => x"27913877", +1667 => x"922a80fc", +1668 => x"05578ad4", +1669 => x"74278438", +1670 => x"80fe5776", +1671 => x"10101080", +1672 => x"d7a8058c", +1673 => x"11085653", +1674 => x"74732ea3", +1675 => x"38841508", +1676 => x"fc067079", +1677 => x"31555673", +1678 => x"8f2488e4", +1679 => x"38738025", +1680 => x"88e6388c", +1681 => x"15085574", +1682 => x"732e0981", +1683 => x"06df3881", +1684 => x"175980d7", +1685 => x"b8085675", +1686 => x"80d7b02e", +1687 => x"82cc3884", +1688 => x"1608fc06", +1689 => x"70793155", +1690 => x"55738f24", +1691 => x"bb3880d7", +1692 => x"b00b80d7", +1693 => x"bc0c80d7", +1694 => x"b00b80d7", +1695 => x"b80c8074", +1696 => x"2480db38", +1697 => x"74168411", +1698 => x"08810784", +1699 => x"120c53fe", +1700 => x"b0398816", +1701 => x"8c110857", +1702 => x"5975792e", +1703 => x"098106fe", +1704 => x"82388214", +1705 => x"59ffab39", +1706 => x"77167881", +1707 => x"0784180c", +1708 => x"7080d7bc", +1709 => x"0c7080d7", +1710 => x"b80c80d7", +1711 => x"b00b8c12", +1712 => x"0c8c1108", +1713 => x"88120c74", +1714 => x"81078412", +1715 => x"0c740574", +1716 => x"710c5b7c", +1717 => x"518bd63f", +1718 => x"881654fd", +1719 => x"ec3983ff", +1720 => x"75278391", +1721 => x"3874892a", +1722 => x"75832a54", +1723 => x"5473802e", +1724 => x"bf387486", +1725 => x"2ab80553", +1726 => x"847427b4", +1727 => x"3880db14", +1728 => x"53947427", +1729 => x"ab38748c", +1730 => x"2a80ee05", +1731 => x"5380d474", +1732 => x"279e3874", +1733 => x"8f2a80f7", +1734 => x"055382d4", +1735 => x"74279138", +1736 => x"74922a80", +1737 => x"fc05538a", +1738 => x"d4742784", +1739 => x"3880fe53", +1740 => x"72101010", +1741 => x"80d7a805", +1742 => x"88110855", +1743 => x"5773772e", +1744 => x"868b3884", +1745 => x"1408fc06", +1746 => x"5b747b27", +1747 => x"8d388814", +1748 => x"08547377", +1749 => x"2e098106", +1750 => x"ea388c14", +1751 => x"0880d7a8", +1752 => x"0b840508", +1753 => x"718c190c", +1754 => x"7588190c", +1755 => x"7788130c", +1756 => x"5c57758c", +1757 => x"150c7853", +1758 => x"80792483", +1759 => x"98387282", +1760 => x"2c81712b", +1761 => x"5656747b", +1762 => x"2680ca38", +1763 => x"7a750657", +1764 => x"7682a338", +1765 => x"78fc0684", +1766 => x"05597410", +1767 => x"707c0655", +1768 => x"55738292", +1769 => x"38841959", +1770 => x"f13980d7", +1771 => x"a80b8405", +1772 => x"0879545b", +1773 => x"788025c6", +1774 => x"3882da39", +1775 => x"74097b06", +1776 => x"7080d7a8", +1777 => x"0b84050c", +1778 => x"5b741055", +1779 => x"747b2685", +1780 => x"387485bc", +1781 => x"3880d7a8", +1782 => x"0b880508", +1783 => x"70841208", +1784 => x"fc06707b", +1785 => x"317b7226", +1786 => x"8f722507", +1787 => x"5d575c5c", +1788 => x"5578802e", +1789 => x"80d93879", +1790 => x"1580d7a0", +1791 => x"08199011", +1792 => x"59545680", +1793 => x"d79c08ff", +1794 => x"2e8838a0", +1795 => x"8f13e080", +1796 => x"06577652", +1797 => x"7c518996", +1798 => x"3f800854", +1799 => x"8008ff2e", +1800 => x"90388008", +1801 => x"762782a7", +1802 => x"387480d7", +1803 => x"a82e829f", +1804 => x"3880d7a8", +1805 => x"0b880508", +1806 => x"55841508", +1807 => x"fc067079", +1808 => x"31797226", +1809 => x"8f722507", +1810 => x"5d555a7a", +1811 => x"83f23877", +1812 => x"81078416", +1813 => x"0c771570", +1814 => x"80d7a80b", +1815 => x"88050c74", +1816 => x"81078412", +1817 => x"0c567c51", +1818 => x"88c33f88", +1819 => x"15547380", +1820 => x"0c8e3d0d", +1821 => x"0474832a", +1822 => x"70545480", +1823 => x"7424819b", +1824 => x"3872822c", +1825 => x"81712b80", +1826 => x"d7ac0807", +1827 => x"7080d7a8", +1828 => x"0b84050c", +1829 => x"75101010", +1830 => x"80d7a805", +1831 => x"88110871", +1832 => x"8c1b0c70", +1833 => x"881b0c79", +1834 => x"88130c57", +1835 => x"555c5575", +1836 => x"8c150cfd", +1837 => x"c1397879", +1838 => x"10101080", +1839 => x"d7a80570", +1840 => x"565b5c8c", +1841 => x"14085675", +1842 => x"742ea338", +1843 => x"841608fc", +1844 => x"06707931", +1845 => x"5853768f", +1846 => x"2483f138", +1847 => x"76802584", +1848 => x"af388c16", +1849 => x"08567574", +1850 => x"2e098106", +1851 => x"df388814", +1852 => x"811a7083", +1853 => x"06555a54", +1854 => x"72c9387b", +1855 => x"83065675", +1856 => x"802efdb8", +1857 => x"38ff1cf8", +1858 => x"1b5b5c88", +1859 => x"1a087a2e", +1860 => x"ea38fdb5", +1861 => x"39831953", +1862 => x"fce43983", +1863 => x"1470822c", +1864 => x"81712b80", +1865 => x"d7ac0807", +1866 => x"7080d7a8", +1867 => x"0b84050c", +1868 => x"76101010", +1869 => x"80d7a805", +1870 => x"88110871", +1871 => x"8c1c0c70", +1872 => x"881c0c7a", +1873 => x"88130c58", +1874 => x"535d5653", +1875 => x"fee13980", +1876 => x"d6ec0817", +1877 => x"59800876", +1878 => x"2e818b38", +1879 => x"80d79c08", +1880 => x"ff2e848e", +1881 => x"38737631", +1882 => x"1980d6ec", +1883 => x"0c738706", +1884 => x"70565372", +1885 => x"802e8838", +1886 => x"88733170", +1887 => x"15555576", +1888 => x"149fff06", +1889 => x"a0807131", +1890 => x"1670547e", +1891 => x"53515386", +1892 => x"9d3f8008", +1893 => x"568008ff", +1894 => x"2e819e38", +1895 => x"80d6ec08", +1896 => x"137080d6", +1897 => x"ec0c7475", +1898 => x"80d7a80b", +1899 => x"88050c77", +1900 => x"76311581", +1901 => x"07555659", +1902 => x"7a80d7a8", +1903 => x"2e83c038", +1904 => x"798f2682", +1905 => x"ef38810b", +1906 => x"84150c84", +1907 => x"1508fc06", +1908 => x"70793179", +1909 => x"72268f72", +1910 => x"25075d55", +1911 => x"5a7a802e", +1912 => x"fced3880", +1913 => x"db398008", +1914 => x"9fff0655", +1915 => x"74feed38", +1916 => x"7880d6ec", +1917 => x"0c80d7a8", +1918 => x"0b880508", +1919 => x"7a188107", +1920 => x"84120c55", +1921 => x"80d79808", +1922 => x"79278638", +1923 => x"7880d798", +1924 => x"0c80d794", +1925 => x"087927fc", +1926 => x"a0387880", +1927 => x"d7940c84", +1928 => x"1508fc06", +1929 => x"70793179", +1930 => x"72268f72", +1931 => x"25075d55", +1932 => x"5a7a802e", +1933 => x"fc993888", +1934 => x"39807457", +1935 => x"53fedd39", +1936 => x"7c5184e9", +1937 => x"3f800b80", +1938 => x"0c8e3d0d", +1939 => x"04807324", +1940 => x"a5387282", +1941 => x"2c81712b", +1942 => x"80d7ac08", +1943 => x"077080d7", +1944 => x"a80b8405", +1945 => x"0c5c5a76", +1946 => x"8c170c73", +1947 => x"88170c75", +1948 => x"88180cf9", +1949 => x"fd398313", +1950 => x"70822c81", +1951 => x"712b80d7", +1952 => x"ac080770", +1953 => x"80d7a80b", +1954 => x"84050c5d", +1955 => x"5b53d839", +1956 => x"7a75065c", +1957 => x"7bfc9f38", +1958 => x"84197510", +1959 => x"5659f139", +1960 => x"ff178105", +1961 => x"59f7ab39", +1962 => x"8c150888", +1963 => x"1608718c", +1964 => x"120c8812", +1965 => x"0c597515", +1966 => x"84110881", +1967 => x"0784120c", +1968 => x"587c5183", +1969 => x"e83f8815", +1970 => x"54fba339", +1971 => x"77167881", +1972 => x"0784180c", +1973 => x"8c170888", +1974 => x"1808718c", +1975 => x"120c8812", +1976 => x"0c5c7080", +1977 => x"d7bc0c70", +1978 => x"80d7b80c", +1979 => x"80d7b00b", +1980 => x"8c120c8c", +1981 => x"11088812", +1982 => x"0c778107", +1983 => x"84120c77", +1984 => x"0577710c", +1985 => x"557c5183", +1986 => x"a43f8816", +1987 => x"54f5ba39", +1988 => x"72168411", +1989 => x"08810784", +1990 => x"120c588c", +1991 => x"16088817", +1992 => x"08718c12", +1993 => x"0c88120c", +1994 => x"577c5183", +1995 => x"803f8816", +1996 => x"54f59639", +1997 => x"7284150c", +1998 => x"f41af806", +1999 => x"70841d08", +2000 => x"81060784", +2001 => x"1d0c701c", +2002 => x"5556850b", +2003 => x"84150c85", +2004 => x"0b88150c", +2005 => x"8f7627fd", +2006 => x"ab38881b", +2007 => x"527c51eb", +2008 => x"e83f80d7", +2009 => x"a80b8805", +2010 => x"0880d6ec", +2011 => x"085a55fd", +2012 => x"93397880", +2013 => x"d6ec0c73", +2014 => x"80d79c0c", +2015 => x"fbef3972", +2016 => x"84150cfc", +2017 => x"ff39fb3d", +2018 => x"0d77707a", +2019 => x"7c585553", +2020 => x"568f7527", +2021 => x"80e63872", +2022 => x"76078306", +2023 => x"517080dc", +2024 => x"38757352", +2025 => x"54707084", +2026 => x"05520874", +2027 => x"70840556", +2028 => x"0c737170", +2029 => x"84055308", +2030 => x"71708405", +2031 => x"530c7170", +2032 => x"84055308", +2033 => x"71708405", +2034 => x"530c7170", +2035 => x"84055308", +2036 => x"71708405", +2037 => x"530cf016", +2038 => x"5654748f", +2039 => x"26c73883", +2040 => x"75279538", +2041 => x"70708405", +2042 => x"52087470", +2043 => x"8405560c", +2044 => x"fc155574", +2045 => x"8326ed38", +2046 => x"73715452", +2047 => x"ff155170", +2048 => x"ff2e9838", +2049 => x"72708105", +2050 => x"54337270", +2051 => x"81055434", +2052 => x"ff115170", +2053 => x"ff2e0981", +2054 => x"06ea3875", +2055 => x"800c873d", +2056 => x"0d04fb3d", +2057 => x"0d777a71", +2058 => x"028c05a3", +2059 => x"05335854", +2060 => x"54568373", +2061 => x"2780d438", +2062 => x"75830651", +2063 => x"7080cc38", +2064 => x"74882b75", +2065 => x"07707190", +2066 => x"2b075551", +2067 => x"8f7327a7", +2068 => x"38737270", +2069 => x"8405540c", +2070 => x"71747170", +2071 => x"8405530c", +2072 => x"74717084", +2073 => x"05530c74", +2074 => x"71708405", +2075 => x"530cf014", +2076 => x"5452728f", +2077 => x"26db3883", +2078 => x"73279038", +2079 => x"73727084", +2080 => x"05540cfc", +2081 => x"13537283", +2082 => x"26f238ff", +2083 => x"135170ff", +2084 => x"2e933874", +2085 => x"72708105", +2086 => x"5434ff11", +2087 => x"5170ff2e", +2088 => x"098106ef", +2089 => x"3875800c", +2090 => x"873d0d04", +2091 => x"04047070", +2092 => x"7070800b", +2093 => x"80dfe40c", +2094 => x"765184f3", +2095 => x"3f800853", +2096 => x"8008ff2e", +2097 => x"89387280", +2098 => x"0c505050", +2099 => x"500480df", +2100 => x"e4085473", +2101 => x"802eef38", +2102 => x"7574710c", +2103 => x"5272800c", +2104 => x"50505050", +2105 => x"04f93d0d", +2106 => x"797c557b", +2107 => x"548e1122", +2108 => x"70902b70", +2109 => x"902c5557", +2110 => x"80cfec08", +2111 => x"53585683", +2112 => x"f63f8008", +2113 => x"57800b80", +2114 => x"08249338", +2115 => x"80d01608", +2116 => x"80080580", +2117 => x"d0170c76", +2118 => x"800c893d", +2119 => x"0d048c16", +2120 => x"2283dfff", +2121 => x"0655748c", +2122 => x"17237680", +2123 => x"0c893d0d", +2124 => x"04fa3d0d", +2125 => x"788c1122", +2126 => x"70882a70", +2127 => x"81065157", +2128 => x"585674a9", +2129 => x"388c1622", +2130 => x"83dfff06", +2131 => x"55748c17", +2132 => x"237a5479", +2133 => x"538e1622", +2134 => x"70902b70", +2135 => x"902c5456", +2136 => x"80cfec08", +2137 => x"525681b2", +2138 => x"3f883d0d", +2139 => x"04825480", +2140 => x"538e1622", +2141 => x"70902b70", +2142 => x"902c5456", +2143 => x"80cfec08", +2144 => x"525782bb", +2145 => x"3f8c1622", +2146 => x"83dfff06", +2147 => x"55748c17", +2148 => x"237a5479", +2149 => x"538e1622", +2150 => x"70902b70", +2151 => x"902c5456", +2152 => x"80cfec08", +2153 => x"525680f2", +2154 => x"3f883d0d", +2155 => x"04f93d0d", +2156 => x"797c557b", +2157 => x"548e1122", +2158 => x"70902b70", +2159 => x"902c5557", +2160 => x"80cfec08", +2161 => x"53585681", +2162 => x"f63f8008", +2163 => x"578008ff", +2164 => x"2e99388c", +2165 => x"1622a080", +2166 => x"0755748c", +2167 => x"17238008", +2168 => x"80d0170c", +2169 => x"76800c89", +2170 => x"3d0d048c", +2171 => x"162283df", +2172 => x"ff065574", +2173 => x"8c172376", +2174 => x"800c893d", +2175 => x"0d047070", +2176 => x"70748e11", +2177 => x"2270902b", +2178 => x"70902c55", +2179 => x"51515380", +2180 => x"cfec0851", +2181 => x"bd3f5050", +2182 => x"5004fb3d", +2183 => x"0d800b80", +2184 => x"dfe40c7a", +2185 => x"53795278", +2186 => x"5182fc3f", +2187 => x"80085580", +2188 => x"08ff2e88", +2189 => x"3874800c", +2190 => x"873d0d04", +2191 => x"80dfe408", +2192 => x"5675802e", +2193 => x"f0387776", +2194 => x"710c5474", +2195 => x"800c873d", +2196 => x"0d047070", +2197 => x"7070800b", +2198 => x"80dfe40c", +2199 => x"765184c9", +2200 => x"3f800853", +2201 => x"8008ff2e", +2202 => x"89387280", +2203 => x"0c505050", +2204 => x"500480df", +2205 => x"e4085473", +2206 => x"802eef38", +2207 => x"7574710c", +2208 => x"5272800c", +2209 => x"50505050", +2210 => x"04fc3d0d", +2211 => x"800b80df", +2212 => x"e40c7852", +2213 => x"775187b0", +2214 => x"3f800854", +2215 => x"8008ff2e", +2216 => x"88387380", +2217 => x"0c863d0d", +2218 => x"0480dfe4", +2219 => x"08557480", +2220 => x"2ef03876", +2221 => x"75710c53", +2222 => x"73800c86", +2223 => x"3d0d04fb", +2224 => x"3d0d800b", +2225 => x"80dfe40c", +2226 => x"7a537952", +2227 => x"7851848b", +2228 => x"3f800855", +2229 => x"8008ff2e", +2230 => x"88387480", +2231 => x"0c873d0d", +2232 => x"0480dfe4", +2233 => x"08567580", +2234 => x"2ef03877", +2235 => x"76710c54", +2236 => x"74800c87", +2237 => x"3d0d04fb", +2238 => x"3d0d800b", +2239 => x"80dfe40c", +2240 => x"7a537952", +2241 => x"78518293", +2242 => x"3f800855", +2243 => x"8008ff2e", +2244 => x"88387480", +2245 => x"0c873d0d", +2246 => x"0480dfe4", +2247 => x"08567580", +2248 => x"2ef03877", +2249 => x"76710c54", +2250 => x"74800c87", +2251 => x"3d0d0470", +2252 => x"707080df", +2253 => x"d8088938", +2254 => x"80dfe80b", +2255 => x"80dfd80c", +2256 => x"80dfd808", +2257 => x"75115252", +2258 => x"ff537087", +2259 => x"fb808026", +2260 => x"88387080", +2261 => x"dfd80c71", +2262 => x"5372800c", +2263 => x"50505004", +2264 => x"fd3d0d80", +2265 => x"0b80cfe0", +2266 => x"08545472", +2267 => x"812e9b38", +2268 => x"7380dfdc", +2269 => x"0cc2af3f", +2270 => x"c1863f80", +2271 => x"dfb05281", +2272 => x"51c3ff3f", +2273 => x"80085186", +2274 => x"bf3f7280", +2275 => x"dfdc0cc2", +2276 => x"953fc0ec", +2277 => x"3f80dfb0", +2278 => x"528151c3", +2279 => x"e53f8008", +2280 => x"5186a53f", +2281 => x"00ff39f5", +2282 => x"3d0d7e60", +2283 => x"80dfdc08", +2284 => x"705b585b", +2285 => x"5b7580c2", +2286 => x"38777a25", +2287 => x"a138771b", +2288 => x"70337081", +2289 => x"ff065858", +2290 => x"59758a2e", +2291 => x"98387681", +2292 => x"ff0651c1", +2293 => x"b03f8118", +2294 => x"58797824", +2295 => x"e1387980", +2296 => x"0c8d3d0d", +2297 => x"048d51c1", +2298 => x"9c3f7833", +2299 => x"7081ff06", +2300 => x"5257c191", +2301 => x"3f811858", +2302 => x"e0397955", +2303 => x"7a547d53", +2304 => x"85528d3d", +2305 => x"fc0551c0", +2306 => x"b93f8008", +2307 => x"5685b23f", +2308 => x"7b80080c", +2309 => x"75800c8d", +2310 => x"3d0d04f6", +2311 => x"3d0d7d7f", +2312 => x"80dfdc08", +2313 => x"705b585a", +2314 => x"5a7580c1", +2315 => x"38777925", +2316 => x"b338c0ac", +2317 => x"3f800881", +2318 => x"ff06708d", +2319 => x"32703070", +2320 => x"9f2a5151", +2321 => x"5757768a", +2322 => x"2e80c438", +2323 => x"75802ebf", +2324 => x"38771a56", +2325 => x"76763476", +2326 => x"51c0aa3f", +2327 => x"81185878", +2328 => x"7824cf38", +2329 => x"77567580", +2330 => x"0c8c3d0d", +2331 => x"04785579", +2332 => x"547c5384", +2333 => x"528c3dfc", +2334 => x"0551ffbf", +2335 => x"c53f8008", +2336 => x"5684be3f", +2337 => x"7a80080c", +2338 => x"75800c8c", +2339 => x"3d0d0477", +2340 => x"1a598a79", +2341 => x"34811858", +2342 => x"8d51ffbf", +2343 => x"e83f8a51", +2344 => x"ffbfe23f", +2345 => x"7756ffbe", +2346 => x"39fb3d0d", +2347 => x"80dfdc08", +2348 => x"70565473", +2349 => x"88387480", +2350 => x"0c873d0d", +2351 => x"04775383", +2352 => x"52873dfc", +2353 => x"0551ffbe", +2354 => x"f93f8008", +2355 => x"5483f23f", +2356 => x"7580080c", +2357 => x"73800c87", +2358 => x"3d0d04fa", +2359 => x"3d0d80df", +2360 => x"dc08802e", +2361 => x"a3387a55", +2362 => x"79547853", +2363 => x"8652883d", +2364 => x"fc0551ff", +2365 => x"becc3f80", +2366 => x"085683c5", +2367 => x"3f768008", +2368 => x"0c75800c", +2369 => x"883d0d04", +2370 => x"83b73f9d", +2371 => x"0b80080c", +2372 => x"ff0b800c", +2373 => x"883d0d04", +2374 => x"f73d0d7b", +2375 => x"7d5b59bc", +2376 => x"53805279", +2377 => x"51f5fb3f", +2378 => x"80705657", +2379 => x"98567419", +2380 => x"70337078", +2381 => x"2b790781", +2382 => x"18f81a5a", +2383 => x"58595558", +2384 => x"847524ea", +2385 => x"38767a23", +2386 => x"84195880", +2387 => x"70565798", +2388 => x"56741870", +2389 => x"3370782b", +2390 => x"79078118", +2391 => x"f81a5a58", +2392 => x"59515484", +2393 => x"7524ea38", +2394 => x"76821b23", +2395 => x"88195880", +2396 => x"70565798", +2397 => x"56741870", +2398 => x"3370782b", +2399 => x"79078118", +2400 => x"f81a5a58", +2401 => x"59515484", +2402 => x"7524ea38", +2403 => x"76841b0c", +2404 => x"8c195880", +2405 => x"70565798", +2406 => x"56741870", +2407 => x"3370782b", +2408 => x"79078118", +2409 => x"f81a5a58", +2410 => x"59515484", +2411 => x"7524ea38", +2412 => x"76881b23", +2413 => x"90195880", +2414 => x"70565798", +2415 => x"56741870", +2416 => x"3370782b", +2417 => x"79078118", +2418 => x"f81a5a58", +2419 => x"59515484", +2420 => x"7524ea38", +2421 => x"768a1b23", +2422 => x"94195880", +2423 => x"70565798", +2424 => x"56741870", +2425 => x"3370782b", +2426 => x"79078118", +2427 => x"f81a5a58", +2428 => x"59515484", +2429 => x"7524ea38", +2430 => x"768c1b23", +2431 => x"98195880", +2432 => x"70565798", +2433 => x"56741870", +2434 => x"3370782b", +2435 => x"79078118", +2436 => x"f81a5a58", +2437 => x"59515484", +2438 => x"7524ea38", +2439 => x"768e1b23", +2440 => x"9c195880", +2441 => x"705657b8", +2442 => x"56741870", +2443 => x"3370782b", +2444 => x"79078118", +2445 => x"f81a5a58", +2446 => x"595a5488", +2447 => x"7524ea38", +2448 => x"76901b0c", +2449 => x"8b3d0d04", +2450 => x"e93d0d6a", +2451 => x"80dfdc08", +2452 => x"57577593", +2453 => x"3880c080", +2454 => x"0b84180c", +2455 => x"75ac180c", +2456 => x"75800c99", +2457 => x"3d0d0489", +2458 => x"3d70556a", +2459 => x"54558a52", +2460 => x"993dffbc", +2461 => x"0551ffbb", +2462 => x"c93f8008", +2463 => x"77537552", +2464 => x"56fd953f", +2465 => x"bc3f7780", +2466 => x"080c7580", +2467 => x"0c993d0d", +2468 => x"04fc3d0d", +2469 => x"815480df", +2470 => x"dc088838", +2471 => x"73800c86", +2472 => x"3d0d0476", +2473 => x"5397b952", +2474 => x"863dfc05", +2475 => x"51ffbb92", +2476 => x"3f800854", +2477 => x"8c3f7480", +2478 => x"080c7380", +2479 => x"0c863d0d", +2480 => x"0480cfec", +2481 => x"08800c04", +2482 => x"f73d0d7b", +2483 => x"80cfec08", +2484 => x"82c81108", +2485 => x"5a545a77", +2486 => x"802e80da", +2487 => x"38818818", +2488 => x"841908ff", +2489 => x"0581712b", +2490 => x"59555980", +2491 => x"742480ea", +2492 => x"38807424", +2493 => x"b5387382", +2494 => x"2b781188", +2495 => x"05565681", +2496 => x"80190877", +2497 => x"06537280", +2498 => x"2eb63878", +2499 => x"16700853", +2500 => x"53795174", +2501 => x"0853722d", +2502 => x"ff14fc17", +2503 => x"fc177981", +2504 => x"2c5a5757", +2505 => x"54738025", +2506 => x"d6387708", +2507 => x"5877ffad", +2508 => x"3880cfec", +2509 => x"0853bc13", +2510 => x"08a53879", +2511 => x"51f8e53f", +2512 => x"74085372", +2513 => x"2dff14fc", +2514 => x"17fc1779", +2515 => x"812c5a57", +2516 => x"57547380", +2517 => x"25ffa838", +2518 => x"d1398057", +2519 => x"ff933972", +2520 => x"51bc1308", +2521 => x"54732d79", +2522 => x"51f8b93f", +2523 => x"707080df", +2524 => x"b80bfc05", +2525 => x"70085252", +2526 => x"70ff2e91", +2527 => x"38702dfc", +2528 => x"12700852", +2529 => x"5270ff2e", +2530 => x"098106f1", +2531 => x"38505004", +2532 => x"04ffbaff", +2533 => x"3f040000", 2534 => x"00000040", 2535 => x"476f7420", 2536 => x"696e7465", -- cgit v1.1 From 03472db15fd0f12cb019bc9158cd6d43aa5fc725 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 8 May 2008 06:46:38 +0000 Subject: wip from jurij.kostasenko --- wip/.project | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 wip/.project diff --git a/wip/.project b/wip/.project new file mode 100644 index 0000000..d645e5b --- /dev/null +++ b/wip/.project @@ -0,0 +1,11 @@ + + + wip + + + + + + + + -- cgit v1.1 From e9b757cdba91ceb77523f5d9bb092b8c723fabbb Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 8 May 2008 07:32:52 +0000 Subject: Mike Frysinger found this file which is not needed. --- zpu/sw/simulator/gmon.out | Bin 120053 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 zpu/sw/simulator/gmon.out diff --git a/zpu/sw/simulator/gmon.out b/zpu/sw/simulator/gmon.out deleted file mode 100644 index c49b3d7..0000000 Binary files a/zpu/sw/simulator/gmon.out and /dev/null differ -- cgit v1.1 -- cgit v1.1 From 6647b91cf267e7e155c95c6adbcfbc43f083356b Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 17 Jun 2008 22:09:13 +0000 Subject: * io.vhd: fix address comparsion and added numerous outputs during simulation to make things a bit easier * zpu_config.vhd: do not use hardcoded startSp, allows more easily tinkering w/RAM size --- zpu/ChangeLog | 7 +++++++ zpu/hdl/example/zpu_config.vhd | 4 +++- zpu/hdl/zpu4/src/io.vhd | 35 ++++++++++++++++++++++------------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index e7bbb93..c5ab833 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,10 @@ +2008-05-06 Miguel Freitas + + * io.vhd: fix address comparsion and added numerous outputs + during simulation to make things a bit easier + * zpu_config.vhd: do not use hardcoded startSp, allows more easily + tinkering w/RAM size + 2008-05-06 Øyvind Harboe * Small ZPU now supports interrupts * added simulation example demonstrating interrupts diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd index a59ac8e..dc2b666 100644 --- a/zpu/hdl/example/zpu_config.vhd +++ b/zpu/hdl/example/zpu_config.vhd @@ -1,6 +1,7 @@ library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; package zpu_config is -- generate trace output @@ -16,5 +17,6 @@ package zpu_config is -- start byte address of stack. -- point to top of RAM - 2*words - constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := + conv_std_logic_vector((2**(maxAddrBitBRAM+1))/4-8, maxAddrBitIncIO+1); end zpu_config; diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd index 9e65929..f71f51d 100644 --- a/zpu/hdl/zpu4/src/io.vhd +++ b/zpu/hdl/zpu4/src/io.vhd @@ -37,6 +37,7 @@ signal timer_we : std_logic; signal serving : std_logic; file l_file : TEXT open write_mode is log_file; +constant lowAddrBits: std_logic_vector(minAddrBit-1 downto 0) := (others=>'0'); begin @@ -54,42 +55,50 @@ begin process(areset, clk) begin + taddr := (others => '0'); + taddr(maxAddrBit downto minAddrBit) := addr; + if (areset = '1') then -- timer_we <= '0'; elsif (clk'event and clk = '1') then -- timer_we <= '0'; if writeEnable = '1' then - -- external interface (fixed address) - -- extend compare to avoid waring messages - if ("000" & addr)=x"2028003" then + -- external interface (fixed address) + -- extend compare to avoid waring messages + if ("1" & addr & lowAddrBits)=x"80a000c" then + report "Write to UART[0]" & " :0x" & hstr(write); -- Write to UART -- report "" & character'image(conv_integer(memBint)) severity note; print(l_file, character'val(to_integer(unsigned(write)))); elsif addr(12)='1' then + report "Write to TIMER" & " :0x" & hstr(write); -- report "xxx" severity failure; -- timer_we <= '1'; else print(l_file, character'val(to_integer(unsigned(write)))); - -- report "Illegal IO write" severity warning; + report "Illegal IO write @" & "0x" & hstr(taddr) severity warning; end if; end if; read <= (others => '0'); if (readEnable = '1') then - -- extend compare to avoid waring messages - if ("000" & addr)=x"0001001" then - read <= (0=>'1', others => '0'); -- recieve empty + -- extend compare to avoid waring messages + if ("1" & addr & lowAddrBits)=x"80a000c" then + report "Read UART[0]"; + read(8) <= '0'; -- output fifo not full + read(9) <= '1'; -- receiver not empty + elsif ("1" & addr & lowAddrBits)=x"80a0010" then + report "Read UART[1]"; + read(8) <= '1'; -- receiver not empty + read(7 downto 0) <= (others => '0'); elsif addr(12)='1' then + report "Read TIMER"; read(7 downto 0) <= timer_read; elsif addr(11)='1' then + report "Read ZPU Freq"; read(7 downto 0) <= ZPU_Frequency; - -- extend compare to avoid waring messages - elsif ("000" & addr)=x"2028003" then - read <= (others => '0'); else - read <= (others => '0'); - read(8) <= '1'; - -- report "Illegal IO read" severity warning; + report "Illegal IO read @" & "0x" & hstr(taddr) severity warning; end if; end if; end if; -- cgit v1.1 From 0711a2b4fc2dec8bf65e5821095bed895976b83a Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 18 Jun 2008 09:22:21 +0000 Subject: * Various ZY2000 vhdl files of more general interest made available as part of the ZPU project under the same license(FreeBSD). Files should have headers updated. --- misc/ChangeLog | 5 + misc/arm7/src/arm7pkg.vhd | 31 + misc/arm7/src/arm7wb.vhd | 236 ++++++ misc/ddrsdram/simscripts/ddr_tb.do | 16 + misc/ddrsdram/simscripts/ddr_top.do | 104 +++ misc/ddrsdram/simsrc/ddr_tb.vhd | 301 ++++++++ misc/ddrsdram/src/ddr_pkg.vhd | 107 +++ misc/ddrsdram/src/ddr_top.vhd | 743 +++++++++++++++++++ misc/ddrsdram/src/mt46v16m16.vhd | 1320 +++++++++++++++++++++++++++++++++ misc/readme.txt | 20 + misc/wishbone/src/atomic32_access.vhd | 132 ++++ misc/wishbone/src/wishbone_pkg.vhd | 52 ++ 12 files changed, 3067 insertions(+) create mode 100644 misc/ChangeLog create mode 100644 misc/arm7/src/arm7pkg.vhd create mode 100644 misc/arm7/src/arm7wb.vhd create mode 100644 misc/ddrsdram/simscripts/ddr_tb.do create mode 100644 misc/ddrsdram/simscripts/ddr_top.do create mode 100644 misc/ddrsdram/simsrc/ddr_tb.vhd create mode 100644 misc/ddrsdram/src/ddr_pkg.vhd create mode 100644 misc/ddrsdram/src/ddr_top.vhd create mode 100644 misc/ddrsdram/src/mt46v16m16.vhd create mode 100644 misc/readme.txt create mode 100644 misc/wishbone/src/atomic32_access.vhd create mode 100644 misc/wishbone/src/wishbone_pkg.vhd diff --git a/misc/ChangeLog b/misc/ChangeLog new file mode 100644 index 0000000..3225839 --- /dev/null +++ b/misc/ChangeLog @@ -0,0 +1,5 @@ +2008-06-18 Øyvind Harboe + + * Various ZY2000 vhdl files of more general interest made + available as part of the ZPU project under the same + license(FreeBSD). Files should have headers updated. diff --git a/misc/arm7/src/arm7pkg.vhd b/misc/arm7/src/arm7pkg.vhd new file mode 100644 index 0000000..855fbdb --- /dev/null +++ b/misc/arm7/src/arm7pkg.vhd @@ -0,0 +1,31 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library work; +use work.wishbone_pkg.all; + +package arm7 is + + component arm7wb + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_a_p : in std_logic_vector(23 downto 1); + 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_wait_n_p : out std_logic; + + arm7_debug : out std_logic; + arm7_debug2 : out std_logic; + + wb_o : out wishbone_bus_in; + wb_i : in wishbone_bus_out); + end component; + +end arm7; + + \ No newline at end of file diff --git a/misc/arm7/src/arm7wb.vhd b/misc/arm7/src/arm7wb.vhd new file mode 100644 index 0000000..3366352 --- /dev/null +++ b/misc/arm7/src/arm7wb.vhd @@ -0,0 +1,236 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library work; +use work.phi_config.all; +use work.wishbone_pkg.all; + +entity arm7wb is + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_a_p : in std_logic_vector(23 downto 1); + 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_wait_n_p : out std_logic; + + arm7_debug : out std_logic; + arm7_debug2 : out std_logic; + + wb_o : out wishbone_bus_in; + wb_i : in wishbone_bus_out); +end arm7wb; + +architecture behave of arm7wb is + +type cpu_state_type is (cpu_idle, cpu_cs, cpu_end); + +-- Input simulated delay +signal cpu_wr_n_p_del : std_logic_vector(1 downto 0); +signal cpu_a_p_del : std_logic_vector(23 downto 1); +signal cpu_d_p_del : std_logic_vector(15 downto 0); +signal cpu_cs_n_p_del : std_logic_vector(3 downto 1); +signal cpu_oe_n_p_del : std_logic; + +-- Clock phase detect signals +signal cpu_clk_toggle : std_logic; +signal cpu_clk_smp1 : std_logic; +signal cpu_clk_smp2 : std_logic; +signal cpu_clk_phase : std_logic; + +-- Internal version of control signal (for feedback) +signal arm7_din_int : std_logic_vector(15 downto 0); +signal arm7_dout_int : std_logic_vector(15 downto 0); +signal arm7_a_int : std_logic_vector(23 downto 1); +signal arm7_we_int : std_logic_vector(1 downto 0); +signal cyc_int : std_logic; +signal we_int : std_logic; +signal adr_reg : std_logic_vector(25 downto 24); + +-- Input sampled +signal cpu_a_smp : std_logic_vector(23 downto 1); +signal cpu_d_smp : std_logic_vector(15 downto 0); +signal cpu_cs_n : std_logic_vector(3 downto 1); +signal cpu_oe_n : std_logic; +signal cpu_wr_n : std_logic_vector(1 downto 0); + +-- Main FSM +signal cpu_state : cpu_state_type; + +constant Clock_2_Out : time := 5.5 ns; +constant Input_Setup : time := 2.5 ns; + +begin + + arm7_dout_int <= wb_i.dat(15 downto 0) when (arm7_a_int(1) = '0') else wb_i.dat(31 downto 16); + arm7_debug <= cpu_oe_n; + arm7_debug2 <= cpu_wr_n(0); + + -- Generate 64 MBytes address based on 3 CS_N signals from CPU + -- Memory map FPGA internal + -- 0x00000000 DDR 32 MBytes (CS_N2 and CS_N3) + -- 0x00200000 FPGA/Ethernet (CS_N1) + wb_o.adr(31 downto 26) <= "000000"; + wb_o.adr(25 downto 24) <= adr_reg; + wb_o.adr(23 downto 1) <= arm7_a_int(23 downto 1); + wb_o.adr(0) <= '0'; + + wb_o.dat <= (x"0000" & arm7_din_int) when (arm7_a_int(1) = '0') else (arm7_din_int & x"0000"); + wb_o.sel <= ("00" & arm7_we_int) when (arm7_a_int(1) = '0') else (arm7_we_int & "00"); + + wb_o.cyc <= cyc_int; + wb_o.stb <= cyc_int; + wb_o.we <= cpu_oe_n; + + iotimingon: + if simulate_io_time generate + begin + cpu_wr_n_p_del <= transport "XX" after 0 ns, cpu_wr_n_p after Input_Setup; + cpu_a_p_del <= transport "XXXXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup; + cpu_d_p_del <= transport "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup; + cpu_cs_n_p_del <= transport "XXX" after 0 ns, cpu_cs_n_p after Input_Setup; + cpu_oe_n_p_del <= transport 'X' after 0 ns, cpu_oe_n_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cpu_wr_n_p_del <= cpu_wr_n_p; + cpu_a_p_del <= cpu_a_p; + cpu_d_p_del <= cpu_d_p; + cpu_cs_n_p_del <= cpu_cs_n_p; + cpu_oe_n_p_del <= cpu_oe_n_p; + end generate; + + process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase + begin + if areset = '1' then + cpu_clk_toggle <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_toggle <= not(cpu_clk_toggle); + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock + begin + if areset = '1' then + cpu_clk_smp1 <= '0'; + cpu_clk_smp2 <= '1'; + cpu_clk_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_smp1 <= cpu_clk_toggle; + cpu_clk_smp2 <= cpu_clk_smp1; + if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then + cpu_clk_phase <= '0'; + else + cpu_clk_phase <= not(cpu_clk_phase); + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- Sample input signals on 2x clock + begin + if areset = '1' then + cpu_d_smp <= "0000000000000000"; + cpu_cs_n <= "111"; + elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then + cpu_d_smp <= cpu_d_p_del; + cpu_cs_n <= cpu_cs_n_p_del; + end if; + end process; + + process(cpu_clk, areset) -- Sample input signals on 1x clock + begin + if areset = '1' then + cpu_a_smp <= "00000000000000000000000"; + cpu_oe_n <= '1'; + cpu_wr_n <= "11"; + elsif (cpu_clk = '1' and cpu_clk'event) then + cpu_a_smp <= cpu_a_p_del; + cpu_oe_n <= cpu_oe_n_p_del; + cpu_wr_n <= cpu_wr_n_p_del; + end if; + end process; + + arm7_din_int <= cpu_d_smp; + arm7_a_int <= cpu_a_smp; + arm7_we_int <= not(cpu_wr_n); + + process(cpu_clk, areset) + begin + if areset = '1' then + cpu_state <= cpu_idle; + cyc_int <= '0'; + we_int <= '0'; + adr_reg <= "00"; + cpu_d_p <= (others => 'Z'); + elsif (cpu_clk'event and cpu_clk = '1') then + + cyc_int <= '0'; + we_int <= '0'; + cpu_d_p <= (others => 'Z') after Clock_2_Out; + + + case cpu_state is + + when cpu_idle => + if cpu_oe_n = '1' then + we_int <= '1'; + end if; + if cpu_cs_n(1) = '0' then + cyc_int <= '1'; + adr_reg <= "10"; + cpu_state <= cpu_cs; + end if; + if cpu_cs_n(2) = '0' then + cyc_int <= '1'; + adr_reg <= "00"; + cpu_state <= cpu_cs; + end if; + if cpu_cs_n(3) = '0' then + cyc_int <= '1'; + adr_reg <= "01"; + cpu_state <= cpu_cs; + end if; + + when cpu_cs => + if cpu_oe_n = '0' then + cpu_d_p <= arm7_dout_int after Clock_2_Out; + if wb_i.ack = '1' then + cpu_state <= cpu_end; + else + cyc_int <= '1'; + end if; + else + if wb_i.ack = '0' then + cyc_int <= '1'; + we_int <= '1'; + else + cpu_state <= cpu_end; + end if; + end if; + + when others => + cpu_state <= cpu_idle; + + end case; + end if; + end process; + + process(cpu_clk_2x, areset) + begin + if areset = '1' then + cpu_wait_n_p <= '1'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_wait_n_p <= '1' after Clock_2_Out; + if (cpu_state = cpu_cs and wb_i.ack = '0') then + cpu_wait_n_p <= '0' after Clock_2_Out; + end if; + end if; + end process; + +end behave; diff --git a/misc/ddrsdram/simscripts/ddr_tb.do b/misc/ddrsdram/simscripts/ddr_tb.do new file mode 100644 index 0000000..1f643f1 --- /dev/null +++ b/misc/ddrsdram/simscripts/ddr_tb.do @@ -0,0 +1,16 @@ +vlib work +vcom -93 -explicit ../src/ddr_pkg.vhd +vcom -93 -explicit ../src/ddr_top.vhd +vcom -93 -explicit ../src/mt46v16m16.vhd +vcom -93 -explicit ../simsrc/ddr_tb.vhd +vsim -t 1ps ddr_tb +view wave +view signals +radix hex +add wave * +add wave sim:/ddr_tb/ddr_ctrl/* +force -freeze sim:/ddr_tb/areset 1 0 +run 10 ns +force -freeze sim:/ddr_tb/areset 0 0 +when sim:/ddr_tb/break_out stop +run 10 ms \ No newline at end of file diff --git a/misc/ddrsdram/simscripts/ddr_top.do b/misc/ddrsdram/simscripts/ddr_top.do new file mode 100644 index 0000000..141e164 --- /dev/null +++ b/misc/ddrsdram/simscripts/ddr_top.do @@ -0,0 +1,104 @@ +vlib work +vcom -93 -explicit ../src/ddr_pkg.vhd +vcom -93 -explicit ../src/ddr_top.vhd +vsim -t 1ps ddr_top +view wave +view signals +radix hex +# Add wave signals + +add wave -divider "System" +add wave sim:/ddr_top/areset +add wave sim:/ddr_top/cpu_clk +add wave sim:/ddr_top/cpu_clk_2x +add wave sim:/ddr_top/cpu_clk_4x +add wave sim:/ddr_top/ddr_in_clk +add wave sim:/ddr_top/ddr_in_clk_2x + +add wave -divider "Ctrl interface" +add wave sim:/ddr_top/cpu_clk +add wave sim:/ddr_top/ddr_data_read +add wave sim:/ddr_top/ddr_data_write +add wave sim:/ddr_top/ddr_req +add wave sim:/ddr_top/ddr_rd_wr_n +add wave sim:/ddr_top/ddr_req_len +add wave sim:/ddr_top/ddr_read_en +add wave sim:/ddr_top/ddr_write_en +add wave sim:/ddr_top/ddr_command +add wave sim:/ddr_top/ddr_command_we + +add wave -divider "DDR interface" +add wave sim:/ddr_top/sdr_clk_p +add wave sim:/ddr_top/sdr_clk_n_p +add wave sim:/ddr_top/cke_q_p +add wave sim:/ddr_top/cs_qn_p +add wave sim:/ddr_top/ras_qn_p +add wave sim:/ddr_top/cas_qn_p +add wave sim:/ddr_top/we_qn_p +add wave sim:/ddr_top/dm_q_p +add wave sim:/ddr_top/dqs_q_p +add wave sim:/ddr_top/ba_q_p +add wave sim:/ddr_top/sdr_a_p +add wave sim:/ddr_top/sdr_d_p + +add wave -divider "Internal signals" +add wave sim:/ddr_top/clk2_phase +add wave sim:/ddr_top/clk4_phase +add wave sim:/ddr_top/ddr_state +add wave sim:/ddr_top/sdr_oe_n +add wave sim:/ddr_top/sdr_smp +add wave sim:/ddr_top/sdr_d + + +# Add input signals +force -freeze sim:/ddr_top/cpu_clk_4x 1 0, 0 {1.875 ns} -r 3.75 ns +run 100 ps +force -freeze sim:/ddr_top/cpu_clk_2x 1 0, 0 {3.75 ns} -r 7.5 ns +run 100 ps +force -freeze sim:/ddr_top/cpu_clk 1 0, 0 {7.5 ns} -r 15 ns +force -freeze sim:/ddr_top/ddr_in_clk 1 2ns, 0 {5.75 ns} -r 7.5 ns +force -freeze sim:/ddr_top/ddr_in_clk_2x 0 0.125ns, 1 {2 ns} -r 3.75 ns + +force -freeze sim:/ddr_top/areset 1 0 +force -freeze sim:/ddr_top/ddr_command 0000 0 +force -freeze sim:/ddr_top/ddr_command_we 0 0 +force -freeze sim:/ddr_top/ddr_data_write 1234abcd 0 +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 0 0 + +# Start simulation +run 45 ns +force -freeze sim:/ddr_top/areset 0 0 +run 92 ns +# DDR Command +force -freeze sim:/ddr_top/ddr_command 000A 0 +force -freeze sim:/ddr_top/ddr_command_we 1 0 +run 15 ns +force -freeze sim:/ddr_top/ddr_command 0000 0 +force -freeze sim:/ddr_top/ddr_command_we 0 0 +run 90 ns +# DDR Read +force -freeze sim:/ddr_top/ddr_req 1 0 +force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 1 0 +force -freeze sim:/ddr_top/ddr_req_len 0 0 +run 15 ns +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 0 0 +run 150 ns +# DDR Write +force -freeze sim:/ddr_top/ddr_req 1 0 +force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 0 0 +run 15 ns +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 0 0 +run 180 ns + diff --git a/misc/ddrsdram/simsrc/ddr_tb.vhd b/misc/ddrsdram/simsrc/ddr_tb.vhd new file mode 100644 index 0000000..249dffb --- /dev/null +++ b/misc/ddrsdram/simsrc/ddr_tb.vhd @@ -0,0 +1,301 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library work; +use work.ddr.all; + +entity ddr_tb is + port ( areset : in std_logic; + break_out : out std_logic); +end ddr_tb; + +architecture behave of ddr_tb is + +signal cpu_clk : std_logic; +signal cpu_clk_2x : std_logic; +signal cpu_clk_4x : std_logic; +signal ddr_in_clk : std_logic; +signal ddr_in_clk_2x : std_logic; + +signal ddr_command : std_logic_vector(15 downto 0); +signal ddr_command_we : std_logic; + +signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM +signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM +signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address +signal ddr_req : std_logic; -- Request DDR SDRAM access +signal ddr_req_ack : std_logic; -- Request acknowledge +signal ddr_busy : std_logic; -- Request acknowledge +signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE +signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer +signal ddr_read_en : std_logic; -- Enable signal for read data +signal ddr_write_en : std_logic; -- Enable (read) signal for data write +signal refresh_en : std_logic; + +signal sdr_clk_p : std_logic; -- ddr_sdram_clock +signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock +signal cke_q_p : std_logic; -- clock enable +signal cs_qn_p : std_logic; -- /chip select +signal ras_qn_p : std_logic; -- /ras +signal cas_qn_p : std_logic; -- /cas +signal we_qn_p : std_logic; -- /write enable +signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00" +signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write +signal ba_q_p : std_logic_vector(1 downto 0); -- bank select +signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus +signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus + +constant min_time : time := 1.875 ns; + +begin + + clock1: + process + begin + loop + cpu_clk_4x <= '1'; + wait for min_time; + cpu_clk_4x <= '0'; + wait for min_time; + end loop; + end process; + + clock2: + process + begin + loop + cpu_clk_2x <= '1' after 100 ps; + wait until rising_edge(cpu_clk_4x); + cpu_clk_2x <= '0' after 100 ps; + wait until rising_edge(cpu_clk_4x); + end loop; + end process; + + clock3: + process + begin + loop + cpu_clk <= '1' after 100 ps; + wait until rising_edge(cpu_clk_2x); + cpu_clk <= '0' after 100 ps; + wait until rising_edge(cpu_clk_2x); + end loop; + end process; + + ddr_in_clk_2x <= cpu_clk_4x after 1 ns; + + clock4: + process + begin + loop + ddr_in_clk <= '0' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + ddr_in_clk <= '1' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + end loop; + end process; + + inputdata: + process + begin + -- Wait until global reset released + loop + ddr_command <= x"0000"; + ddr_command_we <= '0'; + ddr_data_write <= x"000000000"; + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + break_out <= '0'; + refresh_en <= '0'; + + wait until falling_edge(areset); + + -- DDR initialization sequence + -- Wait more than 200 us + wait for 201000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load extended mode register + -- Enable DLL + -- Normal drive strength + wait until rising_edge(cpu_clk); + ddr_command <= x"2000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0121"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Enable refresh + refresh_en <= '1'; + + -- Wait 30 us (minimum 2 autorefresh cycles) + wait for 30000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Deactivate Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0021"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 2 us (DLL stable) + wait for 2000 ns; + + -- Write data to DDR + wait until rising_edge(cpu_clk_2x); + ddr_data_write <= x"312345678"; + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_write_en); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + wait for 100 ns; + + -- Read data from DDR + wait until rising_edge(cpu_clk_2x); + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '1'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_req_ack); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + + + + wait for 100 ns; + break_out <= '1'; + wait for 100 ns; + + end loop; + + end process; + + ddr_ctrl: + ddr_top port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + + -- Command interface + ddr_command => ddr_command, + ddr_command_we => ddr_command_we, + refresh_en => refresh_en, + + -- Data interface signals + ddr_data_read => ddr_data_read, + ddr_data_write => ddr_data_write, + ddr_req_adr => ddr_req_adr, + ddr_req => ddr_req, + ddr_req_ack => ddr_req_ack, + ddr_busy => ddr_busy, + ddr_rd_wr_n => ddr_rd_wr_n, + ddr_req_len => ddr_req_len, + ddr_read_en => ddr_read_en, + ddr_write_en => ddr_write_en, + -- DDR SDRAM Signals + sdr_clk_p => sdr_clk_p, + sdr_clk_n_p => sdr_clk_n_p, + cke_q_p => cke_q_p, + cs_qn_p => cs_qn_p, + ras_qn_p => ras_qn_p, + cas_qn_p => cas_qn_p, + we_qn_p => we_qn_p, + dm_q_p => dm_q_p, + dqs_q_p => dqs_q_p, + ba_q_p => ba_q_p, + sdr_a_p => sdr_a_p, + sdr_d_p => sdr_d_p); + + myram: + MT46V16M16 generic map( + tCK => 7.500 ns, + tCH => 3.375 ns, -- 0.45*tCK + tCL => 3.375 ns, -- 0.45*tCK + tDH => 0.500 ns, + tDS => 0.500 ns, + tIH => 0.900 ns, + tIS => 0.900 ns, + tMRD => 15.000 ns, + tRAS => 40.000 ns, + tRAP => 20.000 ns, + tRC => 65.000 ns, + tRFC => 75.000 ns, + tRCD => 20.000 ns, + tRP => 20.000 ns, + tRRD => 15.000 ns, + tWR => 15.000 ns, + addr_bits => 13, + data_bits => 16, + cols_bits => 9) + port map( + Dq => sdr_d_p, + Dqs => dqs_q_p, + Addr => sdr_a_p, + Ba => ba_q_p, + Clk => sdr_clk_p, + Clk_n => sdr_clk_n_p, + Cke => cke_q_p, + Cs_n => cs_qn_p, + Ras_n => ras_qn_p, + Cas_n => cas_qn_p, + We_n => we_qn_p, + Dm => dm_q_p); + +end behave; diff --git a/misc/ddrsdram/src/ddr_pkg.vhd b/misc/ddrsdram/src/ddr_pkg.vhd new file mode 100644 index 0000000..0e41a88 --- /dev/null +++ b/misc/ddrsdram/src/ddr_pkg.vhd @@ -0,0 +1,107 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package ddr is + + function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector; + function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector; + + component ddr_top + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + 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; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- 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 + end component; + + component MT46V16M16 + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); + end component; + +end; + +package body ddr is + + function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector is + begin + return (org_sig(7 downto 0) & org_sig(15 downto 8) & org_sig(23 downto 16) & org_sig(31 downto 24)); + end function mirror_bus32; + + function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector is + begin + return (org_sig(0) & org_sig(1) & org_sig(2) & org_sig(3)); + end function mirror_bus4; + +end package body; + + \ No newline at end of file diff --git a/misc/ddrsdram/src/ddr_top.vhd b/misc/ddrsdram/src/ddr_top.vhd new file mode 100644 index 0000000..033e9f8 --- /dev/null +++ b/misc/ddrsdram/src/ddr_top.vhd @@ -0,0 +1,743 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.vcomponents.all; + +entity ddr_top is + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + 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; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- 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 +end ddr_top; + +architecture behave of ddr_top is + +attribute keep : string; + +type clk4_type is array(0 to 15) of std_logic_vector(1 downto 0); + +signal cpu_clk_tog : std_logic; +signal ddr_cmd : std_logic_vector(15 downto 0); +signal ddr_cmd_we_smp : std_logic; +signal new_command : std_logic; + +signal cpu_clk_2x_smp1 : std_logic; +signal cpu_clk_2x_smp2 : std_logic; +signal cpu_clk_4x_smp1 : std_logic; +signal cpu_clk_4x_smp2 : std_logic; + +signal clk2_phase : std_logic; +signal clk4_phase : std_logic_vector(3 downto 0); +signal clk4_phase_short : clk4_type; +attribute keep of clk4_phase_short:signal is "true"; + +signal ddr_clk_tog : std_logic; +signal ddr_clk_smp1 : std_logic; +signal ddr_clk_smp2 : std_logic; +signal ddr_clk_phase : std_logic; + +signal smp_req_adr : std_logic_vector(25 downto 1); +signal smp_req_type : std_logic; +signal smp_req_len : std_logic; +signal ddr_write_en_int : std_logic; +signal ddr_read_en_int : std_logic; + +signal dqs_q : std_logic_vector(1 downto 0); +signal dqs_oe_n : std_logic_vector(1 downto 0); +attribute keep of dqs_oe_n:signal is "true"; +signal cas_qn : std_logic; +signal ras_qn : std_logic; +signal we_qn : std_logic; +signal ba_q : std_logic_vector(1 downto 0); +signal sdr_clk : std_logic; +signal sdr_clk_n : std_logic; +signal sdr_a : std_logic_vector(12 downto 0); +signal sdr_d : std_logic_vector(15 downto 0); +signal sdr_smp : std_logic_vector(35 downto 0); +signal sdr_oe_n : std_logic_vector(15 downto 0); +attribute keep of sdr_oe_n:signal is "true"; +signal sdr_oe_ctrl : std_logic_vector(15 downto 0); +attribute keep of sdr_oe_ctrl:signal is "true"; +signal sdr_wr_msw : std_logic_vector(17 downto 0); +attribute keep of sdr_wr_msw:signal is "true"; +signal dm_q : std_logic_vector(1 downto 0); + +signal nowin_idle_dqs : std_logic_vector(1 downto 0); +signal nowin_wr_nop1_d : std_logic_vector(15 downto 0); +signal nowin_wr_nop1_dqs : std_logic_vector(1 downto 0); +signal nowin_wr_nop1_dm : std_logic_vector(1 downto 0); +signal nowin_wr_nop2_dqs : std_logic_vector(1 downto 0); +signal nowin_wr_nop3_d : std_logic_vector(15 downto 0); +signal nowin_wr_nop3_dqs : std_logic_vector(1 downto 0); +attribute keep of nowin_idle_dqs:signal is "true"; +attribute keep of nowin_wr_nop1_d:signal is "true"; +attribute keep of nowin_wr_nop1_dqs:signal is "true"; +attribute keep of nowin_wr_nop1_dm:signal is "true"; +attribute keep of nowin_wr_nop2_dqs:signal is "true"; +attribute keep of nowin_wr_nop3_d:signal is "true"; +attribute keep of nowin_wr_nop3_dqs:signal is "true"; + +signal cas_n_smp : std_logic; +signal ras_n_smp : std_logic; +signal we_n_smp : std_logic; +signal read_start_sig : std_logic; +signal sdr_d_in : std_logic_vector(15 downto 0); +signal read_time_cnt : std_logic_vector(1 downto 0); +signal read_input_en : std_logic; +signal read_input_en_del : std_logic; +signal ddr_data_read_int : std_logic_vector(31 downto 0); + +signal refresh_pend : std_logic; +signal refresh_end : std_logic; +signal refresh_cnt : std_logic_vector(9 downto 0); +signal refresh_wait_cnt : std_logic_vector(3 downto 0); +signal refresh_wait_end : std_logic; + +signal cas_qn_p_del : std_logic; +signal ras_qn_p_del : std_logic; +signal we_qn_p_del : std_logic; +signal sdr_d_p_del : std_logic_vector(15 downto 0); + +signal saved_row : std_logic_vector(26 downto 11); +signal operation : std_logic_vector(1 downto 0); + +signal ddr_req_adr_int : std_logic_vector(25 downto 1); + +type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1, + rd_nop2,rd_nop3,rd_nop4, rd_nop5,pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2, + wr_nop3, cmd, cpu_pre, refresh, refresh_wait); +signal ddr_state : state_type; + +constant Clk_to_Output : time := 2.2 ns; +constant Input_Setup : time := 2.5 ns; + +constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110"; + +begin + + iotimingon: + if simulate_io_time generate + begin + cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup; + ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup; + we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup; + sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cas_qn_p_del <= cas_qn_p; + ras_qn_p_del <= ras_qn_p; + we_qn_p_del <= we_qn_p; + sdr_d_p_del <= sdr_d_p; + end generate; + + ddr_write_en <= ddr_write_en_int; + ddr_read_en <= ddr_read_en_int; + ddr_data_read <= ddr_data_read_int; + + ddr_req_adr_int <= (ddr_req_adr(24 downto 10) & '0' & ddr_req_adr(9 downto 1)) when (simulate_io_time) else ddr_req_adr; + + process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order + begin -- to find phase relation with 2x and 4x clocks + if areset = '1' then + cpu_clk_tog <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_tog <= not(cpu_clk_tog); + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x + begin + if areset = '1' then + cpu_clk_2x_smp1 <= '0'; + cpu_clk_2x_smp2 <= '0'; + clk2_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_2x_smp1 <= cpu_clk_tog; + cpu_clk_2x_smp2 <= cpu_clk_2x_smp1; + if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then + clk2_phase <= '0'; + else + clk2_phase <= not(clk2_phase); + end if; + end if; + end process; + + process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x + begin + if areset = '1' then + cpu_clk_4x_smp1 <= '0'; + cpu_clk_4x_smp2 <= '0'; + clk4_phase <= "0000"; + clk4_phase_short(0) <= "00"; + clk4_phase_short(1) <= "00"; + clk4_phase_short(2) <= "00"; + clk4_phase_short(3) <= "00"; + clk4_phase_short(4) <= "00"; + clk4_phase_short(5) <= "00"; + clk4_phase_short(6) <= "00"; + clk4_phase_short(7) <= "00"; + clk4_phase_short(8) <= "00"; + clk4_phase_short(9) <= "00"; + clk4_phase_short(10) <= "00"; + clk4_phase_short(11) <= "00"; + clk4_phase_short(12) <= "00"; + clk4_phase_short(13) <= "00"; + clk4_phase_short(14) <= "00"; + clk4_phase_short(15) <= "00"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + cpu_clk_4x_smp1 <= cpu_clk_tog; + cpu_clk_4x_smp2 <= cpu_clk_4x_smp1; + for i in 0 to 15 loop + if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then + clk4_phase <= "0100"; + clk4_phase_short(i) <= "01"; + else + clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3)); + clk4_phase_short(i) <= clk4_phase_short(i)(0) & clk4_phase_short(i)(1); + end if; + end loop; + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_clk <= '0'; + sdr_clk_n <= '0'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + if clk4_phase_short(0)(0) = '1' then + sdr_clk <= '1'; + else + sdr_clk <= '0'; + end if; + if clk4_phase_short(0)(1) = '1' then + sdr_clk_n <= '1'; + else + sdr_clk_n <= '0'; + end if; + end if; + end process; + + cke_q_p <= '1' after Clk_to_Output; + cs_qn_p <= '0' after Clk_to_Output; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + ras_qn_p <= '1'; + cas_qn_p <= '1'; + we_qn_p <= '1'; + dqs_q_p <= "ZZ"; + sdr_a_p <= "0000000000000"; + ba_q_p <= "00"; + sdr_clk_p <= '0'; + sdr_clk_n_p <= '1'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + ras_qn_p <= transport ras_qn after Clk_to_Output; + cas_qn_p <= transport cas_qn after Clk_to_Output; + we_qn_p <= transport we_qn after Clk_to_Output; + if dqs_oe_n(0) = '0' then + dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output; + else + dqs_q_p(0) <= transport 'Z' after Clk_to_Output; + end if; + if dqs_oe_n(1) = '0' then + dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output; + else + dqs_q_p(1) <= transport 'Z' after Clk_to_Output; + end if; + sdr_a_p <= transport sdr_a after Clk_to_Output; + ba_q_p <= transport ba_q after Clk_to_Output; + sdr_clk_p <= transport sdr_clk after Clk_to_Output; + sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_state <= idle; + ras_qn <= '1'; + cas_qn <= '1'; + we_qn <= '1'; + smp_req_adr <= (others => '0'); + smp_req_type <= '0'; + smp_req_len <= '0'; + sdr_a <= "XXXXXXXXXXXXX"; + ba_q <= "00"; + ddr_busy <= '1'; + saved_row <= "1000000000000000"; + ddr_write_en_int <= '0'; + ddr_read_en_int <= '0'; + nowin_idle_dqs <= "11"; + nowin_wr_nop1_d <= "0000000000000000"; + nowin_wr_nop1_dqs <= "00"; + nowin_wr_nop1_dm <= "00"; + nowin_wr_nop2_dqs <= "00"; + nowin_wr_nop3_d <= "0000000000000000"; + nowin_wr_nop3_dqs <= "00"; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + -- Default values + ras_qn <= '1'; + cas_qn <= '1'; + we_qn <= '1'; + sdr_a <= "XXXXXXXXXXXXX"; + ddr_busy <= '1'; + ddr_write_en_int <= '0'; + ddr_read_en_int <= '0'; + + nowin_idle_dqs <= "00"; + nowin_wr_nop1_d <= "0000000000000000"; + nowin_wr_nop1_dqs <= "00"; + nowin_wr_nop1_dm <= "00"; + nowin_wr_nop2_dqs <= "00"; + nowin_wr_nop3_d <= "0000000000000000"; + nowin_wr_nop3_dqs <= "00"; + + case ddr_state is + when idle => + smp_req_adr <= ddr_req_adr_int; + smp_req_type <= ddr_rd_wr_n; + smp_req_len <= ddr_req_len; + ddr_busy <= '0'; + operation <= "00"; + if refresh_pend = '1' then + operation <= "01"; + ddr_state <= pre; + elsif new_command = '1' then + if ddr_cmd(15) = '1' then + operation <= "10"; + ddr_state <= cpu_pre; + else + ddr_state <= cmd; + end if; + elsif (ddr_req = '1' and ddr_req_adr_int(25 downto 11) = saved_row(25 downto 11) and saved_row(26) = '0') then + operation <= "11"; + ddr_write_en_int <= not(ddr_rd_wr_n); + ddr_state <= rd_wr; + elsif ddr_req = '1' then + operation <= "11"; + ddr_state <= pre; + else + ddr_state <= idle; + nowin_idle_dqs <= "11"; + end if; + when act => + sdr_a <= smp_req_adr(23 downto 11); + ba_q <= smp_req_adr(25 downto 24); + ras_qn <= '0'; + ddr_write_en_int <= not(smp_req_type); + ddr_state <= act_nop1; + when act_nop1 => + ddr_state <= act_nop2; + when act_nop2 => + ddr_state <= rd_wr; + when rd_wr => + sdr_a(10) <= '0'; -- Disable auto precharge + sdr_a(9 downto 0) <= smp_req_adr(10 downto 1); + ba_q <= smp_req_adr(25 downto 24); + saved_row <= '0' & smp_req_adr(25 downto 11); + cas_qn <= '0'; + we_qn <= smp_req_type; + if smp_req_type = '1' then + ddr_state <= rd_nop1; + else + ddr_state <= wr_nop1; + nowin_wr_nop1_d <= "1111111111111111"; + nowin_wr_nop1_dqs <= "11"; + nowin_wr_nop1_dm <= "11"; + end if; + when wr_nop1 => + ddr_state <= wr_nop2; + nowin_wr_nop2_dqs <= "11"; + when wr_nop2 => + ddr_state <= wr_nop3; + nowin_wr_nop3_d <= "1111111111111111"; + nowin_wr_nop3_dqs <= "11"; + when wr_nop3 => + nowin_idle_dqs <= "11"; + ddr_state <= idle; + when rd_nop1 => + ddr_state <= rd_nop2; + when rd_nop2 => + if operation /= "11" then + nowin_idle_dqs <= "11"; + ddr_state <= idle; + else + ddr_state <= rd_nop3; + end if; + when rd_nop3 => + ddr_state <= rd_nop4; + when rd_nop4 => + ddr_read_en_int <= '1'; + ddr_state <= rd_nop5; + when rd_nop5 => + nowin_idle_dqs <= "11"; + ddr_state <= idle; + when pre => + ras_qn <= '0'; + we_qn <= '0'; + sdr_a(10) <= '1'; -- Precharge all banks + ba_q <= smp_req_adr(25 downto 24); + ddr_state <= pre_nop1; + when pre_nop1 => + ddr_state <= pre_nop2; + when cmd => + cas_qn <= '0'; + ras_qn <= '0'; + we_qn <= '0'; + ba_q <= ddr_cmd(14 downto 13); + sdr_a <= ddr_cmd(12 downto 0); + nowin_idle_dqs <= "11"; + ddr_state <= idle; + when cpu_pre => + ddr_state <= pre; + when refresh => + cas_qn <= '0'; + ras_qn <= '0'; + saved_row(26) <= '1'; + ddr_state <= refresh_wait; + when refresh_wait => + if refresh_wait_end = '1' then + ddr_state <= pre_nop2; + end if; + when pre_nop2 => + if operation = "01" then + operation <= "10"; + ddr_state <= refresh; + elsif operation = "10" then + nowin_idle_dqs <= "11"; + ddr_state <= idle; + else + ddr_state <= act; + end if; + when others => + ddr_state <= idle; + nowin_idle_dqs <= "11"; + end case; + end if; + end process; + + process(cpu_clk, areset) -- + begin + if areset = '1' then + ddr_cmd <= "0000000000000000"; + elsif (cpu_clk'event and cpu_clk = '1') then + if ddr_command_we = '1' then + ddr_cmd <= ddr_command; + else + ddr_cmd <= ddr_cmd; + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_cmd_we_smp <= '0'; + new_command <= '0'; + sdr_smp <= "000000000000000000000000000000000000"; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + ddr_cmd_we_smp <= ddr_command_we; + if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then + new_command <= '1'; + elsif ddr_state = cmd or ddr_state = cpu_pre then + new_command <= '0'; + else + new_command <= new_command; + end if; + + if ddr_write_en_int = '1' then + sdr_smp <= ddr_data_write; + else + sdr_smp <= sdr_smp; + end if; + + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + dqs_q <= "00"; + dqs_oe_n <= "11"; + sdr_oe_ctrl <= "1111111111111111"; + sdr_wr_msw <= "000000000000000000"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + + for i in 0 to 15 loop + if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(0) = '1' then + sdr_oe_ctrl(i) <= '0'; + elsif nowin_wr_nop3_d(i) = '1' and clk4_phase_short(i)(0) = '1' then + sdr_oe_ctrl(i) <= '1'; + end if; + end loop; + + for i in 0 to 1 loop + if nowin_idle_dqs(i) = '1' or nowin_wr_nop3_dqs(i) = '1' then + dqs_oe_n(i) <= '1'; + elsif nowin_wr_nop1_dqs(i) = '1' then + dqs_oe_n(i) <= '0'; + end if; + end loop; + + for i in 0 to 1 loop + if (nowin_wr_nop2_dqs(i) = '1' and clk4_phase_short(i)(0) = '1') then + dqs_q(i) <= '1'; + else + dqs_q(i) <= '0'; + end if; + end loop; + + for i in 0 to 15 loop + if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(1) = '1' then + sdr_wr_msw(i) <= '1'; + else + sdr_wr_msw(i) <= '0'; + end if; + end loop; + + for i in 0 to 1 loop + if nowin_wr_nop1_dm(i) = '1' and clk4_phase_short(i)(1) = '1' then + sdr_wr_msw(i+16) <= '1'; + else + sdr_wr_msw(i+16) <= '0'; + end if; + end loop; + + end if; + end process; + + -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_d_p <= "ZZZZZZZZZZZZZZZZ"; + dm_q_p <= "11"; + sdr_oe_n <= "1111111111111111"; + sdr_d <= "0000000000000000"; + dm_q <= "11"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then + + for i in 0 to 15 loop + if sdr_oe_n(i) = '0' then + sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output; + else + sdr_d_p(i) <= transport 'Z' after Clk_to_Output; + end if; + end loop; + + dm_q_p <= transport dm_q after Clk_to_Output; + + for i in 0 to 15 loop + if sdr_oe_ctrl(i) = '0' then + sdr_oe_n(i) <= '0'; + else + sdr_oe_n(i) <= '1'; + end if; + end loop; + + for i in 0 to 15 loop + if sdr_wr_msw(i) = '1' then + sdr_d(i) <= sdr_smp(i); + else + sdr_d(i) <= sdr_smp(i+16); + end if; + end loop; + + for i in 0 to 1 loop + if sdr_wr_msw(i+16) = '1' then + dm_q(i) <= sdr_smp(i+32); + else + dm_q(i) <= sdr_smp(i+34); + end if; + end loop; + + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + refresh_cnt <= "0000000000"; + refresh_pend <= '0'; + refresh_end <= '0'; + refresh_wait_cnt <= "0000"; + refresh_wait_end <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + if refresh_cnt = Refresh_Interval then + refresh_end <= '1'; + else + refresh_end <= '0'; + end if; + + if refresh_end = '1' then + refresh_cnt <= "0000000000"; + else + refresh_cnt <= refresh_cnt + '1'; + end if; + + if refresh_end = '1' and refresh_en = '1' then + refresh_pend <= '1'; + elsif ddr_state = refresh then + refresh_pend <= '0'; + else + refresh_pend <= refresh_pend; + end if; + + if ddr_state = refresh_wait then + refresh_wait_cnt <= refresh_wait_cnt + '1'; + else + refresh_wait_cnt <= "0000"; + end if; + + if refresh_wait_cnt = "1011" then + refresh_wait_end <= '1'; + else + refresh_wait_end <= '0'; + end if; + + end if; + end process; + + -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING + + process(ddr_in_clk, areset) + begin + if areset = '1' then + ddr_clk_tog <= '0'; + elsif (ddr_in_clk'event and ddr_in_clk = '1') then + ddr_clk_tog <= not(ddr_clk_tog); + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_clk_smp1 <= '0'; + ddr_clk_smp2 <= '0'; + ddr_clk_phase <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + ddr_clk_smp1 <= ddr_clk_tog; + ddr_clk_smp2 <= ddr_clk_smp1; + if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then + ddr_clk_phase <= '0'; + else + ddr_clk_phase <= not(ddr_clk_phase); + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + cas_n_smp <= '0'; + ras_n_smp <= '0'; + we_n_smp <= '0'; + read_start_sig <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + cas_n_smp <= cas_qn_p_del; + ras_n_smp <= ras_qn_p_del; + we_n_smp <= we_qn_p_del; + if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then + read_start_sig <= '1'; + else + read_start_sig <= '0'; + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + sdr_d_in <= "0000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + sdr_d_in <= sdr_d_p_del; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + read_time_cnt <= "00"; + read_input_en <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + + if read_start_sig = '1' then + read_time_cnt <= "01"; + elsif read_time_cnt = "00" then + read_time_cnt <= read_time_cnt; + else + read_time_cnt <= read_time_cnt + '1'; + end if; + + if read_time_cnt = "11" then + read_input_en <= '1'; + else + read_input_en <= '0'; + end if; + + read_input_en_del <= read_input_en; + + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_data_read_int <= "00000000000000000000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + if read_input_en = '1' then + ddr_data_read_int(15 downto 0) <= sdr_d_in; + end if; + if read_input_en_del = '1' then + ddr_data_read_int(31 downto 16) <= sdr_d_in; + end if; + end if; + end process; + +end behave; + + diff --git a/misc/ddrsdram/src/mt46v16m16.vhd b/misc/ddrsdram/src/mt46v16m16.vhd new file mode 100644 index 0000000..6b89345 --- /dev/null +++ b/misc/ddrsdram/src/mt46v16m16.vhd @@ -0,0 +1,1320 @@ +----------------------------------------------------------------------------------------- +-- +-- File Name: MT46V16M16.VHD +-- Version: 2.1 +-- Date: January 14th, 2002 +-- Model: Behavioral +-- Simulator: NCDesktop - http://www.cadence.com +-- ModelSim PE - http://www.model.com +-- +-- Dependencies: None +-- +-- Author: Son P. Huynh +-- Email: sphuynh@micron.com +-- Phone: (208) 368-3825 +-- Company: Micron Technology, Inc. +-- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks) +-- +-- Description: Micron 256 Mb SDRAM DDR (Double Data Rate) +-- +-- Limitation: Doesn't model internal refresh counter +-- +-- Note: +-- +-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY +-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR +-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. +-- +-- Copyright (c) 1998 Micron Semiconductor Products, Inc. +-- All rights researved +-- +-- Rev Author Date Changes +-- --- ---------------------------- ---------- ------------------------------------- +-- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter +-- Micron Technology, Inc. +-- +-- 2.0 Son P. Huynh 11/08/2001 - Second release +-- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE +-- +----------------------------------------------------------------------------------------- + +LIBRARY IEEE; + USE IEEE.STD_LOGIC_1164.ALL; + USE IEEE.STD_LOGIC_UNSIGNED.ALL; + USE IEEE.STD_LOGIC_ARITH.ALL; + +ENTITY MT46V16M16 IS + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); +END MT46V16M16; + +ARCHITECTURE behave OF MT46V16M16 IS + -- Array for Read pipeline + TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Write pipeline + TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Auto Precharge + TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER; + + -- Array for Manual Precharge + TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Burst Terminate + TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Memory Access + TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + TYPE Array_ram_pntr IS ACCESS Array_ram_type; + TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr; + + -- Data pair + SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0); + SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0); + + -- Mode Register + SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + -- Command Decode Variables + SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0'; + SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; + + -- Burst Length Decode Variables + SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0'; + + -- Cas Latency Decode Variables + SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0'; + + -- Internal Control Signals + SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; + + -- System Clock + SIGNAL Sys_clk : STD_LOGIC := '0'; + + -- Dqs buffer + SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + +BEGIN + -- Strip the strength + Cs_in <= To_X01 (Cs_n); + Ras_in <= To_X01 (Ras_n); + Cas_in <= To_X01 (Cas_n); + We_in <= To_X01 (We_n); + + -- Commands Decode + Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; + Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; + Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); + Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1)); + Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1)); + Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); + Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; + Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); + + -- Burst Length Decode + Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); + Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); + Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + + -- CAS Latency Decode + Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4)); + Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); + Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4)); + + -- Dqs buffer + Dqs <= Dqs_out; + + -- + -- System Clock + -- + int_clk : PROCESS (Clk, Clk_n) + VARIABLE ClkZ, CkeZ : STD_LOGIC := '0'; + begin + IF Clk = '1' AND Clk_n = '0' THEN + ClkZ := '1'; + CkeZ := Cke; + ELSIF Clk = '0' AND Clk_n = '1' THEN + ClkZ := '0'; + END IF; + Sys_clk <= CkeZ AND ClkZ; + END PROCESS; + + -- + -- Main Process + -- + state_register : PROCESS + -- Precharge Variables + VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; + + -- Activate Variables + VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; + + -- Data IO variables + VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; + + -- Internal address mux variables + VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0); + VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + + -- DLL Reset variables + VARIABLE DLL_enable : STD_LOGIC := '0'; + VARIABLE DLL_reset : STD_LOGIC := '0'; + VARIABLE DLL_done : STD_LOGIC := '0'; + VARIABLE DLL_count : INTEGER := 0; + + -- Timing Check + VARIABLE MRD_chk : TIME := 0 ns; + VARIABLE RFC_chk : TIME := 0 ns; + VARIABLE RRD_chk : TIME := 0 ns; + VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; + VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns; + VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; + VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; + VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; + VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns; + + -- Read pipeline variables + VARIABLE Read_cmnd : Array_Read_cmnd; + VARIABLE Read_bank : Array_Read_bank; + VARIABLE Read_cols : Array_Read_cols; + + -- Write pipeline variables + VARIABLE Write_cmnd : Array_Write_cmnd; + VARIABLE Write_bank : Array_Write_bank; + VARIABLE Write_cols : Array_Write_cols; + + -- Auto Precharge variables + VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 ); + + -- Manual Precharge variables + VARIABLE A10_precharge : Array_A10_precharge; + VARIABLE Bank_precharge : Array_Bank_precharge; + VARIABLE Cmnd_precharge : Array_Cmnd_precharge; + + -- Burst Terminate variable + VARIABLE Cmnd_bst : Array_Cmnd_bst; + + -- Memory Banks + VARIABLE Bank0 : Array_ram_stor; + VARIABLE Bank1 : Array_ram_stor; + VARIABLE Bank2 : Array_ram_stor; + VARIABLE Bank3 : Array_ram_stor; + + -- Burst Counter + VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Internal Dqs initialize + VARIABLE Dqs_int : STD_LOGIC := '0'; + + -- Data buffer for DM Mask + VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + + -- + -- Initialize empty rows + -- + PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS + VARIABLE i, j : INTEGER := 0; + BEGIN + IF Bank = "00" THEN + IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty + Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank0 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "01" THEN + IF Bank1 (Row_index) = NULL THEN + Bank1 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank1 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "10" THEN + IF Bank2 (Row_index) = NULL THEN + Bank2 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank2 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "11" THEN + IF Bank3 (Row_index) = NULL THEN + Bank3 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank3 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + END IF; + END; + + -- + -- Burst Counter + -- + PROCEDURE Burst_decode IS + VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0'); + BEGIN + -- Advance burst counter + Burst_counter := Burst_counter + 1; + + -- Burst Type + IF Mode_reg (3) = '0' THEN + Cols_temp := Cols_addr + 1; + ELSIF Mode_reg (3) = '1' THEN + Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2); + Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1); + Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0); + END IF; + + -- Burst Length + IF Burst_length_2 = '1' THEN + Cols_addr (0) := Cols_temp (0); + ELSIF Burst_length_4 = '1' THEN + Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0); + ELSIF Burst_length_8 = '1' THEN + Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0); + ELSE + Cols_addr := Cols_temp; + END IF; + + -- Data counter + IF Burst_length_2 = '1' THEN + IF Burst_counter >= 2 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_4 = '1' THEN + IF Burst_counter >= 4 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_8 = '1' THEN + IF Burst_counter >= 8 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + END IF; + END; + + BEGIN + WAIT ON Sys_clk; + + -- + -- Manual Precharge Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- A10 Precharge Pipeline + A10_precharge(0) := A10_precharge(1); + A10_precharge(1) := A10_precharge(2); + A10_precharge(2) := A10_precharge(3); + A10_precharge(3) := A10_precharge(4); + A10_precharge(4) := A10_precharge(5); + A10_precharge(5) := A10_precharge(6); + A10_precharge(6) := A10_precharge(7); + A10_precharge(7) := A10_precharge(8); + A10_precharge(8) := '0'; + + -- Bank Precharge Pipeline + Bank_precharge(0) := Bank_precharge(1); + Bank_precharge(1) := Bank_precharge(2); + Bank_precharge(2) := Bank_precharge(3); + Bank_precharge(3) := Bank_precharge(4); + Bank_precharge(4) := Bank_precharge(5); + Bank_precharge(5) := Bank_precharge(6); + Bank_precharge(6) := Bank_precharge(7); + Bank_precharge(7) := Bank_precharge(8); + Bank_precharge(8) := "00"; + + -- Command Precharge Pipeline + Cmnd_precharge(0) := Cmnd_precharge(1); + Cmnd_precharge(1) := Cmnd_precharge(2); + Cmnd_precharge(2) := Cmnd_precharge(3); + Cmnd_precharge(3) := Cmnd_precharge(4); + Cmnd_precharge(4) := Cmnd_precharge(5); + Cmnd_precharge(5) := Cmnd_precharge(6); + Cmnd_precharge(6) := Cmnd_precharge(7); + Cmnd_precharge(7) := Cmnd_precharge(8); + Cmnd_precharge(8) := '0'; + + -- Terminate Read if same bank or all banks + IF ((Cmnd_precharge (0) = '1') AND + (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND + (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Burst Terminate Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Burst Terminate pipeline + Cmnd_bst (0) := Cmnd_bst (1); + Cmnd_bst (1) := Cmnd_bst (2); + Cmnd_bst (2) := Cmnd_bst (3); + Cmnd_bst (3) := Cmnd_bst (4); + Cmnd_bst (4) := Cmnd_bst (5); + Cmnd_bst (5) := Cmnd_bst (6); + Cmnd_bst (6) := Cmnd_bst (7); + Cmnd_bst (7) := Cmnd_bst (8); + Cmnd_bst (8) := '0'; + + -- Terminate current Read + IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Dq and Dqs Drivers + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Read Command Pipeline + Read_cmnd (0) := Read_cmnd (1); + Read_cmnd (1) := Read_cmnd (2); + Read_cmnd (2) := Read_cmnd (3); + Read_cmnd (3) := Read_cmnd (4); + Read_cmnd (4) := Read_cmnd (5); + Read_cmnd (5) := Read_cmnd (6); + Read_cmnd (6) := Read_cmnd (7); + Read_cmnd (7) := Read_cmnd (8); + Read_cmnd (8) := '0'; + + -- Read Bank Pipeline + Read_bank (0) := Read_bank (1); + Read_bank (1) := Read_bank (2); + Read_bank (2) := Read_bank (3); + Read_bank (3) := Read_bank (4); + Read_bank (4) := Read_bank (5); + Read_bank (5) := Read_bank (6); + Read_bank (6) := Read_bank (7); + Read_bank (7) := Read_bank (8); + Read_bank (8) := "00"; + + -- Read Column Pipeline + Read_cols (0) := Read_cols (1); + Read_cols (1) := Read_cols (2); + Read_cols (2) := Read_cols (3); + Read_cols (3) := Read_cols (4); + Read_cols (4) := Read_cols (5); + Read_cols (5) := Read_cols (6); + Read_cols (6) := Read_cols (7); + Read_cols (7) := Read_cols (8); + Read_cols (8) := (OTHERS => '0'); + + -- Initialize Read command + IF Read_cmnd (0) = '1' THEN + Data_out_enable := '1'; + Bank_addr := Read_bank (0); + Cols_addr := Read_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Toggle Dqs during Read command + IF Data_out_enable = '1' THEN + Dqs_int := '0'; + IF Dqs_out = "00" THEN + Dqs_out <= "11"; + ELSIF Dqs_out = "11" THEN + Dqs_out <= "00"; + ELSE + Dqs_out <= "00"; + END IF; + ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN + Dqs_out <= "ZZ"; + END IF; + + -- Initialize Dqs for Read command + IF Read_cmnd (2) = '1' THEN + IF Data_out_enable = '0' THEN + Dqs_int := '1'; + Dqs_out <= "00"; + END IF; + END IF; + + -- Read Latch + IF Data_out_enable = '1' THEN + -- Initialize Memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Output Data + CASE Bank_addr IS + WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Increase Burst Counter + Burst_decode; + ELSE + Dq <= (OTHERS => 'Z'); + END IF; + END IF; + + -- + -- Write FIFO and DM Mask Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Write command pipeline + Write_cmnd (0) := Write_cmnd (1); + Write_cmnd (1) := Write_cmnd (2); + Write_cmnd (2) := '0'; + + -- Write command pipeline + Write_bank (0) := Write_bank (1); + Write_bank (1) := Write_bank (2); + Write_bank (2) := "00"; + + -- Write column pipeline + Write_cols (0) := Write_cols (1); + Write_cols (1) := Write_cols (2); + Write_cols (2) := (OTHERS => '0'); + + -- Initialize Write command + IF Write_cmnd (0) = '1' THEN + Data_in_enable := '1'; + Bank_addr := Write_bank (0); + Cols_addr := Write_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Write data + IF Data_in_enable = '1' THEN + -- Initialize memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Write first data + IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (0) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0); + END IF; + IF Dm_pair (1) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- Write second data + IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (2) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16); + END IF; + IF Dm_pair (3) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- tWR start and tWTR check + IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN + CASE Bank_addr IS + WHEN "00" => WR_chk0 := NOW; + WHEN "01" => WR_chk1 := NOW; + WHEN "10" => WR_chk2 := NOW; + WHEN OTHERS => WR_chk3 := NOW; + END CASE; + + -- tWTR check + ASSERT (Read_enable = '0') + REPORT "tWTR violation during Read" + SEVERITY WARNING; + END IF; + END IF; + END IF; + + -- + -- Auto Precharge Calculation + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Precharge counter + IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN + Count_precharge (0) := Count_precharge (0) + 1; + END IF; + IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN + Count_precharge (1) := Count_precharge (1) + 1; + END IF; + IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN + Count_precharge (2) := Count_precharge (2) + 1; + END IF; + IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN + Count_precharge (3) := Count_precharge (3) + 1; + END IF; + + -- Read with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. BL/2 cycles after command + IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Read_precharge(0) := '0'; + END IF; + END IF; + IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Read_precharge(1) := '0'; + END IF; + END IF; + IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Read_precharge(2) := '0'; + END IF; + END IF; + IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Read_precharge(3) := '0'; + END IF; + END IF; + + -- Write with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. Two clock after last burst + -- Since tWR is time base, the model will compensate tRP + IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW - ((2 * tCK) - tWR); + Write_precharge(0) := '0'; + END IF; + END IF; + IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW - ((2 * tCK) - tWR); + Write_precharge(1) := '0'; + END IF; + END IF; + IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW - ((2 * tCK) - tWR); + Write_precharge(2) := '0'; + END IF; + END IF; + IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW - ((2 * tCK) - tWR); + Write_precharge(3) := '0'; + END IF; + END IF; + END IF; + + -- + -- DLL Counter + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + IF (DLL_Reset = '1' AND DLL_done = '0') THEN + DLL_count := DLL_count + 1; + IF (DLL_count >= 200) THEN + DLL_done := '1'; + END IF; + END IF; + END IF; + + -- + -- Control Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Auto Refresh + IF Aref_enable = '1' THEN + -- Auto Refresh to Auto Refresh + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Auto Refresh" + SEVERITY WARNING; + + -- Record current tRFC time + RFC_chk := NOW; + END IF; + + -- Extended Load Mode Register + IF Ext_mode_enable = '1' THEN + IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN + IF (Addr (0) = '0') THEN + DLL_enable := '1'; + ELSE + DLL_enable := '0'; + END IF; + END IF; + + -- Precharge to EMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Extended Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Extended Load Register" + SEVERITY WARNING; + + -- LMR/EMR to EMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Extended Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Load Mode Register + IF Mode_reg_enable = '1' THEN + -- Register mode + Mode_reg <= Addr; + + -- DLL Reset + IF (DLL_enable = '1' AND Addr (8) = '1') THEN + DLL_reset := '1'; + DLL_done := '0'; + DLL_count := 0; + ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN + ASSERT (FALSE) + REPORT "DLL is ENABLE: DLL RESET is require" + SEVERITY WARNING; + ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN + ASSERT (FALSE) + REPORT "DLL is DISABLE: DLL RESET will be ignored" + SEVERITY WARNING; + END IF; + + -- Precharge to LMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Load Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Load Mode Register" + SEVERITY WARNING; + + -- LMR/ELMR to LMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid Burst Length + ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2 + (Addr (2 DOWNTO 0) = "010") OR -- BL = 4 + (Addr (2 DOWNTO 0) = "011")) -- BL = 8 + REPORT "Invalid Burst Length during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid CAS Latency + ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0 + (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5 + REPORT "Invalid CAS Latency during Load Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Active Block (latch Bank and Row Address) + IF Active_enable = '1' THEN + -- Activate an OPEN bank can corrupt data + ASSERT ((Ba = "00" AND Act_b0 = '0') OR + (Ba = "01" AND Act_b1 = '0') OR + (Ba = "10" AND Act_b2 = '0') OR + (Ba = "11" AND Act_b3 = '0')) + REPORT "Bank is already activated - data can be corrupted" + SEVERITY WARNING; + + -- Activate Bank 0 + IF Ba = "00" AND Pc_b0 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk0 >= tRC) + REPORT "tRC violation during Activate Bank 0" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk0 >= tRP) + REPORT "tRP violation during Activate Bank 0" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b0 := '1'; + Pc_b0 := '0'; + B0_row_addr := Addr; + RC_chk0 := NOW; + RCD_chk0 := NOW; + RAS_chk0 := NOW; + RAP_chk0 := NOW; + END IF; + + -- Activate Bank 1 + IF Ba = "01" AND Pc_b1 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk1 >= tRC) + REPORT "tRC violation during Activate Bank 1" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk1 >= tRP) + REPORT "tRP violation during Activate Bank 1" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b1 := '1'; + Pc_b1 := '0'; + B1_row_addr := Addr; + RC_chk1 := NOW; + RCD_chk1 := NOW; + RAS_chk1 := NOW; + RAP_chk1 := NOW; + END IF; + + -- Activate Bank 2 + IF Ba = "10" AND Pc_b2 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk2 >= tRC) + REPORT "tRC violation during Activate Bank 2" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk2 >= tRP) + REPORT "tRP violation during Activate Bank 2" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b2 := '1'; + Pc_b2 := '0'; + B2_row_addr := Addr; + RC_chk2 := NOW; + RCD_chk2 := NOW; + RAS_chk2 := NOW; + RAP_chk2 := NOW; + END IF; + + -- Activate Bank 3 + IF Ba = "11" AND Pc_b3 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk3 >= tRC) + REPORT "tRC violation during Activate Bank 3" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk3 >= tRP) + REPORT "tRP violation during Activate Bank 3" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b3 := '1'; + Pc_b3 := '0'; + B3_row_addr := Addr; + RC_chk3 := NOW; + RCD_chk3 := NOW; + RAS_chk3 := NOW; + RAP_chk3 := NOW; + END IF; + + -- Activate Bank A to Activate Bank B + IF (Prev_bank /= Ba) THEN + ASSERT (NOW - RRD_chk >= tRRD) + REPORT "tRRD violation during Activate" + SEVERITY WARNING; + END IF; + + -- AutoRefresh to Activate + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Activate" + SEVERITY WARNING; + + -- Record Variables for Checking Violation + RRD_chk := NOW; + Prev_bank := Ba; + END IF; + + -- Precharge Block - Consider NOP if bank already precharged or in process of precharging + IF Prech_enable = '1' THEN + -- EMR or LMR to Precharge + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Precharge" + SEVERITY WARNING; + + -- Precharge Bank 0 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN + Act_b0 := '0'; + Pc_b0 := '1'; + RP_chk0 := NOW; + + -- Activate to Precharge bank 0 + ASSERT (NOW - RAS_chk0 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk0 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 1 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN + Act_b1 := '0'; + Pc_b1 := '1'; + RP_chk1 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk1 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk1 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 2 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN + Act_b2 := '0'; + Pc_b2 := '1'; + RP_chk2 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk2 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk2 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 3 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN + Act_b3 := '0'; + Pc_b3 := '1'; + RP_chk3 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk3 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk3 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Pipeline for READ + IF CAS_latency_15 = '1' THEN + A10_precharge (3) := Addr(10); + Bank_precharge (3) := Ba; + Cmnd_precharge (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + A10_precharge (4) := Addr(10); + Bank_precharge (4) := Ba; + Cmnd_precharge (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + A10_precharge (5) := Addr(10); + Bank_precharge (5) := Ba; + Cmnd_precharge (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + A10_precharge (6) := Addr(10); + Bank_precharge (6) := Ba; + Cmnd_precharge (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + A10_precharge (8) := Addr(10); + Bank_precharge (8) := Ba; + Cmnd_precharge (8) := '1'; + END IF; + END IF; + + -- Burst Terminate + IF Burst_term = '1' THEN + -- Pipeline for Read + IF CAS_latency_15 = '1' THEN + Cmnd_bst (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + Cmnd_bst (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + Cmnd_bst (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + Cmnd_bst (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + Cmnd_bst (8) := '1'; + END IF; + + -- Terminate Write + ASSERT (Data_in_enable = '0') + REPORT "It's illegal to Burst Terminate a Write" + SEVERITY WARNING; + + -- Terminate Read with Auto Precharge + ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND + Read_precharge (2) = '0' AND Read_precharge (3) = '0') + REPORT "It's illegal to Burst Terminate a Read with Auto Precharge" + SEVERITY WARNING; + END IF; + + -- Read Command + IF Read_enable = '1' THEN + -- CAS Latency Pipeline + IF Cas_latency_15 = '1' THEN + Read_cmnd (3) := '1'; + Read_bank (3) := Ba; + Read_cols (3) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_2 = '1' THEN + Read_cmnd (4) := '1'; + Read_bank (4) := Ba; + Read_cols (4) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_25 = '1' THEN + Read_cmnd (5) := '1'; + Read_bank (5) := Ba; + Read_cols (5) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_3 = '1' THEN + Read_cmnd (6) := '1'; + Read_bank (6) := Ba; + Read_cols (6) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_4 = '1' THEN + Read_cmnd (8) := '1'; + Read_bank (8) := Ba; + Read_cols (8) := Addr (8 DOWNTO 0); + END IF; + + -- Write to Read: Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Interrupting a Read with Auto Precharge (same bank only) + ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Read with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Read + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Read" + SEVERITY WARNING; + + -- Activate to Read without Auto Precharge + IF Addr (10) = '0' THEN + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Read" + SEVERITY WARNING; + END IF; + + -- Activate to Read with Auto Precharge + IF Addr (10) = '1' THEN + ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR + (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR + (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR + (Ba = "11" AND NOW - RAP_chk3 >= tRAP)) + REPORT "tRAP violation during Read" + SEVERITY WARNING; + END IF; + + -- Auto precharge + IF Addr (10) = '1' THEN + Read_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + + -- DLL Check + IF (DLL_reset = '1') THEN + ASSERT (DLL_done = '1') + REPORT "DLL RESET not complete" + SEVERITY WARNING; + END IF; + END IF; + + -- Write Command + IF Write_enable = '1' THEN + -- Pipeline for Write + Write_cmnd (2) := '1'; + Write_bank (2) := Ba; + Write_cols (2) := Addr (8 DOWNTO 0); + + -- Interrupting a Write with Auto Precharge (same bank only) + ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Write with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Write" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Write" + SEVERITY WARNING; + + -- Auto precharge + IF Addr (10) = '1' THEN + Write_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + END IF; + END IF; + END PROCESS; + + -- + -- Dqs Receiver + -- + dqs_rcvrs : PROCESS + VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0); + VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + BEGIN + WAIT ON Dqs; + -- Latch data at posedge Dqs + IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN + Dq_temp := Dq; + Dm_temp := Dm; + END IF; + -- Latch data at negedge Dqs + IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN + Dq_pair <= (Dq & Dq_temp); + Dm_pair <= (Dm & Dm_temp); + END IF; + END PROCESS; + + -- + -- Setup timing checks + -- + Setup_check : PROCESS + BEGIN + WAIT ON Sys_clk; + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIS) + REPORT "CKE Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIS) + REPORT "CS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIS) + REPORT "CAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIS) + REPORT "RAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIS) + REPORT "WE# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIS) + REPORT "ADDR Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIS) + REPORT "BA Setup time violation -- tIS" + SEVERITY WARNING; + END IF; + END PROCESS; + + -- + -- Hold timing checks + -- + Hold_check : PROCESS + BEGIN + WAIT ON Sys_clk'DELAYED (tIH); + IF Sys_clk'DELAYED (tIH) = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIH) + REPORT "CKE Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIH) + REPORT "CS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIH) + REPORT "CAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIH) + REPORT "RAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIH) + REPORT "WE# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIH) + REPORT "ADDR Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIH) + REPORT "BA Hold time violation -- tIH" + SEVERITY WARNING; + END IF; + END PROCESS; + +END behave; diff --git a/misc/readme.txt b/misc/readme.txt new file mode 100644 index 0000000..0ae1786 --- /dev/null +++ b/misc/readme.txt @@ -0,0 +1,20 @@ +These files are provided as is under a FreeBSD license. + +Patches most gratefully accepted to document this better. + +These are parts of the VHDL code that went into ZY2000 that +can be used on other FPGA brands and with other parts than +went into ZY2000. + +http://www.zylin.com/protoboard.htm + +The long term plan is to split out these from the ZPU project +into a DDR controller and ARM7 wishbone bridge +project on OpenCores.org and document them. + +Directories +=========== +arm7 - ARM7 wishbone interface +ddsdram - a generic ddr ram controller. Implemented for Xilinx + mt46v16m16 but +can be adapted to other FPGA brands and DRAM chips +wishbone - atomic 32 bit wishbone access inside FPGA and in ARM7 SW, over a 16 bit CPU databus \ No newline at end of file diff --git a/misc/wishbone/src/atomic32_access.vhd b/misc/wishbone/src/atomic32_access.vhd new file mode 100644 index 0000000..b062f98 --- /dev/null +++ b/misc/wishbone/src/atomic32_access.vhd @@ -0,0 +1,132 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +--use work.phi_config.all; +use work.wishbone_pkg.all; + +entity atomic32_access is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from CPU interface + wb_16_i : in wishbone_bus_in; + wb_16_o : out wishbone_bus_out; + + -- Wishbone to FPGA registers and ethernet core + wb_32_i : in wishbone_bus_out; + wb_32_o : out wishbone_bus_in); +end atomic32_access; + +architecture behave of atomic32_access is + +type eth_state_wr_type is (idle, lsb_msb, lsb, msb, write, ack, wait_st); +signal eth_state_wr : eth_state_wr_type; +type eth_state_rd_type is (idle, lsb_msb, lsb_read, lsb, wait_st2, msb); +signal eth_state_rd : eth_state_rd_type; +signal core_data : std_logic_vector(31 downto 0); +signal core_addr : std_logic_vector(31 downto 0); + +begin + process(cpu_clk, areset) + begin + if areset = '1' then + eth_state_wr <= idle; + eth_state_rd <= idle; + wb_32_o.stb <= '0'; + wb_32_o.cyc <= '0'; + wb_16_o.ack <= '0'; + core_data <= (others => '0'); + core_addr <= (others => '0'); + elsif (rising_edge(cpu_clk)) then + + case eth_state_wr is --write cycle + when idle => + if wb_16_i.cyc = '1' and wb_16_i.we = '1' then + eth_state_wr <= lsb_msb; + end if; + when lsb_msb => + if wb_16_i.adr(1) = '0' then + eth_state_wr <= lsb; + end if; + if wb_16_i.adr(1) = '1' then + eth_state_wr <= msb; + end if; + when lsb => + core_data(15 downto 0) <= wb_16_i.dat(15 downto 0); + wb_16_o.ack <= '1'; + eth_state_wr <= wait_st; + when msb => + core_data(31 downto 16) <= wb_16_i.dat(31 downto 16); + core_addr <= wb_16_i.adr(31 downto 2) & "00"; + eth_state_wr <= write; + when write => + wb_32_o.dat <= core_data; + wb_32_o.adr <= core_addr; + wb_32_o.sel <= "1111"; + wb_32_o.we <= '1'; + wb_32_o.stb <= '1'; + wb_32_o.cyc <= '1'; + eth_state_wr <= ack; + when ack => + if wb_32_i.ack = '1' then + wb_16_o.ack <= '1'; + eth_state_wr <= wait_st; + wb_32_o.stb <= '0'; + wb_32_o.cyc <= '0'; + wb_32_o.sel <= "0000"; + wb_32_o.we <= '0'; + end if; + when wait_st => + wb_16_o.ack <= '0'; + eth_state_wr <= idle; + when others => + eth_state_wr <= idle; + end case; + + case eth_state_rd is --read cycle + when idle => + if wb_16_i.cyc = '1' and wb_16_i.we = '0' then + core_addr <= wb_16_i.adr(31 downto 2) & "00"; + eth_state_rd <= lsb_msb; + end if; + when lsb_msb => + if wb_16_i.adr(1) = '0' then + wb_32_o.adr <= core_addr; + eth_state_rd <= lsb_read; + end if; + if wb_16_i.adr(1) = '1' then + wb_32_o.adr <= core_addr; + eth_state_rd <= msb; + end if; + when lsb_read => + wb_32_o.sel <= "1111"; + wb_32_o.we <= '0'; + wb_32_o.stb <= '1'; + wb_32_o.cyc <= '1'; + eth_state_rd <= lsb; + when lsb => + if wb_32_i.ack = '1' then + wb_32_o.sel <= "0000"; + wb_32_o.stb <= '0'; + wb_32_o.cyc <= '0'; + core_data <= wb_32_i.dat; + wb_16_o.dat <= x"0000" & wb_32_i.dat(15 downto 0); + wb_16_o.ack <= '1'; + eth_state_rd <= wait_st2; + end if; + when wait_st2 => + wb_16_o.ack <= '0'; + eth_state_rd <= idle; + when msb => + wb_16_o.ack <= '1'; + wb_16_o.dat <= core_data(31 downto 16) & x"0000"; + eth_state_rd <= wait_st2; + when others => + eth_state_rd <= idle; + end case; + end if; + end process; + +end behave; \ No newline at end of file diff --git a/misc/wishbone/src/wishbone_pkg.vhd b/misc/wishbone/src/wishbone_pkg.vhd new file mode 100644 index 0000000..c3b0d9b --- /dev/null +++ b/misc/wishbone/src/wishbone_pkg.vhd @@ -0,0 +1,52 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package wishbone_pkg is + + type wishbone_bus_in is record + adr : std_logic_vector(31 downto 0); + sel : std_logic_vector(3 downto 0); + we : std_logic; + dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we' + cyc : std_logic; + stb : std_logic; + end record; + + type wishbone_bus_out is record + dat : std_logic_vector(31 downto 0); + ack : std_logic; + end record; + + type wishbone_bus is record + insig : wishbone_bus_in; + outsig : wishbone_bus_out; + end record; + + component atomic32_access is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from CPU interface + wb_16_i : in wishbone_bus_in; + wb_16_o : out wishbone_bus_out; + -- Wishbone to FPGA registers and ethernet core + wb_32_i : in wishbone_bus_out; + wb_32_o : out wishbone_bus_in); + end component; + + component eth_access_corr is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from Wishbone MUX + eth_raw_o : out wishbone_bus_out; + eth_raw_i : in wishbone_bus_in; + + -- Wishbone ethernet core + eth_slave_i : in wishbone_bus_out; + eth_slave_o : out wishbone_bus_in); + end component; + + +end wishbone_pkg; -- cgit v1.1 From 8c213415fe0ddc1f9eae0b96e023eb89f89d1c47 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 18 Jun 2008 17:04:44 +0000 Subject: I'm also attaching another patch which removes unisim/roc dependency (it was used just to pulse the areset) and fixes paths for building the ghdl examples out of the box. I guess this is the easiest way to get zpu running on linux with minimum effort. You should check if the areset change doesn't break modelsim. It feels much simpler this way and seems to work the same, i might be missing something. --- zpu/ChangeLog | 15 +++++++++- zpu/hdl/example/sim_small_fpga_top.vhd | 10 +++---- zpu/hdl/example_ghdl/README | 42 ++++------------------------ zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh | 22 +++++++-------- zpu/hdl/example_ghdl/dmipstrace_ghdl.sh | 21 +++++++------- zpu/hdl/example_ghdl/ghdl_import.sh | 6 ++-- zpu/hdl/example_ghdl/ghdl_options.sh | 3 +- zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh | 21 +++++++------- zpu/hdl/example_medium/sim_fpga_top.vhd | 11 +++----- zpu/hdl/zpu4/src/io.vhd | 1 + 10 files changed, 63 insertions(+), 89 deletions(-) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index c5ab833..72c76c0 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,4 +1,17 @@ -2008-05-06 Miguel Freitas +2008-05-18 Miguel Freitas + + * +I'm also attaching another patch which removes unisim/roc dependency +(it was used just to pulse the areset) and fixes paths for building +the ghdl examples out of the box. I guess this is the easiest way to +get zpu running on linux with minimum effort. + +You should check if the areset change doesn't break modelsim. It feels +much simpler this way and seems to work the same, i might be missing +something. + + +2008-05-16 Miguel Freitas * io.vhd: fix address comparsion and added numerous outputs during simulation to make things a bit easier diff --git a/zpu/hdl/example/sim_small_fpga_top.vhd b/zpu/hdl/example/sim_small_fpga_top.vhd index 2a7a9f5..0727bea 100644 --- a/zpu/hdl/example/sim_small_fpga_top.vhd +++ b/zpu/hdl/example/sim_small_fpga_top.vhd @@ -23,8 +23,8 @@ use ieee.numeric_std.all; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. -library UNISIM; -use UNISIM.VComponents.all; +--library UNISIM; +--use UNISIM.VComponents.all; library work; use work.zpu_config.all; @@ -38,7 +38,7 @@ architecture behave of fpga_top is signal clk : std_logic; -signal areset : std_logic; +signal areset : std_logic := '1'; component zpu_io is @@ -97,9 +97,6 @@ signal interrupt : std_logic; signal break : std_logic; begin - poweronreset: roc port map (O => areset); - - zpu: zpu_core port map ( clk => clk , @@ -188,6 +185,7 @@ begin wait for 5 ns; clk <= '1'; wait for 5 ns; + areset <= '0'; end PROCESS clock; diff --git a/zpu/hdl/example_ghdl/README b/zpu/hdl/example_ghdl/README index c537284..a098c0c 100644 --- a/zpu/hdl/example_ghdl/README +++ b/zpu/hdl/example_ghdl/README @@ -4,46 +4,16 @@ the GHDL simulator. http://ghdl.free.fr/ Compiled by Arnim Laeuger, 17-Apr-2008. - - -Prerequisites -------------- - -The RTL source code references the ROC component from Xilinx' unisim -library. If not already done, you'll have to prepare this library containing -at least the roc entity and architecture objects. - -Decide where to store this library. This could be locally in this directory or -at some central place where it can be referenced from other projects. I'd -prefer the latter option. - - $ cd - -Prepare the sources for GHDL: - $ mkdir src - $ cd src - $ ghdl --chop /vhdl/src/unisims/* - $ cd .. - -Import the sources into the library: - $ mkdir unisim_v93 - $ ghdl -i --work=unisim --workdir=unisim_v93 --std=93 -fexplicit --no-vital-checks --ieee=synopsys src/* - -Compile the required component: - $ ghdl -m --syn-binding --work=unisim --workdir=unisim_v93 --std=93 -fexplicit --no-vital-checks --ieee=synopsys roc - $ rm roc - -> not required for library - -If you require more components from the unisim library for other projects, you -can repeat the compile step later on without running through the preparation -and import steps. - +Removed ROC/unisim dependency 16-Jun-2008. Compiling the example --------------------- -Edit ghdl_options.sh and point the variable UNISIM_DIR to the location of your -newly created unisim library. +Make all shell scripts executable: + $ chmod +x *.sh + +On Linux, convert files from DOS format: + $ dos2unix *.sh You need to import the project sources once by running $ ./ghdl_import.sh diff --git a/zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh b/zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh index 5e43b64..b3be1a6 100644 --- a/zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh +++ b/zpu/hdl/example_ghdl/dmipssmalltrace_ghdl.sh @@ -1,22 +1,20 @@ #!/bin/sh -UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" -IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work" MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" if test ! -e work; then echo "Building work library..." mkdir work - ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd - ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd - ghdl -i ${IMPORT_OPTIONS} txt_util.vhd - ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd - ghdl -i ${IMPORT_OPTIONS} zpu_core_small.vhd - ghdl -i ${IMPORT_OPTIONS} bram_dmips.vhd - ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd - ghdl -i ${IMPORT_OPTIONS} timer.vhd - ghdl -i ${IMPORT_OPTIONS} io.vhd - ghdl -i ${IMPORT_OPTIONS} trace.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/zpu_config.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/sim_small_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpu_core_small.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/bram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/timer.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/io.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/trace.vhd fi echo "Compiling design..." diff --git a/zpu/hdl/example_ghdl/dmipstrace_ghdl.sh b/zpu/hdl/example_ghdl/dmipstrace_ghdl.sh index 3be392f..53474d4 100644 --- a/zpu/hdl/example_ghdl/dmipstrace_ghdl.sh +++ b/zpu/hdl/example_ghdl/dmipstrace_ghdl.sh @@ -1,21 +1,20 @@ #!/bin/sh -UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" -IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work" MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" if test ! -e work; then echo "Building work library..." mkdir work - ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd - ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd - ghdl -i ${IMPORT_OPTIONS} txt_util.vhd - ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd - ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd - ghdl -i ${IMPORT_OPTIONS} dram_dmips.vhd - ghdl -i ${IMPORT_OPTIONS} timer.vhd - ghdl -i ${IMPORT_OPTIONS} io.vhd - ghdl -i ${IMPORT_OPTIONS} trace.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example_medium/zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example_medium/sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpu_core.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example_medium/dram_dmips.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/timer.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/io.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/trace.vhd fi echo "Compiling design..." diff --git a/zpu/hdl/example_ghdl/ghdl_import.sh b/zpu/hdl/example_ghdl/ghdl_import.sh index 299134b..a0ae61c 100644 --- a/zpu/hdl/example_ghdl/ghdl_import.sh +++ b/zpu/hdl/example_ghdl/ghdl_import.sh @@ -3,11 +3,11 @@ mkdir -p work ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/zpu_config.vhd -ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/zpupkg.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpupkg.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/helloworld.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/txt_util.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/trace.vhd -ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/zpu_core_small.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpu_core_small.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/io.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/timer.vhd -ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/sim_small_fpga_top.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/sim_small_fpga_top.vhd diff --git a/zpu/hdl/example_ghdl/ghdl_options.sh b/zpu/hdl/example_ghdl/ghdl_options.sh index 3883ee7..aba231c 100644 --- a/zpu/hdl/example_ghdl/ghdl_options.sh +++ b/zpu/hdl/example_ghdl/ghdl_options.sh @@ -1,3 +1,2 @@ -UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" -IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work" MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" diff --git a/zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh b/zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh index 7a7f3df..8ba5078 100644 --- a/zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh +++ b/zpu/hdl/example_ghdl/simzpu_medium_ghdl.sh @@ -1,21 +1,20 @@ #!/bin/sh -UNISIM_DIR="'location of GHDL objects for unisim library'/unisim_v93" -IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work -P${UNISIM_DIR}" +IMPORT_OPTIONS="--std=93 --ieee=synopsys --workdir=work" MAKE_OPTIONS="${IMPORT_OPTIONS} -Wl,-s -fexplicit --syn-binding" if test ! -e work; then echo "Building work library..." mkdir work - ghdl -i ${IMPORT_OPTIONS} zpu_config_trace.vhd - ghdl -i ${IMPORT_OPTIONS} zpupkg.vhd - ghdl -i ${IMPORT_OPTIONS} txt_util.vhd - ghdl -i ${IMPORT_OPTIONS} sim_fpga_top.vhd - ghdl -i ${IMPORT_OPTIONS} zpu_core.vhd - ghdl -i ${IMPORT_OPTIONS} dram_hello.vhd - ghdl -i ${IMPORT_OPTIONS} timer.vhd - ghdl -i ${IMPORT_OPTIONS} io.vhd - ghdl -i ${IMPORT_OPTIONS} trace.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example_medium/zpu_config_trace.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpupkg.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/txt_util.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example_medium/sim_fpga_top.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpu_core.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/example_medium/dram_hello.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/timer.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/io.vhd + ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/trace.vhd fi echo "Compiling design..." diff --git a/zpu/hdl/example_medium/sim_fpga_top.vhd b/zpu/hdl/example_medium/sim_fpga_top.vhd index 29151af..2191889 100644 --- a/zpu/hdl/example_medium/sim_fpga_top.vhd +++ b/zpu/hdl/example_medium/sim_fpga_top.vhd @@ -22,8 +22,8 @@ use IEEE.STD_LOGIC_1164.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. -library UNISIM; -use UNISIM.VComponents.all; +--library UNISIM; +--use UNISIM.VComponents.all; library work; use work.zpu_config.all; @@ -38,7 +38,7 @@ architecture behave of fpga_top is signal clk : std_logic; -signal areset : std_logic; +signal areset : std_logic := '1'; component zpu_io is @@ -94,10 +94,6 @@ 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, @@ -182,6 +178,7 @@ begin wait for 5 ns; clk <= '1'; wait for 5 ns; + areset <= '0'; end PROCESS clock; diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd index f71f51d..e2576e2 100644 --- a/zpu/hdl/zpu4/src/io.vhd +++ b/zpu/hdl/zpu4/src/io.vhd @@ -54,6 +54,7 @@ begin timer_we <= writeEnable and addr(12); process(areset, clk) + variable taddr : std_logic_vector(maxAddrBit downto 0); begin taddr := (others => '0'); taddr(maxAddrBit downto minAddrBit) := addr; -- cgit v1.1 From 24d353cdac17eca4851271c824f421e8ab5697f3 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 18 Jun 2008 17:21:36 +0000 Subject: take 2 --- zpu/hdl/zpu4/src/io.vhd | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd index e2576e2..a0e494a 100644 --- a/zpu/hdl/zpu4/src/io.vhd +++ b/zpu/hdl/zpu4/src/io.vhd @@ -38,6 +38,8 @@ signal serving : std_logic; file l_file : TEXT open write_mode is log_file; constant lowAddrBits: std_logic_vector(minAddrBit-1 downto 0) := (others=>'0'); +constant tx_full: std_logic := '0'; +constant rx_empty: std_logic := '1'; begin @@ -86,11 +88,11 @@ begin -- extend compare to avoid waring messages if ("1" & addr & lowAddrBits)=x"80a000c" then report "Read UART[0]"; - read(8) <= '0'; -- output fifo not full - read(9) <= '1'; -- receiver not empty + read(8) <= not tx_full; -- output fifo not full + read(9) <= not rx_empty; -- receiver not empty elsif ("1" & addr & lowAddrBits)=x"80a0010" then report "Read UART[1]"; - read(8) <= '1'; -- receiver not empty + read(8) <= not rx_empty; -- receiver not empty read(7 downto 0) <= (others => '0'); elsif addr(12)='1' then report "Read TIMER"; -- cgit v1.1 From f7c21b8d9c790fb8f59db5030e2b8f1a9fc96246 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 18 Jun 2008 18:20:36 +0000 Subject: Miguel Freitas log.txt and trace.txt currently on cvs were produced by interrupt.vhd. this patch will build example_ghdl with interrupt.vhd by default so user can compare results. adds a note about what user needs to edit to simulate helloworld.vhd without interrupts. --- zpu/hdl/example/sim_small_fpga_top.vhd | 2 +- zpu/hdl/example_ghdl/ghdl_import.sh | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/zpu/hdl/example/sim_small_fpga_top.vhd b/zpu/hdl/example/sim_small_fpga_top.vhd index 0727bea..72b2d7b 100644 --- a/zpu/hdl/example/sim_small_fpga_top.vhd +++ b/zpu/hdl/example/sim_small_fpga_top.vhd @@ -159,7 +159,7 @@ begin io_reading <= '0'; dram_ready <= '0'; - interruptcounter <= to_unsigned(32, 16); + interruptcounter <= to_unsigned(0, 16); interrupt <= '0'; elsif (clk'event and clk = '1') then diff --git a/zpu/hdl/example_ghdl/ghdl_import.sh b/zpu/hdl/example_ghdl/ghdl_import.sh index a0ae61c..b1c2713 100644 --- a/zpu/hdl/example_ghdl/ghdl_import.sh +++ b/zpu/hdl/example_ghdl/ghdl_import.sh @@ -4,7 +4,10 @@ mkdir -p work ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/zpu_config.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpupkg.vhd -ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/helloworld.vhd +ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/interrupt.vhd +# to execute helloworld comment interrupt.vhd above +# and edit sim_small_fpga_top.vhd to never assert interrupts +#ghdl -i ${IMPORT_OPTIONS} ../../hdl/example/helloworld.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/txt_util.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/src/trace.vhd ghdl -i ${IMPORT_OPTIONS} ../../hdl/zpu4/core/zpu_core_small.vhd -- cgit v1.1 From eeff43d65567e8f0fa8634081682f0d92cee3cee Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 18 Jun 2008 19:15:46 +0000 Subject: * zpu_config.vhd: Fixed startSp calculation (address in bytes not words) --- zpu/ChangeLog | 23 +++++++---------------- zpu/hdl/example/zpu_config.vhd | 2 +- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 72c76c0..e489bda 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,23 +1,14 @@ -2008-05-18 Miguel Freitas - - * -I'm also attaching another patch which removes unisim/roc dependency -(it was used just to pulse the areset) and fixes paths for building -the ghdl examples out of the box. I guess this is the easiest way to -get zpu running on linux with minimum effort. - -You should check if the areset change doesn't break modelsim. It feels -much simpler this way and seems to work the same, i might be missing -something. - - -2008-05-16 Miguel Freitas - +2008-06-18 Miguel Freitas + * zpu_config.vhd: Fixed startSp calculation (address in bytes not words) +2008-06-18 Miguel Freitas + * Removed unisim/roc dependency (it was used just to pulse the areset) + and fixes paths for building the ghdl examples out of the box. + One should check if the areset change doesn't break modelsim. +2008-06-16 Miguel Freitas * io.vhd: fix address comparsion and added numerous outputs during simulation to make things a bit easier * zpu_config.vhd: do not use hardcoded startSp, allows more easily tinkering w/RAM size - 2008-05-06 Øyvind Harboe * Small ZPU now supports interrupts * added simulation example demonstrating interrupts diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd index dc2b666..63f6fb9 100644 --- a/zpu/hdl/example/zpu_config.vhd +++ b/zpu/hdl/example/zpu_config.vhd @@ -18,5 +18,5 @@ package zpu_config is -- start byte address of stack. -- point to top of RAM - 2*words constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := - conv_std_logic_vector((2**(maxAddrBitBRAM+1))/4-8, maxAddrBitIncIO+1); + conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); end zpu_config; -- cgit v1.1 From f3395f8b23ef4054d7a569b4bcf16ee651833d2a Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 25 Jun 2008 06:09:31 +0000 Subject: * do not enable interrupts for simzpu_small.do. hello world does not have an interrupt handler, so this caused a BREAK instruction to be executed. --- zpu/ChangeLog | 4 + zpu/hdl/example/sim_small_fpga_top_noint.vhd | 178 +++++++++++++++++++++++++++ zpu/hdl/example/simzpu_small.do | 2 +- 3 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 zpu/hdl/example/sim_small_fpga_top_noint.vhd diff --git a/zpu/ChangeLog b/zpu/ChangeLog index e489bda..c48b9c8 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,7 @@ +2008-06-25 Øyvind Harboe + * do not enable interrupts for simzpu_small.do. hello world + does not have an interrupt handler, so this caused a BREAK + instruction to be executed. 2008-06-18 Miguel Freitas * zpu_config.vhd: Fixed startSp calculation (address in bytes not words) 2008-06-18 Miguel Freitas diff --git a/zpu/hdl/example/sim_small_fpga_top_noint.vhd b/zpu/hdl/example/sim_small_fpga_top_noint.vhd new file mode 100644 index 0000000..86f9a8b --- /dev/null +++ b/zpu/hdl/example/sim_small_fpga_top_noint.vhd @@ -0,0 +1,178 @@ +-------------------------------------------------------------------------------- +-- 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.numeric_std.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 := '1'; + + +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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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 + + 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); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + 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; + + + + -- 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 <= 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; + areset <= '0'; + end PROCESS clock; + + +end behave; diff --git a/zpu/hdl/example/simzpu_small.do b/zpu/hdl/example/simzpu_small.do index 12d231b..2b64926 100644 --- a/zpu/hdl/example/simzpu_small.do +++ b/zpu/hdl/example/simzpu_small.do @@ -10,7 +10,7 @@ vlib work vcom -93 -explicit zpu_config.vhd vcom -93 -explicit ../zpu4/core/zpupkg.vhd vcom -93 -explicit ../zpu4/src/txt_util.vhd -vcom -93 -explicit sim_small_fpga_top.vhd +vcom -93 -explicit sim_small_fpga_top_noint.vhd vcom -93 -explicit ../zpu4/core/zpu_core_small.vhd vcom -93 -explicit helloworld.vhd vcom -93 -explicit ../zpu4/src/timer.vhd -- cgit v1.1 From 9d42abb28b464b9ae636540e5ff69994f21cdbf3 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 7 Aug 2008 11:19:42 +0000 Subject: added basic docs on emulated instructions. --- zpu/docs/zpu_arch.html | 431 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 427 insertions(+), 4 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 021e987..3597e82 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -358,7 +358,7 @@ end if 0000 1011 - No operation + No operation, clears IDIM flag as side effect Fix! @@ -366,18 +366,441 @@ end if - Fix! add emulated instructions! Listed in zpupkg.vhd + PUSHSPADD - 001x xxxx + 61 + + + a=sp;
        + b=popIntStack()*4;
        + pushIntStack(a+b);
        + + + Fix! + + + + + + POPPCREL + + + 57 + + + setPc(popIntStack()+getPc()); + + + Fix! + + + + + SUB + + + 49 + + + int a=popIntStack();
        + int b=popIntStack();
        + pushIntStack(b-a);
        + + + Fix! + + + + + XOR + + + 50 + + +pushIntStack(popIntStack() ^ popIntStack()); + + + Fix! + + + + + LOADB + + + 51 + + + pushIntStack(cpuReadByte(popIntStack())&0xff); + + + Fix! + + + + + STOREB + + + 52 + + + addr = popIntStack();
        + val = popIntStack();
        + cpuWriteByte(addr, val); + + + Fix! + + + + + LOADH + + + 34 + + + pushIntStack(cpuReadWord(popIntStack())); + + + Fix! + + + + + STOREH + + + 35 + + +addr = popIntStack();
        + val = popIntStack();
        + cpuWriteWord(addr, val); + + + Fix! + + + + + LESSTHAN + + + 36 + + + Signed comparison
        + a = popIntStack();
        + b = popIntStack();
        + pushIntStack((a < b) ? 1 : 0);
        + + + Fix! + + + + + LESSTHANOREQUAL + + + 37 + + + Signed comparison
        + a = popIntStack();
        + b = popIntStack();
        + pushIntStack((a <= b) ? 1 : 0); + + + Fix! + + + + + ULESSTHAN + + + 37 + + + Unsigned comparison
        + long a;//long is here 64 bit signed integer
        + long b;
        + a = ((long) popIntStack()) & INTMASK; // INTMASK is unsigned 0x00000000ffffffff
        + b = ((long) popIntStack()) & INTMASK;
        + pushIntStack((a < b) ? 1 : 0); + + + Fix! + + + + + ULESSTHANOREQUAL + + + 39 - Fix!! + Unsigned comparison
        + long a;//long is here 64 bit signed integer
        + long b;
        + a = ((long) popIntStack()) & INTMASK; // INTMASK is unsigned 0x00000000ffffffff
        + b = ((long) popIntStack()) & INTMASK;
        + pushIntStack((a <= b) ? 1 : 0); Fix! + + + EQBRANCH + + + 55 + + + int compare;
        + int target;
        + target = popIntStack() + pc;
        + compare = popIntStack();
        + if (compare == 0)
        + {
        + setPc(target);
        + } else
        + {
        + setPc(pc + 1);
        + } + + + Fix! + + + + + NEQBRANCH + + + 56 + + + int compare;
        + int target;
        + target = popIntStack() + pc;
        + compare = popIntStack();
        + if (compare != 0)
        + {
        + setPc(target);
        + } else
        + {
        + setPc(pc + 1);
        + }
        + + + Fix! + + + + + MULT + + + 41 + + + Signed 32 bit multiply
        + pushIntStack(popIntStack() * popIntStack()); + + + Fix! + + + + + DIV + + + 53 + + + Signed 32 bit integer divide.
        + a = popIntStack();
        + b = popIntStack();
        + if (b == 0)
        + {
        + // undefined
        + } + pushIntStack(a / b);
        + + + Fix! + + + + + MOD + + + 54 + + + Signed 32 bit integer modulo.
        + a = popIntStack();
        + b = popIntStack();
        + if (b == 0)
        + {
        + // undefined
        + }
        + pushIntStack(a % b);
        + + + Fix! + + + + + LSHIFTRIGHT + + + 42 + + + unsigned shift right.
        + long shift;
        + long valX;
        + int t;
        + shift = ((long) popIntStack()) & INTMASK;
        + valX = ((long) popIntStack()) & INTMASK;
        + t = (int) (valX >> (shift & 0x3f));
        + pushIntStack(t);
        + + + Fix! + + + + + ASHIFTLEFT + + + 43 + + + arithmetic(signed) shift left.
        + + long shift;
        + long valX;
        + shift = ((long) popIntStack()) & INTMASK;
        + valX = ((long) popIntStack()) & INTMASK;
        + int t = (int) (valX << (shift & 0x3f));
        + pushIntStack(t);
        + + + Fix! + + + + + ASHIFTRIGHT + + + 43 + + + arithmetic(signed) shift left.
        + long shift;
        + int valX;
        + shift = ((long) popIntStack()) & INTMASK;
        + valX = popIntStack();
        + int t = valX >> (shift & 0x3f);
        + pushIntStack(t);
        + + + + Fix! + + + + + + CALL + + + 45 + + + call procedure.
        +
        + int address = pop();
        + push(pc + 1);
        + setPc(address);
        + + + Fix! + + + + + CALLPCREL + + + 63 + + + call procedure pc relative
        +
        +int address = pop();
        + push(pc + 1);
        + setPc(address+pc); + + Fix! + + + + + + + EQ + + + 46 + + + pushIntStack((popIntStack() == popIntStack()) ? 1 : 0); + Fix! + + + + + NEQ + + + 48 + + + pushIntStack((popIntStack() != popIntStack()) ? 1 : 0); + Fix! + + + + + NEG + + + 47 + + + pushIntStack(-popIntStack()); + Fix! + + + +
        -- cgit v1.1 From 10995e1545e11556e84665ff013313f5160f6161 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 7 Aug 2008 13:23:43 +0000 Subject: add missing defs. --- zpu/hdl/zpu4/core/zpu_config.vhd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/zpu/hdl/zpu4/core/zpu_config.vhd b/zpu/hdl/zpu4/core/zpu_config.vhd index a13c0bf..ffc144b 100644 --- a/zpu/hdl/zpu4/core/zpu_config.vhd +++ b/zpu/hdl/zpu4/core/zpu_config.vhd @@ -1,6 +1,7 @@ library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; package zpu_config is -- generate trace output or not. @@ -12,5 +13,10 @@ package zpu_config is 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; + constant maxAddrBitBRAM : integer := 14; + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := + conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); end zpu_config; -- cgit v1.1 From 797d635849980a18a6261f3538c72abc52abea74 Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 8 Aug 2008 12:04:17 +0000 Subject: added link. --- zpu/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zpu/index.html b/zpu/index.html index bb5714f..161902b 100644 --- a/zpu/index.html +++ b/zpu/index.html @@ -1,9 +1,9 @@

        Getting started

        -FPGA: check out zpu/hdl, read zpu/hdl/index.html +FPGA: check out zpu/hdl, read
        zpu/hdl/index.html

        -Software: check out zpu/sw, read zpu/sw/index.html +Software: check out zpu/sw, read zpu/sw/index.html

        Docs: check out zpu/docs, this is what's available as of writing. Further documentation exists in the eCosBoard 1.1 product: http://www.zylin.com/ecosboard.htm

        Other directories

        -- cgit v1.1 From d04fffa00db02f2392a962b3049780e59b87578c Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 8 Aug 2008 12:07:08 +0000 Subject: link to zpu_arch.html --- zpu/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zpu/index.html b/zpu/index.html index 161902b..7343ab6 100644 --- a/zpu/index.html +++ b/zpu/index.html @@ -5,7 +5,7 @@ FPGA: check out zpu/hdl, read zpu/hdl/index.html

        Software: check out zpu/sw, read zpu/sw/index.html

        -Docs: check out zpu/docs, this is what's available as of writing. Further documentation exists in the eCosBoard 1.1 product: http://www.zylin.com/ecosboard.htm +Docs: start with ZPU architecture doc

        Other directories

        You probably don't need or want to download other directories.
          -- cgit v1.1 From f9ddc2d50943be4bb9d4864cc277af99b03ade1f Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 8 Aug 2008 12:13:24 +0000 Subject: 2008-08-08 Salvador E. Tropea * zpu/hdl/zpu4/core/histogram.perl - generate opcode histogram from HDL simulation output --- zpu/COPYING | 11 +- zpu/ChangeLog | 3 + zpu/hdl/zpu4/core/histogram.perl | 218 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 226 insertions(+), 6 deletions(-) create mode 100644 zpu/hdl/zpu4/core/histogram.perl diff --git a/zpu/COPYING b/zpu/COPYING index 9475e0f..4212a5b 100644 --- a/zpu/COPYING +++ b/zpu/COPYING @@ -1,16 +1,15 @@ About ZPU licensing: -The license for HDL implementations is BSD to be -friendly towards commercial projects, however the -architecture, documentation and tools will be GPL. This means that all -updates to the architecture must be shared, but actual +The license for HDL implementations is FreeBSD to be +friendly towards commercial projects and other open source +projects, however the architecture, documentation and tools will be GPL. + +This means that all updates to the architecture must be shared, but actual implementations(which are small and can be very project speific) can be friendly towards commercial considerations. - Patches to update files w/correct licensing info will be most appreciated! - The ZPU and all the files are per 1/1-2008 Copyright Zylin AS, i.e. Zylin is free to decide upon the BSD license for HDL implementation and GPL for architecture, tools and documentation. diff --git a/zpu/ChangeLog b/zpu/ChangeLog index c48b9c8..88bc650 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,6 @@ +2008-08-08 Salvador E. Tropea + * zpu/hdl/zpu4/core/histogram.perl - generate opcode histogram from + HDL simulation output 2008-06-25 Øyvind Harboe * do not enable interrupts for simzpu_small.do. hello world does not have an interrupt handler, so this caused a BREAK diff --git a/zpu/hdl/zpu4/core/histogram.perl b/zpu/hdl/zpu4/core/histogram.perl new file mode 100644 index 0000000..479ee0f --- /dev/null +++ b/zpu/hdl/zpu4/core/histogram.perl @@ -0,0 +1,218 @@ +#!/usr/bin/perl +############################################################################## +# +# Copyright (c) 2008 Salvador E. Tropea +# Copyright (c) 2008 Instituto Nacional de Tecnología Industrial +# +############################################################################## +# +# Target: Any +# Language: Perl +# Interpreter used: v5.6.1/v5.8.4 +# Text editor: SETEdit 0.5.5 +# +############################################################################## +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA +# +############################################################################## +# +# Description: Takes a ZPU trace and does some raw stats about opcodes +# frequency and speed. +# +############################################################################## +# +# TODO +# +# A lot ... +# + + +# 0x40-0x460 +# div y mod son especiales +@used=(); +@clks=(); + +$line=1; +$startLine=1; +#$endLine=10000; +$endLine=-1; +$lastClk=0; +$lastOpcode=-1; +while (<>) + { + if ($_=~/^(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/) + { + $clk=hex($7); + #print "$line\n"; + if ($line>=$startLine) + { + #print $_; + $addr=hex($1); + $opcode=hex($2); + $sp=hex($3); + $a=hex($4); + $b=hex($5); + if ($addr>=0x40 and $addr<0x460) + { + @used[$opcode+0x100]++; + @clks[$lastOpcodeEmu]+=$clk-$lastClkEmu unless lastOpcodeEmu==-1; + $lastOpcodeEmu=$opcode+0x100; + $lastClkEmu=$clk; + } + else + { + @used[$opcode]++; + @clks[$lastOpcode]+=$clk-$lastClk unless $lastOpcode==-1; + #printf "%d+=%d\n",$lastOpcode,$clk-$lastClk; + $lastOpcode=$opcode; + $lastClk=$clk; + $lastOpcodeEmu=-1; + $lastClkEmu=$clk; + } + } + else + { + $lastClk=$clk; + } + last if $line==$endLine; + $line++; + } + } +@used[$lastOpcode]--; + +$id=0; +# Cluster them +AddSimple('breakpoint',0); +# 1=shiftleft, invalid +AddSimple('pushsp',2); +# 3=pushint, invalid +AddSimple('poppc',4); +AddSimple('add',5); +AddSimple('and',6); +AddSimple('or',7); +AddSimple('load',8); +AddSimple('not',9); +AddSimple('flip',10); +AddSimple('nop',11); +AddSimple('store',12); +AddSimple('popsp',13); +# 14=compare, invalid +# 15=popint, invalid +AddSimpleRange('addsp',16,31); +# 32-63 emulate +AddSimpleRange('storesp',64,95); +AddSimpleRange('loadsp',96,127); +AddSimpleRange('im',128,255); + +# 32 is the reset entry point +# 33 is the interrupt entry point +AddEmulate('loadh',34); +AddEmulate('storeh',35); +AddEmulate('lessthan',36); +AddEmulate('lessthanorequal',37); +AddEmulate('ulessthan',38); +AddEmulate('ulessthanorequal',39); +AddEmulate('swap',40); # unimplemented +AddEmulate('mult',41); +AddEmulate('lshiftright',42); +AddEmulate('ashiftleft',43); +AddEmulate('ashiftright',44); +AddEmulate('call',45); +AddEmulate('eq',46); +AddEmulate('neq',47); +AddEmulate('neg',48); +AddEmulate('sub',49); +AddEmulate('xor',50); +AddEmulate('loadb',51); +AddEmulate('storeb',52); +AddEmulate('div',53); +AddEmulate('mod',54); +AddEmulate('eqbranch',55); +AddEmulate('neqbranch',56); +AddEmulate('poppcrel',57); +AddEmulate('config',58); +AddEmulate('pushpc',59); +AddEmulate('syscall_emulate',60); # unimplemented +AddEmulate('pushspadd',61); +AddEmulate('halfmult',62); # unimplemented +AddEmulate('callpcrel',63); + +$maxID=$id; +print "Total clocks: $lastClk\n"; +print "Unsorted:\n\n"; +for ($i=0; $i<$maxID; $i++) + { + $used=@used_noemu[$i]; + $clkm=0; + $clkm=@clks_noemu[$i]/$used if $used; + printf "%-20s %8d %6.2f\n",$names[$i],$used,$clkm; + $by_times{$i}=$used; + $by_clks{$i}=@clks_noemu[$i]; + } +print "Sorted by consumed clocks:\n\n"; +foreach $key (sort { $by_clks{$b} <=> $by_clks{$a} } keys %by_clks) + { + printf "%5.2f %-20s %8d\n",$by_clks{$key}/$lastClk*100,$names[$key],$by_clks{$key}; + } + + +sub AddSimple +{ + my ($name, $opcode)=@_; + + $names[$id]=$name; + @used_noemu[$id]=@used[$opcode]; + @used_emu[$id]=@used[$opcode+0x100]; + @used_both[$id]=@used[$opcode]+@used[$opcode+0x100]; + @clks_noemu[$id]=@clks[$opcode]; + @clks_emu[$id]=@clks[$opcode+0x100]; + @clks_both[$id]=@clks[$opcode]+@clks[$opcode+0x100]; + $id++; +} + +sub AddEmulate +{ + my ($name, $opcode)=@_; + + $names[$id]=$name; + @used_noemu[$id]=@used[$opcode]; + @used_emu[$id]=@used[$opcode+0x100]; + @used_both[$id]=@used[$opcode]; + @clks_noemu[$id]=@clks[$opcode]; + @clks_emu[$id]=@clks[$opcode+0x100]; + @clks_both[$id]=@clks[$opcode]; + $id++; +} + +sub AddSimpleRange +{ + my ($name, $opStart, $opLast)=@_; + my $i; + + $names[$id]=$name; + for ($i=$opStart; $i<=$opLast; $i++) + { + @used_noemu[$id]+=@used[$i]; + @used_emu[$id]+=@used[$i+0x100]; + @used_both[$id]+=@used[$i]+@used[$i+0x100]; + @clks_noemu[$id]+=@clks[$i]; + @clks_emu[$id]+=@clks[$i+0x100]; + @clks_both[$id]+=@clks[$i]+@clks[$i+0x100]; + } + $id++; +} + + -- cgit v1.1 From 7aa2c04c916aae945be76e687c13cb40d4679788 Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 12 Aug 2008 13:21:13 +0000 Subject: deleted reference to ic300 dating back to ZY2000 implementation. --- zpu/hdl/wishbone/zpu_system.vhd | 1 - 1 file changed, 1 deletion(-) diff --git a/zpu/hdl/wishbone/zpu_system.vhd b/zpu/hdl/wishbone/zpu_system.vhd index 6e79370..89f630d 100644 --- a/zpu/hdl/wishbone/zpu_system.vhd +++ b/zpu/hdl/wishbone/zpu_system.vhd @@ -6,7 +6,6 @@ library work; use work.wishbone_pkg.all; use work.zpupkg.all; use work.zpu_config.all; -use work.ic300pkg.all; entity zpu_system is generic( -- cgit v1.1 From eab67ae1b5d86c9c294ef057631d04a448e1727f Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 15 Aug 2008 10:53:01 +0000 Subject: marked unused instruction opcodes as OpCode_NAx --- zpu/hdl/zpu4/core/zpupkg.vhd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/zpu/hdl/zpu4/core/zpupkg.vhd b/zpu/hdl/zpu4/core/zpupkg.vhd index f3800b0..e8d54a3 100644 --- a/zpu/hdl/zpu4/core/zpupkg.vhd +++ b/zpu/hdl/zpu4/core/zpupkg.vhd @@ -114,9 +114,9 @@ package zpupkg is 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_NA4 : 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_NA3 : 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"; @@ -130,8 +130,8 @@ package zpupkg is 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_NA2 : std_logic_vector(3 downto 0) := "1110"; + constant OpCode_NA : std_logic_vector(3 downto 0) := "1111"; constant OpCode_Lessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(36, 6)); constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(37, 6)); -- cgit v1.1 From 17c84a1b81bd192d8a2268caaed66478e55c8e3a Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 15 Aug 2008 19:01:14 +0000 Subject: some ideas. --- zpu/docs/zpu_arch.html | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 3597e82..1346ecc 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -8,6 +8,7 @@
        • Jump vectors
        • Memory map
        • Interrupts +
        • Next generation ZPU

        Getting started

        @@ -1234,5 +1235,31 @@ restore them.

        See zpu/hdl/zpu4/test/interrupt/ for C code and zpu/hdl/example/simzpu_interrupt.do for simulation example. + +

        Next generation ZPU

        +Based on feedback here is a list of a tenuous "consensus" for the next generation +of the ZPU with some tentative ideas on implementation. +

        +The plan is to update zpu_core.vhd and zpu_core_small.vhd as examples/reference, +and to open up for innovation in the HDL implementation. + +

          +
        1. Reduce minimum code size footprint +
            +
          1. Modify GCC compiler to be able to emit function calls instead of instructions. +E.g instead of issuing MULT, generate function call. This reduces code size overhead +for applications that do not use MULT since the microcode does not need to be in place. +
          2. Add single entry for unknown instructions. PC and unsupported instruction is +pushed onto stack before jumping to unkonwn instruction vector. This makes it possible +to write denser microcode for missing instructions. +
          +
        2. Add floating point add and mult. FADD & FMULT. Option to generate the instructions +from the compiler. +
        3. Add some scheme to support custom instructions. +
        4. Add support to Zylin Embedded CDT for downloading fully functional ZPU +toolchain. The goal is to allow new users to write and simulate simple ZPU +programs in in less than an hour. +
        + \ No newline at end of file -- cgit v1.1 From fdc8e712265a1cc083ba51146a75cf15d6718feb Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 15 Aug 2008 20:04:54 +0000 Subject: tips for rolling your own ZPU --- zpu/docs/zpu_arch.html | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 1346ecc..e09b915 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -5,6 +5,7 @@
      1. Getting started
      2. Introduction
      3. Instruction set +
      4. Implementing your own ZPU
      5. Jump vectors
      6. Memory map
      7. Interrupts @@ -804,6 +805,34 @@ int address = pop();
        + +

        Implementing your own ZPU

        +One of the neat things about the ZPU is that the instruction set and architecture +is very small and it is easy to implement a ZPU from scratch or modify the +existing ZPU implementations. +

        +Implementing a ZPU can be done without understanding the toolchain in +detail, i.e. using exclusively HDL skills and only a rudimentary +understanding of standard GCC/GDB usage is sufficient. +

        +A few tips: +

          +
        • Run zpu_core.vhd or zpu_core_small.vhd and generate an instruction trace +from ModelSim or similar. To check that you own implementation is correctly +implemented, verify that the instruction trace for the new and old +ZPU implementations match. This gives you a simple way to do regression +tests as you develop your ZPU. +
        • To improve performance, you can add more instructions. The EMULATE instructions +are optional in HDL since they will be emulated in software if they are not +implemented in HDL. This allows you to run the ZPU executables unmodified +regardless of which EMULATE instructions you implement. +
        • Run the DMIPS test to measure your overall performance +
        • Run the histogram.perl script on the instruction trace to generate +histograms of the instructions. Profiling is essential to making +the right choices w.r.t. optimisation for your application. +
        + +

        Vectors

        -- cgit v1.1 From 5d329cc628e4174874382547397149e414ec0ad8 Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 15 Aug 2008 20:11:36 +0000 Subject: added FreeBSD license. Finally. --- zpu/hdl/example/bram_dmips.vhd | 34 ++++++++++++++++++++ zpu/hdl/example/helloworld.vhd | 34 ++++++++++++++++++++ zpu/hdl/example/interrupt.vhd | 34 ++++++++++++++++++++ zpu/hdl/example/sim_small_fpga_top.vhd | 47 ++++++++++++++++++---------- zpu/hdl/example/sim_small_fpga_top_noint.vhd | 47 ++++++++++++++++++---------- zpu/hdl/example/zpu_config.vhd | 34 ++++++++++++++++++++ zpu/hdl/wishbone/wishbone_pkg.vhd | 34 ++++++++++++++++++++ zpu/hdl/wishbone/zpu_system.vhd | 34 ++++++++++++++++++++ zpu/hdl/wishbone/zpu_wb_bridge.vhd | 34 ++++++++++++++++++++ zpu/hdl/zpu4/core/zpu_config.vhd | 35 +++++++++++++++++++++ zpu/hdl/zpu4/core/zpu_core.vhd | 36 +++++++++++++++++++-- zpu/hdl/zpu4/core/zpu_core_small.vhd | 35 +++++++++++++++++++-- zpu/hdl/zpu4/core/zpupkg.vhd | 34 ++++++++++++++++++++ zpu/hdl/zpu4/src/trace.vhd | 34 ++++++++++++++++++++ zpu/hdl/zpu4/src/txt_util.vhd | 34 ++++++++++++++++++++ 15 files changed, 503 insertions(+), 37 deletions(-) diff --git a/zpu/hdl/example/bram_dmips.vhd b/zpu/hdl/example/bram_dmips.vhd index 1d62d21..53d9121 100644 --- a/zpu/hdl/example/bram_dmips.vhd +++ b/zpu/hdl/example/bram_dmips.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; diff --git a/zpu/hdl/example/helloworld.vhd b/zpu/hdl/example/helloworld.vhd index f9383fd..a11bbb7 100644 --- a/zpu/hdl/example/helloworld.vhd +++ b/zpu/hdl/example/helloworld.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; diff --git a/zpu/hdl/example/interrupt.vhd b/zpu/hdl/example/interrupt.vhd index 821e29a..ededf85 100644 --- a/zpu/hdl/example/interrupt.vhd +++ b/zpu/hdl/example/interrupt.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; diff --git a/zpu/hdl/example/sim_small_fpga_top.vhd b/zpu/hdl/example/sim_small_fpga_top.vhd index 72b2d7b..f36a285 100644 --- a/zpu/hdl/example/sim_small_fpga_top.vhd +++ b/zpu/hdl/example/sim_small_fpga_top.vhd @@ -1,22 +1,37 @@ --------------------------------------------------------------------------------- --- Company: --- Engineer: +-- ZPU -- --- Create Date: 20:15:31 04/14/05 --- Design Name: --- Module Name: fpga_top - behave --- Project Name: --- Target Device: --- Tool versions: --- Description: --- --- Dependencies: +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: -- --- Revision: --- Revision 0.01 - File Created --- Additional Comments: +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. -- --------------------------------------------------------------------------------- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project.-------------------------------------------------------------------------------- + library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; diff --git a/zpu/hdl/example/sim_small_fpga_top_noint.vhd b/zpu/hdl/example/sim_small_fpga_top_noint.vhd index 86f9a8b..b342d26 100644 --- a/zpu/hdl/example/sim_small_fpga_top_noint.vhd +++ b/zpu/hdl/example/sim_small_fpga_top_noint.vhd @@ -1,22 +1,37 @@ --------------------------------------------------------------------------------- --- Company: --- Engineer: +-- ZPU -- --- Create Date: 20:15:31 04/14/05 --- Design Name: --- Module Name: fpga_top - behave --- Project Name: --- Target Device: --- Tool versions: --- Description: --- --- Dependencies: +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: -- --- Revision: --- Revision 0.01 - File Created --- Additional Comments: +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. -- --------------------------------------------------------------------------------- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd index 63f6fb9..c4c09b5 100644 --- a/zpu/hdl/example/zpu_config.vhd +++ b/zpu/hdl/example/zpu_config.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; diff --git a/zpu/hdl/wishbone/wishbone_pkg.vhd b/zpu/hdl/wishbone/wishbone_pkg.vhd index c3b0d9b..97240de 100644 --- a/zpu/hdl/wishbone/wishbone_pkg.vhd +++ b/zpu/hdl/wishbone/wishbone_pkg.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.ALL; diff --git a/zpu/hdl/wishbone/zpu_system.vhd b/zpu/hdl/wishbone/zpu_system.vhd index 89f630d..5b95a80 100644 --- a/zpu/hdl/wishbone/zpu_system.vhd +++ b/zpu/hdl/wishbone/zpu_system.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; diff --git a/zpu/hdl/wishbone/zpu_wb_bridge.vhd b/zpu/hdl/wishbone/zpu_wb_bridge.vhd index 4182f7a..226d839 100644 --- a/zpu/hdl/wishbone/zpu_wb_bridge.vhd +++ b/zpu/hdl/wishbone/zpu_wb_bridge.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; diff --git a/zpu/hdl/zpu4/core/zpu_config.vhd b/zpu/hdl/zpu4/core/zpu_config.vhd index ffc144b..4fecf01 100644 --- a/zpu/hdl/zpu4/core/zpu_config.vhd +++ b/zpu/hdl/zpu4/core/zpu_config.vhd @@ -1,3 +1,38 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + + library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; diff --git a/zpu/hdl/zpu4/core/zpu_core.vhd b/zpu/hdl/zpu4/core/zpu_core.vhd index 37fa2d1..012fe1b 100644 --- a/zpu/hdl/zpu4/core/zpu_core.vhd +++ b/zpu/hdl/zpu4/core/zpu_core.vhd @@ -1,6 +1,36 @@ - --- Company: ZPU4 generic memory interface CPU --- Engineer: Øyvind Harboe +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. library IEEE; use IEEE.STD_LOGIC_1164.ALL; diff --git a/zpu/hdl/zpu4/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd index 03526bd..69bbe1a 100644 --- a/zpu/hdl/zpu4/core/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd @@ -1,5 +1,36 @@ --- Company: ZPU3 --- Engineer: Øyvind Harboe +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. library IEEE; use IEEE.STD_LOGIC_1164.ALL; diff --git a/zpu/hdl/zpu4/core/zpupkg.vhd b/zpu/hdl/zpu4/core/zpupkg.vhd index e8d54a3..59d26e5 100644 --- a/zpu/hdl/zpu4/core/zpupkg.vhd +++ b/zpu/hdl/zpu4/core/zpupkg.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library IEEE; use IEEE.STD_LOGIC_1164.all; use ieee.numeric_std.all; diff --git a/zpu/hdl/zpu4/src/trace.vhd b/zpu/hdl/zpu4/src/trace.vhd index e687aaf..2413970 100644 --- a/zpu/hdl/zpu4/src/trace.vhd +++ b/zpu/hdl/zpu4/src/trace.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; diff --git a/zpu/hdl/zpu4/src/txt_util.vhd b/zpu/hdl/zpu4/src/txt_util.vhd index d3bf01a..3d5297a 100644 --- a/zpu/hdl/zpu4/src/txt_util.vhd +++ b/zpu/hdl/zpu4/src/txt_util.vhd @@ -1,3 +1,37 @@ +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; use std.textio.all; -- cgit v1.1 From 0315a8cc7a7f58a8c539aa0e73fe6142ea44def0 Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 15 Aug 2008 20:22:17 +0000 Subject: a few words about zpu_core.vhd and zpu_core_small.vhd --- zpu/docs/zpu_arch.html | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index e09b915..312bdb6 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -9,6 +9,8 @@
      8. Jump vectors
      9. Memory map
      10. Interrupts +
      11. About zpu_core_small.vhd +
      12. About zpu_core.vhd
      13. Next generation ZPU @@ -1264,6 +1266,34 @@ restore them.

        See zpu/hdl/zpu4/test/interrupt/ for C code and zpu/hdl/example/simzpu_interrupt.do for simulation example. + +

        About zpu_core_small.vhd

        +The small ZPU implements the minimum instruction set. It is optimized for size and simplicity +serving as a reference in both regards. +

        +It uses a BRAM (dual port RAM w/read/write to both ports) as data & code storage and +is implemented as a simple state machine. +

        +Essentially it has three states: +

          +
        1. Fetch - starts fetch of next instruction +
        2. FetchNext - sets up operands for execute cycle +
        3. Decode - decodes instruction +
        4. Execute - well.. executes instruction +
        +The tricky bit is that there is a tiny bit of interleaving of +states since the BRAM takes a cycle to perform a fetch/store. The above is the +normal states the ZPU cycles through unless memory fetch, jumps, etc. take +place. +
        +

        About zpu_core.vhd

        +The zpu_core.vhd has a single port memory interface. All data, code and IO is +accessed through this memory interface. +

        +It performs better(despite having less memory bandwidth than zpu_core_small.vhd) +since it implements many more instructions. + +

        Next generation ZPU

        Based on feedback here is a list of a tenuous "consensus" for the next generation -- cgit v1.1 From cae9e8c62d8f3fd3900bd90148c20c90730324eb Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 15 Aug 2008 20:32:50 +0000 Subject: some more docs. --- zpu/docs/zpu_arch.html | 133 ++++++++++++++++++++++++++----------------------- 1 file changed, 72 insertions(+), 61 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 312bdb6..825f0d2 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -136,7 +136,6 @@ end if Pop value off stack and store it in the SP+xxxxx*4 memory location, where xxxxx is a positive integer.
      14. @@ -150,7 +149,7 @@ end if Push value of memory location SP+xxxxx*4, where xxxxx is a positive integer, onto stack. @@ -164,7 +163,7 @@ end if Add value of memory location SP+xxxx*4 to value on top of stack. @@ -175,10 +174,16 @@ end if 001x xxxx @@ -192,7 +197,7 @@ end if Pushes program counter onto the stack. @@ -206,21 +211,7 @@ end if Pops address off stack and sets PC - - - - - - @@ -233,10 +224,13 @@ end if @@ -249,10 +243,10 @@ end if @@ -266,7 +260,7 @@ end if Pushes stack pointer. @@ -277,10 +271,10 @@ end if 0000 1101 @@ -294,7 +288,7 @@ end if Pops two values on stack adds them and pushes the result @@ -308,7 +302,7 @@ end if Pops two values off the stack and does a bitwise-and & pushes the result onto the stack @@ -322,7 +316,7 @@ end if Pops two integers, does a bitwise or and pushes result @@ -337,7 +331,7 @@ end if @@ -348,10 +342,12 @@ end if 0000 1010 @@ -362,10 +358,11 @@ end if 0000 1011 @@ -381,7 +378,7 @@ end if pushIntStack(a+b);
        @@ -396,7 +393,7 @@ end if setPc(popIntStack()+getPc()); @@ -412,7 +409,7 @@ end if pushIntStack(b-a);
        @@ -426,7 +423,7 @@ end if pushIntStack(popIntStack() ^ popIntStack()); @@ -437,10 +434,13 @@ pushIntStack(popIntStack() ^ popIntStack()); 51 @@ -451,12 +451,15 @@ pushIntStack(popIntStack() ^ popIntStack()); 52 @@ -467,10 +470,15 @@ pushIntStack(popIntStack() ^ popIntStack()); 34 @@ -481,12 +489,15 @@ pushIntStack(popIntStack() ^ popIntStack()); 35 @@ -503,7 +514,7 @@ addr = popIntStack();
        pushIntStack((a < b) ? 1 : 0);
        @@ -520,7 +531,7 @@ addr = popIntStack();
        pushIntStack((a <= b) ? 1 : 0);
        @@ -539,7 +550,7 @@ addr = popIntStack();
        pushIntStack((a < b) ? 1 : 0);
        @@ -558,7 +569,7 @@ addr = popIntStack();
        pushIntStack((a <= b) ? 1 : 0);
        @@ -582,7 +593,7 @@ addr = popIntStack();
        }
        @@ -606,7 +617,7 @@ addr = popIntStack();
        }
        @@ -621,7 +632,7 @@ addr = popIntStack();
        pushIntStack(popIntStack() * popIntStack());
        @@ -642,7 +653,7 @@ addr = popIntStack();
        pushIntStack(a / b);
        @@ -663,7 +674,7 @@ addr = popIntStack();
        pushIntStack(a % b);
        @@ -684,7 +695,7 @@ addr = popIntStack();
        pushIntStack(t);
        @@ -705,7 +716,7 @@ addr = popIntStack();
        pushIntStack(t);
        @@ -726,7 +737,7 @@ addr = popIntStack();
        @@ -745,7 +756,7 @@ addr = popIntStack();
        setPc(address);
        @@ -762,7 +773,7 @@ int address = pop();
        push(pc + 1);
        setPc(address+pc);
        @@ -776,7 +787,7 @@ int address = pop();
        @@ -788,7 +799,7 @@ int address = pop();
        @@ -800,7 +811,7 @@ int address = pop();
        -- cgit v1.1 From 701ad73b88cbd8014fc0f4de10b7e77b3bda87a2 Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 15 Aug 2008 20:37:55 +0000 Subject: pdf versions --- zpu/docs/presentations/zpu.pdf | Bin 0 -> 112765 bytes zpu/docs/presentations/zpudemo.pdf | Bin 0 -> 254156 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 zpu/docs/presentations/zpu.pdf create mode 100644 zpu/docs/presentations/zpudemo.pdf diff --git a/zpu/docs/presentations/zpu.pdf b/zpu/docs/presentations/zpu.pdf new file mode 100644 index 0000000..4bdd25b Binary files /dev/null and b/zpu/docs/presentations/zpu.pdf differ diff --git a/zpu/docs/presentations/zpudemo.pdf b/zpu/docs/presentations/zpudemo.pdf new file mode 100644 index 0000000..067cc78 Binary files /dev/null and b/zpu/docs/presentations/zpudemo.pdf differ -- cgit v1.1 From b535dbe12ad4e09256f4bbdd98054138e4b6fff5 Mon Sep 17 00:00:00 2001 From: oharboe Date: Sat, 16 Aug 2008 08:08:55 +0000 Subject: wip --- zpu/docs/zpu_arch.html | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 825f0d2..ce24bdd 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1322,14 +1322,34 @@ for applications that do not use MULT since the microcode does not need to be in
      15. Add single entry for unknown instructions. PC and unsupported instruction is pushed onto stack before jumping to unkonwn instruction vector. This makes it possible to write denser microcode for missing instructions. +
      16. Single entry for *all* unknown instructions does not limit emulation to the +EMULATE instructions today, but instructions such as OR, LOADSP, STORESP, ADDSP, +etc. can also be emulated. This opens up for further reduction in logic usage. +
      17. The single entry for all unknown instructions will make it easier to +write a compact custom crt0.s to fit an instruction subset. +
      18. The interrupt is basically an unknown instruction that is injected into +the execution stream.
      19. Add floating point add and mult. FADD & FMULT. Option to generate the instructions from the compiler. -
      20. Add some scheme to support custom instructions. +
      21. Add GCC support for seperate code/data bus. This may be as "simple" as +writing a custom linker script for the current GCC compiler. +
      22. Add some scheme to support custom instructions. Can this be combined with +single entry point for unknown instructions?
      23. Add support to Zylin Embedded CDT for downloading fully functional ZPU toolchain. The goal is to allow new users to write and simulate simple ZPU programs in in less than an hour. - +

        Next generation ZPU HDL work

        +
          +
        1. Incorporate feedback on FPGA tricks to reduce memory usage: do not +use asynchronous reset?, use BRAMs in synchronous mode to reduce +complexity of state machine?, seperate code/data bus? Reduce +instruction set further. Goal: <300 LUT's for 32 bit ZPU +
        2. Will someone be willing to contribute a heavily pipelined ZPU? +For this to make sense, the performance must hit 20 DMIPS w/DRAM & cache. +This ZPU could run a TCP/IP stack with relevant performance to compete +with stripped down ARM7 type systems. +
        \ No newline at end of file -- cgit v1.1 From 3c919f795b78bacdb9b3b7396ac5761f7457224a Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 18 Aug 2008 07:25:24 +0000 Subject: wip --- zpu/docs/zpu_arch.html | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index ce24bdd..ccbd0df 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1316,19 +1316,20 @@ and to open up for innovation in the HDL implementation.
        1. Reduce minimum code size footprint
            -
          1. Modify GCC compiler to be able to emit function calls instead of instructions. -E.g instead of issuing MULT, generate function call. This reduces code size overhead -for applications that do not use MULT since the microcode does not need to be in place.
          2. Add single entry for unknown instructions. PC and unsupported instruction is pushed onto stack before jumping to unkonwn instruction vector. This makes it possible -to write denser microcode for missing instructions. +to write denser microcode for missing instructions. For emulated opcodes that are +not in use, the microcode can more easily be disabled. Determining +that e.g. MULT is not used, can be a bit tricky, but disabling it is easy.
          3. Single entry for *all* unknown instructions does not limit emulation to the EMULATE instructions today, but instructions such as OR, LOADSP, STORESP, ADDSP, etc. can also be emulated. This opens up for further reduction in logic usage.
          4. The single entry for all unknown instructions will make it easier to -write a compact custom crt0.s to fit an instruction subset. +write a compact custom crt0.s to fit an instruction subset.
          5. The interrupt is basically an unknown instruction that is injected into the execution stream. +
          6. Possibly modify the java simulator to support the single entry for unknown +instructions.
        2. Add floating point add and mult. FADD & FMULT. Option to generate the instructions from the compiler. @@ -1339,6 +1340,10 @@ single entry point for unknown instructions?
        3. Add support to Zylin Embedded CDT for downloading fully functional ZPU toolchain. The goal is to allow new users to write and simulate simple ZPU programs in in less than an hour. +
        4. Strip away unused instructions from GCC and add options to GCC for not +emitting more advanced instructions. This will e.g. convert MULT/DIV into +function calls to libgcc and thus make it easier to determine that +microcode is not needed.

        Next generation ZPU HDL work

          -- cgit v1.1 From 431a1bf775d468bcd788c3dd716b97cc0fca1f34 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 18 Aug 2008 12:00:34 +0000 Subject: * duplicated crt0.s and some other stuff from libgloss into sw/startup. This makes it easier to tinker w/startup code. --- zpu/ChangeLog | 3 + zpu/docs/zpu_arch.html | 16 +- zpu/sw/startup/crt0.S | 957 ++++++++++++++++++++++++++++++++++++++++++++++++ zpu/sw/startup/crt_io.c | 91 +++++ zpu/sw/startup/time.c | 32 ++ 5 files changed, 1098 insertions(+), 1 deletion(-) create mode 100644 zpu/sw/startup/crt0.S create mode 100644 zpu/sw/startup/crt_io.c create mode 100644 zpu/sw/startup/time.c diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 88bc650..02adb2c 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,6 @@ +2008-08-18 Øyvind Harboe + * duplicated crt0.s and some other stuff from libgloss into + sw/startup. This makes it easier to tinker w/startup code. 2008-08-08 Salvador E. Tropea * zpu/hdl/zpu4/core/histogram.perl - generate opcode histogram from HDL simulation output diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index ccbd0df..d8d982d 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -5,6 +5,7 @@
        1. Getting started
        2. Introduction
        3. Instruction set +
        4. Custom startup code (aka crt0.s)
        5. Implementing your own ZPU
        6. Jump vectors
        7. Memory map @@ -817,7 +818,20 @@ int address = pop();
      24. - Fix!
        - Fix! +
        - Fix! +
        - Push PC to stack and set PC to 0x0+xxxxx*32. This is used to emulate opcodes. See zpupgk.vhd for list of emulate opcode values used. zpu_core.vhd contains reference implementations of these instructions rather than letting the ZPU execute the EMULATE instruction + Push PC to stack and set PC to 0x0+xxxxx*32. This is used to emulate opcodes. See + zpupgk.vhd for list of emulate opcode values used. zpu_core.vhd contains + reference implementations of these instructions rather than letting the ZPU execute the EMULATE instruction +

        + One way to improve performance of the ZPU is to implement some of + the EMULATE instructions. +

        - Fix! +
        - Fix! +
        - Fix! -
        - LOAD - - 0000 1000 - - Pops address stored on stack and loads the value of that address onto stack. - - Fix! +
        Pops address stored on stack and loads the value of that address onto stack.

        - Bit 0 and 1 of address are always 0. + Bit 0 and 1 of address are always treated as 0(i.e. ignored) by + the HDL implementations and C code is guaranteed by the programming + model never to use 32 bit LOAD on non-32 bit aligned addresses(i.e. + if a program does this, then it has a bug).

        - Fix! +
        Pops address, then value from stack and stores the value into the memory location of the address.

        - Bit 0 and 1 of address are always 0 + Bit 0 and 1 of address are always treated as 0

        - Fix! +
        - Fix! +
        - Used to allocate/deallocate space on stack for variables or when changing threads. + Pops value off top of stack and sets SP to that value. Used to allocate/deallocate space on stack for variables or when changing threads. - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Reverses the bit order of the value on the stack, i.e. abc->cba, 100->001, 110->011, etc. + Reverses the bit order of the value on the stack, i.e. abc->cba, 100->001, 110->011, etc. +

        + The raison d'etre for this instruction is mainly to emulate other instructions.

        - Fix! +
        - No operation, clears IDIM flag as side effect + No operation, clears IDIM flag as side effect, i.e. used between two + consequtive IM instructions to push two values onto the stack. - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        + 8 bit load instruction. Really only here for compatibility with + C programming model. Also it has a big impact on DMIPS test. +

        pushIntStack(cpuReadByte(popIntStack())&0xff);

        - Fix! +
        + 8 bit store instruction. Really only here for compatibility with + C programming model. Also it has a big impact on DMIPS test. +

        addr = popIntStack();
        val = popIntStack();
        cpuWriteByte(addr, val);

        - Fix! +
        + + 16 bit load instruction. Really only here for compatibility with + C programming model. +

        + pushIntStack(cpuReadWord(popIntStack()));

        - Fix! +
        + 16 bit store instruction. Really only here for compatibility with + C programming model. +

        addr = popIntStack();
        val = popIntStack();
        cpuWriteWord(addr, val);

        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        - Fix! +
        pushIntStack((popIntStack() == popIntStack()) ? 1 : 0); - Fix! +
        pushIntStack((popIntStack() != popIntStack()) ? 1 : 0); - Fix! +
        pushIntStack(-popIntStack()); - Fix! +
        - + +

        Custom startup code (aka crt0.s)

        +To minimize the size of an application, one important trick is to +strip down the startup code. The startup code contains emulation +of instructions that may never be used by a particular application. +

        +The startup code is found in the GCC source code under gcc/libgloss/zpu, +but to make the startup code more available, it has been duplicated +into zpu/sw/startup +

        +To minimize startup size, see codesize +demo. This is pretty standard GCC stuff and simple enough once you've +been over it a couple of times. +

        Implementing your own ZPU

        One of the neat things about the ZPU is that the instruction set and architecture diff --git a/zpu/sw/startup/crt0.S b/zpu/sw/startup/crt0.S new file mode 100644 index 0000000..00870c4 --- /dev/null +++ b/zpu/sw/startup/crt0.S @@ -0,0 +1,957 @@ +/* Startup code for ZPU + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file with other programs, and to distribute +those programs without any restriction coming from the use of this +file. (The General Public License restrictions do apply in other +respects; for example, they cover modification of the file, and +distribution when not linked into another program.) + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + .file "crt0.S" + + + + +; .section ".fixed_vectors","ax" +; KLUDGE!!! we remove the executable bit to avoid relaxation + .section ".fixed_vectors","a" + +; DANGER!!!! +; we need to align these code sections to 32 bytes, which +; means we must not use any assembler instructions that are relaxed +; at linker time +; DANGER!!!! + + .macro fixedim value + im \value + .endm + + .macro jsr address + + im 0 ; save R0 + load + im 4 ; save R1 + load + im 8 ; save R2 + load + + fixedim \address + call + + im 8 + store ; restore R2 + im 4 + store ; restore R1 + im 0 + store ; restore R0 + .endm + + + .macro jmp address + fixedim \address + poppc + .endm + + + .macro fast_neg + not + im 1 + add + .endm + + .macro cimpl funcname + ; save R0 + im 0 + load + + ; save R1 + im 4 + load + + ; save R2 + im 8 + load + + loadsp 20 + loadsp 20 + + fixedim \funcname + call + + ; destroy arguments on stack + storesp 0 + storesp 0 + + im 0 + load + + ; poke the result into the right slot + storesp 24 + + ; restore R2 + im 8 + store + + ; restore R1 + im 4 + store + + ; restore r0 + im 0 + store + + + storesp 4 + poppc + .endm + + .macro mult1bit + ; create mask of lowest bit in A + loadsp 8 ; A + im 1 + and + im -1 + add + not + loadsp 8 ; B + and + add ; accumulate in C + + ; shift B left 1 bit + loadsp 4 ; B + addsp 0 + storesp 8 ; B + + ; shift A right 1 bit + loadsp 8 ; A + flip + addsp 0 + flip + storesp 12 ; A + .endm + + + +/* vectors */ + .balign 32,0 +# offset 0x0000 0000 + .globl _start +_start: + ; intSp must be 0 when we jump to _premain + + im ZPU_ID + loadsp 0 + im _cpu_config + store + config + jmp _premain + + + + .balign 32,0 +# offset 0x0000 0020 + .globl _zpu_interrupt_vector +_zpu_interrupt_vector: + jsr _zpu_interrupt + poppc + + +/* instruction emulation code */ + +# opcode 34 +# offset 0x0000 0040 + .balign 32,0 +_loadh: + loadsp 4 + ; by not masking out bit 0, we cause a memory access error + ; on unaligned access + im ~0x2 + and + load + + ; mult 8 + loadsp 8 + im 3 + and + fast_neg + im 2 + add + im 3 + ashiftleft + ; shift right addr&3 * 8 + lshiftright + im 0xffff + and + storesp 8 + + poppc + +# opcode 35 +# offset 0x0000 0060 + .balign 32,0 +_storeh: + loadsp 4 + ; by not masking out bit 0, we cause a memory access error + ; on unaligned access + im ~0x2 + and + load + + ; mask + im 0xffff + loadsp 12 + im 3 + and + fast_neg + im 2 + add + im 3 + ashiftleft + ashiftleft + not + + and + + loadsp 12 + im 0xffff + + nop + + fixedim _storehtail + poppc + + +# opcode 36 +# offset 0x0000 0080 + .balign 32,0 +_lessthan: + loadsp 8 + fast_neg + loadsp 8 + add + + ; DANGER!!!! + ; 0x80000000 will overflow when negated, so we need to mask + ; the result above with the compare positive to negative + ; number case + loadsp 12 + loadsp 12 + not + and + not + and + + + ; handle case where we are comparing a negative number + ; and positve number. This can underflow. E.g. consider 0x8000000 < 0x1000 + loadsp 12 + not + loadsp 12 + and + + or + + + + flip + im 1 + and + + + storesp 12 + storesp 4 + poppc + + +# opcode 37 +# offset 0x0000 00a0 + .balign 32,0 +_lessthanorequal: + loadsp 8 + loadsp 8 + lessthan + loadsp 12 + loadsp 12 + eq + or + + storesp 12 + storesp 4 + poppc + + +# opcode 38 +# offset 0x0000 00c0 + .balign 32,0 +_ulessthan: + ; fish up arguments + loadsp 4 + loadsp 12 + + /* low: -1 if low bit dif is negative 0 otherwise: neg (not x&1 and (y&1)) + x&1 y&1 neg (not x&1 and (y&1)) + 1 1 0 + 1 0 0 + 0 1 -1 + 0 0 0 + + */ + loadsp 4 + not + loadsp 4 + and + im 1 + and + neg + + + /* high: upper 31-bit diff is only wrong when diff is 0 and low=-1 + high=x>>1 - y>>1 + low + + extremes + + 0000 - 1111: + low= neg(not 0 and 1) = 1111 (-1) + high=000+ neg(111) +low = 000 + 1001 + low = 1000 + OK + + 1111 - 0000 + low=neg(not 1 and 0) = 0 + high=111+neg(000) + low = 0111 + OK + + + */ + loadsp 8 + + flip + addsp 0 + flip + + loadsp 8 + + flip + addsp 0 + flip + + sub + + ; if they are equal, then the last bit decides... + add + + /* test if negative: result = flip(diff) & 1 */ + flip + im 1 + and + + ; destroy a&b which are on stack + storesp 4 + storesp 4 + + storesp 12 + storesp 4 + poppc + +# opcode 39 +# offset 0x0000 00e0 + .balign 32,0 +_ulessthanorequal: + loadsp 8 + loadsp 8 + ulessthan + loadsp 12 + loadsp 12 + eq + or + + storesp 12 + storesp 4 + poppc + + +# opcode 40 +# offset 0x0000 0100 + .balign 32,0 + .globl _swap +_swap: + breakpoint ; tbd + +# opcode 41 +# offset 0x0000 0120 + .balign 32,0 +_slowmult: + im _slowmultImpl + poppc + +# opcode 42 +# offset 0x0000 0140 + .balign 32,0 +_lshiftright: + loadsp 8 + flip + + loadsp 8 + ashiftleft + flip + + storesp 12 + storesp 4 + + poppc + + +# opcode 43 +# offset 0x0000 0160 + .balign 32,0 +_ashiftleft: + loadsp 8 + + loadsp 8 + im 0x1f + and + fast_neg + im _ashiftleftEnd + add + poppc + + + +# opcode 44 +# offset 0x0000 0180 + .balign 32,0 +_ashiftright: + loadsp 8 + loadsp 8 + lshiftright + + ; handle signed value + im -1 + loadsp 12 + im 0x1f + and + lshiftright + not ; now we have an integer on the stack with the signed + ; bits in the right position + + ; mask these bits with the signed bit. + loadsp 16 + not + flip + im 1 + and + im -1 + add + + and + + ; stuff in the signed bits... + or + + ; store result into correct stack slot + storesp 12 + + ; move up return value + storesp 4 + poppc + +# opcode 45 +# offset 0x0000 01a0 + .balign 32,0 +_call: + ; fn + loadsp 4 + + ; return address + loadsp 4 + + ; store return address + storesp 12 + + ; fn to call + storesp 4 + + pushsp ; flush internal stack + popsp + + poppc + +_storehtail: + + and + loadsp 12 + im 3 + and + fast_neg + im 2 + add + im 3 + ashiftleft + nop + ashiftleft + + or + + loadsp 8 + im ~0x3 + and + + store + + storesp 4 + storesp 4 + poppc + + +# opcode 46 +# offset 0x0000 01c0 + .balign 32,0 +_eq: + loadsp 8 + fast_neg + loadsp 8 + add + + not + loadsp 0 + im 1 + add + not + and + flip + im 1 + and + + storesp 12 + storesp 4 + poppc + +# opcode 47 +# offset 0x0000 01e0 + .balign 32,0 +_neq: + loadsp 8 + fast_neg + loadsp 8 + add + + not + loadsp 0 + im 1 + add + not + and + flip + + not + + im 1 + and + + storesp 12 + storesp 4 + poppc + + +# opcode 48 +# offset 0x0000 0200 + .balign 32,0 +_neg: + loadsp 4 + not + im 1 + add + storesp 8 + + poppc + + +# opcode 49 +# offset 0x0000 0220 + .balign 32,0 +_sub: + loadsp 8 + loadsp 8 + fast_neg + add + storesp 12 + + storesp 4 + + poppc + + +# opcode 50 +# offset 0x0000 0240 + .balign 32,0 +_xor: + loadsp 8 + not + loadsp 8 + and + + loadsp 12 + loadsp 12 + not + and + + or + + storesp 12 + storesp 4 + poppc + +# opcode 51 +# offset 0x0000 0260 + .balign 32,0 +_loadb: + loadsp 4 + im ~0x3 + and + load + + loadsp 8 + im 3 + and + fast_neg + im 3 + add + ; x8 + addsp 0 + addsp 0 + addsp 0 + + lshiftright + + im 0xff + and + storesp 8 + + poppc + + +# opcode 52 +# offset 0x0000 0280 + .balign 32,0 +_storeb: + loadsp 4 + im ~0x3 + and + load + + ; mask away destination + im _mask + loadsp 12 + im 3 + and + addsp 0 + addsp 0 + add + load + + and + + + im _storebtail + poppc + +# opcode 53 +# offset 0x0000 02a0 + .balign 32,0 +_div: + cimpl __divsi3 + +# opcode 54 +# offset 0x0000 02c0 + .balign 32,0 +_mod: + cimpl __modsi3 + +# opcode 55 +# offset 0x0000 02e0 + .balign 32,0 + .globl _eqbranch +_eqbranch: + loadsp 8 + + ; eq + + not + loadsp 0 + im 1 + add + not + and + flip + im 1 + and + + ; mask + im -1 + add + loadsp 0 + storesp 16 + + ; no branch address + loadsp 4 + + and + + ; fetch boolean & neg mask + loadsp 12 + not + + ; calc address & mask for branch + loadsp 8 + loadsp 16 + add + ; subtract 1 to find PC of branch instruction + im -1 + add + + and + + or + + storesp 4 + storesp 4 + storesp 4 + poppc + + +# opcode 56 +# offset 0x0000 0300 + .balign 32,0 + .globl _neqbranch +_neqbranch: + loadsp 8 + + ; neq + + not + loadsp 0 + im 1 + add + not + and + flip + + not + + im 1 + and + + ; mask + im -1 + add + loadsp 0 + storesp 16 + + ; no branch address + loadsp 4 + + and + + ; fetch boolean & neg mask + loadsp 12 + not + + ; calc address & mask for branch + loadsp 8 + loadsp 16 + add + ; find address of branch instruction + im -1 + add + + and + + or + + storesp 4 + storesp 4 + storesp 4 + poppc + +# opcode 57 +# offset 0x0000 0320 + .balign 32,0 + .globl _poppcrel +_poppcrel: + add + ; address of poppcrel + im -1 + add + poppc + +# opcode 58 +# offset 0x0000 0340 + .balign 32,0 + .globl _config +_config: + im 1 + nop + im _hardware + store + storesp 4 + poppc + +# opcode 59 +# offset 0x0000 0360 + .balign 32,0 +_pushpc: + loadsp 4 + im 1 + add + storesp 8 + poppc + +# opcode 60 +# offset 0x0000 0380 + .balign 32,0 +_syscall_emulate: + .byte 0 + +# opcode 61 +# offset 0x0000 03a0 + .balign 32,0 +_pushspadd: + pushsp + im 4 + add + loadsp 8 + addsp 0 + addsp 0 + add + storesp 8 + + poppc + +# opcode 62 +# offset 0x0000 03c0 + .balign 32,0 +_halfmult: + breakpoint + +# opcode 63 +# offset 0x0000 03e0 + .balign 32,0 +_callpcrel: + loadsp 4 + loadsp 4 + add + im -1 + add + loadsp 4 + + storesp 12 ; return address + storesp 4 + pushsp ; this will flush the internal stack. + popsp + poppc + + .text + + + + +_ashiftleftBegin: + .rept 0x1f + addsp 0 + .endr +_ashiftleftEnd: + storesp 12 + storesp 4 + poppc + +_storebtail: + loadsp 12 + im 0xff + and + loadsp 12 + im 3 + and + + fast_neg + im 3 + add + ; x8 + addsp 0 + addsp 0 + addsp 0 + + ashiftleft + + or + + loadsp 8 + im ~0x3 + and + + store + + storesp 4 + storesp 4 + poppc + + + + +; NB! this is not an EMULATE instruction. It is a varargs fn. + .globl _syscall +_syscall: + syscall + poppc + +_slowmultImpl: + + loadsp 8 ; A + loadsp 8 ; B + im 0 ; C + +.LmoreMult: + mult1bit + + ; cutoff + loadsp 8 + .byte (.LmoreMult-.Lbranch)&0x7f+0x80 +.Lbranch: + neqbranch + + storesp 4 + storesp 4 + storesp 12 + storesp 4 + poppc + + .data + .balign 4,0 +_mask: + .long 0x00ffffff + .long 0xff00ffff + .long 0xffff00ff + .long 0xffffff00 + + + .globl _hardware +_hardware: + .long 0 + .globl _cpu_config +_cpu_config: + .long 0 + diff --git a/zpu/sw/startup/crt_io.c b/zpu/sw/startup/crt_io.c new file mode 100644 index 0000000..966ae33 --- /dev/null +++ b/zpu/sw/startup/crt_io.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include + +extern int _hardware; +/* _cpu_config==0 => Abel + * _cpu_config==1 => Zeta + * _cpu_config==2 => Phi + */ +extern int _cpu_config; +static volatile int *UART; +static volatile int *TIMER; +volatile int *MHZ; + + + +/* + * Wait indefinitely for input byte + */ + + +int __attribute__ ((weak)) inbyte() +{ + int val; + for (;;) + { + val=UART[1]; + if ((val&0x100)!=0) + { + return val&0xff; + } + } +} + + + +/* + * Output one character to the serial port + * + * + */ +void __attribute__ ((weak)) outbyte(int c) +{ + /* Wait for space in FIFO */ + while ((UART[0]&0x100)==0); + UART[0]=c; +} + +static const int mhz=64; + +void __attribute__ ((weak)) _initIO(void) +{ + if (_hardware) + { + if (_cpu_config==2) + { + /* Phi board addresses */ + UART=(volatile int *)0x080a000c; + TIMER=(volatile int *)0x080a0014; + MHZ=(volatile int *)&mhz; + } else + { + /* Abel board */ + UART=(volatile int *)0xc000; + TIMER=(volatile int *)0x9000; + MHZ=(volatile int *)0x8800; + } + } else + { + UART=(volatile int *)0x80000024; + TIMER=(volatile int *)0x80000100; + MHZ=(volatile int *)0x80000200; + } +} + + + +long long __attribute__ ((weak)) _readCycles() +{ + long long clock; + unsigned int i; + + TIMER[0]=0x2; /* sample timer */ + clock=0; + for (i=0; i<2; i++) + { + clock|=((long long )(TIMER[i]))<<(i*32); + } + return clock; +} diff --git a/zpu/sw/startup/time.c b/zpu/sw/startup/time.c new file mode 100644 index 0000000..767b62f --- /dev/null +++ b/zpu/sw/startup/time.c @@ -0,0 +1,32 @@ +#include <_ansi.h> +#include +#include + +extern long long _readCycles(); + + +extern volatile int *MHZ; + +long long _readMicroseconds() +{ + int Hz; + long long clock; + Hz=(*MHZ&0xff); + clock=_readCycles(); + return clock/(long long)Hz; +} + + + + +time_t +time (time_t *tloc) +{ + time_t t; + t=(time_t)(_readMicroseconds()/(long long )1000000); + if (tloc!=NULL) + { + *tloc=t; + } + return t; +} -- cgit v1.1 From 7792f314b6b259b9d5088337dad4c9e8519ce095 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 18 Aug 2008 12:28:59 +0000 Subject: very early work. --- zpu/docs/zpu_arch.html | 6 + zpu/sw/startup/nextgen_crt0.S | 894 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 900 insertions(+) create mode 100644 zpu/sw/startup/nextgen_crt0.S diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index d8d982d..21b7df5 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1335,6 +1335,12 @@ pushed onto stack before jumping to unkonwn instruction vector. This makes it po to write denser microcode for missing instructions. For emulated opcodes that are not in use, the microcode can more easily be disabled. Determining that e.g. MULT is not used, can be a bit tricky, but disabling it is easy. +

        +The address of this entry will be 0x10. The reason 0x00 is not used is that +GCC needs 0x00-0x0b inclusive to store R0-R2(memory mapped GCC registers). +The reset vector remains 0x0 so the 0x00-0x0f addresses contains the +first few instructions executed by the ZPU. Some very early work has been +done in nextgen_crt0.S.

      25. Single entry for *all* unknown instructions does not limit emulation to the EMULATE instructions today, but instructions such as OR, LOADSP, STORESP, ADDSP, etc. can also be emulated. This opens up for further reduction in logic usage. diff --git a/zpu/sw/startup/nextgen_crt0.S b/zpu/sw/startup/nextgen_crt0.S new file mode 100644 index 0000000..3cf9112 --- /dev/null +++ b/zpu/sw/startup/nextgen_crt0.S @@ -0,0 +1,894 @@ +/* Startup code for ZPU + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file with other programs, and to distribute +those programs without any restriction coming from the use of this +file. (The General Public License restrictions do apply in other +respects; for example, they cover modification of the file, and +distribution when not linked into another program.) + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + .file "crt0.S" + + .section ".fixed_vectors","ax" + + + + + .macro fast_neg + not + im 1 + add + .endm + + .macro cimpl funcname + ; save R0 + im 0 + load + + ; save R1 + im 4 + load + + ; save R2 + im 8 + load + + loadsp 20 + loadsp 20 + + fixedim \funcname + call + + ; destroy arguments on stack + storesp 0 + storesp 0 + + im 0 + load + + ; poke the result into the right slot + storesp 24 + + ; restore R2 + im 8 + store + + ; restore R1 + im 4 + store + + ; restore r0 + im 0 + store + + storesp 4 + poppc + .endm + + + + +/* vectors */ + .balign 32,0 +# offset 0x0000 0000 + .globl _start +_start: + im _premain + poppc + + .balign 16,0 +# offset 0x0000 0010 + .globl _zpu_unknown_instruction_vector +_zpu_unknown_instruction: + /* We have unsupported instruction * 4 on stack */ + im _emulate_table + add + load + poppc + + .rodata + .balign 4,0 +_emulate_table: + .long _storeh + .long ... + +/* instruction emulation code */ + +# opcode 34 +# offset 0x0000 0040 + .balign 32,0 +_loadh: + loadsp 4 + ; by not masking out bit 0, we cause a memory access error + ; on unaligned access + im ~0x2 + and + load + + ; mult 8 + loadsp 8 + im 3 + and + fast_neg + im 2 + add + im 3 + ashiftleft + ; shift right addr&3 * 8 + lshiftright + im 0xffff + and + storesp 8 + + poppc + +# opcode 35 +# offset 0x0000 0060 + .balign 32,0 +_storeh: + loadsp 4 + ; by not masking out bit 0, we cause a memory access error + ; on unaligned access + im ~0x2 + and + load + + ; mask + im 0xffff + loadsp 12 + im 3 + and + fast_neg + im 2 + add + im 3 + ashiftleft + ashiftleft + not + + and + + loadsp 12 + im 0xffff + + nop + + fixedim _storehtail + poppc + + +# opcode 36 +# offset 0x0000 0080 + .balign 32,0 +_lessthan: + loadsp 8 + fast_neg + loadsp 8 + add + + ; DANGER!!!! + ; 0x80000000 will overflow when negated, so we need to mask + ; the result above with the compare positive to negative + ; number case + loadsp 12 + loadsp 12 + not + and + not + and + + + ; handle case where we are comparing a negative number + ; and positve number. This can underflow. E.g. consider 0x8000000 < 0x1000 + loadsp 12 + not + loadsp 12 + and + + or + + + + flip + im 1 + and + + + storesp 12 + storesp 4 + poppc + + +# opcode 37 +# offset 0x0000 00a0 + .balign 32,0 +_lessthanorequal: + loadsp 8 + loadsp 8 + lessthan + loadsp 12 + loadsp 12 + eq + or + + storesp 12 + storesp 4 + poppc + + +# opcode 38 +# offset 0x0000 00c0 + .balign 32,0 +_ulessthan: + ; fish up arguments + loadsp 4 + loadsp 12 + + /* low: -1 if low bit dif is negative 0 otherwise: neg (not x&1 and (y&1)) + x&1 y&1 neg (not x&1 and (y&1)) + 1 1 0 + 1 0 0 + 0 1 -1 + 0 0 0 + + */ + loadsp 4 + not + loadsp 4 + and + im 1 + and + neg + + + /* high: upper 31-bit diff is only wrong when diff is 0 and low=-1 + high=x>>1 - y>>1 + low + + extremes + + 0000 - 1111: + low= neg(not 0 and 1) = 1111 (-1) + high=000+ neg(111) +low = 000 + 1001 + low = 1000 + OK + + 1111 - 0000 + low=neg(not 1 and 0) = 0 + high=111+neg(000) + low = 0111 + OK + + + */ + loadsp 8 + + flip + addsp 0 + flip + + loadsp 8 + + flip + addsp 0 + flip + + sub + + ; if they are equal, then the last bit decides... + add + + /* test if negative: result = flip(diff) & 1 */ + flip + im 1 + and + + ; destroy a&b which are on stack + storesp 4 + storesp 4 + + storesp 12 + storesp 4 + poppc + +# opcode 39 +# offset 0x0000 00e0 + .balign 32,0 +_ulessthanorequal: + loadsp 8 + loadsp 8 + ulessthan + loadsp 12 + loadsp 12 + eq + or + + storesp 12 + storesp 4 + poppc + + +# opcode 40 +# offset 0x0000 0100 + .balign 32,0 + .globl _swap +_swap: + breakpoint ; tbd + +# opcode 41 +# offset 0x0000 0120 + .balign 32,0 +_slowmult: + im _slowmultImpl + poppc + +# opcode 42 +# offset 0x0000 0140 + .balign 32,0 +_lshiftright: + loadsp 8 + flip + + loadsp 8 + ashiftleft + flip + + storesp 12 + storesp 4 + + poppc + + +# opcode 43 +# offset 0x0000 0160 + .balign 32,0 +_ashiftleft: + loadsp 8 + + loadsp 8 + im 0x1f + and + fast_neg + im _ashiftleftEnd + add + poppc + + + +# opcode 44 +# offset 0x0000 0180 + .balign 32,0 +_ashiftright: + loadsp 8 + loadsp 8 + lshiftright + + ; handle signed value + im -1 + loadsp 12 + im 0x1f + and + lshiftright + not ; now we have an integer on the stack with the signed + ; bits in the right position + + ; mask these bits with the signed bit. + loadsp 16 + not + flip + im 1 + and + im -1 + add + + and + + ; stuff in the signed bits... + or + + ; store result into correct stack slot + storesp 12 + + ; move up return value + storesp 4 + poppc + +# opcode 45 +# offset 0x0000 01a0 + .balign 32,0 +_call: + ; fn + loadsp 4 + + ; return address + loadsp 4 + + ; store return address + storesp 12 + + ; fn to call + storesp 4 + + pushsp ; flush internal stack + popsp + + poppc + +_storehtail: + + and + loadsp 12 + im 3 + and + fast_neg + im 2 + add + im 3 + ashiftleft + nop + ashiftleft + + or + + loadsp 8 + im ~0x3 + and + + store + + storesp 4 + storesp 4 + poppc + + +# opcode 46 +# offset 0x0000 01c0 + .balign 32,0 +_eq: + loadsp 8 + fast_neg + loadsp 8 + add + + not + loadsp 0 + im 1 + add + not + and + flip + im 1 + and + + storesp 12 + storesp 4 + poppc + +# opcode 47 +# offset 0x0000 01e0 + .balign 32,0 +_neq: + loadsp 8 + fast_neg + loadsp 8 + add + + not + loadsp 0 + im 1 + add + not + and + flip + + not + + im 1 + and + + storesp 12 + storesp 4 + poppc + + +# opcode 48 +# offset 0x0000 0200 + .balign 32,0 +_neg: + loadsp 4 + not + im 1 + add + storesp 8 + + poppc + + +# opcode 49 +# offset 0x0000 0220 + .balign 32,0 +_sub: + loadsp 8 + loadsp 8 + fast_neg + add + storesp 12 + + storesp 4 + + poppc + + +# opcode 50 +# offset 0x0000 0240 + .balign 32,0 +_xor: + loadsp 8 + not + loadsp 8 + and + + loadsp 12 + loadsp 12 + not + and + + or + + storesp 12 + storesp 4 + poppc + +# opcode 51 +# offset 0x0000 0260 + .balign 32,0 +_loadb: + loadsp 4 + im ~0x3 + and + load + + loadsp 8 + im 3 + and + fast_neg + im 3 + add + ; x8 + addsp 0 + addsp 0 + addsp 0 + + lshiftright + + im 0xff + and + storesp 8 + + poppc + + +# opcode 52 +# offset 0x0000 0280 + .balign 32,0 +_storeb: + loadsp 4 + im ~0x3 + and + load + + ; mask away destination + im _mask + loadsp 12 + im 3 + and + addsp 0 + addsp 0 + add + load + + and + + + im _storebtail + poppc + +# opcode 53 +# offset 0x0000 02a0 + .balign 32,0 +_div: + cimpl __divsi3 + +# opcode 54 +# offset 0x0000 02c0 + .balign 32,0 +_mod: + cimpl __modsi3 + +# opcode 55 +# offset 0x0000 02e0 + .balign 32,0 + .globl _eqbranch +_eqbranch: + loadsp 8 + + ; eq + + not + loadsp 0 + im 1 + add + not + and + flip + im 1 + and + + ; mask + im -1 + add + loadsp 0 + storesp 16 + + ; no branch address + loadsp 4 + + and + + ; fetch boolean & neg mask + loadsp 12 + not + + ; calc address & mask for branch + loadsp 8 + loadsp 16 + add + ; subtract 1 to find PC of branch instruction + im -1 + add + + and + + or + + storesp 4 + storesp 4 + storesp 4 + poppc + + +# opcode 56 +# offset 0x0000 0300 + .balign 32,0 + .globl _neqbranch +_neqbranch: + loadsp 8 + + ; neq + + not + loadsp 0 + im 1 + add + not + and + flip + + not + + im 1 + and + + ; mask + im -1 + add + loadsp 0 + storesp 16 + + ; no branch address + loadsp 4 + + and + + ; fetch boolean & neg mask + loadsp 12 + not + + ; calc address & mask for branch + loadsp 8 + loadsp 16 + add + ; find address of branch instruction + im -1 + add + + and + + or + + storesp 4 + storesp 4 + storesp 4 + poppc + +# opcode 57 +# offset 0x0000 0320 + .balign 32,0 + .globl _poppcrel +_poppcrel: + add + ; address of poppcrel + im -1 + add + poppc + +# opcode 58 +# offset 0x0000 0340 + .balign 32,0 + .globl _config +_config: + im 1 + nop + im _hardware + store + storesp 4 + poppc + +# opcode 59 +# offset 0x0000 0360 + .balign 32,0 +_pushpc: + loadsp 4 + im 1 + add + storesp 8 + poppc + +# opcode 60 +# offset 0x0000 0380 + .balign 32,0 +_syscall_emulate: + .byte 0 + +# opcode 61 +# offset 0x0000 03a0 + .balign 32,0 +_pushspadd: + pushsp + im 4 + add + loadsp 8 + addsp 0 + addsp 0 + add + storesp 8 + + poppc + +# opcode 62 +# offset 0x0000 03c0 + .balign 32,0 +_halfmult: + breakpoint + +# opcode 63 +# offset 0x0000 03e0 + .balign 32,0 +_callpcrel: + loadsp 4 + loadsp 4 + add + im -1 + add + loadsp 4 + + storesp 12 ; return address + storesp 4 + pushsp ; this will flush the internal stack. + popsp + poppc + + .text + + + + +_ashiftleftBegin: + .rept 0x1f + addsp 0 + .endr +_ashiftleftEnd: + storesp 12 + storesp 4 + poppc + +_storebtail: + loadsp 12 + im 0xff + and + loadsp 12 + im 3 + and + + fast_neg + im 3 + add + ; x8 + addsp 0 + addsp 0 + addsp 0 + + ashiftleft + + or + + loadsp 8 + im ~0x3 + and + + store + + storesp 4 + storesp 4 + poppc + + + + +; NB! this is not an EMULATE instruction. It is a varargs fn. + .globl _syscall +_syscall: + syscall + poppc + +_slowmultImpl: + + loadsp 8 ; A + loadsp 8 ; B + im 0 ; C + +.LmoreMult: + mult1bit + + ; cutoff + loadsp 8 + .byte (.LmoreMult-.Lbranch)&0x7f+0x80 +.Lbranch: + neqbranch + + storesp 4 + storesp 4 + storesp 12 + storesp 4 + poppc + + .data + .balign 4,0 +_mask: + .long 0x00ffffff + .long 0xff00ffff + .long 0xffff00ff + .long 0xffffff00 + + + .globl _hardware +_hardware: + .long 0 + .globl _cpu_config +_cpu_config: + .long 0 + +; Pointers to emulated instructions -- cgit v1.1 From 16b20b21e402e6463b89f5a942073f19daaaecb8 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 18 Aug 2008 16:14:38 +0000 Subject: wip --- zpu/docs/zpu_arch.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 21b7df5..f6fd8d1 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -10,6 +10,7 @@
      26. Jump vectors
      27. Memory map
      28. Interrupts +
      29. Wishbone
      30. About zpu_core_small.vhd
      31. About zpu_core.vhd
      32. Next generation ZPU @@ -1265,6 +1266,16 @@ memory map below. + +

        Wishbone

        +In
        hdl/wishbone there is an implementation +of a wishbone bridge. +

        +However this wishbone bridge was used together with the hdl/zy2000 implementation +of the ZPU, which differs slightly from hdl/zpu4/core. +

        +The ZY2000 is a complete implementation of the ZPU including: DRAM, soft-MAC, wishbone bridges, GPIO subsystem, +etc. This also included an eCos HAL w/TCP/IP support.

        Interrupts

        The ZPU supports interrupts. -- cgit v1.1 From 952bcd56f3b4e412594920ef02d9d740b3ce119a Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 21 Aug 2008 21:12:57 +0000 Subject: merging in some docs to zpu_arch.html --- zpu/docs/images/gccgdb.PNG | Bin 0 -> 34473 bytes zpu/docs/images/zpusim.PNG | Bin 0 -> 17817 bytes zpu/docs/zpu_arch.html | 106 +++++++++++++++++++++++++++++++++++++++---- zpu/hdl/index.html | 49 -------------------- zpu/index.html | 20 -------- zpu/sw/helloworld/gccgdb.PNG | Bin 34473 -> 0 bytes zpu/sw/helloworld/zpusim.PNG | Bin 17817 -> 0 bytes zpu/sw/index.html | 44 ------------------ 8 files changed, 98 insertions(+), 121 deletions(-) create mode 100644 zpu/docs/images/gccgdb.PNG create mode 100644 zpu/docs/images/zpusim.PNG delete mode 100644 zpu/hdl/index.html delete mode 100644 zpu/index.html delete mode 100644 zpu/sw/helloworld/gccgdb.PNG delete mode 100644 zpu/sw/helloworld/zpusim.PNG delete mode 100644 zpu/sw/index.html diff --git a/zpu/docs/images/gccgdb.PNG b/zpu/docs/images/gccgdb.PNG new file mode 100644 index 0000000..afdfc31 Binary files /dev/null and b/zpu/docs/images/gccgdb.PNG differ diff --git a/zpu/docs/images/zpusim.PNG b/zpu/docs/images/zpusim.PNG new file mode 100644 index 0000000..d8fc277 Binary files /dev/null and b/zpu/docs/images/zpusim.PNG differ diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index f6fd8d1..84ccc1a 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -2,8 +2,9 @@

        Index

        - -

        Getting started

        -The ZPU comes with a few simulation examples. + +
        +

        Getting started - FPGA

        +The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART +is a good place to start. +

        +You'll find a working simulation script in hdl/example/simzpu_small.do and hdl/example_medium/simzpu_medium.do, which +show simulation of the small(zpu_core_small.vhd) and medium sized ZPU(zpu_core.vhd). hdl/example/simzpu_interrupt.do +shows use of interrupts. +

        +When implementing the ZPU, copy the following files and modify them to your needs: +

          +
        1. hdl/example/zpu_config.vhd - set up RAM size here +
        2. hdl/example/helloworld.vhd - dual port BRAM implementation. +
        +Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is memory mapped(read/write) in the ZPU. +

        Generating VHDL BRAM initialization

        + + +../install/bin/zpu-elf-objcopy -O binary hello.elf hello.bin
        +java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
        + +
        +

        Running example simulation

        +The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt: +
          +
        1. cd c:/<installfolder>/hdl/example +
        2. do zpusim_small.do +
        +

        +After running the hello world simulation (see zpusim.do), two files are written to the hdl/example directory: +

          +
        1. log.txt - contains the "Hello world!" text written to the debug channel/simplified UART. +
        2. trace.txt - a trace file for the CPU. The instruction set simulator has the capability of taking +this file as input in order to verify that the HDL implementation matches the instruction set simulator. +When a mismatch is found, the GDB debugger will break. Very handy for debugging custom ZPU implementations. +
        +

        HDL Directories & files

        +
          +
        • example - contains example files & working ZPU. Start here. +
        • wishbone - contains wishbone interface for the ZPU +
        • zpu3 - if you are interested in developing ZPU cores and not only using them, then this directory contains various stuff of more or less historical interest. +
        • zpu4 - if you are interested in developing ZPU cores and not only using them, then this is the active development version. You'll also want to copy out the +files you need from this folder to your own project. +
        + +The HDL files need a bit of spit and polish! + +
        +

        Getting started - software

        +The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has +some very basic peripherals defined: counter, timer interrupt and a debug output port. +

        Installing

        +
          +
        1. Install Cygwin. http://www.cygwin.com +
        2. Install Java +
        3. Start Cygwin bash +
        4. cd zpu/sw +
        5. sh setup.sh +
        6. /tmp/zpu/install/bin now has the .exe files for the GCC toolchain & GDB +
        7. Optionally you may set up PATH variables to point to /tmp/zpu/install/bin
          +source env.sh +
        +

        Hello world example

        +The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. +

        + +cd zpu/sw/helloworld
        +../install/bin/zpu-elf-gcc -phi hello.c -o hello.elf
        +
        +

        Running the hello world example in GDB

        +
          +
        1. cd zpu/sw/helloworld +
        2. Launch the simulator from a seperate bash shell:

          +java -classpath ../simulator/zpusim.jar -Xmx512m com.zylin.zpu.simulator.Phi 4444 +

          + +

        3. Launch GDB:

          +../install/bin/zpu-elf-gdb hello.elf +

        4. Connect to target, load and run application:

          + +(gdb) target remote localhost:4444
          +(gdb) load
          +(gdb) continue
          +

          -Start with VHDL synthesis examples + + +

        + + -

        Introduction

        +

        Architecture introduction

        The ZPU is a zero operand, or stack based CPU. The opcodes have a fixed width of 8 bits.

        Example: @@ -893,7 +980,8 @@ the right choices w.r.t. optimisation for your application.

        Phi memory map

        The ZPU architecture does not define a memory map as such, but the GCC + libgloss + ecos hal library uses the -memory map below. +memory map below. "Phi" is just a three letter word for the particular memory layout below that came about +while developing the ZPU.

        @@ -1387,5 +1475,7 @@ For this to make sense, the performance must hit 20 DMIPS w/DRAM & cache. This ZPU could run a TCP/IP stack with relevant performance to compete with stripped down ARM7 type systems. + + \ No newline at end of file diff --git a/zpu/hdl/index.html b/zpu/hdl/index.html deleted file mode 100644 index e206113..0000000 --- a/zpu/hdl/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - -

        Getting started - FPGA

        -The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART -is a good place to start. -

        -You'll find a working simulation script in hdl/example/simzpu_small.do and hdl/example_medium/simzpu_medium.do, which -show simulation of the small(zpu_core_small.vhd) and medium sized ZPU(zpu_core.vhd). hdl/example/simzpu_interrupt.do -shows use of interrupts. -

        -When implementing the ZPU, copy the following files and modify them to your needs: -

          -
        1. hdl/example/zpu_config.vhd - set up RAM size here -
        2. hdl/example/helloworld.vhd - dual port BRAM implementation. -
        -Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is memory mapped(read/write) in the ZPU. -

        Generating VHDL BRAM initialization

        - - -../install/bin/zpu-elf-objcopy -O binary hello.elf hello.bin
        -java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
        - -
        -

        Running example simulation

        -The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt: -
          -
        1. cd c:/<installfolder>/hdl/example -
        2. do zpusim_small.do -
        -

        -After running the hello world simulation (see zpusim.do), two files are written to the hdl/example directory: -

          -
        1. log.txt - contains the "Hello world!" text written to the debug channel/simplified UART. -
        2. trace.txt - a trace file for the CPU. The instruction set simulator has the capability of taking -this file as input in order to verify that the HDL implementation matches the instruction set simulator. -When a mismatch is found, the GDB debugger will break. Very handy for debugging custom ZPU implementations. -
        -

        HDL Directories & files

        -
          -
        • example - contains example files & working ZPU. Start here. -
        • wishbone - contains wishbone interface for the ZPU -
        • zpu3 - if you are interested in developing ZPU cores and not only using them, then this directory contains various stuff of more or less historical interest. -
        • zpu4 - if you are interested in developing ZPU cores and not only using them, then this is the active development version. You'll also want to copy out the -files you need from this folder to your own project. -
        - -The HDL files need a bit of spit and polish! - - diff --git a/zpu/index.html b/zpu/index.html deleted file mode 100644 index 7343ab6..0000000 --- a/zpu/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - -

        Getting started

        -FPGA: check out zpu/hdl, read zpu/hdl/index.html -

        -Software: check out zpu/sw, read zpu/sw/index.html -

        -Docs: start with ZPU architecture doc -

        Other directories

        -You probably don't need or want to download other directories. -
          -
        • -gccsrc - the complete GCC toolchain source. Big! Almost certainly not something you need or want to download. This has been moved to /trunk/zpugccsrc to -avoid subversion choking. -
        • roadshow - various bits and bobs to demonstrate the ZPU that has not been sorted/reorganized yet. - -
        - - - diff --git a/zpu/sw/helloworld/gccgdb.PNG b/zpu/sw/helloworld/gccgdb.PNG deleted file mode 100644 index afdfc31..0000000 Binary files a/zpu/sw/helloworld/gccgdb.PNG and /dev/null differ diff --git a/zpu/sw/helloworld/zpusim.PNG b/zpu/sw/helloworld/zpusim.PNG deleted file mode 100644 index d8fc277..0000000 Binary files a/zpu/sw/helloworld/zpusim.PNG and /dev/null differ diff --git a/zpu/sw/index.html b/zpu/sw/index.html deleted file mode 100644 index fd0a1b4..0000000 --- a/zpu/sw/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - -

        Getting started - a ZPU hello world program

        -The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has -some very basic peripherals defined: counter, timer interrupt and a debug output port. -

        Installing

        -
          -
        1. Install Cygwin. http://www.cygwin.com -
        2. Install Java -
        3. Start Cygwin bash -
        4. cd zpu/sw -
        5. sh setup.sh -
        6. /tmp/zpu/install/bin now has the .exe files for the GCC toolchain & GDB -
        7. Optionally you may set up PATH variables to point to /tmp/zpu/install/bin
          -source env.sh -
        -

        Hello world example

        -The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. -

        - -cd zpu/sw/helloworld
        -../install/bin/zpu-elf-gcc -phi hello.c -o hello.elf
        -
        -

        Running the hello world example in GDB

        -
          -
        1. cd zpu/sw/helloworld -
        2. Launch the simulator from a seperate bash shell:

          -java -classpath ../simulator/zpusim.jar -Xmx512m com.zylin.zpu.simulator.Phi 4444 -

          - -

        3. Launch GDB:

          -../install/bin/zpu-elf-gdb hello.elf -

        4. Connect to target, load and run application:

          - -(gdb) target remote localhost:4444
          -(gdb) load
          -(gdb) continue
          -
          -

          - - - - - -- cgit v1.1 From 7e91fb42c0e203a15024f9d5014e2df516fbb037 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 21 Aug 2008 21:22:59 +0000 Subject: added some notes on speeding up the ZPU --- zpu/docs/zpu_arch.html | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 84ccc1a..c7e20bc 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -11,6 +11,7 @@

        5. Jump vectors
        6. Memory map
        7. Interrupts +
        8. Speeding up the ZPU
        9. Wishbone
        10. About zpu_core_small.vhd
        11. About zpu_core.vhd @@ -1409,6 +1410,46 @@ The tricky bit is that there is a tiny bit of interleaving of states since the BRAM takes a cycle to perform a fetch/store. The above is the normal states the ZPU cycles through unless memory fetch, jumps, etc. take place. + +

          Speeding up the ZPU

          +There are two aspects of speeding up the ZPU: making it perform better +for a particular application and toying around with the ZPU architecture. +

          Performance tips

          +
            +
          1. Profile. Create a small sample and run in a simulator that is as close +to the real deployment as possible. zpu4/core/histogram.perl is a script +that will tell you which instructions take the most time. +
          2. Using the profile output, decide on which emulated instructions that +it makes sense to implement in HDL for your particular application. Modifying +zpu_core_small.vhd is not particularly hard. Most instructions can be +transliterated into zpu_core_small.vhd from zpu_core.vhd without too much +problem. +
          3. The memory subsystem may well turn out to be where you should concentrate +your efforts. +
          +

          Toying around with the architecture

          +Again: profile 90% of the time and spend the remaining 10% tinkering +with the architecture. +
            +
          • There is a DMIPS program you can use to measure the performance of +the ZPU in lieu of profiling a real application. The latter is obviously +a superior solution. +
          • Again: use histogram.perl to figure out which instructions you should add +in HDL. +
          • Tinker a bit with Fmax to find the maximum speed rating for your design. +
          • zpu_core_small.vhd should be ca. 1 DMIPS and zpu_core.vhd should yield +about 5-10 DMIPS before adding instructions runs out of steam. +
          +If you need to get ca. 20-50 DMIPS out of the ZPU you will have to +write a heavily pipelined architecture with caches(if you are running +against DRAM). This is *tricky*, but some proof of concept work was +done to show 20 DMIPS w/the ZPU(the actual result was discarded since +it was not complete and contained fatal flaws). +

          +Achieving above 50-100 DMIPS with the current ZPU architecture is probably +a non-starter and a more conventional RISC design makes more sense here. +

          +The unique advantages of the ZPU is size in terms of HDL & code size.

          About zpu_core.vhd

          The zpu_core.vhd has a single port memory interface. All data, code and IO is -- cgit v1.1 From e19e8f1a9124a87b859bd8e1cab5ad0a07892bdd Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 21 Aug 2008 21:36:29 +0000 Subject: more docs merged into the big doc --- zpu/docs/images/GCC_logo.png | Bin 0 -> 23450 bytes zpu/docs/images/codesize1.PNG | Bin 0 -> 9329 bytes zpu/docs/images/codesize2.PNG | Bin 0 -> 16967 bytes zpu/docs/images/ecos.gif | Bin 0 -> 1660 bytes zpu/docs/images/elizadebug1.PNG | Bin 0 -> 72126 bytes zpu/docs/images/elizadebug2.PNG | Bin 0 -> 67822 bytes zpu/docs/zpu_arch.html | 203 +++++++++++++++++++++++++++++ zpu/roadshow/roadshow/codesize/index.html | 58 --------- zpu/roadshow/roadshow/ecos/index.html | 145 --------------------- zpu/roadshow/roadshow/pics/GCC_logo.png | Bin 23450 -> 0 bytes zpu/roadshow/roadshow/pics/codesize1.PNG | Bin 9329 -> 0 bytes zpu/roadshow/roadshow/pics/codesize2.PNG | Bin 16967 -> 0 bytes zpu/roadshow/roadshow/pics/ecos.gif | Bin 1660 -> 0 bytes zpu/roadshow/roadshow/pics/elizadebug1.PNG | Bin 72126 -> 0 bytes zpu/roadshow/roadshow/pics/elizadebug2.PNG | Bin 67822 -> 0 bytes 15 files changed, 203 insertions(+), 203 deletions(-) create mode 100644 zpu/docs/images/GCC_logo.png create mode 100644 zpu/docs/images/codesize1.PNG create mode 100644 zpu/docs/images/codesize2.PNG create mode 100644 zpu/docs/images/ecos.gif create mode 100644 zpu/docs/images/elizadebug1.PNG create mode 100644 zpu/docs/images/elizadebug2.PNG delete mode 100644 zpu/roadshow/roadshow/codesize/index.html delete mode 100644 zpu/roadshow/roadshow/ecos/index.html delete mode 100644 zpu/roadshow/roadshow/pics/GCC_logo.png delete mode 100644 zpu/roadshow/roadshow/pics/codesize1.PNG delete mode 100644 zpu/roadshow/roadshow/pics/codesize2.PNG delete mode 100644 zpu/roadshow/roadshow/pics/ecos.gif delete mode 100644 zpu/roadshow/roadshow/pics/elizadebug1.PNG delete mode 100644 zpu/roadshow/roadshow/pics/elizadebug2.PNG diff --git a/zpu/docs/images/GCC_logo.png b/zpu/docs/images/GCC_logo.png new file mode 100644 index 0000000..7b3435f Binary files /dev/null and b/zpu/docs/images/GCC_logo.png differ diff --git a/zpu/docs/images/codesize1.PNG b/zpu/docs/images/codesize1.PNG new file mode 100644 index 0000000..874ee9d Binary files /dev/null and b/zpu/docs/images/codesize1.PNG differ diff --git a/zpu/docs/images/codesize2.PNG b/zpu/docs/images/codesize2.PNG new file mode 100644 index 0000000..caa8c14 Binary files /dev/null and b/zpu/docs/images/codesize2.PNG differ diff --git a/zpu/docs/images/ecos.gif b/zpu/docs/images/ecos.gif new file mode 100644 index 0000000..3dad40c Binary files /dev/null and b/zpu/docs/images/ecos.gif differ diff --git a/zpu/docs/images/elizadebug1.PNG b/zpu/docs/images/elizadebug1.PNG new file mode 100644 index 0000000..f3c3f5f Binary files /dev/null and b/zpu/docs/images/elizadebug1.PNG differ diff --git a/zpu/docs/images/elizadebug2.PNG b/zpu/docs/images/elizadebug2.PNG new file mode 100644 index 0000000..13f046e Binary files /dev/null and b/zpu/docs/images/elizadebug2.PNG differ diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index c7e20bc..280cda3 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -15,7 +15,12 @@
        12. Wishbone
        13. About zpu_core_small.vhd
        14. About zpu_core.vhd +
        15. Optimizing for code size +
        16. Installing eCos build tools + +
        17. Next generation ZPU + @@ -1457,6 +1462,204 @@ accessed through this memory interface.

          It performs better(despite having less memory bandwidth than zpu_core_small.vhd) since it implements many more instructions. +

          Compiling hello world program with the ZPU GCC toolchain

          +The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has +some very basic peripherals defined: counter, timer interrupt and a debug output port. +

          Installation

          +
            +
          1. Install Cygwin. http://www.cygwin.com +
          2. Start Cygwin bash +
          3. unzip zputoolchain.zip +
          4. Add install/bin from zputoolchain.zip to PATH.
            +export PATH=$PATH:/install/bin +
          +

          Hello world example

          +The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. +

          + +zpu-elf-gcc -Os -zeta hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
          +zpu-elf-size hello.elf
          +
          + +
          +

          Optimizing for code size

          +The ZPU toolchain produces highly compact code. +
            +
          1. Since the ZPU GCC toolchain supports standard ANSI C, it is easy to stumble across +functionality that takes up a lot of space. E.g. the standard printf() function is a beast. Some compilers drop e.g. floating point support +from the printf() function and thus boast a "smaller" printf() when in fact they have a non-standard printf(). newlib has a standard printf() function +and an alternative iprintf() function that works only on integers. +
          2. The ZPU ships with default startup code that works across various configurations of the ZPU, so be warned that there is some overhead that will +not occurr in the final application(anywhere between 1-4kBytes). +
          3. Compilation and linker options matter. The ZPU benefits greatly from the "-Wl,--relax -Wl,--gc-sections" options which is not used by +all architectures(e.g. GCC ARM does not implement/need -Wl,--relax). +
          +

          Small code example

          + +zpu-elf-gcc -Os -abel smallstd.c -o smallstd.elf -Wl,--relax -Wl,--gc-sections
          +zpu-elf-size small.elf
          +
          +$ zpu-elf-size small.elf
          + text data bss dec hex filename
          + 2845 952 36 3833 ef9 small.elf
          +
          +
          + +

          Even smaller code example

          +If the ZPU implements the optional instructions, the RAM overhead can be reduced significantly. +

          + +zpu-elf-gcc -Os -abel crt0_phi.S small.c -o small.elf -Wl,--relax -Wl,--gc-sections -nostdlib
          +zpu-elf-size small.elf
          +
          +$ zpu-elf-size small.elf
          + text data bss dec hex filename
          + 56 8 0 64 40 small.elf
          +
          +
          + + + +
          +

          Installing eCos build tools

          + +tar -xjvf ecossnapshot.tar.bz2
          +tar -xjvf repository.tar.bz2
          +tar -xjvf ecostools.tar.bz2
          +# run this every time you open the shell
          +export PATH=$PATH:`pwd`/ecos-install
          +export ECOS_REPOSITORY=`pwd`/ecos/packages:`pwd`/repository
          +
          +

          Compiling eCos tests

          + +ecosconfig new zeta default
          +ecosconfig tree
          +make
          +cd kernel/current
          +make tests
          +
          + +

          Code size ZPU

          + +$ zpu-elf-size *
          + text data bss dec hex filename
          + 15761 1504 12060 29325 728d bin_sem0
          + 16907 1512 14436 32855 8057 bin_sem1
          + 17105 1524 30032 48661 be15 bin_sem2
          + 17186 1512 14436 33134 816e bin_sem3
          + 18986 1500 12036 32522 7f0a clock0
          + 15812 1504 13236 30552 7758 clock1
          + 25095 1972 13224 40291 9d63 clockcnv
          + 16437 1500 13224 31161 79b9 clocktruth
          + 15762 1504 12060 29326 728e cnt_sem0
          + 17124 1512 14436 33072 8130 cnt_sem1
          + 35947 1564 22512 60023 ea77 dhrystone
          + 16428 1500 13228 31156 79b4 except1
          + 15751 1504 12052 29307 727b flag0
          + 19145 1512 15624 36281 8db9 flag1
          + 20053 1516 102908 124477 1e63d fptest
          + 15998 1496 12092 29586 7392 intr0
          + 16080 1496 12200 29776 7450 kalarm0
          + 15327 1496 12036 28859 70bb kcache1
          + 15549 1496 13224 30269 763d kcache2
          + 18291 1500 12260 32051 7d33 kclock0
          + 16231 1500 13232 30963 78f3 kclock1
          + 16572 1496 13228 31296 7a40 kexcept1
          + 15618 1496 12060 29174 71f6 kflag0
          + 19287 1500 15624 36411 8e3b kflag1
          + 16887 1516 15628 34031 84ef kill
          + 16186 1496 12128 29810 7472 kintr0
          + 19724 1504 14516 35744 8ba0 klock
          + 18283 1500 14592 34375 8647 kmbox1
          + 15539 1496 12064 29099 71ab kmutex0
          + 16524 1504 15664 33692 839c kmutex1
          + 18272 1712 20348 40332 9d8c kmutex3
          + 18682 1608 20352 40642 9ec2 kmutex4
          + 15619 1496 14412 31527 7b27 ksched1
          + 15567 1496 12060 29123 71c3 ksem0
          + 17063 1500 14436 32999 80e7 ksem1
          + 15504 1496 13228 30228 7614 kthread0
          + 16167 1496 14412 32075 7d4b kthread1
          + 18281 1512 14580 34373 8645 mbox1
          + 20611 1508 14940 37059 90c3 mqueue1
          + 15672 1504 12064 29240 7238 mutex0
          + 16678 1516 15664 33858 8442 mutex1
          + 17694 1508 16868 36070 8ce6 mutex2
          + 18203 1720 20344 40267 9d4b mutex3
          + 16352 1508 14428 32288 7e20 release
          + 15890 1500 14412 31802 7c3a sched1
          + 44196 1612 286332 332140 5116c stress_threads
          + 17891 1524 16864 36279 8db7 sync2
          + 16943 1512 15644 34099 8533 sync3
          + 15467 1496 13064 30027 754b thread0
          + 16134 1496 14420 32050 7d32 thread1
          + 17560 1512 15636 34708 8794 thread2
          + 16279 1500 24028 41807 a34f thread_gdb
          + 17051 1504 20376 38931 9813 timeslice
          + 17146 1504 21564 40214 9d16 timeslice2
          + 37313 1512 422380 461205 70995 tm_basic
          +
          +

          Code size ARM (non-thumb)

          +Thumb does not compile out of the box w/AT91 EB40a for which this test was made.

          + +$ arm-elf-size *
          + text data bss dec hex filename
          + 25204 692 16976 42872 a778 bin_sem0
          + 26644 700 22096 49440 c120 bin_sem1
          + 26996 712 55584 83292 1455c bin_sem2
          + 27008 700 22100 49808 c290 bin_sem3
          + 28992 688 16944 46624 b620 clock0
          + 25456 692 19532 45680 b270 clock1
          + 34572 1160 19520 55252 d7d4 clockcnv
          + 26224 688 19508 46420 b554 clocktruth
          + 25204 692 16976 42872 a778 cnt_sem0
          + 26888 700 22108 49696 c220 cnt_sem1
          + 44180 752 27416 72348 11a9c dhrystone
          + 26088 688 19520 46296 b4d8 except1
          + 25236 692 16968 42896 a790 flag0
          + 29532 700 24668 54900 d674 flag1
          + 29508 704 109652 139864 22258 fptest
          + 25932 684 17016 43632 aa70 intr0
          + 25824 684 17112 43620 aa64 kalarm0
          + 24728 684 16956 42368 a580 kcache1
          + 25168 684 19512 45364 b134 kcache2
          + 28112 688 17168 45968 b390 kclock0
          + 25976 688 19524 46188 b46c kclock1
          + 26372 684 19512 46568 b5e8 kexcept1
          + 25140 684 16968 42792 a728 kflag0
          + 29824 688 24660 55172 d784 kflag1
          + 26896 704 24656 52256 cc20 kill
          + 26088 684 17028 43800 ab18 kintr0
          + 30812 692 22176 53680 d1b0 klock
          + 28504 688 22260 51452 c8fc kmbox1
          + 24984 684 16984 42652 a69c kmutex0
          + 26504 692 24704 51900 cabc kmutex1
          + 28792 900 34892 64584 fc48 kmutex3
          + 29264 796 34896 64956 fdbc kmutex4
          + 25240 684 22084 48008 bb88 ksched1
          + 25044 684 16968 42696 a6c8 ksem0
          + 26988 688 22100 49776 c270 ksem1
          + 25028 684 19512 45224 b0a8 kthread0
          + 25996 684 22080 48760 be78 kthread1
          + 28552 700 22252 51504 c930 mbox1
          + 31324 696 22612 54632 d568 mqueue1
          + 25108 692 16980 42780 a71c mutex0
          + 26464 704 24700 51868 ca9c mutex1
          + 27624 696 27280 55600 d930 mutex2
          + 28596 908 34884 64388 fb84 mutex3
          + 26156 696 22100 48952 bf38 release
          + 25460 688 22084 48232 bc68 sched1
          + 56356 828 45892 103076 192a4 stress_threads
          + 27900 712 27288 55900 da5c sync2
          + 26760 700 24692 52152 cbb8 sync3
          + 24924 684 19356 44964 afa4 thread0
          + 25868 684 22084 48636 bdfc thread1
          + 27452 700 24680 52832 ce60 thread2
          + 26136 688 42704 69528 10f98 thread_gdb
          + 27212 692 34916 62820 f564 timeslice
          + 52728 700 123332 176760 2b278 tm_basic
          +
          +
          diff --git a/zpu/roadshow/roadshow/codesize/index.html b/zpu/roadshow/roadshow/codesize/index.html deleted file mode 100644 index 3f61b4e..0000000 --- a/zpu/roadshow/roadshow/codesize/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - -

          Compiling hello world program with the ZPU GCC toolchain

          -The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has -some very basic peripherals defined: counter, timer interrupt and a debug output port. -

          Installation

          -
            -
          1. Install Cygwin. http://www.cygwin.com -
          2. Start Cygwin bash -
          3. unzip zputoolchain.zip -
          4. Add install/bin from zputoolchain.zip to PATH.
            -export PATH=$PATH:/install/bin -
          -

          Hello world example

          -The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. -

          - -zpu-elf-gcc -Os -zeta hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
          -zpu-elf-size hello.elf
          -
          -

          Optimizing for size

          -The ZPU toolchain produces highly compact code. -
            -
          1. Since the ZPU GCC toolchain supports standard ANSI C, it is easy to stumble across -functionality that takes up a lot of space. E.g. the standard printf() function is a beast. Some compilers drop e.g. floating point support -from the printf() function and thus boast a "smaller" printf() when in fact they have a non-standard printf(). newlib has a standard printf() function -and an alternative iprintf() function that works only on integers. -
          2. The ZPU ships with default startup code that works across various configurations of the ZPU, so be warned that there is some overhead that will -not occurr in the final application(anywhere between 1-4kBytes). -
          3. Compilation and linker options matter. The ZPU benefits greatly from the "-Wl,--relax -Wl,--gc-sections" options which is not used by -all architectures(e.g. GCC ARM does not implement/need -Wl,--relax). -
          -

          Small code example

          - -zpu-elf-gcc -Os -abel smallstd.c -o smallstd.elf -Wl,--relax -Wl,--gc-sections
          -zpu-elf-size small.elf
          -
          -$ zpu-elf-size small.elf
          - text data bss dec hex filename
          - 2845 952 36 3833 ef9 small.elf
          -
          -
          - -

          Even smaller code example

          -If the ZPU implements the optional instructions, the RAM overhead can be reduced significantly. -

          - -zpu-elf-gcc -Os -abel crt0_phi.S small.c -o small.elf -Wl,--relax -Wl,--gc-sections -nostdlib
          -zpu-elf-size small.elf
          -
          -$ zpu-elf-size small.elf
          - text data bss dec hex filename
          - 56 8 0 64 40 small.elf
          -
          -
          - - - diff --git a/zpu/roadshow/roadshow/ecos/index.html b/zpu/roadshow/roadshow/ecos/index.html deleted file mode 100644 index 5245459..0000000 --- a/zpu/roadshow/roadshow/ecos/index.html +++ /dev/null @@ -1,145 +0,0 @@ - - -

          Installing eCos build tools

          - -tar -xjvf ecossnapshot.tar.bz2
          -tar -xjvf repository.tar.bz2
          -tar -xjvf ecostools.tar.bz2
          -# run this every time you open the shell
          -export PATH=$PATH:`pwd`/ecos-install
          -export ECOS_REPOSITORY=`pwd`/ecos/packages:`pwd`/repository
          -
          -

          Compiling eCos tests

          - -ecosconfig new zeta default
          -ecosconfig tree
          -make
          -cd kernel/current
          -make tests
          -
          - -

          Code size ZPU

          - -$ zpu-elf-size *
          - text data bss dec hex filename
          - 15761 1504 12060 29325 728d bin_sem0
          - 16907 1512 14436 32855 8057 bin_sem1
          - 17105 1524 30032 48661 be15 bin_sem2
          - 17186 1512 14436 33134 816e bin_sem3
          - 18986 1500 12036 32522 7f0a clock0
          - 15812 1504 13236 30552 7758 clock1
          - 25095 1972 13224 40291 9d63 clockcnv
          - 16437 1500 13224 31161 79b9 clocktruth
          - 15762 1504 12060 29326 728e cnt_sem0
          - 17124 1512 14436 33072 8130 cnt_sem1
          - 35947 1564 22512 60023 ea77 dhrystone
          - 16428 1500 13228 31156 79b4 except1
          - 15751 1504 12052 29307 727b flag0
          - 19145 1512 15624 36281 8db9 flag1
          - 20053 1516 102908 124477 1e63d fptest
          - 15998 1496 12092 29586 7392 intr0
          - 16080 1496 12200 29776 7450 kalarm0
          - 15327 1496 12036 28859 70bb kcache1
          - 15549 1496 13224 30269 763d kcache2
          - 18291 1500 12260 32051 7d33 kclock0
          - 16231 1500 13232 30963 78f3 kclock1
          - 16572 1496 13228 31296 7a40 kexcept1
          - 15618 1496 12060 29174 71f6 kflag0
          - 19287 1500 15624 36411 8e3b kflag1
          - 16887 1516 15628 34031 84ef kill
          - 16186 1496 12128 29810 7472 kintr0
          - 19724 1504 14516 35744 8ba0 klock
          - 18283 1500 14592 34375 8647 kmbox1
          - 15539 1496 12064 29099 71ab kmutex0
          - 16524 1504 15664 33692 839c kmutex1
          - 18272 1712 20348 40332 9d8c kmutex3
          - 18682 1608 20352 40642 9ec2 kmutex4
          - 15619 1496 14412 31527 7b27 ksched1
          - 15567 1496 12060 29123 71c3 ksem0
          - 17063 1500 14436 32999 80e7 ksem1
          - 15504 1496 13228 30228 7614 kthread0
          - 16167 1496 14412 32075 7d4b kthread1
          - 18281 1512 14580 34373 8645 mbox1
          - 20611 1508 14940 37059 90c3 mqueue1
          - 15672 1504 12064 29240 7238 mutex0
          - 16678 1516 15664 33858 8442 mutex1
          - 17694 1508 16868 36070 8ce6 mutex2
          - 18203 1720 20344 40267 9d4b mutex3
          - 16352 1508 14428 32288 7e20 release
          - 15890 1500 14412 31802 7c3a sched1
          - 44196 1612 286332 332140 5116c stress_threads
          - 17891 1524 16864 36279 8db7 sync2
          - 16943 1512 15644 34099 8533 sync3
          - 15467 1496 13064 30027 754b thread0
          - 16134 1496 14420 32050 7d32 thread1
          - 17560 1512 15636 34708 8794 thread2
          - 16279 1500 24028 41807 a34f thread_gdb
          - 17051 1504 20376 38931 9813 timeslice
          - 17146 1504 21564 40214 9d16 timeslice2
          - 37313 1512 422380 461205 70995 tm_basic
          -
          -

          Code size ARM (non-thumb)

          -Thumb does not compile out of the box w/AT91 EB40a for which this test was made.

          - -$ arm-elf-size *
          - text data bss dec hex filename
          - 25204 692 16976 42872 a778 bin_sem0
          - 26644 700 22096 49440 c120 bin_sem1
          - 26996 712 55584 83292 1455c bin_sem2
          - 27008 700 22100 49808 c290 bin_sem3
          - 28992 688 16944 46624 b620 clock0
          - 25456 692 19532 45680 b270 clock1
          - 34572 1160 19520 55252 d7d4 clockcnv
          - 26224 688 19508 46420 b554 clocktruth
          - 25204 692 16976 42872 a778 cnt_sem0
          - 26888 700 22108 49696 c220 cnt_sem1
          - 44180 752 27416 72348 11a9c dhrystone
          - 26088 688 19520 46296 b4d8 except1
          - 25236 692 16968 42896 a790 flag0
          - 29532 700 24668 54900 d674 flag1
          - 29508 704 109652 139864 22258 fptest
          - 25932 684 17016 43632 aa70 intr0
          - 25824 684 17112 43620 aa64 kalarm0
          - 24728 684 16956 42368 a580 kcache1
          - 25168 684 19512 45364 b134 kcache2
          - 28112 688 17168 45968 b390 kclock0
          - 25976 688 19524 46188 b46c kclock1
          - 26372 684 19512 46568 b5e8 kexcept1
          - 25140 684 16968 42792 a728 kflag0
          - 29824 688 24660 55172 d784 kflag1
          - 26896 704 24656 52256 cc20 kill
          - 26088 684 17028 43800 ab18 kintr0
          - 30812 692 22176 53680 d1b0 klock
          - 28504 688 22260 51452 c8fc kmbox1
          - 24984 684 16984 42652 a69c kmutex0
          - 26504 692 24704 51900 cabc kmutex1
          - 28792 900 34892 64584 fc48 kmutex3
          - 29264 796 34896 64956 fdbc kmutex4
          - 25240 684 22084 48008 bb88 ksched1
          - 25044 684 16968 42696 a6c8 ksem0
          - 26988 688 22100 49776 c270 ksem1
          - 25028 684 19512 45224 b0a8 kthread0
          - 25996 684 22080 48760 be78 kthread1
          - 28552 700 22252 51504 c930 mbox1
          - 31324 696 22612 54632 d568 mqueue1
          - 25108 692 16980 42780 a71c mutex0
          - 26464 704 24700 51868 ca9c mutex1
          - 27624 696 27280 55600 d930 mutex2
          - 28596 908 34884 64388 fb84 mutex3
          - 26156 696 22100 48952 bf38 release
          - 25460 688 22084 48232 bc68 sched1
          - 56356 828 45892 103076 192a4 stress_threads
          - 27900 712 27288 55900 da5c sync2
          - 26760 700 24692 52152 cbb8 sync3
          - 24924 684 19356 44964 afa4 thread0
          - 25868 684 22084 48636 bdfc thread1
          - 27452 700 24680 52832 ce60 thread2
          - 26136 688 42704 69528 10f98 thread_gdb
          - 27212 692 34916 62820 f564 timeslice
          - 52728 700 123332 176760 2b278 tm_basic
          -
          - - - - - diff --git a/zpu/roadshow/roadshow/pics/GCC_logo.png b/zpu/roadshow/roadshow/pics/GCC_logo.png deleted file mode 100644 index 7b3435f..0000000 Binary files a/zpu/roadshow/roadshow/pics/GCC_logo.png and /dev/null differ diff --git a/zpu/roadshow/roadshow/pics/codesize1.PNG b/zpu/roadshow/roadshow/pics/codesize1.PNG deleted file mode 100644 index 874ee9d..0000000 Binary files a/zpu/roadshow/roadshow/pics/codesize1.PNG and /dev/null differ diff --git a/zpu/roadshow/roadshow/pics/codesize2.PNG b/zpu/roadshow/roadshow/pics/codesize2.PNG deleted file mode 100644 index caa8c14..0000000 Binary files a/zpu/roadshow/roadshow/pics/codesize2.PNG and /dev/null differ diff --git a/zpu/roadshow/roadshow/pics/ecos.gif b/zpu/roadshow/roadshow/pics/ecos.gif deleted file mode 100644 index 3dad40c..0000000 Binary files a/zpu/roadshow/roadshow/pics/ecos.gif and /dev/null differ diff --git a/zpu/roadshow/roadshow/pics/elizadebug1.PNG b/zpu/roadshow/roadshow/pics/elizadebug1.PNG deleted file mode 100644 index f3c3f5f..0000000 Binary files a/zpu/roadshow/roadshow/pics/elizadebug1.PNG and /dev/null differ diff --git a/zpu/roadshow/roadshow/pics/elizadebug2.PNG b/zpu/roadshow/roadshow/pics/elizadebug2.PNG deleted file mode 100644 index 13f046e..0000000 Binary files a/zpu/roadshow/roadshow/pics/elizadebug2.PNG and /dev/null differ -- cgit v1.1 From 6f3db230ca9d2e32df61dbd6137ea963de630629 Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 22 Aug 2008 13:15:21 +0000 Subject: added uart section --- zpu/docs/zpu_arch.html | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 280cda3..5d7fc5e 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -12,6 +12,7 @@

        18. Memory map
        19. Interrupts
        20. Speeding up the ZPU +
        21. Debug channel / UART
        22. Wishbone
        23. About zpu_core_small.vhd
        24. About zpu_core.vhd @@ -1040,7 +1041,7 @@ while developing the ZPU.
        @@ -1066,7 +1067,7 @@ while developing the ZPU. @@ -1160,7 +1161,7 @@ while developing the ZPU.

        Bit [31:1] Not used

        Bit - [0] UART RX interrupt enable

        + [0] Debug channel / UART RX interrupt enable

        0 Interrupt disable

        1 Interrupt @@ -1182,7 +1183,7 @@ while developing the ZPU.

        Bit [31:1] Not used

        Bit - [0] UART RX interrupt pending (Read)

        + [0] Debug channel / UART RX interrupt pending (Read)

        0 No interrupt pending

        1 Interrupt @@ -1455,6 +1456,25 @@ Achieving above 50-100 DMIPS with the current ZPU architecture is probably a non-starter and a more conventional RISC design makes more sense here.

        The unique advantages of the ZPU is size in terms of HDL & code size. + +

        Debug channel / UART

        +All self respecting embedded projects should have a debug channel +to print stuff to. Typically this is a standard RS232 or UART, but +it can also be something more exotic like a DCC JTAG channel. +

        +The point is that characters(bytes) are sent to/from the ZPU +via some terminal. +

        +The ZPU defines in the memory map a UART / debug channel. This +should be implemented by some suitable debug channel for +the device in which the ZPU is implemented. +

        +www.opencores.org has several UART implementations. This is one +of the simpler ones: + + +http://www.opencores.org/projects.cgi/web/uart/overview +

        About zpu_core.vhd

        The zpu_core.vhd has a single port memory interface. All data, code and IO is -- cgit v1.1 From 873e0043c4c132ff16d90fa6bf4196674e8482ad Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 22 Aug 2008 19:50:10 +0000 Subject: more doc work in progress --- zpu/docs/images/compile.PNG | Bin 0 -> 17735 bytes zpu/docs/images/simulator.PNG | Bin 0 -> 42848 bytes zpu/docs/images/simulator2.PNG | Bin 0 -> 42623 bytes zpu/docs/images/simulator3.PNG | Bin 0 -> 69583 bytes zpu/docs/zpu_arch.html | 120 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 zpu/docs/images/compile.PNG create mode 100644 zpu/docs/images/simulator.PNG create mode 100644 zpu/docs/images/simulator2.PNG create mode 100644 zpu/docs/images/simulator3.PNG diff --git a/zpu/docs/images/compile.PNG b/zpu/docs/images/compile.PNG new file mode 100644 index 0000000..8a00c07 Binary files /dev/null and b/zpu/docs/images/compile.PNG differ diff --git a/zpu/docs/images/simulator.PNG b/zpu/docs/images/simulator.PNG new file mode 100644 index 0000000..9765366 Binary files /dev/null and b/zpu/docs/images/simulator.PNG differ diff --git a/zpu/docs/images/simulator2.PNG b/zpu/docs/images/simulator2.PNG new file mode 100644 index 0000000..070084e Binary files /dev/null and b/zpu/docs/images/simulator2.PNG differ diff --git a/zpu/docs/images/simulator3.PNG b/zpu/docs/images/simulator3.PNG new file mode 100644 index 0000000..34e0540 Binary files /dev/null and b/zpu/docs/images/simulator3.PNG differ diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 5d7fc5e..968ae34 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -2,6 +2,10 @@

        Index

        + +

        The worlds smallest 32 bit CPU with GCC toolchain +

        +

        This CPU is finding a new home at www.opencores.org, please +contact me if you are willing and able to help in shaping up the +www.opencores.org pages. +

        +

        The HDL, GCC toolchain and eCos HAL are actually done. Mainly I +could need a hand with writing up docs/web pages/examples/bug +reports.

        +

        The ZPU has a BSD license for the HDL and GPL for the rest(source +files are sadly out of date here, patches gladly accepted!). This +allows deployments to implement any version of the ZPU they want +without running into commercial problems, but if improvements are +done to the architecture as such, then they need to be contributed +back. +

        +

        One strength of the ZPU is that it is tiny and therefore easy to +implement from scratch to suit specialized needs and optimizations.

        +

        Currently there exists some pages at http://www.zylin.com/zpu.htm +that explains about the ZPU. According to OpenCores policy this +information should be moved to www.opencores.org. Patches gratefully +accepted to do so!

        +

        Per Jan 1. 2008, Zylin has the Copyright for the ZPU, i.e. Zylin +is free to decide that the ZPU shall have a BSD license for HDL + GPL +for the rest.

        +

        Sincerley,

        +

        Øyvind Harboe
        Zylin AS +

        +

        Features +

        +
          +
        • Small size: 442 LUT @ 95 MHz after + P&R w/32 bit datapath Xilinx XC3S400 +

          +
        • Wishbone +

          +
        • Code size 80% of ARM Thumb +

          +
        • GCC toolchain(GDB, newlib, + libstdc+) +

          +
        • eCos embedded operating system support

          +
        +

        Survey +

        +

        Please take the time to fill in this short survey so we can gather +information about where the ZPU can be the most useful:

        +

        http://www.zylin.com/zpusurvey.html

        +

        Status +

        +
          +
        • HDL works +

          +
        • GCC toolchain works +

          +
        • eCos HAL works, but could be less + RAM hungry +

          +
        • The main problem at this point is + not usage of the CPU, but that the documentation/CVS layout needs + attention +

          +
        • Needs GDB stub support in eCos +

          +
        • Could do with a Verilog implementation(ca. 600 lines to + translate)

          +
        +

        Simulator +

        +

        The ZPU simulator is integrated into the Zylin Embedded CDT plugin +to ease debugging of ZPU applications:

        +

        http://www.zylin.com/embeddedcdt.html

        +

        The ZPU simulator has many features besides debugging an +application:

        +
          +
        • taking output from simulation(e.g. + ModelSim) and matching that against the Java simulator, thus making + it much easier to debug HDL implementations and also getting real + world timing information +

          +
        • can generate gprof output +

          +
        • generate various statistics +

          +
        +

        The plugin is still pretty rough around the edges, and needs to +get GUI support for enabling the ModelSim trace input feature.

        +


        Compiling +ZPU application

        +


        Setting +up the simulator

        +


        Choosing +ZPU executable

        +


        Debug +session

        +


        +

        +

        Getting started - FPGA

        The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART @@ -1740,6 +1843,23 @@ This ZPU could run a TCP/IP stack with relevant performance to compete with stripped down ARM7 type systems. +
        +

        Download source code

        +

        +

        The simplest way to get the ZPU HDL source and tools is to check +it out from CVS:

        +

        cvs -d :pserver:anonymous@cvs.opencores.org:/cvsroot/anonymous co +zpu/zpu

        +

        Start by reading zpu/zpu/hdl/index.html

        +
        +

        Creating a patch

        +


        If you have an changes, modify the files locally, create a +patch and email it to
        zylin-zpu mailing list. Attach it +as an uncompressed .txt file:

        +

        cd zpu
        cvs diff -upN . > mypatch.txt

        + +

        Getting help - mailing list

        +The place to get help is the
        zylin-zpu mailing list \ No newline at end of file -- cgit v1.1 From 398017e921a585cbd8785e21b49155832151fc0f Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 25 Aug 2008 17:52:52 +0000 Subject: 2008-08-25 Salvador Eduardo Tropea * Fix typo in zpu_arch.html w.r.t. ZPU UART/Debug channel --- zpu/ChangeLog | 2 ++ zpu/docs/zpu_arch.html | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index 02adb2c..fd0c8ac 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,5 @@ +2008-08-25 Salvador Eduardo Tropea + * Fix typo in zpu_arch.html w.r.t. ZPU UART/Debug channel 2008-08-18 Øyvind Harboe * duplicated crt0.s and some other stuff from libgloss into sw/startup. This makes it easier to tinker w/startup code. diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 968ae34..8230c69 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1179,9 +1179,9 @@ while developing the ZPU. [31:9] Not used

        Bit [8] RX buffer data valid

        -

        0 TX +

        0 RX buffer not valid

        -

        1 TX +

        1 RX buffer valid

        Bit [7:0] RX byte (when valid)

        -- cgit v1.1 From 1427b02f2acf83073fd717a7ab47d56fd9b48e64 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 25 Aug 2008 18:00:26 +0000 Subject: improved instructions on creating a patch --- zpu/ChangeLog | 2 +- zpu/docs/zpu_arch.html | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index fd0c8ac..625573e 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,5 +1,5 @@ 2008-08-25 Salvador Eduardo Tropea - * Fix typo in zpu_arch.html w.r.t. ZPU UART/Debug channel + * zpu/docs/arch_html: Fix typo in zpu_arch.html w.r.t. ZPU UART/Debug channel 2008-08-18 Øyvind Harboe * duplicated crt0.s and some other stuff from libgloss into sw/startup. This makes it easier to tinker w/startup code. diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 8230c69..832f822 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1,5 +1,10 @@ +

        Latest version of this document

        +This is a snapshot of the zpu_arch.html document in CVS. Please check out +the latest version from CVS to get the latest version. +

        +$Id: zpu_arch.html,v 1.23 2008/08/25 18:00:27 oharboe Exp $

        Index

        ZPU - UART to ARM7 TX

        + Debug channel / UART to ARM7 TX

        NOTE! ZPU side

        ZPU - UART to ARM7 RX

        + Debug channel / UART to ARM7 RX

        NOTE! ZPU side

        + + + + + + + + + + + + + + + + +
        SymbolDirectionBit widthPurpose
        adrInput24Address where to read from SPI
        dat_oOutput32Data read from SPI
        clkInput1Input clock. Used for both interface and SPI
        ceInput1Chip Enable
        rstInput1Asynchronous reset
        ackOutput1Data valid ACK
        SPI_CLKOutput1SPI output clock
        SPI_MOSIOutput1SPI output data from controller to chip
        SPI_MISOInput1SPI input data from chip to controller
        SPI_SELNOutput1SPI nSEL (deselect, active low) signal
        + + + +

        License

        +The Verilog implementation is released under BSD license. See the file itself for more licensing details. + +

        Dowload

        +Download the Verilog code here: spi_controller.v + +

        Troubleshooting

        +The current implementation is timed and optimized for myself. Your parameters might not be the same +as those I defaulted, so read the code carefully. If you have any issue let me know. + + + +

        Zealot: Implementing in FPGAs

        -- cgit v1.1 From 9c7083205eed686d65dad3420b44838685a73875 Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 23 Sep 2008 11:41:26 +0000 Subject: small ZPU --- zpu/hdl/zealot/helpers/zpu_small1.vhdl | 136 +++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 zpu/hdl/zealot/helpers/zpu_small1.vhdl diff --git a/zpu/hdl/zealot/helpers/zpu_small1.vhdl b/zpu/hdl/zealot/helpers/zpu_small1.vhdl new file mode 100644 index 0000000..13dd485 --- /dev/null +++ b/zpu/hdl/zealot/helpers/zpu_small1.vhdl @@ -0,0 +1,136 @@ +------------------------------------------------------------------------------ +---- ---- +---- ZPU Small + PHI I/O + BRAM ---- +---- ---- +---- http://www.opencores.org/ ---- +---- ---- +---- Description: ---- +---- ZPU is a 32 bits small stack cpu. This is a helper that joins the ---- +---- small version, the PHI I/O basic layout and a program BRAM. ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author: ---- +---- - Salvador E. Tropea, salvador inti.gob.ar ---- +---- ---- +------------------------------------------------------------------------------ +---- ---- +---- Copyright (c) 2008 Salvador E. Tropea ---- +---- Copyright (c) 2008 Instituto Nacional de Tecnología Industrial ---- +---- ---- +---- Distributed under the BSD license ---- +---- ---- +------------------------------------------------------------------------------ +---- ---- +---- Design unit: ZPU_Small1(Structural) (Entity and architecture) ---- +---- File name: zpu_small1.vhdl ---- +---- Note: None ---- +---- Limitations: None known ---- +---- Errors: None known ---- +---- Library: work ---- +---- Dependencies: IEEE.std_logic_1164 ---- +---- IEEE.numeric_std ---- +---- zpu.zpupkg ---- +---- work.zpu_memory ---- +---- Target FPGA: Spartan 3 (XC3S1500-4-FG456) ---- +---- Language: VHDL ---- +---- Wishbone: No ---- +---- Synthesis tools: Xilinx Release 9.2.03i - xst J.39 ---- +---- Simulation tools: GHDL [Sokcho edition] (0.2x) ---- +---- Text editor: SETEdit 0.5.x ---- +---- ---- +------------------------------------------------------------------------------ + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.numeric_std.all; + +library zpu; +use zpu.zpupkg.all; + +-- RAM declaration +library work; +use work.zpu_memory.all; + +entity ZPU_Small1 is + generic( + WORD_SIZE : natural:=32; -- 32 bits data path + D_CARE_VAL : std_logic:='0'; -- Fill value + CLK_FREQ : positive:=50; -- 50 MHz clock + BRATE : positive:=115200; -- RS232 baudrate + ADDR_W : natural:=16; -- 16 bits address space=64 kB, 32 kB I/O + BRAM_W : natural:=15); -- 15 bits RAM space=32 kB + port( + clk_i : in std_logic; -- CPU clock + rst_i : in std_logic; -- Reset + break_o : out std_logic; -- Break executed + dbg_o : out zpu_dbgo_t; -- Debug info + rs232_tx_o : out std_logic; -- UART Tx + rs232_rx_i : in std_logic); -- UART Rx +end entity ZPU_Small1; + +architecture Structural of ZPU_Small1 is + constant BYTE_BITS : integer:=WORD_SIZE/16; -- # of bits in a word that addresses bytes + constant IO_BIT : integer:=ADDR_W-1; -- Address bit to determine this is an I/O + constant BRDIVISOR : positive:=CLK_FREQ*1e6/BRATE/4; + + -- Program+data+stack BRAM + -- Port A + signal a_we : std_logic; + signal a_addr : unsigned(BRAM_W-1 downto BYTE_BITS); + signal a_write : unsigned(WORD_SIZE-1 downto 0); + signal a_read : unsigned(WORD_SIZE-1 downto 0); + -- Port B + signal b_we : std_logic; + signal b_addr : unsigned(BRAM_W-1 downto BYTE_BITS); + signal b_write : unsigned(WORD_SIZE-1 downto 0); + signal b_read : unsigned(WORD_SIZE-1 downto 0); + + -- I/O space + signal io_busy : std_logic; + signal io_write : unsigned(WORD_SIZE-1 downto 0); + signal io_read : unsigned(WORD_SIZE-1 downto 0); + signal io_addr : unsigned(ADDR_W-1 downto 0); + signal phi_addr : unsigned(2 downto 0); + signal io_we : std_logic; + signal io_re : std_logic; +begin + memory: DualPortRAM + generic map( + WORD_SIZE => WORD_SIZE, BYTE_BITS => BYTE_BITS, BRAM_W => BRAM_W) + port map( + clk_i => clk_i, + -- Port A + a_we_i => a_we, a_addr_i => a_addr, a_write_i => a_write, + a_read_o => a_read, + -- Port B + b_we_i => b_we, b_addr_i => b_addr, b_write_i => b_write, + b_read_o => b_read); + + -- I/O: Phi layout + io_map: ZPUPhiIO + generic map( + BRDIVISOR => BRDIVISOR, LOG_FILE => "zpu_small1_io.log") + port map( + clk_i => clk_i, reset_i => rst_i, busy_o => io_busy, we_i => io_we, + re_i => io_re, data_i => io_write, data_o => io_read, + addr_i => phi_addr, rs232_rx_i => rs232_rx_i, rs232_tx_o => rs232_tx_o, + br_clk_i => '1'); + phi_addr <= io_addr(4 downto 2); + + zpu : ZPUSmallCore + generic map( + WORD_SIZE => WORD_SIZE, ADDR_W => ADDR_W, MEM_W => BRAM_W, + D_CARE_VAL => D_CARE_VAL) + port map( + clk_i => clk_i, reset_i => rst_i, interrupt_i => '0', + break_o => break_o, dbg_o => dbg_o, + -- BRAM (text, data, bss and stack) + a_we_o => a_we, a_addr_o => a_addr, a_o => a_write, a_i => a_read, + b_we_o => b_we, b_addr_o => b_addr, b_o => b_write, b_i => b_read, + -- Memory mapped I/O + mem_busy_i => io_busy, data_i => io_read, data_o => io_write, + addr_o => io_addr, write_en_o => io_we, read_en_o => io_re); +end architecture Structural; -- Entity: ZPU_Small1 + -- cgit v1.1 From 07df0bc85fffae0e271cbad3fd43260b486baebc Mon Sep 17 00:00:00 2001 From: oharboe Date: Tue, 23 Sep 2008 19:19:08 +0000 Subject: =?UTF-8?q?=C1lvaro=20Lopes=20=20spi=20control?= =?UTF-8?q?ler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zpu/hdl/spi/spi_controller.v | 235 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 zpu/hdl/spi/spi_controller.v diff --git a/zpu/hdl/spi/spi_controller.v b/zpu/hdl/spi/spi_controller.v new file mode 100644 index 0000000..b22f294 --- /dev/null +++ b/zpu/hdl/spi/spi_controller.v @@ -0,0 +1,235 @@ +/* + SPI flash read-only controller + + Copyright 2008 Álvaro Lopes + + Version: 1.3 + + The FreeBSD license + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Changelog: + + 1.3: Remove async reset from spi_data shift register + Fix indentation of code + + 1.2: Fix read count for sequential fetch + + 1.1: Move port types outside module declaration. + Fix state machine to handle clock stop + Remove err out report + Fix SPI_CLK generation. +*/ + +module spi_controller ( + clk, // Clock + rst, // Reset + ce, // Chip Enable + ack, // Acknowledge + + adr, // Address in + dat_o, // Data out + + SPI_MOSI, // Master Out/Slave In for SPI + SPI_MISO, // Master In/Slave Out for SPI + SPI_CLK, // SPI clock + SPI_SELN // SPI nSEL +); + +parameter Tp = 0; // Propagation delay - for simulation +parameter INIT_CLOCK_CYCLE_WAIT = 2; // Clock cycles to wait before init +parameter DESELECT_CYCLES = 3; // Clock cycles to wait after deselection - should give 100ns at least +parameter SPI_REGISTER_SIZE = 40; +parameter SPI_ADDRESS_SIZE = 24; + +input clk; +input rst; +input ce; +output reg ack; + +input [SPI_ADDRESS_SIZE-1:0] adr; +output reg [31:0] dat_o; + +output reg SPI_MOSI; +input SPI_MISO; +output SPI_CLK; +output reg SPI_SELN; + + +// FSM states +localparam SPI_STATE_WAIT = 7'b0000001, + SPI_STATE_IDLE = 7'b0000010, + SPI_STATE_WACK = 7'b0000100, + SPI_STATE_SEND = 7'b0001000, + SPI_STATE_BREAD = 7'b0010000, + SPI_STATE_READ = 7'b0100000, + SPI_STATE_WDES = 7'b1000000; + +// SPI commands +localparam SPI_CMD_READ_FAST = 8'b00001011; + + +// Shift register to hold command to be sent to SPI +reg [SPI_REGISTER_SIZE-1:0] spi_shift_register_out; + +integer spi_reg_count; + +reg [8:0] spi_read_count; +reg [7:0] spi_data; +reg [3:0] data_valid_window; +reg [SPI_REGISTER_SIZE-1:0] next_address; + +integer dsel_dly; +integer spi_init_count; +reg spi_start_count; +reg spi_enable_clock; // Enable SPI clock +reg [6:0] spi_state; // SPI state machine + +/* + SPI clock generation +*/ + +assign SPI_CLK = spi_enable_clock?~clk:1'b0; + +reg seq_read; // Sequential read in progress + +always @(posedge clk or posedge rst) +begin + if ( rst ) begin + spi_enable_clock <= #Tp 1'b0; + spi_state <= #Tp SPI_STATE_WAIT; + spi_init_count <= #Tp INIT_CLOCK_CYCLE_WAIT; + SPI_SELN <= #Tp 1'b1; + ack <= #Tp 1'b0; + spi_start_count <= #Tp 1'b0; + next_address <= #Tp 32'hFFFFFFFF; + end else begin + + case (spi_state) + SPI_STATE_WAIT: + begin + if ( spi_init_count == 0 ) begin + spi_state <= SPI_STATE_IDLE; + end else begin + spi_init_count <= #Tp spi_init_count - 1; + end + end + SPI_STATE_IDLE: + begin + + if ( ce ) begin + next_address <= { adr[SPI_ADDRESS_SIZE-1:2], 2'b0 } + 4; + seq_read = adr[SPI_ADDRESS_SIZE-1:2] == next_address[SPI_ADDRESS_SIZE-1:2]; + // Latch address (24 bit wordsize) + spi_shift_register_out <= #Tp { SPI_CMD_READ_FAST, adr[SPI_ADDRESS_SIZE-1:2], 2'b0, 8'b0 }; + + spi_enable_clock <= #Tp 1'b1; + + if ( seq_read ) begin + spi_state <= #Tp SPI_STATE_BREAD; + end else begin + SPI_SELN <= 1'b1 ; + spi_reg_count <= #Tp SPI_REGISTER_SIZE; + dsel_dly <= DESELECT_CYCLES; + spi_state <= #Tp SPI_STATE_WDES; + end + end + end + SPI_STATE_WACK: + begin + ack <= 1'b0; + spi_state <= SPI_STATE_IDLE; + end + SPI_STATE_SEND: + begin + + SPI_SELN <=#Tp 1'b0; + + if (spi_reg_count == 0) + begin + spi_state <= #Tp SPI_STATE_BREAD; + end else begin + SPI_MOSI <= #Tp spi_shift_register_out[SPI_REGISTER_SIZE-1]; + spi_shift_register_out <= #Tp { spi_shift_register_out[SPI_REGISTER_SIZE-2:0], 1'b0 }; + spi_reg_count <= #Tp spi_reg_count - 1; + end + end + SPI_STATE_BREAD: + begin + spi_start_count <= #Tp 1'b1; + spi_state <= #Tp SPI_STATE_READ; + end + SPI_STATE_READ: + begin + spi_start_count <= #Tp 1'b0; + + // Stop clock a bit earlier + if ( data_valid_window[3] && spi_read_count[1] ) + spi_enable_clock <= 1'b0; + + if (spi_read_count[0]) + begin + + dat_o <= #Tp { dat_o[23:0], spi_data }; + + if ( data_valid_window[3] ) begin + ack <= #Tp 1'b1; + spi_state <= #Tp SPI_STATE_WACK; + end + end + end + SPI_STATE_WDES: + begin + if ( dsel_dly == 0 ) + spi_state <= SPI_STATE_SEND; + else + dsel_dly <= dsel_dly -1; + end + endcase + end +end + +always @(posedge clk) +begin + if (spi_start_count) begin + spi_read_count <= 8'b01000000; + data_valid_window <= #Tp 5'b00001; + end else begin + if ( spi_read_count[0] ) begin + data_valid_window <= #Tp { data_valid_window[3:0], 1'b0 }; + end + spi_read_count <= #Tp { spi_read_count[0] ,spi_read_count[7:1] }; + end +end + +// SPI data shift register + +always @(negedge clk) +begin + spi_data <= #Tp { spi_data[6:0], SPI_MISO }; +end + +endmodule -- cgit v1.1 From 104c29feaeee40e94580b952b8cf793d54727612 Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 10 Oct 2008 07:07:57 +0000 Subject: a few words about the ZY1000 ZPU JTAG debugger --- zpu/docs/zpu_arch.html | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index e7cf30c..7ddbea7 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -23,6 +23,7 @@ $id$
      33. Speeding up the ZPU
      34. Debug channel / UART
      35. Wishbone +
      36. JTAG/hardware debugger for GDB
      37. About zpu_core_small.vhd
      38. About zpu_core.vhd
      39. Zealot: Implementing in FPGAs @@ -1481,6 +1482,29 @@ of the ZPU, which differs slightly from +

        JTAG/hardware debugger for GDB

        +The Zylin
        ZY1000 JTAG debugger supports +the ZPU. Contact Zylin for pricing and details. +

        +There are two debug modes in which the ZY1000 can operate: +

          +
        • Classic. Here the ZY1000 controls the CPU and examines the state. The ZY1000 has a built in +GDB server that GDB talks to. +
        • Small footprint. If there isn't enough space on the device for the ZPU *and* the JTAG +controller, then the ZY1000 can run the ZPU externally. The JTAG communication channel is +then used to peek/poke peripherals and inside the FPGA instead of the ZPU there is then +a JTAG controller that peeks and pokes the peripherals of the ZPU. There are advantages +and disadvantages of this approach: it may be unfamiliar to embedded developers and +the timing is different from the "real" ZPU(interrupts are delayed, execution speed +differse, etc.) On the other hand there are other things +which are simpler: much more RAM can be available for the ZPU during development, +better debug consoles(faster), additional peripheral(timers, etc.) is available. This +approach is somewhat unique to the ZPU as the ZPU is simple enough that it can be +implemented efficiently in this manner. +
        +

        Interrupts

        The ZPU supports interrupts. -- cgit v1.1 From 5a2b72d6bdf7bc47f9001304c557b205c77e38ee Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 10 Oct 2008 09:43:44 +0000 Subject: dmips test app in example folder --- zpu/docs/zpu_arch.html | 14 + zpu/hdl/example/.cvsignore | 1 + zpu/hdl/example/bram_dmips.vhd | 6909 ++++++++++++++++++--------------------- zpu/hdl/example/simzpu_dmips.do | 29 + zpu/hdl/example/zpuromgen.exe | Bin 0 -> 10274 bytes 5 files changed, 3301 insertions(+), 3652 deletions(-) create mode 100644 zpu/hdl/example/simzpu_dmips.do create mode 100644 zpu/hdl/example/zpuromgen.exe diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 7ddbea7..0c57cae 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -157,6 +157,20 @@ Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
        +

        Build another test application for example simulation

        +Here is how to build a rom image for an application using the +zpu/example simulation files. +

        +cd zpu/roadshow/roadshow/dhrystone
        +sh build.sh
        +cd zpu/hdl/example
        +gcc zpuromgen.c
        +$ ./a
        +Usage: ./a binary_file
        +./a ../../roadshow/roadshow/dhrystone/dhrystone.bin >app.txt
        +

        +Copy and paste app.txt into helloworld.vhd. +

        Running example simulation

        The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt:
          diff --git a/zpu/hdl/example/.cvsignore b/zpu/hdl/example/.cvsignore index ab4e67c..8238018 100644 --- a/zpu/hdl/example/.cvsignore +++ b/zpu/hdl/example/.cvsignore @@ -1,2 +1,3 @@ work vsim.wlf +install diff --git a/zpu/hdl/example/bram_dmips.vhd b/zpu/hdl/example/bram_dmips.vhd index 53d9121..733560e 100644 --- a/zpu/hdl/example/bram_dmips.vhd +++ b/zpu/hdl/example/bram_dmips.vhd @@ -60,3658 +60,3263 @@ type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_ 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", + 0 => x"0b0b0b0b", + 1 => x"82700b0b", + 2 => x"80d5f40c", + 3 => x"3a0b0b80", + 4 => x"c4fb0400", + 5 => x"00000000", + 6 => x"00000000", + 7 => x"00000000", + 8 => x"80088408", + 9 => x"88080b0b", + 10 => x"80c5c22d", + 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"c3040000", + 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"0b0b88a6", + 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"0b0b80d5", + 162 => x"e0738306", + 163 => x"10100508", + 164 => x"060b0b0b", + 165 => x"88a90400", + 166 => x"00000000", + 167 => x"00000000", + 168 => x"80088408", + 169 => x"88087575", + 170 => x"0b0b0bad", + 171 => x"aa2d5050", + 172 => x"80085688", + 173 => x"0c840c80", + 174 => x"0c510400", + 175 => x"00000000", + 176 => x"80088408", + 177 => x"88087575", + 178 => x"0b0b0bad", + 179 => x"ee2d5050", + 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"80d5f00c", + 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"82fd3fbf", + 257 => x"a03f0410", + 258 => x"10101010", + 259 => x"10101010", + 260 => x"10101010", + 261 => x"10101010", + 262 => x"10101010", + 263 => x"10101010", + 264 => x"10101010", + 265 => x"10105351", + 266 => x"047381ff", + 267 => x"06738306", + 268 => x"09810583", + 269 => x"05101010", + 270 => x"2b0772fc", + 271 => x"060c5151", + 272 => x"043c0472", + 273 => x"72807281", + 274 => x"06ff0509", + 275 => x"72060571", + 276 => x"1052720a", + 277 => x"100a5372", + 278 => x"ed385151", + 279 => x"535104ff", + 280 => x"3d0d0b0b", + 281 => x"80e5e408", + 282 => x"52710870", + 283 => x"882a8132", + 284 => x"70810651", + 285 => x"515170f1", + 286 => x"3873720c", + 287 => x"833d0d04", + 288 => x"80d5f008", + 289 => x"802ea438", + 290 => x"80d5f408", + 291 => x"822ebd38", + 292 => x"8380800b", + 293 => x"0b0b80e5", + 294 => x"e40c82a0", + 295 => x"800b80e5", + 296 => x"e80c8290", + 297 => x"800b80e5", + 298 => x"ec0c04f8", + 299 => x"808080a4", + 300 => x"0b0b0b80", + 301 => x"e5e40cf8", + 302 => x"80808280", + 303 => x"0b80e5e8", + 304 => x"0cf88080", + 305 => x"84800b80", + 306 => x"e5ec0c04", + 307 => x"80c0a880", + 308 => x"8c0b0b0b", + 309 => x"80e5e40c", + 310 => x"80c0a880", + 311 => x"940b80e5", + 312 => x"e80c0b0b", + 313 => x"80c7d00b", + 314 => x"80e5ec0c", + 315 => x"04f23d0d", + 316 => x"6080e5e8", + 317 => x"08565d82", + 318 => x"750c8059", + 319 => x"805a800b", + 320 => x"8f3d5d5b", + 321 => x"7a101015", + 322 => x"70087108", + 323 => x"719f2c7e", + 324 => x"852b5855", + 325 => x"557d5359", + 326 => x"5799993f", + 327 => x"7d7f7a72", + 328 => x"077c7207", + 329 => x"71716081", + 330 => x"05415f5d", + 331 => x"5b595755", + 332 => x"817b278f", + 333 => x"38767d0c", + 334 => x"77841e0c", + 335 => x"7c800c90", + 336 => x"3d0d0480", + 337 => x"e5e80855", + 338 => x"ffba3970", + 339 => x"7080e5f0", + 340 => x"335170a7", + 341 => x"3880d5fc", + 342 => x"08700852", + 343 => x"5270802e", + 344 => x"94388412", + 345 => x"80d5fc0c", + 346 => x"702d80d5", + 347 => x"fc087008", + 348 => x"525270ee", + 349 => x"38810b80", + 350 => x"e5f03450", + 351 => x"50040470", + 352 => x"0b0b80e5", + 353 => x"e008802e", + 354 => x"8e380b0b", + 355 => x"0b0b800b", + 356 => x"802e0981", + 357 => x"06833850", + 358 => x"040b0b80", + 359 => x"e5e0510b", + 360 => x"0b0bf4dc", + 361 => x"3f500404", + 362 => x"ff3d0d02", + 363 => x"8f053352", + 364 => x"718a2e8a", + 365 => x"387151fd", + 366 => x"a63f833d", + 367 => x"0d048d51", + 368 => x"fd9d3f71", + 369 => x"51fd983f", + 370 => x"833d0d04", + 371 => x"ce3d0db5", + 372 => x"3d707084", + 373 => x"0552088b", + 374 => x"a85c56a5", + 375 => x"3d5e5c80", + 376 => x"75708105", + 377 => x"5733765b", + 378 => x"55587378", + 379 => x"2e80c138", + 380 => x"8e3d5b73", + 381 => x"a52e0981", + 382 => x"0680c538", + 383 => x"78708105", + 384 => x"5a335473", + 385 => x"80e42e81", + 386 => x"b6387380", + 387 => x"e42480c6", + 388 => x"387380e3", + 389 => x"2ea13880", + 390 => x"52a55179", + 391 => x"2d805273", + 392 => x"51792d82", + 393 => x"18587870", + 394 => x"81055a33", + 395 => x"5473c438", + 396 => x"77800cb4", + 397 => x"3d0d047b", + 398 => x"841d8312", + 399 => x"33565d57", + 400 => x"80527351", + 401 => x"792d8118", + 402 => x"79708105", + 403 => x"5b335558", + 404 => x"73ffa038", + 405 => x"db397380", + 406 => x"f32e0981", + 407 => x"06ffb838", + 408 => x"7b841d71", + 409 => x"08595d56", + 410 => x"80773355", + 411 => x"5673762e", + 412 => x"8d388116", + 413 => x"70187033", + 414 => x"57555674", + 415 => x"f538ff16", + 416 => x"55807625", + 417 => x"ffa03876", + 418 => x"70810558", + 419 => x"33548052", + 420 => x"7351792d", + 421 => x"811875ff", + 422 => x"17575758", + 423 => x"807625ff", + 424 => x"85387670", + 425 => x"81055833", + 426 => x"54805273", + 427 => x"51792d81", + 428 => x"1875ff17", + 429 => x"57575875", + 430 => x"8024cc38", + 431 => x"fee8397b", + 432 => x"841d7108", + 433 => x"70719f2c", + 434 => x"5953595d", + 435 => x"56807524", + 436 => x"81913875", + 437 => x"7d7c5856", + 438 => x"54805773", + 439 => x"772e0981", + 440 => x"06b638b0", + 441 => x"7b3402b5", + 442 => x"05567a76", + 443 => x"2e9738ff", + 444 => x"16567533", + 445 => x"75708105", + 446 => x"57348117", + 447 => x"577a762e", + 448 => x"098106eb", + 449 => x"38807534", + 450 => x"767dff12", + 451 => x"57585675", + 452 => x"8024fef3", + 453 => x"38fe8f39", + 454 => x"8a527351", + 455 => x"9fd03f80", + 456 => x"0880c7d4", + 457 => x"05337670", + 458 => x"81055834", + 459 => x"8a527351", + 460 => x"9ef83f80", + 461 => x"08548008", + 462 => x"802effae", + 463 => x"388a5273", + 464 => x"519fab3f", + 465 => x"800880c7", + 466 => x"d4053376", + 467 => x"70810558", + 468 => x"348a5273", + 469 => x"519ed33f", + 470 => x"80085480", + 471 => x"08ffb938", + 472 => x"ff883974", + 473 => x"527653b4", + 474 => x"3dffb805", + 475 => x"51949a3f", + 476 => x"a33d0856", + 477 => x"fedd3980", + 478 => x"3d0d80c1", + 479 => x"0b81b4bc", + 480 => x"34800b81", + 481 => x"b6980c70", + 482 => x"800c823d", + 483 => x"0d04ff3d", + 484 => x"0d800b81", + 485 => x"b4bc3352", + 486 => x"527080c1", + 487 => x"2e993871", + 488 => x"81b69808", + 489 => x"0781b698", + 490 => x"0c80c20b", + 491 => x"81b4c034", + 492 => x"70800c83", + 493 => x"3d0d0481", + 494 => x"0b81b698", + 495 => x"080781b6", + 496 => x"980c80c2", + 497 => x"0b81b4c0", + 498 => x"3470800c", + 499 => x"833d0d04", + 500 => x"fd3d0d75", + 501 => x"70088a05", + 502 => x"535381b4", + 503 => x"bc335170", + 504 => x"80c12e8b", + 505 => x"3873f338", + 506 => x"70800c85", + 507 => x"3d0d04ff", + 508 => x"127081b4", + 509 => x"b8083174", + 510 => x"0c800c85", + 511 => x"3d0d04fc", + 512 => x"3d0d81b4", + 513 => x"c4085574", + 514 => x"802e8c38", + 515 => x"76750871", + 516 => x"0c81b4c4", + 517 => x"0856548c", + 518 => x"155381b4", + 519 => x"b808528a", + 520 => x"518fd43f", + 521 => x"73800c86", + 522 => x"3d0d04fb", + 523 => x"3d0d7770", + 524 => x"085656b0", + 525 => x"5381b4c4", + 526 => x"08527451", + 527 => x"ab943f85", + 528 => x"0b8c170c", + 529 => x"850b8c16", + 530 => x"0c750875", + 531 => x"0c81b4c4", + 532 => x"08547380", + 533 => x"2e8a3873", + 534 => x"08750c81", + 535 => x"b4c40854", + 536 => x"8c145381", + 537 => x"b4b80852", + 538 => x"8a518f8b", + 539 => x"3f841508", + 540 => x"ad38860b", + 541 => x"8c160c88", + 542 => x"15528816", + 543 => x"08518e97", + 544 => x"3f81b4c4", + 545 => x"08700876", + 546 => x"0c548c15", + 547 => x"7054548a", + 548 => x"52730851", + 549 => x"8ee13f73", + 550 => x"800c873d", + 551 => x"0d047508", + 552 => x"54b05373", + 553 => x"527551aa", + 554 => x"a93f7380", + 555 => x"0c873d0d", + 556 => x"04d93d0d", + 557 => x"b0519dcf", + 558 => x"3f800881", + 559 => x"b4b40cb0", + 560 => x"519dc43f", + 561 => x"800881b4", + 562 => x"c40c81b4", + 563 => x"b4088008", + 564 => x"0c800b80", + 565 => x"0884050c", + 566 => x"820b8008", + 567 => x"88050ca8", + 568 => x"0b80088c", + 569 => x"050c9f53", + 570 => x"80c7e052", + 571 => x"80089005", + 572 => x"51a9df3f", + 573 => x"a13d5e9f", + 574 => x"5380c880", + 575 => x"527d51a9", + 576 => x"d13f8a0b", + 577 => x"80f2f80c", + 578 => x"80d2a451", + 579 => x"f9be3f80", + 580 => x"c8a051f9", + 581 => x"b73f80d2", + 582 => x"a451f9b0", + 583 => x"3f80d684", + 584 => x"08802e89", + 585 => x"d33880c8", + 586 => x"d051f9a0", + 587 => x"3f80d2a4", + 588 => x"51f9993f", + 589 => x"80d68008", + 590 => x"5280c8fc", + 591 => x"51f98d3f", + 592 => x"80e69451", + 593 => x"b2ff3f81", + 594 => x"0b9a3d5e", + 595 => x"5b800b80", + 596 => x"d6800825", + 597 => x"82d43890", + 598 => x"3d5f80c1", + 599 => x"0b81b4bc", + 600 => x"34810b81", + 601 => x"b6980c80", + 602 => x"c20b81b4", + 603 => x"c0348240", + 604 => x"835a9f53", + 605 => x"80c9ac52", + 606 => x"7c51a8d6", + 607 => x"3f814180", + 608 => x"7d537e52", + 609 => x"568e943f", + 610 => x"8008762e", + 611 => x"09810683", + 612 => x"38815675", + 613 => x"81b6980c", + 614 => x"7f705856", + 615 => x"758325a2", + 616 => x"38751010", + 617 => x"16fd0542", + 618 => x"a93dffa4", + 619 => x"05538352", + 620 => x"76518cc3", + 621 => x"3f7f8105", + 622 => x"70417058", + 623 => x"56837624", + 624 => x"e0386154", + 625 => x"755380e6", + 626 => x"9c5281b4", + 627 => x"d0518cb7", + 628 => x"3f81b4c4", + 629 => x"08700858", + 630 => x"58b05377", + 631 => x"527651a7", + 632 => x"f13f850b", + 633 => x"8c190c85", + 634 => x"0b8c180c", + 635 => x"7708770c", + 636 => x"81b4c408", + 637 => x"5675802e", + 638 => x"8a387508", + 639 => x"770c81b4", + 640 => x"c408568c", + 641 => x"165381b4", + 642 => x"b808528a", + 643 => x"518be83f", + 644 => x"84170887", + 645 => x"ea38860b", + 646 => x"8c180c88", + 647 => x"17528818", + 648 => x"08518af3", + 649 => x"3f81b4c4", + 650 => x"08700878", + 651 => x"0c568c17", + 652 => x"7054598a", + 653 => x"52780851", + 654 => x"8bbd3f80", + 655 => x"c10b81b4", + 656 => x"c0335757", + 657 => x"767626a2", + 658 => x"3880c352", + 659 => x"76518ca1", + 660 => x"3f800861", + 661 => x"2e89e438", + 662 => x"81177081", + 663 => x"ff0681b4", + 664 => x"c0335858", + 665 => x"58757727", + 666 => x"e0387960", + 667 => x"29627054", + 668 => x"71535b59", + 669 => x"98b43f80", + 670 => x"0840787a", + 671 => x"31708729", + 672 => x"80083180", + 673 => x"088a0581", + 674 => x"b4bc3381", + 675 => x"b4b8085e", + 676 => x"5b525a56", + 677 => x"7780c12e", + 678 => x"89ce387b", + 679 => x"f738811b", + 680 => x"5b80d680", + 681 => x"087b25fd", + 682 => x"b13881b4", + 683 => x"ac51b095", + 684 => x"3f80c9cc", + 685 => x"51f6953f", + 686 => x"80d2a451", + 687 => x"f68e3f80", + 688 => x"c9dc51f6", + 689 => x"873f80d2", + 690 => x"a451f680", + 691 => x"3f81b4b8", + 692 => x"085280ca", + 693 => x"9451f5f4", + 694 => x"3f855280", + 695 => x"cab051f5", + 696 => x"eb3f81b6", + 697 => x"98085280", + 698 => x"cacc51f5", + 699 => x"df3f8152", + 700 => x"80cab051", + 701 => x"f5d63f81", + 702 => x"b4bc3352", + 703 => x"80cae851", + 704 => x"f5ca3f80", + 705 => x"c15280cb", + 706 => x"8451f5c0", + 707 => x"3f81b4c0", + 708 => x"335280cb", + 709 => x"a051f5b4", + 710 => x"3f80c252", + 711 => x"80cb8451", + 712 => x"f5aa3f81", + 713 => x"b4f00852", + 714 => x"80cbbc51", + 715 => x"f59e3f87", + 716 => x"5280cab0", + 717 => x"51f5953f", + 718 => x"80f2f808", + 719 => x"5280cbd8", + 720 => x"51f5893f", + 721 => x"80cbf451", + 722 => x"f5823f80", + 723 => x"cca051f4", + 724 => x"fb3f81b4", + 725 => x"c4087008", + 726 => x"535a80cc", + 727 => x"ac51f4ec", + 728 => x"3f80ccc8", + 729 => x"51f4e53f", + 730 => x"81b4c408", + 731 => x"84110853", + 732 => x"5680ccfc", + 733 => x"51f4d53f", + 734 => x"805280ca", + 735 => x"b051f4cc", + 736 => x"3f81b4c4", + 737 => x"08881108", + 738 => x"535880cd", + 739 => x"9851f4bc", + 740 => x"3f825280", + 741 => x"cab051f4", + 742 => x"b33f81b4", + 743 => x"c4088c11", + 744 => x"08535780", + 745 => x"cdb451f4", + 746 => x"a33f9152", + 747 => x"80cab051", + 748 => x"f49a3f81", + 749 => x"b4c40890", + 750 => x"055280cd", + 751 => x"d051f48c", + 752 => x"3f80cdec", + 753 => x"51f4853f", + 754 => x"80cea451", + 755 => x"f3fe3f81", + 756 => x"b4b40870", + 757 => x"08535f80", + 758 => x"ccac51f3", + 759 => x"ef3f80ce", + 760 => x"b851f3e8", + 761 => x"3f81b4b4", + 762 => x"08841108", + 763 => x"535b80cc", + 764 => x"fc51f3d8", + 765 => x"3f805280", + 766 => x"cab051f3", + 767 => x"cf3f81b4", + 768 => x"b4088811", + 769 => x"08535c80", + 770 => x"cd9851f3", + 771 => x"bf3f8152", + 772 => x"80cab051", + 773 => x"f3b63f81", + 774 => x"b4b4088c", + 775 => x"1108535a", + 776 => x"80cdb451", + 777 => x"f3a63f92", + 778 => x"5280cab0", + 779 => x"51f39d3f", + 780 => x"81b4b408", + 781 => x"90055280", + 782 => x"cdd051f3", + 783 => x"8f3f80cd", + 784 => x"ec51f388", + 785 => x"3f7f5280", + 786 => x"cef851f2", + 787 => x"ff3f8552", + 788 => x"80cab051", + 789 => x"f2f63f78", + 790 => x"5280cf94", + 791 => x"51f2ed3f", + 792 => x"8d5280ca", + 793 => x"b051f2e4", + 794 => x"3f615280", + 795 => x"cfb051f2", + 796 => x"db3f8752", + 797 => x"80cab051", + 798 => x"f2d23f60", + 799 => x"5280cfcc", + 800 => x"51f2c93f", + 801 => x"815280ca", + 802 => x"b051f2c0", + 803 => x"3f7d5280", + 804 => x"cfe851f2", + 805 => x"b73f80d0", + 806 => x"8451f2b0", + 807 => x"3f7c5280", + 808 => x"d0bc51f2", + 809 => x"a73f80d0", + 810 => x"d851f2a0", + 811 => x"3f80d2a4", + 812 => x"51f2993f", + 813 => x"81b4ac08", + 814 => x"81b4b008", + 815 => x"80e69408", + 816 => x"80e69808", + 817 => x"72713170", + 818 => x"74267574", + 819 => x"31707231", + 820 => x"80e68c0c", + 821 => x"444480e6", + 822 => x"900c80e6", + 823 => x"90085680", + 824 => x"d190555c", + 825 => x"595758f1", + 826 => x"e33f80e6", + 827 => x"8c085680", + 828 => x"762582a3", + 829 => x"3880d680", + 830 => x"0870719f", + 831 => x"2c9a3d53", + 832 => x"565680e6", + 833 => x"8c0880e6", + 834 => x"90084153", + 835 => x"7f547052", + 836 => x"5a89eb3f", + 837 => x"66685f80", + 838 => x"e5fc0c7d", + 839 => x"80e6800c", + 840 => x"80d68008", + 841 => x"709f2c58", + 842 => x"568058bd", + 843 => x"84c07855", + 844 => x"55765275", + 845 => x"53795187", + 846 => x"d13f953d", + 847 => x"80e68c08", + 848 => x"80e69008", + 849 => x"41557f56", + 850 => x"67694053", + 851 => x"7e547052", + 852 => x"5c89ab3f", + 853 => x"64665e80", + 854 => x"e6840c7c", + 855 => x"80e6880c", + 856 => x"80d68008", + 857 => x"709f2c40", + 858 => x"58805783", + 859 => x"dceb9480", + 860 => x"7755557e", + 861 => x"5277537b", + 862 => x"51878f3f", + 863 => x"64665d5b", + 864 => x"805e8ddd", + 865 => x"7e555580", + 866 => x"e68c0880", + 867 => x"e6900859", + 868 => x"52775379", + 869 => x"5186f33f", + 870 => x"66684054", + 871 => x"7e557a52", + 872 => x"7b53a93d", + 873 => x"ffa80551", + 874 => x"88d43f62", + 875 => x"645e81b4", + 876 => x"c80c7c81", + 877 => x"b4cc0c80", + 878 => x"d1a051f0", + 879 => x"8f3f80e6", + 880 => x"80085280", + 881 => x"d1d051f0", + 882 => x"833f80d1", + 883 => x"d851effc", + 884 => x"3f80e688", + 885 => x"085280d1", + 886 => x"d051eff0", + 887 => x"3f81b4cc", + 888 => x"085280d2", + 889 => x"8851efe4", + 890 => x"3f80d2a4", + 891 => x"51efdd3f", + 892 => x"800b800c", + 893 => x"a93d0d04", + 894 => x"80d2a851", + 895 => x"f6ac3977", + 896 => x"0857b053", + 897 => x"76527751", + 898 => x"9fc83f80", + 899 => x"c10b81b4", + 900 => x"c0335757", + 901 => x"f8ae3975", + 902 => x"8a3880e6", + 903 => x"90088126", + 904 => x"fdd33880", + 905 => x"d2d851ef", + 906 => x"a33f80d3", + 907 => x"9051ef9c", + 908 => x"3f80d2a4", + 909 => x"51ef953f", + 910 => x"80d68008", + 911 => x"70719f2c", + 912 => x"9a3d5356", + 913 => x"5680e68c", + 914 => x"0880e690", + 915 => x"0841537f", + 916 => x"5470525a", + 917 => x"87a83f66", + 918 => x"685f80e5", + 919 => x"fc0c7d80", + 920 => x"e6800c80", + 921 => x"d6800870", + 922 => x"9f2c5856", + 923 => x"8058bd84", + 924 => x"c0785555", + 925 => x"76527553", + 926 => x"7951858e", + 927 => x"3f953d80", + 928 => x"e68c0880", + 929 => x"e6900841", + 930 => x"557f5667", + 931 => x"6940537e", + 932 => x"5470525c", + 933 => x"86e83f64", + 934 => x"665e80e6", + 935 => x"840c7c80", + 936 => x"e6880c80", + 937 => x"d6800870", + 938 => x"9f2c4058", + 939 => x"805783dc", + 940 => x"eb948077", + 941 => x"55557e52", + 942 => x"77537b51", + 943 => x"84cc3f64", + 944 => x"665d5b80", + 945 => x"5e8ddd7e", + 946 => x"555580e6", + 947 => x"8c0880e6", + 948 => x"90085952", + 949 => x"77537951", + 950 => x"84b03f66", + 951 => x"6840547e", + 952 => x"557a527b", + 953 => x"53a93dff", + 954 => x"a8055186", + 955 => x"913f6264", + 956 => x"5e81b4c8", + 957 => x"0c7c81b4", + 958 => x"cc0c80d1", + 959 => x"a051edcc", + 960 => x"3f80e680", + 961 => x"085280d1", + 962 => x"d051edc0", + 963 => x"3f80d1d8", + 964 => x"51edb93f", + 965 => x"80e68808", + 966 => x"5280d1d0", + 967 => x"51edad3f", + 968 => x"81b4cc08", + 969 => x"5280d288", + 970 => x"51eda13f", + 971 => x"80d2a451", + 972 => x"ed9a3f80", + 973 => x"0b800ca9", + 974 => x"3d0d04a9", + 975 => x"3dffa005", + 976 => x"52805180", + 977 => x"d23f9f53", + 978 => x"80d3b052", + 979 => x"7c519d82", + 980 => x"3f7a7b81", + 981 => x"b4b80c81", + 982 => x"187081ff", + 983 => x"0681b4c0", + 984 => x"33595959", + 985 => x"5af5fe39", + 986 => x"ff16707b", + 987 => x"31600c5c", + 988 => x"800b811c", + 989 => x"5c5c80d6", + 990 => x"80087b25", + 991 => x"f3dc38f6", + 992 => x"a939ff3d", + 993 => x"0d738232", + 994 => x"70307072", + 995 => x"07802580", + 996 => x"0c525283", + 997 => x"3d0d04fe", + 998 => x"3d0d7476", + 999 => x"71535452", + 1000 => x"71822e83", + 1001 => x"38835171", + 1002 => x"812e9a38", + 1003 => x"8172269f", + 1004 => x"3871822e", + 1005 => x"b8387184", + 1006 => x"2ea93870", + 1007 => x"730c7080", + 1008 => x"0c843d0d", + 1009 => x"0480e40b", + 1010 => x"81b4b808", + 1011 => x"258b3880", + 1012 => x"730c7080", + 1013 => x"0c843d0d", + 1014 => x"0483730c", + 1015 => x"70800c84", + 1016 => x"3d0d0482", + 1017 => x"730c7080", + 1018 => x"0c843d0d", + 1019 => x"0481730c", + 1020 => x"70800c84", + 1021 => x"3d0d0480", + 1022 => x"3d0d7474", + 1023 => x"14820571", + 1024 => x"0c800c82", + 1025 => x"3d0d04f7", + 1026 => x"3d0d7b7d", + 1027 => x"7f618512", + 1028 => x"70822b75", + 1029 => x"11707471", + 1030 => x"70840553", + 1031 => x"0c5a5a5d", + 1032 => x"5b760c79", + 1033 => x"80f8180c", + 1034 => x"79861252", + 1035 => x"57585a5a", + 1036 => x"76762499", + 1037 => x"3876b329", + 1038 => x"822b7911", + 1039 => x"51537673", + 1040 => x"70840555", + 1041 => x"0c811454", + 1042 => x"757425f2", + 1043 => x"387681cc", + 1044 => x"2919fc11", + 1045 => x"088105fc", + 1046 => x"120c7a19", + 1047 => x"70089fa0", + 1048 => x"130c5856", + 1049 => x"850b81b4", + 1050 => x"b80c7580", + 1051 => x"0c8b3d0d", + 1052 => x"04fe3d0d", + 1053 => x"02930533", + 1054 => x"51800284", + 1055 => x"05970533", + 1056 => x"54527073", + 1057 => x"2e883871", + 1058 => x"800c843d", + 1059 => x"0d047081", + 1060 => x"b4bc3481", + 1061 => x"0b800c84", + 1062 => x"3d0d04f8", + 1063 => x"3d0d7a7c", + 1064 => x"5956820b", + 1065 => x"83195555", + 1066 => x"74167033", + 1067 => x"75335b51", + 1068 => x"5372792e", + 1069 => x"80c63880", + 1070 => x"c10b8116", + 1071 => x"81165656", + 1072 => x"57827525", + 1073 => x"e338ffa9", + 1074 => x"177081ff", + 1075 => x"06555973", + 1076 => x"82268338", + 1077 => x"87558153", + 1078 => x"7680d22e", + 1079 => x"98387752", + 1080 => x"75519bc3", + 1081 => x"3f805372", + 1082 => x"80082589", + 1083 => x"38871581", + 1084 => x"b4b80c81", + 1085 => x"5372800c", + 1086 => x"8a3d0d04", + 1087 => x"7281b4bc", + 1088 => x"34827525", + 1089 => x"ffa238ff", + 1090 => x"bd39ef3d", + 1091 => x"0d636567", + 1092 => x"5b427943", + 1093 => x"67695940", + 1094 => x"77415a80", + 1095 => x"5d805e61", + 1096 => x"7083ffff", + 1097 => x"0671902a", + 1098 => x"627083ff", + 1099 => x"ff067190", + 1100 => x"2a747229", + 1101 => x"74732975", + 1102 => x"73297774", + 1103 => x"2973902a", + 1104 => x"05721151", + 1105 => x"5856535f", + 1106 => x"5a575a58", + 1107 => x"55587373", + 1108 => x"27863884", + 1109 => x"80801656", + 1110 => x"73902a16", + 1111 => x"5b7883ff", + 1112 => x"ff067484", + 1113 => x"80802905", + 1114 => x"5c7a7c5a", + 1115 => x"5d785e77", + 1116 => x"7f296178", + 1117 => x"29057d05", + 1118 => x"5d7c7e56", + 1119 => x"7a0c7484", + 1120 => x"1b0c7980", + 1121 => x"0c933d0d", + 1122 => x"04f93d0d", + 1123 => x"797b7d54", + 1124 => x"58725977", + 1125 => x"30797030", + 1126 => x"7072079f", + 1127 => x"2a737131", + 1128 => x"5a525977", + 1129 => x"7956730c", + 1130 => x"53738413", + 1131 => x"0c54800c", + 1132 => x"893d0d04", + 1133 => x"f93d0d79", + 1134 => x"7b7d7f56", + 1135 => x"54525472", + 1136 => x"802ea038", + 1137 => x"70577158", + 1138 => x"a0733152", + 1139 => x"807225a1", + 1140 => x"38777074", + 1141 => x"2b577073", + 1142 => x"2a78752b", + 1143 => x"07565174", + 1144 => x"76535170", + 1145 => x"740c7184", + 1146 => x"150c7380", + 1147 => x"0c893d0d", + 1148 => x"04805677", + 1149 => x"72302b55", + 1150 => x"74765351", + 1151 => x"e639e43d", + 1152 => x"0d6ea13d", + 1153 => x"08a33d08", + 1154 => x"59575f80", + 1155 => x"764d774e", + 1156 => x"a33d08a5", + 1157 => x"3d08574b", + 1158 => x"754c5e7d", + 1159 => x"6c2486fb", + 1160 => x"38806a24", + 1161 => x"878f3869", + 1162 => x"6b58566b", + 1163 => x"6d5d467b", + 1164 => x"47754476", + 1165 => x"45646468", + 1166 => x"685c5c56", + 1167 => x"567481e7", + 1168 => x"38787627", + 1169 => x"82c73875", + 1170 => x"81ff2683", + 1171 => x"2b5583ff", + 1172 => x"ff76278c", + 1173 => x"389055fe", + 1174 => x"800a7627", + 1175 => x"83389855", + 1176 => x"75752a80", + 1177 => x"d3d00570", + 1178 => x"33a07731", + 1179 => x"71315755", + 1180 => x"5774802e", + 1181 => x"95387575", + 1182 => x"2ba07631", + 1183 => x"7a772b7c", + 1184 => x"722a077c", + 1185 => x"782b5d5b", + 1186 => x"59567590", + 1187 => x"2a7683ff", + 1188 => x"ff067154", + 1189 => x"7a535957", + 1190 => x"88803f80", + 1191 => x"085b87ea", + 1192 => x"3f800880", + 1193 => x"0879297c", + 1194 => x"902b7c90", + 1195 => x"2a075656", + 1196 => x"59737527", + 1197 => x"94388008", + 1198 => x"ff057615", + 1199 => x"55597574", + 1200 => x"26873874", + 1201 => x"742687b9", + 1202 => x"38765273", + 1203 => x"75315187", + 1204 => x"c93f8008", + 1205 => x"5587b33f", + 1206 => x"80088008", + 1207 => x"79297b83", + 1208 => x"ffff0677", + 1209 => x"902b0756", + 1210 => x"59577378", + 1211 => x"27963880", + 1212 => x"08ff0576", + 1213 => x"15555775", + 1214 => x"74268938", + 1215 => x"77742677", + 1216 => x"71315856", + 1217 => x"78902b77", + 1218 => x"0758805b", + 1219 => x"7a407741", + 1220 => x"7f615654", + 1221 => x"7d80d938", + 1222 => x"737f0c74", + 1223 => x"7f84050c", + 1224 => x"7e800c9e", + 1225 => x"3d0d0480", + 1226 => x"705c5874", + 1227 => x"7926dd38", + 1228 => x"7481ff26", + 1229 => x"832b5774", + 1230 => x"83ffff26", + 1231 => x"82a53874", + 1232 => x"772a80d3", + 1233 => x"d0057033", + 1234 => x"a0793171", + 1235 => x"31595c5d", + 1236 => x"7682b338", + 1237 => x"76547479", + 1238 => x"27833881", + 1239 => x"54797627", + 1240 => x"74075981", + 1241 => x"5878ffa2", + 1242 => x"38765880", + 1243 => x"5bff9d39", + 1244 => x"73527453", + 1245 => x"9e3de805", + 1246 => x"51fc8e3f", + 1247 => x"6769567f", + 1248 => x"0c747f84", + 1249 => x"050c7e80", + 1250 => x"0c9e3d0d", + 1251 => x"0475802e", + 1252 => x"81c43875", + 1253 => x"81ff2683", + 1254 => x"2b5583ff", + 1255 => x"ff76278c", + 1256 => x"389055fe", + 1257 => x"800a7627", + 1258 => x"83389855", + 1259 => x"75752a80", + 1260 => x"d3d00570", + 1261 => x"33a07731", + 1262 => x"7131575e", + 1263 => x"54748491", + 1264 => x"38787631", + 1265 => x"54817690", + 1266 => x"2a7783ff", + 1267 => x"ff065f5d", + 1268 => x"5b7b5273", + 1269 => x"5185c33f", + 1270 => x"80085785", + 1271 => x"ad3f8008", + 1272 => x"80087e29", + 1273 => x"78902b7c", + 1274 => x"902a0756", + 1275 => x"56597375", + 1276 => x"27943880", + 1277 => x"08ff0576", + 1278 => x"15555975", + 1279 => x"74268738", + 1280 => x"74742684", + 1281 => x"f3387b52", + 1282 => x"73753151", + 1283 => x"858c3f80", + 1284 => x"085584f6", + 1285 => x"3f800880", + 1286 => x"087e297b", + 1287 => x"83ffff06", + 1288 => x"77902b07", + 1289 => x"56595773", + 1290 => x"78279638", + 1291 => x"8008ff05", + 1292 => x"76155557", + 1293 => x"75742689", + 1294 => x"38777426", + 1295 => x"77713158", + 1296 => x"5a78902b", + 1297 => x"77077b41", + 1298 => x"417f6156", + 1299 => x"547d802e", + 1300 => x"fdc638fe", + 1301 => x"9b397552", + 1302 => x"815184ae", + 1303 => x"3f800856", + 1304 => x"feb13990", + 1305 => x"57fe800a", + 1306 => x"7527fdd3", + 1307 => x"38987571", + 1308 => x"2a80d3d0", + 1309 => x"057033a0", + 1310 => x"73317131", + 1311 => x"535d5e57", + 1312 => x"76802efd", + 1313 => x"cf38a077", + 1314 => x"3175782b", + 1315 => x"77722a07", + 1316 => x"77792b7b", + 1317 => x"7a2b7d74", + 1318 => x"2a077d7b", + 1319 => x"2b73902a", + 1320 => x"7483ffff", + 1321 => x"0671597f", + 1322 => x"772a585e", + 1323 => x"5c415f58", + 1324 => x"5c5483e6", + 1325 => x"3f800854", + 1326 => x"83d03f80", + 1327 => x"08800879", + 1328 => x"2975902b", + 1329 => x"7e902a07", + 1330 => x"56565973", + 1331 => x"75279938", + 1332 => x"8008ff05", + 1333 => x"7b155559", + 1334 => x"7a74268c", + 1335 => x"38737527", + 1336 => x"8738ff19", + 1337 => x"7b155559", + 1338 => x"76527375", + 1339 => x"315183aa", + 1340 => x"3f800855", + 1341 => x"83943f80", + 1342 => x"08800879", + 1343 => x"297d83ff", + 1344 => x"ff067790", + 1345 => x"2b075659", + 1346 => x"57737827", + 1347 => x"99388008", + 1348 => x"ff057b15", + 1349 => x"55577a74", + 1350 => x"268c3873", + 1351 => x"78278738", + 1352 => x"ff177b15", + 1353 => x"55577378", + 1354 => x"3179902b", + 1355 => x"78077083", + 1356 => x"ffff0671", + 1357 => x"902a7983", + 1358 => x"ffff067a", + 1359 => x"902a7372", + 1360 => x"29737329", + 1361 => x"74732976", + 1362 => x"74297390", + 1363 => x"2a057205", + 1364 => x"5755435f", + 1365 => x"5b585a57", + 1366 => x"595a747c", + 1367 => x"27863884", + 1368 => x"80801757", + 1369 => x"74902a17", + 1370 => x"7983ffff", + 1371 => x"06768480", + 1372 => x"80290557", + 1373 => x"57767a26", + 1374 => x"9a38767a", + 1375 => x"32703070", + 1376 => x"72078025", + 1377 => x"565a5b7c", + 1378 => x"7627fafe", + 1379 => x"3873802e", + 1380 => x"faf838ff", + 1381 => x"1858805b", + 1382 => x"faf239ff", + 1383 => x"76537754", + 1384 => x"9f3de805", + 1385 => x"525ef7e1", + 1386 => x"3f676957", + 1387 => x"4c754d69", + 1388 => x"8025f8f3", + 1389 => x"387d096a", + 1390 => x"6c5c537a", + 1391 => x"549f3de8", + 1392 => x"05525ef7", + 1393 => x"c43f6769", + 1394 => x"714c704d", + 1395 => x"5856f8db", + 1396 => x"39a07531", + 1397 => x"76762b7a", + 1398 => x"772b7c73", + 1399 => x"2a077c78", + 1400 => x"2b72902a", + 1401 => x"7383ffff", + 1402 => x"0671587e", + 1403 => x"762a5742", + 1404 => x"405d5d57", + 1405 => x"5881a33f", + 1406 => x"80085781", + 1407 => x"8d3f8008", + 1408 => x"80087e29", + 1409 => x"78902b7d", + 1410 => x"902a0756", + 1411 => x"56597375", + 1412 => x"27993880", + 1413 => x"08ff0576", + 1414 => x"15555975", + 1415 => x"74268c38", + 1416 => x"73752787", + 1417 => x"38ff1976", + 1418 => x"1555597b", + 1419 => x"52737531", + 1420 => x"5180e73f", + 1421 => x"80085580", + 1422 => x"d13f8008", + 1423 => x"80087e29", + 1424 => x"7c83ffff", + 1425 => x"06707890", + 1426 => x"2b075156", + 1427 => x"58587377", + 1428 => x"27993880", + 1429 => x"08ff0576", + 1430 => x"15555875", + 1431 => x"74268c38", + 1432 => x"73772787", + 1433 => x"38ff1876", + 1434 => x"15555878", + 1435 => x"902b7807", + 1436 => x"74783155", + 1437 => x"5bfada39", + 1438 => x"ff197615", + 1439 => x"5559fb86", + 1440 => x"39ff1976", + 1441 => x"155559f8", + 1442 => x"c0397070", + 1443 => x"70805375", + 1444 => x"52745181", + 1445 => x"913f5050", + 1446 => x"50047070", + 1447 => x"70815375", + 1448 => x"52745181", + 1449 => x"813f5050", + 1450 => x"5004fb3d", + 1451 => x"0d777955", + 1452 => x"55805675", + 1453 => x"7524ab38", + 1454 => x"8074249d", + 1455 => x"38805373", + 1456 => x"52745180", + 1457 => x"e13f8008", + 1458 => x"5475802e", + 1459 => x"85388008", + 1460 => x"30547380", + 1461 => x"0c873d0d", + 1462 => x"04733076", + 1463 => x"81325754", + 1464 => x"dc397430", + 1465 => x"55815673", + 1466 => x"8025d238", + 1467 => x"ec39fa3d", + 1468 => x"0d787a57", + 1469 => x"55805776", + 1470 => x"7524a438", + 1471 => x"759f2c54", + 1472 => x"81537574", + 1473 => x"32743152", + 1474 => x"74519b3f", + 1475 => x"80085476", + 1476 => x"802e8538", + 1477 => x"80083054", + 1478 => x"73800c88", + 1479 => x"3d0d0474", + 1480 => x"30558157", + 1481 => x"d739fc3d", + 1482 => x"0d767853", + 1483 => x"54815380", + 1484 => x"74732652", + 1485 => x"5572802e", + 1486 => x"98387080", + 1487 => x"2eab3880", + 1488 => x"7224a638", + 1489 => x"71107310", + 1490 => x"75722653", + 1491 => x"545272ea", + 1492 => x"38735178", + 1493 => x"83387451", + 1494 => x"70800c86", + 1495 => x"3d0d0472", + 1496 => x"0a100a72", + 1497 => x"0a100a53", + 1498 => x"5372802e", + 1499 => x"e4387174", + 1500 => x"26ed3873", + 1501 => x"72317574", + 1502 => x"07740a10", + 1503 => x"0a740a10", + 1504 => x"0a555556", + 1505 => x"54e33970", + 1506 => x"70735280", + 1507 => x"decc0851", + 1508 => x"933f5050", + 1509 => x"04707073", + 1510 => x"5280decc", + 1511 => x"085190ce", + 1512 => x"3f505004", + 1513 => x"f43d0d7e", + 1514 => x"608b1170", + 1515 => x"f8065b55", + 1516 => x"555d7296", + 1517 => x"26833890", + 1518 => x"58807824", + 1519 => x"74792607", + 1520 => x"55805474", + 1521 => x"742e0981", + 1522 => x"0680ca38", + 1523 => x"7c518d9e", + 1524 => x"3f7783f7", + 1525 => x"2680c538", + 1526 => x"77832a70", + 1527 => x"10101080", + 1528 => x"d6c4058c", + 1529 => x"11085858", + 1530 => x"5475772e", + 1531 => x"81f03884", + 1532 => x"1608fc06", + 1533 => x"8c170888", + 1534 => x"1808718c", + 1535 => x"120c8812", + 1536 => x"0c5b7605", + 1537 => x"84110881", + 1538 => x"0784120c", + 1539 => x"537c518c", + 1540 => x"de3f8816", + 1541 => x"5473800c", + 1542 => x"8e3d0d04", + 1543 => x"77892a78", + 1544 => x"832a5854", + 1545 => x"73802ebf", + 1546 => x"3877862a", + 1547 => x"b8055784", + 1548 => x"7427b438", + 1549 => x"80db1457", + 1550 => x"947427ab", + 1551 => x"38778c2a", + 1552 => x"80ee0557", + 1553 => x"80d47427", + 1554 => x"9e38778f", + 1555 => x"2a80f705", + 1556 => x"5782d474", + 1557 => x"27913877", + 1558 => x"922a80fc", + 1559 => x"05578ad4", + 1560 => x"74278438", + 1561 => x"80fe5776", + 1562 => x"10101080", + 1563 => x"d6c4058c", + 1564 => x"11085653", + 1565 => x"74732ea3", + 1566 => x"38841508", + 1567 => x"fc067079", + 1568 => x"31555673", + 1569 => x"8f2488e4", + 1570 => x"38738025", + 1571 => x"88e6388c", + 1572 => x"15085574", + 1573 => x"732e0981", + 1574 => x"06df3881", + 1575 => x"175980d6", + 1576 => x"d4085675", + 1577 => x"80d6cc2e", + 1578 => x"82cc3884", + 1579 => x"1608fc06", + 1580 => x"70793155", + 1581 => x"55738f24", + 1582 => x"bb3880d6", + 1583 => x"cc0b80d6", + 1584 => x"d80c80d6", + 1585 => x"cc0b80d6", + 1586 => x"d40c8074", + 1587 => x"2480db38", + 1588 => x"74168411", + 1589 => x"08810784", + 1590 => x"120c53fe", + 1591 => x"b0398816", + 1592 => x"8c110857", + 1593 => x"5975792e", + 1594 => x"098106fe", + 1595 => x"82388214", + 1596 => x"59ffab39", + 1597 => x"77167881", + 1598 => x"0784180c", + 1599 => x"7080d6d8", + 1600 => x"0c7080d6", + 1601 => x"d40c80d6", + 1602 => x"cc0b8c12", + 1603 => x"0c8c1108", + 1604 => x"88120c74", + 1605 => x"81078412", + 1606 => x"0c740574", + 1607 => x"710c5b7c", + 1608 => x"518acc3f", + 1609 => x"881654fd", + 1610 => x"ec3983ff", + 1611 => x"75278391", + 1612 => x"3874892a", + 1613 => x"75832a54", + 1614 => x"5473802e", + 1615 => x"bf387486", + 1616 => x"2ab80553", + 1617 => x"847427b4", + 1618 => x"3880db14", + 1619 => x"53947427", + 1620 => x"ab38748c", + 1621 => x"2a80ee05", + 1622 => x"5380d474", + 1623 => x"279e3874", + 1624 => x"8f2a80f7", + 1625 => x"055382d4", + 1626 => x"74279138", + 1627 => x"74922a80", + 1628 => x"fc05538a", + 1629 => x"d4742784", + 1630 => x"3880fe53", + 1631 => x"72101010", + 1632 => x"80d6c405", + 1633 => x"88110855", + 1634 => x"5773772e", + 1635 => x"868b3884", + 1636 => x"1408fc06", + 1637 => x"5b747b27", + 1638 => x"8d388814", + 1639 => x"08547377", + 1640 => x"2e098106", + 1641 => x"ea388c14", + 1642 => x"0880d6c4", + 1643 => x"0b840508", + 1644 => x"718c190c", + 1645 => x"7588190c", + 1646 => x"7788130c", + 1647 => x"5c57758c", + 1648 => x"150c7853", + 1649 => x"80792483", + 1650 => x"98387282", + 1651 => x"2c81712b", + 1652 => x"5656747b", + 1653 => x"2680ca38", + 1654 => x"7a750657", + 1655 => x"7682a338", + 1656 => x"78fc0684", + 1657 => x"05597410", + 1658 => x"707c0655", + 1659 => x"55738292", + 1660 => x"38841959", + 1661 => x"f13980d6", + 1662 => x"c40b8405", + 1663 => x"0879545b", + 1664 => x"788025c6", + 1665 => x"3882da39", + 1666 => x"74097b06", + 1667 => x"7080d6c4", + 1668 => x"0b84050c", + 1669 => x"5b741055", + 1670 => x"747b2685", + 1671 => x"387485bc", + 1672 => x"3880d6c4", + 1673 => x"0b880508", + 1674 => x"70841208", + 1675 => x"fc06707b", + 1676 => x"317b7226", + 1677 => x"8f722507", + 1678 => x"5d575c5c", + 1679 => x"5578802e", + 1680 => x"80d93879", + 1681 => x"1580d6bc", + 1682 => x"08199011", + 1683 => x"59545680", + 1684 => x"d6b808ff", + 1685 => x"2e8838a0", + 1686 => x"8f13e080", + 1687 => x"06577652", + 1688 => x"7c51888c", + 1689 => x"3f800854", + 1690 => x"8008ff2e", + 1691 => x"90388008", + 1692 => x"762782a7", + 1693 => x"387480d6", + 1694 => x"c42e829f", + 1695 => x"3880d6c4", + 1696 => x"0b880508", + 1697 => x"55841508", + 1698 => x"fc067079", + 1699 => x"31797226", + 1700 => x"8f722507", + 1701 => x"5d555a7a", + 1702 => x"83f23877", + 1703 => x"81078416", + 1704 => x"0c771570", + 1705 => x"80d6c40b", + 1706 => x"88050c74", + 1707 => x"81078412", + 1708 => x"0c567c51", + 1709 => x"87b93f88", + 1710 => x"15547380", + 1711 => x"0c8e3d0d", + 1712 => x"0474832a", + 1713 => x"70545480", + 1714 => x"7424819b", + 1715 => x"3872822c", + 1716 => x"81712b80", + 1717 => x"d6c80807", + 1718 => x"7080d6c4", + 1719 => x"0b84050c", + 1720 => x"75101010", + 1721 => x"80d6c405", + 1722 => x"88110871", + 1723 => x"8c1b0c70", + 1724 => x"881b0c79", + 1725 => x"88130c57", + 1726 => x"555c5575", + 1727 => x"8c150cfd", + 1728 => x"c1397879", + 1729 => x"10101080", + 1730 => x"d6c40570", + 1731 => x"565b5c8c", + 1732 => x"14085675", + 1733 => x"742ea338", + 1734 => x"841608fc", + 1735 => x"06707931", + 1736 => x"5853768f", + 1737 => x"2483f138", + 1738 => x"76802584", + 1739 => x"af388c16", + 1740 => x"08567574", + 1741 => x"2e098106", + 1742 => x"df388814", + 1743 => x"811a7083", + 1744 => x"06555a54", + 1745 => x"72c9387b", + 1746 => x"83065675", + 1747 => x"802efdb8", + 1748 => x"38ff1cf8", + 1749 => x"1b5b5c88", + 1750 => x"1a087a2e", + 1751 => x"ea38fdb5", + 1752 => x"39831953", + 1753 => x"fce43983", + 1754 => x"1470822c", + 1755 => x"81712b80", + 1756 => x"d6c80807", + 1757 => x"7080d6c4", + 1758 => x"0b84050c", + 1759 => x"76101010", + 1760 => x"80d6c405", + 1761 => x"88110871", + 1762 => x"8c1c0c70", + 1763 => x"881c0c7a", + 1764 => x"88130c58", + 1765 => x"535d5653", + 1766 => x"fee13980", + 1767 => x"d6880817", + 1768 => x"59800876", + 1769 => x"2e818b38", + 1770 => x"80d6b808", + 1771 => x"ff2e848e", + 1772 => x"38737631", + 1773 => x"1980d688", + 1774 => x"0c738706", + 1775 => x"70565372", + 1776 => x"802e8838", + 1777 => x"88733170", + 1778 => x"15555576", + 1779 => x"149fff06", + 1780 => x"a0807131", + 1781 => x"1670547e", + 1782 => x"53515385", + 1783 => x"933f8008", + 1784 => x"568008ff", + 1785 => x"2e819e38", + 1786 => x"80d68808", + 1787 => x"137080d6", + 1788 => x"880c7475", + 1789 => x"80d6c40b", + 1790 => x"88050c77", + 1791 => x"76311581", + 1792 => x"07555659", + 1793 => x"7a80d6c4", + 1794 => x"2e83c038", + 1795 => x"798f2682", + 1796 => x"ef38810b", + 1797 => x"84150c84", + 1798 => x"1508fc06", + 1799 => x"70793179", + 1800 => x"72268f72", + 1801 => x"25075d55", + 1802 => x"5a7a802e", + 1803 => x"fced3880", + 1804 => x"db398008", + 1805 => x"9fff0655", + 1806 => x"74feed38", + 1807 => x"7880d688", + 1808 => x"0c80d6c4", + 1809 => x"0b880508", + 1810 => x"7a188107", + 1811 => x"84120c55", + 1812 => x"80d6b408", + 1813 => x"79278638", + 1814 => x"7880d6b4", + 1815 => x"0c80d6b0", + 1816 => x"087927fc", + 1817 => x"a0387880", + 1818 => x"d6b00c84", + 1819 => x"1508fc06", + 1820 => x"70793179", + 1821 => x"72268f72", + 1822 => x"25075d55", + 1823 => x"5a7a802e", + 1824 => x"fc993888", + 1825 => x"39807457", + 1826 => x"53fedd39", + 1827 => x"7c5183df", + 1828 => x"3f800b80", + 1829 => x"0c8e3d0d", + 1830 => x"04807324", + 1831 => x"a5387282", + 1832 => x"2c81712b", + 1833 => x"80d6c808", + 1834 => x"077080d6", + 1835 => x"c40b8405", + 1836 => x"0c5c5a76", + 1837 => x"8c170c73", + 1838 => x"88170c75", + 1839 => x"88180cf9", + 1840 => x"fd398313", + 1841 => x"70822c81", + 1842 => x"712b80d6", + 1843 => x"c8080770", + 1844 => x"80d6c40b", + 1845 => x"84050c5d", + 1846 => x"5b53d839", + 1847 => x"7a75065c", + 1848 => x"7bfc9f38", + 1849 => x"84197510", + 1850 => x"5659f139", + 1851 => x"ff178105", + 1852 => x"59f7ab39", + 1853 => x"8c150888", + 1854 => x"1608718c", + 1855 => x"120c8812", + 1856 => x"0c597515", + 1857 => x"84110881", + 1858 => x"0784120c", + 1859 => x"587c5182", + 1860 => x"de3f8815", + 1861 => x"54fba339", + 1862 => x"77167881", + 1863 => x"0784180c", + 1864 => x"8c170888", + 1865 => x"1808718c", + 1866 => x"120c8812", + 1867 => x"0c5c7080", + 1868 => x"d6d80c70", + 1869 => x"80d6d40c", + 1870 => x"80d6cc0b", + 1871 => x"8c120c8c", + 1872 => x"11088812", + 1873 => x"0c778107", + 1874 => x"84120c77", + 1875 => x"0577710c", + 1876 => x"557c5182", + 1877 => x"9a3f8816", + 1878 => x"54f5ba39", + 1879 => x"72168411", + 1880 => x"08810784", + 1881 => x"120c588c", + 1882 => x"16088817", + 1883 => x"08718c12", + 1884 => x"0c88120c", + 1885 => x"577c5181", + 1886 => x"f63f8816", + 1887 => x"54f59639", + 1888 => x"7284150c", + 1889 => x"f41af806", + 1890 => x"70841d08", + 1891 => x"81060784", + 1892 => x"1d0c701c", + 1893 => x"5556850b", + 1894 => x"84150c85", + 1895 => x"0b88150c", + 1896 => x"8f7627fd", + 1897 => x"ab38881b", + 1898 => x"527c5184", + 1899 => x"c13f80d6", + 1900 => x"c40b8805", + 1901 => x"0880d688", + 1902 => x"085a55fd", + 1903 => x"93397880", + 1904 => x"d6880c73", + 1905 => x"80d6b80c", + 1906 => x"fbef3972", + 1907 => x"84150cfc", + 1908 => x"ff39fb3d", + 1909 => x"0d77707a", + 1910 => x"7c585553", + 1911 => x"568f7527", + 1912 => x"80e63872", + 1913 => x"76078306", + 1914 => x"517080dc", + 1915 => x"38757352", + 1916 => x"54707084", + 1917 => x"05520874", + 1918 => x"70840556", + 1919 => x"0c737170", + 1920 => x"84055308", + 1921 => x"71708405", + 1922 => x"530c7170", + 1923 => x"84055308", + 1924 => x"71708405", + 1925 => x"530c7170", + 1926 => x"84055308", + 1927 => x"71708405", + 1928 => x"530cf016", + 1929 => x"5654748f", + 1930 => x"26c73883", + 1931 => x"75279538", + 1932 => x"70708405", + 1933 => x"52087470", + 1934 => x"8405560c", + 1935 => x"fc155574", + 1936 => x"8326ed38", + 1937 => x"73715452", + 1938 => x"ff155170", + 1939 => x"ff2e9838", + 1940 => x"72708105", + 1941 => x"54337270", + 1942 => x"81055434", + 1943 => x"ff115170", + 1944 => x"ff2e0981", + 1945 => x"06ea3875", + 1946 => x"800c873d", + 1947 => x"0d040404", + 1948 => x"70707070", + 1949 => x"800b81b6", + 1950 => x"9c0c7651", + 1951 => x"87cc3f80", + 1952 => x"08538008", + 1953 => x"ff2e8938", + 1954 => x"72800c50", + 1955 => x"50505004", + 1956 => x"81b69c08", + 1957 => x"5473802e", + 1958 => x"ef387574", + 1959 => x"710c5272", + 1960 => x"800c5050", + 1961 => x"505004fb", + 1962 => x"3d0d7779", + 1963 => x"70720783", + 1964 => x"06535452", + 1965 => x"70933871", + 1966 => x"73730854", + 1967 => x"56547173", + 1968 => x"082e80c4", + 1969 => x"38737554", + 1970 => x"52713370", + 1971 => x"81ff0652", + 1972 => x"5470802e", + 1973 => x"9d387233", + 1974 => x"5570752e", + 1975 => x"09810695", + 1976 => x"38811281", + 1977 => x"14713370", + 1978 => x"81ff0654", + 1979 => x"56545270", + 1980 => x"e5387233", + 1981 => x"557381ff", + 1982 => x"067581ff", + 1983 => x"06717131", + 1984 => x"800c5552", + 1985 => x"873d0d04", + 1986 => x"7109f7fb", + 1987 => x"fdff1306", + 1988 => x"f8848281", + 1989 => x"80065271", + 1990 => x"97388414", + 1991 => x"84167108", + 1992 => x"54565471", + 1993 => x"75082ee0", + 1994 => x"38737554", + 1995 => x"52ff9a39", + 1996 => x"800b800c", + 1997 => x"873d0d04", + 1998 => x"fb3d0d77", + 1999 => x"705256fe", + 2000 => x"ad3f80d6", + 2001 => x"c40b8805", + 2002 => x"08841108", + 2003 => x"fc06707b", + 2004 => x"319fef05", + 2005 => x"e08006e0", + 2006 => x"80055255", + 2007 => x"55a08075", + 2008 => x"24943880", + 2009 => x"527551fe", + 2010 => x"873f80d6", + 2011 => x"cc081453", + 2012 => x"7280082e", + 2013 => x"8f387551", + 2014 => x"fdf53f80", + 2015 => x"5372800c", + 2016 => x"873d0d04", + 2017 => x"74305275", + 2018 => x"51fde53f", + 2019 => x"8008ff2e", + 2020 => x"a83880d6", + 2021 => x"c40b8805", + 2022 => x"08747631", + 2023 => x"81078412", + 2024 => x"0c5380d6", + 2025 => x"88087531", + 2026 => x"80d6880c", + 2027 => x"7551fdbf", + 2028 => x"3f810b80", + 2029 => x"0c873d0d", + 2030 => x"04805275", + 2031 => x"51fdb13f", + 2032 => x"80d6c40b", + 2033 => x"88050880", + 2034 => x"08713154", + 2035 => x"548f7325", + 2036 => x"ffa43880", + 2037 => x"0880d6b8", + 2038 => x"083180d6", + 2039 => x"880c7281", + 2040 => x"0784150c", + 2041 => x"7551fd87", + 2042 => x"3f8053ff", + 2043 => x"9039f73d", + 2044 => x"0d7b7d54", + 2045 => x"5a72802e", + 2046 => x"82833879", + 2047 => x"51fcef3f", + 2048 => x"f8138411", + 2049 => x"0870fe06", + 2050 => x"70138411", + 2051 => x"08fc065c", + 2052 => x"57585457", + 2053 => x"80d6cc08", + 2054 => x"742e82de", + 2055 => x"38778415", + 2056 => x"0c807381", + 2057 => x"06565974", + 2058 => x"792e81d5", + 2059 => x"38771484", + 2060 => x"11088106", + 2061 => x"565374a0", + 2062 => x"38771656", + 2063 => x"7881e638", + 2064 => x"88140855", + 2065 => x"7480d6cc", + 2066 => x"2e82f938", + 2067 => x"8c140870", + 2068 => x"8c170c75", + 2069 => x"88120c58", + 2070 => x"75810784", + 2071 => x"180c7517", + 2072 => x"76710c54", + 2073 => x"78819138", + 2074 => x"83ff7627", + 2075 => x"81c83875", + 2076 => x"892a7683", + 2077 => x"2a545473", + 2078 => x"802ebf38", + 2079 => x"75862ab8", + 2080 => x"05538474", + 2081 => x"27b43880", + 2082 => x"db145394", + 2083 => x"7427ab38", + 2084 => x"758c2a80", + 2085 => x"ee055380", + 2086 => x"d474279e", + 2087 => x"38758f2a", + 2088 => x"80f70553", + 2089 => x"82d47427", + 2090 => x"91387592", + 2091 => x"2a80fc05", + 2092 => x"538ad474", + 2093 => x"27843880", + 2094 => x"fe537210", + 2095 => x"101080d6", + 2096 => x"c4058811", + 2097 => x"08555573", + 2098 => x"752e82bf", + 2099 => x"38841408", + 2100 => x"fc065975", + 2101 => x"79278d38", + 2102 => x"88140854", + 2103 => x"73752e09", + 2104 => x"8106ea38", + 2105 => x"8c140870", + 2106 => x"8c190c74", + 2107 => x"88190c77", + 2108 => x"88120c55", + 2109 => x"768c150c", + 2110 => x"7951faf3", + 2111 => x"3f8b3d0d", + 2112 => x"04760877", + 2113 => x"71315876", + 2114 => x"05881808", + 2115 => x"56567480", + 2116 => x"d6cc2e80", + 2117 => x"e0388c17", + 2118 => x"08708c17", + 2119 => x"0c758812", + 2120 => x"0c53fe89", + 2121 => x"39881408", + 2122 => x"8c150870", + 2123 => x"8c130c59", + 2124 => x"88190cfe", + 2125 => x"a3397583", + 2126 => x"2a705454", + 2127 => x"80742481", + 2128 => x"98387282", + 2129 => x"2c81712b", + 2130 => x"80d6c808", + 2131 => x"0780d6c4", + 2132 => x"0b84050c", + 2133 => x"74101010", + 2134 => x"80d6c405", + 2135 => x"88110871", + 2136 => x"8c1b0c70", + 2137 => x"881b0c79", + 2138 => x"88130c56", + 2139 => x"5a55768c", + 2140 => x"150cff84", + 2141 => x"398159fd", + 2142 => x"b4397716", + 2143 => x"73810654", + 2144 => x"55729838", + 2145 => x"76087771", + 2146 => x"31587505", + 2147 => x"8c180888", + 2148 => x"1908718c", + 2149 => x"120c8812", + 2150 => x"0c555574", + 2151 => x"81078418", + 2152 => x"0c7680d6", + 2153 => x"c40b8805", + 2154 => x"0c80d6c0", + 2155 => x"087526fe", + 2156 => x"c73880d6", + 2157 => x"bc085279", + 2158 => x"51fafd3f", + 2159 => x"7951f9af", + 2160 => x"3ffeba39", + 2161 => x"81778c17", + 2162 => x"0c778817", + 2163 => x"0c758c19", + 2164 => x"0c758819", + 2165 => x"0c59fd80", + 2166 => x"39831470", + 2167 => x"822c8171", + 2168 => x"2b80d6c8", + 2169 => x"080780d6", + 2170 => x"c40b8405", + 2171 => x"0c751010", + 2172 => x"1080d6c4", + 2173 => x"05881108", + 2174 => x"718c1c0c", + 2175 => x"70881c0c", + 2176 => x"7a88130c", + 2177 => x"575b5653", + 2178 => x"fee43980", + 2179 => x"7324a338", + 2180 => x"72822c81", + 2181 => x"712b80d6", + 2182 => x"c8080780", + 2183 => x"d6c40b84", + 2184 => x"050c5874", + 2185 => x"8c180c73", + 2186 => x"88180c76", + 2187 => x"88160cfd", + 2188 => x"c3398313", + 2189 => x"70822c81", + 2190 => x"712b80d6", + 2191 => x"c8080780", + 2192 => x"d6c40b84", + 2193 => x"050c5953", + 2194 => x"da397070", + 2195 => x"7080e5f4", + 2196 => x"08893881", + 2197 => x"b6a00b80", + 2198 => x"e5f40c80", + 2199 => x"e5f40875", + 2200 => x"115252ff", + 2201 => x"537087fb", + 2202 => x"80802688", + 2203 => x"387080e5", + 2204 => x"f40c7153", + 2205 => x"72800c50", + 2206 => x"505004fd", + 2207 => x"3d0d800b", + 2208 => x"80d5f408", + 2209 => x"54547281", + 2210 => x"2e9b3873", + 2211 => x"80e5f80c", + 2212 => x"c3ee3fc2", + 2213 => x"eb3f80e5", + 2214 => x"cc528151", + 2215 => x"cc933f80", + 2216 => x"085180dd", + 2217 => x"3f7280e5", + 2218 => x"f80cc3d4", + 2219 => x"3fc2d13f", + 2220 => x"80e5cc52", + 2221 => x"8151cbf9", + 2222 => x"3f800851", + 2223 => x"80c33f00", + 2224 => x"ff3900ff", + 2225 => x"39f43d0d", + 2226 => x"7e80e5ec", + 2227 => x"08700870", + 2228 => x"81ff0692", + 2229 => x"3df80555", + 2230 => x"515a5759", + 2231 => x"c48f3f80", + 2232 => x"5477557b", + 2233 => x"7d585276", + 2234 => x"538e3df0", + 2235 => x"0551de8e", + 2236 => x"3f797b58", + 2237 => x"790c7684", + 2238 => x"1a0c7880", + 2239 => x"0c8e3d0d", + 2240 => x"04f73d0d", + 2241 => x"7b80decc", + 2242 => x"0882c811", + 2243 => x"085a545a", + 2244 => x"77802e80", + 2245 => x"da388188", + 2246 => x"18841908", + 2247 => x"ff058171", + 2248 => x"2b595559", + 2249 => x"80742480", + 2250 => x"ea388074", + 2251 => x"24b53873", + 2252 => x"822b7811", + 2253 => x"88055656", + 2254 => x"81801908", + 2255 => x"77065372", + 2256 => x"802eb638", + 2257 => x"78167008", + 2258 => x"53537951", + 2259 => x"74085372", + 2260 => x"2dff14fc", + 2261 => x"17fc1779", + 2262 => x"812c5a57", + 2263 => x"57547380", + 2264 => x"25d63877", + 2265 => x"085877ff", + 2266 => x"ad3880de", + 2267 => x"cc0853bc", + 2268 => x"1308a538", + 2269 => x"7951fec7", + 2270 => x"3f740853", + 2271 => x"722dff14", + 2272 => x"fc17fc17", + 2273 => x"79812c5a", + 2274 => x"57575473", + 2275 => x"8025ffa8", + 2276 => x"38d13980", + 2277 => x"57ff9339", + 2278 => x"7251bc13", + 2279 => x"0854732d", + 2280 => x"7951fe9b", + 2281 => x"3f707080", + 2282 => x"e5d40bfc", + 2283 => x"05700852", + 2284 => x"5270ff2e", + 2285 => x"9138702d", + 2286 => x"fc127008", + 2287 => x"525270ff", + 2288 => x"2e098106", + 2289 => x"f1385050", + 2290 => x"0404c2ff", + 2291 => x"3f040000", + 2292 => x"00000040", + 2293 => x"30313233", + 2294 => x"34353637", + 2295 => x"38390000", + 2296 => x"44485259", + 2297 => x"53544f4e", + 2298 => x"45205052", + 2299 => x"4f475241", + 2300 => x"4d2c2053", + 2301 => x"4f4d4520", + 2302 => x"53545249", + 2303 => x"4e470000", + 2304 => x"44485259", + 2305 => x"53544f4e", + 2306 => x"45205052", + 2307 => x"4f475241", + 2308 => x"4d2c2031", + 2309 => x"27535420", + 2310 => x"53545249", + 2311 => x"4e470000", + 2312 => x"44687279", + 2313 => x"73746f6e", + 2314 => x"65204265", + 2315 => x"6e63686d", + 2316 => x"61726b2c", + 2317 => x"20566572", + 2318 => x"73696f6e", + 2319 => x"20322e31", + 2320 => x"20284c61", + 2321 => x"6e677561", + 2322 => x"67653a20", + 2323 => x"43290a00", + 2324 => x"50726f67", + 2325 => x"72616d20", + 2326 => x"636f6d70", + 2327 => x"696c6564", + 2328 => x"20776974", + 2329 => x"68202772", + 2330 => x"65676973", + 2331 => x"74657227", + 2332 => x"20617474", + 2333 => x"72696275", + 2334 => x"74650a00", + 2335 => x"45786563", + 2336 => x"7574696f", + 2337 => x"6e207374", + 2338 => x"61727473", + 2339 => x"2c202564", + 2340 => x"2072756e", + 2341 => x"73207468", + 2342 => x"726f7567", + 2343 => x"68204468", + 2344 => x"72797374", + 2345 => x"6f6e650a", + 2346 => x"00000000", + 2347 => x"44485259", + 2348 => x"53544f4e", + 2349 => x"45205052", + 2350 => x"4f475241", + 2351 => x"4d2c2032", + 2352 => x"274e4420", + 2353 => x"53545249", + 2354 => x"4e470000", + 2355 => x"45786563", + 2356 => x"7574696f", + 2357 => x"6e20656e", + 2358 => x"64730a00", + 2359 => x"46696e61", + 2360 => x"6c207661", + 2361 => x"6c756573", + 2362 => x"206f6620", + 2363 => x"74686520", + 2364 => x"76617269", + 2365 => x"61626c65", + 2366 => x"73207573", + 2367 => x"65642069", + 2368 => x"6e207468", + 2369 => x"65206265", + 2370 => x"6e63686d", + 2371 => x"61726b3a", + 2372 => x"0a000000", + 2373 => x"496e745f", + 2374 => x"476c6f62", + 2375 => x"3a202020", + 2376 => x"20202020", + 2377 => x"20202020", + 2378 => x"2025640a", + 2379 => x"00000000", + 2380 => x"20202020", + 2381 => x"20202020", + 2382 => x"73686f75", + 2383 => x"6c642062", + 2384 => x"653a2020", + 2385 => x"2025640a", + 2386 => x"00000000", + 2387 => x"426f6f6c", + 2388 => x"5f476c6f", + 2389 => x"623a2020", + 2390 => x"20202020", + 2391 => x"20202020", + 2392 => x"2025640a", + 2393 => x"00000000", + 2394 => x"43685f31", + 2395 => x"5f476c6f", + 2396 => x"623a2020", + 2397 => x"20202020", + 2398 => x"20202020", + 2399 => x"2025630a", + 2400 => x"00000000", + 2401 => x"20202020", + 2402 => x"20202020", + 2403 => x"73686f75", + 2404 => x"6c642062", + 2405 => x"653a2020", + 2406 => x"2025630a", + 2407 => x"00000000", + 2408 => x"43685f32", + 2409 => x"5f476c6f", + 2410 => x"623a2020", + 2411 => x"20202020", + 2412 => x"20202020", + 2413 => x"2025630a", + 2414 => x"00000000", + 2415 => x"4172725f", + 2416 => x"315f476c", + 2417 => x"6f625b38", + 2418 => x"5d3a2020", + 2419 => x"20202020", + 2420 => x"2025640a", + 2421 => x"00000000", + 2422 => x"4172725f", + 2423 => x"325f476c", + 2424 => x"6f625b38", + 2425 => x"5d5b375d", + 2426 => x"3a202020", + 2427 => x"2025640a", + 2428 => x"00000000", + 2429 => x"20202020", + 2430 => x"20202020", + 2431 => x"73686f75", + 2432 => x"6c642062", + 2433 => x"653a2020", + 2434 => x"204e756d", + 2435 => x"6265725f", + 2436 => x"4f665f52", + 2437 => x"756e7320", + 2438 => x"2b203130", + 2439 => x"0a000000", + 2440 => x"5074725f", + 2441 => x"476c6f62", + 2442 => x"2d3e0a00", + 2443 => x"20205074", + 2444 => x"725f436f", + 2445 => x"6d703a20", + 2446 => x"20202020", + 2447 => x"20202020", + 2448 => x"2025640a", + 2449 => x"00000000", + 2450 => x"20202020", + 2451 => x"20202020", + 2452 => x"73686f75", + 2453 => x"6c642062", + 2454 => x"653a2020", + 2455 => x"2028696d", + 2456 => x"706c656d", + 2457 => x"656e7461", + 2458 => x"74696f6e", + 2459 => x"2d646570", + 2460 => x"656e6465", + 2461 => x"6e74290a", + 2462 => x"00000000", + 2463 => x"20204469", + 2464 => x"7363723a", + 2465 => x"20202020", + 2466 => x"20202020", + 2467 => x"20202020", + 2468 => x"2025640a", + 2469 => x"00000000", + 2470 => x"2020456e", + 2471 => x"756d5f43", + 2472 => x"6f6d703a", + 2473 => x"20202020", + 2474 => x"20202020", + 2475 => x"2025640a", + 2476 => x"00000000", + 2477 => x"2020496e", + 2478 => x"745f436f", + 2479 => x"6d703a20", + 2480 => x"20202020", + 2481 => x"20202020", + 2482 => x"2025640a", + 2483 => x"00000000", + 2484 => x"20205374", + 2485 => x"725f436f", + 2486 => x"6d703a20", + 2487 => x"20202020", + 2488 => x"20202020", + 2489 => x"2025730a", + 2490 => x"00000000", + 2491 => x"20202020", + 2492 => x"20202020", + 2493 => x"73686f75", + 2494 => x"6c642062", + 2495 => x"653a2020", + 2496 => x"20444852", + 2497 => x"5953544f", + 2498 => x"4e452050", + 2499 => x"524f4752", + 2500 => x"414d2c20", + 2501 => x"534f4d45", + 2502 => x"20535452", + 2503 => x"494e470a", + 2504 => x"00000000", + 2505 => x"4e657874", + 2506 => x"5f507472", + 2507 => x"5f476c6f", + 2508 => x"622d3e0a", + 2509 => x"00000000", + 2510 => x"20202020", + 2511 => x"20202020", + 2512 => x"73686f75", + 2513 => x"6c642062", + 2514 => x"653a2020", + 2515 => x"2028696d", + 2516 => x"706c656d", + 2517 => x"656e7461", + 2518 => x"74696f6e", + 2519 => x"2d646570", + 2520 => x"656e6465", + 2521 => x"6e74292c", + 2522 => x"2073616d", + 2523 => x"65206173", + 2524 => x"2061626f", + 2525 => x"76650a00", + 2526 => x"496e745f", + 2527 => x"315f4c6f", + 2528 => x"633a2020", + 2529 => x"20202020", + 2530 => x"20202020", + 2531 => x"2025640a", + 2532 => x"00000000", + 2533 => x"496e745f", + 2534 => x"325f4c6f", + 2535 => x"633a2020", + 2536 => x"20202020", + 2537 => x"20202020", + 2538 => x"2025640a", + 2539 => x"00000000", + 2540 => x"496e745f", + 2541 => x"335f4c6f", + 2542 => x"633a2020", + 2543 => x"20202020", + 2544 => x"20202020", + 2545 => x"2025640a", + 2546 => x"00000000", + 2547 => x"456e756d", + 2548 => x"5f4c6f63", + 2549 => x"3a202020", + 2550 => x"20202020", + 2551 => x"20202020", + 2552 => x"2025640a", + 2553 => x"00000000", + 2554 => x"5374725f", + 2555 => x"315f4c6f", + 2556 => x"633a2020", + 2557 => x"20202020", + 2558 => x"20202020", + 2559 => x"2025730a", + 2560 => x"00000000", + 2561 => x"20202020", + 2562 => x"20202020", + 2563 => x"73686f75", + 2564 => x"6c642062", + 2565 => x"653a2020", + 2566 => x"20444852", + 2567 => x"5953544f", + 2568 => x"4e452050", + 2569 => x"524f4752", + 2570 => x"414d2c20", + 2571 => x"31275354", + 2572 => x"20535452", + 2573 => x"494e470a", + 2574 => x"00000000", + 2575 => x"5374725f", + 2576 => x"325f4c6f", + 2577 => x"633a2020", + 2578 => x"20202020", + 2579 => x"20202020", + 2580 => x"2025730a", + 2581 => x"00000000", + 2582 => x"20202020", + 2583 => x"20202020", + 2584 => x"73686f75", + 2585 => x"6c642062", + 2586 => x"653a2020", + 2587 => x"20444852", + 2588 => x"5953544f", + 2589 => x"4e452050", + 2590 => x"524f4752", + 2591 => x"414d2c20", + 2592 => x"32274e44", + 2593 => x"20535452", + 2594 => x"494e470a", + 2595 => x"00000000", + 2596 => x"55736572", + 2597 => x"2074696d", + 2598 => x"653a2025", + 2599 => x"640a0000", + 2600 => x"4d696372", + 2601 => x"6f736563", + 2602 => x"6f6e6473", + 2603 => x"20666f72", + 2604 => x"206f6e65", + 2605 => x"2072756e", + 2606 => x"20746872", + 2607 => x"6f756768", + 2608 => x"20446872", + 2609 => x"7973746f", + 2610 => x"6e653a20", + 2611 => x"00000000", + 2612 => x"2564200a", + 2613 => x"00000000", + 2614 => x"44687279", + 2615 => x"73746f6e", + 2616 => x"65732070", + 2617 => x"65722053", + 2618 => x"65636f6e", + 2619 => x"643a2020", + 2620 => x"20202020", + 2621 => x"20202020", + 2622 => x"20202020", + 2623 => x"20202020", + 2624 => x"20202020", + 2625 => x"00000000", + 2626 => x"56415820", + 2627 => x"4d495053", + 2628 => x"20726174", + 2629 => x"696e6720", + 2630 => x"2a203130", + 2631 => x"3030203d", + 2632 => x"20256420", + 2633 => x"0a000000", + 2634 => x"50726f67", + 2635 => x"72616d20", + 2636 => x"636f6d70", + 2637 => x"696c6564", + 2638 => x"20776974", + 2639 => x"686f7574", + 2640 => x"20277265", + 2641 => x"67697374", + 2642 => x"65722720", + 2643 => x"61747472", + 2644 => x"69627574", + 2645 => x"650a0000", + 2646 => x"4d656173", + 2647 => x"75726564", + 2648 => x"2074696d", + 2649 => x"6520746f", + 2650 => x"6f20736d", + 2651 => x"616c6c20", + 2652 => x"746f206f", + 2653 => x"62746169", + 2654 => x"6e206d65", + 2655 => x"616e696e", + 2656 => x"6766756c", + 2657 => x"20726573", + 2658 => x"756c7473", + 2659 => x"0a000000", + 2660 => x"506c6561", + 2661 => x"73652069", + 2662 => x"6e637265", + 2663 => x"61736520", + 2664 => x"6e756d62", + 2665 => x"6572206f", + 2666 => x"66207275", + 2667 => x"6e730a00", + 2668 => x"44485259", + 2669 => x"53544f4e", + 2670 => x"45205052", + 2671 => x"4f475241", + 2672 => x"4d2c2033", + 2673 => x"27524420", + 2674 => x"53545249", + 2675 => x"4e470000", + 2676 => x"00010202", + 2677 => x"03030303", + 2678 => x"04040404", + 2679 => x"04040404", + 2680 => x"05050505", + 2681 => x"05050505", + 2682 => x"05050505", + 2683 => x"05050505", + 2684 => x"06060606", + 2685 => x"06060606", + 2686 => x"06060606", + 2687 => x"06060606", + 2688 => x"06060606", + 2689 => x"06060606", + 2690 => x"06060606", + 2691 => x"06060606", + 2692 => x"07070707", + 2693 => x"07070707", + 2694 => x"07070707", + 2695 => x"07070707", + 2696 => x"07070707", + 2697 => x"07070707", + 2698 => x"07070707", + 2699 => x"07070707", + 2700 => x"07070707", + 2701 => x"07070707", + 2702 => x"07070707", + 2703 => x"07070707", + 2704 => x"07070707", + 2705 => x"07070707", + 2706 => x"07070707", + 2707 => x"07070707", + 2708 => x"08080808", + 2709 => x"08080808", + 2710 => x"08080808", + 2711 => x"08080808", + 2712 => x"08080808", + 2713 => x"08080808", + 2714 => x"08080808", + 2715 => x"08080808", + 2716 => x"08080808", + 2717 => x"08080808", + 2718 => x"08080808", + 2719 => x"08080808", + 2720 => x"08080808", + 2721 => x"08080808", + 2722 => x"08080808", + 2723 => x"08080808", + 2724 => x"08080808", + 2725 => x"08080808", + 2726 => x"08080808", + 2727 => x"08080808", + 2728 => x"08080808", + 2729 => x"08080808", + 2730 => x"08080808", + 2731 => x"08080808", + 2732 => x"08080808", + 2733 => x"08080808", + 2734 => x"08080808", + 2735 => x"08080808", + 2736 => x"08080808", + 2737 => x"08080808", + 2738 => x"08080808", + 2739 => x"08080808", + 2740 => x"43000000", + 2741 => x"64756d6d", + 2742 => x"792e6578", + 2743 => x"65000000", + 2744 => x"00ffffff", + 2745 => x"ff00ffff", + 2746 => x"ffff00ff", + 2747 => x"ffffff00", + 2748 => x"00000000", + 2749 => x"00000000", + 2750 => x"00000000", + 2751 => x"000032dc", + 2752 => x"0000c350", + 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"ffffffff", + 2767 => x"00000000", + 2768 => x"00020000", + 2769 => x"00000000", + 2770 => x"00000000", + 2771 => x"00002b44", + 2772 => x"00002b44", + 2773 => x"00002b4c", + 2774 => x"00002b4c", + 2775 => x"00002b54", + 2776 => x"00002b54", + 2777 => x"00002b5c", + 2778 => x"00002b5c", + 2779 => x"00002b64", + 2780 => x"00002b64", + 2781 => x"00002b6c", + 2782 => x"00002b6c", + 2783 => x"00002b74", + 2784 => x"00002b74", + 2785 => x"00002b7c", + 2786 => x"00002b7c", + 2787 => x"00002b84", + 2788 => x"00002b84", + 2789 => x"00002b8c", + 2790 => x"00002b8c", + 2791 => x"00002b94", + 2792 => x"00002b94", + 2793 => x"00002b9c", + 2794 => x"00002b9c", + 2795 => x"00002ba4", + 2796 => x"00002ba4", + 2797 => x"00002bac", + 2798 => x"00002bac", + 2799 => x"00002bb4", + 2800 => x"00002bb4", + 2801 => x"00002bbc", + 2802 => x"00002bbc", + 2803 => x"00002bc4", + 2804 => x"00002bc4", + 2805 => x"00002bcc", + 2806 => x"00002bcc", + 2807 => x"00002bd4", + 2808 => x"00002bd4", + 2809 => x"00002bdc", + 2810 => x"00002bdc", + 2811 => x"00002be4", + 2812 => x"00002be4", + 2813 => x"00002bec", + 2814 => x"00002bec", + 2815 => x"00002bf4", + 2816 => x"00002bf4", + 2817 => x"00002bfc", + 2818 => x"00002bfc", + 2819 => x"00002c04", + 2820 => x"00002c04", + 2821 => x"00002c0c", + 2822 => x"00002c0c", + 2823 => x"00002c14", + 2824 => x"00002c14", + 2825 => x"00002c1c", + 2826 => x"00002c1c", + 2827 => x"00002c24", + 2828 => x"00002c24", + 2829 => x"00002c2c", + 2830 => x"00002c2c", + 2831 => x"00002c34", + 2832 => x"00002c34", + 2833 => x"00002c3c", + 2834 => x"00002c3c", + 2835 => x"00002c44", + 2836 => x"00002c44", + 2837 => x"00002c4c", + 2838 => x"00002c4c", + 2839 => x"00002c54", + 2840 => x"00002c54", + 2841 => x"00002c5c", + 2842 => x"00002c5c", + 2843 => x"00002c64", + 2844 => x"00002c64", + 2845 => x"00002c6c", + 2846 => x"00002c6c", + 2847 => x"00002c74", + 2848 => x"00002c74", + 2849 => x"00002c7c", + 2850 => x"00002c7c", + 2851 => x"00002c84", + 2852 => x"00002c84", + 2853 => x"00002c8c", + 2854 => x"00002c8c", + 2855 => x"00002c94", + 2856 => x"00002c94", + 2857 => x"00002c9c", + 2858 => x"00002c9c", + 2859 => x"00002ca4", + 2860 => x"00002ca4", + 2861 => x"00002cac", + 2862 => x"00002cac", + 2863 => x"00002cb4", + 2864 => x"00002cb4", + 2865 => x"00002cbc", + 2866 => x"00002cbc", + 2867 => x"00002cc4", + 2868 => x"00002cc4", + 2869 => x"00002ccc", + 2870 => x"00002ccc", + 2871 => x"00002cd4", + 2872 => x"00002cd4", + 2873 => x"00002cdc", + 2874 => x"00002cdc", + 2875 => x"00002ce4", + 2876 => x"00002ce4", + 2877 => x"00002cec", + 2878 => x"00002cec", + 2879 => x"00002cf4", + 2880 => x"00002cf4", + 2881 => x"00002cfc", + 2882 => x"00002cfc", + 2883 => x"00002d04", + 2884 => x"00002d04", + 2885 => x"00002d0c", + 2886 => x"00002d0c", + 2887 => x"00002d14", + 2888 => x"00002d14", + 2889 => x"00002d1c", + 2890 => x"00002d1c", + 2891 => x"00002d24", + 2892 => x"00002d24", + 2893 => x"00002d2c", + 2894 => x"00002d2c", + 2895 => x"00002d34", + 2896 => x"00002d34", + 2897 => x"00002d3c", + 2898 => x"00002d3c", + 2899 => x"00002d44", + 2900 => x"00002d44", + 2901 => x"00002d4c", + 2902 => x"00002d4c", + 2903 => x"00002d54", + 2904 => x"00002d54", + 2905 => x"00002d5c", + 2906 => x"00002d5c", + 2907 => x"00002d64", + 2908 => x"00002d64", + 2909 => x"00002d6c", + 2910 => x"00002d6c", + 2911 => x"00002d74", + 2912 => x"00002d74", + 2913 => x"00002d7c", + 2914 => x"00002d7c", + 2915 => x"00002d84", + 2916 => x"00002d84", + 2917 => x"00002d8c", + 2918 => x"00002d8c", + 2919 => x"00002d94", + 2920 => x"00002d94", + 2921 => x"00002d9c", + 2922 => x"00002d9c", + 2923 => x"00002da4", + 2924 => x"00002da4", + 2925 => x"00002dac", + 2926 => x"00002dac", + 2927 => x"00002db4", + 2928 => x"00002db4", + 2929 => x"00002dbc", + 2930 => x"00002dbc", + 2931 => x"00002dc4", + 2932 => x"00002dc4", + 2933 => x"00002dcc", + 2934 => x"00002dcc", + 2935 => x"00002dd4", + 2936 => x"00002dd4", + 2937 => x"00002ddc", + 2938 => x"00002ddc", + 2939 => x"00002de4", + 2940 => x"00002de4", + 2941 => x"00002dec", + 2942 => x"00002dec", + 2943 => x"00002df4", + 2944 => x"00002df4", + 2945 => x"00002dfc", + 2946 => x"00002dfc", + 2947 => x"00002e04", + 2948 => x"00002e04", + 2949 => x"00002e0c", + 2950 => x"00002e0c", + 2951 => x"00002e14", + 2952 => x"00002e14", + 2953 => x"00002e1c", + 2954 => x"00002e1c", + 2955 => x"00002e24", + 2956 => x"00002e24", + 2957 => x"00002e2c", + 2958 => x"00002e2c", + 2959 => x"00002e34", + 2960 => x"00002e34", + 2961 => x"00002e3c", + 2962 => x"00002e3c", + 2963 => x"00002e44", + 2964 => x"00002e44", + 2965 => x"00002e4c", + 2966 => x"00002e4c", + 2967 => x"00002e54", + 2968 => x"00002e54", + 2969 => x"00002e5c", + 2970 => x"00002e5c", + 2971 => x"00002e64", + 2972 => x"00002e64", + 2973 => x"00002e6c", + 2974 => x"00002e6c", + 2975 => x"00002e74", + 2976 => x"00002e74", + 2977 => x"00002e7c", + 2978 => x"00002e7c", + 2979 => x"00002e84", + 2980 => x"00002e84", + 2981 => x"00002e8c", + 2982 => x"00002e8c", + 2983 => x"00002e94", + 2984 => x"00002e94", + 2985 => x"00002e9c", + 2986 => x"00002e9c", + 2987 => x"00002ea4", + 2988 => x"00002ea4", + 2989 => x"00002eac", + 2990 => x"00002eac", + 2991 => x"00002eb4", + 2992 => x"00002eb4", + 2993 => x"00002ebc", + 2994 => x"00002ebc", + 2995 => x"00002ec4", + 2996 => x"00002ec4", + 2997 => x"00002ecc", + 2998 => x"00002ecc", + 2999 => x"00002ed4", + 3000 => x"00002ed4", + 3001 => x"00002edc", + 3002 => x"00002edc", + 3003 => x"00002ee4", + 3004 => x"00002ee4", + 3005 => x"00002eec", + 3006 => x"00002eec", + 3007 => x"00002ef4", + 3008 => x"00002ef4", + 3009 => x"00002efc", + 3010 => x"00002efc", + 3011 => x"00002f04", + 3012 => x"00002f04", + 3013 => x"00002f0c", + 3014 => x"00002f0c", + 3015 => x"00002f14", + 3016 => x"00002f14", + 3017 => x"00002f1c", + 3018 => x"00002f1c", + 3019 => x"00002f24", + 3020 => x"00002f24", + 3021 => x"00002f2c", + 3022 => x"00002f2c", + 3023 => x"00002f34", + 3024 => x"00002f34", + 3025 => x"00002f3c", + 3026 => x"00002f3c", + 3027 => x"00002f50", + 3028 => x"00000000", + 3029 => x"000031b8", + 3030 => x"00003214", + 3031 => x"00003270", + 3032 => x"00000000", + 3033 => x"00000000", + 3034 => x"00000000", + 3035 => x"00000000", + 3036 => x"00000000", + 3037 => x"00000000", + 3038 => x"00000000", + 3039 => x"00000000", + 3040 => x"00000000", + 3041 => x"00002ad0", + 3042 => x"00000000", + 3043 => x"00000000", + 3044 => x"00000000", + 3045 => x"00000000", + 3046 => x"00000000", + 3047 => x"00000000", + 3048 => x"00000000", + 3049 => x"00000000", + 3050 => x"00000000", + 3051 => x"00000000", + 3052 => x"00000000", + 3053 => x"00000000", + 3054 => x"00000000", + 3055 => x"00000000", + 3056 => x"00000000", + 3057 => x"00000000", + 3058 => x"00000000", + 3059 => x"00000000", + 3060 => x"00000000", + 3061 => x"00000000", + 3062 => x"00000000", + 3063 => x"00000000", + 3064 => x"00000000", + 3065 => x"00000000", + 3066 => x"00000000", + 3067 => x"00000000", + 3068 => x"00000000", + 3069 => x"00000000", + 3070 => x"00000001", + 3071 => x"330eabcd", + 3072 => x"1234e66d", + 3073 => x"deec0005", + 3074 => x"000b0000", + 3075 => x"00000000", + 3076 => x"00000000", + 3077 => x"00000000", + 3078 => x"00000000", + 3079 => x"00000000", + 3080 => x"00000000", + 3081 => x"00000000", + 3082 => x"00000000", + 3083 => x"00000000", + 3084 => x"00000000", + 3085 => x"00000000", + 3086 => x"00000000", + 3087 => x"00000000", + 3088 => x"00000000", + 3089 => x"00000000", + 3090 => x"00000000", + 3091 => x"00000000", + 3092 => x"00000000", + 3093 => x"00000000", + 3094 => x"00000000", + 3095 => x"00000000", + 3096 => x"00000000", + 3097 => x"00000000", + 3098 => x"00000000", + 3099 => x"00000000", + 3100 => x"00000000", + 3101 => x"00000000", + 3102 => x"00000000", + 3103 => x"00000000", + 3104 => x"00000000", + 3105 => x"00000000", + 3106 => x"00000000", + 3107 => x"00000000", + 3108 => x"00000000", + 3109 => x"00000000", + 3110 => x"00000000", + 3111 => x"00000000", + 3112 => x"00000000", + 3113 => x"00000000", + 3114 => x"00000000", + 3115 => x"00000000", + 3116 => x"00000000", + 3117 => x"00000000", + 3118 => x"00000000", + 3119 => x"00000000", + 3120 => x"00000000", + 3121 => x"00000000", + 3122 => x"00000000", + 3123 => x"00000000", + 3124 => x"00000000", + 3125 => x"00000000", + 3126 => x"00000000", + 3127 => x"00000000", + 3128 => x"00000000", + 3129 => x"00000000", + 3130 => x"00000000", + 3131 => x"00000000", + 3132 => x"00000000", + 3133 => x"00000000", + 3134 => x"00000000", + 3135 => x"00000000", + 3136 => x"00000000", + 3137 => x"00000000", + 3138 => x"00000000", + 3139 => x"00000000", + 3140 => x"00000000", + 3141 => x"00000000", + 3142 => x"00000000", + 3143 => x"00000000", + 3144 => x"00000000", + 3145 => x"00000000", + 3146 => x"00000000", + 3147 => x"00000000", + 3148 => x"00000000", + 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"00000000", + 3163 => x"00000000", + 3164 => x"00000000", + 3165 => x"00000000", + 3166 => x"00000000", + 3167 => x"00000000", + 3168 => x"00000000", + 3169 => x"00000000", + 3170 => x"00000000", + 3171 => x"00000000", + 3172 => x"00000000", + 3173 => x"00000000", + 3174 => x"00000000", + 3175 => x"00000000", + 3176 => x"00000000", + 3177 => x"00000000", + 3178 => x"00000000", + 3179 => x"00000000", + 3180 => x"00000000", + 3181 => x"00000000", + 3182 => x"00000000", + 3183 => x"00000000", + 3184 => x"00000000", + 3185 => x"00000000", + 3186 => x"00000000", + 3187 => x"00000000", + 3188 => x"00000000", + 3189 => x"00000000", + 3190 => x"00000000", + 3191 => x"00000000", + 3192 => x"00000000", + 3193 => x"00000000", + 3194 => x"00000000", + 3195 => x"00000000", + 3196 => x"00000000", + 3197 => x"00000000", + 3198 => x"00000000", + 3199 => x"00000000", + 3200 => x"00000000", + 3201 => x"00000000", + 3202 => x"00000000", + 3203 => x"00000000", + 3204 => x"00000000", + 3205 => x"00000000", + 3206 => x"00000000", + 3207 => x"00000000", + 3208 => x"00000000", + 3209 => x"00000000", + 3210 => x"00000000", + 3211 => x"00000000", + 3212 => x"00000000", + 3213 => x"00000000", + 3214 => x"00000000", + 3215 => x"00000000", + 3216 => x"00000000", + 3217 => x"00000000", + 3218 => x"00000000", + 3219 => x"00000000", + 3220 => x"00000000", + 3221 => x"00000000", + 3222 => x"00000000", + 3223 => x"00000000", + 3224 => x"00000000", + 3225 => x"00000000", + 3226 => x"00000000", + 3227 => x"00000000", + 3228 => x"00000000", + 3229 => x"00000000", + 3230 => x"00000000", + 3231 => x"00000000", + 3232 => x"00000000", + 3233 => x"00000000", + 3234 => x"00000000", + 3235 => x"00000000", + 3236 => x"00000000", + 3237 => x"00000000", + 3238 => x"00000000", + 3239 => x"00000000", + 3240 => x"00000000", + 3241 => x"00000000", + 3242 => x"00000000", + 3243 => x"00000000", + 3244 => x"00000000", + 3245 => x"00000000", + 3246 => x"00000000", + 3247 => x"00000000", + 3248 => x"00000000", + 3249 => x"00000000", + 3250 => x"00000000", + 3251 => x"00002ad4", + 3252 => x"ffffffff", + 3253 => x"00000000", + 3254 => x"ffffffff", + 3255 => x"00000000", + 3256 => x"00000000", others => x"00000000" ); diff --git a/zpu/hdl/example/simzpu_dmips.do b/zpu/hdl/example/simzpu_dmips.do new file mode 100644 index 0000000..883259e --- /dev/null +++ b/zpu/hdl/example/simzpu_dmips.do @@ -0,0 +1,29 @@ +# Xilinx WebPack modelsim script +# +# +# cd C:/workspace/zpu/zpu/hdl/example +# do simzpu_dmips.do + +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config.vhd +vcom -93 -explicit ../zpu4/core/zpupkg.vhd +vcom -93 -explicit ../zpu4/src/txt_util.vhd +vcom -93 -explicit sim_small_fpga_top_noint.vhd +vcom -93 -explicit ../zpu4/core/zpu_core_small.vhd +vcom -93 -explicit bram_dmips.vhd +vcom -93 -explicit ../zpu4/src/timer.vhd +vcom -93 -explicit ../zpu4/src/io.vhd +vcom -93 -explicit ../zpu4/src/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 10 ms diff --git a/zpu/hdl/example/zpuromgen.exe b/zpu/hdl/example/zpuromgen.exe new file mode 100644 index 0000000..6655412 Binary files /dev/null and b/zpu/hdl/example/zpuromgen.exe differ -- cgit v1.1 From 709f5ff71d918f10835d89ed6f349aee9dea340b Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 12 Nov 2008 20:50:06 +0000 Subject: =?UTF-8?q?2008-11-12=20=C1lvaro=20Lopes=20=20?= =?UTF-8?q?=09*=20zpu/hdl/zpu4/core/zpu=5Fcore.vhd:=20Basic=20interrupt=20?= =?UTF-8?q?implementation=20=09for=20zpu4=20core.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zpu/ChangeLog | 3 +++ zpu/hdl/zpu4/core/zpu_core.vhd | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/zpu/ChangeLog b/zpu/ChangeLog index e190a9f..2ed7369 100644 --- a/zpu/ChangeLog +++ b/zpu/ChangeLog @@ -1,3 +1,6 @@ +2008-11-12 Álvaro Lopes + * zpu/hdl/zpu4/core/zpu_core.vhd: Basic interrupt implementation + for zpu4 core. 2008-09-16 Salvador Eduardo Tropea * zpu/hdl/zealot: added small ZPU core, testbenches and FPGA implementation 2008-09-11 Salvador Eduardo Tropea diff --git a/zpu/hdl/zpu4/core/zpu_core.vhd b/zpu/hdl/zpu4/core/zpu_core.vhd index 012fe1b..69da686 100644 --- a/zpu/hdl/zpu4/core/zpu_core.vhd +++ b/zpu/hdl/zpu4/core/zpu_core.vhd @@ -1,6 +1,7 @@ -- ZPU -- -- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- Copyright 2008 alvieboy - Álvaro Lopes - alvieboy@alvie.com -- -- The FreeBSD license -- @@ -145,7 +146,8 @@ State_Mult5, State_Mult4, State_BinaryOpResult2, State_BinaryOpResult, -State_Idle +State_Idle, +State_Interrupt ); @@ -171,6 +173,8 @@ signal mem_addr : std_logic_vector(maxAddrBitIncIO downto minAddrBit); signal mem_delayAddr : std_logic_vector(maxAddrBitIncIO downto minAddrBit); signal mem_delayReadEnable : std_logic; +signal inInterrupt: std_logic; + signal decodeWord : std_logic_vector(wordSize-1 downto 0); @@ -244,6 +248,7 @@ begin pc <= (others => '0'); idim_flag <= '0'; begin_inst <= '0'; + inInterrupt <= '0'; mem_writeEnable <= '0'; mem_readEnable <= '0'; multA <= (others => '0'); @@ -288,6 +293,10 @@ begin trace_topOfStackB <= std_logic_vector(stackB); begin_inst <= '0'; + if (interrupt='0') then + -- Interrupt ended, we can serve ISR again + inInterrupt <= '0'; + end if; case state is when State_Idle => @@ -319,6 +328,27 @@ begin if in_mem_busy='0' then decodeWord <= mem_read; state <= State_Decode2; + -- Do not recurse into ISR while interrupt line is active + if interrupt='1' and inInterrupt='0' and idim_flag='0' then + -- We got an interrupt, execute interrupt instead of next instruction + inInterrupt <= '1'; + sp <= decSp; + mem_writeEnable <= '1'; + mem_addr <= std_logic_vector(incSp); + mem_write <= std_logic_vector(stackB); + stackA <= (others => DontCareValue); + stackA(maxAddrBitIncIO downto 0) <= pc; + stackB <= stackA; + pc <= to_unsigned(32, maxAddrBitIncIO+1); + state <= State_Interrupt; + end if; + end if; + when State_Interrupt => + if in_mem_busy='0' then + mem_addr <= std_logic_vector(pc(maxAddrBitIncIO downto minAddrBit)); + mem_readEnable <= '1'; + state <= State_Decode; + report "ZPU jumped to interrupt!" severity note; end if; when State_Decode2 => -- decode 4 instructions in parallel -- cgit v1.1 From e68026ab045d371d6f3710276ecebd7f4645d26c Mon Sep 17 00:00:00 2001 From: oharboe Date: Sun, 14 Dec 2008 23:11:10 +0000 Subject: wip - added LIFO to list of ideas for next gen ZPU --- zpu/docs/zpu_arch.html | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 0c57cae..5cf7410 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -2002,24 +2002,42 @@ $ arm-elf-size *

          Next generation ZPU

          Based on feedback here is a list of a tenuous "consensus" for the next generation of the ZPU with some tentative ideas on implementation. -

          -The plan is to update zpu_core.vhd and zpu_core_small.vhd as examples/reference, -and to open up for innovation in the HDL implementation. - +

          Goals

            -
          1. Reduce minimum code size footprint +
          2. Reduce minimum code size footprint, i.e. BRAM code overhead. Non-trivial +usable applications in 4kBytes of BRAM (single BRAM block). +
          3. Reduce minimum FPGA logic footprint by 20% or more. Goal <300 LUT for +32 bit ZPU +
          4. Weed out unecessary ZPU variations +
          +

          Best current ideas on how to reach these goals

            +
          1. Introduce 16 entry 32 bit LIFO for instructions that change sp today. LOADSP/STORESP/ADDSP +refer to the normal stack but add/get values from the LIFO in addition.

            + +loadsp n ; load value from memory at address "sp + n" and put it into the LIFO.
            +im m ; put value into LIFO register
            +add ; get two values from LIFO register, put back result.
            +
            +

            +NB! none of the instructions above change sp!!! +

            +If the LIFO is full, putting a value into the LIFO has no defined behaviour. Getting a value +from an empty LIFO has no defined behaviour. +

            +GCC will use 8 slots, instruction emulation and interrupts owns the remaining 8 slots. +

          2. Add single entry for unknown instructions. PC and unsupported instruction is -pushed onto stack before jumping to unkonwn instruction vector. This makes it possible +pushed onto stack before jumping to unknown instruction vector. This makes it possible to write denser microcode for missing instructions. For emulated opcodes that are not in use, the microcode can more easily be disabled. Determining that e.g. MULT is not used, can be a bit tricky, but disabling it is easy.

            -The address of this entry will be 0x10. The reason 0x00 is not used is that -GCC needs 0x00-0x0b inclusive to store R0-R2(memory mapped GCC registers). -The reset vector remains 0x0 so the 0x00-0x0f addresses contains the -first few instructions executed by the ZPU. Some very early work has been -done in nextgen_crt0.S. +The unsupported vectory entry address is 0x10. +

          3. GCC needs 4 registers. These are today mapped to memory. What addresses to use? +Today memory address 0x00-0x0f inclusive are used for this purpose. Introduce emulated +instruction to load/store these registers? That would allow using either hardware or +memory registers.
          4. Single entry for *all* unknown instructions does not limit emulation to the EMULATE instructions today, but instructions such as OR, LOADSP, STORESP, ADDSP, etc. can also be emulated. This opens up for further reduction in logic usage. @@ -2027,18 +2045,8 @@ etc. can also be emulated. This opens up for further reduction in logic usage. write a compact custom crt0.s to fit an instruction subset.
          5. The interrupt is basically an unknown instruction that is injected into the execution stream. -
          6. Possibly modify the java simulator to support the single entry for unknown -instructions. -
        1. Add floating point add and mult. FADD & FMULT. Option to generate the instructions from the compiler. -
        2. Add GCC support for seperate code/data bus. This may be as "simple" as -writing a custom linker script for the current GCC compiler. -
        3. Add some scheme to support custom instructions. Can this be combined with -single entry point for unknown instructions? -
        4. Add support to Zylin Embedded CDT for downloading fully functional ZPU -toolchain. The goal is to allow new users to write and simulate simple ZPU -programs in in less than an hour.
        5. Strip away unused instructions from GCC and add options to GCC for not emitting more advanced instructions. This will e.g. convert MULT/DIV into function calls to libgcc and thus make it easier to determine that -- cgit v1.1 From 26806927a9e6985fdc508c703c3525e5aedf3a23 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 17 Dec 2008 22:09:07 +0000 Subject: register stack wip --- zpu/docs/zpu_arch.html | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 5cf7410..9b69660 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -33,6 +33,7 @@ $id$
        6. Next generation ZPU +
        7. Register stack ZPU @@ -2090,5 +2091,60 @@ as an uncompressed .txt file

          Getting help - mailing list

          The place to get help is the
          zylin-zpu mailing list + +

          Register stack

          +In order to reduce the size and complexity of the small ZPU, a register stack +has been put forward. It remains an open question as to whether this can +indeed reduce size and improve performance of the ZPU. +

          +Terminology: "stack" is the normal stack in memory pointed to +by the sp register. "register stack" is a different stack that is +not connected to memory directly or associated with the "stack". +

          +The idea is to push and pop the register stack such that bandwidth +is increased and complexity of memory access logic is reduced. +

          +Another clever bit is to mask interrupts while this stack is +not empty such that this stack never has to be +saved. It's depth would be fixed to something natural +for an FPGA, say 16 deep(doesn't that translate to a single +LUT for a bit?). + +

          Example of internal stack

          +im 1 ; push onto register stack
          +loadsp N ; load from memory pointed to by sp+N, push onto register stack
          +add ; pop values from register stack and add, push onto register stack
          + +

          Quick summary of instruction operation with register stack

          +This is not a "formal" definition of the instruction set, but should +give a pretty good idea of what the modified instruction looks like. +

          +Read up on the current definition of instructions and consider the +list below a guide to what changes have been made to fit a register +stack. The list is not complete, but covers the important categories +of instructions. If it is clear how the ADD instruction changed, +then it should be obvious how the AND isntruction must be similarly +modified. +

          +Note also that there are lots of tiny problems that have to be ironed +out before the instruction set and emulation can work. Below is just +a first stab, which hopefully is good enough to evaluate the approach. + + + + + + + + + + + + + + +
          IM push onto/modify top of register stack
          STORESP pop register stack store to memory SP+N
          LOADSP load memory SP+N push onto register stack
          EMULATE push PC+1 onto register stack and jump to EMULATE vector
          PUSHPC push pc onto register stack
          POPPC pop pc from register stack
          LOAD pop address from register stack, load from memory address, push onto register stack
          STORE pop register stack 2x store value to memory
          PUSHSP push sp onto register stack
          POPSP pop sp from register stack
          POPPC pop pc from register stack
          ADD pop 2x register stack, add, push to register stack
          NOT pop register stack, bit inverse value, push onto register stack
          +Emulate instructions and calling convention may have to change substantially. + \ No newline at end of file -- cgit v1.1 From 8e14f783818beeaae0786e8168ab1613d3cfbdd9 Mon Sep 17 00:00:00 2001 From: dez Date: Fri, 9 Jan 2009 11:17:10 -0500 Subject: this is a push test --- foo | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 foo diff --git a/foo b/foo new file mode 100644 index 0000000..e69de29 -- cgit v1.1 From dfe4db67d7b939ed3db9be43468508cff2418227 Mon Sep 17 00:00:00 2001 From: dez Date: Fri, 9 Jan 2009 11:19:20 -0500 Subject: not empty now --- foo | 1 + 1 file changed, 1 insertion(+) diff --git a/foo b/foo index e69de29..8bd6648 100644 --- a/foo +++ b/foo @@ -0,0 +1 @@ +asdf -- cgit v1.1 From 3a35af1a9d5a61c3af3c04cafcc3366ba04ba864 Mon Sep 17 00:00:00 2001 From: dez Date: Fri, 9 Jan 2009 11:36:29 -0500 Subject: this is a test --- bar | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bar diff --git a/bar b/bar new file mode 100644 index 0000000..e69de29 -- cgit v1.1 From 97f353278c22287b1931eeefb7d9403c3276bfc5 Mon Sep 17 00:00:00 2001 From: dez Date: Fri, 9 Jan 2009 12:10:16 -0500 Subject: test cleanup --- bar | 0 foo | 1 - 2 files changed, 1 deletion(-) delete mode 100644 bar delete mode 100644 foo diff --git a/bar b/bar deleted file mode 100644 index e69de29..0000000 diff --git a/foo b/foo deleted file mode 100644 index 8bd6648..0000000 --- a/foo +++ /dev/null @@ -1 +0,0 @@ -asdf -- cgit v1.1 From 5af4810c230702ae3a2db9e3d0e5c783f3417105 Mon Sep 17 00:00:00 2001 From: dez_ambrose Date: Fri, 9 Jan 2009 12:46:03 -0500 Subject: Organizing document to make cleared seperation of architecture, implementations, and other design elements. --- zpu/docs/zpu_arch.html | 4533 +++++++++++++++++++++++++----------------------- 1 file changed, 2383 insertions(+), 2150 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 9b69660..a0187e6 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1,2150 +1,2383 @@ - - -

          Latest version of this document

          -This is a snapshot of the zpu_arch.html document in CVS. Please check out -the latest version from CVS to get the latest version. -

          -$id$ -

          Index

          -
          - - -

          The worlds smallest 32 bit CPU with GCC toolchain -

          -

          This CPU is finding a new home at www.opencores.org, please -contact me if you are willing and able to help in shaping up the -www.opencores.org pages. -

          -

          The HDL, GCC toolchain and eCos HAL are actually done. Mainly I -could need a hand with writing up docs/web pages/examples/bug -reports.

          -

          The ZPU has a BSD license for the HDL and GPL for the rest(source -files are sadly out of date here, patches gladly accepted!). This -allows deployments to implement any version of the ZPU they want -without running into commercial problems, but if improvements are -done to the architecture as such, then they need to be contributed -back. -

          -

          One strength of the ZPU is that it is tiny and therefore easy to -implement from scratch to suit specialized needs and optimizations.

          -

          Currently there exists some pages at http://www.zylin.com/zpu.htm -that explains about the ZPU. According to OpenCores policy this -information should be moved to www.opencores.org. Patches gratefully -accepted to do so!

          -

          Per Jan 1. 2008, Zylin has the Copyright for the ZPU, i.e. Zylin -is free to decide that the ZPU shall have a BSD license for HDL + GPL -for the rest.

          -

          Sincerley,

          -

          Øyvind Harboe
          Zylin AS -

          -

          Features -

          -
            -
          • Small size: 442 LUT @ 95 MHz after - P&R w/32 bit datapath Xilinx XC3S400 -

            -
          • Wishbone -

            -
          • Code size 80% of ARM Thumb -

            -
          • GCC toolchain(GDB, newlib, - libstdc+) -

            -
          • eCos embedded operating system support

            -
          -

          Survey -

          -

          Please take the time to fill in this short survey so we can gather -information about where the ZPU can be the most useful:

          -

          http://www.zylin.com/zpusurvey.html

          -

          Status -

          -
            -
          • HDL works -

            -
          • GCC toolchain works -

            -
          • eCos HAL works, but could be less - RAM hungry -

            -
          • The main problem at this point is - not usage of the CPU, but that the documentation/CVS layout needs - attention -

            -
          • Needs GDB stub support in eCos -

            -
          • Could do with a Verilog implementation(ca. 600 lines to - translate)

            -
          -

          Simulator -

          -

          The ZPU simulator is integrated into the Zylin Embedded CDT plugin -to ease debugging of ZPU applications:

          -

          http://www.zylin.com/embeddedcdt.html

          -

          The ZPU simulator has many features besides debugging an -application:

          -
            -
          • taking output from simulation(e.g. - ModelSim) and matching that against the Java simulator, thus making - it much easier to debug HDL implementations and also getting real - world timing information -

            -
          • can generate gprof output -

            -
          • generate various statistics -

            -
          -

          The plugin is still pretty rough around the edges, and needs to -get GUI support for enabling the ModelSim trace input feature.

          -


          Compiling -ZPU application

          -


          Setting -up the simulator

          -


          Choosing -ZPU executable

          -


          Debug -session

          -


          -

          - - -

          Getting started - FPGA

          -The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART -is a good place to start. -

          -You'll find a working simulation script in hdl/example/simzpu_small.do and hdl/example_medium/simzpu_medium.do, which -show simulation of the small(zpu_core_small.vhd) and medium sized ZPU(zpu_core.vhd). hdl/example/simzpu_interrupt.do -shows use of interrupts. -

          -When implementing the ZPU, copy the following files and modify them to your needs: -

            -
          1. hdl/example/zpu_config.vhd - set up RAM size here -
          2. hdl/example/helloworld.vhd - dual port BRAM implementation. -
          -Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is memory mapped(read/write) in the ZPU. -

          Generating VHDL BRAM initialization

          - - -../install/bin/zpu-elf-objcopy -O binary hello.elf hello.bin
          -java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
          - -
          -

          Build another test application for example simulation

          -Here is how to build a rom image for an application using the -zpu/example simulation files. -

          -cd zpu/roadshow/roadshow/dhrystone
          -sh build.sh
          -cd zpu/hdl/example
          -gcc zpuromgen.c
          -$ ./a
          -Usage: ./a binary_file
          -./a ../../roadshow/roadshow/dhrystone/dhrystone.bin >app.txt
          -

          -Copy and paste app.txt into helloworld.vhd. - -

          Running example simulation

          -The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt: -
            -
          1. cd c:/<installfolder>/hdl/example -
          2. do zpusim_small.do -
          -

          -After running the hello world simulation (see zpusim.do), two files are written to the hdl/example directory: -

            -
          1. log.txt - contains the "Hello world!" text written to the debug channel/simplified UART. -
          2. trace.txt - a trace file for the CPU. The instruction set simulator has the capability of taking -this file as input in order to verify that the HDL implementation matches the instruction set simulator. -When a mismatch is found, the GDB debugger will break. Very handy for debugging custom ZPU implementations. -
          -

          HDL Directories & files

          -
            -
          • example - contains example files & working ZPU. Start here. -
          • wishbone - contains wishbone interface for the ZPU -
          • zpu3 - if you are interested in developing ZPU cores and not only using them, then this directory contains various stuff of more or less historical interest. -
          • zpu4 - if you are interested in developing ZPU cores and not only using them, then this is the active development version. You'll also want to copy out the -files you need from this folder to your own project. -
          - -The HDL files need a bit of spit and polish! - -
          -

          Getting started - software

          -The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has -some very basic peripherals defined: counter, timer interrupt and a debug output port. -

          Installing

          -
            -
          1. Install Cygwin. http://www.cygwin.com -
          2. Install Java -
          3. Start Cygwin bash -
          4. cd zpu/sw -
          5. sh setup.sh -
          6. /tmp/zpu/install/bin now has the .exe files for the GCC toolchain & GDB -
          7. Optionally you may set up PATH variables to point to /tmp/zpu/install/bin
            -source env.sh -
          -

          Hello world example

          -The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. -

          - -cd zpu/sw/helloworld
          -../install/bin/zpu-elf-gcc -phi hello.c -o hello.elf
          -
          -

          Running the hello world example in GDB

          -
            -
          1. cd zpu/sw/helloworld -
          2. Launch the simulator from a seperate bash shell:

            -java -classpath ../simulator/zpusim.jar -Xmx512m com.zylin.zpu.simulator.Phi 4444 -

            - -

          3. Launch GDB:

            -../install/bin/zpu-elf-gdb hello.elf -

          4. Connect to target, load and run application:

            - -(gdb) target remote localhost:4444
            -(gdb) load
            -(gdb) continue
            -
            -

            - - -

          - - -
          -

          Architecture introduction

          -The ZPU is a zero operand, or stack based CPU. The opcodes have a fixed width of 8 bits. -

          -Example: -

          -

          - - IM 5 ; push 5 onto the stack - LOADSP 20 ; push value at memory location SP+20 - ADD ; pop 2 values on the stack and push the result - -
          -As can be seen, a lot of information is packed into the 8 bits, e.g. the IM instruction pushes a 7 bit signed integer onto the stack. -

          -The choice of opcodes is intimately tied to the GCC toolchain capabilities. -

          -

          - - /* simple program showing some interesting qualities of the ZPU toolchain */ - void bar(int); - int j; - void foo(int a, int b, int c) - { - a++; - b+=a; - j=c; - bar(b); - } - -foo: - loadsp 4 ; a is at memory location SP+4 - im 1 - add - loadsp 12 ; b is now at memory location SP+12 - add - loadsp 16 ; c is now at memory location SP+16 - im 24 ; «j» is at absolute memory location 24. -; Notice how the ZPU toolchain is using link-time relaxation -; to squeeze the address into a single no-op - store - im 22 ; the fn bar is at address 22 - call - im 12 - return ; 12 bytes of arguments + return from fn - -
          - -
          -

          Instruction set

          -Only the base instructions are implemented in the architecture. More advanced instructions, like ASHIFTLEFT are emulated in the illegal instruction vector. - -All operations are 32 bit wide. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          NameOpcodeDescriptionDefinition
          - BREAKPOINT - - 00000000 - - The debugger sets a memory location to this value to set a breakpoint. Once a JTAG-like - debugger interface is added, it will be convenient to be able to distinguish - between a breakpoint and an illegal(possibly emulated) instruction. - - No effect on registers -
          - IM - - 1xxx xxxx - - Pushes 7 bit sign extended integer and sets the a «instruction decode interrupt mask» flag(IDIM). -

          - If the IDIM flag is already set, this instruction shifts the value on the stack left by 7 bits and stores the 7 bit immediate value into the lower 7 bits. -

          - Unless an instruction is listed as treating the IDIM flag specially, it should be assumed to clear the IDIM flag. -

          - To push a 14 bit integer onto the stack, use two consequtive IM instructions. -

          - If multiple immediate integers are to be pushed onto the stack, they must be interleaved with another instruction, typically NOP. -

          - -pc <= pc + 1
          -idim <= 1
          -if (idim=0) then
          - sp <= sp - 1;
          - for i in wordSize-1 downto 7 loop
          - mem(sp)(i) <= opcode(6)
          - end loop
          - mem(sp)(6 downto 0) <= opcode(6 downto 0)
          -else
          - mem(sp)(wordSize-1 downto 7) <= mem(sp)(wordSize-8 downto 0)
          - mem(sp)(6 downto 0) <= opcode(6 downto 0)
          -end if -
          - -
          - STORESP - - 010x xxxx - - Pop value off stack and store it in the SP+xxxxx*4 memory location, where xxxxx is a positive integer. - -
          - LOADSP - - 011x xxxx - - Push value of memory location SP+xxxxx*4, where xxxxx is a positive integer, onto stack. - - -
          - ADDSP - - 0001 xxxx - - Add value of memory location SP+xxxx*4 to value on top of stack. - - -
          - EMULATE - - 001x xxxx - - Push PC to stack and set PC to 0x0+xxxxx*32. This is used to emulate opcodes. See - zpupgk.vhd for list of emulate opcode values used. zpu_core.vhd contains - reference implementations of these instructions rather than letting the ZPU execute the EMULATE instruction -

          - One way to improve performance of the ZPU is to implement some of - the EMULATE instructions. - -

          - -
          - PUSHPC - - emulated - - Pushes program counter onto the stack. - - -
          - POPPC - - 0000 0100 - - Pops address off stack and sets PC - - -
          - LOAD - - 0000 1000 - - Pops address stored on stack and loads the value of that address onto stack. -

          - Bit 0 and 1 of address are always treated as 0(i.e. ignored) by - the HDL implementations and C code is guaranteed by the programming - model never to use 32 bit LOAD on non-32 bit aligned addresses(i.e. - if a program does this, then it has a bug). -

          - -
          - STORE - - 0000 1100 - - Pops address, then value from stack and stores the value into the memory location of the address. -

          - Bit 0 and 1 of address are always treated as 0 -

          - -
          - PUSHSP - - 0000 0010 - - Pushes stack pointer. - - -
          - POPSP - - 0000 1101 - - Pops value off top of stack and sets SP to that value. Used to allocate/deallocate space on stack for variables or when changing threads. - - -
          - ADD - - 0000 0101 - - Pops two values on stack adds them and pushes the result - - -
          - AND - - 0000 0110 - - Pops two values off the stack and does a bitwise-and & pushes the result onto the stack - - -
          - OR - - 0000 0111 - - Pops two integers, does a bitwise or and pushes result - - -
          - NOT - - 0000 1001 - - Bitwise inverse of value on stack - - - -
          - FLIP - - 0000 1010 - - Reverses the bit order of the value on the stack, i.e. abc->cba, 100->001, 110->011, etc. -

          - The raison d'etre for this instruction is mainly to emulate other instructions. -

          - -
          - NOP - - 0000 1011 - - No operation, clears IDIM flag as side effect, i.e. used between two - consequtive IM instructions to push two values onto the stack. - - -
          - PUSHSPADD - - 61 - - a=sp;
          - b=popIntStack()*4;
          - pushIntStack(a+b);
          -
          - -
          - POPPCREL - - 57 - - setPc(popIntStack()+getPc()); - - -
          - SUB - - 49 - - int a=popIntStack();
          - int b=popIntStack();
          - pushIntStack(b-a);
          -
          - -
          - XOR - - 50 - -pushIntStack(popIntStack() ^ popIntStack()); - - -
          - LOADB - - 51 - - 8 bit load instruction. Really only here for compatibility with - C programming model. Also it has a big impact on DMIPS test. -

          - pushIntStack(cpuReadByte(popIntStack())&0xff); -

          - -
          - STOREB - - 52 - - 8 bit store instruction. Really only here for compatibility with - C programming model. Also it has a big impact on DMIPS test. -

          - addr = popIntStack();
          - val = popIntStack();
          - cpuWriteByte(addr, val); -

          - -
          - LOADH - - 34 - - - 16 bit load instruction. Really only here for compatibility with - C programming model. -

          - - pushIntStack(cpuReadWord(popIntStack())); -

          - -
          - STOREH - - 35 - - 16 bit store instruction. Really only here for compatibility with - C programming model. -

          -addr = popIntStack();
          - val = popIntStack();
          - cpuWriteWord(addr, val); -

          - -
          - LESSTHAN - - 36 - - Signed comparison
          - a = popIntStack();
          - b = popIntStack();
          - pushIntStack((a < b) ? 1 : 0);
          -
          - -
          - LESSTHANOREQUAL - - 37 - - Signed comparison
          - a = popIntStack();
          - b = popIntStack();
          - pushIntStack((a <= b) ? 1 : 0); -
          - -
          - ULESSTHAN - - 37 - - Unsigned comparison
          - long a;//long is here 64 bit signed integer
          - long b;
          - a = ((long) popIntStack()) & INTMASK; // INTMASK is unsigned 0x00000000ffffffff
          - b = ((long) popIntStack()) & INTMASK;
          - pushIntStack((a < b) ? 1 : 0); -
          - -
          - ULESSTHANOREQUAL - - 39 - - Unsigned comparison
          - long a;//long is here 64 bit signed integer
          - long b;
          - a = ((long) popIntStack()) & INTMASK; // INTMASK is unsigned 0x00000000ffffffff
          - b = ((long) popIntStack()) & INTMASK;
          - pushIntStack((a <= b) ? 1 : 0); -
          - -
          - EQBRANCH - - 55 - - int compare;
          - int target;
          - target = popIntStack() + pc;
          - compare = popIntStack();
          - if (compare == 0)
          - {
          - setPc(target);
          - } else
          - {
          - setPc(pc + 1);
          - } -
          - -
          - NEQBRANCH - - 56 - - int compare;
          - int target;
          - target = popIntStack() + pc;
          - compare = popIntStack();
          - if (compare != 0)
          - {
          - setPc(target);
          - } else
          - {
          - setPc(pc + 1);
          - }
          -
          - -
          - MULT - - 41 - - Signed 32 bit multiply
          - pushIntStack(popIntStack() * popIntStack()); -
          - -
          - DIV - - 53 - - Signed 32 bit integer divide.
          - a = popIntStack();
          - b = popIntStack();
          - if (b == 0)
          - {
          - // undefined
          - } - pushIntStack(a / b);
          -
          - -
          - MOD - - 54 - - Signed 32 bit integer modulo.
          - a = popIntStack();
          - b = popIntStack();
          - if (b == 0)
          - {
          - // undefined
          - }
          - pushIntStack(a % b);
          -
          - -
          - LSHIFTRIGHT - - 42 - - unsigned shift right.
          - long shift;
          - long valX;
          - int t;
          - shift = ((long) popIntStack()) & INTMASK;
          - valX = ((long) popIntStack()) & INTMASK;
          - t = (int) (valX >> (shift & 0x3f));
          - pushIntStack(t);
          -
          - -
          - ASHIFTLEFT - - 43 - - arithmetic(signed) shift left.
          - - long shift;
          - long valX;
          - shift = ((long) popIntStack()) & INTMASK;
          - valX = ((long) popIntStack()) & INTMASK;
          - int t = (int) (valX << (shift & 0x3f));
          - pushIntStack(t);
          -
          - -
          - ASHIFTRIGHT - - 43 - - arithmetic(signed) shift left.
          - long shift;
          - int valX;
          - shift = ((long) popIntStack()) & INTMASK;
          - valX = popIntStack();
          - int t = valX >> (shift & 0x3f);
          - pushIntStack(t);
          - -
          - -
          - CALL - - 45 - - call procedure.
          -
          - int address = pop();
          - push(pc + 1);
          - setPc(address);
          -
          - -
          - CALLPCREL - - 63 - - call procedure pc relative
          -
          -int address = pop();
          - push(pc + 1);
          - setPc(address+pc);
          - -
          - EQ - - 46 - - pushIntStack((popIntStack() == popIntStack()) ? 1 : 0); - -
          - NEQ - - 48 - - pushIntStack((popIntStack() != popIntStack()) ? 1 : 0); - -
          - NEG - - 47 - - pushIntStack(-popIntStack()); - -
          -
          -

          Custom startup code (aka crt0.s)

          -To minimize the size of an application, one important trick is to -strip down the startup code. The startup code contains emulation -of instructions that may never be used by a particular application. -

          -The startup code is found in the GCC source code under gcc/libgloss/zpu, -but to make the startup code more available, it has been duplicated -into zpu/sw/startup -

          -To minimize startup size, see codesize -demo. This is pretty standard GCC stuff and simple enough once you've -been over it a couple of times. - - -

          Implementing your own ZPU

          -One of the neat things about the ZPU is that the instruction set and architecture -is very small and it is easy to implement a ZPU from scratch or modify the -existing ZPU implementations. -

          -Implementing a ZPU can be done without understanding the toolchain in -detail, i.e. using exclusively HDL skills and only a rudimentary -understanding of standard GCC/GDB usage is sufficient. -

          -A few tips: -

            -
          • Run zpu_core.vhd or zpu_core_small.vhd and generate an instruction trace -from ModelSim or similar. To check that you own implementation is correctly -implemented, verify that the instruction trace for the new and old -ZPU implementations match. This gives you a simple way to do regression -tests as you develop your ZPU. -
          • To improve performance, you can add more instructions. The EMULATE instructions -are optional in HDL since they will be emulated in software if they are not -implemented in HDL. This allows you to run the ZPU executables unmodified -regardless of which EMULATE instructions you implement. -
          • Run the DMIPS test to measure your overall performance -
          • Run the histogram.perl script on the instruction trace to generate -histograms of the instructions. Profiling is essential to making -the right choices w.r.t. optimisation for your application. -
          - - -
          -

          Vectors

          - - - - - - - - - - - - - - - - - -
          AddressNameDescription
          0x000Reset - 1.When the ZPU boots, this is the first instruction to be executed. -

          - 2.The stack pointer is initialised to maximum RAM address -

          0x020Interrupt - This is the entry point for interrupts. -
          0x040-Emulated instructions - Emulated opcode 34. Note that opcode 32 and opcode 33 are not normally used to emulate instructions as these memory addresses are already used by boot vector, GCC registers and the interrupt vector. -
          - -
          -

          Phi memory map

          -The ZPU architecture does not define a memory map as such, but the GCC + libgloss + ecos hal library uses the -memory map below. "Phi" is just a three letter word for the particular memory layout below that came about -while developing the ZPU. -

          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          -

          Address

          -
          -

          Type

          -
          -

          Name

          -
          -

          Description

          -
          -

          0x080A0000

          -
          -

          Write

          -
          -

          ZPU - enable

          -
          -

          Bit - [31:1] Not used

          -

          Bit - [0] Enable ZPU operations

          -

          0 ZPU - is held in Idle mode

          -

          1 ZPU - running

          -
          -

          0x080A000C

          -
          -

          Read/

          -

          Write

          -
          -

          ZPU - Debug channel / UART to ARM7 TX

          -

          NOTE! - ZPU side

          -
          -

          Bit - [31:9] Not used

          -

          Bit - [8] TX buffer ready (valid on ready)

          -

          0 TX - buffer not ready (full)

          -

          1 TX - buffer ready

          -

          Bit - [7:0] TX byte (valid on write)

          -
          -

          0x080A0010

          -
          -

          Read

          -
          -

          ZPU - Debug channel / UART to ARM7 RX

          -

          NOTE! - ZPU side

          -
          -

          Bit - [31:9] Not used

          -

          Bit - [8] RX buffer data valid

          -

          0 RX - buffer not valid

          -

          1 RX - buffer valid

          -

          Bit - [7:0] RX byte (when valid)

          -
          -

          0x080A0014

          -
          -

          Read/

          -

          Write

          -
          -

          Counter(1)

          -
          -

          Bit - [0] Reset counter (valid for write)

          -

          0 N/A

          -

          1 Reset - counter

          -

          Bit - [1] Sample counter (valid for write)

          -

          0 N/A

          -

          1 Sample - counter

          -

          Bit - [31:0] Counter bit 31:0

          -
          -

          0x080A0018

          -
          -

          Read

          -
          -

          Counter(2)

          -
          -

          Bit - [31:0] Counter bit 63:32

          -
          -

          0x080A0020

          -
          -

          Read - / Write

          -
          -

          Global_Interrupt_mask

          -
          -

          Bit - [31:1] Not used

          -

          Bit - [0] Global intr. Mask

          -

          0 Interrupts - enabled

          -

          1 Interrupts - disabled

          -
          -

          0x080A0024

          -
          -

          Write

          -
          -

          UART_INTERRUPT_ENABLE

          -
          -

          Bit - [31:1] Not used

          -

          Bit - [0] Debug channel / UART RX interrupt enable

          -

          0 Interrupt - disable

          -

          1 Interrupt - enable

          -
          -

          0x080A0028

          -
          -

          Read

          -

          Write

          -
          -

          UART_interrupt

          -
          -

          Bit - [31:1] Not used

          -

          Bit - [0] Debug channel / UART RX interrupt pending (Read)

          -

          0 No - interrupt pending

          -

          1 Interrupt - pending

          -

          Bit - [0] Clear UART interrupt (Write)

          -

          0 N/A

          -

          1 Interrupt - cleared

          -
          -

          0x080A002C

          -
          -

          Write

          -
          -

          Timer_Interrupt_enable

          -
          -

          Bit - [31:1] Not used

          -

          Bit - [0] Timer interrupt enable

          -

          0 Interrupt - disable

          -

          1 Interrupt - enable

          -
          -

          0x080A0030

          -
          -

          Read - /

          -

          Write

          -
          -

          Timer_interrupt

          -
          -

          Bit - [31:2] Not used

          -

          Bit - [0] Timer interrupt pending (Read)

          -

          0 No - interrupt pending

          -

          1 Interrupt - pending

          -

          Bit - [1] Reset Timer counter (Write)

          -

          0 N/A

          -

          1 Timer - counter reset

          -

          Bit - [0] Clear Timer interrupt (Write)

          -

          0 N/A

          -

          1 Interrupt - cleared

          -
          -

          0x080A0034

          -
          -

          Write

          -
          -

          Timer_Period

          -
          -

          Bit - [31:0] Interrupt period (write)

          -

          Number - of clock cycles

          -

          between - timer interrupts

          -

          NOTE! - The timer will start at Timer_Periode value and count down - to zero, and generate an interrupt

          -
          -

          .0x080A0038

          -
          -

          Read

          -
          -

          Timer_Counter

          -
          -

          Bit - [31:0] Timer counter (read)

          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -


          -

          -
          -
          -

          Wishbone

          -In hdl/wishbone there is an implementation -of a wishbone bridge. -

          -However this wishbone bridge was used together with the hdl/zy2000 implementation -of the ZPU, which differs slightly from hdl/zpu4/core. -

          -The ZY2000 is a complete implementation of the ZPU including: DRAM, soft-MAC, wishbone bridges, GPIO subsystem, -etc. This also included an eCos HAL w/TCP/IP support. - - -

          JTAG/hardware debugger for GDB

          -The Zylin ZY1000 JTAG debugger supports -the ZPU. Contact Zylin for pricing and details. -

          -There are two debug modes in which the ZY1000 can operate: -

            -
          • Classic. Here the ZY1000 controls the CPU and examines the state. The ZY1000 has a built in -GDB server that GDB talks to. -
          • Small footprint. If there isn't enough space on the device for the ZPU *and* the JTAG -controller, then the ZY1000 can run the ZPU externally. The JTAG communication channel is -then used to peek/poke peripherals and inside the FPGA instead of the ZPU there is then -a JTAG controller that peeks and pokes the peripherals of the ZPU. There are advantages -and disadvantages of this approach: it may be unfamiliar to embedded developers and -the timing is different from the "real" ZPU(interrupts are delayed, execution speed -differse, etc.) On the other hand there are other things -which are simpler: much more RAM can be available for the ZPU during development, -better debug consoles(faster), additional peripheral(timers, etc.) is available. This -approach is somewhat unique to the ZPU as the ZPU is simple enough that it can be -implemented efficiently in this manner. -
          - - -

          Interrupts

          -The ZPU supports interrupts. -

          -To trigger an interrupt, the interrupt signal must be asserted. The ZPU does -not define any interrupt disabling mechanism, this must be implemented by the -interrupt controller and controlled via memory mapped IO. -

          -Interrupts are masked when the IDIM flag is set, i.e. -with consequtive IM instructions. -

          -The ZPU has an edge triggered interrupt. As the ZPU notices that the interrupt -is asserted, it will execute the interrupt instruction. The interrupt signal -must stay asserted until the ZPU acknowledges it. -

          -When the interrupt instruction is executed, the PC will be pushed onto the -stack and the PC will be set to the interrupt vector address (0x20). -

          -Note that the GCC compiler requires three registers r0,r1,r2,r3 for some -rather uncommon operations. These 32 registers are mapped to memory locations 0x0, -0x4, 0x8, 0xc. The default interrupt vector at address 0x20 will load the -value of these memory locations onto the stack, call _zpu_interrupt and -restore them. -

          -See zpu/hdl/zpu4/test/interrupt/ for C code and zpu/hdl/example/simzpu_interrupt.do -for simulation example. - -

          About zpu_core_small.vhd

          -The small ZPU implements the minimum instruction set. It is optimized for size and simplicity -serving as a reference in both regards. -

          -It uses a BRAM (dual port RAM w/read/write to both ports) as data & code storage and -is implemented as a simple state machine. -

          -Essentially it has three states: -

            -
          1. Fetch - starts fetch of next instruction -
          2. FetchNext - sets up operands for execute cycle -
          3. Decode - decodes instruction -
          4. Execute - well.. executes instruction -
          -The tricky bit is that there is a tiny bit of interleaving of -states since the BRAM takes a cycle to perform a fetch/store. The above is the -normal states the ZPU cycles through unless memory fetch, jumps, etc. take -place. -
          -

          Speeding up the ZPU

          -There are two aspects of speeding up the ZPU: making it perform better -for a particular application and toying around with the ZPU architecture. -

          Performance tips

          -
            -
          1. Profile. Create a small sample and run in a simulator that is as close -to the real deployment as possible. zpu4/core/histogram.perl is a script -that will tell you which instructions take the most time. -
          2. Using the profile output, decide on which emulated instructions that -it makes sense to implement in HDL for your particular application. Modifying -zpu_core_small.vhd is not particularly hard. Most instructions can be -transliterated into zpu_core_small.vhd from zpu_core.vhd without too much -problem. -
          3. The memory subsystem may well turn out to be where you should concentrate -your efforts. -
          -

          Toying around with the architecture

          -Again: profile 90% of the time and spend the remaining 10% tinkering -with the architecture. -
            -
          • There is a DMIPS program you can use to measure the performance of -the ZPU in lieu of profiling a real application. The latter is obviously -a superior solution. -
          • Again: use histogram.perl to figure out which instructions you should add -in HDL. -
          • Tinker a bit with Fmax to find the maximum speed rating for your design. -
          • zpu_core_small.vhd should be ca. 1 DMIPS and zpu_core.vhd should yield -about 5-10 DMIPS before adding instructions runs out of steam. -
          -If you need to get ca. 20-50 DMIPS out of the ZPU you will have to -write a heavily pipelined architecture with caches(if you are running -against DRAM). This is *tricky*, but some proof of concept work was -done to show 20 DMIPS w/the ZPU(the actual result was discarded since -it was not complete and contained fatal flaws). -

          -Achieving above 50-100 DMIPS with the current ZPU architecture is probably -a non-starter and a more conventional RISC design makes more sense here. -

          -The unique advantages of the ZPU is size in terms of HDL & code size. - -

          Debug channel / UART

          -All self respecting embedded projects should have a debug channel -to print stuff to. Typically this is a standard RS232 or UART, but -it can also be something more exotic like a DCC JTAG channel. -

          -The point is that characters(bytes) are sent to/from the ZPU -via some terminal. -

          -The ZPU defines in the memory map a UART / debug channel. This -should be implemented by some suitable debug channel for -the device in which the ZPU is implemented. -

          -www.opencores.org has several UART implementations. This is one -of the simpler ones: - - -http://www.opencores.org/projects.cgi/web/uart/overview -

          Implementing your own UART / debug channel

          -The first thing you need to do is to choose a debug channel for your -hardware. This could be a UART, but it doesn't have to be. -

          -Secondly you should write a small HDL module that interface between -the ZPU memory map of debug channel to the UART. This should - be relatively simple as all you need to do is to let the ZPU - query the FIFO in/out for busy flag and allow the ZPU to read/write - data to the UART via the memory map. - -

          About zpu_core.vhd

          -The zpu_core.vhd has a single port memory interface. All data, code and IO is -accessed through this memory interface. -

          -It performs better(despite having less memory bandwidth than zpu_core_small.vhd) -since it implements many more instructions. -

          Compiling hello world program with the ZPU GCC toolchain

          -The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has -some very basic peripherals defined: counter, timer interrupt and a debug output port. -

          Installation

          -
            -
          1. Install Cygwin. http://www.cygwin.com -
          2. Start Cygwin bash -
          3. unzip zputoolchain.zip -
          4. Add install/bin from zputoolchain.zip to PATH.
            -export PATH=$PATH:/install/bin -
          -

          Hello world example

          -The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. -

          - -zpu-elf-gcc -Os -zeta hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
          -zpu-elf-size hello.elf
          -
          - - -
          - -

          SPI flash controller (read-only)

          -This is a simple read-only SPI flash controller, with the following characteristics: - -
          -
        8. Fast-READ only implementation. -
        9. 32-bit only access -
        10. Fast sequential read access - Uses low-clock approach
        11. -
          - -

          Version

          -The current version is 1.2. This is also the first public version available. - -

          Timing overview

          - -

          Simple timing overview, with one nonsequential access to address 0x0, followed by a sequential access to address 0x4. -This simulation was done with Xilinx tools, after post-routing, and using a ZPU to access the SPI

          -
          - - -

          Image 1: Timing overview

          -
          - -On Image 2, you can see the clock almost perfectly centered on data, when we write to the SPI flash. - -
          - -

          Image 2: Issuing commands to the SPI

          -
          - -As you can see from Image 3, I assume the worst-case read delay from SPI (which is 15ns, as you can see from the marker). - -
          - -

          Image 3: Reading from the SPI

          -
          - -

          Usage

          - -Simple description of SPI controller interface: - - - - - - - - - - - - - - - - - - -
          SymbolDirectionBit widthPurpose
          adrInput24Address where to read from SPI
          dat_oOutput32Data read from SPI
          clkInput1Input clock. Used for both interface and SPI
          ceInput1Chip Enable
          rstInput1Asynchronous reset
          ackOutput1Data valid ACK
          SPI_CLKOutput1SPI output clock
          SPI_MOSIOutput1SPI output data from controller to chip
          SPI_MISOInput1SPI input data from chip to controller
          SPI_SELNOutput1SPI nSEL (deselect, active low) signal
          - - - -

          License

          -The Verilog implementation is released under BSD license. See the file itself for more licensing details. - -

          Dowload

          -Download the Verilog code here: spi_controller.v - -

          Troubleshooting

          -The current implementation is timed and optimized for myself. Your parameters might not be the same -as those I defaulted, so read the code carefully. If you have any issue let me know. - - - - - - -

          Zealot: Implementing in FPGAs

          - -The Zealot version of ZPU is a ZPU medium variant ready to be used with FPGAs. -It was tested using Xilinx Spartan 3 1500 FPGAs and was contributed by -Salvador E. Tropea. The key features are:

          - -

            -
          • Includes a very basic PHI I/O synthetizable core. -It implements the 64 bits clocks counter (timer) and the UART. This is enough -to run the DMIPS benchmark and a hello world application. I tested the UART -@ 9600 bps and @ 115200 bps.
          • -
          • The ZPU can be customized using generics. It allows the use of more -than one core in the same project without problems.
          • -
          • Implements the lshiftright instruction in hardware, this gives around -10% boost in the DMIPS benchmark (Medium version).
          • -
          • You can disable various instructions groups and let them to the -emulation soft, so you can experiment with various LUTs vs DMIPS -configurations (Medium version).
          • -
          • The medium version provides aprox. 2.6 DMIPS @ 50 MHz and the small -0.5 DMIPS @ 50 MHz.
          • -
          • Enhanced trace module, it includes the assembler for the executed -instruction and can also meassure how much stack was consumed during the -execution.
          • -
          • Includes ready to use memory images for a hello world program and the -DMIPS benchmark.
          • -
          • Memory and trace blocks outside ZPU. This provides better modularity.
          • -
          - -Simulation and implementation files are provided. You need 16 kB of BRAMs -for the "hello world" example and 32 kB for the DMIPS benchmark. The medium -version takes around 1030 slices and 3 multipliers and the small version -around 430 slices.

          - -The generics for the Zealot Medium ZPU are:

          - -

            -
          • WORD_SIZE (integer:=32) Data width, only 32 bits are really -tested/supported. Adding support for 16 bits should be simple, but the -toolchain needs to support it.
          • -
          • ADDR_W (integer:=16) Address bus width memory+I/O space. The MSB -selects the address space (1=I/O).
          • -
          • MEM_W (integer:=15) Memory address bus width. It includes program, -data and stack sections.
          • -
          • D_CARE_VAL (std_logic:='X') Value used to fill the unsused bits. -For simulations this should be '0', for synthesis this is a value that your -tools interprets as "don't care". Xilinx tools could get benefit from using -'X'. This is particularly true to assign default values and for unreached -cases. Note that I didn't find it useful.
          • -
          • MULT_PIPE (boolean:=false) Enables the multiplication pipeline. -This can allow faster clocks but will make the mult instruction slower (more -clocks consumed).
          • -
          • BINOP_PIPE (integer range 0 to 2:=0) Enables the pipeline for -the -, =, < and <= operations. This can allow faster clocks but will -make these instruction slower (more clocks consumed). This value is the -ammount of extra clocks added.
          • -
          • ENA_LEVEL0 (boolean:=true) Enables the hardware implementation of -eq, neqbranch, loadb and pushspadd instructions.
          • -
          • ENA_LEVEL1 (boolean:=true) Enables the hardware implementation of -lessthan, ulessthan, mult, storeb, callpcrel and sub instructions.
          • -
          • ENA_LEVEL2 (boolean:=false) Enables the hardware implementation of -lessthanorequal, ulessthanorequal, call and poppcrel instructions.
          • -
          • ENA_LSHR (boolean:=true) Enables the hardware implementation of -lshiftright instruction.
          • -
          • ENA_IDLE (boolean:=false) Enables the enable_i usage. This signal -can hold the CPU in an idle state if after reset this signal remains active. -When disabled the enable_i signal isn't used and the idle state is removed.
          • -
          • FAST_FETCH (boolean:=true) This version of the ZPU fetches 4 -instructions at ones (32 bits), then they are decoded (2 cycles) and finally -executed. The decoded instructions are stored in a "decode cache", the first -instruction is immediatly moved to the "current instruction" register and a -"special instruction" replaces the first slot. This "special instruction" -makes the CPU go to the fetch state. When you enable this generic the FSM -does the fetch instead of wating one clock cycle to go to the fetch state. -This makes instructions run a little bit faster, but it can cost area and/or -frequency.
          • -
          - -For more information read the 0README.txt file located inside the zealot -directory.

          - - - -

          Optimizing for code size

          -The ZPU toolchain produces highly compact code. -
            -
          1. Since the ZPU GCC toolchain supports standard ANSI C, it is easy to stumble across -functionality that takes up a lot of space. E.g. the standard printf() function is a beast. Some compilers drop e.g. floating point support -from the printf() function and thus boast a "smaller" printf() when in fact they have a non-standard printf(). newlib has a standard printf() function -and an alternative iprintf() function that works only on integers. -
          2. The ZPU ships with default startup code that works across various configurations of the ZPU, so be warned that there is some overhead that will -not occurr in the final application(anywhere between 1-4kBytes). -
          3. Compilation and linker options matter. The ZPU benefits greatly from the "-Wl,--relax -Wl,--gc-sections" options which is not used by -all architectures(e.g. GCC ARM does not implement/need -Wl,--relax). -
          -

          Small code example

          - -zpu-elf-gcc -Os -abel smallstd.c -o smallstd.elf -Wl,--relax -Wl,--gc-sections
          -zpu-elf-size small.elf
          -
          -$ zpu-elf-size small.elf
          - text data bss dec hex filename
          - 2845 952 36 3833 ef9 small.elf
          -
          -
          - -

          Even smaller code example

          -If the ZPU implements the optional instructions, the RAM overhead can be reduced significantly. -

          - -zpu-elf-gcc -Os -abel crt0_phi.S small.c -o small.elf -Wl,--relax -Wl,--gc-sections -nostdlib
          -zpu-elf-size small.elf
          -
          -$ zpu-elf-size small.elf
          - text data bss dec hex filename
          - 56 8 0 64 40 small.elf
          -
          -
          - - - -
          -

          Installing eCos build tools

          - -tar -xjvf ecossnapshot.tar.bz2
          -tar -xjvf repository.tar.bz2
          -tar -xjvf ecostools.tar.bz2
          -# run this every time you open the shell
          -export PATH=$PATH:`pwd`/ecos-install
          -export ECOS_REPOSITORY=`pwd`/ecos/packages:`pwd`/repository
          -
          -

          Compiling eCos tests

          - -ecosconfig new zeta default
          -ecosconfig tree
          -make
          -cd kernel/current
          -make tests
          -
          - -

          Code size ZPU

          - -$ zpu-elf-size *
          - text data bss dec hex filename
          - 15761 1504 12060 29325 728d bin_sem0
          - 16907 1512 14436 32855 8057 bin_sem1
          - 17105 1524 30032 48661 be15 bin_sem2
          - 17186 1512 14436 33134 816e bin_sem3
          - 18986 1500 12036 32522 7f0a clock0
          - 15812 1504 13236 30552 7758 clock1
          - 25095 1972 13224 40291 9d63 clockcnv
          - 16437 1500 13224 31161 79b9 clocktruth
          - 15762 1504 12060 29326 728e cnt_sem0
          - 17124 1512 14436 33072 8130 cnt_sem1
          - 35947 1564 22512 60023 ea77 dhrystone
          - 16428 1500 13228 31156 79b4 except1
          - 15751 1504 12052 29307 727b flag0
          - 19145 1512 15624 36281 8db9 flag1
          - 20053 1516 102908 124477 1e63d fptest
          - 15998 1496 12092 29586 7392 intr0
          - 16080 1496 12200 29776 7450 kalarm0
          - 15327 1496 12036 28859 70bb kcache1
          - 15549 1496 13224 30269 763d kcache2
          - 18291 1500 12260 32051 7d33 kclock0
          - 16231 1500 13232 30963 78f3 kclock1
          - 16572 1496 13228 31296 7a40 kexcept1
          - 15618 1496 12060 29174 71f6 kflag0
          - 19287 1500 15624 36411 8e3b kflag1
          - 16887 1516 15628 34031 84ef kill
          - 16186 1496 12128 29810 7472 kintr0
          - 19724 1504 14516 35744 8ba0 klock
          - 18283 1500 14592 34375 8647 kmbox1
          - 15539 1496 12064 29099 71ab kmutex0
          - 16524 1504 15664 33692 839c kmutex1
          - 18272 1712 20348 40332 9d8c kmutex3
          - 18682 1608 20352 40642 9ec2 kmutex4
          - 15619 1496 14412 31527 7b27 ksched1
          - 15567 1496 12060 29123 71c3 ksem0
          - 17063 1500 14436 32999 80e7 ksem1
          - 15504 1496 13228 30228 7614 kthread0
          - 16167 1496 14412 32075 7d4b kthread1
          - 18281 1512 14580 34373 8645 mbox1
          - 20611 1508 14940 37059 90c3 mqueue1
          - 15672 1504 12064 29240 7238 mutex0
          - 16678 1516 15664 33858 8442 mutex1
          - 17694 1508 16868 36070 8ce6 mutex2
          - 18203 1720 20344 40267 9d4b mutex3
          - 16352 1508 14428 32288 7e20 release
          - 15890 1500 14412 31802 7c3a sched1
          - 44196 1612 286332 332140 5116c stress_threads
          - 17891 1524 16864 36279 8db7 sync2
          - 16943 1512 15644 34099 8533 sync3
          - 15467 1496 13064 30027 754b thread0
          - 16134 1496 14420 32050 7d32 thread1
          - 17560 1512 15636 34708 8794 thread2
          - 16279 1500 24028 41807 a34f thread_gdb
          - 17051 1504 20376 38931 9813 timeslice
          - 17146 1504 21564 40214 9d16 timeslice2
          - 37313 1512 422380 461205 70995 tm_basic
          -
          -

          Code size ARM (non-thumb)

          -Thumb does not compile out of the box w/AT91 EB40a for which this test was made.

          - -$ arm-elf-size *
          - text data bss dec hex filename
          - 25204 692 16976 42872 a778 bin_sem0
          - 26644 700 22096 49440 c120 bin_sem1
          - 26996 712 55584 83292 1455c bin_sem2
          - 27008 700 22100 49808 c290 bin_sem3
          - 28992 688 16944 46624 b620 clock0
          - 25456 692 19532 45680 b270 clock1
          - 34572 1160 19520 55252 d7d4 clockcnv
          - 26224 688 19508 46420 b554 clocktruth
          - 25204 692 16976 42872 a778 cnt_sem0
          - 26888 700 22108 49696 c220 cnt_sem1
          - 44180 752 27416 72348 11a9c dhrystone
          - 26088 688 19520 46296 b4d8 except1
          - 25236 692 16968 42896 a790 flag0
          - 29532 700 24668 54900 d674 flag1
          - 29508 704 109652 139864 22258 fptest
          - 25932 684 17016 43632 aa70 intr0
          - 25824 684 17112 43620 aa64 kalarm0
          - 24728 684 16956 42368 a580 kcache1
          - 25168 684 19512 45364 b134 kcache2
          - 28112 688 17168 45968 b390 kclock0
          - 25976 688 19524 46188 b46c kclock1
          - 26372 684 19512 46568 b5e8 kexcept1
          - 25140 684 16968 42792 a728 kflag0
          - 29824 688 24660 55172 d784 kflag1
          - 26896 704 24656 52256 cc20 kill
          - 26088 684 17028 43800 ab18 kintr0
          - 30812 692 22176 53680 d1b0 klock
          - 28504 688 22260 51452 c8fc kmbox1
          - 24984 684 16984 42652 a69c kmutex0
          - 26504 692 24704 51900 cabc kmutex1
          - 28792 900 34892 64584 fc48 kmutex3
          - 29264 796 34896 64956 fdbc kmutex4
          - 25240 684 22084 48008 bb88 ksched1
          - 25044 684 16968 42696 a6c8 ksem0
          - 26988 688 22100 49776 c270 ksem1
          - 25028 684 19512 45224 b0a8 kthread0
          - 25996 684 22080 48760 be78 kthread1
          - 28552 700 22252 51504 c930 mbox1
          - 31324 696 22612 54632 d568 mqueue1
          - 25108 692 16980 42780 a71c mutex0
          - 26464 704 24700 51868 ca9c mutex1
          - 27624 696 27280 55600 d930 mutex2
          - 28596 908 34884 64388 fb84 mutex3
          - 26156 696 22100 48952 bf38 release
          - 25460 688 22084 48232 bc68 sched1
          - 56356 828 45892 103076 192a4 stress_threads
          - 27900 712 27288 55900 da5c sync2
          - 26760 700 24692 52152 cbb8 sync3
          - 24924 684 19356 44964 afa4 thread0
          - 25868 684 22084 48636 bdfc thread1
          - 27452 700 24680 52832 ce60 thread2
          - 26136 688 42704 69528 10f98 thread_gdb
          - 27212 692 34916 62820 f564 timeslice
          - 52728 700 123332 176760 2b278 tm_basic
          -
          - - - -
          -

          Next generation ZPU

          -Based on feedback here is a list of a tenuous "consensus" for the next generation -of the ZPU with some tentative ideas on implementation. -

          Goals

          -
            -
          1. Reduce minimum code size footprint, i.e. BRAM code overhead. Non-trivial -usable applications in 4kBytes of BRAM (single BRAM block). -
          2. Reduce minimum FPGA logic footprint by 20% or more. Goal <300 LUT for -32 bit ZPU -
          3. Weed out unecessary ZPU variations -
          -

          Best current ideas on how to reach these goals

          -
            -
          1. Introduce 16 entry 32 bit LIFO for instructions that change sp today. LOADSP/STORESP/ADDSP -refer to the normal stack but add/get values from the LIFO in addition.

            - -loadsp n ; load value from memory at address "sp + n" and put it into the LIFO.
            -im m ; put value into LIFO register
            -add ; get two values from LIFO register, put back result.
            -
            -

            -NB! none of the instructions above change sp!!! -

            -If the LIFO is full, putting a value into the LIFO has no defined behaviour. Getting a value -from an empty LIFO has no defined behaviour. -

            -GCC will use 8 slots, instruction emulation and interrupts owns the remaining 8 slots. - -

          2. Add single entry for unknown instructions. PC and unsupported instruction is -pushed onto stack before jumping to unknown instruction vector. This makes it possible -to write denser microcode for missing instructions. For emulated opcodes that are -not in use, the microcode can more easily be disabled. Determining -that e.g. MULT is not used, can be a bit tricky, but disabling it is easy. -

            -The unsupported vectory entry address is 0x10. -

          3. GCC needs 4 registers. These are today mapped to memory. What addresses to use? -Today memory address 0x00-0x0f inclusive are used for this purpose. Introduce emulated -instruction to load/store these registers? That would allow using either hardware or -memory registers. -
          4. Single entry for *all* unknown instructions does not limit emulation to the -EMULATE instructions today, but instructions such as OR, LOADSP, STORESP, ADDSP, -etc. can also be emulated. This opens up for further reduction in logic usage. -
          5. The single entry for all unknown instructions will make it easier to -write a compact custom crt0.s to fit an instruction subset. -
          6. The interrupt is basically an unknown instruction that is injected into -the execution stream. -
          7. Add floating point add and mult. FADD & FMULT. Option to generate the instructions -from the compiler. -
          8. Strip away unused instructions from GCC and add options to GCC for not -emitting more advanced instructions. This will e.g. convert MULT/DIV into -function calls to libgcc and thus make it easier to determine that -microcode is not needed. -
          -

          Next generation ZPU HDL work

          -
            -
          1. Incorporate feedback on FPGA tricks to reduce memory usage: do not -use asynchronous reset?, use BRAMs in synchronous mode to reduce -complexity of state machine?, seperate code/data bus? Reduce -instruction set further. Goal: <300 LUT's for 32 bit ZPU -
          2. Will someone be willing to contribute a heavily pipelined ZPU? -For this to make sense, the performance must hit 20 DMIPS w/DRAM & cache. -This ZPU could run a TCP/IP stack with relevant performance to compete -with stripped down ARM7 type systems. -
          - -
          -

          Download source code

          -

          -

          The simplest way to get the ZPU HDL source and tools is to check -it out from CVS:

          -

          cvs -d :pserver:anonymous@cvs.opencores.org:/cvsroot/anonymous co -zpu/zpu

          -

          Start by reading zpu/zpu/hdl/index.html

          - -
          -

          Creating a patch

          -


          Please submit changes to the
          zylin-zpu mailing list as a patch. -

          -
            -
          1. Merge your changes with CVS HEAD. -
          2. Update the FreeBSD or GPL copyright with your name in the case -of non-trivial changes. If in doubt, add the copyright. -
          3. Add an entry to zpu/ChangeLog with date, your name, email, the -files you changed and a comment. -
          4. cd zpu
            cvs diff -upN . > mypatch.txt
            -
          5. Email it to zylin-zpu mailing list. Attach it -as an uncompressed .txt file -
          - -

          Getting help - mailing list

          -The place to get help is the
          zylin-zpu mailing list - -

          Register stack

          -In order to reduce the size and complexity of the small ZPU, a register stack -has been put forward. It remains an open question as to whether this can -indeed reduce size and improve performance of the ZPU. -

          -Terminology: "stack" is the normal stack in memory pointed to -by the sp register. "register stack" is a different stack that is -not connected to memory directly or associated with the "stack". -

          -The idea is to push and pop the register stack such that bandwidth -is increased and complexity of memory access logic is reduced. -

          -Another clever bit is to mask interrupts while this stack is -not empty such that this stack never has to be -saved. It's depth would be fixed to something natural -for an FPGA, say 16 deep(doesn't that translate to a single -LUT for a bit?). - -

          Example of internal stack

          -im 1 ; push onto register stack
          -loadsp N ; load from memory pointed to by sp+N, push onto register stack
          -add ; pop values from register stack and add, push onto register stack
          - -

          Quick summary of instruction operation with register stack

          -This is not a "formal" definition of the instruction set, but should -give a pretty good idea of what the modified instruction looks like. -

          -Read up on the current definition of instructions and consider the -list below a guide to what changes have been made to fit a register -stack. The list is not complete, but covers the important categories -of instructions. If it is clear how the ADD instruction changed, -then it should be obvious how the AND isntruction must be similarly -modified. -

          -Note also that there are lots of tiny problems that have to be ironed -out before the instruction set and emulation can work. Below is just -a first stab, which hopefully is good enough to evaluate the approach. - - - - - - - - - - - - - - -
          IM push onto/modify top of register stack
          STORESP pop register stack store to memory SP+N
          LOADSP load memory SP+N push onto register stack
          EMULATE push PC+1 onto register stack and jump to EMULATE vector
          PUSHPC push pc onto register stack
          POPPC pop pc from register stack
          LOAD pop address from register stack, load from memory address, push onto register stack
          STORE pop register stack 2x store value to memory
          PUSHSP push sp onto register stack
          POPSP pop sp from register stack
          POPPC pop pc from register stack
          ADD pop 2x register stack, add, push to register stack
          NOT pop register stack, bit inverse value, push onto register stack
          -Emulate instructions and calling convention may have to change substantially. - - - \ No newline at end of file + + +

          This Document

          +This is a snapshot of the zpu/zpu/docs/zpu_arch.html document in CVS. +

          +Several of the links will only work if you have checked out the zpu/zpu tree from opencores CVS. See Download below. +

          Index

          + + +
          + + +

          Introduction

          +

          TODO a new welcome message indicating goals/direction of project.

          +

          The worlds smallest 32 bit CPU with GCC toolchain. +

          Sincerely,

          +

          Øyvind Harboe
          Zylin AS +

          + +
          +

          License

          +

          The project includes HDL, GCC toolchain and eCos HAL. + +

          The ZPU has a BSD license for the HDL and GPL for the rest. +This allows users to implement any version of the ZPU they want in +commercial products, but if improvements are done to the architecture +as such, then they need to be contributed back. +

          + +

          Per Jan 1. 2008, Zylin has the Copyright for the ZPU, i.e. Zylin +is free to decide that the ZPU shall have a BSD license for HDL + GPL +for the rest.

          + +
          +

          Survey

          +

          Please take the time to fill in this short survey so we can gather +information about where the ZPU can be the most useful:

          +

          http://www.zylin.com/zpusurvey.html

          + + +

          Features

          +
          + + +

          Status

          +
            +
          • HDL works +
          • GCC toolchain works +
          • eCos HAL works +
          +

          ... but there is a long TODO list

          +

          Expect churn as we converge onto a shorter list of implementations. + + +

          Download source code

          +

          +

          To get the ZPU HDL source and tools, check it out from CVS:

          +

          cvs -d :pserver:anonymous@cvs.opencores.org:/cvsroot/anonymous co +zpu/zpu

          +There are more instructions +
          here +and +here +. + +

          As of 01 JAN 2009, if you check out all of zpu it is about 200MB, and includes more than you need. It is recommended that you only checkout zpu/zpu. + + +

          Creating a patch

          +

          Please submit changes to the zylin-zpu mailing list as a patch. +

          +
            +
          1. Merge your changes with CVS HEAD. +
          2. Update the FreeBSD or GPL copyright with your name in the case +of non-trivial changes. If in doubt, add the copyright. +
          3. Add an entry to zpu/ChangeLog with date, your name, email, the +files you changed and a comment. +
          4. cd zpu
            cvs diff -upN . > mypatch.txt
            +
          5. Email it to zylin-zpu mailing list. Attach it +as an uncompressed .txt file +
          + + +

          Getting help - mailing list

          +

          The place to get help is the zylin-zpu mailing list + +

          + +


          + + + +

          Architecture

          +The ZPU is a zero operand, or stack based CPU. The opcodes have a fixed width of 8 bits. +

          +Example: +

          +

          + + IM 5 ; push 5 onto the stack + LOADSP 20 ; push value at memory location SP+20 + ADD ; pop 2 values on the stack and push the result + +
          +As can be seen, a lot of information is packed into the 8 bits, e.g. the IM instruction pushes a 7 bit signed integer onto the stack. +

          +The choice of opcodes is intimately tied to the GCC toolchain capabilities. +

          +

          + + /* simple program showing some interesting qualities of the ZPU toolchain */ + void bar(int); + int j; + void foo(int a, int b, int c) + { + a++; + b+=a; + j=c; + bar(b); + } + +foo: + loadsp 4 ; a is at memory location SP+4 + im 1 + add + loadsp 12 ; b is now at memory location SP+12 + add + loadsp 16 ; c is now at memory location SP+16 + im 24 ; «j» is at absolute memory location 24. +; Notice how the ZPU toolchain is using link-time relaxation +; to squeeze the address into a single no-op + store + im 22 ; the fn bar is at address 22 + call + im 12 + return ; 12 bytes of arguments + return from fn + +
          + +
          +

          Instruction set

          +

          A base set of instructions must be implemented in RTL, but the rest may be implemented as RTL or as microcode. This allows a tradeoff of core size vs code size and performance. +

          The instructions that may be implemented in RTL or microcode are referred to as emulated instructions. The microcode is in crt0.s. The implementation determines which instructions run as microcode. +

          All operations are 32 bit wide. +

          TODO Is the table broken? Fix it. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          NameOpcodeDescriptionDefinition
          + BREAKPOINT + + 00000000 + + The debugger sets a memory location to this value to set a breakpoint. Once a JTAG-like + debugger interface is added, it will be convenient to be able to distinguish + between a breakpoint and an illegal(possibly emulated) instruction. + + No effect on registers +
          + IM + + 1xxx xxxx + + Pushes 7 bit sign extended integer and sets the a «instruction decode interrupt mask» flag(IDIM). +

          + If the IDIM flag is already set, this instruction shifts the value on the stack left by 7 bits and stores the 7 bit immediate value into the lower 7 bits. +

          + Unless an instruction is listed as treating the IDIM flag specially, it should be assumed to clear the IDIM flag. +

          + To push a 14 bit integer onto the stack, use two consecutive IM instructions. +

          + If multiple immediate integers are to be pushed onto the stack, they must be interleaved with another instruction, typically NOP. +

          + +pc <= pc + 1
          +idim <= 1
          +if (idim=0) then
          + sp <= sp - 1;
          + for i in wordSize-1 downto 7 loop
          + mem(sp)(i) <= opcode(6)
          + end loop
          + mem(sp)(6 downto 0) <= opcode(6 downto 0)
          +else
          + mem(sp)(wordSize-1 downto 7) <= mem(sp)(wordSize-8 downto 0)
          + mem(sp)(6 downto 0) <= opcode(6 downto 0)
          +end if +
          + +
          + STORESP + + 010x xxxx + + Pop value off stack and store it in the SP+xxxxx*4 memory location, where xxxxx is a positive integer. + +
          + LOADSP + + 011x xxxx + + Push value of memory location SP+xxxxx*4, where xxxxx is a positive integer, onto stack. + + +
          + ADDSP + + 0001 xxxx + + Add value of memory location SP+xxxx*4 to value on top of stack. + + +
          + EMULATE + + 001x xxxx + + Push PC to stack and set PC to 0x0+xxxxx*32. This is used to emulate opcodes. See + zpupgk.vhd for list of emulate opcode values used. zpu_core.vhd contains + reference implementations of these instructions rather than letting the ZPU execute the EMULATE instruction +

          + One way to improve performance of the ZPU is to implement some of + the EMULATE instructions. + +

          + +
          + PUSHPC + + emulated + + Pushes program counter onto the stack. + + +
          + POPPC + + 0000 0100 + + Pops address off stack and sets PC + + +
          + LOAD + + 0000 1000 + + Pops address stored on stack and loads the value of that address onto stack. +

          + Bit 0 and 1 of address are always treated as 0(i.e. ignored) by + the HDL implementations and C code is guaranteed by the programming + model never to use 32 bit LOAD on non-32 bit aligned addresses(i.e. + if a program does this, then it has a bug). +

          + +
          + STORE + + 0000 1100 + + Pops address, then value from stack and stores the value into the memory location of the address. +

          + Bit 0 and 1 of address are always treated as 0 +

          + +
          + PUSHSP + + 0000 0010 + + Pushes stack pointer. + + +
          + POPSP + + 0000 1101 + + Pops value off top of stack and sets SP to that value. Used to allocate/deallocate space on stack for variables or when changing threads. + + +
          + ADD + + 0000 0101 + + Pops two values on stack adds them and pushes the result + + +
          + AND + + 0000 0110 + + Pops two values off the stack and does a bitwise-and & pushes the result onto the stack + + +
          + OR + + 0000 0111 + + Pops two integers, does a bitwise or and pushes result + + +
          + NOT + + 0000 1001 + + Bitwise inverse of value on stack + + + +
          + FLIP + + 0000 1010 + + Reverses the bit order of the value on the stack, i.e. abc->cba, 100->001, 110->011, etc. +

          + The raison d'etre for this instruction is mainly to emulate other instructions. +

          + +
          + NOP + + 0000 1011 + + No operation, clears IDIM flag as side effect, i.e. used between two + consecutive IM instructions to push two values onto the stack. + + +
          + PUSHSPADD + + 61 + + a=sp;
          + b=popIntStack()*4;
          + pushIntStack(a+b);
          +
          + +
          + POPPCREL + + 57 + + setPc(popIntStack()+getPc()); + + +
          + SUB + + 49 + + int a=popIntStack();
          + int b=popIntStack();
          + pushIntStack(b-a);
          +
          + +
          + XOR + + 50 + +pushIntStack(popIntStack() ^ popIntStack()); + + +
          + LOADB + + 51 + + 8 bit load instruction. Really only here for compatibility with + C programming model. Also it has a big impact on DMIPS test. +

          + pushIntStack(cpuReadByte(popIntStack())&0xff); +

          + +
          + STOREB + + 52 + + 8 bit store instruction. Really only here for compatibility with + C programming model. Also it has a big impact on DMIPS test. +

          + addr = popIntStack();
          + val = popIntStack();
          + cpuWriteByte(addr, val); +

          + +
          + LOADH + + 34 + + + 16 bit load instruction. Really only here for compatibility with + C programming model. +

          + + pushIntStack(cpuReadWord(popIntStack())); +

          + +
          + STOREH + + 35 + + 16 bit store instruction. Really only here for compatibility with + C programming model. +

          +addr = popIntStack();
          + val = popIntStack();
          + cpuWriteWord(addr, val); +

          + +
          + LESSTHAN + + 36 + + Signed comparison
          + a = popIntStack();
          + b = popIntStack();
          + pushIntStack((a < b) ? 1 : 0);
          +
          + +
          + LESSTHANOREQUAL + + 37 + + Signed comparison
          + a = popIntStack();
          + b = popIntStack();
          + pushIntStack((a <= b) ? 1 : 0); +
          + +
          + ULESSTHAN + + 37 + + Unsigned comparison
          + long a;//long is here 64 bit signed integer
          + long b;
          + a = ((long) popIntStack()) & INTMASK; // INTMASK is unsigned 0x00000000ffffffff
          + b = ((long) popIntStack()) & INTMASK;
          + pushIntStack((a < b) ? 1 : 0); +
          + +
          + ULESSTHANOREQUAL + + 39 + + Unsigned comparison
          + long a;//long is here 64 bit signed integer
          + long b;
          + a = ((long) popIntStack()) & INTMASK; // INTMASK is unsigned 0x00000000ffffffff
          + b = ((long) popIntStack()) & INTMASK;
          + pushIntStack((a <= b) ? 1 : 0); +
          + +
          + EQBRANCH + + 55 + + int compare;
          + int target;
          + target = popIntStack() + pc;
          + compare = popIntStack();
          + if (compare == 0)
          + {
          + setPc(target);
          + } else
          + {
          + setPc(pc + 1);
          + } +
          + +
          + NEQBRANCH + + 56 + + int compare;
          + int target;
          + target = popIntStack() + pc;
          + compare = popIntStack();
          + if (compare != 0)
          + {
          + setPc(target);
          + } else
          + {
          + setPc(pc + 1);
          + }
          +
          + +
          + MULT + + 41 + + Signed 32 bit multiply
          + pushIntStack(popIntStack() * popIntStack()); +
          + +
          + DIV + + 53 + + Signed 32 bit integer divide.
          + a = popIntStack();
          + b = popIntStack();
          + if (b == 0)
          + {
          + // undefined
          + } + pushIntStack(a / b);
          +
          + +
          + MOD + + 54 + + Signed 32 bit integer modulo.
          + a = popIntStack();
          + b = popIntStack();
          + if (b == 0)
          + {
          + // undefined
          + }
          + pushIntStack(a % b);
          +
          + +
          + LSHIFTRIGHT + + 42 + + unsigned shift right.
          + long shift;
          + long valX;
          + int t;
          + shift = ((long) popIntStack()) & INTMASK;
          + valX = ((long) popIntStack()) & INTMASK;
          + t = (int) (valX >> (shift & 0x3f));
          + pushIntStack(t);
          +
          + +
          + ASHIFTLEFT + + 43 + + arithmetic(signed) shift left.
          + + long shift;
          + long valX;
          + shift = ((long) popIntStack()) & INTMASK;
          + valX = ((long) popIntStack()) & INTMASK;
          + int t = (int) (valX << (shift & 0x3f));
          + pushIntStack(t);
          +
          + +
          + ASHIFTRIGHT + + 43 + + arithmetic(signed) shift left.
          + long shift;
          + int valX;
          + shift = ((long) popIntStack()) & INTMASK;
          + valX = popIntStack();
          + int t = valX >> (shift & 0x3f);
          + pushIntStack(t);
          + +
          + +
          + CALL + + 45 + + call procedure.
          +
          + int address = pop();
          + push(pc + 1);
          + setPc(address);
          +
          + +
          + CALLPCREL + + 63 + + call procedure pc relative
          +
          +int address = pop();
          + push(pc + 1);
          + setPc(address+pc);
          + +
          + EQ + + 46 + + pushIntStack((popIntStack() == popIntStack()) ? 1 : 0); + +
          + NEQ + + 48 + + pushIntStack((popIntStack() != popIntStack()) ? 1 : 0); + +
          + NEG + + 47 + + pushIntStack(-popIntStack()); + +
          + + +

          Interrupts

          +The ZPU supports interrupts. +

          +To trigger an interrupt, the interrupt signal must be asserted. The ZPU does +not define any interrupt disabling mechanism, this must be implemented by the +interrupt controller and controlled via memory mapped IO. +

          +Interrupts are masked when the IDIM flag is set, i.e. +with consecutive IM instructions. +

          +The ZPU has an edge triggered interrupt. As the ZPU notices that the interrupt +is asserted, it will execute the interrupt instruction. The interrupt signal +must stay asserted until the ZPU acknowledges it. +

          +When the interrupt instruction is executed, the PC will be pushed onto the +stack and the PC will be set to the interrupt vector address (0x20). +

          +Note that the GCC compiler requires three registers r0,r1,r2,r3 for some +rather uncommon operations. These 32 registers are mapped to memory locations 0x0, +0x4, 0x8, 0xc. The default interrupt vector at address 0x20 will load the +value of these memory locations onto the stack, call _zpu_interrupt and +restore them. +

          +See zpu/hdl/zpu4/test/interrupt/ for C code and zpu/hdl/example/simzpu_interrupt.do +for simulation example. + + +

          Custom startup code (aka crt0.s)

          +To minimize the size of an application, one important trick is to +strip down the startup code. The startup code contains microcode for emulation +of instructions that may never be used by a particular application, or are made redundant because the instructions are implemented in RTL. +

          +The startup code is found in the GCC source code under gcc/libgloss/zpu, +but to make the startup code more available, it has been duplicated +into zpu/sw/startup +

          +On the TODO list is work to make it easier to reduce code size. +

          +TODO is the following actually useful? if not remove or elaborate. +

          +To minimize startup size, see codesize +demo. This is pretty standard GCC stuff and simple enough once you've +been over it a couple of times. + + + +

          Vectors

          + + + + + + + + + + + + + + + + + +
          AddressNameDescription
          0x000Reset + 1.When the ZPU boots, this is the first instruction to be executed. +
          + 2.The stack pointer is initialised to maximum RAM address +
          0x020Interrupt + This is the entry point for interrupts. +
          0x040-Emulated instructions + Emulated opcode 34. Note that opcode 32 and opcode 33 are not normally used to emulate instructions as these memory addresses are already used by boot vector, GCC registers and the interrupt vector. +
          + +
          + +
          +

          Core Implementations

          +zpu4 (superseding zpu3) are original work by Øyvind Harboe. All other implementations derive from zpu4. +

          +High on the TODO list is to reduce the number of implementations taking the best from all. For example interrupts are not universally implemented, IO naming is inconsistent and memory architectures differ. +

          +Ultimately we should try to get closer to the opencores coding standard. You can find the document in the opencores cvsroot/common. +

          +For now if you are starting a design, zpu4 or zealot are probably the safest. zealot offers more customization through generics, but lacks interrupts. zpu4 gets more attention. Take your pick. + + +

          Performance Summary

          + +TODO fill in performance table. +

          + + + + + + + + + + + + + + + + + + + + + +

          CORE/Config

          Spartan3e

          Cyclone3

          DMIPS @ 50MHz

          +zpu4 small
          +maxAddrBit=?
          +...
          +
          +? LUT
          +? REG
          +? MULT18x18
          +? BRAM
          +? fmax
          +
          +? LUT
          +? REG
          +? MULT18x18
          +? M4K
          +? fmax
          +

          ???

          zpu4 medium

          +? LUT
          +? REG
          +? MULT18x18
          +? BRAM
          +? fmax
          +
          +? LUT
          +? REG
          +? MULT18x18
          +? M4K
          +? fmax
          +

          ???

          + +
          +

          zpu4 small

          +Found in zpu/zpu/hdl/zpu4/core/zpu_core_small.vhd +

          +The small ZPU4 implements the minimum instruction set. It is optimized for size and simplicity +serving as a reference in both regards. +

          +It uses a BRAM (dual port RAM w/read/write to both ports) as data & code storage and +is implemented as a simple state machine. +

          +Essentially it has three states: +

            +
          1. Fetch - starts fetch of next instruction +
          2. FetchNext - sets up operands for execute cycle +
          3. Decode - decodes instruction +
          4. Execute - well.. executes instruction +
          +The tricky bit is that there is a tiny bit of interleaving of +states since the BRAM takes a cycle to perform a fetch/store. The above is the +normal states the ZPU cycles through unless memory fetch, jumps, etc. take +place. + + +

          zpu4 medium

          +Found in
          zpu/zpu/hdl/zpu4/core/zpu_core.vhd +

          +The medium ZPU4 has a single port memory interface. All data, code and IO is +accessed through this memory interface. +

          +It performs better(despite having less memory bandwidth than zpu_core_small.vhd) +since it implements many more instructions. + + +

          Alvaro's pipelined ZPU

          +All the rave in the mailing list. TBA. + + +

          Zealot

          +Small found in
          zpu/zpu/hdl/zealot/zpu_small.vhdl +

          +Medium found in zpu/zpu/hdl/zealot/zpu_medium.vhdl +

          +README found in zpu/zpu/hdl/zealot/0README.txt +

          +The Zealot version of ZPU was contributed by Salvador E. Tropea. +

          +The key features are: + + +

            +
          • Includes a very basic PHI I/O synthesizable core. +It implements the 64 bits clocks counter (timer) and the UART. This is enough +to run the DMIPS benchmark and a hello world application. I tested the UART +@ 9600 bps and @ 115200 bps.
          • +
          • The ZPU can be customized using generics. It allows the use of more +than one core in the same project without problems.
          • +
          • Implements the lshiftright instruction in hardware, this gives around +10% boost in the DMIPS benchmark (Medium version).
          • +
          • You can disable various instructions groups and let them to the +emulation soft, so you can experiment with various LUTs vs DMIPS +configurations (Medium version).
          • +
          • The medium version provides aprox. 2.6 DMIPS @ 50 MHz and the small +0.5 DMIPS @ 50 MHz.
          • +
          • Enhanced trace module, it includes the assembler for the executed +instruction and can also measure how much stack was consumed during the +execution.
          • +
          • Includes ready to use memory images for a hello world program and the +DMIPS benchmark.
          • +
          • Memory and trace blocks outside ZPU. This provides better modularity.
          • +
          + +Simulation and implementation files are provided. You need 16 kB of BRAMs +for the "hello world" example and 32 kB for the DMIPS benchmark. The medium +version takes around 1030 slices and 3 multipliers and the small version +around 430 slices.

          + +The generics for the Zealot Medium ZPU are:

          + +

            +
          • WORD_SIZE (integer:=32) Data width, only 32 bits are really +tested/supported. Adding support for 16 bits should be simple, but the +toolchain needs to support it.
          • +
          • ADDR_W (integer:=16) Address bus width memory+I/O space. The MSB +selects the address space (1=I/O).
          • +
          • MEM_W (integer:=15) Memory address bus width. It includes program, +data and stack sections.
          • +
          • D_CARE_VAL (std_logic:='X') Value used to fill the unsused bits. +For simulations this should be '0', for synthesis this is a value that your +tools interprets as "don't care". Xilinx tools could get benefit from using +'X'. This is particularly true to assign default values and for unreached +cases. Note that I didn't find it useful.
          • +
          • MULT_PIPE (boolean:=false) Enables the multiplication pipeline. +This can allow faster clocks but will make the mult instruction slower (more +clocks consumed).
          • +
          • BINOP_PIPE (integer range 0 to 2:=0) Enables the pipeline for +the -, =, < and <= operations. This can allow faster clocks but will +make these instruction slower (more clocks consumed). This value is the +amount of extra clocks added.
          • +
          • ENA_LEVEL0 (boolean:=true) Enables the hardware implementation of +eq, neqbranch, loadb and pushspadd instructions.
          • +
          • ENA_LEVEL1 (boolean:=true) Enables the hardware implementation of +lessthan, ulessthan, mult, storeb, callpcrel and sub instructions.
          • +
          • ENA_LEVEL2 (boolean:=false) Enables the hardware implementation of +lessthanorequal, ulessthanorequal, call and poppcrel instructions.
          • +
          • ENA_LSHR (boolean:=true) Enables the hardware implementation of +lshiftright instruction.
          • +
          • ENA_IDLE (boolean:=false) Enables the enable_i usage. This signal +can hold the CPU in an idle state if after reset this signal remains active. +When disabled the enable_i signal isn't used and the idle state is removed.
          • +
          • FAST_FETCH (boolean:=true) This version of the ZPU fetches 4 +instructions at ones (32 bits), then they are decoded (2 cycles) and finally +executed. The decoded instructions are stored in a "decode cache", the first +instruction is immediately moved to the "current instruction" register and a +"special instruction" replaces the first slot. This "special instruction" +makes the CPU go to the fetch state. When you enable this generic the FSM +does the fetch instead of waiting one clock cycle to go to the fetch state. +This makes instructions run a little bit faster, but it can cost area and/or +frequency.
          • +
          + + + +

          ZY2000

          +Found in
          zpu/zpu/hdl/zy2000/zpu_core.vhd +Modified version of zpu4 medium for use with a wishbone bridge. +

          +The ZY2000 is a complete implementation including: ZPU, DRAM, soft-MAC, wishbone bridges, GPIO subsystem, etc. This also included an eCos HAL w/TCP/IP support. + + +

          Verilog translation

          +Found in zpu/wip/ZPU_CORE/src/zpu_core.v +

          +The verilog version of ZPU (zpu4) was contributed by Jurij Kostasenko. No-one appears to be maintaining it, but it should be a useful starting point for further work. There are some useful scripts there. + + +

          Implementing your own ZPU

          +One of the neat things about the ZPU is that the instruction set and architecture +is very small and it is easy to implement a ZPU from scratch or modify the +existing ZPU implementations. +

          +Implementing a ZPU can be done without understanding the toolchain in +detail, i.e. using exclusively HDL skills and only a rudimentary +understanding of standard GCC/GDB usage is sufficient. +

          +A few tips: +

            +
          • Run zpu_core.vhd or zpu_core_small.vhd and generate an instruction trace +from ModelSim or similar. To check that you own implementation is correctly +implemented, verify that the instruction trace for the new and old +ZPU implementations match. This gives you a simple way to do regression +tests as you develop your ZPU. +
          • To improve performance, you can add more instructions. The EMULATE instructions +are optional in HDL since they will be emulated in software if they are not +implemented in HDL. This allows you to run the ZPU executables unmodified +regardless of which EMULATE instructions you implement. +
          • Run the DMIPS test to measure your overall performance +
          • Run the histogram.perl script on the instruction trace to generate +histograms of the instructions. Profiling is essential to making +the right choices w.r.t. optimization for your application. +
          + +
          + + +
          +

          Reference Designs

          +The zpu core is independent of IO and memory architecture. Here are three levels of reference designs a user can refer to in order to get started in their own design, regardless of chosen core. +

          +TODO converge on a single IO structure for core implementations. +

          +TODO re-org CVS to make it easy to keep appropriate SW, RTL(verilog and VHDL) , scripts, verification stuff together. +

          + + +

          Minimal (core+RAM)

          +The minimum design is a zpu core with true dual port RAMs attached. This is handy for size/fmax trial in a particular FPGA, and maybe HDL regression. Maybe not a very useful starting point, unless you can DMA all you IO. +

          +TODO provide FPGA scripts. +

          +TODO provide HDL regression environment. + + +

          Basic (core+RAM+UART+Timer)

          +The minimum design required for hello_world and DMIPS applications. Requires more RAM and a UART (or something) for stdio. This is handy as a starting point for a new users design, and to run DMIPS evaluation, and maybe HDL regression. +

          +TODO provide FPGA scripts. +

          +TODO provide HDL regression environment. + + +

          SOC (core+RAM+Wishbone+++)

          +Large design(s) for one or more chosen eval board. Features dictated by board and available IP. + + +

          Common - RAM models

          +single (1RW), simple dual(1R+1W), true dual(1RW+1RW), and xilinx distributed dual(1RW+1R) RAM models. Parameterized depth / width, and loadable from file. The goal is that ROM be independent of verilog/VHDL implementation of RAM. +

          +TODO RAM model contribution needed. What is in opencore/common is not adequate. + + +

          Common - Wishbone

          +In hdl/wishbone there is an implementation +of a wishbone bridge. It was designed to work with ZY2000 +

          +TODO make wishbone bridge re-usable with all cores + + +

          Common - UART

          + +All self respecting embedded projects should have a debug channel +to print stuff to. Typically this is a standard RS232 or UART, but +it can also be something more exotic like a DCC JTAG channel. +

          +The point is that characters(bytes) are sent to/from the ZPU +via some terminal. +

          +The ZPU defines in the memory map a UART / debug channel. This +should be implemented by some suitable debug channel for +the device in which the ZPU is implemented. +

          +www.opencores.org has several UART implementations. This is one +of the simpler ones: + + +http://www.opencores.org/projects.cgi/web/uart/overview +

          Implementing your own UART / debug channel

          +The first thing you need to do is to choose a debug channel for your +hardware. This could be a UART, but it doesn't have to be. +

          +Secondly you should write a small HDL module that interface between +the ZPU memory map of debug channel to the UART. This should + be relatively simple as all you need to do is to let the ZPU + query the FIFO in/out for busy flag and allow the ZPU to read/write + data to the UART via the memory map. + +

          +TODO explicit example with UART from opencores in the above ref designs. + + + +

          SPI flash controller (read-only)

          +This is a simple read-only SPI flash controller, with the following characteristics: + +
          +
        12. Fast-READ only implementation. +
        13. 32-bit only access +
        14. Fast sequential read access - Uses low-clock approach
        15. +
          + +

          Version

          +The current version is 1.2. This is also the first public version available. + +

          Timing overview

          + +

          Simple timing overview, with one nonsequential access to address 0x0, followed by a sequential access to address 0x4. +This simulation was done with Xilinx tools, after post-routing, and using a ZPU to access the SPI

          +
          + + +

          Image 1: Timing overview

          +
          + +On Image 2, you can see the clock almost perfectly centered on data, when we write to the SPI flash. + +
          + +

          Image 2: Issuing commands to the SPI

          +
          + +As you can see from Image 3, I assume the worst-case read delay from SPI (which is 15ns, as you can see from the marker). + +
          + +

          Image 3: Reading from the SPI

          +
          + +

          Usage

          + +Simple description of SPI controller interface: + + + + + + + + + + + + + + + + + + +
          SymbolDirectionBit widthPurpose
          adrInput24Address where to read from SPI
          dat_oOutput32Data read from SPI
          clkInput1Input clock. Used for both interface and SPI
          ceInput1Chip Enable
          rstInput1Asynchronous reset
          ackOutput1Data valid ACK
          SPI_CLKOutput1SPI output clock
          SPI_MOSIOutput1SPI output data from controller to chip
          SPI_MISOInput1SPI input data from chip to controller
          SPI_SELNOutput1SPI nSEL (deselect, active low) signal
          + +

          License

          +The Verilog implementation is released under BSD license. See the file itself for more licensing details. + +

          Dowload

          +Download the Verilog code here: spi_controller.v + +

          Troubleshooting

          +The current implementation is timed and optimized for myself. Your parameters might not be the same +as those I defaulted, so read the code carefully. If you have any issue let me know. + + + + +
          + + +

          Working with the tools and core

          +TODO discussion of tools needed and choose some to be supported by project. Need to deal with cygwin vs linux, VHDL vs verilog, open vs closed.... plus language support in simulators is sometimes lacking. +

          +Xilinx ISE webpack is available for windows and linux +
          +Altera Quartus web edition is windows only. +
          +Lattice ispLEVER starter edition is windows only. +

          +None appear to come with a standalone simulator anymore. Not sure if any built in simulators are worth looking at... never have been in the past. + +

          +Popular Simulation tools for this kind of project: Modelsim, GHDL, veriwell, cver, icarus, gtkwave... others? +

          + + +

          Setup - Linux toolchain

          +You will need Java installed to run the simulator and some other stuff. +

          +TODO setup.sh script needs to detect linux/cygwin, and should have install path option. +

          +$ cd zpu/zpu/sw     # path as appropriate
          +$ sh setup.sh       # untars the tool chain to ... TODO
          +$ . env.sh          # puts the tools in you path
          +
          + +
          +

          Setup - Cygwin toolchain

          +Install
          Cygwin +You will need Java installed to run the simulator and some other stuff. +
          +$ cd zpu/zpu/sw     # path as appropriate
          +$ sh setup.sh       # unzips the tool chain to /tmp/zpu/install/bin
          +$ . env.sh          # puts the tools in you path
          +
          + + +

          GCC to RAM

          +TODO some of this is generic, some is zpu4 specific. Should move to refdesign section when ref designs exist. +

          +The instructions are stored big endian. That is the first instruction is stored in the most significant byte, and the forth is in the least significant byte. +

          +

          Generating VHDL BRAM initialization

          +
          +$ zpu-elf-objcopy -O binary hello.elf hello.bin
          +$ java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
          +
          +

          Build another test application for example simulation

          +Here is how to build a rom image for an application using the +zpu/example simulation files. +
          +$ cd zpu/roadshow/roadshow/dhrystone
          +$ sh build.sh
          +$ cd zpu/hdl/example
          +$ gcc zpuromgen.c
          +$ ./a
          +Usage: ./a binary_file
          +$ ./a ../../roadshow/roadshow/dhrystone/dhrystone.bin >app.txt
          +
          +Copy and paste app.txt into helloworld.vhd. + +

          +TODO need to merge following with above. +

          + +The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has +some very basic peripherals defined: counter, timer interrupt and a debug output port. + +

          Hello world example

          +The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. +

          +

          +$ cd zpu/sw/helloworld
          +$ zpu-elf-gcc -Os -zeta hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
          +or ? TODO which one
          +$ zpu-elf-gcc -phi hello.c -o hello.elf 
          +$ zpu-elf-size hello.elf
          +
          + + +
          +

          HDL simulation (ZPU4)

          +TODO some of this is generic, some is zpu4 specific. Should move to refdesign section when ref design exists. +

          +For new users you will also find scripts in the zealot area that may be useful. +

          +You'll find a working simulation script in hdl/example/simzpu_small.do and hdl/example_medium/simzpu_medium.do, which +show simulation of the small(zpu_core_small.vhd) and medium sized ZPU(zpu_core.vhd). hdl/example/simzpu_interrupt.do +shows use of interrupts. +

          +When implementing the ZPU, copy the following files and modify them to your needs: +

            +
          1. hdl/example/zpu_config.vhd - set up RAM size here +
          2. hdl/example/helloworld.vhd - dual port BRAM implementation. +
          +Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is memory mapped(read/write) in the ZPU. + +

          Running example simulation

          +The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt: +
            +
          1. cd c:/<installfolder>/hdl/example +
          2. do zpusim_small.do +
          +

          +After running the hello world simulation (see zpusim.do), two files are written to the hdl/example directory: +

            +
          1. log.txt - contains the "Hello world!" text written to the debug channel/simplified UART. +
          2. trace.txt - a trace file for the CPU. The instruction set simulator has the capability of taking +this file as input in order to verify that the HDL implementation matches the instruction set simulator. +When a mismatch is found, the GDB debugger will break. Very handy for debugging custom ZPU implementations. +
          + + +
          +

          GDB simulation

          +
            +
          1. cd zpu/sw/helloworld +
          2. Launch the simulator from a seperate bash shell:

            +java -classpath ../simulator/zpusim.jar -Xmx512m com.zylin.zpu.simulator.Phi 4444 +

            + +

          3. Launch GDB:

            +../install/bin/zpu-elf-gdb hello.elf +

          4. Connect to target, load and run application:

            +

            +(gdb) target remote localhost:4444
            +(gdb) load
            +(gdb) continue
            +
            +

            + + +

          + + +
          +

          Simulator

          +

          The ZPU simulator is integrated into the Zylin Embedded CDT plugin +to ease debugging of ZPU applications:

          +

          http://www.zylin.com/embeddedcdt.html

          +

          The ZPU simulator has many features besides debugging an +application:

          +
            +
          • taking output from simulation(e.g. + ModelSim) and matching that against the Java simulator, thus making + it much easier to debug HDL implementations and also getting real + world timing information +

            +
          • can generate gprof output +

            +
          • generate various statistics +

            +
          +

          The plugin is still pretty rough around the edges, and needs to +get GUI support for enabling the ModelSim trace input feature.

          +


          Compiling +ZPU application

          +


          Setting +up the simulator

          +


          Choosing +ZPU executable

          +


          Debug +session

          +


          +

          + + +
          + + +

          Misc

          +TODO Stuff that could probably find a better home. + +
          +

          JTAG/hardware debugger for GDB

          +The Zylin
          ZY1000 JTAG debugger supports +the ZPU. Contact Zylin for pricing and details. +

          +There are two debug modes in which the ZY1000 can operate: +

            +
          • Classic. Here the ZY1000 controls the CPU and examines the state. The ZY1000 has a built in +GDB server that GDB talks to. +
          • Small footprint. If there isn't enough space on the device for the ZPU *and* the JTAG +controller, then the ZY1000 can run the ZPU externally. The JTAG communication channel is +then used to peek/poke peripherals and inside the FPGA instead of the ZPU there is then +a JTAG controller that peeks and pokes the peripherals of the ZPU. There are advantages +and disadvantages of this approach: it may be unfamiliar to embedded developers and +the timing is different from the "real" ZPU(interrupts are delayed, execution speed +differse, etc.) On the other hand there are other things +which are simpler: much more RAM can be available for the ZPU during development, +better debug consoles(faster), additional peripheral(timers, etc.) is available. This +approach is somewhat unique to the ZPU as the ZPU is simple enough that it can be +implemented efficiently in this manner. +
          + + + +

          Speeding up the ZPU

          +There are two aspects of speeding up the ZPU: making it perform better +for a particular application and toying around with the ZPU architecture. +

          Performance tips

          +
            +
          1. Profile. Create a small sample and run in a simulator that is as close +to the real deployment as possible. zpu4/core/histogram.perl is a script +that will tell you which instructions take the most time. +
          2. Using the profile output, decide on which emulated instructions that +it makes sense to implement in HDL for your particular application. Modifying +zpu_core_small.vhd is not particularly hard. Most instructions can be +transliterated into zpu_core_small.vhd from zpu_core.vhd without too much +problem. +
          3. The memory subsystem may well turn out to be where you should concentrate +your efforts. +
          +

          Toying around with the architecture

          +Again: profile 90% of the time and spend the remaining 10% tinkering +with the architecture. +
            +
          • There is a DMIPS program you can use to measure the performance of +the ZPU in lieu of profiling a real application. The latter is obviously +a superior solution. +
          • Again: use histogram.perl to figure out which instructions you should add +in HDL. +
          • Tinker a bit with Fmax to find the maximum speed rating for your design. +
          • zpu_core_small.vhd should be ca. 1 DMIPS and zpu_core.vhd should yield +about 5-10 DMIPS before adding instructions runs out of steam. +
          +If you need to get ca. 20-50 DMIPS out of the ZPU you will have to +write a heavily pipelined architecture with caches(if you are running +against DRAM). This is *tricky*, but some proof of concept work was +done to show 20 DMIPS w/the ZPU(the actual result was discarded since +it was not complete and contained fatal flaws). +

          +Achieving above 50-100 DMIPS with the current ZPU architecture is probably +a non-starter and a more conventional RISC design makes more sense here. +

          +The unique advantages of the ZPU is size in terms of HDL & code size. + + + + +

          Optimizing for code size

          +The ZPU toolchain produces highly compact code. +
            +
          1. Since the ZPU GCC toolchain supports standard ANSI C, it is easy to stumble across +functionality that takes up a lot of space. E.g. the standard printf() function is a beast. Some compilers drop e.g. floating point support +from the printf() function and thus boast a "smaller" printf() when in fact they have a non-standard printf(). newlib has a standard printf() function +and an alternative iprintf() function that works only on integers. +
          2. The ZPU ships with default startup code that works across various configurations of the ZPU, so be warned that there is some overhead that will +not occur in the final application(anywhere between 1-4kBytes). +
          3. Compilation and linker options matter. The ZPU benefits greatly from the "-Wl,--relax -Wl,--gc-sections" options which is not used by +all architectures(e.g. GCC ARM does not implement/need -Wl,--relax). +
          +

          Small code example

          + +zpu-elf-gcc -Os -abel smallstd.c -o smallstd.elf -Wl,--relax -Wl,--gc-sections
          +zpu-elf-size small.elf
          +
          +$ zpu-elf-size small.elf
          + text data bss dec hex filename
          + 2845 952 36 3833 ef9 small.elf
          +
          +
          + +

          Even smaller code example

          +If the ZPU implements the optional instructions, the RAM overhead can be reduced significantly. +

          + +zpu-elf-gcc -Os -abel crt0_phi.S small.c -o small.elf -Wl,--relax -Wl,--gc-sections -nostdlib
          +zpu-elf-size small.elf
          +
          +$ zpu-elf-size small.elf
          + text data bss dec hex filename
          + 56 8 0 64 40 small.elf
          +
          +
          + +
          +

          Installing eCos build tools

          + +tar -xjvf ecossnapshot.tar.bz2
          +tar -xjvf repository.tar.bz2
          +tar -xjvf ecostools.tar.bz2
          +# run this every time you open the shell
          +export PATH=$PATH:`pwd`/ecos-install
          +export ECOS_REPOSITORY=`pwd`/ecos/packages:`pwd`/repository
          +
          +

          Compiling eCos tests

          + +ecosconfig new zeta default
          +ecosconfig tree
          +make
          +cd kernel/current
          +make tests
          +
          + +

          Code size ZPU

          +
          +$ zpu-elf-size *
          +   text    data     bss     dec     hex filename
          +  15761    1504   12060   29325    728d bin_sem0
          +  16907    1512   14436   32855    8057 bin_sem1
          +  17105    1524   30032   48661    be15 bin_sem2
          +  17186    1512   14436   33134    816e bin_sem3
          +  18986    1500   12036   32522    7f0a clock0
          +  15812    1504   13236   30552    7758 clock1
          +  25095    1972   13224   40291    9d63 clockcnv
          +  16437    1500   13224   31161    79b9 clocktruth
          +  15762    1504   12060   29326    728e cnt_sem0
          +  17124    1512   14436   33072    8130 cnt_sem1
          +  35947    1564   22512   60023    ea77 dhrystone
          +  16428    1500   13228   31156    79b4 except1
          +  15751    1504   12052   29307    727b flag0
          +  19145    1512   15624   36281    8db9 flag1
          +  20053    1516  102908  124477   1e63d fptest
          +  15998    1496   12092   29586    7392 intr0
          +  16080    1496   12200   29776    7450 kalarm0
          +  15327    1496   12036   28859    70bb kcache1
          +  15549    1496   13224   30269    763d kcache2
          +  18291    1500   12260   32051    7d33 kclock0
          +  16231    1500   13232   30963    78f3 kclock1
          +  16572    1496   13228   31296    7a40 kexcept1
          +  15618    1496   12060   29174    71f6 kflag0
          +  19287    1500   15624   36411    8e3b kflag1
          +  16887    1516   15628   34031    84ef kill
          +  16186    1496   12128   29810    7472 kintr0
          +  19724    1504   14516   35744    8ba0 klock
          +  18283    1500   14592   34375    8647 kmbox1
          +  15539    1496   12064   29099    71ab kmutex0
          +  16524    1504   15664   33692    839c kmutex1
          +  18272    1712   20348   40332    9d8c kmutex3
          +  18682    1608   20352   40642    9ec2 kmutex4
          +  15619    1496   14412   31527    7b27 ksched1
          +  15567    1496   12060   29123    71c3 ksem0
          +  17063    1500   14436   32999    80e7 ksem1
          +  15504    1496   13228   30228    7614 kthread0
          +  16167    1496   14412   32075    7d4b kthread1
          +  18281    1512   14580   34373    8645 mbox1
          +  20611    1508   14940   37059    90c3 mqueue1
          +  15672    1504   12064   29240    7238 mutex0
          +  16678    1516   15664   33858    8442 mutex1
          +  17694    1508   16868   36070    8ce6 mutex2
          +  18203    1720   20344   40267    9d4b mutex3
          +  16352    1508   14428   32288    7e20 release
          +  15890    1500   14412   31802    7c3a sched1
          +  44196    1612  286332  332140   5116c stress_threads
          +  17891    1524   16864   36279    8db7 sync2
          +  16943    1512   15644   34099    8533 sync3
          +  15467    1496   13064   30027    754b thread0
          +  16134    1496   14420   32050    7d32 thread1
          +  17560    1512   15636   34708    8794 thread2
          +  16279    1500   24028   41807    a34f thread_gdb
          +  17051    1504   20376   38931    9813 timeslice
          +  17146    1504   21564   40214    9d16 timeslice2
          +  37313    1512  422380  461205   70995 tm_basic
          +
          +

          Code size ARM (non-thumb)

          +Thumb does not compile out of the box w/AT91 EB40a for which this test was made.

          +

          +$ arm-elf-size *
          +   text    data     bss     dec     hex filename
          +  25204     692   16976   42872    a778 bin_sem0
          +  26644     700   22096   49440    c120 bin_sem1
          +  26996     712   55584   83292   1455c bin_sem2
          +  27008     700   22100   49808    c290 bin_sem3
          +  28992     688   16944   46624    b620 clock0
          +  25456     692   19532   45680    b270 clock1
          +  34572    1160   19520   55252    d7d4 clockcnv
          +  26224     688   19508   46420    b554 clocktruth
          +  25204     692   16976   42872    a778 cnt_sem0
          +  26888     700   22108   49696    c220 cnt_sem1
          +  44180     752   27416   72348   11a9c dhrystone
          +  26088     688   19520   46296    b4d8 except1
          +  25236     692   16968   42896    a790 flag0
          +  29532     700   24668   54900    d674 flag1
          +  29508     704  109652  139864   22258 fptest
          +  25932     684   17016   43632    aa70 intr0
          +  25824     684   17112   43620    aa64 kalarm0
          +  24728     684   16956   42368    a580 kcache1
          +  25168     684   19512   45364    b134 kcache2
          +  28112     688   17168   45968    b390 kclock0
          +  25976     688   19524   46188    b46c kclock1
          +  26372     684   19512   46568    b5e8 kexcept1
          +  25140     684   16968   42792    a728 kflag0
          +  29824     688   24660   55172    d784 kflag1
          +  26896     704   24656   52256    cc20 kill
          +  26088     684   17028   43800    ab18 kintr0
          +  30812     692   22176   53680    d1b0 klock
          +  28504     688   22260   51452    c8fc kmbox1
          +  24984     684   16984   42652    a69c kmutex0
          +  26504     692   24704   51900    cabc kmutex1
          +  28792     900   34892   64584    fc48 kmutex3
          +  29264     796   34896   64956    fdbc kmutex4
          +  25240     684   22084   48008    bb88 ksched1
          +  25044     684   16968   42696    a6c8 ksem0
          +  26988     688   22100   49776    c270 ksem1
          +  25028     684   19512   45224    b0a8 kthread0
          +  25996     684   22080   48760    be78 kthread1
          +  28552     700   22252   51504    c930 mbox1
          +  31324     696   22612   54632    d568 mqueue1
          +  25108     692   16980   42780    a71c mutex0
          +  26464     704   24700   51868    ca9c mutex1
          +  27624     696   27280   55600    d930 mutex2
          +  28596     908   34884   64388    fb84 mutex3
          +  26156     696   22100   48952    bf38 release
          +  25460     688   22084   48232    bc68 sched1
          +  56356     828   45892  103076   192a4 stress_threads
          +  27900     712   27288   55900    da5c sync2
          +  26760     700   24692   52152    cbb8 sync3
          +  24924     684   19356   44964    afa4 thread0
          +  25868     684   22084   48636    bdfc thread1
          +  27452     700   24680   52832    ce60 thread2
          +  26136     688   42704   69528   10f98 thread_gdb
          +  27212     692   34916   62820    f564 timeslice
          +  52728     700  123332  176760   2b278 tm_basic
          +
          + +
          +

          Phi memory map

          +TODO This probably belongs in the refdesign section. For now leaving it here because zealot refers to it. Not sure what else uses it. +

          +The ZPU architecture does not define a memory map as such, but the GCC + libgloss + ecos hal library uses the +memory map below. "Phi" is just a three letter word for the particular memory layout below that came about +while developing the ZPU. +

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +

          Address

          +
          +

          Type

          +
          +

          Name

          +
          +

          Description

          +
          +

          0x080A0000

          +
          +

          Write

          +
          +

          ZPU + enable

          +
          +

          Bit + [31:1] Not used

          +

          Bit + [0] Enable ZPU operations

          +

          0 ZPU + is held in Idle mode

          +

          1 ZPU + running

          +
          +

          0x080A000C

          +
          +

          Read/

          +

          Write

          +
          +

          ZPU + Debug channel / UART to ARM7 TX

          +

          NOTE! + ZPU side

          +
          +

          Bit + [31:9] Not used

          +

          Bit + [8] TX buffer ready (valid on ready)

          +

          0 TX + buffer not ready (full)

          +

          1 TX + buffer ready

          +

          Bit + [7:0] TX byte (valid on write)

          +
          +

          0x080A0010

          +
          +

          Read

          +
          +

          ZPU + Debug channel / UART to ARM7 RX

          +

          NOTE! + ZPU side

          +
          +

          Bit + [31:9] Not used

          +

          Bit + [8] RX buffer data valid

          +

          0 RX + buffer not valid

          +

          1 RX + buffer valid

          +

          Bit + [7:0] RX byte (when valid)

          +
          +

          0x080A0014

          +
          +

          Read/

          +

          Write

          +
          +

          Counter(1)

          +
          +

          Bit + [0] Reset counter (valid for write)

          +

          0 N/A

          +

          1 Reset + counter

          +

          Bit + [1] Sample counter (valid for write)

          +

          0 N/A

          +

          1 Sample + counter

          +

          Bit + [31:0] Counter bit 31:0

          +
          +

          0x080A0018

          +
          +

          Read

          +
          +

          Counter(2)

          +
          +

          Bit + [31:0] Counter bit 63:32

          +
          +

          0x080A0020

          +
          +

          Read + / Write

          +
          +

          Global_Interrupt_mask

          +
          +

          Bit + [31:1] Not used

          +

          Bit + [0] Global intr. Mask

          +

          0 Interrupts + enabled

          +

          1 Interrupts + disabled

          +
          +

          0x080A0024

          +
          +

          Write

          +
          +

          UART_INTERRUPT_ENABLE

          +
          +

          Bit + [31:1] Not used

          +

          Bit + [0] Debug channel / UART RX interrupt enable

          +

          0 Interrupt + disable

          +

          1 Interrupt + enable

          +
          +

          0x080A0028

          +
          +

          Read

          +

          Write

          +
          +

          UART_interrupt

          +
          +

          Bit + [31:1] Not used

          +

          Bit + [0] Debug channel / UART RX interrupt pending (Read)

          +

          0 No + interrupt pending

          +

          1 Interrupt + pending

          +

          Bit + [0] Clear UART interrupt (Write)

          +

          0 N/A

          +

          1 Interrupt + cleared

          +
          +

          0x080A002C

          +
          +

          Write

          +
          +

          Timer_Interrupt_enable

          +
          +

          Bit + [31:1] Not used

          +

          Bit + [0] Timer interrupt enable

          +

          0 Interrupt + disable

          +

          1 Interrupt + enable

          +
          +

          0x080A0030

          +
          +

          Read + /

          +

          Write

          +
          +

          Timer_interrupt

          +
          +

          Bit + [31:2] Not used

          +

          Bit + [0] Timer interrupt pending (Read)

          +

          0 No + interrupt pending

          +

          1 Interrupt + pending

          +

          Bit + [1] Reset Timer counter (Write)

          +

          0 N/A

          +

          1 Timer + counter reset

          +

          Bit + [0] Clear Timer interrupt (Write)

          +

          0 N/A

          +

          1 Interrupt + cleared

          +
          +

          0x080A0034

          +
          +

          Write

          +
          +

          Timer_Period

          +
          +

          Bit + [31:0] Interrupt period (write)

          +

          Number + of clock cycles

          +

          between + timer interrupts

          +

          NOTE! + The timer will start at Timer_Periode value and count down + to zero, and generate an interrupt

          +
          +

          .0x080A0038

          +
          +

          Read

          +
          +

          Timer_Counter

          +
          +

          Bit + [31:0] Timer counter (read)

          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          +


          +

          +
          + +


          + +
          +

          TODO

          + +
          +

          TODO list

          +
          + + +

          Repository Re-org

          +I am proposing the following structure for the repository. It follows somewhat the way I've organized this document with seperation of core, common, and three SOC ref designs. New users go straight to the SOC that best matches their needs. +
          +zpu/bin         # scripts and toolchain?  Want toolchain installed with project.  Tidier when working in multi user / multi project environment
          +zpu/doc         # 
          +zpu/core/rtl    # RTL for the various core implementations.
          +zpu/core/sw     # crt0.s ?
          +zpu/common/rtl  # Re-use RTL such as RAM and UART
          +zpu/common/sim  # Re-use RTL and tools for regresion testing
          +zpu/common/sw   # ?
          +zpu/soc/minimal # Three levels of ref designs described above
          +       /basic 
          +       /board
          +zpu/soc/*/rtl   # top level, arbiter, etc
          +zpu/soc/*/sw    # helloworld, dmips, etc. makefile/ROMS
          +zpu/soc/*/sim   # regression test area. makefile/scripts
          +zpu/soc/*/fpga  # syn and par area. makefile/scripts
          +zpu/tools       # zip/tarball of tool chains, simulator
          +
          +Not sure where ecos fits. + +
          +

          Next generation ZPU

          +Based on feedback here is a list of a tenuous "consensus" for the next generation +of the ZPU with some tentative ideas on implementation. +

          Goals

          +
            +
          1. Reduce minimum code size footprint, i.e. BRAM code overhead. Non-trivial +usable applications in 4kBytes of BRAM (single BRAM block). +
          2. Reduce minimum FPGA logic footprint by 20% or more. Goal <300 LUT for +32 bit ZPU +
          3. Weed out unnecessary ZPU variations +
          4. Will someone be willing to contribute a heavily pipelined ZPU? +For this to make sense, the performance must hit 20 DMIPS w/DRAM & cache. +This ZPU could run a TCP/IP stack with relevant performance to compete +with stripped down ARM7 type systems. +
          +

          Best current ideas on how to reach these goals

          +
            +
          1. Introduce 16 entry 32 bit LIFO for instructions that change sp today. LOADSP/STORESP/ADDSP +refer to the normal stack but add/get values from the LIFO in addition.

            + +loadsp n ; load value from memory at address "sp + n" and put it into the LIFO.
            +im m ; put value into LIFO register
            +add ; get two values from LIFO register, put back result.
            +
            +

            +NB! none of the instructions above change sp!!! +

            +If the LIFO is full, putting a value into the LIFO has no defined behaviour. Getting a value +from an empty LIFO has no defined behaviour. +

            +GCC will use 8 slots, instruction emulation and interrupts owns the remaining 8 slots. + +

          2. Add single entry for unknown instructions. PC and unsupported instruction is +pushed onto stack before jumping to unknown instruction vector. This makes it possible +to write denser microcode for missing instructions. For emulated opcodes that are +not in use, the microcode can more easily be disabled. Determining +that e.g. MULT is not used, can be a bit tricky, but disabling it is easy. +

            +The unsupported vector entry address is 0x10. +

          3. GCC needs 4 registers. These are today mapped to memory. What addresses to use? +Today memory address 0x00-0x0f inclusive are used for this purpose. Introduce emulated +instruction to load/store these registers? That would allow using either hardware or +memory registers. +
          4. Single entry for *all* unknown instructions does not limit emulation to the +EMULATE instructions today, but instructions such as OR, LOADSP, STORESP, ADDSP, +etc. can also be emulated. This opens up for further reduction in logic usage. +
          5. The single entry for all unknown instructions will make it easier to +write a compact custom crt0.s to fit an instruction subset. +
          6. The interrupt is basically an unknown instruction that is injected into +the execution stream. +
          7. Add floating point add and mult. FADD & FMULT. Option to generate the instructions +from the compiler. +
          8. Strip away unused instructions from GCC and add options to GCC for not +emitting more advanced instructions. This will e.g. convert MULT/DIV into +function calls to libgcc and thus make it easier to determine that +microcode is not needed. + + +

            Register stack

            +In order to reduce the size and complexity of the small ZPU, a register stack +has been put forward. It remains an open question as to whether this can +indeed reduce size and improve performance of the ZPU. +

            +Terminology: "stack" is the normal stack in memory pointed to +by the sp register. "register stack" is a different stack that is +not connected to memory directly or associated with the "stack". +

            +The idea is to push and pop the register stack such that bandwidth +is increased and complexity of memory access logic is reduced. +

            +Another clever bit is to mask interrupts while this stack is +not empty such that this stack never has to be +saved. It's depth would be fixed to something natural +for an FPGA, say 16 deep(doesn't that translate to a single +LUT for a bit?). + +

            Example of internal stack

            +im 1 ; push onto register stack
            +loadsp N ; load from memory pointed to by sp+N, push onto register stack
            +add ; pop values from register stack and add, push onto register stack
            + +

            Quick summary of instruction operation with register stack

            +This is not a "formal" definition of the instruction set, but should +give a pretty good idea of what the modified instruction looks like. +

            +Read up on the current definition of instructions and consider the +list below a guide to what changes have been made to fit a register +stack. The list is not complete, but covers the important categories +of instructions. If it is clear how the ADD instruction changed, +then it should be obvious how the AND instruction must be similarly +modified. +

            +Note also that there are lots of tiny problems that have to be ironed +out before the instruction set and emulation can work. Below is just +a first stab, which hopefully is good enough to evaluate the approach. + + + + + + + + + + + + + + +
            IM push onto/modify top of register stack
            STORESP pop register stack store to memory SP+N
            LOADSP load memory SP+N push onto register stack
            EMULATE push PC+1 onto register stack and jump to EMULATE vector
            PUSHPC push pc onto register stack
            POPPC pop pc from register stack
            LOAD pop address from register stack, load from memory address, push onto register stack
            STORE pop register stack 2x store value to memory
            PUSHSP push sp onto register stack
            POPSP pop sp from register stack
            POPPC pop pc from register stack
            ADD pop 2x register stack, add, push to register stack
            NOT pop register stack, bit inverse value, push onto register stack
            +Emulate instructions and calling convention may have to change substantially. + + + + + -- cgit v1.1 From 047351652678c02fc3aa3a6202b0d0f1d996ed48 Mon Sep 17 00:00:00 2001 From: Oyvind Harboe Date: Mon, 12 Jan 2009 21:10:20 +0100 Subject: Test patches --- zpu/docs/zpu_arch.html | 186 +++++++++++++++++-------------------------------- 1 file changed, 63 insertions(+), 123 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index a0187e6..5a55378 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -66,7 +66,6 @@ Several of the links will only work if you have checked out the zpu/zpu tree fro

          9. TODO list
          10. Repository Re-org
          11. Next generation ZPU -
          12. Register stack ZPU @@ -74,8 +73,34 @@ Several of the links will only work if you have checked out the zpu/zpu tree fro

            Introduction

            -

            TODO a new welcome message indicating goals/direction of project.

            The worlds smallest 32 bit CPU with GCC toolchain. +

            The ZPU is a small CPU in two ways: it takes up very little resources and +the architecture itself is small. The latter can be important when learning +about CPU architectures and implementing variations of the ZPU where +aspects of CPU design is examined. In academia students can learn VHDL, +CPU architecture in general and complete exercises in the course of a year.

            +

            +The current ZPU instruction set and architecture has not changed for +the last couple of years and can be considered quite stable. There is +a lot of discussion about various modifications to the ZPU architecture +in the zylin-zpu mailing list, but currently no actual modifications are +planned as the improvements that have been identified are relatively +slight(<30% performance/size improvement). +

            +

            +There are a handful of implementations of the ZPU. Most of these usually +have some strong points and there is some movement in the direction of +consolidating improvements into a few officially recommended ZPU +implementations. +

            +

            +For those that are interested in the Zylin ZPU, I recommend joining +up on the zylin-zpu mailing list and participating in the discussion +there. The zylin-zpu is a friendly place where people of different +skills, hardware, software, tools meet to exchange ideas about the ZPU +and microprocessor architecture in general. +

            +

            Sincerely,

            Øyvind Harboe
            Zylin AS

            @@ -121,38 +146,29 @@ information about where the ZPU can be the most useful:

            Download source code

            -

            -

            To get the ZPU HDL source and tools, check it out from CVS:

            -

            cvs -d :pserver:anonymous@cvs.opencores.org:/cvsroot/anonymous co -zpu/zpu

            -There are more instructions -
            here -and -here -. - -

            As of 01 JAN 2009, if you check out all of zpu it is about 200MB, and includes more than you need. It is recommended that you only checkout zpu/zpu. - +The ZPU HDL source code is available as a GIT repository from rep.xxx.cz. +You can download the latest sourcecode as a snapshot withing installing GIT. +

            +Previously the ZPU repository was hosted as a CVS repository at www.opencores.org, +but that ZPU CVS repository is there only for historical reference at this point. +Once www.opencores.org grows a GIT hosting service, the plan is to replicate +the GIT repository there. -

            Creating a patch

            -

            Please submit changes to the zylin-zpu mailing list as a patch. -

            -
              -
            1. Merge your changes with CVS HEAD. -
            2. Update the FreeBSD or GPL copyright with your name in the case -of non-trivial changes. If in doubt, add the copyright. -
            3. Add an entry to zpu/ChangeLog with date, your name, email, the -files you changed and a comment. -
            4. cd zpu
              cvs diff -upN . > mypatch.txt
              -
            5. Email it to zylin-zpu mailing list. Attach it -as an uncompressed .txt file -
            - +

            GIT

            +For more advanced use of GIT, you will need to hit the books and read up +on the GIT documentation. +

            +That said, you can ask "silly" newbie questions about GIT on the zylin-zpu mailing +list and you should receive some friendly prodding in the right direction +w.r.t. finding reading material.

            Getting help - mailing list

            The place to get help is the zylin-zpu mailing list

            +The ZPU is an open source project and if you demonstrate that you have +made an effort to read the documentation and googled, then you will +normally get some help from this list if you ask clear questions.


            @@ -2274,110 +2290,34 @@ of the ZPU with some tentative ideas on implementation. usable applications in 4kBytes of BRAM (single BRAM block).
          13. Reduce minimum FPGA logic footprint by 20% or more. Goal <300 LUT for 32 bit ZPU -
          14. Weed out unnecessary ZPU variations +
          15. Weed out unnecessary ZPU variations and merge in useful +features to a few recommeneded ZPU implementations.
          16. Will someone be willing to contribute a heavily pipelined ZPU? -For this to make sense, the performance must hit 20 DMIPS w/DRAM & cache. +Performance goal of 10 DMIPS w/DRAM & cache. This ZPU could run a TCP/IP stack with relevant performance to compete with stripped down ARM7 type systems.
          -

          Best current ideas on how to reach these goals

          +

          GCC changes

          +The GCC changes planned are 100% backwards compatible with default +options. However, a raft of options will be added to disable +functionality so as to allow study and experimentation with the +ZPU architecture.
            -
          1. Introduce 16 entry 32 bit LIFO for instructions that change sp today. LOADSP/STORESP/ADDSP -refer to the normal stack but add/get values from the LIFO in addition.

            - -loadsp n ; load value from memory at address "sp + n" and put it into the LIFO.
            -im m ; put value into LIFO register
            -add ; get two values from LIFO register, put back result.
            -
            -

            -NB! none of the instructions above change sp!!! -

            -If the LIFO is full, putting a value into the LIFO has no defined behaviour. Getting a value -from an empty LIFO has no defined behaviour. -

            -GCC will use 8 slots, instruction emulation and interrupts owns the remaining 8 slots. - -

          2. Add single entry for unknown instructions. PC and unsupported instruction is -pushed onto stack before jumping to unknown instruction vector. This makes it possible -to write denser microcode for missing instructions. For emulated opcodes that are -not in use, the microcode can more easily be disabled. Determining -that e.g. MULT is not used, can be a bit tricky, but disabling it is easy. -

            -The unsupported vector entry address is 0x10. -

          3. GCC needs 4 registers. These are today mapped to memory. What addresses to use? -Today memory address 0x00-0x0f inclusive are used for this purpose. Introduce emulated -instruction to load/store these registers? That would allow using either hardware or -memory registers. -
          4. Single entry for *all* unknown instructions does not limit emulation to the -EMULATE instructions today, but instructions such as OR, LOADSP, STORESP, ADDSP, -etc. can also be emulated. This opens up for further reduction in logic usage. -
          5. The single entry for all unknown instructions will make it easier to -write a compact custom crt0.s to fit an instruction subset. -
          6. The interrupt is basically an unknown instruction that is injected into -the execution stream. -
          7. Add floating point add and mult. FADD & FMULT. Option to generate the instructions -from the compiler. +
          8. Add options that allow defining single entry for all unknown instructions. Precisely +how unknown instructions are handled will be defined by the HDL implementation. +Currently the GCC backend places relatively strict limitations on how unknown/emulated +instructions are handled. This will allow HDL implementations to have +sparser instruction set support. Also this can allow sparse implementations +of emualted instructions. This is especially important to reduce minimal +BRAM requirements for small applications. +
          9. GCC needs 4 "hard" registers. These are today mapped to memory. GCC +will allow specifying what address to use or alternatively not to use +memory mapped hard registers at all.
          10. Strip away unused instructions from GCC and add options to GCC for not emitting more advanced instructions. This will e.g. convert MULT/DIV into function calls to libgcc and thus make it easier to determine that microcode is not needed. - - -

            Register stack

            -In order to reduce the size and complexity of the small ZPU, a register stack -has been put forward. It remains an open question as to whether this can -indeed reduce size and improve performance of the ZPU. -

            -Terminology: "stack" is the normal stack in memory pointed to -by the sp register. "register stack" is a different stack that is -not connected to memory directly or associated with the "stack". -

            -The idea is to push and pop the register stack such that bandwidth -is increased and complexity of memory access logic is reduced. -

            -Another clever bit is to mask interrupts while this stack is -not empty such that this stack never has to be -saved. It's depth would be fixed to something natural -for an FPGA, say 16 deep(doesn't that translate to a single -LUT for a bit?). - -

            Example of internal stack

            -im 1 ; push onto register stack
            -loadsp N ; load from memory pointed to by sp+N, push onto register stack
            -add ; pop values from register stack and add, push onto register stack
            - -

            Quick summary of instruction operation with register stack

            -This is not a "formal" definition of the instruction set, but should -give a pretty good idea of what the modified instruction looks like. -

            -Read up on the current definition of instructions and consider the -list below a guide to what changes have been made to fit a register -stack. The list is not complete, but covers the important categories -of instructions. If it is clear how the ADD instruction changed, -then it should be obvious how the AND instruction must be similarly -modified. -

            -Note also that there are lots of tiny problems that have to be ironed -out before the instruction set and emulation can work. Below is just -a first stab, which hopefully is good enough to evaluate the approach. - - - - - - - - - - - - - - -
            IM push onto/modify top of register stack
            STORESP pop register stack store to memory SP+N
            LOADSP load memory SP+N push onto register stack
            EMULATE push PC+1 onto register stack and jump to EMULATE vector
            PUSHPC push pc onto register stack
            POPPC pop pc from register stack
            LOAD pop address from register stack, load from memory address, push onto register stack
            STORE pop register stack 2x store value to memory
            PUSHSP push sp onto register stack
            POPSP pop sp from register stack
            POPPC pop pc from register stack
            ADD pop 2x register stack, add, push to register stack
            NOT pop register stack, bit inverse value, push onto register stack
            -Emulate instructions and calling convention may have to change substantially. - - +

          -- cgit v1.1 From 5c6feff72d5324c88e0e8d8980a7d7cfab7e1509 Mon Sep 17 00:00:00 2001 From: Oyvind Harboe Date: Tue, 27 Jan 2009 08:33:56 +0100 Subject: First cut of ZPU floating point support design --- zpu/docs/zpu_arch.html | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 5a55378..6266a03 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -66,6 +66,7 @@ Several of the links will only work if you have checked out the zpu/zpu tree fro
        16. TODO list
        17. Repository Re-org
        18. Next generation ZPU +
        19. Floating point support @@ -2319,5 +2320,55 @@ function calls to libgcc and thus make it easier to determine that microcode is not needed.
        + +

        Floating point support

        +The ZPU does not currently have floating point support. Feedback +from users indicates that single precision floating point support for +addition, multiplication and float-to-integer convesion would +be useful for small ZPU programs that sit in a tight control +loop. Essentially the ZPU is then measuring something, doing a +few calculations and then modifying the control signal. +

        +Such control loops can be written in fixed point math, but that +adds to the engineering effort and reduces clarity of the software +implementation and the performance will probably be worse than +for a hardware floating point version. +

        Pipelined floating point module

        +Design needs to be nailed down. +Goals: +
          +
        • 32 bit single precision floating point +
        • FADD => add two floats +
        • FMULT => multiply two floats +
        • FINT => convert float to int +
        +The problem is divided into two: + +
          +
        1. One top level VHDL module for each of the operations above. +
        2. Integration into ZPU's are a separate problem that will not be +addressed in this project. +
        3. add a memory mapped coprocessor interface to the above. This +yields an example of a coprocessor which can be used for any +custom calculations and allows interest to be gauged. +
        + +Throughput: + +
          +
        1. pipelined design where throughput is one operation per cycle +with a fixed number of cycles delay. +
        2. there is no flow control or enable signal. +
        + + + +GCC support is not hard, but modifying GCC should considered after +interest in this feature beyond a coprocessor has been gauged. + +

        VHDL module interface

        + +Patches anyone??? + -- cgit v1.1 From 24200bd858df8d55c8303a59b53e915ba85412b2 Mon Sep 17 00:00:00 2001 From: Oyvind Harboe Date: Tue, 27 Jan 2009 08:41:41 +0100 Subject: git servers documented --- zpu/docs/zpu_arch.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 6266a03..574000d 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -147,13 +147,16 @@ information about where the ZPU can be the most useful:

        Download source code

        -The ZPU HDL source code is available as a GIT repository from rep.xxx.cz. -You can download the latest sourcecode as a snapshot withing installing GIT. +The ZPU HDL source code is available as a GIT repository from
        http://repo.or.cz/w/zpu.git. +You can download the latest sourcecode as a snapshot without installing GIT.

        Previously the ZPU repository was hosted as a CVS repository at www.opencores.org, but that ZPU CVS repository is there only for historical reference at this point. Once www.opencores.org grows a GIT hosting service, the plan is to replicate the GIT repository there. + +

        +The GCC ZPU toolchain is available from "git://www.ecosforge.net:8100/zpu/toolchain.git". The ZPU GCC toolchain is BIG(over 100mBytes), otherwise it would have been hosted at repo.or.cz too.

        GIT

        For more advanced use of GIT, you will need to hit the books and read up -- cgit v1.1 From f4d6ae600be0975e11c64c238113f2fd43d35cbf Mon Sep 17 00:00:00 2001 From: "U-TEMPEST\\oyvind" Date: Mon, 15 Jun 2009 17:54:00 +0200 Subject: Remove reference to zeta, only phi is used now --- zpu/docs/zpu_arch.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 574000d..8aaa132 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1510,7 +1510,7 @@ The ZPU toolchain comes with newlib & libstdc++ support which means that many C/

         $ cd zpu/sw/helloworld
        -$ zpu-elf-gcc -Os -zeta hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
        +$ zpu-elf-gcc -Os -phi hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
         or ? TODO which one
         $ zpu-elf-gcc -phi hello.c -o hello.elf 
         $ zpu-elf-size hello.elf
        @@ -1725,7 +1725,7 @@ export ECOS_REPOSITORY=`pwd`/ecos/packages:`pwd`/repository

        Compiling eCos tests

        -ecosconfig new zeta default
        +ecosconfig new phi default
        ecosconfig tree
        make
        cd kernel/current
        -- cgit v1.1 From 879f385d7ae2bcef98f1970aba872235e940776b Mon Sep 17 00:00:00 2001 From: Antonio Anton Date: Mon, 14 Sep 2009 08:34:41 +0200 Subject: FreeRTOS port --- zpu/sw/freertos/port/port.c | 271 ++++++++++++++++++++++++++++++++ zpu/sw/freertos/port/portasm.s | 142 +++++++++++++++++ zpu/sw/freertos/port/portmacro.h | 125 +++++++++++++++ zpu/sw/freertos/readme.txt | 40 +++++ zpu/sw/freertos/sample/FreeRTOSConfig.h | 96 +++++++++++ zpu/sw/freertos/sample/Makefile | 50 ++++++ zpu/sw/freertos/sample/test1.c | 67 ++++++++ 7 files changed, 791 insertions(+) create mode 100644 zpu/sw/freertos/port/port.c create mode 100644 zpu/sw/freertos/port/portasm.s create mode 100644 zpu/sw/freertos/port/portmacro.h create mode 100644 zpu/sw/freertos/readme.txt create mode 100644 zpu/sw/freertos/sample/FreeRTOSConfig.h create mode 100644 zpu/sw/freertos/sample/Makefile create mode 100644 zpu/sw/freertos/sample/test1.c diff --git a/zpu/sw/freertos/port/port.c b/zpu/sw/freertos/port/port.c new file mode 100644 index 0000000..ff243ee --- /dev/null +++ b/zpu/sw/freertos/port/port.c @@ -0,0 +1,271 @@ +/* + FreeRTOS.org V5.3.0 - Copyright (C) 2003-2009 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License (version 2) as published + by the Free Software Foundation and modified by the FreeRTOS exception. + **NOTE** The exception to the GPL is included to allow you to distribute a + combined work that includes FreeRTOS.org without being obliged to provide + the source code for any proprietary components. Alternative commercial + license and support terms are also available upon request. See the + licensing section of http://www.FreeRTOS.org for full details. + + FreeRTOS.org is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with FreeRTOS.org; if not, write to the Free Software Foundation, Inc., 59 + Temple Place, Suite 330, Boston, MA 02111-1307 USA. + + + *************************************************************************** + * * + * Get the FreeRTOS eBook! See http://www.FreeRTOS.org/Documentation * + * * + * This is a concise, step by step, 'hands on' guide that describes both * + * general multitasking concepts and FreeRTOS specifics. It presents and * + * explains numerous examples that are written using the FreeRTOS API. * + * Full source code for all the examples is provided in an accompanying * + * .zip file. * + * * + *************************************************************************** + + 1 tab == 4 spaces! + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +/*----------------------------------------------------------- + * Implementation of functions defined in portable.h for the MicroBlaze port. + *----------------------------------------------------------*/ + + +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" + +/* Standard includes. */ +#include + +/* hardware/software platform specific defines */ +#define DISABLE_C_PROTOTYPES +#include + +/* Tasks are started with interrupts enabled. */ +#define portINITIAL_INTERRUPT_ENABLE ( ( portSTACK_TYPE ) INTERRUPT_GLOBAL_ENABLE ) + +/* Tasks are started with a critical section nesting of 0 - however prior +to the scheduler being commenced we don't want the critical nesting level +to reach zero, so it is initialised to a high value. */ +#define portINITIAL_NESTING_VALUE ( 0xff ) + +/* The stack used by the ISR is filled with a known value to assist in +debugging. */ +#define portISR_STACK_FILL_VALUE 0x55555555 + +/* Counts the nesting depth of calls to portENTER_CRITICAL(). Each task +maintains it's own count, so this variable is saved as part of the task +context. */ +volatile unsigned portBASE_TYPE uxCriticalNesting = portINITIAL_NESTING_VALUE; + +/* To limit the amount of stack required by each task, this port uses a +separate stack for interrupts. */ +unsigned portLONG *pulISRStack; + +/*-----------------------------------------------------------*/ + +/* + * Sets up the periodic ISR used for the RTOS tick. This uses timer 0, but + * could have alternatively used the watchdog timer or timer 1. + */ +static void prvSetupTimerInterrupt( void ); +/*-----------------------------------------------------------*/ + +/* + * Initialise the stack of a task to look exactly as if a call to + * portSAVE_CONTEXT had been made. + * + * See the header file portable.h. + */ +portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters ) +{ + /* Function call parameters. */ + pxTopOfStack--; + *pxTopOfStack = ( portSTACK_TYPE ) pvParameters; + + /* Place initial PC (task entry point) */ + pxTopOfStack--; + *pxTopOfStack = ( portSTACK_TYPE ) pxCode; /* PC */ + + /* Place initial value for INTERRUPT global ENABLE */ + pxTopOfStack--; + *pxTopOfStack = portINITIAL_INTERRUPT_ENABLE; /* interrupt state (global enable) */ + + /* Stack an initial value for the critical section nesting. This + is initialised to zero as tasks are started with interrupts enabled. */ + pxTopOfStack--; + *pxTopOfStack = ( portSTACK_TYPE ) 0x00; + + /* Place an initial value for all temporary registers mapped to mem[0..16] by gcc */ + pxTopOfStack--; + *pxTopOfStack = ( portSTACK_TYPE ) 0x11111111; /* mem[0] */ + pxTopOfStack--; + *pxTopOfStack = ( portSTACK_TYPE ) 0x22222222; /* mem[4] */ + pxTopOfStack--; + *pxTopOfStack = ( portSTACK_TYPE ) 0x33333333; /* mem[8] */ + pxTopOfStack--; + *pxTopOfStack = ( portSTACK_TYPE ) 0x44444444; /* mem[12] */ + + /* Return a pointer to the top of the stack we have generated so this can + be stored in the task control block for the task. */ + return pxTopOfStack; +} +/*-----------------------------------------------------------*/ + +portBASE_TYPE xPortStartScheduler( void ) +{ +extern void ( __FreeRTOS_interrupt_handler )( void ); +extern void ( vStartFirstTask )( void ); + + /* Setup the FreeRTOS interrupt handler */ + *(volatile unsigned *) INTERRUPT_VECTOR = (unsigned) __FreeRTOS_interrupt_handler; + + /* Setup the hardware to generate the tick. Interrupts are disabled when + this function is called. */ + prvSetupTimerInterrupt(); + + /* Allocate the stack to be used by the interrupt handler. */ + pulISRStack = ( unsigned portLONG * ) pvPortMalloc( configMINIMAL_STACK_SIZE * sizeof( portSTACK_TYPE ) ); + + /* Restore the context of the first task that is going to run. */ + if( pulISRStack != NULL ) + { + /* Fill the ISR stack with a known value to facilitate debugging. */ + memset( pulISRStack, portISR_STACK_FILL_VALUE, configMINIMAL_STACK_SIZE * sizeof( portSTACK_TYPE ) ); + pulISRStack += ( configMINIMAL_STACK_SIZE - 1 ); + + /* Kick off the first task. */ + vStartFirstTask(); + } + + /* Should not get here as the tasks are now running! */ + return pdFALSE; +} +/*-----------------------------------------------------------*/ + +void vPortEndScheduler( void ) +{ + /* Not implemented. */ +} +/*-----------------------------------------------------------*/ + +/* + * Manual context switch called by portYIELD or taskYIELD. + */ +void vPortYield( void ) +{ +extern void VPortYieldASM( void ); + + /* Perform the context switch in a critical section to assure it is + not interrupted by the tick ISR. It is not a problem to do this as + each task maintains it's own interrupt status. */ + portENTER_CRITICAL(); + /* Jump directly to the yield function to ensure there is no + compiler generated prologue code. */ + asm volatile ( "im VPortYieldASM \n\t" \ + "call \n\t" ); + portEXIT_CRITICAL(); +} +/*-----------------------------------------------------------*/ + +/* + * Hardware initialisation to generate the RTOS tick. + */ +static void prvSetupTimerInterrupt( void ) +{ +const unsigned portLONG ulCounterValue = configCPU_CLOCK_HZ / configTICK_RATE_HZ; + + /* Initialize and start timer1 counter */ + *(volatile unsigned *) TIMER1_PORT = ulCounterValue; + *(volatile unsigned *) TIMERS_CONTROL = TIMER1_ENABLE; + + /* Enable timer1 interrupt while maintaining other bit states + but disable global enable */ + *(volatile unsigned *) INTERRUPT_ENABLE &= ~INTERRUPT_GLOBAL_ENABLE; + *(volatile unsigned *) INTERRUPT_ENABLE |= INTERRUPT_TIMER1; +} +/*-----------------------------------------------------------*/ + +/* + * The interrupt handler placed in the interrupt vector when the scheduler is + * started. The task context has already been saved when this is called. + * This handler determines the interrupt source and calls the relevant + * peripheral handler. + */ +void vTaskISRHandler( void ) +{ +void vTickISR(void); + + unsigned int_status = *(volatile unsigned *) INTERRUPT_STATUS; + if(int_status & INTERRUPT_TIMER1) vTickISR(); +} +/*-----------------------------------------------------------*/ + +/* + * Handler for the timer interrupt. + */ +void vTickISR( void ) +{ + /* Increment the RTOS tick - this might cause a task to unblock. */ + vTaskIncrementTick(); + + /* Clear the timer interrupt */ + /* ... in this platform, timer interrupt is cleared automatically */ + + /* If we are using the preemptive scheduler then we also need to determine + if this tick should cause a context switch. */ + #if configUSE_PREEMPTION == 1 + vTaskSwitchContext(); + #endif +} +/*-----------------------------------------------------------*/ + +void zpu_disable_interrupts(void) +{ + *(volatile unsigned *) INTERRUPT_ENABLE &= ~INTERRUPT_GLOBAL_ENABLE; +} + +void zpu_enable_interrupts(void) +{ + *(volatile unsigned *) INTERRUPT_ENABLE |= INTERRUPT_GLOBAL_ENABLE; +} + +/*-----------------------------------------------------------*/ + +void zpu_enter_critical(void) +{ + portDISABLE_INTERRUPTS(); + uxCriticalNesting++; +} + +void zpu_exit_critical(void) +{ + if( --uxCriticalNesting == 0 ) + { + portENABLE_INTERRUPTS(); + } +} diff --git a/zpu/sw/freertos/port/portasm.s b/zpu/sw/freertos/port/portasm.s new file mode 100644 index 0000000..29c41ab --- /dev/null +++ b/zpu/sw/freertos/port/portasm.s @@ -0,0 +1,142 @@ + .extern pxCurrentTCB + .extern vTaskISRHandler + .extern vTaskSwitchContext + .extern uxCriticalNesting + .extern pulISRStack + + .global __FreeRTOS_interrupt_handler + .global VPortYieldASM + .global vStartFirstTask + +/* interrupt controller port */ + .equ INTERRUPT_ENABLE,0x8020 + +.macro portSAVE_CONTEXT + /* PC is at the top of stack */ + + /* store interrupt global enable bit */ + im INTERRUPT_ENABLE + load + im 1 + and + + /* Store nesting critical level */ + im uxCriticalNesting + load + + /* Store temporary registers */ + im 0 + load /* store mem[0] */ + im 4 + load /* store mem[4] */ + im 8 + load /* store mem[8] */ + im 12 + load /* store mem[12] */ + + /* Store top of stack at pxCurrentTCB */ + pushsp + im pxCurrentTCB + load + store +.endm + +.macro portRESTORE_CONTEXT + im pxCurrentTCB /* Load the top of stack value from the TCB. */ + load + load + popsp + + /* Restore the temporary registers. */ + im 12 + store /* restore mem[12] */ + im 8 + store /* restore mem[8] */ + im 4 + store /* restore mem[4] */ + im 0 + store /* restore mem[0] */ + + /* Load the critical nesting value. */ + im uxCriticalNesting + store + + /* Set interrupt global enable status */ + im INTERRUPT_ENABLE + load + im ~1 + and + or + im INTERRUPT_ENABLE + store + + /* restore PC and enable interrupts at ZPU level */ + .byte 0x03 /* popint */ +.endm + +.macro portRESTORE_CONTEXT_NOINTERRUPT + im pxCurrentTCB /* Load the top of stack value from the TCB. */ + load + load + popsp + + /* Restore the temporary registers. */ + im 12 + store /* restore mem[12] */ + im 8 + store /* restore mem[8] */ + im 4 + store /* restore mem[4] */ + im 0 + store /* restore mem[0] */ + + /* Load the critical nesting value. */ + im uxCriticalNesting + store + + /* Set interrupt global enable status */ + im INTERRUPT_ENABLE + load + im ~1 + and + or + im INTERRUPT_ENABLE + store + + /* restore PC */ + poppc +.endm + + .text + .align 2 + +__FreeRTOS_interrupt_handler: + portSAVE_CONTEXT + + /* Now switch to use the ISR stack. */ + im pulISRStack + load + popsp + + /* Call function */ + im vTaskISRHandler + call + + portRESTORE_CONTEXT + +VPortYieldASM: + portSAVE_CONTEXT + + /* Now switch to use the ISR stack. */ + im pulISRStack + load + popsp + + /* Call function to switch context */ + im vTaskSwitchContext + call + + portRESTORE_CONTEXT_NOINTERRUPT + +vStartFirstTask: + portRESTORE_CONTEXT_NOINTERRUPT diff --git a/zpu/sw/freertos/port/portmacro.h b/zpu/sw/freertos/port/portmacro.h new file mode 100644 index 0000000..2b4d35a --- /dev/null +++ b/zpu/sw/freertos/port/portmacro.h @@ -0,0 +1,125 @@ +/* + FreeRTOS.org V5.3.0 - Copyright (C) 2003-2009 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License (version 2) as published + by the Free Software Foundation and modified by the FreeRTOS exception. + **NOTE** The exception to the GPL is included to allow you to distribute a + combined work that includes FreeRTOS.org without being obliged to provide + the source code for any proprietary components. Alternative commercial + license and support terms are also available upon request. See the + licensing section of http://www.FreeRTOS.org for full details. + + FreeRTOS.org is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with FreeRTOS.org; if not, write to the Free Software Foundation, Inc., 59 + Temple Place, Suite 330, Boston, MA 02111-1307 USA. + + + *************************************************************************** + * * + * Get the FreeRTOS eBook! See http://www.FreeRTOS.org/Documentation * + * * + * This is a concise, step by step, 'hands on' guide that describes both * + * general multitasking concepts and FreeRTOS specifics. It presents and * + * explains numerous examples that are written using the FreeRTOS API. * + * Full source code for all the examples is provided in an accompanying * + * .zip file. * + * * + *************************************************************************** + + 1 tab == 4 spaces! + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +#ifndef PORTMACRO_H +#define PORTMACRO_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*----------------------------------------------------------- + * Port specific definitions. + * + * The settings in this file configure FreeRTOS correctly for the + * given hardware and compiler. + * + * These settings should not be altered. + *----------------------------------------------------------- + */ + +/* Type definitions. */ +#define portCHAR char +#define portFLOAT float +#define portDOUBLE double +#define portLONG long +#define portSHORT short +#define portSTACK_TYPE unsigned portLONG +#define portBASE_TYPE portLONG + +#if( configUSE_16_BIT_TICKS == 1 ) + typedef unsigned portSHORT portTickType; + #define portMAX_DELAY ( portTickType ) 0xffff +#else + typedef unsigned portLONG portTickType; + #define portMAX_DELAY ( portTickType ) 0xffffffff +#endif +/*-----------------------------------------------------------*/ + +/* Interrupt control macros. */ +void zpu_disable_interrupts(void); +void zpu_enable_interrupts(void); +#define portDISABLE_INTERRUPTS() zpu_disable_interrupts() +#define portENABLE_INTERRUPTS() zpu_enable_interrupts() +/*-----------------------------------------------------------*/ + +/* Critical section macros. */ +void zpu_enter_critical(void); +void zpu_exit_critical(void); +#define portENTER_CRITICAL() zpu_enter_critical() +#define portEXIT_CRITICAL() zpu_exit_critical() +/*-----------------------------------------------------------*/ + +/* Task utilities. */ +void vPortYield( void ); +#define portYIELD() vPortYield() + +void vTaskSwitchContext(); +#define portYIELD_FROM_ISR() vTaskSwitchContext() +/*-----------------------------------------------------------*/ + +/* Hardware specifics. */ +#define portBYTE_ALIGNMENT 4 +#define portSTACK_GROWTH ( -1 ) +#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) +#define portNOP() asm volatile ( "nop\n" ) +/*-----------------------------------------------------------*/ + +/* Task function macros as described on the FreeRTOS.org WEB site. */ +#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) +#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) + +#ifdef __cplusplus +} +#endif + +#endif /* PORTMACRO_H */ + diff --git a/zpu/sw/freertos/readme.txt b/zpu/sw/freertos/readme.txt new file mode 100644 index 0000000..a1f1c89 --- /dev/null +++ b/zpu/sw/freertos/readme.txt @@ -0,0 +1,40 @@ +The FreeRTOS port was contributed by +Antonio Anton . + +Some of the files state that someone else is copyright +holder, but I believe that to be copy and paste laziness +and that, in fact, Antonio did this port. + +The port needs work, but is committed to ZPU git repository +to get things started. + +Post questions to the zylin-zpu mailing list. + +Øyvind Harboe +14/9-2009 + +From Antonio: + +Ported version: 5.3.0 +Port goes to folder ${FREERTOS_ROOT}/Source/portable/GCC/ZPU + +portmacro.h : macro definitions for this port +portasm.s : contains code for context switch, interrupt handler and +other initializations +port.c : other initialization functions that not need to be +assembly code. + +(please note that #include in port.c is specific for my ZPU +port; it contains the definitions my peripherals) + +Each FreeRTOS application is compiled with the FreeRTOS port itself +(source code). + +2nd file contains a sample application which includes the Makefile in +order to compile & link against FreeRTOS port. It will link against some +specific library (-lio) and specific linker file (sram-zpu.ld) which are +not included. You must adapt these to your peripheral and memory +configuration. + +At the moment there is no documentation but the source code is quite +commented. diff --git a/zpu/sw/freertos/sample/FreeRTOSConfig.h b/zpu/sw/freertos/sample/FreeRTOSConfig.h new file mode 100644 index 0000000..d9470fd --- /dev/null +++ b/zpu/sw/freertos/sample/FreeRTOSConfig.h @@ -0,0 +1,96 @@ +/* + FreeRTOS.org V5.3.0 - Copyright (C) 2003-2009 Richard Barry. + + This file is part of the FreeRTOS.org distribution. + + FreeRTOS.org is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License (version 2) as published + by the Free Software Foundation and modified by the FreeRTOS exception. + **NOTE** The exception to the GPL is included to allow you to distribute a + combined work that includes FreeRTOS.org without being obliged to provide + the source code for any proprietary components. Alternative commercial + license and support terms are also available upon request. See the + licensing section of http://www.FreeRTOS.org for full details. + + FreeRTOS.org is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with FreeRTOS.org; if not, write to the Free Software Foundation, Inc., 59 + Temple Place, Suite 330, Boston, MA 02111-1307 USA. + + + *************************************************************************** + * * + * Get the FreeRTOS eBook! See http://www.FreeRTOS.org/Documentation * + * * + * This is a concise, step by step, 'hands on' guide that describes both * + * general multitasking concepts and FreeRTOS specifics. It presents and * + * explains numerous examples that are written using the FreeRTOS API. * + * Full source code for all the examples is provided in an accompanying * + * .zip file. * + * * + *************************************************************************** + + 1 tab == 4 spaces! + + Please ensure to read the configuration and relevant port sections of the + online documentation. + + http://www.FreeRTOS.org - Documentation, latest information, license and + contact details. + + http://www.SafeRTOS.com - A version that is certified for use in safety + critical systems. + + http://www.OpenRTOS.com - Commercial support, development, porting, + licensing and training services. +*/ + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +/*----------------------------------------------------------- + * Application specific definitions. + * + * These definitions should be adjusted for your particular hardware and + * application requirements. + * + * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE + * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. + * + * See http://www.freertos.org/a00110.html. + *----------------------------------------------------------*/ + +#define configUSE_PREEMPTION 1 +#define configUSE_IDLE_HOOK 0 +#define configUSE_TICK_HOOK 0 +#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 25000000 ) +#define configTICK_RATE_HZ ( ( portTickType ) 100 ) +#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned portLONG ) 256 ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 8 * 1024 ) ) +#define configMAX_TASK_NAME_LEN ( 5 ) +#define configUSE_TRACE_FACILITY 0 +#define configUSE_16_BIT_TICKS 0 +#define configIDLE_SHOULD_YIELD 1 + +/* Co-routine definitions. */ +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + +/* Set the following definitions to 1 to include the API function, or zero +to exclude the API function. */ + +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 0 +#define INCLUDE_vTaskCleanUpResources 0 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 + + +#endif /* FREERTOS_CONFIG_H */ diff --git a/zpu/sw/freertos/sample/Makefile b/zpu/sw/freertos/sample/Makefile new file mode 100644 index 0000000..d3a6f6f --- /dev/null +++ b/zpu/sw/freertos/sample/Makefile @@ -0,0 +1,50 @@ +PRJ = test1 +PATH_SW = /home/antonan/desarrollo/zpu/sw +INCLUDES = $(PATH_SW)/freertos/Source/portable/GCC/ZPU/portmacro.h \ + FreeRTOSConfig.h +SRCS_C = $(PATH_SW)/freertos/Source/portable/GCC/ZPU/port.c \ + $(PATH_SW)/freertos/Source/portable/MemMang/heap_1.c \ + $(PATH_SW)/freertos/Source/croutine.c \ + $(PATH_SW)/freertos/Source/list.c \ + $(PATH_SW)/freertos/Source/queue.c \ + $(PATH_SW)/freertos/Source/tasks.c \ + test1.c +SRCS_ASM = $(PATH_SW)/freertos/Source/portable/GCC/ZPU/portasm.s +PATH_INC = -I$(PATH_SW)/include \ + -I$(PATH_SW)/freertos/Source/include \ + -I$(PATH_SW)/freertos/Source/portable/GCC/ZPU \ + -I$(PATH_SW)/freertos/Demo/ZPU \ + -I. +OPTIONS = -g -Os -DGCC_ZPU +LINK = -T $(PATH_SW)/ldscripts/zpu-sram.ld +CRT = $(PATH_SW)/startup/crt-sram.o +LLIB = -L $(PATH_SW)/lib +LIBS = -lio -lgcc --start-group -lc -lbcc --end-group -lgcc -lio +LFLAGS = --relax --gc-sections + +OBJS_ASM = $(SRCS_ASM:.s=.o) +OBJS_C = $(SRCS_C:.c=.o) + +$(PRJ).srec: $(PRJ).out + zpu-elf-objcopy -O srec $(PRJ).out $(PRJ).srec + zpu-elf-objcopy -O binary $(PRJ).out $(PRJ).bin + bin2rom $(PRJ).bin $(PRJ).rom + +$(OBJS_ASM): $(SRCS_ASM) + zpu-elf-gcc $(OPTIONS) $(PATH_INC) -B. -c -Wa,-ahlms=$(@:.o=.lst) -o $@ $(@:.o=.s) + +$(OBJS_C): $(SRCS_C) $(INCLUDES) + zpu-elf-gcc $(OPTIONS) $(PATH_INC) -B. -c -Wa,-ahlms=$(@:.o=.lst) -o $@ $(@:.o=.c) + +$(PRJ).out: $(CRT) $(OBJS_C) $(OBJS_ASM) + zpu-elf-ld $(LLIB) $(LFLAGS) $(LINK) -Map=$(PRJ).map -o $(PRJ).out $(CRT) $(OBJS_C) $(OBJS_ASM) $(LIBS) + + +clean: + -rm *.o + -rm *.out + -rm *.bin + -rm *.map + -rm *.lst + -rm *.srec + -rm *.rom diff --git a/zpu/sw/freertos/sample/test1.c b/zpu/sw/freertos/sample/test1.c new file mode 100644 index 0000000..41b4296 --- /dev/null +++ b/zpu/sw/freertos/sample/test1.c @@ -0,0 +1,67 @@ +/* Scheduler includes. */ +#include "FreeRTOS.h" +#include "task.h" + +#include "devices.h" + +#define mainTINY_STACK 256 +void vTest(void *pvParameters); +void vTest2(void *pvParameters); + +/*-----------------------------------------------------------*/ + +/* + * Create all the demo tasks - then start the scheduler. + */ +int main (void) +{ + /* When re-starting a debug session (rather than cold booting) we want + to ensure the installed interrupt handlers do not execute until after the + scheduler has been started. */ + portDISABLE_INTERRUPTS(); + + #if configUSE_PREEMPTION == 1 + xTaskCreate( vTest, "TST1", mainTINY_STACK, ( void * ) 10, tskIDLE_PRIORITY, NULL ); + xTaskCreate( vTest2, "TST2", mainTINY_STACK, ( void * ) 10, tskIDLE_PRIORITY, NULL ); + #endif + + /* Finally start the scheduler. */ + vTaskStartScheduler(); + + /* Should not get here as the processor is now under control of the + scheduler! */ + + return 0; +} + +void vTest(void *pvParameters) +{ +const portTickType xDelay = 100 / portTICK_RATE_MS; + unsigned bit = 16; + unsigned dir = 0; + + for(;;) + { + CLEAR_BIT(SP3SK_GPIO, bit); + if(dir == 0) { if(++bit == 23) { dir=1; } } + else { if(--bit == 16) { dir=0;} } + SET_BIT(SP3SK_GPIO, bit); + vTaskDelay( xDelay ); + } +} + +void vTest2(void *pvParameters) +{ +const portTickType xDelay = 250 / portTICK_RATE_MS; + unsigned pos; + char marcas[] = "|/-\\"; + + for(;;) + { + uart1_printline("\r"); + uart1_printline("Running..."); + uart1_printchar(marcas[pos]); + if(++pos == 4) pos = 0; + vTaskDelay( xDelay ); + } +} -- cgit v1.1 From 685ce53dfba47bf06a25f2566a157ed5cda8ba1d Mon Sep 17 00:00:00 2001 From: Antonio Anton Date: Tue, 15 Sep 2009 10:58:55 +0200 Subject: Avalanche ZPU implementation --- zpu/hdl/avalanche/core/zpu_core.v | 749 +++++++++++++++++++++ zpu/hdl/avalanche/core/zpu_core_defines.v | 322 +++++++++ zpu/hdl/avalanche/core/zpu_core_rom.v | 1017 +++++++++++++++++++++++++++++ zpu/hdl/avalanche/readme.txt | 91 +++ 4 files changed, 2179 insertions(+) create mode 100644 zpu/hdl/avalanche/core/zpu_core.v create mode 100644 zpu/hdl/avalanche/core/zpu_core_defines.v create mode 100644 zpu/hdl/avalanche/core/zpu_core_rom.v create mode 100644 zpu/hdl/avalanche/readme.txt diff --git a/zpu/hdl/avalanche/core/zpu_core.v b/zpu/hdl/avalanche/core/zpu_core.v new file mode 100644 index 0000000..e704fbc --- /dev/null +++ b/zpu/hdl/avalanche/core/zpu_core.v @@ -0,0 +1,749 @@ +`timescale 1ns / 1ps +`include "zpu_core_defines.v" + +/* MODULE: zpu_core + DESCRIPTION: Contains ZPU cpu + AUTHOR: Antonio J. Anton (aj anro-ingenieros.com) + +REVISION HISTORY: +Revision 1.0, 14/09/2009 +Initial public release + +COPYRIGHT: +Copyright (c) 2009 Antonio J. Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.*/ + +// --------- MICROPROGRAMMED ZPU CORE --------------- +// all signals are polled on clk rising edge +// all signals positive + +module zpu_core ( +`ifdef ENABLE_CPU_INTERRUPTS + interrupt, // interrupt request +`endif + clk, // clock on rising edge + reset, // reset on rising edge + mem_read, // request memory read + mem_write, // request memory write + mem_done, // memory operation completed + mem_addr, // memory address + mem_data_read, // data readed + mem_data_write, // data written + byte_select // byte select on memory operation +); + +input clk; +input reset; +output mem_read; +output mem_write; +input mem_done; +input [31:0] mem_data_read; +output [31:0] mem_data_write; +output [31:0] mem_addr; +output [3:0] byte_select; +`ifdef ENABLE_CPU_INTERRUPTS +input interrupt; +`endif + +wire clk; +wire reset; +wire mem_read; +wire mem_write; +wire mem_done; +wire [31:0] mem_data_read; +wire [31:0] mem_data_write; +wire [31:0] mem_addr; +`ifdef ENABLE_CPU_INTERRUPTS +wire interrupt; +`endif + +`ifdef ENABLE_BYTE_SELECT +// ------ unaligned byte/halfword memory operations ----- +/// TODO: think rewriting into microcode or in a less resource wasting way + +reg [3:0] byte_select; +wire byte_op; +wire halfw_op; + +reg [31:0] mem_data_read_int; // aligned data from memory +reg [31:0] mem_data_write_out; // write data already aligned +wire [31:0] mem_data_write_int; // write data from cpu to be aligned + +// --- byte select logic --- +always @(mem_addr[1:0] or byte_op or halfw_op) +begin + casez( { mem_addr[1:0], byte_op, halfw_op } ) + 4'b00_1_? : byte_select <= 4'b0001; // byte select + 4'b01_1_? : byte_select <= 4'b0010; + 4'b10_1_? : byte_select <= 4'b0100; + 4'b11_1_? : byte_select <= 4'b1000; + 4'b0?_0_1 : byte_select <= 4'b0011; // half word select + 4'b1?_0_1 : byte_select <= 4'b1100; + default : byte_select <= 4'b1111; // word select + endcase +end + +// --- input data to cpu --- +always @(mem_data_read or mem_addr[1:0] or byte_op or halfw_op) +begin + casez( { mem_addr[1:0], byte_op, halfw_op } ) + 4'b00_1_? : mem_data_read_int <= { 24'b0, mem_data_read[7:0] }; // 8 bit read + 4'b01_1_? : mem_data_read_int <= { 24'b0, mem_data_read[15:8] }; + 4'b10_1_? : mem_data_read_int <= { 24'b0, mem_data_read[23:16] }; + 4'b11_1_? : mem_data_read_int <= { 24'b0, mem_data_read[31:24] }; + 4'b0?_0_1 : mem_data_read_int <= { 16'b0, mem_data_read[7:0], mem_data_read[15:8] }; // 16 bit read + 4'b1?_0_1 : mem_data_read_int <= { 16'b0, mem_data_read[23:16], mem_data_read[31:24] }; + default : mem_data_read_int <= { mem_data_read[7:0], mem_data_read[15:8], mem_data_read[23:16], mem_data_read[31:24] }; // 32 bit access (default) + endcase +end + +// --- output data from cpu --- +assign mem_data_write = mem_data_write_out; + +always @(mem_data_write_int or mem_addr[1:0] or byte_op or halfw_op) +begin + casez( {mem_addr[1:0], byte_op, halfw_op } ) + 4'b00_1_? : mem_data_write_out <= { 24'bX, mem_data_write_int[7:0] }; // 8 bit write + 4'b01_1_? : mem_data_write_out <= { 16'bX, mem_data_write_int[7:0], 8'bX }; + 4'b10_1_? : mem_data_write_out <= { 8'bX, mem_data_write_int[7:0], 16'bX }; + 4'b11_1_? : mem_data_write_out <= { mem_data_write_int[7:0], 24'bX }; + 4'b0?_0_1 : mem_data_write_out <= { 16'bX, mem_data_write_int[7:0], mem_data_write_int[15:8] }; // 16 bit write + 4'b1?_0_1 : mem_data_write_out <= { mem_data_write_int[7:0], mem_data_write_int[15:8], 16'bX }; + default : mem_data_write_out <= { mem_data_write_int[7:0], mem_data_write_int[15:8], mem_data_write_int[23:16], mem_data_write_int[31:24] }; + endcase +end +`else +// -------- only 32 bit memory access -------- +wire [3:0] byte_select = 4'b1111; // all memory operations are 32 bit wide +wire [31:0] mem_data_read_int; // no byte/halfword memory access by HW +wire [31:0] mem_data_write_int; // byte and halfword memory access must be emulated + +// ----- reorder bytes due to MSB-LSB configuration ----- +assign mem_data_read_int = { mem_data_read[7:0], mem_data_read[15:8], mem_data_read[23:16], mem_data_read[31:24] }; +assign mem_data_write = { mem_data_write_int[7:0], mem_data_write_int[15:8], mem_data_write_int[23:16], mem_data_write_int[31:24] }; +`endif + +// ------ datapath registers and connections ----------- +reg [31:0] pc; // program counter (byte align) +reg [31:0] sp; // stack counter (word align) +reg [31:0] a; // operand (address_out, data_out, alu_in) +reg [31:0] b; // operand (address_out) +reg idim; // im opcode being processed +reg [7:0] opcode; // opcode being processed +reg [31:2] pc_cached; // cached PC +reg [31:0] opcode_cache; // cached opcodes (current word) +`ifdef ENABLE_CPU_INTERRUPTS + reg int_requested; // interrupt has been requested + reg on_interrupt; // serving interrupt + wire exit_interrupt; // microcode says this is poppc_interrupt + wire enter_interrupt; // microcode says we are entering interrupt +`endif +wire [1:0] sel_opcode = pc[1:0]; // which opcode is selected +wire sel_read; // mux for data-in +wire [1:0] sel_alu; // mux for alu +wire [1:0] sel_addr; // mux for addr +wire w_pc; // write PC +`ifdef ENABLE_PC_INCREMENT + wire w_pc_increment; // write PC+1 +`endif +wire w_sp; // write SP +wire w_a; // write A (from ALU result) +wire w_a_mem; // write A (from MEM read) +wire w_b; // write B +wire w_op; // write OPCODE (opcode cache) +wire set_idim; // set IDIM +wire clear_idim; // clear IDIM +wire is_op_cached = (pc[31:2] == pc_cached) ? 1'b1 : 1'b0; // is opcode available? +wire a_is_zero; // A == 0 +wire a_is_neg; // A[31] == 1 +wire busy; // busy signal to microcode sequencer (stalls cpu) + +reg [`MC_MEM_BITS-1:0] mc_pc; // microcode PC +initial mc_pc <= `MC_ADDR_RESET-1; +wire [`MC_BITS-1:0] mc_op; // current microcode operation + +// memory addr / write ports +assign mem_addr = (sel_addr == `SEL_ADDR_SP) ? sp : + (sel_addr == `SEL_ADDR_A) ? a : + (sel_addr == `SEL_ADDR_B) ? b : pc; +assign mem_data_write_int = a; // only A can be written to memory + +// ------- alu instantiation ------- +wire [31:0] alu_a; +wire [31:0] alu_b; +wire [31:0] alu_r; +wire [`ALU_OP_WIDTH-1:0] alu_op; +wire alu_done; + +// alu inputs multiplexors +// constant in microcode is sign extended (in order to implement substractions like adds) +assign alu_a = (sel_read == `SEL_READ_DATA) ? mem_data_read_int : mem_addr; +assign alu_b = (sel_alu == `SEL_ALU_MC_CONST) ? { {25{mc_op[`P_ADDR+6]}} , mc_op[`P_ADDR+6:`P_ADDR] } : // most priority + (sel_alu == `SEL_ALU_A) ? a : + (sel_alu == `SEL_ALU_B) ? b : { {24{1'b0}} , opcode }; // `SEL_ALU_OPCODE is less priority + +zpu_core_alu alu( + .alu_a(alu_a), + .alu_b(alu_b), + .alu_r(alu_r), + .alu_op(alu_op), + .flag_idim(idim), + .clk(clk), + .done(alu_done) +); + +// -------- pc : program counter -------- +always @(posedge clk) +begin + if(w_pc) pc <= alu_r; +`ifdef ENABLE_PC_INCREMENT // microcode optimization + else if(w_pc_increment) pc <= pc + 1; // usually pc=pc+1 +`endif +end + +// -------- sp : stack pointer -------- +always @(posedge clk) +begin + if(w_sp) sp <= alu_r; +end + +// -------- a : acumulator register --------- +always @(posedge clk) +begin + if(w_a) a <= alu_r; + else if(w_a_mem) a <= mem_data_read_int; +end + +// alu results over a register instead of alu result +// in order to improve speed +assign a_is_zero = (a == 0); +assign a_is_neg = a[31]; + +// -------- b : auxiliary register --------- +always @(posedge clk) +begin + if(w_b) b <= alu_r; +end + +// -------- opcode and opcode_cache -------- +always @(posedge clk) +begin + if(w_op) + begin + opcode_cache <= alu_r; // store all opcodes in the word + pc_cached <= pc[31:2]; // store PC address of cached opcodes + end +end + +// -------- opcode : based on pc[1:0] --------- +always @(sel_opcode or opcode_cache) // select current opcode from +begin // the cached opcode word + case(sel_opcode) + 0 : opcode <= opcode_cache[31:24]; + 1 : opcode <= opcode_cache[23:16]; + 2 : opcode <= opcode_cache[15:8]; + 3 : opcode <= opcode_cache[7:0]; + endcase +end + +// ------- idim : immediate opcode handling ---------- +always @(posedge clk) +begin + if(set_idim) idim <= 1'b1; + else if(clear_idim) idim <= 1'b0; +end + +`ifdef ENABLE_CPU_INTERRUPTS +// ------ on interrupt status bit ----- +always @(posedge clk) +begin + if(reset | exit_interrupt) on_interrupt <= 1'b0; + else if(enter_interrupt) on_interrupt <= 1'b1; +end +`endif + +// ------ microcode execution unit -------- +assign sel_read = mc_op[`P_SEL_READ]; // map datapath signals with microcode program bits +assign sel_alu = mc_op[`P_SEL_ALU+1:`P_SEL_ALU]; +assign sel_addr = mc_op[`P_SEL_ADDR+1:`P_SEL_ADDR]; +assign alu_op = mc_op[`P_ALU+3:`P_ALU]; +assign w_sp = mc_op[`P_W_SP] & ~busy; +assign w_pc = mc_op[`P_W_PC] & ~busy; +assign w_a = mc_op[`P_W_A] & ~busy; +assign w_a_mem = mc_op[`P_W_A_MEM] & ~busy; +assign w_b = mc_op[`P_W_B] & ~busy; +assign w_op = mc_op[`P_W_OPCODE] & ~busy; +assign mem_read = mc_op[`P_MEM_R]; +assign mem_write = mc_op[`P_MEM_W]; +assign set_idim = mc_op[`P_SET_IDIM] & ~busy; +assign clear_idim= mc_op[`P_CLEAR_IDIM] & ~busy; +`ifdef ENABLE_BYTE_SELECT +assign byte_op = mc_op[`P_BYTE]; +assign halfw_op = mc_op[`P_HALFWORD]; +`endif +`ifdef ENABLE_PC_INCREMENT + assign w_pc_increment = mc_op[`P_PC_INCREMENT] & ~busy; +`endif +`ifdef ENABLE_CPU_INTERRUPTS + assign exit_interrupt = mc_op[`P_EXIT_INT] & ~busy; + assign enter_interrupt = mc_op[`P_ENTER_INT] & ~busy; +`endif + +wire cond_op_not_cached = mc_op[`P_OP_NOT_CACHED]; // conditional: true if opcode not cached +wire cond_a_zero = mc_op[`P_A_ZERO]; // conditional: true if A is zero +wire cond_a_neg = mc_op[`P_A_NEG]; // conditional: true if A is negative +wire decode = mc_op[`P_DECODE]; // decode means jumps to apropiate microcode based on zpu opcode +wire branch = mc_op[`P_BRANCH]; // unconditional jump inside microcode + +wire [`MC_MEM_BITS-1:0] mc_goto = { mc_op[`P_ADDR+6:`P_ADDR], 2'b00 }; // microcode goto (goto = high 7 bits) +wire [`MC_MEM_BITS-1:0] mc_entry = { opcode[6:0], 2'b00 }; // microcode entry point for opcode +reg [`MC_MEM_BITS-1:0] next_mc_pc; // next microcode operation to be executed +initial next_mc_pc <= `MC_ADDR_RESET-1; + +wire cond_branch = (cond_op_not_cached & ~is_op_cached) | // sum of all conditionals + (cond_a_zero & a_is_zero) | + (cond_a_neg & a_is_neg); + +assign busy = ((mem_read | mem_write) & ~mem_done) | ~alu_done; // busy signal for microcode sequencer + +// ------- handle interrupts --------- +`ifdef ENABLE_CPU_INTERRUPTS +always @(posedge clk) +begin + if(reset | on_interrupt) int_requested <= 0; + else if(interrupt & ~on_interrupt & ~int_requested) int_requested <= 1; // interrupt requested +end +`endif + +// ----- calculate next microcode address (next, decode, branch, specific opcode, etc.) ----- +always @(reset or mc_pc or mc_goto or opcode[7:4] or idim or + decode or branch or cond_branch or mc_entry or busy +`ifdef ENABLE_CPU_INTERRUPTS + or int_requested +`endif +) +begin + // default, next microcode instruction + next_mc_pc <= mc_pc + 1; + if(reset) next_mc_pc <= `MC_ADDR_RESET; + else if(~busy) + begin + // get next microcode instruction + if(branch | cond_branch) next_mc_pc <= mc_goto; + else if(decode) // decode: entry point of a new zpu opcode + begin +`ifdef ENABLE_CPU_INTERRUPTS + if(int_requested & ~idim) next_mc_pc <= `MC_ADDR_INTERRUPT; // microde to enter interrupt mode + else +`endif + if(opcode[7] == `OP_IM) next_mc_pc <= (idim ? `MC_ADDR_IM_IDIM : `MC_ADDR_IM_NOIDIM); + else if(opcode[7:5] == `OP_STORESP) next_mc_pc <= `MC_ADDR_STORESP; + else if(opcode[7:5] == `OP_LOADSP) next_mc_pc <= `MC_ADDR_LOADSP; + else if(opcode[7:4] == `OP_ADDSP) next_mc_pc <= `MC_ADDR_ADDSP; + else next_mc_pc <= mc_entry; // includes EMULATE opcodes + end + end + else next_mc_pc <= mc_pc; // in case of cpu stalled (busy=1) +end + +// set microcode program counter +always @(posedge clk) mc_pc <= next_mc_pc; + +// ----- microcode program ------ +zpu_core_rom microcode ( + .addr(next_mc_pc), + .data(mc_op), + .clk(clk) +); + +// -------------- ZPU debugger -------------------- +`ifdef ZPU_CORE_DEBUG +//synthesis translate_off +// ---- register operation dump ---- +always @(posedge clk) +begin + if(~reset) + begin + if(w_pc) $display("zpu_core: set PC=0x%h", alu.alu_r); +`ifdef ENABLE_PC_INCREMENT + if(w_pc_increment) $display("zpu_core: set PC=0x%h (PC+1)", pc); +`endif + if(w_sp) $display("zpu_core: set SP=0x%h", alu.alu_r); + if(w_a) $display("zpu_core: set A=0x%h", alu.alu_r); + if(w_a_mem) $display("zpu_core: set A=0x%h (from MEM)", mem_data_read_int); + if(w_b) $display("zpu_core: set B=0x%h", alu.alu_r); + if(w_op & ~is_op_cached) $display("zpu_core: set opcode_cache=0x%h, pc_cached=0x%h", alu.alu_r, {pc[31:2], 2'b0}); +`ifdef ENABLE_CPU_INTERRUPTS + if(~busy & mc_pc == `MC_ADDR_INTERRUPT) $display("zpu_core: ***** ENTERING INTERRUPT MICROCODE ******"); + if(~busy & exit_interrupt) $display("zpu_core: ***** INTERRUPT FLAG CLEARED *****"); + if(~busy & enter_interrupt) $display("zpu_core: ***** INTERRUPT FLAG SET *****"); +`endif + if(set_idim & ~idim) $display("zpu_core: IDIM=1"); + if(clear_idim & idim) $display("zpu_core: IDIM=0"); + +// ---- microcode debug ---- +`ifdef ZPU_CORE_DEBUG_MICROCODE + if(~busy) + begin + $display("zpu_core: mc_op[%d]=0b%b", mc_pc, mc_op); + if(branch) $display("zpu_core: microcode: branch=%d", mc_goto); + if(cond_branch) $display("zpu_core: microcode: CONDITION branch=%d", mc_goto); + if(decode) $display("zpu_core: decoding opcode=0x%h (0b%b) : branch to=%d ", opcode, opcode, mc_entry); + end + else $display("zpu_core: busy"); +`endif + +// ---- cpu abort in case of unaligned memory access --- +`ifdef ASSERT_NON_ALIGNMENT + /* unaligned word access (except PC) */ + if(sel_addr != `SEL_ADDR_PC & mem_addr[1:0] != 2'b00 & (mem_read | mem_write) & !byte_op & !halfw_op) + begin + $display("zpu_core: unaligned word operation at addr=0x%x", mem_addr); + $finish; + end + + /* unaligned halfword access */ + if(mem_addr[0] & (mem_read | mem_write) & !byte_op & halfw_op) + begin + $display("zpu_core: unaligned halfword operation at addr=0x%x", mem_addr); + $finish; + end +`endif + + end +end + +// ----- opcode dissasembler ------ +always @(posedge clk) +begin +if(~busy) +case(mc_pc) +0 : begin + $display("zpu_core: ------ breakpoint ------"); + $finish; + end +4 : $display("zpu_core: ------ shiftleft ------"); +8 : $display("zpu_core: ------ pushsp ------"); +12 : $display("zpu_core: ------ popint ------"); +16 : $display("zpu_core: ------ poppc ------"); +20 : $display("zpu_core: ------ add ------"); +24 : $display("zpu_core: ------ and ------"); +28 : $display("zpu_core: ------ or ------"); +32 : $display("zpu_core: ------ load ------"); +36 : $display("zpu_core: ------ not ------"); +40 : $display("zpu_core: ------ flip ------"); +44 : $display("zpu_core: ------ nop ------"); +48 : $display("zpu_core: ------ store ------"); +52 : $display("zpu_core: ------ popsp ------"); +56 : $display("zpu_core: ------ ipsum ------"); +60 : $display("zpu_core: ------ sncpy ------"); + +`MC_ADDR_IM_NOIDIM : $display("zpu_core: ------ im 0x%h (1st) ------", opcode[6:0] ); +`MC_ADDR_IM_IDIM : $display("zpu_core: ------ im 0x%h (cont) ------", opcode[6:0] ); +`MC_ADDR_STORESP : $display("zpu_core: ------ storesp 0x%h ------", { ~opcode[4], opcode[3:0], 2'b0 } ); +`MC_ADDR_LOADSP : $display("zpu_core: ------ loadsp 0x%h ------", { ~opcode[4], opcode[3:0], 2'b0 } ); +`MC_ADDR_ADDSP : $display("zpu_core: ------ addsp 0x%h ------", { ~opcode[4], opcode[3:0], 2'b0 } ); +`MC_ADDR_EMULATE : $display("zpu_core: ------ emulate 0x%h ------", b[2:0]); // opcode[5:0] ); + +128 : $display("zpu_core: ------ mcpy ------"); +132 : $display("zpu_core: ------ mset ------"); +136 : $display("zpu_core: ------ loadh ------"); +140 : $display("zpu_core: ------ storeh ------"); +144 : $display("zpu_core: ------ lessthan ------"); +148 : $display("zpu_core: ------ lessthanorequal ------"); +152 : $display("zpu_core: ------ ulessthan ------"); +156 : $display("zpu_core: ------ ulessthanorequal ------"); +160 : $display("zpu_core: ------ swap ------"); +164 : $display("zpu_core: ------ mult ------"); +168 : $display("zpu_core: ------ lshiftright ------"); +172 : $display("zpu_core: ------ ashiftleft ------"); +176 : $display("zpu_core: ------ ashiftright ------"); +180 : $display("zpu_core: ------ call ------"); +184 : $display("zpu_core: ------ eq ------"); +188 : $display("zpu_core: ------ neq ------"); +192 : $display("zpu_core: ------ neg ------"); +196 : $display("zpu_core: ------ sub ------"); +200 : $display("zpu_core: ------ xor ------"); +204 : $display("zpu_core: ------ loadb ------"); +208 : $display("zpu_core: ------ storeb ------"); +212 : $display("zpu_core: ------ div ------"); +216 : $display("zpu_core: ------ mod ------"); +220 : $display("zpu_core: ------ eqbranch ------"); +224 : $display("zpu_core: ------ neqbranch ------"); +228 : $display("zpu_core: ------ poppcrel ------"); +232 : $display("zpu_core: ------ config ------"); +236 : $display("zpu_core: ------ pushpc ------"); +240 : $display("zpu_core: ------ syscall_emulate ------"); +244 : $display("zpu_core: ------ pushspadd ------"); +248 : $display("zpu_core: ------ halfmult ------"); +252 : $display("zpu_core: ------ callpcrel ------"); +//default : $display("zpu_core: mc_pc=0x%h", decode_mcpc); +endcase +end +//synthesis translate_on +`endif +endmodule + +// --------- ZPU CORE ALU UNIT --------------- +module zpu_core_alu( + alu_a, // parameter A + alu_b, // parameter B + alu_r, // computed result + flag_idim, // for IMM alu op + alu_op, // ALU operation + clk, // clock for syncronous multicycle operations + done // done signal for alu operation +); + +input [31:0] alu_a; +input [31:0] alu_b; +input [`ALU_OP_WIDTH-1:0] alu_op; +input flag_idim; +output [31:0] alu_r; +input clk; +output done; + +wire [31:0] alu_a; +wire [31:0] alu_b; +wire [`ALU_OP_WIDTH-1:0] alu_op; +wire flag_idim; +reg [31:0] alu_r; +wire clk; +reg done; + +`ifdef ENABLE_MULT +// implement 32 bit pipeline multiplier +reg mul_running; +reg [2:0] mul_counter; +wire mul_done = (mul_counter == 3); +reg [31:0] mul_result, mul_tmp1; +reg [31:0] a_in, b_in; + +always@(posedge clk) +begin + a_in <= 0; + b_in <= 0; + mul_tmp1 <= 0; + mul_result <= 0; + mul_counter <= 0; + if(mul_running) + begin // infer pipeline multiplier + a_in <= alu_a; + b_in <= alu_b; + mul_tmp1 <= a_in * b_in; + mul_result <= mul_tmp1; + mul_counter <= mul_counter + 1; + end +end +`endif + +`ifdef ENABLE_DIV +// implement 32 bit divider +// Unsigned/Signed division based on Patterson and Hennessy's algorithm. +// Description: Calculates quotient. The "sign" input determines whether +// signs (two's complement) should be taken into consideration. +// references: http://www.ece.lsu.edu/ee3755/2002/l07.html +reg [63:0] qr; +wire [33:0] diff; +wire [31:0] quotient; +wire [31:0] dividend; +wire [31:0] divider; +reg [6:0] bit; +wire div_done; +reg div_running; +reg divide_sign; +reg negative_output; + +assign div_done = !bit; +assign diff = qr[63:31] - {1'b0, divider}; +assign quotient = (!negative_output) ? qr[31:0] : ~qr[31:0] + 1'b1; +assign dividend = (!divide_sign || !alu_a[31]) ? alu_a : ~alu_a + 1'b1; +assign divider = (!divide_sign || !alu_b[31]) ? alu_b : ~alu_b + 1'b1; + +always@(posedge clk) +begin + bit <= 7'b1_000000; // divider stopped + if(div_running) + begin + if(bit[6]) // divider started: initialize registers + begin + bit <= 7'd32; + qr <= { 32'd0, dividend }; + negative_output <= divide_sign && ((alu_b[31] && !alu_a[31]) || (!alu_b[31] && alu_a[31])); + end + else // step by step divide + begin + if( diff[32] ) qr <= { qr[62:0], 1'd0 }; + else qr <= { diff[31:0], qr[30:0], 1'd1 }; + bit <= bit - 1; + end + end +end +`endif + +`ifdef ENABLE_BARREL +// implement 32 bit barrel shift +// alu_b[6] == 1 ? left(only arithmetic) : right +// alu_b[5] == 1 ? logical : arithmetic +reg bs_running; +reg [31:0] bs_result; +reg [4:0] bs_counter; // 5 bits +wire bs_left = alu_b[6]; +wire bs_logical = alu_b[5]; +wire [4:0] bs_moves = alu_b[4:0]; +wire bs_done = (bs_counter == bs_moves); + +always @(posedge clk) +begin + bs_counter <= 0; + bs_result <= alu_a; + if(bs_running) + begin + if(bs_left) bs_result <= { bs_result[30:0], 1'b0 }; // shift left + else + begin + if(bs_logical) bs_result <= { 1'b0, bs_result[31:1] }; // shift logical right + else bs_result <= { bs_result[31], bs_result[31], bs_result[30:1] };// shift arithmetic right + end + bs_counter <= bs_counter + 1; + end +end +`endif + +// ----- alu add/sub ----- +reg [31:0] alu_b_tmp; +always @(alu_b or alu_op) +begin + alu_b_tmp <= alu_b; // by default, ALU_B as is + if(alu_op == `ALU_PLUS_OFFSET) alu_b_tmp <= { {25{1'b0}}, ~alu_b[4], alu_b[3:0], 2'b0 }; // ALU_B is an offset if ALU_PLUS_OFFSET operation +end + +reg [31:0] alu_r_addsub; // compute R=A+B or A-B based on opcode (ALU_PLUSxx / ALU_SUB-CMP) +always @(alu_a or alu_b_tmp or alu_op) +begin +`ifdef ENABLE_CMP + if(alu_op == `ALU_CMP_SIGNED || alu_op == `ALU_CMP_UNSIGNED) // in case of sub or cmp --> operation is '-' + begin + alu_r_addsub <= alu_a - alu_b_tmp; + end + else +`endif + begin + alu_r_addsub <= alu_a + alu_b_tmp; // by default '+' operation + end +end + +`ifdef ENABLE_CMP +// handle overflow/underflow exceptions in ALU_CMP_SIGNED +reg cmp_exception; +always @(alu_a[31] or alu_b[31] or alu_r_addsub[31]) +begin + cmp_exception <= 0; + if( (alu_a[31] == 0 && alu_b[31] == 1 && alu_r_addsub[31] == 1) || + (alu_a[31] == 1 && alu_b[31] == 0 && alu_r_addsub[31] == 0) ) cmp_exception <= 1; +end +`endif + +// ----- alu operation selection ----- +always @(alu_a or alu_b or alu_op or flag_idim or alu_r_addsub +`ifdef ENABLE_CMP + or cmp_exception +`endif +`ifdef ENABLE_MULT + or mul_done or mul_result +`endif +`ifdef ENABLE_BARREL + or bs_done or bs_result +`endif +`ifdef ENABLE_DIV + or div_done or div_result +`endif +) +begin + done <= 1; // default alu operations are 1 cycle +`ifdef ENABLE_MULT + mul_running <= 0; +`endif +`ifdef ENABLE_BARREL + bs_running <= 0; +`endif +`ifdef ENABLE_DIV + div_running <= 0; +`endif + alu_r <= alu_r_addsub; // ALU_PLUS, ALU_PLUS_OFFSET, ALU_SUB and part of ALU_CMP + case(alu_op) + `ALU_NOP : alu_r <= alu_a; + `ALU_NOP_B : alu_r <= alu_b; + `ALU_AND : alu_r <= alu_a & alu_b; + `ALU_OR : alu_r <= alu_a | alu_b; + `ALU_NOT : alu_r <= ~alu_a; + `ALU_FLIP : alu_r <= { alu_a[0], alu_a[1], alu_a[2], alu_a[3], alu_a[4], alu_a[5], alu_a[6], alu_a[7], + alu_a[8],alu_a[9],alu_a[10],alu_a[11],alu_a[12],alu_a[13],alu_a[14],alu_a[15], + alu_a[16],alu_a[17],alu_a[18],alu_a[19],alu_a[20],alu_a[21],alu_a[22],alu_a[23], + alu_a[24],alu_a[25],alu_a[26],alu_a[27],alu_a[28],alu_a[29],alu_a[30],alu_a[31] }; + `ALU_IM : if(flag_idim) alu_r <= { alu_a[24:0], alu_b[6:0] }; + else alu_r <= { {25{alu_b[6]}}, alu_b[6:0] }; +`ifdef ENABLE_CMP + `ALU_CMP_UNSIGNED:if( (alu_a[31] == alu_b[31] && cmp_exception) || + (alu_a[31] != alu_b[31] && ~cmp_exception) ) + begin + alu_r[31] <= ~alu_r_addsub[31]; + end + `ALU_CMP_SIGNED : if(cmp_exception) + begin + alu_r[31] <= ~alu_r_addsub[31]; + end +`endif +`ifdef ENABLE_XOR + `ALU_XOR : alu_r <= alu_a ^ alu_b; +`endif +`ifdef ENABLE_A_SHIFT + `ALU_A_SHIFT_RIGHT: alu_r <= { alu_a[31], alu_a[31], alu_a[30:1] }; // arithmetic shift left +`endif +`ifdef ENABLE_MULT + `ALU_MULT : begin + mul_running <= ~mul_done; + done <= mul_done; + alu_r <= mul_result; + end +`endif +`ifdef ENABLE_BARREL + `ALU_BARREL : begin + bs_running <= ~bs_done; + done <= bs_done; + alu_r <= bs_result; + end +`endif +`ifdef ENABLE_DIV + `ALU_DIV : begin + div_running<= ~div_done; + done <= div_done; + alu_r <= quotient; + end + `ALU_MOD : begin + div_running<= ~div_done; + done <= div_done; + alu_r <= qr[31:0]; + end +`endif + endcase +end + +endmodule diff --git a/zpu/hdl/avalanche/core/zpu_core_defines.v b/zpu/hdl/avalanche/core/zpu_core_defines.v new file mode 100644 index 0000000..228f46b --- /dev/null +++ b/zpu/hdl/avalanche/core/zpu_core_defines.v @@ -0,0 +1,322 @@ +/* MODULE: zpu_core_defines + DESCRIPTION: Contains ZPU parameters and other cpu related definitions + AUTHOR: Antonio J. Anton (aj anro-ingenieros.com) + +REVISION HISTORY: +Revision 1.0, 14/09/2009 +Initial public release + +COPYRIGHT: +Copyright (c) 2009 Antonio J. Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.*/ + +/* --------------- ISA DOCUMENTATION ------------------ + stack: top of stack = sp, mem[sp]=valid data + push: sp=sp-1, then mem[sp]=data + pop: data=mem[sp], then sp=sp+1 + + immediates: any opcode instead of im sets idim=0 + + MNEMONIC OPCODE HEX OPERATION +- im x 1_xxxxxxx if(~idim) { idim=1; sp=sp-1; mem[sp]={{25{b[6]}},b[6:0]} } + else { idim=1; mem[sp]={mem[sp][24:0], b[6:0]} } +- emulate x 001_xxxxx sp=sp-1; mem[sp]=pc+1; pc=mem[@VECTOR_EMULATE + ]; fetch (used only by microcode) +- storesp x 010_xxxxx mem[sp+x<<2] = mem[sp]; sp=sp+1 +- loadsp x 011_xxxxx mem[sp-1] = mem [sp+x<<2]; sp=sp-1 +- addsp x 0001_xxxx (1x) mem[sp] = mem[sp]+mem[sp+x<<2] + +- breakpoint 0000_0000 (00) call exception vector + shiftleft 0000_0001 (01) +- pushsp 0000_0010 (02) mem[sp-1] = sp; sp = sp - 1 +- popint 0000_0011 (03) pc=mem[sp]; sp = sp + 1 ; fetch ; decode ; clear_interrupt_flag +- poppc 0000_0100 (04) pc=mem[sp]; sp = sp + 1 +- add 0000_0101 (05) mem[sp+1] = mem[sp+1] + mem[sp]; sp = sp + 1 +- and 0000_0110 (06) mem[sp+1] = mem[sp+1] & mem[sp]; sp = sp + 1 +- or 0000_0111 (07) mem[sp+1] = mem[sp+1] | mem[sp]; sp = sp + 1 +- load 0000_1000 (08) mem[sp] = mem[ mem[sp] ] +- not 0000_1001 (09) mem[sp] = ~mem[sp] +- flip 0000_1010 (0a) mem[sp] = flip(mem[sp]) +- nop 0000_1011 (0b) - +- store 0000_1100 (0c) mem[mem[sp]] = mem[sp+1]; sp = sp + 2 +- popsp 0000_1101 (0d) sp = mem[sp] + compare 0000_1110 (0e) ???? --> opcode recycled (see below) + popint 0000_1111 (0f) duplicated of 0x03 ????? --> opcode recycled (see below) + +- ipsum 0000_1110 (0e) c=mem[sp],s=mem[sp+1]; sum=0; while(c-->0) {sum+=halfword(mem[s],s);s+=2}; sp=sp+1; mem[sp]=sum (overwrites mem[0] & mem[4] words) +- sncpy 0000_1111 (0f) c=mem[sp],d=mem[sp+1],s=mem[sp+2]; while( *(char*)s != 0 && c>0 ) {*((char*)d++)=*((char*)s++));c--}; sp=sp+3 (overwrites mem[0] & mem[4] words) +- wcpy 001_00000 (20) c=mem[sp],d=mem[sp+1],s=mem[sp+2]; while(c-->0) mem[d++]=mem[s++]; sp=sp+3 (overwrites mem[0] & mem[4] words) +- wset 001_00001 (21) v=mem[sp],c=mem[sp+1],d=mem[sp+2]; while(c-->0) mem[d++]=v; sp=sp+3 (overwrites mem[0] & mem[4] words) + +- loadh 001_00010 (22) mem[sp] = halfword[ mem[sp] ] +- storeh 001_00011 (23) halfword[mem[sp]] = (mem[sp+1] & 0xFFFF); sp = sp + 2 +- lessthan 001_00100 (24) (mem[sp]-mem[sp+1]) < 0 ? mem[sp+1]=1 : mem[sp+1]=0; sp = sp + 1 +- lessthanorequal 001_00101 (25) (mem[sp]-mem[sp+1]) <= 0 ? mem[sp+1]=1 : mem[sp+1]=0; sp = sp + 1 +- ulessthan 001_00110 (26) (unsigned(mem[sp])-unsigned(mem[sp+1])) < 0 ? mem[sp+1]=1 : mem[sp+1]=0; sp = sp + 1 +- ulessthanorequal 001_00111 (27) (unsigned(mem[sp])-unsigned(mem[sp+1])) <= 0 || == 0 ? mem[sp+1]=1 : mem[sp+1]=0; sp = sp + 1 + swap 001_01000 (28) +- mult 001_01001 (29) mem[sp+1] = mem[sp+1] * mem[sp]; sp = sp + 1 +- lshiftright 001_01010 (2a) mem[sp+1] = mem[sp+1] >> (mem[sp] & 0x1f); sp = sp + 1 +- ashiftleft 001_01011 (2b) mem[sp+1] = mem[sp+1] << (mem[sp] & 0x1f); sp = sp + 1 +- ashiftright 001_01100 (2c) mem[sp+1] = mem[sp+1] signed>> (mem[sp] & 0x1f); sp = sp + 1 +- call 001_01101 (2d) a = mem[sp]; mem[sp]=pc + 1; pc = a +- eq 001_01110 (2e) mem[sp+1] = (mem[sp] == mem[sp+1]) ? 1 : 0; sp = sp + 1 +- neq 001_01111 (2f) mem[sp+1] = (mem[sp] != mem[sp+1]) ? 1 : 0; sp = sp + 1 +- neg 001_10000 (30) mem[sp] = NOT(mem[sp])+1 +- sub 001_10001 (31) mem[sp+1]=mem[sp+1]-mem[sp]; sp=sp+1 +- xor 001_10010 (32) mem[sp+1]=mem[sp] ^ mem[sp+1]; sp=sp+1 +- loadb 001_10011 (33) mem[sp] = byte[ mem[sp] ] +- storeb 001_10100 (34) byte[mem[sp]] = (mem[sp+1] & 0xFF); sp = sp + 2 + div 001_10101 (35) + mod 001_10110 (36) +- eqbranch 001_10111 (37) mem[sp+1] == 0 ? pc = pc + mem[sp]; sp = sp + 2 +- neqbranch 001_11000 (38) mem[sp+1] != 0 ? pc = pc + mem[sp]; sp = sp + 2 +- poppcrel 001_11001 (39) pc = pc + mem[sp]; sp = sp + 1 + config 001_11010 (3a) +- pushpc 001_11011 (3b) sp=sp-1; mem[sp]=pc + syscall 001_11100 (3c) +- pushspadd 001_11101 (3d) mem[sp] = sp + (mem[sp] << 2) +- halfmult 001_11110 (3e) mem[sp+1] = 16bits(mem[sp]) * 16bits(mem[sp+1]); sp = sp + 1 +- callpcrel 001_11111 (3f) a = mem[sp]; mem[sp]=pc+1; pc = pc + a; + + gcc seems to be using only: + + add, addsp, and, ashiftleft, ashiftright, call, callpcrel, div, eq, flip, im, lessthan, + lessthanorequal, loadb, loadh, load, loadsp, lshiftright, mod, mult, neg, neqbranch, + not, or, poppc, poppcrel, popsp, pushpc, pushspadd, pushsp, storeb, storeh, store, storesp, + sub, ulessthan, ulessthanorequal, xor + + --------- memory access ---------------------------- + + data is stored in big-endian format into memory: + 00 MSB .. .. LSB + 05 .. .. .. .. + + ---------------------------------------------------- */ +`define SP_START 32'h10 // after reset change in startup code +`define EMULATION_VECTOR 32'h10 // table of emulated opcodes (interrupt & exception vectors plus up to 5 emulated opcodes) +`define RESET_VECTOR 32'h20 // reset entry point (can be moved up to 0x3c as per emulation table needs) + +// ---- zpu core optimizations/features ---- +`define ZPU_CORE_DEBUG +//`define ZPU_CORE_DEBUG_MICROCODE +`define ASSERT_NON_ALIGNMENT /* abort cpu in case of non-aligned memory access (only simulation) */ + +`define ENABLE_BYTE_SELECT /* allow byte / halfword memory accesses */ +`define ENABLE_CPU_INTERRUPTS /* enable interrupts to cpu */ +//`define ENABLE_PC_INCREMENT /* gain 1 clk per opcode but requires microcode changes ** not done at the moment ** */ +//`define ENABLE_A_SHIFT /* 1 bit arithmetic shift (right) mutual exclusive with barrel shift */ +//`define ENABLE_XOR /* 1 cycle x-or */ +//`define ENABLE_MULT /* 32 bit pipelined (3 stages) multiplier */ +//`define ENABLE_DIV /* 32 bit, up to 32 cycles serial divider */ +`define ENABLE_BARREL /* n bit logical & arithmetic shift mutual exclusive with 1 bit shift */ +`define ENABLE_CMP /* enable ALU_CMP_SIGNED and ALU_CMP_UNSIGNED */ + +// ------- microcode zpu core datapath selectors -------- +`define SEL_READ_DATA 0 +`define SEL_READ_ADDR 1 + +`define SEL_ALU_A 0 +`define SEL_ALU_OPCODE 1 +`define SEL_ALU_MC_CONST 2 +`define SEL_ALU_B 3 + +`define SEL_ADDR_PC 0 +`define SEL_ADDR_SP 1 +`define SEL_ADDR_A 2 +`define SEL_ADDR_B 3 + +`define ALU_OP_WIDTH 4 // alu operation is 4 bits + +`define ALU_NOP 0 // r = a +`define ALU_NOP_B 1 // r = b +`define ALU_PLUS 2 // r = a + b +`define ALU_PLUS_OFFSET 3 // r = a + { 27'b0, ~b[4], b[3:0] } +`define ALU_AND 4 // r = a AND b +`define ALU_OR 5 // r = a OR b +`define ALU_NOT 6 // r = NOT a +`define ALU_FLIP 7 // r = FLIP a +`define ALU_IM 8 // r = IDIM ? { a[24:0], b[6:0] } : { 25{b[6]}, b[6:0] } +`ifdef ENABLE_CMP + `define ALU_CMP_UNSIGNED 9 // r = (unsigned)a - (unsigned)b (r[31] is overflow/underflow adjusted) + `define ALU_CMP_SIGNED 10 // r = (signed)a - (signed)b (r[31] is overflow/underflow adjusted) +`endif +`ifdef ENABLE_BARREL + `define ALU_BARREL 11 // r = a <<|>> b (logical, arithmetical) +`endif +`ifdef ENABLE_A_SHIFT + `define ALU_A_SHIFT_RIGHT 11 // r = { a[31], a[31], a[30:29] } = (signed)a >> 1 +`endif +`ifdef ENABLE_XOR + `define ALU_XOR 12 // r = a XOR b +`endif +`ifdef ENABLE_MULT + `define ALU_MULT 13 // r = a * b +`endif +`ifdef ENABLE_DIV + `define ALU_DIV 14 // r = a / b + `define ALU_MOD 15 // r = a mod b +`endif + +// ------- special zpu opcodes ------ +`define OP_NOP 8'b0000_1011 // default value for opcode cache on reset +`define OP_IM 1'b1 +`define OP_EMULATE 3'b001 +`define OP_STORESP 3'b010 +`define OP_LOADSP 3'b011 +`define OP_ADDSP 4'b0001 + +// ------- microcode memory settings ------ +`define MC_MEM_BITS 9 // 512 microcode operations +`define MC_BITS 36 // microcode opcode width + +// ------- microcode labels for opcode execution ------- +// based on microcode program +`define MC_ADDR_IM_NOIDIM 488 +`define MC_ADDR_IM_IDIM 491 +`define MC_ADDR_STORESP 493 +`define MC_ADDR_LOADSP 496 +`define MC_ADDR_ADDSP 500 +`define MC_ADDR_EMULATE 504 +`define MC_ADDR_INTERRUPT 484 +`define MC_ADDR_FETCH_NEXT 480 +`define MC_ADDR_FETCH 476 +`define MC_ADDR_RESET 474 + +// ---------- microcode settings -------------------- +`define P_SEL_READ 0 // alu-A multiplexor between data-in and addr-out (1 bit) +`define P_SEL_ALU 1 // alu-B multiplexor between a, b, mc_const or opcode (2 bits) +`define P_SEL_ADDR 3 // addr-out multiplexor between sp, pc, a, b (2 bits) +`define P_ALU 5 // alu operation (4 bits) +`define P_W_SP 9 // write sp (from alu-out) +`define P_W_PC 10 // write pc (from alu-out) +`define P_W_A 11 // write a (from alu-out) +`define P_W_B 12 // write b (from alu-out) +`define P_SET_IDIM 13 // set idim flag +`define P_CLEAR_IDIM 14 // clear idim flag +`define P_W_OPCODE 15 // write opcode (from alu-out) : check if can be written directly from data-in +`define P_DECODE 16 // jump to microcode entry point based on current opcode +`define P_MEM_R 17 // request memory read +`define P_MEM_W 18 // request memory write +`define P_ADDR 19 // microcode address (7 bits (granularity is 4 words)) or constant to be used at microcode level +`define P_BRANCH 26 // microcode inconditional branch to address +`define P_OP_NOT_CACHED 27 // microcode branch if byte[pc] is not cached at opcode +`define P_A_ZERO 28 // microcode branch if a is zero +`define P_A_NEG 29 // microcode branch if a is negative a[31]=1 +`define P_W_A_MEM 30 // write a directly from data-in (alu datapath is free to perform any other operation in parallel) +`ifdef ENABLE_BYTE_SELECT + `define P_BYTE 31 // byte memory operation + `define P_HALFWORD 32 // half word memory operation +`endif +`ifdef ENABLE_PC_INCREMENT + `define P_PC_INCREMENT 33 // autoincrement PC bypassing ALU (1 clock gain per opcode) : not implemented at microcode level +`endif +`ifdef ENABLE_CPU_INTERRUPTS + `define P_EXIT_INT 34 // clear interrupt flag (exit from interrupt) + `define P_ENTER_INT 35 // set interrupt flag (enter interrupt) +`endif + +`define MC_SEL_READ_DATA (`SEL_READ_DATA << `P_SEL_READ) // 1 bit +`define MC_SEL_READ_ADDR (`SEL_READ_ADDR << `P_SEL_READ) + +`define MC_SEL_ALU_A (`SEL_ALU_A << `P_SEL_ALU) // 2 bit +`define MC_SEL_ALU_OPCODE (`SEL_ALU_OPCODE << `P_SEL_ALU) +`define MC_SEL_ALU_MC_CONST (`SEL_ALU_MC_CONST << `P_SEL_ALU) +`define MC_SEL_ALU_B (`SEL_ALU_B << `P_SEL_ALU) + +`define MC_SEL_ADDR_PC (`SEL_ADDR_PC << `P_SEL_ADDR) // 2 bits +`define MC_SEL_ADDR_SP (`SEL_ADDR_SP << `P_SEL_ADDR) +`define MC_SEL_ADDR_A (`SEL_ADDR_A << `P_SEL_ADDR) +`define MC_SEL_ADDR_B (`SEL_ADDR_B << `P_SEL_ADDR) + +`define MC_ALU_NOP (`ALU_NOP << `P_ALU) // 4 bits +`define MC_ALU_NOP_B (`ALU_NOP_B << `P_ALU) +`define MC_ALU_PLUS (`ALU_PLUS << `P_ALU) +`define MC_ALU_AND (`ALU_AND << `P_ALU) +`define MC_ALU_OR (`ALU_OR << `P_ALU) +`define MC_ALU_NOT (`ALU_NOT << `P_ALU) +`define MC_ALU_FLIP (`ALU_FLIP << `P_ALU) +`define MC_ALU_IM (`ALU_IM << `P_ALU) +`define MC_ALU_PLUS_OFFSET (`ALU_PLUS_OFFSET << `P_ALU) +`ifdef ENABLE_CMP + `define MC_ALU_CMP_SIGNED (`ALU_CMP_SIGNED << `P_ALU) + `define MC_ALU_CMP_UNSIGNED (`ALU_CMP_UNSIGNED << `P_ALU) +`endif +`ifdef ENABLE_XOR + `define MC_ALU_XOR (`ALU_XOR << `P_ALU) +`endif +`ifdef ENABLE_A_SHIFT + `define MC_ALU_A_SHIFT_RIGHT (`ALU_A_SHIFT_RIGHT << `P_ALU) +`endif +`ifdef ENABLE_MULT + `define MC_ALU_MULT (`ALU_MULT << `P_ALU) +`endif +`ifdef ENABLE_DIV + `define MC_ALU_DIV (`ALU_DIV << `P_ALU) + `define MC_ALU_MOD (`ALU_MOD << `P_ALU) +`endif +`ifdef ENABLE_BARREL + `define MC_ALU_BARREL (`ALU_BARREL << `P_ALU) +`endif + +`define MC_W_SP (1 << `P_W_SP) +`define MC_W_PC (1 << `P_W_PC) +`define MC_W_A (1 << `P_W_A) +`define MC_W_A_MEM (1 << `P_W_A_MEM) +`define MC_W_B (1 << `P_W_B) +`define MC_W_OPCODE (1 << `P_W_OPCODE) +`define MC_SET_IDIM (1 << `P_SET_IDIM) +`define MC_CLEAR_IDIM (1 << `P_CLEAR_IDIM) +`ifdef ENABLE_BYTE_SELECT + `define MC_BYTE (1 << `P_BYTE) + `define MC_HALFWORD (1 << `P_HALFWORD) +`endif +`ifdef ENABLE_PC_INCREMENT + `define MC_PC_INCREMENT (1 << `P_PC_INCREMENT) +`endif +`ifdef ENABLE_CPU_INTERRUPTS + `define MC_EXIT_INTERRUPT (1 << `P_EXIT_INT) + `define MC_ENTER_INTERRUPT (1 << `P_ENTER_INT) +`endif + +`define MC_MEM_R (1 << `P_MEM_R) +`define MC_MEM_W (1 << `P_MEM_W) + +`define MC_DECODE (1 << `P_DECODE) +`define MC_BRANCH (1 << `P_BRANCH) +`define MC_BRANCHIF_OP_NOT_CACHED (1 << `P_OP_NOT_CACHED) +`define MC_BRANCHIF_A_ZERO (1 << `P_A_ZERO) +`define MC_BRANCHIF_A_NEG (1 << `P_A_NEG) + +// microcode common operations + +`define MC_ADDR_FETCH_OP ( (`MC_ADDR_FETCH >> 2) << `P_ADDR) // fetch opcode from memory then decode +`define MC_ADDR_NEXT_OP ( (`MC_ADDR_FETCH_NEXT >> 2) << `P_ADDR) // go to next opcode +`define MC_ADDR_EMULATE_OP ( (`MC_ADDR_EMULATE >> 2) << `P_ADDR) // EMULATE opcode + +`define MC_PC_PLUS_1 (`MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_SEL_ALU_MC_CONST | `MC_ALU_PLUS | (1 << `P_ADDR) | `MC_W_PC) +`define MC_SP_MINUS_4 (`MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_SEL_ALU_MC_CONST | `MC_ALU_PLUS | ((-4 & 127) << `P_ADDR) | `MC_W_SP) +`define MC_SP_PLUS_4 (`MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_SEL_ALU_MC_CONST | `MC_ALU_PLUS | (4 << `P_ADDR) | `MC_W_SP) +`define MC_EMULATE (`MC_BRANCH | `MC_ADDR_EMULATE_OP) + +`define MC_FETCH (`MC_BRANCHIF_OP_NOT_CACHED | `MC_ADDR_FETCH_OP | `MC_DECODE) // fetch and decode current PC opcode +`define MC_GO_NEXT (`MC_BRANCH | `MC_ADDR_NEXT_OP) // go to next opcode (PC=PC+1, fetch, decode) +`define MC_GO_FETCH (`MC_BRANCH | `MC_ADDR_FETCH_OP) // go to fetch opcode at PC, then decode +`define MC_GO_BREAKPOINT (`MC_BRANCH | ((0 >> 2) << `P_ADDR)) // go to breakpoint opcode + diff --git a/zpu/hdl/avalanche/core/zpu_core_rom.v b/zpu/hdl/avalanche/core/zpu_core_rom.v new file mode 100644 index 0000000..62b7229 --- /dev/null +++ b/zpu/hdl/avalanche/core/zpu_core_rom.v @@ -0,0 +1,1017 @@ +`timescale 1ns / 1ps +`include "zpu_core_defines.v" + +/* MODULE: zpu_core_rom + DESCRIPTION: Contains microcode program + AUTHOR: Antonio J. Anton (aj anro-ingenieros.com) + +REVISION HISTORY: +Revision 1.0, 14/09/2009 +Initial public release + +COPYRIGHT: +Copyright (c) 2009 Antonio J. Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.*/ + +module zpu_core_rom ( + clk, + addr, + data +); + +input [`MC_MEM_BITS-1:0] addr; +output [`MC_BITS-1:0] data; +input clk; + +wire [`MC_MEM_BITS-1:0] addr; +reg [`MC_BITS-1:0] data; +reg [`MC_BITS-1:0] memory[(1<<`MC_MEM_BITS)-1:0]; + +initial data <= 0; +always @(posedge clk) data <= memory[addr]; + +// --- clear all memory at startup; for any reason, xilinx xst +// will not syntetize as block ram if not all memory is initialized --- +integer n; +initial begin +// initialize all memory array +for(n = 0; n < (1<<`MC_MEM_BITS); n = n + 1) memory[n] = 0; + +// ------------------------- MICROCODE MEMORY START ----------------------------------- + +// As per zpu_core.v, each opcode is executed by microcode. Each opcode microcode entry point +// is at << 2 (example pushsp = 0x02 has microcode entry point of 0x08); this leaves +// room of 4 microcode operations per opcode; if the opcode microcode needs more space, +// it can jump & link to other microcode address (with the two lower bits at 0). The lower 256 addresses +// of microcode memory are entry points and code for 0..127 opcodes; other specific opcodes like im, storesp, etc. +// are directly hardwired to specific microcode addresses at the memory end. Upper 256 addresses are +// used by microcode continuation (eg. opcodes which needs more microcode operations), entry points, initializations, etc. +// the idea is to fit the microcode program in a xilinx blockram 512x36. + +// ----- OPCODES WITHOUT CONSTANT ------ + +// 0000_0000 (00) breakpoint ------------------------------------- +memory[0] = `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR) | // b = 4 (#1 in emulate table) + `MC_W_B; +memory[1] = `MC_EMULATE; // emulate #1 (exception) + +// 0000_0001 (01) shiftleft ------------------------------------- +memory[4] = `MC_GO_BREAKPOINT; + +// 0000_0010 (02) pushsp ------------------------------------- +// mem[sp-1] = sp +// sp = sp - 1 +memory[8] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | // a = sp + `MC_ALU_NOP | `MC_W_A; +memory[9] = `MC_SP_MINUS_4; // sp = sp - 1 +memory[10] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp]=a + +// 0000_0011 (03) popint ------------------------------------- +`ifdef ENABLE_CPU_INTERRUPTS +// pc=mem[sp]-1 (emulate stores pc+1 but we must return to +// sp=sp+1 pc because interrupt takes precedence to decode) +// fetch & decode, then clear_interrupt_flag +// this guarantees that a continous interrupt allows to execute at least one +// opcode of mainstream program before reentry to interrupt handler +memory[12] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // pc = mem[sp]-1 + `MC_MEM_R | `MC_ALU_PLUS | `MC_SEL_ALU_MC_CONST | + ((-1 & 127) << `P_ADDR) | `MC_W_PC; +memory[13] = `MC_SEL_ADDR_PC | `MC_SEL_READ_DATA | `MC_MEM_R | // opcode_cache = mem[pc] + `MC_W_OPCODE; +memory[14] = `MC_SP_PLUS_4 | `MC_DECODE | `MC_EXIT_INTERRUPT; // sp=sp+1, decode opcode, exit_interrupt +`else +memory[12] = `MC_GO_BREAKPOINT; +`endif + +// 0000_0100 (04) poppc ------------------------------------- +// pc=mem[sp] +// sp = sp + 1 +memory[16] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // pc = mem[sp] + `MC_MEM_R | `MC_W_PC; +memory[17] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[18] = `MC_FETCH; // opcode cached ? decode : fetch,decode + +// 0000_0101 (05) add ------------------------------------- +// mem[sp+1] = mem[sp+1] + mem[sp] +// sp = sp + 1 +memory[20] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[21] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = a + mem[sp] + `MC_ALU_PLUS | `MC_SEL_ALU_A | `MC_W_A; +memory[22] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 0000_0110 (06) and ------------------------------------- +// mem[sp+1] = mem[sp+1] & mem[sp] +// sp = sp + 1 +memory[24] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[25] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = a & mem[sp] + `MC_ALU_AND |`MC_SEL_ALU_A | `MC_W_A; +memory[26] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 0000_0111 (07) or ------------------------------------- +// mem[sp+1] = mem[sp+1] | mem[sp] +// sp = sp + 1 +memory[28] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[29] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = a | mem[sp] + `MC_ALU_OR | `MC_SEL_ALU_A | `MC_W_A; +memory[30] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 0000_1000 (08) load ------------------------------------- +// mem[sp] = mem[ mem[sp] ] +memory[32] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = mem[sp] + `MC_MEM_R | `MC_W_A; +memory[33] = `MC_SEL_ADDR_A | `MC_SEL_READ_DATA | `MC_MEM_R | `MC_W_A; // a = mem[a] +memory[34] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 0000_1001 (09) not ------------------------------------- +// mem[sp] = ~mem[sp] +memory[36] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = ~mem[sp] + `MC_MEM_R | `MC_ALU_NOT | `MC_W_A; +memory[37] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 0000_1010 (0a) flip ------------------------------------- +// mem[sp] = flip(mem[sp]) +memory[40] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = FLIP(mem[sp]) + `MC_MEM_R | `MC_ALU_FLIP | `MC_W_A; +memory[41] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 0000_1011 (0b) nop ------------------------------------- +memory[44] = `MC_CLEAR_IDIM | `MC_PC_PLUS_1; // IDIM=0 +memory[45] = `MC_FETCH; + +// 0000_1100 (0c) store ------------------------------------- +// mem[mem[sp]] <= mem[sp+1] +// sp = sp + 2 +memory[48] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // b = mem[sp] + `MC_MEM_R | `MC_W_B; +memory[49] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[50] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | `MC_SP_PLUS_4; // a = mem[sp] || sp = sp + 1 +memory[51] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_GO_NEXT; // mem[b] = a + +// 0000_1101 (0d) popsp ------------------------------------- +// sp = mem[sp] +memory[52] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // sp = mem[sp] + `MC_W_SP | `MC_GO_NEXT; + +// 0000_1110 (0e) ipsum ------------------------------------ +// compare: opcode recycled --> ipsum +// c=mem[sp];s=mem[sp+1]; sum=0; +// while(c-->0) {sum+=halfword(mem[s],s);s++}; +// sp=sp+1; mem[sp]=sum (overwrites mem[0] & mem[4] words) +// requires HALFWORD memory access +`ifdef ENABLE_BYTE_SELECT +memory[56] = `MC_CLEAR_IDIM | `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | // b=0 + (0 << `P_ADDR) | `MC_W_B; +memory[57] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=pc+1 save next pc on mem[0] + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[58] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_ALU_NOP_B | `MC_W_B | // mem[b]=a || b=4 + `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR); +memory[59] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_W_A | // a=sp || goto @ipsum_continue1 + `MC_BRANCH | ((116 >> 2) << `P_ADDR); +`else +memory[56] = `MC_GO_BREAKPOINT; +`endif + +// 0000_1111 (0f) sncpy --------------------------------------- +// c=mem[sp],d=mem[sp+1],s=mem[sp+2]; +// while( *(char*)s != 0 && c>0 ) { *((char*)d++)=*((char*)s++)); c-- }; +// sp=sp+1; mem[sp+1]=d; mem[sp]=c +// (overwrites mem[0] & mem[4] words) +// requires BYTE memory access +`ifdef ENABLE_BYTE_SELECT +memory[60] = `MC_CLEAR_IDIM | `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | // b=0 + (0 << `P_ADDR) | `MC_W_B; +memory[61] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=pc+1 save next pc on mem[0] + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[62] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_ALU_NOP_B | `MC_W_B | // mem[b]=a || b=4 + `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR); +memory[63] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_W_A | // a=sp || goto @sncpy_continue1 + `MC_BRANCH | ((100 >> 2) << `P_ADDR); +`else +memory[60] = `MC_GO_BREAKPOINT; +`endif + +// ------------- microcode opcode continuations --------------- +// wset_continue1: ------------------------ +memory[64] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=a+12 save clear stack on mem[4] + `MC_SEL_ALU_MC_CONST | (12 << `P_ADDR) | `MC_W_A; +memory[65] = `MC_SEL_ADDR_B | `MC_MEM_W; // mem[b]=a +memory[66] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_PC;// pc=mem[sp] (data) +memory[67] = `MC_SP_PLUS_4; // sp=sp+4 +memory[68] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_B; // b=mem[sp] (count) +memory[69] = `MC_SP_PLUS_4; // sp=sp+4 +memory[70] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_SP;// sp=mem[sp] (destination @) +memory[71] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_W_A; // a=b (count) +// wset_loop: +memory[72] = `MC_BRANCHIF_A_ZERO | ( (80 >> 2) << `P_ADDR); // if(a==0) goto @wset_end +memory[73] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // b=b-1 (count) + `MC_SEL_ALU_MC_CONST | ((-1 & 127) << `P_ADDR) | `MC_W_B; +memory[74] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_W_A; // a=pc (data) +memory[75] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_SP_PLUS_4; // mem[sp]=a || sp=sp+4 (sp=destination@) +memory[76] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_W_A | // a=b (count) || goto @wset_loop + `MC_BRANCH | ((72 >> 2) << `P_ADDR); +// wset_end: wcpy_end: sncpy_end: +memory[80] = `MC_SEL_ADDR_A | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_PC; // pc=mem[a] (a is 0) +memory[81] = `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR) | // b=4 + `MC_W_B; +memory[82] = `MC_SEL_ADDR_B | `MC_MEM_R | `MC_SEL_READ_DATA | // sp=mem[b] || goto @fetch + `MC_W_SP | `MC_FETCH; + +// wcpy_continue1: ------------------------ +memory[84] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=a+12 save clear stack on mem[4] + `MC_SEL_ALU_MC_CONST | (12 << `P_ADDR) | `MC_W_A; +memory[85] = `MC_SEL_ADDR_B | `MC_MEM_W; // mem[b]=a +memory[86] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_B; // b=mem[sp] (count) +memory[87] = `MC_SP_PLUS_4; // sp=sp+4 +memory[88] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_PC;// pc=mem[sp] (destination @) +memory[89] = `MC_SP_PLUS_4; // sp=sp+4 +memory[90] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_SP;// sp=mem[sp] (source @) +memory[91] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_W_A; // a=b (count) +// wcpy_loop: +memory[92] = `MC_BRANCHIF_A_ZERO | ( (80 >> 2) << `P_ADDR); // if(a==0) goto @wcpy_end +memory[93] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // b=b-1 (count) + `MC_SEL_ALU_MC_CONST | ((-1 & 127) << `P_ADDR) | `MC_W_B; +memory[94] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a=mem[sp] || sp=sp+4 (sp=source@) + `MC_SP_PLUS_4; +memory[95] = `MC_SEL_ADDR_PC | `MC_MEM_W | `MC_SEL_READ_ADDR | // mem[pc]=a || pc=pc+4 (pc=destination@) + `MC_ALU_PLUS | `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR) | `MC_W_PC; +memory[96] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_W_A | // a=b (count) || goto @wcpy_loop + `MC_BRANCH | ((92 >> 2) << `P_ADDR); + +`ifdef ENABLE_BYTE_SELECT +// sncpy_continue1: --------------------- +memory[100] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=a+12 + `MC_SEL_ALU_MC_CONST | (12 << `P_ADDR) | `MC_W_A; +memory[101] = `MC_SEL_ADDR_B | `MC_MEM_W; // mem[b]=a +memory[102] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_B;// b=mem[sp] (count) +memory[103] = `MC_SP_PLUS_4; // sp=sp+4 +memory[104] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_PC;// pc=mem[sp] (destination @) +memory[105] = `MC_SP_PLUS_4; // sp=sp+4 +memory[106] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | `MC_W_SP;// sp=mem[sp] (source @) +memory[107] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_W_A; // a=b (count) +// sncpy_loop: +memory[108] = `MC_BRANCHIF_A_ZERO | ( (80 >> 2) << `P_ADDR); // if(a==0) goto @sncpy_end (count==0?) +memory[109] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_BYTE | `MC_W_A_MEM | // a=BYTE(mem[sp],sp) || sp=sp+1 (sp=source@) + `MC_SEL_READ_ADDR | `MC_ALU_PLUS | `MC_SEL_ALU_MC_CONST | + (1 << `P_ADDR) | `MC_W_SP; +memory[110] = `MC_SEL_ADDR_PC | `MC_MEM_W | `MC_SEL_READ_ADDR | // BYTE(mem[pc],pc)=a || pc=pc+1 (pc=destination@) + `MC_BYTE | `MC_ALU_PLUS | `MC_SEL_ALU_MC_CONST | + (1 << `P_ADDR) | `MC_W_PC; +memory[111] = `MC_BRANCHIF_A_ZERO | ( (80 >> 2) << `P_ADDR); // if(a==0) goto @sncpy_end (mem[src]==0?) +memory[112] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // b=b-1 (count) + `MC_SEL_ALU_MC_CONST | ((-1 & 127) << `P_ADDR) | `MC_W_B; +memory[113] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_W_A | // a=b (count) || goto @sncpy_loop + `MC_BRANCH | ((108 >> 2) << `P_ADDR); + +// ipsum_continue1: ------------------- +memory[116] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=a+4 + `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR) | `MC_W_A; +memory[117] = `MC_SEL_ADDR_B | `MC_MEM_W; // mem[b]=a save return sp on mem[4] +memory[118] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | // pc=mem[sp] (count) + `MC_W_PC; +memory[119] = `MC_SP_PLUS_4; // sp=sp+4 +memory[120] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | // sp=mem[sp] (start @) + `MC_W_SP; +memory[121] = `MC_SEL_ALU_MC_CONST | (0 << `P_ADDR) | `MC_W_B | // b=0 (sum) + `MC_ALU_NOP_B; +memory[122] = `MC_SEL_ADDR_PC | `MC_SEL_READ_DATA | `MC_W_A; // a=pc (count) +// ipsum_loop: +memory[124] = `MC_BRANCHIF_A_ZERO | ((392 >> 2) << `P_ADDR); // a == 0 ? goto @ipsum_end + +memory[125] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_HALFWORD | // b=mem[sp]+b + `MC_SEL_READ_DATA | `MC_ALU_PLUS | `MC_SEL_ALU_B | `MC_W_B; +memory[126] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // sp=sp+2 + `MC_SEL_ALU_MC_CONST | (2 << `P_ADDR) | `MC_W_SP; +memory[127] = `MC_BRANCH | ((408 >> 2) << `P_ADDR); // goto @ipsum_continue2 +`endif + +// ------------------------------------------------------------- + +// 001_00000 (20) wcpy ----------------------------------------- +// before using this opcode you must save mem[0] & mem[4] words, then wcpy, then restore mems +// c=mem[sp],d=mem[sp+1],s=mem[sp+2]; while(c-->0) mem[d++]=mem[s++]; sp=sp+3 +memory[128] = `MC_CLEAR_IDIM | `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | // b=0 + (0 << `P_ADDR) | `MC_W_B; +memory[129] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=pc+1 + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[130] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_ALU_NOP_B | `MC_W_B | // mem[b]=a || b=4 + `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR); +memory[131] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_W_A | // a=sp || goto @wcpy_continue1 + `MC_BRANCH | ((84 >> 2) << `P_ADDR); + +// 001_00001 (21) wset ---------------------------------------- +// before using this opcode you must save mem[0] & mem[4] words, then wset, then restore mems +// v=mem[sp],c=mem[sp+1],d=mem[sp+2]; while(c-->0) mem[d++]=v; sp=sp+3 +memory[132] = `MC_CLEAR_IDIM | `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | // b=0 + (0 << `P_ADDR) | `MC_W_B; +memory[133] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a=pc+1 + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[134] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_ALU_NOP_B | `MC_W_B | // mem[b]=a || b=4 + `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR); +memory[135] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_W_A | // a=sp || goto @wset_continue1 + `MC_BRANCH | ((64 >> 2) << `P_ADDR); + +// 001_00010 (22) loadh ------------------------------------- +`ifdef ENABLE_BYTE_SELECT +// mem[sp] = HALFWORD(mem[sp], mem[mem[sp]]) +memory[136] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = mem[sp] + `MC_MEM_R | `MC_W_A; +memory[137] = `MC_SEL_ADDR_A | `MC_SEL_READ_DATA | `MC_MEM_R | // a = halfword(a, mem[a]) + `MC_W_A | `MC_HALFWORD; +memory[138] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else +memory[136] = `MC_GO_BREAKPOINT; +`endif + +// 001_00011 (23) storeh ------------------------------------- +`ifdef ENABLE_BYTE_SELECT +// HALFWORD( mem[mem[sp]] <= mem[sp+1] ) +// sp = sp + 2 +memory[140] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // b = mem[sp] + `MC_MEM_R | `MC_W_B; +memory[141] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[142] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a = mem[sp] || sp=sp+1 + `MC_SP_PLUS_4; +memory[143] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_HALFWORD | `MC_GO_NEXT; // HALFWORD(mem[b] = a) +`else +memory[140] = `MC_GO_BREAKPOINT; +`endif + +// 001_00100 (24) lessthan ------------------------------------- +// (mem[sp]-mem[sp+1]) < 0 ? mem[sp+1]=1 : mem[sp+1]=0 +// sp=sp+1 +`ifdef ENABLE_CMP +memory[144] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a=mem[sp] || sp=sp+1 + `MC_SP_PLUS_4; +memory[145] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | `MC_W_B; // b=mem[sp] +memory[146] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // a = (a - b) with overflow/underflow correction || goto @lessthan_check + `MC_ALU_CMP_SIGNED | `MC_W_A | ((424>>2) << `P_ADDR) | `MC_BRANCH; +`else +memory[144] = `MC_GO_BREAKPOINT; +`endif + +// 001_00101 (25) lessthanorequal ------------------------------------- +// (mem[sp]-mem[sp+1]) <= 0 ? mem[sp+1]=1 : mem[sp+1]=0 +// sp=sp+1 +`ifdef ENABLE_CMP +memory[148] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a=mem[sp] || sp=sp+1 + `MC_SP_PLUS_4; +memory[149] = `MC_SEL_ADDR_SP | `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_B; // b=mem[sp] +memory[150] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // a = (a - b) with overflow/underflow correction || goto @lessthanorequal_check + `MC_ALU_CMP_SIGNED | `MC_W_A | ((420>>2) << `P_ADDR) | `MC_BRANCH; +`else +memory[148] = `MC_GO_BREAKPOINT; +`endif + +// 001_00110 (26) ulessthan ------------------------------------- +// signA!=signB -> (unsigA < unsigB) == ~(sigA < sigA) +// signA==signB -> (unsigA < unsigB) == (sigA < sigB) +// (mem[sp]-mem[sp+1]) < 0 ? mem[sp+1]=1 : mem[sp+1]=0 +// sp=sp+1 +`ifdef ENABLE_CMP +memory[152] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a=mem[sp] || sp=sp+1 + `MC_SP_PLUS_4; +memory[153] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | `MC_W_B; // b=mem[sp] +memory[154] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // a = (a - b) with overflow/underflow correction || goto @lessthan_check + `MC_ALU_CMP_UNSIGNED | `MC_W_A | ((424>>2) << `P_ADDR) | `MC_BRANCH; +`else +memory[152] = `MC_GO_BREAKPOINT; +`endif + +// 001_00111 (27) ulessthanorequal ------------------------------------- +// (mem[sp]-mem[sp+1]) <= 0 ? mem[sp+1]=1 : mem[sp+1]=0 +// sp=sp+1 +`ifdef ENABLE_CMP +memory[156] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a=mem[sp] || sp=sp+1 + `MC_SP_PLUS_4; +memory[157] = `MC_SEL_ADDR_SP | `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_B; // b=mem[sp] +memory[158] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // a = (a - b) with overflow/underflow correction || goto @lessthanorequal_check + `MC_ALU_CMP_UNSIGNED | `MC_W_A | ((420>>2) << `P_ADDR) | `MC_BRANCH; +`else +memory[156] = `MC_GO_BREAKPOINT; +`endif + +// 001_01000 (28) swap ------------------------------------- +memory[160] = `MC_GO_BREAKPOINT; + +// 001_01001 (29) mult ------------------------------------- +`ifdef ENABLE_MULT +// mem[sp+1] = mem[sp+1] * mem[sp] +// sp = sp + 1 +memory[164] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[165] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // b = mem[sp] + `MC_W_B; +memory[166] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // a = a * b DON'T COMBINE MULTICYCLE ALU + `MC_ALU_MULT | `MC_W_A; // OPERATIONS WITH MEMORY READ/WRITE +memory[167] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else +memory[164] = `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | (8 << `P_ADDR) | // b = 8 (#2 in emulate table) + `MC_W_B; +memory[165] = `MC_EMULATE; // emulate #2 (mult opcode) +`endif + +// 001_01010 (2a) lshiftright ------------------------------------- +`ifdef ENABLE_BARREL +// b = mem[sp] & 5'b1111 : limit to 5 bits (max 31 shifts) +// b = b | 7'b01_00000 : shift right, logical +// sp=sp+1 +// a = mem[sp] +// a = a >> b +// mem[sp] = a +memory[168] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // b = mem[sp] & 5'b11111 + `MC_MEM_R | `MC_ALU_AND | `MC_SEL_ALU_MC_CONST | (31 << `P_ADDR) | `MC_W_B; +memory[169] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_OR | // b = b | 7'b01_00000 (shift right, logical) + `MC_SEL_ALU_MC_CONST | (32 << `P_ADDR) | `MC_W_B; +memory[170] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[171] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = mem[sp] | goto @shift_cont + `MC_W_A_MEM | `MC_BRANCH | ((432 >> 2) << `P_ADDR); +`else + `ifdef ENABLE_A_SHIFT +// a = mem[sp] & 5'b11111 +// sp=sp+1 +// b = FLIP(mem[sp]) +// label: a <= 0 ? goto @fin +// b = b << 1 +// a = a - 1 || goto @label +// fin: a = FLIP(b) +// mem[sp]=a +memory[168] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = mem[sp] & 5'b11111 + `MC_MEM_R | `MC_ALU_AND | `MC_SEL_ALU_MC_CONST | + (31 << `P_ADDR) | `MC_W_A; +memory[169] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[170] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // b = FLIP(mem[sp]) + `MC_ALU_FLIP | `MC_W_B; +memory[171] = `MC_BRANCH | ((448 >> 2) << `P_ADDR); // goto @lshiftleft_loop + `else + memory[168] = `MC_GO_BREAKPOINT; + `endif +`endif + +// 001_01011 (2b) ashiftleft ------------------------------------- +`ifdef ENABLE_BARREL +// b = mem[sp] & 5'b11111 : 5 bit shift +// b = b | 7'b10_00000 : shift left, arithmetic +// sp=sp+1 +// a = mem[sp] +// a = a <> 2) << `P_ADDR); +`else +// a = mem[sp] & 5'b11111 +// sp = sp + 1 +// b = mem[sp] +// label: a <= 0 ? goto @fin +// b = b << 1 +// a = a - 1 || goto @label +// fin: a = b +// mem[sp] = a +memory[172] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = mem[sp] & 5'b11111 + `MC_MEM_R | `MC_ALU_AND | `MC_SEL_ALU_MC_CONST | + (31 << `P_ADDR) | `MC_W_A; +memory[173] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[174] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // b = mem[sp] + `MC_W_B; +memory[175] = `MC_BRANCH | ((440 >> 2) << `P_ADDR); // goto @ashiftleft_loop +`endif + +// 001_01100 (2c) ashiftright ------------------------------------- +`ifdef ENABLE_BARREL +// b = mem[sp] & 5'b11111 : 5 bit shift +// b = b | 7'b00_00000 : shift right, arithmetic +// sp=sp+1 +// a = mem[sp] +// a = a >>signed b +// mem[sp] = a +memory[176] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // b = mem[sp] & 5'b11111 + `MC_MEM_R | `MC_ALU_AND | `MC_SEL_ALU_MC_CONST | (31 << `P_ADDR) | `MC_W_B; +memory[177] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[178] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = mem[sp] | goto @shift_cont + `MC_W_A_MEM | `MC_BRANCH | ((432 >> 2) << `P_ADDR); +`else + `ifdef ENABLE_A_SHIFT +// a = mem[sp] & 5'b11111 +// sp = sp + 1 +// b = FLIP(mem[sp]) +// label: a <= 0 ? goto @fin +// b = b signed_<< 1 +// a = a - 1 || goto @label +// fin: a = FLIP(b) +// mem[sp] = a +memory[176] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = mem[sp] & 5'b11111 + `MC_MEM_R | `MC_ALU_AND | `MC_SEL_ALU_MC_CONST | + (31 << `P_ADDR) | `MC_W_A; +memory[177] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[178] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // b = FLIP(mem[sp]) + `MC_ALU_FLIP | `MC_W_B; +memory[179] = `MC_BRANCH | ((432 >> 2) << `P_ADDR); // goto @ashiftright_loop + `else +memory[176] = `MC_GO_BREAKPOINT; + `endif +`endif + +// 001_01101 (2d) call ------------------------------------- +// a = mem[sp] +// mem[sp]=pc+1 +// pc = a +memory[180] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // b = mem[sp] + `MC_MEM_R | `MC_W_B; +memory[181] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; // a = pc + 1 +memory[182] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_ALU_NOP_B | // mem[sp] = a || pc = b + `MC_SEL_ALU_B | `MC_W_PC; +memory[183] = `MC_FETCH; // op_cached? decode : goto next + +// 001_01110 (2e) eq ------------------------------------- +// a = mem[sp] +// sp = sp + 1 +// (mem[sp] - a == 0) ? mem[sp] = 1 : mem[sp] = 0 +memory[184] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = NOT(mem[sp]) + `MC_SEL_READ_DATA | `MC_ALU_NOT | `MC_W_A; +memory[185] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR |`MC_ALU_PLUS | // a = a + 1 + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[186] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[187] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = mem[sp] + a || goto @eq_check + `MC_ALU_PLUS |`MC_SEL_ALU_A | `MC_W_A | + ( (416 >> 2) << `P_ADDR) | `MC_BRANCH; + +// 001_01111 (2f) neq ------------------------------------- +// a = mem[sp] +// sp = sp + 1 +// (mem[sp] - a != 0) ? mem[sp] = 1 : mem[sp] = 0 +memory[188] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = NOT(mem[sp]) + `MC_MEM_R | `MC_ALU_NOT | `MC_W_A; +memory[189] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR |`MC_ALU_PLUS | // a = a + 1 + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[190] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[191] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = mem[sp] + a || goto @neq_check + `MC_ALU_PLUS | `MC_SEL_ALU_A | `MC_W_A | + ( (412 >> 2) << `P_ADDR) | `MC_BRANCH; + +// 001_10000 (30) neg ------------------------------------- +// a = NOT(mem[sp]) +// a = a + 1 +// mem[sp] = a +memory[192] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = NOT(mem[sp]) + `MC_MEM_R | `MC_ALU_NOT | `MC_W_A; +memory[193] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a = a + 1 + (1 << `P_ADDR) | `MC_SEL_ALU_MC_CONST | `MC_W_A; +memory[194] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 001_10001 (31) sub ------------------------------------- +// mem[sp+1] = mem[sp+1] - mem[sp] +// sp = sp + 1 +memory[196] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = NOT(mem[sp]) + `MC_MEM_R | `MC_ALU_NOT | `MC_W_A; +memory[197] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a = a + 1 + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[198] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[199] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = mem[sp] + a || goto @sub_cont (set_mem[sp]=a) + `MC_ALU_PLUS | `MC_SEL_ALU_A | `MC_W_A | ((400>>2) << `P_ADDR) | + `MC_BRANCH; + +// 001_10010 (32) xor ------------------------------------- +`ifdef ENABLE_XOR +// mem[sp+1] = mem[sp+1] ^ mem[sp] +// sp = sp + 1 +memory[200] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[201] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = a ^ mem[sp] + `MC_ALU_XOR |`MC_SEL_ALU_A | `MC_W_A; +memory[202] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else +// ALU doesn't perform XOR operation +// mem[sp+1] = mem[sp] ^ mem[sp+1] -> A^B=(A&~B)|(~A&B) +// a = ~mem[sp] --> a = ~A +// sp = sp + 1 +// a = mem[sp] & a --> a = ~A&B +// b = ~a --> b = A&~B +// a = a | b --> a = ~A&B | A&~B +// mem[sp] = a +memory[200] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = ~mem[sp] --> a=~A + `MC_ALU_NOT | `MC_W_A; +memory[201] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[202] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // a = mem[sp] & a --> a = ~A&B + `MC_ALU_AND | `MC_SEL_ALU_A | `MC_W_A; +memory[203] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_NOT | // b = ~a || goto @xor_cont --> b = A&~B + `MC_W_B | `MC_BRANCH | ((428 >> 2) << `P_ADDR); +`endif + +// 001_10011 (33) loadb ------------------------------------- +`ifdef ENABLE_BYTE_SELECT +// mem[sp] = BYTE(mem[sp], mem[mem[sp]]) +memory[204] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // a = mem[sp] + `MC_MEM_R | `MC_W_A; +memory[205] = `MC_SEL_ADDR_A | `MC_SEL_READ_DATA | `MC_MEM_R | // a = byte(a, mem[a]) + `MC_W_A | `MC_BYTE; +memory[206] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else +// b=pc +// pc = mem[sp] +// opcode_cache=mem[pc] +// a = opcode +// mem[sp]=a +// pc=b +// fetch +memory[204] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | // b = pc + `MC_W_B; +memory[205] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // pc = mem[sp] + `MC_W_PC; +memory[206] = `MC_SEL_ADDR_PC | `MC_SEL_READ_DATA | `MC_MEM_R | // opcode_cache = mem[pc] + `MC_W_OPCODE; +memory[207] = `MC_SEL_ALU_OPCODE | `MC_ALU_NOP_B | `MC_W_A | // a = opcode -> byte(pc, mem[pc]) || goto @loadb_continued + `MC_BRANCH | ( (396 >> 2) << `P_ADDR); +`endif + +// 001_10100 (34) storeb ------------------------------------- +`ifdef ENABLE_BYTE_SELECT +// BYTE( mem[mem[sp]] <= mem[sp+1] ) +// sp = sp + 2 +memory[208] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // b = mem[sp] + `MC_MEM_R | `MC_W_B; +memory[209] = `MC_SP_PLUS_4; // sp = sp + 1 +memory[210] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a = mem[sp] || sp=sp+1 + `MC_SP_PLUS_4; +memory[211] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_BYTE | `MC_GO_NEXT; // BYTE(mem[b] = a) +`else +memory[208] = `MC_GO_BREAKPOINT; +`endif + +// 001_10101 (35) div ------------------------------------- +`ifdef ENABLE_DIV +// *** TODO: CHECK IF DIVIDE BY ZERO AND RAISE EXCEPTION *** +// mem[sp+1] = mem[sp+1] / mem[sp] +// sp = sp + 1 +memory[212] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[213] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // b = mem[sp] + `MC_W_B; +memory[214] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // a = a / b DON'T COMBINE MULTICYCLE ALU + `MC_ALU_DIV | `MC_W_A; // OPERATIONS WITH MEMORY READ/WRITE +memory[215] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else +memory[212] = `MC_GO_BREAKPOINT; +`endif + +// 001_10110 (36) mod ------------------------------------- +`ifdef ENABLE_DIV +// mem[sp+1] = mem[sp+1] % mem[sp] +// sp = sp + 1 +memory[216] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[217] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | // b = mem[sp] + `MC_W_B; +memory[218] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // a = a % b DON'T COMBINE MULTICYCLE ALU + `MC_ALU_MOD | `MC_W_A; // OPERATIONS WITH MEMORY READ/WRITE +memory[219] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else +memory[216] = `MC_GO_BREAKPOINT; +`endif + +// 001_10111 (37) eqbranch ------------------------------------- +// a = sp + 1 +// a = mem[a] +// a = mem[sp] || a == 0 ? { pc = pc + a; sp = sp + 2 } +// else { sp = sp + 2, pc = pc + 1 } +memory[220] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | // a = sp + 1 + `MC_ALU_PLUS | `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR) | + `MC_W_A; +memory[221] = `MC_SEL_ADDR_A | `MC_MEM_R | `MC_W_A; // a = mem[a] +memory[222] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A | // a = mem[sp] || a == 0 ? goto 456 (sp=sp+2, pc=pc+a) + `MC_BRANCHIF_A_ZERO | ((456>>2) << `P_ADDR); +memory[223] = `MC_BRANCH | ((460>>2) << `P_ADDR); // else goto 460 (sp=sp+2, pc=pc+1) + +// 001_11000 (38) neqbranch ------------------------------------- +// a = sp + 1 +// a = mem[a] +// a = mem[sp] || a == 0 ? { sp = sp + 2, pc = pc + 1 } +// else { sp = sp + 2, pc = pc + a } +memory[224] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | // a = sp + 1 + `MC_ALU_PLUS | `MC_SEL_ALU_MC_CONST | (4 << `P_ADDR) | + `MC_W_A; +memory[225] = `MC_SEL_ADDR_A | `MC_MEM_R | `MC_W_A; // a = mem[a] +memory[226] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A | // a = mem[sp] || a == 0 ? goto 460 (sp=sp+2, pc=pc+1) + `MC_BRANCHIF_A_ZERO | ((460>>2) << `P_ADDR); +memory[227] = `MC_BRANCH | ((456>>2) << `P_ADDR); // else goto 456 (sp=sp+2, pc=pc+a) + +// 001_11001 (39) poppcrel ------------------------------------- +// a = mem[sp] +// sp = sp + 1 +// pc = pc + a +memory[228] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a=mem[sp] || sp=sp+1 + `MC_W_A_MEM | `MC_SP_PLUS_4; +memory[229] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_SEL_ALU_A | // pc = pc + a + `MC_ALU_PLUS | `MC_W_PC; +memory[230] = `MC_FETCH; // op_cached? decode : goto next + +// 001_11010 (3a) config ------------------------------------- +memory[232] = `MC_GO_BREAKPOINT; + +// 001_11011 (3b) pushpc ------------------------------------- +// sp = sp - 1 +// mem[sp] = pc +memory[236] = `MC_CLEAR_IDIM | `MC_SP_MINUS_4 | `MC_W_A; // a = sp = sp - 1 +memory[237] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 001_11100 (3c) syscall_emulate ------------------------------ +memory[240] = `MC_GO_BREAKPOINT; + +// 001_11101 (3d) pushspadd ------------------------------------- +// a = mem[sp] << 2 +// mem[sp] = a + sp +`ifdef ENABLE_BARREL +memory[244] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | // a = mem[sp] + `MC_W_A_MEM; +memory[245] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_BARREL | // a = a << 2 (left,arithmetic->10_00010) + `MC_SEL_ALU_MC_CONST | ( 66 << `P_ADDR) | `MC_W_A; +memory[246] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_SEL_ALU_A | // a = a + sp + `MC_ALU_PLUS | `MC_W_A; +memory[247] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else +memory[244] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM; // a = mem[sp] +memory[245] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_A | // a = a + a + `MC_ALU_PLUS | `MC_W_A; +memory[246] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_SEL_ALU_A | // a = a + a + `MC_ALU_PLUS | `MC_W_A; +memory[247] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_SEL_ALU_A | // a = a + sp || goto @cont (->mem[sp] = a) + `MC_ALU_PLUS | `MC_W_A | ((400>>2) << `P_ADDR) | `MC_BRANCH; +`endif + +// 001_11110 (3e) halfmult ------------------------------------- +memory[248] = `MC_GO_BREAKPOINT; + +// 001_11111 (3f) callpcrel ------------------------------------- +// a = mem[sp] +// mem[sp]=pc+1 +// pc = pc + a +memory[252] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | // b = mem[sp] + `MC_MEM_R | `MC_W_B; +memory[253] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a = pc + 1 + `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[254] = `MC_SEL_ADDR_SP | `MC_MEM_W; // mem[sp] = a; +memory[255] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_SEL_ALU_B | // pc = pc + b, goto @fetch + `MC_ALU_PLUS | `MC_W_PC | `MC_GO_FETCH; + +// --------------------- MICROCODE HOLE ----------------------------------- + + + + +// --------------------- CONTINUATION OF COMPLEX OPCODES ------------------ + +`ifdef ENABLE_BYTE_SELECT +// ipsum_end: ---------- +memory[392] = `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | (0 << `P_ADDR) | // sp=0 + `MC_W_SP; +memory[393] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | // pc=mem[sp] restore next pc + `MC_W_PC; +memory[394] = `MC_SP_PLUS_4; // sp=sp+4 +memory[395] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_SEL_READ_DATA | // sp=mem[sp] restore sp + `MC_W_SP; +memory[396] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_W_A; // a=b (sum) +memory[397] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_FETCH; // mem[sp]=a || fetch (return sum) +`endif + +`ifndef ENABLE_BYTE_SELECT +// loadb continued microcode ----- +// mem[sp]=a || pc=b +// opcode_cache=mem[pc] || go next +memory[396] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_SEL_ALU_B | // mem[sp]=a || pc=b + `MC_ALU_NOP_B | `MC_W_PC; +memory[397] = `MC_SEL_ADDR_PC | `MC_MEM_R | `MC_W_OPCODE | `MC_GO_NEXT; // opcode_cache=mem[pc] || go next +`endif + +// sub/pushspadd continued microcode ---------------- +memory[400] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// ----- hole ------ + +`ifdef ENABLE_BYTE_SELECT +// ipsum_continue2: ------------ +memory[408] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // pc=pc-1; a=pc + `MC_SEL_ALU_MC_CONST | ((-1 & 127) << `P_ADDR) | `MC_W_PC | + `MC_W_A; +memory[409] = `MC_BRANCH | ((124 >> 2) << `P_ADDR); // goto @ipsum_loop +`endif + +// neqcheck ---------- +memory[412] = `MC_BRANCHIF_A_ZERO | ((468 >> 2) << `P_ADDR); // a == 0 ? goto @set_mem[sp]=0 +memory[413] = `MC_BRANCH | ((464 >> 2) << `P_ADDR); // else goto @set_mem[sp]=1 + +// eqcheck ---------- +memory[416] = `MC_BRANCHIF_A_ZERO | ((464 >> 2) << `P_ADDR); // a == 0 ? goto @set_mem[sp]=1 +memory[417] = `MC_BRANCH | ((468 >> 2) << `P_ADDR); // else goto @set_mem[sp]=0 + +// lessthanorequal_check ---- +memory[420] = `MC_BRANCHIF_A_ZERO | `MC_BRANCHIF_A_NEG | ((464 >> 2) << `P_ADDR); // a <= 0 ? goto @set_mem[sp]=1 +memory[421] = `MC_BRANCH | ((468 >> 2) << `P_ADDR); // else goto @set_mem[sp]=0 + +// lessthan_check ---- +memory[424] = `MC_BRANCHIF_A_NEG | ((464 >> 2) << `P_ADDR); // a < 0 ? goto @set_mem[sp]=1 +memory[425] = `MC_BRANCH | ((468 >> 2) << `P_ADDR); // else goto @set_mem[sp]=0 + +// xor_cont continued microcode ----------------------------------- +`ifndef ENABLE_XOR +memory[428] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_OR | // a = a | b --> a = ~A&B | A&~B + `MC_SEL_ALU_B | `MC_W_A; +memory[429] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`endif + +// ashiftright_loop continued microcode ----------------------------------- +`ifdef ENABLE_BARREL +memory[432] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_BARREL | // a = a {<<|>>} b + `MC_SEL_ALU_B | `MC_W_A; +memory[433] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`else + `ifdef ENABLE_A_SHIFT +memory[432] = `MC_BRANCHIF_A_ZERO | `MC_BRANCHIF_A_NEG | ((436 >> 2) << `P_ADDR); // (a <= 0) ? goto @ashiftright_exit +memory[433] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a = a + (-1) + `MC_SEL_ALU_MC_CONST | ( (-1 & 127) << `P_ADDR) | `MC_W_A; +memory[434] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // b = b signed_<< 1 || goto @ashiftright_loop + `MC_SEL_ALU_B | `MC_W_B | `MC_BRANCH | ((432 >>2) << `P_ADDR); +// ashiftright_exit +memory[436] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_FLIP | // a = FLIP(b) + `MC_W_A; +memory[437] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + `endif +`endif + +// ashiftleft_loop continued microcode ----------------------------------- +`ifndef ENABLE_BARREL +memory[440] = `MC_BRANCHIF_A_ZERO | `MC_BRANCHIF_A_NEG | ((444 >> 2) << `P_ADDR);// (a <= 0) ? goto @ashiftleft_exit +memory[441] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a = a + (-1) + `MC_SEL_ALU_MC_CONST | ( (-1 & 127) << `P_ADDR) | `MC_W_A; +memory[442] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // b = b << 1 || goto @ashiftleft_loop + `MC_SEL_ALU_B | `MC_W_B | `MC_BRANCH | ((440 >>2) << `P_ADDR); +// ashiftleft_exit +memory[444] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_NOP | // a = b + `MC_W_A; +memory[445] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`endif + +// lshiftright_loop continued microcode ----------------------------------- +`ifdef ENABLE_A_SHIFT +memory[448] = `MC_BRANCHIF_A_ZERO | `MC_BRANCHIF_A_NEG | ((452 >> 2) << `P_ADDR);// (a <= 0) ? goto @lshiftright_exit +memory[449] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a = a + (-1) + `MC_SEL_ALU_MC_CONST | ( (-1 & 127) << `P_ADDR) | `MC_W_A; +memory[450] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // b = b << 1 || goto @lshiftright_loop + `MC_SEL_ALU_B | `MC_W_B | `MC_BRANCH | ((448 >>2) << `P_ADDR); +// lshiftright_exit +memory[452] = `MC_SEL_ADDR_B | `MC_SEL_READ_ADDR | `MC_ALU_FLIP | // a = FLIP(b) + `MC_W_A; +memory[453] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a +`endif + +// neqbranch / eqbranch --- continued microcode ------------------------------------- +// sp = sp + 2 +// pc = pc + a +memory[456] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // sp = sp + 2 + `MC_SEL_ALU_MC_CONST | (8 << `P_ADDR) | `MC_W_SP; +memory[457] = `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | `MC_SEL_ALU_A | // pc = pc + a + `MC_ALU_PLUS | `MC_W_PC; +memory[458] = `MC_FETCH; // op_cached? decode : goto fetch + +// neqbranch / eqbranch --- continued microcode ------------------------------------- +// sp = sp + 2 +// pc = pc + 1 +memory[460] = `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // sp = sp + 2 + `MC_SEL_ALU_MC_CONST | (8 << `P_ADDR) | `MC_W_SP; +memory[461] = `MC_PC_PLUS_1; // pc = pc + 1 +memory[462] = `MC_FETCH; // op_cached? decode : goto fetch + +// neq / eq / lessthan_1 --- continued microcode -------------------- +// mem[sp] = 1 +memory[464] = `MC_SEL_ALU_MC_CONST | `MC_ALU_NOP_B | (1 << `P_ADDR) | // a = 1 + `MC_W_A; +memory[465] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// neq / eq / lessthan_0 --- continued microcode -------------------- +// mem[sp] = 0 +memory[468] = `MC_SEL_ALU_MC_CONST | `MC_ALU_NOP_B | (0 << `P_ADDR) | // a = 0 + `MC_W_A; +memory[469] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// MICROCODE ENTRY POINT AFTER RESET ------------------------------- +// initialize cpu registers +// sp = @SP_START +// pc = @RESET_VECTOR +memory[473] = 0; // reserved and empty for correct cpu startup +memory[474] = `MC_CLEAR_IDIM |`MC_SEL_ALU_MC_CONST | `MC_ALU_NOP_B | // sp = @SP_START + (`SP_START << `P_ADDR) | `MC_W_SP; +memory[475] = `MC_SEL_ALU_MC_CONST | `MC_ALU_NOP_B | `MC_W_PC | // pc = @RESET + (`RESET_VECTOR << `P_ADDR) | `MC_EXIT_INTERRUPT; // enable interrupts on reset +// fall throught fetch/decode + +// FETCH / DECODE ------------------------------------- +// opcode=mem[pc] +// decode (goto microcode entry point for opcode) +memory[476] = `MC_SEL_ADDR_PC | `MC_SEL_READ_DATA | `MC_MEM_R | // opcode_cache = mem[pc] + `MC_W_OPCODE; +memory[477] = `MC_DECODE; // decode jump to microcode + +// NEXT OPCODE ------------------------------------- +// pc = pc + 1 +// opcode cached ? decode : goto fetch +memory[480] = `MC_PC_PLUS_1; // pc = pc + 1 +memory[481] = `MC_FETCH; // pc_cached ? decode else fetch,decode + +// INTERRUPT REQUEST ------------------------------------- +// sp = sp - 1 +// mem[sp] = pc +// pc = mem[EMULATED_VECTORS + 0] +memory[484] = `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | (0 << `P_ADDR) | // b = 0 (#0 in emulate table) || disable interrupts + `MC_W_B | `MC_ENTER_INTERRUPT; +memory[485] = `MC_EMULATE; // emulate #0 (interrupt) + +// ---------------- OPCODES WITH PARAMETER IN OPCODE ---------------- + +// im x (idim=0) 1_xxxxxxx ------------------------------------- +// sp = sp - 1 +// mem[sp] = IMM(IDIM, opcode) +// idim = 1 +memory[488] = `MC_SP_MINUS_4; // sp = sp - 1 +memory[489] = `MC_SEL_ALU_OPCODE | `MC_ALU_IM | `MC_W_A; // a = IMM(IDIM, opcode) +memory[490] = `MC_SET_IDIM | `MC_SEL_ADDR_SP | `MC_MEM_W | // MEM[sp] = a; IDIM=1 + `MC_GO_NEXT; + +// 1_xxxxxxx im x (idim=1) ------------------------------------- +// mem[sp] = IMM(IDIM, mem[sp], opcode) +memory[491] = `MC_SET_IDIM | `MC_SEL_READ_DATA | `MC_SEL_ADDR_SP | // a = IMM(IDIM, MEM[sp], opcode) + `MC_MEM_R | `MC_SEL_ALU_OPCODE | `MC_ALU_IM | `MC_W_A; +memory[492] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // MEM[sp] = a + +// 010_xxxxx storesp x +// mem[sp + x<<2] = mem[sp] +// sp = sp + 1 +memory[493] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | // b = sp + offset + `MC_ALU_PLUS_OFFSET | `MC_SEL_ALU_OPCODE | `MC_W_B; +memory[494] = `MC_SEL_ADDR_SP | `MC_MEM_R | `MC_W_A_MEM | // a=mem[sp] || sp=sp+1 + `MC_SP_PLUS_4; +memory[495] = `MC_SEL_ADDR_B | `MC_MEM_W | `MC_GO_NEXT; // mem[b] = a + +// 011_xxxxx loadsp x ------------------------------------- +// mem[sp-1] = mem [sp + x<<2] +// sp = sp - 1 +memory[496] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | // a = sp + offset + `MC_ALU_PLUS_OFFSET | `MC_SEL_ALU_OPCODE | `MC_W_A; +memory[497] = `MC_SEL_ADDR_A | `MC_SEL_READ_DATA | `MC_MEM_R | `MC_W_A; // a = mem[a] +memory[498] = `MC_SP_MINUS_4; // sp = sp - 1 +memory[499] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 0001_xxxx addsp x ------------------------------------- +// mem[sp] = mem[sp] + mem[sp + x<<2] +memory[500] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_SP | `MC_SEL_READ_ADDR | // a = sp + offset + `MC_ALU_PLUS_OFFSET | `MC_SEL_ALU_OPCODE | `MC_W_A; +memory[501] = `MC_SEL_ADDR_A | `MC_SEL_READ_DATA | `MC_MEM_R | `MC_W_A; // a = mem[a] +memory[502] = `MC_SEL_ADDR_SP | `MC_SEL_READ_DATA | `MC_MEM_R | + `MC_ALU_PLUS | `MC_SEL_ALU_A | `MC_W_A; // a = a + mem[sp] +memory[503] = `MC_SEL_ADDR_SP | `MC_MEM_W | `MC_GO_NEXT; // mem[sp] = a + +// 001_xxxxx emulate x ------------------------------------- +// +// sp = sp - 1 +// mem[sp] = pc + 1 emulated opcode microcode must set b to +// a=@EMULATION_TABLE offset inside emulated_table prior to +// pc = mem[a + b] calling the emulate microcode +// fetch +memory[504] = `MC_CLEAR_IDIM | `MC_SEL_ADDR_PC | `MC_SEL_READ_ADDR | // a = pc + 1 + `MC_ALU_PLUS | `MC_SEL_ALU_MC_CONST | (1 << `P_ADDR) | `MC_W_A; +memory[505] = `MC_SP_MINUS_4; // sp = sp - 1 +memory[506] = `MC_SEL_ADDR_SP | `MC_MEM_W; // mem[sp] = a +memory[507] = `MC_ALU_NOP_B | `MC_SEL_ALU_MC_CONST | `MC_W_A | // a = @vector_emulated + (`EMULATION_VECTOR << `P_ADDR); +memory[508] = `MC_SEL_ADDR_A | `MC_SEL_READ_ADDR | `MC_ALU_PLUS | // a = a + b + `MC_SEL_ALU_B | `MC_W_A; +memory[509] = `MC_SEL_ADDR_A | `MC_MEM_R | `MC_SEL_READ_DATA | // pc = mem[a] + `MC_ALU_NOP | `MC_W_PC; +memory[510] = `MC_FETCH; + +// --------------------- END OF MICROCODE PROGRAM -------------------------- +end + +endmodule diff --git a/zpu/hdl/avalanche/readme.txt b/zpu/hdl/avalanche/readme.txt new file mode 100644 index 0000000..3eb1baf --- /dev/null +++ b/zpu/hdl/avalanche/readme.txt @@ -0,0 +1,91 @@ +This ZPU implementation, codenamed "avalanche" was +contributed by Antonio Anton . + +It's most interesting aspects are it's implementation using +microcode, small size, reduced code size overhead and that +it's implemented in Verilog. + +Please direct any questions to the zylin-zpu mailing list. + +The most urgently needed patches would be to provide working +simulation examples and improved documentation. + + +Øyvind Harboe + + +Notes from Antonio: + +Hi, + +attached goes my zpu implementation in verilog in case anybody is +interested in. Code is quite commented. Also microcode and opcodes are +exhaustive commented (and more accurate that the HTML documentation in +some cases :-) ). + +At the moment I have no time to send a working environment but I will +get some time in next days and prepare a clean environment +(software/hardware) and send to the list. The target HW is spartan3 +starter kit board (all peripherals working: vga, sram, uarts, etc.). + +Feel free to ask any question to the list I will do my best to answer +quickly. + +Regards +Antonio + +Hi, + +the zpu_core is complete and lot of bugs has been solved in the past but +extensive testing and a complete test program has not been +defined/executed; anyway I'm quite confident it works: this core +executes eCos, FreeRTOS, Forth and other applications. + +Regarding FPGA resources for a "balanced" implementation (not the +smallest, not the fastest): + +-cpu+alu+microcode rom: 671 LUT + 239 FF + 1 BRAM (50% of LUT is ALU) +-complete soc (cpu, vga, uart, memory controller, interrupt controller, +timers, gpio, spi, etc.): 1317 LUT + 716 FF + 1 BRAM + +Regarding "modelsim hello world"; I'm sorry but I don't modelsim; +instead I use Icarus Verilog & gtkwave. The core has a "debug" facility +which displays all opcode and registers (memory changes, sp, pc, etc..) +during simulation execution. + +Regards +Antonio + + +> > Regarding FPGA resources for a "balanced" implementation (not the +> > smallest, not the fastest): +> > +> > -cpu+alu+microcode rom: 671 LUT + 239 FF + 1 BRAM (50% of LUT is ALU) +> +> Are there any emulated instructions not implemented in +> microcode? +> + +*All* zpu opcodes are microcoded. For some opcodes (like *shift*), +there are two versions; 32 bit barrel shift in HDL (up to 32 clocks) or +1 bit shift in HDL microcode drived (up to ~130 clocks). They are +selectable via `DEFINES in the zpu_core_defines.v + +Other opcodes like mult and div are 32 bit HDL only at the moment (there +are enough room in microcode memory to implement as microcode) and +software emulable as well. + +For the above figures (671 LUT + 239 FF): *shift* are 32 bit HDL and +mult/div are software implemented. + +There are new opcodes (as per my needs) like memory bulk copy (sncpy, +wcpy, wset) and ip checksum calculation (ipsum). There are room in +microccode memory to define new opcodes using the holes in the ISA (for +a complete list of opcodes and its function please see +zpu_core_defines.v). + +Some future ideas (easy to implement in microcode) +-on-chip debug +-microcode update via software + +Regards -- cgit v1.1 From c3a6c5f8c614919982ef31c9e8e324525ce105b1 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Fri, 22 Oct 2010 18:18:33 +0200 Subject: zpu_core_small: load memAAddr is not being initialized during IO read operations (LOAD). This might cause spurious writes to invalid addresses, and invalid values to be loaded onto the stack. This patch explicitly sets memAAddr to correct value (sp). --- zpu/hdl/zpu4/core/zpu_core_small.vhd | 1 + 1 file changed, 1 insertion(+) diff --git a/zpu/hdl/zpu4/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd index f9484bb..681fb09 100644 --- a/zpu/hdl/zpu4/core/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd @@ -494,6 +494,7 @@ begin null; end case; when State_ReadIO => + memAAddr <= sp; if (in_mem_busy = '0') then state <= State_Fetch; memAWriteEnable <= '1'; -- cgit v1.1 From b103d820a57859fc4aad48f50029e12cc1db7611 Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Tue, 1 Mar 2011 17:36:01 +0100 Subject: beautify Signed-off-by: Bert Lange --- zpu/hdl/zpu4/core/zpu_config.vhd | 32 +- zpu/hdl/zpu4/core/zpu_core.vhd | 1820 ++++++++++++++++++---------------- zpu/hdl/zpu4/core/zpu_core_small.vhd | 1065 ++++++++++---------- zpu/hdl/zpu4/core/zpupkg.vhd | 338 ++++--- 4 files changed, 1679 insertions(+), 1576 deletions(-) diff --git a/zpu/hdl/zpu4/core/zpu_config.vhd b/zpu/hdl/zpu4/core/zpu_config.vhd index 4fecf01..112dd01 100644 --- a/zpu/hdl/zpu4/core/zpu_config.vhd +++ b/zpu/hdl/zpu4/core/zpu_config.vhd @@ -39,19 +39,21 @@ use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.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; - constant maxAddrBitBRAM : integer := 14; - - -- start byte address of stack. - -- point to top of RAM - 2*words - constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := - conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); + + -- 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; + constant maxAddrBitBRAM : integer := 14; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := + conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); + end zpu_config; diff --git a/zpu/hdl/zpu4/core/zpu_core.vhd b/zpu/hdl/zpu4/core/zpu_core.vhd index 69da686..ff9449f 100644 --- a/zpu/hdl/zpu4/core/zpu_core.vhd +++ b/zpu/hdl/zpu4/core/zpu_core.vhd @@ -33,8 +33,8 @@ -- are those of the authors and should not be interpreted as representing -- official policies, either expressed or implied, of the ZPU Project. -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; +library ieee; +use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; @@ -58,899 +58,957 @@ use work.zpupkg.all; -- 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); + 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, -State_Interrupt -); - - -signal pc : unsigned(maxAddrBitIncIO downto 0); -signal sp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal incSp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal incIncSp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal decSp : unsigned(maxAddrBitIncIO downto minAddrBit); -signal stackA : unsigned(wordSize-1 downto 0); -signal binaryOpResult : unsigned(wordSize-1 downto 0); -signal binaryOpResult2 : unsigned(wordSize-1 downto 0); -signal multResult2 : unsigned(wordSize-1 downto 0); -signal multResult3 : unsigned(wordSize-1 downto 0); -signal multResult : unsigned(wordSize-1 downto 0); -signal multA : unsigned(wordSize-1 downto 0); -signal multB : unsigned(wordSize-1 downto 0); -signal stackB : unsigned(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 inInterrupt: 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); + 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, + State_Interrupt + ); + + + signal pc : unsigned(maxAddrBitIncIO downto 0); + signal sp : unsigned(maxAddrBitIncIO downto minAddrBit); + signal incSp : unsigned(maxAddrBitIncIO downto minAddrBit); + signal incIncSp : unsigned(maxAddrBitIncIO downto minAddrBit); + signal decSp : unsigned(maxAddrBitIncIO downto minAddrBit); + signal stackA : unsigned(wordSize-1 downto 0); + signal binaryOpResult : unsigned(wordSize-1 downto 0); + signal binaryOpResult2 : unsigned(wordSize-1 downto 0); + signal multResult2 : unsigned(wordSize-1 downto 0); + signal multResult3 : unsigned(wordSize-1 downto 0); + signal multResult : unsigned(wordSize-1 downto 0); + signal multA : unsigned(wordSize-1 downto 0); + signal multB : unsigned(wordSize-1 downto 0); + signal stackB : unsigned(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 inInterrupt : 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 : unsigned(4 downto 0); - variable tSpOffset : unsigned(4 downto 0); - variable nextPC : unsigned(maxAddrBitIncIO downto 0); - variable tNextState : InsnType; - variable tDecodedOpcode : InsnArray; - variable tMultResult : unsigned(wordSize*2-1 downto 0); - begin - if areset = '1' then - state <= State_Idle; - break <= '0'; - sp <= unsigned(spStart(maxAddrBitIncIO downto minAddrBit)); - - pc <= (others => '0'); - idim_flag <= '0'; - begin_inst <= '0'; - inInterrupt <= '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(to_integer(pc(byteBits-1 downto 0)))(4); - spOffset(3 downto 0):=unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(3 downto 0)); - nextPC := pc + 1; - - -- prepare trace snapshot - trace_opcode <= opcode(to_integer(pc(byteBits-1 downto 0))); - trace_pc <= std_logic_vector(pc); - trace_sp <= std_logic_vector(sp); - trace_topOfStack <= std_logic_vector(stackA); - trace_topOfStackB <= std_logic_vector(stackB); - begin_inst <= '0'; - - if (interrupt='0') then - -- Interrupt ended, we can serve ISR again - inInterrupt <= '0'; - end if; - - 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 <= std_logic_vector(sp); - mem_readEnable <= '1'; - state <= State_Resync2; - end if; - when State_Resync2 => - if in_mem_busy='0' then - stackA <= unsigned(mem_read); - mem_addr <= std_logic_vector(incSp); - mem_readEnable <= '1'; - state <= State_Resync3; - end if; - when State_Resync3 => - if in_mem_busy='0' then - stackB <= unsigned(mem_read); - mem_addr <= std_logic_vector(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; - -- Do not recurse into ISR while interrupt line is active - if interrupt='1' and inInterrupt='0' and idim_flag='0' then - -- We got an interrupt, execute interrupt instead of next instruction - inInterrupt <= '1'; - sp <= decSp; - mem_writeEnable <= '1'; - mem_addr <= std_logic_vector(incSp); - mem_write <= std_logic_vector(stackB); - stackA <= (others => DontCareValue); - stackA(maxAddrBitIncIO downto 0) <= pc; - stackB <= stackA; - pc <= to_unsigned(32, maxAddrBitIncIO+1); - state <= State_Interrupt; - end if; - end if; - when State_Interrupt => - if in_mem_busy='0' then - mem_addr <= std_logic_vector(pc(maxAddrBitIncIO downto minAddrBit)); - mem_readEnable <= '1'; - state <= State_Decode; - report "ZPU jumped to interrupt!" severity note; - 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):=unsigned(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(to_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(to_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) <= unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(6 downto 0)); - else - mem_writeEnable <= '1'; - mem_addr <= std_logic_vector(incSp); - mem_write <= std_logic_vector(stackB); - stackB <= stackA; - sp <= decSp; - for i in wordSize-1 downto 7 loop - stackA(i) <= opcode(to_integer(pc(byteBits-1 downto 0)))(6); - end loop; - stackA(6 downto 0) <= unsigned(opcode(to_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 <= std_logic_vector(sp+spOffset); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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) <= unsigned(opcode(to_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 <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); - mem_write <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 - 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) - 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 <= std_logic_vector(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 <= std_logic_vector(stackB); - mem_addr <= std_logic_vector(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 <= std_logic_vector(stackB); - mem_addr <= std_logic_vector(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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); - mem_write <= std_logic_vector(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 <= std_logic_vector(stackB); - mem_addr <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(sp+spOffset+1); - end if; - when State_LoadSP3 => - if in_mem_busy='0' then - pc <= pc + 1; - state <= State_Execute; - stackB <= stackA; - stackA <= unsigned(mem_read); - end if; - when State_AddSP2 => - if in_mem_busy='0' then - pc <= pc + 1; - state <= State_Execute; - stackA <= stackA + unsigned(mem_read); - end if; - when State_Load2 => - if in_mem_busy='0' then - stackA <= unsigned(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) <= unsigned(mem_read(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); - mem_write <= mem_read; - mem_write(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8) <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(incIncSp); - sp <= incSp; - state <= State_Popped; - end if; - when State_BinaryOpResult => - state <= State_BinaryOpResult2; - when State_BinaryOpResult2 => - mem_readEnable <= '1'; - mem_addr <= std_logic_vector(incIncSp); - sp <= incSp; - stackA <= binaryOpResult2; - state <= State_Popped; - when State_Popped => - if in_mem_busy='0' then - pc <= pc + 1; - stackB <= unsigned(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; + 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 : unsigned(4 downto 0); + variable tSpOffset : unsigned(4 downto 0); + variable nextPC : unsigned(maxAddrBitIncIO downto 0); + variable tNextState : InsnType; + variable tDecodedOpcode : InsnArray; + variable tMultResult : unsigned(wordSize*2-1 downto 0); + begin + if areset = '1' then + state <= State_Idle; + break <= '0'; + sp <= unsigned(spStart(maxAddrBitIncIO downto minAddrBit)); + + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + inInterrupt <= '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(to_integer(pc(byteBits-1 downto 0)))(4); + spOffset(3 downto 0) := unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(3 downto 0)); + nextPC := pc + 1; + + -- prepare trace snapshot + trace_opcode <= opcode(to_integer(pc(byteBits-1 downto 0))); + trace_pc <= std_logic_vector(pc); + trace_sp <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(stackA); + trace_topOfStackB <= std_logic_vector(stackB); + begin_inst <= '0'; + + if (interrupt = '0') then + -- Interrupt ended, we can serve ISR again + inInterrupt <= '0'; + end if; + + 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 <= std_logic_vector(sp); + mem_readEnable <= '1'; + state <= State_Resync2; + end if; + + when State_Resync2 => + if in_mem_busy = '0' then + stackA <= unsigned(mem_read); + mem_addr <= std_logic_vector(incSp); + mem_readEnable <= '1'; + state <= State_Resync3; + end if; + + when State_Resync3 => + if in_mem_busy = '0' then + stackB <= unsigned(mem_read); + mem_addr <= std_logic_vector(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; + -- Do not recurse into ISR while interrupt line is active + if interrupt = '1' and inInterrupt = '0' and idim_flag = '0' then + -- We got an interrupt, execute interrupt instead of next instruction + inInterrupt <= '1'; + sp <= decSp; + mem_writeEnable <= '1'; + mem_addr <= std_logic_vector(incSp); + mem_write <= std_logic_vector(stackB); + stackA <= (others => DontCareValue); + stackA(maxAddrBitIncIO downto 0) <= pc; + stackB <= stackA; + pc <= to_unsigned(32, maxAddrBitIncIO+1); + state <= State_Interrupt; + end if; -- interrupt + end if; -- in_mem_busy + + when State_Interrupt => + if in_mem_busy = '0' then + mem_addr <= std_logic_vector(pc(maxAddrBitIncIO downto minAddrBit)); + mem_readEnable <= '1'; + state <= State_Decode; + report "ZPU jumped to interrupt!" severity note; + 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) := unsigned(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; -- tOpcode(3 downto 0) + end if; -- tOpcode + tDecodedOpcode(i) := tNextState; + + end loop; -- 0 to wordBytes-1 + + insn <= tDecodedOpcode(to_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(to_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) <= unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(6 downto 0)); + else + mem_writeEnable <= '1'; + mem_addr <= std_logic_vector(incSp); + mem_write <= std_logic_vector(stackB); + stackB <= stackA; + sp <= decSp; + for i in wordSize-1 downto 7 loop + stackA(i) <= opcode(to_integer(pc(byteBits-1 downto 0)))(6); + end loop; + stackA(6 downto 0) <= unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(6 downto 0)); + end if; -- idim_flag + end if; -- in_mem_busy + + when State_StoreSP => + if in_mem_busy = '0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_StoreSP2; + + mem_writeEnable <= '1'; + mem_addr <= std_logic_vector(sp+spOffset); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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) <= unsigned(opcode(to_integer(pc(byteBits-1 downto 0)))(4 downto 0)); + state <= State_Fetch; + end if; -- in_mem_busy + + 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 <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(incSp); + mem_write <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); + mem_write <= std_logic_vector(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 <= std_logic_vector(stackB); + mem_addr <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); + mem_readEnable <= '1'; + end if; + + when others => + sp <= (others => DontCareValue); + report "Illegal instruction" severity failure; + break <= '1'; + + end case; -- insn/State_Execute + + + when State_StoreSP2 => + if in_mem_busy = '0' then + mem_addr <= std_logic_vector(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 <= std_logic_vector(sp+spOffset+1); + end if; + + when State_LoadSP3 => + if in_mem_busy = '0' then + pc <= pc + 1; + state <= State_Execute; + stackB <= stackA; + stackA <= unsigned(mem_read); + end if; + + when State_AddSP2 => + if in_mem_busy = '0' then + pc <= pc + 1; + state <= State_Execute; + stackA <= stackA + unsigned(mem_read); + end if; + + when State_Load2 => + if in_mem_busy = '0' then + stackA <= unsigned(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) <= unsigned(mem_read(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_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 <= std_logic_vector(stackA(maxAddrBitIncIO downto minAddrBit)); + mem_write <= mem_read; + mem_write(((wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-to_integer(stackA(byteBits-1 downto 0)))*8) <= std_logic_vector(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 <= std_logic_vector(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 <= std_logic_vector(incIncSp); + sp <= incSp; + state <= State_Popped; + end if; + + when State_BinaryOpResult => + state <= State_BinaryOpResult2; + + when State_BinaryOpResult2 => + mem_readEnable <= '1'; + mem_addr <= std_logic_vector(incIncSp); + sp <= incSp; + stackA <= binaryOpResult2; + state <= State_Popped; + + when State_Popped => + if in_mem_busy = '0' then + pc <= pc + 1; + stackB <= unsigned(mem_read); + state <= State_Execute; + end if; + + when others => + sp <= (others => DontCareValue); + report "Illegal state" severity failure; + break <= '1'; + + end case; -- state + end if; -- clk'event + end process; diff --git a/zpu/hdl/zpu4/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd index 681fb09..1df9546 100644 --- a/zpu/hdl/zpu4/core/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd @@ -32,8 +32,8 @@ -- are those of the authors and should not be interpreted as representing -- official policies, either expressed or implied, of the ZPU Project. -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; +library ieee; +use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; @@ -42,531 +42,560 @@ use work.zpupkg.all; entity zpu_core is - Port ( clk : in std_logic; - -- asynchronous reset signal - areset : in std_logic; - -- this particular implementation of the ZPU does not - -- have a clocked enable signal - 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; - -- this implementation of the ZPU *always* reads and writes entire - -- 32 bit words, so mem_writeMask is tied to (others => '1'). - mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); - -- Set to one to jump to interrupt vector - -- The ZPU will communicate with the hardware that caused the - -- interrupt via memory mapped IO or the interrupt flag can - -- be cleared automatically - interrupt : in std_logic; - -- Signal that the break instruction is executed, normally only used - -- in simulation to stop simulation - break : out std_logic); + port ( + clk : in std_logic; + -- asynchronous reset signal + areset : in std_logic; + -- this particular implementation of the ZPU does not + -- have a clocked enable signal + 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; + -- this implementation of the ZPU *always* reads and writes entire + -- 32 bit words, so mem_writeMask is tied to (others => '1'). + mem_writeMask : out std_logic_vector(wordBytes-1 downto 0); + -- Set to one to jump to interrupt vector + -- The ZPU will communicate with the hardware that caused the + -- interrupt via memory mapped IO or the interrupt flag can + -- be cleared automatically + interrupt : in std_logic; + -- Signal that the break instruction is executed, normally only used + -- in simulation to stop simulation + break : out std_logic + ); end zpu_core; -architecture behave of zpu_core is -signal readIO : std_logic; - - -signal memAWriteEnable : std_logic; -signal memAAddr : unsigned(maxAddrBit downto minAddrBit); -signal memAWrite : unsigned(wordSize-1 downto 0); -signal memARead : unsigned(wordSize-1 downto 0); -signal memBWriteEnable : std_logic; -signal memBAddr : unsigned(maxAddrBit downto minAddrBit); -signal memBWrite : unsigned(wordSize-1 downto 0); -signal memBRead : unsigned(wordSize-1 downto 0); - - - -signal pc : unsigned(maxAddrBit downto 0); -signal sp : unsigned(maxAddrBit downto minAddrBit); - --- this signal is set upon executing an IM instruction --- the subsequence IM instruction will then behave differently. --- all other instructions will clear the idim_flag. --- this yields highly compact immediate instructions. -signal idim_flag : std_logic; - -signal busy : 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, -State_Interrupt - -); - -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, -Decoded_Interrupt -); - - - -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; - -subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; -signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); -signal memARead_stdlogic : std_logic_vector(memARead'range); -signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); -signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); -signal memBRead_stdlogic : std_logic_vector(memBRead'range); - -subtype index is integer range 0 to 3; - -signal tOpcode_sel : index; - - -signal inInterrupt : std_logic; +architecture behave of zpu_core is + + signal memAWriteEnable : std_logic; + signal memAAddr : unsigned(maxAddrBit downto minAddrBit); + signal memAWrite : unsigned(wordSize-1 downto 0); + signal memARead : unsigned(wordSize-1 downto 0); + signal memBWriteEnable : std_logic; + signal memBAddr : unsigned(maxAddrBit downto minAddrBit); + signal memBWrite : unsigned(wordSize-1 downto 0); + signal memBRead : unsigned(wordSize-1 downto 0); + + + + signal pc : unsigned(maxAddrBit downto 0); + signal sp : unsigned(maxAddrBit downto minAddrBit); + + -- this signal is set upon executing an IM instruction + -- the subsequence IM instruction will then behave differently. + -- all other instructions will clear the idim_flag. + -- this yields highly compact immediate instructions. + signal idim_flag : std_logic; + -- + signal busy : 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, + State_Interrupt + ); + + 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, + Decoded_Interrupt + ); + + + + 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; + -- + subtype AddrBitBRAM_range is natural range maxAddrBitBRAM downto minAddrBit; + signal memAAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); + signal memAWrite_stdlogic : std_logic_vector(memAWrite'range); + signal memARead_stdlogic : std_logic_vector(memARead'range); + signal memBAddr_stdlogic : std_logic_vector(AddrBitBRAM_range); + signal memBWrite_stdlogic : std_logic_vector(memBWrite'range); + signal memBRead_stdlogic : std_logic_vector(memBRead'range); + -- + subtype index is integer range 0 to 3; + -- + signal tOpcode_sel : index; + -- + signal inInterrupt : std_logic; begin - -- generate a trace file. - -- - -- This is only used in simulation to see what instructions are - -- executed. - -- - -- a quick & dirty regression test is then to commit trace files - -- to CVS and compare the latest trace file against the last known - -- good trace file - 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; - - - - -- mem_writeMask is not used in this design, tie it to 1 - mem_writeMask <= (others => '1'); - - - - memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); - memAWrite_stdlogic <= std_logic_vector(memAWrite); - memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); - memBWrite_stdlogic <= std_logic_vector(memBWrite); - - - -- dualport_ram must be defined by the application. - -- - -- How this can be implemented is highly dependent on the FPGA - -- and synthesis technology used. - -- - -- sometimes it can be instantiated as in the - -- zpu/example/helloworld.vhd, using inference, - -- but oftentimes it must be instantiated directly - -- portmapping to part specific FPGA resources - -- - -- - -- DANGER!!!!!! If inference fails, then synthesis will try - -- to implement the memory using basic logic resources. This - -- will almost certainly cause the compiler to get "stuck" - -- since synthesising such a huge number of basic logic resources - -- will take more or less forever. - -- - -- So: if your compiler gets "stuck" then inference is not - -- the way to go. - memory: dualport_ram port map ( - clk => clk, - memAWriteEnable => memAWriteEnable, - memAAddr => memAAddr_stdlogic, - memAWrite => memAWrite_stdlogic, - memARead => memARead_stdlogic, - memBWriteEnable => memBWriteEnable, - memBAddr => memBAddr_stdlogic, - memBWrite => memBWrite_stdlogic, - memBRead => memBRead_stdlogic - ); - memARead <= unsigned(memARead_stdlogic); - memBRead <= unsigned(memBRead_stdlogic); - - - - tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); - - - - -- move out calculation of the opcode to a seperate process - -- to make things a bit easier to read - decodeControl: - process(memBRead, pc,tOpcode_sel) - variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); - begin - - -- simplify opcode selection a bit so it passes more synthesizers - case (tOpcode_sel) is - - when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); - - when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); - - when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); - - when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); - - when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); - end case; - - 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 : unsigned(4 downto 0); - begin - if areset = '1' then - state <= State_Resync; - break <= '0'; - sp <= unsigned(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'); - inInterrupt <= '0'; - 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(memBRead); - - decodedOpcode <= sampledDecodedOpcode; - opcode <= sampledOpcode; - if interrupt='0' then - inInterrupt <= '0'; -- no longer in an interrupt - end if; - - 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) <= std_logic_vector(pc); - trace_opcode <= opcode; - trace_sp <= (others => '0'); - trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); - trace_topOfStack <= std_logic_vector(memARead); - trace_topOfStackB <= std_logic_vector(memBRead); - - -- during the next cycle we'll be reading the next opcode - spOffset(4):=not opcode(4); - spOffset(3 downto 0) := unsigned(opcode(3 downto 0)); - - idim_flag <= '0'; - case decodedOpcode is - when Decoded_Interrupt => - sp <= sp - 1; - memAAddr <= sp - 1; - memAWriteEnable <= '1'; - memAWrite <= (others => DontCareValue); - memAWrite(maxAddrBit downto 0) <= pc; - pc <= to_unsigned(32, maxAddrBit+1); -- interrupt address - report "ZPU jumped to interrupt!" severity note; - 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) <= unsigned(opcode(6 downto 0)); - else - memAAddr <= sp; - memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); - memAWrite(6 downto 0) <= unsigned(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) <= unsigned(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 <= std_logic_vector(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 => - memAAddr <= sp; - if (in_mem_busy = '0') then - state <= State_Fetch; - memAWriteEnable <= '1'; - memAWrite <= unsigned(mem_read); - end if; - when State_WriteIO => - sp <= sp + 1; - out_mem_writeEnable <= '1'; - out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); - mem_write <= std_logic_vector(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 => - if interrupt='1' and inInterrupt='0' and idim_flag='0' then - -- We got an interrupt, execute interrupt instead of next instruction - inInterrupt <= '1'; - decodedOpcode <= Decoded_Interrupt; - end if; - -- 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; + -- generate a trace file. + -- + -- This is only used in simulation to see what instructions are + -- executed. + -- + -- a quick & dirty regression test is then to commit trace files + -- to CVS and compare the latest trace file against the last known + -- good trace file + 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; + + + -- mem_writeMask is not used in this design, tie it to 1 + mem_writeMask <= (others => '1'); + + + + memAAddr_stdlogic <= std_logic_vector(memAAddr(AddrBitBRAM_range)); + memAWrite_stdlogic <= std_logic_vector(memAWrite); + memBAddr_stdlogic <= std_logic_vector(memBAddr(AddrBitBRAM_range)); + memBWrite_stdlogic <= std_logic_vector(memBWrite); + + + -- dualport_ram must be defined by the application. + -- + -- How this can be implemented is highly dependent on the FPGA + -- and synthesis technology used. + -- + -- sometimes it can be instantiated as in the + -- zpu/example/helloworld.vhd, using inference, + -- but oftentimes it must be instantiated directly + -- portmapping to part specific FPGA resources + -- + -- + -- DANGER!!!!!! If inference fails, then synthesis will try + -- to implement the memory using basic logic resources. This + -- will almost certainly cause the compiler to get "stuck" + -- since synthesising such a huge number of basic logic resources + -- will take more or less forever. + -- + -- So: if your compiler gets "stuck" then inference is not + -- the way to go. + memory : dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr_stdlogic, + memAWrite => memAWrite_stdlogic, + memARead => memARead_stdlogic, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr_stdlogic, + memBWrite => memBWrite_stdlogic, + memBRead => memBRead_stdlogic + ); + memARead <= unsigned(memARead_stdlogic); + memBRead <= unsigned(memBRead_stdlogic); + + + + tOpcode_sel <= to_integer(pc(minAddrBit-1 downto 0)); + + + + -- move out calculation of the opcode to a seperate process + -- to make things a bit easier to read + decodeControl : process(memBRead, pc, tOpcode_sel) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + begin + + -- simplify opcode selection a bit so it passes more synthesizers + case (tOpcode_sel) is + + when 0 => tOpcode := std_logic_vector(memBRead(31 downto 24)); + + when 1 => tOpcode := std_logic_vector(memBRead(23 downto 16)); + + when 2 => tOpcode := std_logic_vector(memBRead(15 downto 8)); + + when 3 => tOpcode := std_logic_vector(memBRead(7 downto 0)); + + when others => tOpcode := std_logic_vector(memBRead(7 downto 0)); + end case; + + 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; -- tOpcode(3 downto 0) + end if; tOpcode + end process; + + + opcodeControl: process(clk, areset) + variable spOffset : unsigned(4 downto 0); + begin + + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= unsigned(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'); + inInterrupt <= '0'; + + 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 <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(memBRead); + + decodedOpcode <= sampledDecodedOpcode; + opcode <= sampledOpcode; + if interrupt = '0' then + inInterrupt <= '0'; -- no longer in an interrupt + end if; + + 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) <= std_logic_vector(pc); + trace_opcode <= opcode; + trace_sp <= (others => '0'); + trace_sp(maxAddrBit downto minAddrBit) <= std_logic_vector(sp); + trace_topOfStack <= std_logic_vector(memARead); + trace_topOfStackB <= std_logic_vector(memBRead); + + -- during the next cycle we'll be reading the next opcode + spOffset(4) := not opcode(4); + spOffset(3 downto 0) := unsigned(opcode(3 downto 0)); + + idim_flag <= '0'; + + case decodedOpcode is + + when Decoded_Interrupt => + sp <= sp - 1; + memAAddr <= sp - 1; + memAWriteEnable <= '1'; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc; + pc <= to_unsigned(32, maxAddrBit+1); -- interrupt address + report "ZPU jumped to interrupt!" severity note; + + 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) <= unsigned(opcode(6 downto 0)); + else + memAAddr <= sp; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= unsigned(opcode(6 downto 0)); + end if; -- idim_flag + + 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) <= unsigned(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 <= std_logic_vector(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; -- decodedOpcode + + when State_ReadIO => + memAAddr <= sp; + if (in_mem_busy = '0') then + state <= State_Fetch; + memAWriteEnable <= '1'; + memAWrite <= unsigned(mem_read); + end if; + + when State_WriteIO => + sp <= sp + 1; + out_mem_writeEnable <= '1'; + out_mem_addr <= std_logic_vector(memARead(maxAddrBitIncIO downto 0)); + mem_write <= std_logic_vector(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 => + if interrupt = '1' and inInterrupt = '0' and idim_flag = '0' then + -- We got an interrupt, execute interrupt instead of next instruction + inInterrupt <= '1'; + decodedOpcode <= Decoded_Interrupt; + end if; + -- 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; -- state + + end if; -- reset, enable + end process; diff --git a/zpu/hdl/zpu4/core/zpupkg.vhd b/zpu/hdl/zpu4/core/zpupkg.vhd index 59d26e5..f6823f5 100644 --- a/zpu/hdl/zpu4/core/zpupkg.vhd +++ b/zpu/hdl/zpu4/core/zpupkg.vhd @@ -32,173 +32,187 @@ -- are those of the authors and should not be interpreted as representing -- official policies, either expressed or implied, of the ZPU Project. -library IEEE; -use IEEE.STD_LOGIC_1164.all; +library ieee; +use ieee.std_logic_1164.all; use ieee.numeric_std.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_NA4 : std_logic_vector(3 downto 0) := "0001"; - constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010"; - constant OpCode_NA3 : 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_NA2 : std_logic_vector(3 downto 0) := "1110"; - constant OpCode_NA : std_logic_vector(3 downto 0) := "1111"; - - constant OpCode_Lessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(36, 6)); - constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(37, 6)); - constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(38, 6)); - constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(39, 6)); - - constant OpCode_Swap : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(40, 6)); - constant OpCode_Mult : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(41, 6)); - - constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(42, 6)); - constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(43, 6)); - constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(44, 6)); - constant OpCode_Call : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(45, 6)); - - constant OpCode_Eq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(46, 6)); - constant OpCode_Neq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(47, 6)); - - constant OpCode_Sub : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(49, 6)); - constant OpCode_Loadb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(51, 6)); - constant OpCode_Storeb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(52, 6)); - - constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(55, 6)); - constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(56, 6)); - constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(57, 6)); - - constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(61, 6)); - constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(62, 6)); - constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(63, 6)); - - - - constant OpCode_Size : integer := 8; - - - + -- 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; + + + ------------------------------------------------------------ + -- components + + 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 dualport_ram; + + + 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 dram; + + + 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 trace; + + + 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 zpu_core; + + + 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 timer; + + + 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 zpuio; + + + ------------------------------------------------------------ + -- constants + + -- 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_NA4 : std_logic_vector(3 downto 0) := "0001"; + constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010"; + constant OpCode_NA3 : 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_NA2 : std_logic_vector(3 downto 0) := "1110"; + constant OpCode_NA : std_logic_vector(3 downto 0) := "1111"; + -- + constant OpCode_Lessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(36, 6)); + constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(37, 6)); + constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(38, 6)); + constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(39, 6)); + -- + constant OpCode_Swap : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(40, 6)); + constant OpCode_Mult : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(41, 6)); + -- + constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(42, 6)); + constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(43, 6)); + constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(44, 6)); + constant OpCode_Call : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(45, 6)); + -- + constant OpCode_Eq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(46, 6)); + constant OpCode_Neq : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(47, 6)); + -- + constant OpCode_Sub : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(49, 6)); + constant OpCode_Loadb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(51, 6)); + constant OpCode_Storeb : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(52, 6)); + -- + constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(55, 6)); + constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(56, 6)); + constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(57, 6)); + -- + constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(61, 6)); + constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(62, 6)); + constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := std_logic_vector(to_unsigned(63, 6)); + -- + -- + constant OpCode_Size : integer := 8; + + + end zpupkg; -- cgit v1.1 From 04772b6a0bbe7017f5f7b44cfa203c3f7efbff64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Tue, 1 Mar 2011 20:52:55 +0100 Subject: whitespace fixes: use fromdos on all .vhd files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Øyvind Harboe --- misc/arm7/src/arm7pkg.vhd | 60 +- misc/arm7/src/arm7wb.vhd | 472 +- misc/ddrsdram/simsrc/ddr_tb.vhd | 602 +-- misc/ddrsdram/src/ddr_pkg.vhd | 212 +- misc/ddrsdram/src/ddr_top.vhd | 1486 +++--- misc/ddrsdram/src/mt46v16m16.vhd | 2640 +++++----- misc/wishbone/src/atomic32_access.vhd | 262 +- misc/wishbone/src/wishbone_pkg.vhd | 104 +- zpu/hdl/example/bram_dmips.vhd | 6712 +++++++++++++------------- zpu/hdl/example/helloworld.vhd | 6308 ++++++++++++------------ zpu/hdl/example/interrupt.vhd | 6312 ++++++++++++------------ zpu/hdl/example/sim_small_fpga_top.vhd | 414 +- zpu/hdl/example/sim_small_fpga_top_noint.vhd | 386 +- zpu/hdl/example/zpu_config.vhd | 112 +- zpu/hdl/example_medium/dram_dmips.vhd | 6616 ++++++++++++------------- zpu/hdl/example_medium/dram_hello.vhd | 6214 ++++++++++++------------ zpu/hdl/example_medium/sim_fpga_top.vhd | 370 +- zpu/hdl/example_medium/zpu_config_trace.vhd | 34 +- zpu/hdl/wishbone/wishbone_pkg.vhd | 172 +- zpu/hdl/wishbone/zpu_system.vhd | 208 +- zpu/hdl/wishbone/zpu_wb_bridge.vhd | 166 +- zpu/hdl/zpu4/core/zpu_config.vhd | 84 +- zpu/hdl/zpu4/core/zpu_core.vhd | 154 +- zpu/hdl/zpu4/core/zpu_core_small.vhd | 112 +- zpu/hdl/zpu4/core/zpupkg.vhd | 86 +- zpu/hdl/zpu4/src/clocks.vhd | 490 +- zpu/hdl/zpu4/src/io.vhd | 224 +- zpu/hdl/zpu4/src/timer.vhd | 122 +- zpu/hdl/zpu4/src/trace.vhd | 234 +- zpu/hdl/zpu4/src/txt_util.vhd | 1242 ++--- zpu/hdl/zpu4/src/zpuio.vhd | 464 +- zpu/hdl/zy2000/timer.vhd | 274 +- zpu/hdl/zy2000/trace.vhd | 168 +- zpu/hdl/zy2000/txt_util.vhd | 1174 ++--- zpu/hdl/zy2000/zpu_config.vhd | 40 +- zpu/hdl/zy2000/zpu_config_fast.vhd | 40 +- zpu/hdl/zy2000/zpupkg.vhd | 336 +- 37 files changed, 22553 insertions(+), 22553 deletions(-) diff --git a/misc/arm7/src/arm7pkg.vhd b/misc/arm7/src/arm7pkg.vhd index 855fbdb..4dcbb9c 100644 --- a/misc/arm7/src/arm7pkg.vhd +++ b/misc/arm7/src/arm7pkg.vhd @@ -1,31 +1,31 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; -library work; -use work.wishbone_pkg.all; - -package arm7 is - - component arm7wb - generic( - simulate_io_time : boolean := false); - port ( areset : in std_logic; - cpu_clk : in std_logic; - cpu_clk_2x : in std_logic; - cpu_a_p : in std_logic_vector(23 downto 1); - 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_wait_n_p : out std_logic; - - arm7_debug : out std_logic; - arm7_debug2 : out std_logic; - - wb_o : out wishbone_bus_in; - wb_i : in wishbone_bus_out); - end component; - -end arm7; - +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library work; +use work.wishbone_pkg.all; + +package arm7 is + + component arm7wb + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_a_p : in std_logic_vector(23 downto 1); + 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_wait_n_p : out std_logic; + + arm7_debug : out std_logic; + arm7_debug2 : out std_logic; + + wb_o : out wishbone_bus_in; + wb_i : in wishbone_bus_out); + end component; + +end arm7; + \ No newline at end of file diff --git a/misc/arm7/src/arm7wb.vhd b/misc/arm7/src/arm7wb.vhd index 3366352..85f0ef7 100644 --- a/misc/arm7/src/arm7wb.vhd +++ b/misc/arm7/src/arm7wb.vhd @@ -1,236 +1,236 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; -library work; -use work.phi_config.all; -use work.wishbone_pkg.all; - -entity arm7wb is - generic( - simulate_io_time : boolean := false); - port ( areset : in std_logic; - cpu_clk : in std_logic; - cpu_clk_2x : in std_logic; - cpu_a_p : in std_logic_vector(23 downto 1); - 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_wait_n_p : out std_logic; - - arm7_debug : out std_logic; - arm7_debug2 : out std_logic; - - wb_o : out wishbone_bus_in; - wb_i : in wishbone_bus_out); -end arm7wb; - -architecture behave of arm7wb is - -type cpu_state_type is (cpu_idle, cpu_cs, cpu_end); - --- Input simulated delay -signal cpu_wr_n_p_del : std_logic_vector(1 downto 0); -signal cpu_a_p_del : std_logic_vector(23 downto 1); -signal cpu_d_p_del : std_logic_vector(15 downto 0); -signal cpu_cs_n_p_del : std_logic_vector(3 downto 1); -signal cpu_oe_n_p_del : std_logic; - --- Clock phase detect signals -signal cpu_clk_toggle : std_logic; -signal cpu_clk_smp1 : std_logic; -signal cpu_clk_smp2 : std_logic; -signal cpu_clk_phase : std_logic; - --- Internal version of control signal (for feedback) -signal arm7_din_int : std_logic_vector(15 downto 0); -signal arm7_dout_int : std_logic_vector(15 downto 0); -signal arm7_a_int : std_logic_vector(23 downto 1); -signal arm7_we_int : std_logic_vector(1 downto 0); -signal cyc_int : std_logic; -signal we_int : std_logic; -signal adr_reg : std_logic_vector(25 downto 24); - --- Input sampled -signal cpu_a_smp : std_logic_vector(23 downto 1); -signal cpu_d_smp : std_logic_vector(15 downto 0); -signal cpu_cs_n : std_logic_vector(3 downto 1); -signal cpu_oe_n : std_logic; -signal cpu_wr_n : std_logic_vector(1 downto 0); - --- Main FSM -signal cpu_state : cpu_state_type; - -constant Clock_2_Out : time := 5.5 ns; -constant Input_Setup : time := 2.5 ns; - -begin - - arm7_dout_int <= wb_i.dat(15 downto 0) when (arm7_a_int(1) = '0') else wb_i.dat(31 downto 16); - arm7_debug <= cpu_oe_n; - arm7_debug2 <= cpu_wr_n(0); - - -- Generate 64 MBytes address based on 3 CS_N signals from CPU - -- Memory map FPGA internal - -- 0x00000000 DDR 32 MBytes (CS_N2 and CS_N3) - -- 0x00200000 FPGA/Ethernet (CS_N1) - wb_o.adr(31 downto 26) <= "000000"; - wb_o.adr(25 downto 24) <= adr_reg; - wb_o.adr(23 downto 1) <= arm7_a_int(23 downto 1); - wb_o.adr(0) <= '0'; - - wb_o.dat <= (x"0000" & arm7_din_int) when (arm7_a_int(1) = '0') else (arm7_din_int & x"0000"); - wb_o.sel <= ("00" & arm7_we_int) when (arm7_a_int(1) = '0') else (arm7_we_int & "00"); - - wb_o.cyc <= cyc_int; - wb_o.stb <= cyc_int; - wb_o.we <= cpu_oe_n; - - iotimingon: - if simulate_io_time generate - begin - cpu_wr_n_p_del <= transport "XX" after 0 ns, cpu_wr_n_p after Input_Setup; - cpu_a_p_del <= transport "XXXXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup; - cpu_d_p_del <= transport "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup; - cpu_cs_n_p_del <= transport "XXX" after 0 ns, cpu_cs_n_p after Input_Setup; - cpu_oe_n_p_del <= transport 'X' after 0 ns, cpu_oe_n_p after Input_Setup; - end generate; - - iotimingoff: - if not simulate_io_time generate - begin - cpu_wr_n_p_del <= cpu_wr_n_p; - cpu_a_p_del <= cpu_a_p; - cpu_d_p_del <= cpu_d_p; - cpu_cs_n_p_del <= cpu_cs_n_p; - cpu_oe_n_p_del <= cpu_oe_n_p; - end generate; - - process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase - begin - if areset = '1' then - cpu_clk_toggle <= '0'; - elsif (cpu_clk'event and cpu_clk = '1') then - cpu_clk_toggle <= not(cpu_clk_toggle); - end if; - end process; - - process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock - begin - if areset = '1' then - cpu_clk_smp1 <= '0'; - cpu_clk_smp2 <= '1'; - cpu_clk_phase <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - cpu_clk_smp1 <= cpu_clk_toggle; - cpu_clk_smp2 <= cpu_clk_smp1; - if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then - cpu_clk_phase <= '0'; - else - cpu_clk_phase <= not(cpu_clk_phase); - end if; - end if; - end process; - - process(cpu_clk_2x, areset) -- Sample input signals on 2x clock - begin - if areset = '1' then - cpu_d_smp <= "0000000000000000"; - cpu_cs_n <= "111"; - elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then - cpu_d_smp <= cpu_d_p_del; - cpu_cs_n <= cpu_cs_n_p_del; - end if; - end process; - - process(cpu_clk, areset) -- Sample input signals on 1x clock - begin - if areset = '1' then - cpu_a_smp <= "00000000000000000000000"; - cpu_oe_n <= '1'; - cpu_wr_n <= "11"; - elsif (cpu_clk = '1' and cpu_clk'event) then - cpu_a_smp <= cpu_a_p_del; - cpu_oe_n <= cpu_oe_n_p_del; - cpu_wr_n <= cpu_wr_n_p_del; - end if; - end process; - - arm7_din_int <= cpu_d_smp; - arm7_a_int <= cpu_a_smp; - arm7_we_int <= not(cpu_wr_n); - - process(cpu_clk, areset) - begin - if areset = '1' then - cpu_state <= cpu_idle; - cyc_int <= '0'; - we_int <= '0'; - adr_reg <= "00"; - cpu_d_p <= (others => 'Z'); - elsif (cpu_clk'event and cpu_clk = '1') then - - cyc_int <= '0'; - we_int <= '0'; - cpu_d_p <= (others => 'Z') after Clock_2_Out; - - - case cpu_state is - - when cpu_idle => - if cpu_oe_n = '1' then - we_int <= '1'; - end if; - if cpu_cs_n(1) = '0' then - cyc_int <= '1'; - adr_reg <= "10"; - cpu_state <= cpu_cs; - end if; - if cpu_cs_n(2) = '0' then - cyc_int <= '1'; - adr_reg <= "00"; - cpu_state <= cpu_cs; - end if; - if cpu_cs_n(3) = '0' then - cyc_int <= '1'; - adr_reg <= "01"; - cpu_state <= cpu_cs; - end if; - - when cpu_cs => - if cpu_oe_n = '0' then - cpu_d_p <= arm7_dout_int after Clock_2_Out; - if wb_i.ack = '1' then - cpu_state <= cpu_end; - else - cyc_int <= '1'; - end if; - else - if wb_i.ack = '0' then - cyc_int <= '1'; - we_int <= '1'; - else - cpu_state <= cpu_end; - end if; - end if; - - when others => - cpu_state <= cpu_idle; - - end case; - end if; - end process; - - process(cpu_clk_2x, areset) - begin - if areset = '1' then - cpu_wait_n_p <= '1'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - cpu_wait_n_p <= '1' after Clock_2_Out; - if (cpu_state = cpu_cs and wb_i.ack = '0') then - cpu_wait_n_p <= '0' after Clock_2_Out; - end if; - end if; - end process; - -end behave; +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library work; +use work.phi_config.all; +use work.wishbone_pkg.all; + +entity arm7wb is + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_a_p : in std_logic_vector(23 downto 1); + 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_wait_n_p : out std_logic; + + arm7_debug : out std_logic; + arm7_debug2 : out std_logic; + + wb_o : out wishbone_bus_in; + wb_i : in wishbone_bus_out); +end arm7wb; + +architecture behave of arm7wb is + +type cpu_state_type is (cpu_idle, cpu_cs, cpu_end); + +-- Input simulated delay +signal cpu_wr_n_p_del : std_logic_vector(1 downto 0); +signal cpu_a_p_del : std_logic_vector(23 downto 1); +signal cpu_d_p_del : std_logic_vector(15 downto 0); +signal cpu_cs_n_p_del : std_logic_vector(3 downto 1); +signal cpu_oe_n_p_del : std_logic; + +-- Clock phase detect signals +signal cpu_clk_toggle : std_logic; +signal cpu_clk_smp1 : std_logic; +signal cpu_clk_smp2 : std_logic; +signal cpu_clk_phase : std_logic; + +-- Internal version of control signal (for feedback) +signal arm7_din_int : std_logic_vector(15 downto 0); +signal arm7_dout_int : std_logic_vector(15 downto 0); +signal arm7_a_int : std_logic_vector(23 downto 1); +signal arm7_we_int : std_logic_vector(1 downto 0); +signal cyc_int : std_logic; +signal we_int : std_logic; +signal adr_reg : std_logic_vector(25 downto 24); + +-- Input sampled +signal cpu_a_smp : std_logic_vector(23 downto 1); +signal cpu_d_smp : std_logic_vector(15 downto 0); +signal cpu_cs_n : std_logic_vector(3 downto 1); +signal cpu_oe_n : std_logic; +signal cpu_wr_n : std_logic_vector(1 downto 0); + +-- Main FSM +signal cpu_state : cpu_state_type; + +constant Clock_2_Out : time := 5.5 ns; +constant Input_Setup : time := 2.5 ns; + +begin + + arm7_dout_int <= wb_i.dat(15 downto 0) when (arm7_a_int(1) = '0') else wb_i.dat(31 downto 16); + arm7_debug <= cpu_oe_n; + arm7_debug2 <= cpu_wr_n(0); + + -- Generate 64 MBytes address based on 3 CS_N signals from CPU + -- Memory map FPGA internal + -- 0x00000000 DDR 32 MBytes (CS_N2 and CS_N3) + -- 0x00200000 FPGA/Ethernet (CS_N1) + wb_o.adr(31 downto 26) <= "000000"; + wb_o.adr(25 downto 24) <= adr_reg; + wb_o.adr(23 downto 1) <= arm7_a_int(23 downto 1); + wb_o.adr(0) <= '0'; + + wb_o.dat <= (x"0000" & arm7_din_int) when (arm7_a_int(1) = '0') else (arm7_din_int & x"0000"); + wb_o.sel <= ("00" & arm7_we_int) when (arm7_a_int(1) = '0') else (arm7_we_int & "00"); + + wb_o.cyc <= cyc_int; + wb_o.stb <= cyc_int; + wb_o.we <= cpu_oe_n; + + iotimingon: + if simulate_io_time generate + begin + cpu_wr_n_p_del <= transport "XX" after 0 ns, cpu_wr_n_p after Input_Setup; + cpu_a_p_del <= transport "XXXXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup; + cpu_d_p_del <= transport "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup; + cpu_cs_n_p_del <= transport "XXX" after 0 ns, cpu_cs_n_p after Input_Setup; + cpu_oe_n_p_del <= transport 'X' after 0 ns, cpu_oe_n_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cpu_wr_n_p_del <= cpu_wr_n_p; + cpu_a_p_del <= cpu_a_p; + cpu_d_p_del <= cpu_d_p; + cpu_cs_n_p_del <= cpu_cs_n_p; + cpu_oe_n_p_del <= cpu_oe_n_p; + end generate; + + process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase + begin + if areset = '1' then + cpu_clk_toggle <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_toggle <= not(cpu_clk_toggle); + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock + begin + if areset = '1' then + cpu_clk_smp1 <= '0'; + cpu_clk_smp2 <= '1'; + cpu_clk_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_smp1 <= cpu_clk_toggle; + cpu_clk_smp2 <= cpu_clk_smp1; + if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then + cpu_clk_phase <= '0'; + else + cpu_clk_phase <= not(cpu_clk_phase); + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- Sample input signals on 2x clock + begin + if areset = '1' then + cpu_d_smp <= "0000000000000000"; + cpu_cs_n <= "111"; + elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then + cpu_d_smp <= cpu_d_p_del; + cpu_cs_n <= cpu_cs_n_p_del; + end if; + end process; + + process(cpu_clk, areset) -- Sample input signals on 1x clock + begin + if areset = '1' then + cpu_a_smp <= "00000000000000000000000"; + cpu_oe_n <= '1'; + cpu_wr_n <= "11"; + elsif (cpu_clk = '1' and cpu_clk'event) then + cpu_a_smp <= cpu_a_p_del; + cpu_oe_n <= cpu_oe_n_p_del; + cpu_wr_n <= cpu_wr_n_p_del; + end if; + end process; + + arm7_din_int <= cpu_d_smp; + arm7_a_int <= cpu_a_smp; + arm7_we_int <= not(cpu_wr_n); + + process(cpu_clk, areset) + begin + if areset = '1' then + cpu_state <= cpu_idle; + cyc_int <= '0'; + we_int <= '0'; + adr_reg <= "00"; + cpu_d_p <= (others => 'Z'); + elsif (cpu_clk'event and cpu_clk = '1') then + + cyc_int <= '0'; + we_int <= '0'; + cpu_d_p <= (others => 'Z') after Clock_2_Out; + + + case cpu_state is + + when cpu_idle => + if cpu_oe_n = '1' then + we_int <= '1'; + end if; + if cpu_cs_n(1) = '0' then + cyc_int <= '1'; + adr_reg <= "10"; + cpu_state <= cpu_cs; + end if; + if cpu_cs_n(2) = '0' then + cyc_int <= '1'; + adr_reg <= "00"; + cpu_state <= cpu_cs; + end if; + if cpu_cs_n(3) = '0' then + cyc_int <= '1'; + adr_reg <= "01"; + cpu_state <= cpu_cs; + end if; + + when cpu_cs => + if cpu_oe_n = '0' then + cpu_d_p <= arm7_dout_int after Clock_2_Out; + if wb_i.ack = '1' then + cpu_state <= cpu_end; + else + cyc_int <= '1'; + end if; + else + if wb_i.ack = '0' then + cyc_int <= '1'; + we_int <= '1'; + else + cpu_state <= cpu_end; + end if; + end if; + + when others => + cpu_state <= cpu_idle; + + end case; + end if; + end process; + + process(cpu_clk_2x, areset) + begin + if areset = '1' then + cpu_wait_n_p <= '1'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_wait_n_p <= '1' after Clock_2_Out; + if (cpu_state = cpu_cs and wb_i.ack = '0') then + cpu_wait_n_p <= '0' after Clock_2_Out; + end if; + end if; + end process; + +end behave; diff --git a/misc/ddrsdram/simsrc/ddr_tb.vhd b/misc/ddrsdram/simsrc/ddr_tb.vhd index 249dffb..92d1e4b 100644 --- a/misc/ddrsdram/simsrc/ddr_tb.vhd +++ b/misc/ddrsdram/simsrc/ddr_tb.vhd @@ -1,301 +1,301 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; -library work; -use work.ddr.all; - -entity ddr_tb is - port ( areset : in std_logic; - break_out : out std_logic); -end ddr_tb; - -architecture behave of ddr_tb is - -signal cpu_clk : std_logic; -signal cpu_clk_2x : std_logic; -signal cpu_clk_4x : std_logic; -signal ddr_in_clk : std_logic; -signal ddr_in_clk_2x : std_logic; - -signal ddr_command : std_logic_vector(15 downto 0); -signal ddr_command_we : std_logic; - -signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM -signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM -signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address -signal ddr_req : std_logic; -- Request DDR SDRAM access -signal ddr_req_ack : std_logic; -- Request acknowledge -signal ddr_busy : std_logic; -- Request acknowledge -signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE -signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer -signal ddr_read_en : std_logic; -- Enable signal for read data -signal ddr_write_en : std_logic; -- Enable (read) signal for data write -signal refresh_en : std_logic; - -signal sdr_clk_p : std_logic; -- ddr_sdram_clock -signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock -signal cke_q_p : std_logic; -- clock enable -signal cs_qn_p : std_logic; -- /chip select -signal ras_qn_p : std_logic; -- /ras -signal cas_qn_p : std_logic; -- /cas -signal we_qn_p : std_logic; -- /write enable -signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00" -signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write -signal ba_q_p : std_logic_vector(1 downto 0); -- bank select -signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus -signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus - -constant min_time : time := 1.875 ns; - -begin - - clock1: - process - begin - loop - cpu_clk_4x <= '1'; - wait for min_time; - cpu_clk_4x <= '0'; - wait for min_time; - end loop; - end process; - - clock2: - process - begin - loop - cpu_clk_2x <= '1' after 100 ps; - wait until rising_edge(cpu_clk_4x); - cpu_clk_2x <= '0' after 100 ps; - wait until rising_edge(cpu_clk_4x); - end loop; - end process; - - clock3: - process - begin - loop - cpu_clk <= '1' after 100 ps; - wait until rising_edge(cpu_clk_2x); - cpu_clk <= '0' after 100 ps; - wait until rising_edge(cpu_clk_2x); - end loop; - end process; - - ddr_in_clk_2x <= cpu_clk_4x after 1 ns; - - clock4: - process - begin - loop - ddr_in_clk <= '0' after 100 ps; - wait until rising_edge(ddr_in_clk_2x); - ddr_in_clk <= '1' after 100 ps; - wait until rising_edge(ddr_in_clk_2x); - end loop; - end process; - - inputdata: - process - begin - -- Wait until global reset released - loop - ddr_command <= x"0000"; - ddr_command_we <= '0'; - ddr_data_write <= x"000000000"; - ddr_req <= '0'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - break_out <= '0'; - refresh_en <= '0'; - - wait until falling_edge(areset); - - -- DDR initialization sequence - -- Wait more than 200 us - wait for 201000 ns; - - -- Send precharge command - wait until rising_edge(cpu_clk); - ddr_command <= x"8000"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 1 us - wait for 1000 ns; - - -- Load extended mode register - -- Enable DLL - -- Normal drive strength - wait until rising_edge(cpu_clk); - ddr_command <= x"2000"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 1 us - wait for 1000 ns; - - -- Load mode register - -- Burst length: 2 - -- Burst type: Sequential - -- Cas latency: 2 - -- Reset DLL - wait until rising_edge(cpu_clk); - ddr_command <= x"0121"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 1 us - wait for 1000 ns; - - -- Send precharge command - wait until rising_edge(cpu_clk); - ddr_command <= x"8000"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Enable refresh - refresh_en <= '1'; - - -- Wait 30 us (minimum 2 autorefresh cycles) - wait for 30000 ns; - - -- Load mode register - -- Burst length: 2 - -- Burst type: Sequential - -- Cas latency: 2 - -- Deactivate Reset DLL - wait until rising_edge(cpu_clk); - ddr_command <= x"0021"; - ddr_command_we <= '1'; - wait until rising_edge(cpu_clk); - ddr_command <= x"0000"; - ddr_command_we <= '0'; - - -- Wait for 2 us (DLL stable) - wait for 2000 ns; - - -- Write data to DDR - wait until rising_edge(cpu_clk_2x); - ddr_data_write <= x"312345678"; - ddr_req <= '1'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - wait until rising_edge(ddr_write_en); - wait until rising_edge(cpu_clk_2x); - ddr_req <= '0'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - ddr_data_write <= x"000000000"; - wait for 100 ns; - - -- Read data from DDR - wait until rising_edge(cpu_clk_2x); - ddr_req <= '1'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '1'; - ddr_req_len <= '0'; - wait until rising_edge(ddr_req_ack); - wait until rising_edge(cpu_clk_2x); - ddr_req <= '0'; - ddr_req_adr <= "00000000000000000000000"; - ddr_rd_wr_n <= '0'; - ddr_req_len <= '0'; - ddr_data_write <= x"000000000"; - - - - wait for 100 ns; - break_out <= '1'; - wait for 100 ns; - - end loop; - - end process; - - ddr_ctrl: - ddr_top port map( - areset => areset, - cpu_clk => cpu_clk, - cpu_clk_2x => cpu_clk_2x, - cpu_clk_4x => cpu_clk_4x, - ddr_in_clk => ddr_in_clk, - ddr_in_clk_2x => ddr_in_clk_2x, - - -- Command interface - ddr_command => ddr_command, - ddr_command_we => ddr_command_we, - refresh_en => refresh_en, - - -- Data interface signals - ddr_data_read => ddr_data_read, - ddr_data_write => ddr_data_write, - ddr_req_adr => ddr_req_adr, - ddr_req => ddr_req, - ddr_req_ack => ddr_req_ack, - ddr_busy => ddr_busy, - ddr_rd_wr_n => ddr_rd_wr_n, - ddr_req_len => ddr_req_len, - ddr_read_en => ddr_read_en, - ddr_write_en => ddr_write_en, - -- DDR SDRAM Signals - sdr_clk_p => sdr_clk_p, - sdr_clk_n_p => sdr_clk_n_p, - cke_q_p => cke_q_p, - cs_qn_p => cs_qn_p, - ras_qn_p => ras_qn_p, - cas_qn_p => cas_qn_p, - we_qn_p => we_qn_p, - dm_q_p => dm_q_p, - dqs_q_p => dqs_q_p, - ba_q_p => ba_q_p, - sdr_a_p => sdr_a_p, - sdr_d_p => sdr_d_p); - - myram: - MT46V16M16 generic map( - tCK => 7.500 ns, - tCH => 3.375 ns, -- 0.45*tCK - tCL => 3.375 ns, -- 0.45*tCK - tDH => 0.500 ns, - tDS => 0.500 ns, - tIH => 0.900 ns, - tIS => 0.900 ns, - tMRD => 15.000 ns, - tRAS => 40.000 ns, - tRAP => 20.000 ns, - tRC => 65.000 ns, - tRFC => 75.000 ns, - tRCD => 20.000 ns, - tRP => 20.000 ns, - tRRD => 15.000 ns, - tWR => 15.000 ns, - addr_bits => 13, - data_bits => 16, - cols_bits => 9) - port map( - Dq => sdr_d_p, - Dqs => dqs_q_p, - Addr => sdr_a_p, - Ba => ba_q_p, - Clk => sdr_clk_p, - Clk_n => sdr_clk_n_p, - Cke => cke_q_p, - Cs_n => cs_qn_p, - Ras_n => ras_qn_p, - Cas_n => cas_qn_p, - We_n => we_qn_p, - Dm => dm_q_p); - -end behave; +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library work; +use work.ddr.all; + +entity ddr_tb is + port ( areset : in std_logic; + break_out : out std_logic); +end ddr_tb; + +architecture behave of ddr_tb is + +signal cpu_clk : std_logic; +signal cpu_clk_2x : std_logic; +signal cpu_clk_4x : std_logic; +signal ddr_in_clk : std_logic; +signal ddr_in_clk_2x : std_logic; + +signal ddr_command : std_logic_vector(15 downto 0); +signal ddr_command_we : std_logic; + +signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM +signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM +signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address +signal ddr_req : std_logic; -- Request DDR SDRAM access +signal ddr_req_ack : std_logic; -- Request acknowledge +signal ddr_busy : std_logic; -- Request acknowledge +signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE +signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer +signal ddr_read_en : std_logic; -- Enable signal for read data +signal ddr_write_en : std_logic; -- Enable (read) signal for data write +signal refresh_en : std_logic; + +signal sdr_clk_p : std_logic; -- ddr_sdram_clock +signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock +signal cke_q_p : std_logic; -- clock enable +signal cs_qn_p : std_logic; -- /chip select +signal ras_qn_p : std_logic; -- /ras +signal cas_qn_p : std_logic; -- /cas +signal we_qn_p : std_logic; -- /write enable +signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00" +signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write +signal ba_q_p : std_logic_vector(1 downto 0); -- bank select +signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus +signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus + +constant min_time : time := 1.875 ns; + +begin + + clock1: + process + begin + loop + cpu_clk_4x <= '1'; + wait for min_time; + cpu_clk_4x <= '0'; + wait for min_time; + end loop; + end process; + + clock2: + process + begin + loop + cpu_clk_2x <= '1' after 100 ps; + wait until rising_edge(cpu_clk_4x); + cpu_clk_2x <= '0' after 100 ps; + wait until rising_edge(cpu_clk_4x); + end loop; + end process; + + clock3: + process + begin + loop + cpu_clk <= '1' after 100 ps; + wait until rising_edge(cpu_clk_2x); + cpu_clk <= '0' after 100 ps; + wait until rising_edge(cpu_clk_2x); + end loop; + end process; + + ddr_in_clk_2x <= cpu_clk_4x after 1 ns; + + clock4: + process + begin + loop + ddr_in_clk <= '0' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + ddr_in_clk <= '1' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + end loop; + end process; + + inputdata: + process + begin + -- Wait until global reset released + loop + ddr_command <= x"0000"; + ddr_command_we <= '0'; + ddr_data_write <= x"000000000"; + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + break_out <= '0'; + refresh_en <= '0'; + + wait until falling_edge(areset); + + -- DDR initialization sequence + -- Wait more than 200 us + wait for 201000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load extended mode register + -- Enable DLL + -- Normal drive strength + wait until rising_edge(cpu_clk); + ddr_command <= x"2000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0121"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Enable refresh + refresh_en <= '1'; + + -- Wait 30 us (minimum 2 autorefresh cycles) + wait for 30000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Deactivate Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0021"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 2 us (DLL stable) + wait for 2000 ns; + + -- Write data to DDR + wait until rising_edge(cpu_clk_2x); + ddr_data_write <= x"312345678"; + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_write_en); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + wait for 100 ns; + + -- Read data from DDR + wait until rising_edge(cpu_clk_2x); + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '1'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_req_ack); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + + + + wait for 100 ns; + break_out <= '1'; + wait for 100 ns; + + end loop; + + end process; + + ddr_ctrl: + ddr_top port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + + -- Command interface + ddr_command => ddr_command, + ddr_command_we => ddr_command_we, + refresh_en => refresh_en, + + -- Data interface signals + ddr_data_read => ddr_data_read, + ddr_data_write => ddr_data_write, + ddr_req_adr => ddr_req_adr, + ddr_req => ddr_req, + ddr_req_ack => ddr_req_ack, + ddr_busy => ddr_busy, + ddr_rd_wr_n => ddr_rd_wr_n, + ddr_req_len => ddr_req_len, + ddr_read_en => ddr_read_en, + ddr_write_en => ddr_write_en, + -- DDR SDRAM Signals + sdr_clk_p => sdr_clk_p, + sdr_clk_n_p => sdr_clk_n_p, + cke_q_p => cke_q_p, + cs_qn_p => cs_qn_p, + ras_qn_p => ras_qn_p, + cas_qn_p => cas_qn_p, + we_qn_p => we_qn_p, + dm_q_p => dm_q_p, + dqs_q_p => dqs_q_p, + ba_q_p => ba_q_p, + sdr_a_p => sdr_a_p, + sdr_d_p => sdr_d_p); + + myram: + MT46V16M16 generic map( + tCK => 7.500 ns, + tCH => 3.375 ns, -- 0.45*tCK + tCL => 3.375 ns, -- 0.45*tCK + tDH => 0.500 ns, + tDS => 0.500 ns, + tIH => 0.900 ns, + tIS => 0.900 ns, + tMRD => 15.000 ns, + tRAS => 40.000 ns, + tRAP => 20.000 ns, + tRC => 65.000 ns, + tRFC => 75.000 ns, + tRCD => 20.000 ns, + tRP => 20.000 ns, + tRRD => 15.000 ns, + tWR => 15.000 ns, + addr_bits => 13, + data_bits => 16, + cols_bits => 9) + port map( + Dq => sdr_d_p, + Dqs => dqs_q_p, + Addr => sdr_a_p, + Ba => ba_q_p, + Clk => sdr_clk_p, + Clk_n => sdr_clk_n_p, + Cke => cke_q_p, + Cs_n => cs_qn_p, + Ras_n => ras_qn_p, + Cas_n => cas_qn_p, + We_n => we_qn_p, + Dm => dm_q_p); + +end behave; diff --git a/misc/ddrsdram/src/ddr_pkg.vhd b/misc/ddrsdram/src/ddr_pkg.vhd index 0e41a88..af4a705 100644 --- a/misc/ddrsdram/src/ddr_pkg.vhd +++ b/misc/ddrsdram/src/ddr_pkg.vhd @@ -1,107 +1,107 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -package ddr is - - function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector; - function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector; - - component ddr_top - generic( - simulate_io_time : boolean := false); - port ( -- Asyncronous reset and clocks - 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; - - -- Command interface - ddr_command : in std_logic_vector(15 downto 0); - ddr_command_we : in std_logic; - refresh_en : in std_logic; - - - -- Data interface signals - ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM - ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM - ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address - ddr_req : in std_logic; -- Request DDR SDRAM access - ddr_busy : out std_logic; -- Request acknowledge - ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE - ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) - ddr_read_en : out std_logic; -- Enable signal for read data - ddr_write_en : out std_logic; -- Enable (read) signal for data write - - -- 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 - end component; - - component MT46V16M16 - GENERIC ( -- Timing for -75Z CL2 - tCK : TIME := 7.500 ns; - tCH : TIME := 3.375 ns; -- 0.45*tCK - tCL : TIME := 3.375 ns; -- 0.45*tCK - tDH : TIME := 0.500 ns; - tDS : TIME := 0.500 ns; - tIH : TIME := 0.900 ns; - tIS : TIME := 0.900 ns; - tMRD : TIME := 15.000 ns; - tRAS : TIME := 40.000 ns; - tRAP : TIME := 20.000 ns; - tRC : TIME := 65.000 ns; - tRFC : TIME := 75.000 ns; - tRCD : TIME := 20.000 ns; - tRP : TIME := 20.000 ns; - tRRD : TIME := 15.000 ns; - tWR : TIME := 15.000 ns; - addr_bits : INTEGER := 13; - data_bits : INTEGER := 16; - cols_bits : INTEGER := 9 - ); - PORT ( - Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); - Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; - Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); - Clk : IN STD_LOGIC; - Clk_n : IN STD_LOGIC; - Cke : IN STD_LOGIC; - Cs_n : IN STD_LOGIC; - Ras_n : IN STD_LOGIC; - Cas_n : IN STD_LOGIC; - We_n : IN STD_LOGIC; - Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); - end component; - -end; - -package body ddr is - - function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector is - begin - return (org_sig(7 downto 0) & org_sig(15 downto 8) & org_sig(23 downto 16) & org_sig(31 downto 24)); - end function mirror_bus32; - - function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector is - begin - return (org_sig(0) & org_sig(1) & org_sig(2) & org_sig(3)); - end function mirror_bus4; - -end package body; - +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package ddr is + + function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector; + function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector; + + component ddr_top + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + 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; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- 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 + end component; + + component MT46V16M16 + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); + end component; + +end; + +package body ddr is + + function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector is + begin + return (org_sig(7 downto 0) & org_sig(15 downto 8) & org_sig(23 downto 16) & org_sig(31 downto 24)); + end function mirror_bus32; + + function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector is + begin + return (org_sig(0) & org_sig(1) & org_sig(2) & org_sig(3)); + end function mirror_bus4; + +end package body; + \ No newline at end of file diff --git a/misc/ddrsdram/src/ddr_top.vhd b/misc/ddrsdram/src/ddr_top.vhd index 033e9f8..2aceae9 100644 --- a/misc/ddrsdram/src/ddr_top.vhd +++ b/misc/ddrsdram/src/ddr_top.vhd @@ -1,743 +1,743 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -library UNISIM; -use UNISIM.vcomponents.all; - -entity ddr_top is - generic( - simulate_io_time : boolean := false); - port ( -- Asyncronous reset and clocks - 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; - - -- Command interface - ddr_command : in std_logic_vector(15 downto 0); - ddr_command_we : in std_logic; - refresh_en : in std_logic; - - -- Data interface signals - ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM - ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM - ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address - ddr_req : in std_logic; -- Request DDR SDRAM access - ddr_busy : out std_logic; -- Request acknowledge - ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE - ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) - ddr_read_en : out std_logic; -- Enable signal for read data - ddr_write_en : out std_logic; -- Enable (read) signal for data write - - -- 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 -end ddr_top; - -architecture behave of ddr_top is - -attribute keep : string; - -type clk4_type is array(0 to 15) of std_logic_vector(1 downto 0); - -signal cpu_clk_tog : std_logic; -signal ddr_cmd : std_logic_vector(15 downto 0); -signal ddr_cmd_we_smp : std_logic; -signal new_command : std_logic; - -signal cpu_clk_2x_smp1 : std_logic; -signal cpu_clk_2x_smp2 : std_logic; -signal cpu_clk_4x_smp1 : std_logic; -signal cpu_clk_4x_smp2 : std_logic; - -signal clk2_phase : std_logic; -signal clk4_phase : std_logic_vector(3 downto 0); -signal clk4_phase_short : clk4_type; -attribute keep of clk4_phase_short:signal is "true"; - -signal ddr_clk_tog : std_logic; -signal ddr_clk_smp1 : std_logic; -signal ddr_clk_smp2 : std_logic; -signal ddr_clk_phase : std_logic; - -signal smp_req_adr : std_logic_vector(25 downto 1); -signal smp_req_type : std_logic; -signal smp_req_len : std_logic; -signal ddr_write_en_int : std_logic; -signal ddr_read_en_int : std_logic; - -signal dqs_q : std_logic_vector(1 downto 0); -signal dqs_oe_n : std_logic_vector(1 downto 0); -attribute keep of dqs_oe_n:signal is "true"; -signal cas_qn : std_logic; -signal ras_qn : std_logic; -signal we_qn : std_logic; -signal ba_q : std_logic_vector(1 downto 0); -signal sdr_clk : std_logic; -signal sdr_clk_n : std_logic; -signal sdr_a : std_logic_vector(12 downto 0); -signal sdr_d : std_logic_vector(15 downto 0); -signal sdr_smp : std_logic_vector(35 downto 0); -signal sdr_oe_n : std_logic_vector(15 downto 0); -attribute keep of sdr_oe_n:signal is "true"; -signal sdr_oe_ctrl : std_logic_vector(15 downto 0); -attribute keep of sdr_oe_ctrl:signal is "true"; -signal sdr_wr_msw : std_logic_vector(17 downto 0); -attribute keep of sdr_wr_msw:signal is "true"; -signal dm_q : std_logic_vector(1 downto 0); - -signal nowin_idle_dqs : std_logic_vector(1 downto 0); -signal nowin_wr_nop1_d : std_logic_vector(15 downto 0); -signal nowin_wr_nop1_dqs : std_logic_vector(1 downto 0); -signal nowin_wr_nop1_dm : std_logic_vector(1 downto 0); -signal nowin_wr_nop2_dqs : std_logic_vector(1 downto 0); -signal nowin_wr_nop3_d : std_logic_vector(15 downto 0); -signal nowin_wr_nop3_dqs : std_logic_vector(1 downto 0); -attribute keep of nowin_idle_dqs:signal is "true"; -attribute keep of nowin_wr_nop1_d:signal is "true"; -attribute keep of nowin_wr_nop1_dqs:signal is "true"; -attribute keep of nowin_wr_nop1_dm:signal is "true"; -attribute keep of nowin_wr_nop2_dqs:signal is "true"; -attribute keep of nowin_wr_nop3_d:signal is "true"; -attribute keep of nowin_wr_nop3_dqs:signal is "true"; - -signal cas_n_smp : std_logic; -signal ras_n_smp : std_logic; -signal we_n_smp : std_logic; -signal read_start_sig : std_logic; -signal sdr_d_in : std_logic_vector(15 downto 0); -signal read_time_cnt : std_logic_vector(1 downto 0); -signal read_input_en : std_logic; -signal read_input_en_del : std_logic; -signal ddr_data_read_int : std_logic_vector(31 downto 0); - -signal refresh_pend : std_logic; -signal refresh_end : std_logic; -signal refresh_cnt : std_logic_vector(9 downto 0); -signal refresh_wait_cnt : std_logic_vector(3 downto 0); -signal refresh_wait_end : std_logic; - -signal cas_qn_p_del : std_logic; -signal ras_qn_p_del : std_logic; -signal we_qn_p_del : std_logic; -signal sdr_d_p_del : std_logic_vector(15 downto 0); - -signal saved_row : std_logic_vector(26 downto 11); -signal operation : std_logic_vector(1 downto 0); - -signal ddr_req_adr_int : std_logic_vector(25 downto 1); - -type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1, - rd_nop2,rd_nop3,rd_nop4, rd_nop5,pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2, - wr_nop3, cmd, cpu_pre, refresh, refresh_wait); -signal ddr_state : state_type; - -constant Clk_to_Output : time := 2.2 ns; -constant Input_Setup : time := 2.5 ns; - -constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110"; - -begin - - iotimingon: - if simulate_io_time generate - begin - cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup; - ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup; - we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup; - sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup; - end generate; - - iotimingoff: - if not simulate_io_time generate - begin - cas_qn_p_del <= cas_qn_p; - ras_qn_p_del <= ras_qn_p; - we_qn_p_del <= we_qn_p; - sdr_d_p_del <= sdr_d_p; - end generate; - - ddr_write_en <= ddr_write_en_int; - ddr_read_en <= ddr_read_en_int; - ddr_data_read <= ddr_data_read_int; - - ddr_req_adr_int <= (ddr_req_adr(24 downto 10) & '0' & ddr_req_adr(9 downto 1)) when (simulate_io_time) else ddr_req_adr; - - process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order - begin -- to find phase relation with 2x and 4x clocks - if areset = '1' then - cpu_clk_tog <= '0'; - elsif (cpu_clk'event and cpu_clk = '1') then - cpu_clk_tog <= not(cpu_clk_tog); - end if; - end process; - - process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x - begin - if areset = '1' then - cpu_clk_2x_smp1 <= '0'; - cpu_clk_2x_smp2 <= '0'; - clk2_phase <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - cpu_clk_2x_smp1 <= cpu_clk_tog; - cpu_clk_2x_smp2 <= cpu_clk_2x_smp1; - if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then - clk2_phase <= '0'; - else - clk2_phase <= not(clk2_phase); - end if; - end if; - end process; - - process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x - begin - if areset = '1' then - cpu_clk_4x_smp1 <= '0'; - cpu_clk_4x_smp2 <= '0'; - clk4_phase <= "0000"; - clk4_phase_short(0) <= "00"; - clk4_phase_short(1) <= "00"; - clk4_phase_short(2) <= "00"; - clk4_phase_short(3) <= "00"; - clk4_phase_short(4) <= "00"; - clk4_phase_short(5) <= "00"; - clk4_phase_short(6) <= "00"; - clk4_phase_short(7) <= "00"; - clk4_phase_short(8) <= "00"; - clk4_phase_short(9) <= "00"; - clk4_phase_short(10) <= "00"; - clk4_phase_short(11) <= "00"; - clk4_phase_short(12) <= "00"; - clk4_phase_short(13) <= "00"; - clk4_phase_short(14) <= "00"; - clk4_phase_short(15) <= "00"; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - cpu_clk_4x_smp1 <= cpu_clk_tog; - cpu_clk_4x_smp2 <= cpu_clk_4x_smp1; - for i in 0 to 15 loop - if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then - clk4_phase <= "0100"; - clk4_phase_short(i) <= "01"; - else - clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3)); - clk4_phase_short(i) <= clk4_phase_short(i)(0) & clk4_phase_short(i)(1); - end if; - end loop; - end if; - end process; - - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - sdr_clk <= '0'; - sdr_clk_n <= '0'; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - if clk4_phase_short(0)(0) = '1' then - sdr_clk <= '1'; - else - sdr_clk <= '0'; - end if; - if clk4_phase_short(0)(1) = '1' then - sdr_clk_n <= '1'; - else - sdr_clk_n <= '0'; - end if; - end if; - end process; - - cke_q_p <= '1' after Clk_to_Output; - cs_qn_p <= '0' after Clk_to_Output; - - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - ras_qn_p <= '1'; - cas_qn_p <= '1'; - we_qn_p <= '1'; - dqs_q_p <= "ZZ"; - sdr_a_p <= "0000000000000"; - ba_q_p <= "00"; - sdr_clk_p <= '0'; - sdr_clk_n_p <= '1'; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - ras_qn_p <= transport ras_qn after Clk_to_Output; - cas_qn_p <= transport cas_qn after Clk_to_Output; - we_qn_p <= transport we_qn after Clk_to_Output; - if dqs_oe_n(0) = '0' then - dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output; - else - dqs_q_p(0) <= transport 'Z' after Clk_to_Output; - end if; - if dqs_oe_n(1) = '0' then - dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output; - else - dqs_q_p(1) <= transport 'Z' after Clk_to_Output; - end if; - sdr_a_p <= transport sdr_a after Clk_to_Output; - ba_q_p <= transport ba_q after Clk_to_Output; - sdr_clk_p <= transport sdr_clk after Clk_to_Output; - sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output; - end if; - end process; - - process(cpu_clk_2x, areset) -- - begin - if areset = '1' then - ddr_state <= idle; - ras_qn <= '1'; - cas_qn <= '1'; - we_qn <= '1'; - smp_req_adr <= (others => '0'); - smp_req_type <= '0'; - smp_req_len <= '0'; - sdr_a <= "XXXXXXXXXXXXX"; - ba_q <= "00"; - ddr_busy <= '1'; - saved_row <= "1000000000000000"; - ddr_write_en_int <= '0'; - ddr_read_en_int <= '0'; - nowin_idle_dqs <= "11"; - nowin_wr_nop1_d <= "0000000000000000"; - nowin_wr_nop1_dqs <= "00"; - nowin_wr_nop1_dm <= "00"; - nowin_wr_nop2_dqs <= "00"; - nowin_wr_nop3_d <= "0000000000000000"; - nowin_wr_nop3_dqs <= "00"; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - - -- Default values - ras_qn <= '1'; - cas_qn <= '1'; - we_qn <= '1'; - sdr_a <= "XXXXXXXXXXXXX"; - ddr_busy <= '1'; - ddr_write_en_int <= '0'; - ddr_read_en_int <= '0'; - - nowin_idle_dqs <= "00"; - nowin_wr_nop1_d <= "0000000000000000"; - nowin_wr_nop1_dqs <= "00"; - nowin_wr_nop1_dm <= "00"; - nowin_wr_nop2_dqs <= "00"; - nowin_wr_nop3_d <= "0000000000000000"; - nowin_wr_nop3_dqs <= "00"; - - case ddr_state is - when idle => - smp_req_adr <= ddr_req_adr_int; - smp_req_type <= ddr_rd_wr_n; - smp_req_len <= ddr_req_len; - ddr_busy <= '0'; - operation <= "00"; - if refresh_pend = '1' then - operation <= "01"; - ddr_state <= pre; - elsif new_command = '1' then - if ddr_cmd(15) = '1' then - operation <= "10"; - ddr_state <= cpu_pre; - else - ddr_state <= cmd; - end if; - elsif (ddr_req = '1' and ddr_req_adr_int(25 downto 11) = saved_row(25 downto 11) and saved_row(26) = '0') then - operation <= "11"; - ddr_write_en_int <= not(ddr_rd_wr_n); - ddr_state <= rd_wr; - elsif ddr_req = '1' then - operation <= "11"; - ddr_state <= pre; - else - ddr_state <= idle; - nowin_idle_dqs <= "11"; - end if; - when act => - sdr_a <= smp_req_adr(23 downto 11); - ba_q <= smp_req_adr(25 downto 24); - ras_qn <= '0'; - ddr_write_en_int <= not(smp_req_type); - ddr_state <= act_nop1; - when act_nop1 => - ddr_state <= act_nop2; - when act_nop2 => - ddr_state <= rd_wr; - when rd_wr => - sdr_a(10) <= '0'; -- Disable auto precharge - sdr_a(9 downto 0) <= smp_req_adr(10 downto 1); - ba_q <= smp_req_adr(25 downto 24); - saved_row <= '0' & smp_req_adr(25 downto 11); - cas_qn <= '0'; - we_qn <= smp_req_type; - if smp_req_type = '1' then - ddr_state <= rd_nop1; - else - ddr_state <= wr_nop1; - nowin_wr_nop1_d <= "1111111111111111"; - nowin_wr_nop1_dqs <= "11"; - nowin_wr_nop1_dm <= "11"; - end if; - when wr_nop1 => - ddr_state <= wr_nop2; - nowin_wr_nop2_dqs <= "11"; - when wr_nop2 => - ddr_state <= wr_nop3; - nowin_wr_nop3_d <= "1111111111111111"; - nowin_wr_nop3_dqs <= "11"; - when wr_nop3 => - nowin_idle_dqs <= "11"; - ddr_state <= idle; - when rd_nop1 => - ddr_state <= rd_nop2; - when rd_nop2 => - if operation /= "11" then - nowin_idle_dqs <= "11"; - ddr_state <= idle; - else - ddr_state <= rd_nop3; - end if; - when rd_nop3 => - ddr_state <= rd_nop4; - when rd_nop4 => - ddr_read_en_int <= '1'; - ddr_state <= rd_nop5; - when rd_nop5 => - nowin_idle_dqs <= "11"; - ddr_state <= idle; - when pre => - ras_qn <= '0'; - we_qn <= '0'; - sdr_a(10) <= '1'; -- Precharge all banks - ba_q <= smp_req_adr(25 downto 24); - ddr_state <= pre_nop1; - when pre_nop1 => - ddr_state <= pre_nop2; - when cmd => - cas_qn <= '0'; - ras_qn <= '0'; - we_qn <= '0'; - ba_q <= ddr_cmd(14 downto 13); - sdr_a <= ddr_cmd(12 downto 0); - nowin_idle_dqs <= "11"; - ddr_state <= idle; - when cpu_pre => - ddr_state <= pre; - when refresh => - cas_qn <= '0'; - ras_qn <= '0'; - saved_row(26) <= '1'; - ddr_state <= refresh_wait; - when refresh_wait => - if refresh_wait_end = '1' then - ddr_state <= pre_nop2; - end if; - when pre_nop2 => - if operation = "01" then - operation <= "10"; - ddr_state <= refresh; - elsif operation = "10" then - nowin_idle_dqs <= "11"; - ddr_state <= idle; - else - ddr_state <= act; - end if; - when others => - ddr_state <= idle; - nowin_idle_dqs <= "11"; - end case; - end if; - end process; - - process(cpu_clk, areset) -- - begin - if areset = '1' then - ddr_cmd <= "0000000000000000"; - elsif (cpu_clk'event and cpu_clk = '1') then - if ddr_command_we = '1' then - ddr_cmd <= ddr_command; - else - ddr_cmd <= ddr_cmd; - end if; - end if; - end process; - - process(cpu_clk_2x, areset) -- - begin - if areset = '1' then - ddr_cmd_we_smp <= '0'; - new_command <= '0'; - sdr_smp <= "000000000000000000000000000000000000"; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - ddr_cmd_we_smp <= ddr_command_we; - if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then - new_command <= '1'; - elsif ddr_state = cmd or ddr_state = cpu_pre then - new_command <= '0'; - else - new_command <= new_command; - end if; - - if ddr_write_en_int = '1' then - sdr_smp <= ddr_data_write; - else - sdr_smp <= sdr_smp; - end if; - - end if; - end process; - - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - dqs_q <= "00"; - dqs_oe_n <= "11"; - sdr_oe_ctrl <= "1111111111111111"; - sdr_wr_msw <= "000000000000000000"; - elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then - - for i in 0 to 15 loop - if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(0) = '1' then - sdr_oe_ctrl(i) <= '0'; - elsif nowin_wr_nop3_d(i) = '1' and clk4_phase_short(i)(0) = '1' then - sdr_oe_ctrl(i) <= '1'; - end if; - end loop; - - for i in 0 to 1 loop - if nowin_idle_dqs(i) = '1' or nowin_wr_nop3_dqs(i) = '1' then - dqs_oe_n(i) <= '1'; - elsif nowin_wr_nop1_dqs(i) = '1' then - dqs_oe_n(i) <= '0'; - end if; - end loop; - - for i in 0 to 1 loop - if (nowin_wr_nop2_dqs(i) = '1' and clk4_phase_short(i)(0) = '1') then - dqs_q(i) <= '1'; - else - dqs_q(i) <= '0'; - end if; - end loop; - - for i in 0 to 15 loop - if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(1) = '1' then - sdr_wr_msw(i) <= '1'; - else - sdr_wr_msw(i) <= '0'; - end if; - end loop; - - for i in 0 to 1 loop - if nowin_wr_nop1_dm(i) = '1' and clk4_phase_short(i)(1) = '1' then - sdr_wr_msw(i+16) <= '1'; - else - sdr_wr_msw(i+16) <= '0'; - end if; - end loop; - - end if; - end process; - - -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK - process(cpu_clk_4x, areset) -- - begin - if areset = '1' then - sdr_d_p <= "ZZZZZZZZZZZZZZZZ"; - dm_q_p <= "11"; - sdr_oe_n <= "1111111111111111"; - sdr_d <= "0000000000000000"; - dm_q <= "11"; - elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then - - for i in 0 to 15 loop - if sdr_oe_n(i) = '0' then - sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output; - else - sdr_d_p(i) <= transport 'Z' after Clk_to_Output; - end if; - end loop; - - dm_q_p <= transport dm_q after Clk_to_Output; - - for i in 0 to 15 loop - if sdr_oe_ctrl(i) = '0' then - sdr_oe_n(i) <= '0'; - else - sdr_oe_n(i) <= '1'; - end if; - end loop; - - for i in 0 to 15 loop - if sdr_wr_msw(i) = '1' then - sdr_d(i) <= sdr_smp(i); - else - sdr_d(i) <= sdr_smp(i+16); - end if; - end loop; - - for i in 0 to 1 loop - if sdr_wr_msw(i+16) = '1' then - dm_q(i) <= sdr_smp(i+32); - else - dm_q(i) <= sdr_smp(i+34); - end if; - end loop; - - end if; - end process; - - process(cpu_clk_2x, areset) -- - begin - if areset = '1' then - refresh_cnt <= "0000000000"; - refresh_pend <= '0'; - refresh_end <= '0'; - refresh_wait_cnt <= "0000"; - refresh_wait_end <= '0'; - elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then - - if refresh_cnt = Refresh_Interval then - refresh_end <= '1'; - else - refresh_end <= '0'; - end if; - - if refresh_end = '1' then - refresh_cnt <= "0000000000"; - else - refresh_cnt <= refresh_cnt + '1'; - end if; - - if refresh_end = '1' and refresh_en = '1' then - refresh_pend <= '1'; - elsif ddr_state = refresh then - refresh_pend <= '0'; - else - refresh_pend <= refresh_pend; - end if; - - if ddr_state = refresh_wait then - refresh_wait_cnt <= refresh_wait_cnt + '1'; - else - refresh_wait_cnt <= "0000"; - end if; - - if refresh_wait_cnt = "1011" then - refresh_wait_end <= '1'; - else - refresh_wait_end <= '0'; - end if; - - end if; - end process; - - -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING - - process(ddr_in_clk, areset) - begin - if areset = '1' then - ddr_clk_tog <= '0'; - elsif (ddr_in_clk'event and ddr_in_clk = '1') then - ddr_clk_tog <= not(ddr_clk_tog); - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - ddr_clk_smp1 <= '0'; - ddr_clk_smp2 <= '0'; - ddr_clk_phase <= '0'; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - ddr_clk_smp1 <= ddr_clk_tog; - ddr_clk_smp2 <= ddr_clk_smp1; - if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then - ddr_clk_phase <= '0'; - else - ddr_clk_phase <= not(ddr_clk_phase); - end if; - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - cas_n_smp <= '0'; - ras_n_smp <= '0'; - we_n_smp <= '0'; - read_start_sig <= '0'; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - cas_n_smp <= cas_qn_p_del; - ras_n_smp <= ras_qn_p_del; - we_n_smp <= we_qn_p_del; - if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then - read_start_sig <= '1'; - else - read_start_sig <= '0'; - end if; - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - sdr_d_in <= "0000000000000000"; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - sdr_d_in <= sdr_d_p_del; - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - read_time_cnt <= "00"; - read_input_en <= '0'; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - - if read_start_sig = '1' then - read_time_cnt <= "01"; - elsif read_time_cnt = "00" then - read_time_cnt <= read_time_cnt; - else - read_time_cnt <= read_time_cnt + '1'; - end if; - - if read_time_cnt = "11" then - read_input_en <= '1'; - else - read_input_en <= '0'; - end if; - - read_input_en_del <= read_input_en; - - end if; - end process; - - process(ddr_in_clk_2x, areset) - begin - if areset = '1' then - ddr_data_read_int <= "00000000000000000000000000000000"; - elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then - if read_input_en = '1' then - ddr_data_read_int(15 downto 0) <= sdr_d_in; - end if; - if read_input_en_del = '1' then - ddr_data_read_int(31 downto 16) <= sdr_d_in; - end if; - end if; - end process; - -end behave; - - +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.vcomponents.all; + +entity ddr_top is + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + 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; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- 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 +end ddr_top; + +architecture behave of ddr_top is + +attribute keep : string; + +type clk4_type is array(0 to 15) of std_logic_vector(1 downto 0); + +signal cpu_clk_tog : std_logic; +signal ddr_cmd : std_logic_vector(15 downto 0); +signal ddr_cmd_we_smp : std_logic; +signal new_command : std_logic; + +signal cpu_clk_2x_smp1 : std_logic; +signal cpu_clk_2x_smp2 : std_logic; +signal cpu_clk_4x_smp1 : std_logic; +signal cpu_clk_4x_smp2 : std_logic; + +signal clk2_phase : std_logic; +signal clk4_phase : std_logic_vector(3 downto 0); +signal clk4_phase_short : clk4_type; +attribute keep of clk4_phase_short:signal is "true"; + +signal ddr_clk_tog : std_logic; +signal ddr_clk_smp1 : std_logic; +signal ddr_clk_smp2 : std_logic; +signal ddr_clk_phase : std_logic; + +signal smp_req_adr : std_logic_vector(25 downto 1); +signal smp_req_type : std_logic; +signal smp_req_len : std_logic; +signal ddr_write_en_int : std_logic; +signal ddr_read_en_int : std_logic; + +signal dqs_q : std_logic_vector(1 downto 0); +signal dqs_oe_n : std_logic_vector(1 downto 0); +attribute keep of dqs_oe_n:signal is "true"; +signal cas_qn : std_logic; +signal ras_qn : std_logic; +signal we_qn : std_logic; +signal ba_q : std_logic_vector(1 downto 0); +signal sdr_clk : std_logic; +signal sdr_clk_n : std_logic; +signal sdr_a : std_logic_vector(12 downto 0); +signal sdr_d : std_logic_vector(15 downto 0); +signal sdr_smp : std_logic_vector(35 downto 0); +signal sdr_oe_n : std_logic_vector(15 downto 0); +attribute keep of sdr_oe_n:signal is "true"; +signal sdr_oe_ctrl : std_logic_vector(15 downto 0); +attribute keep of sdr_oe_ctrl:signal is "true"; +signal sdr_wr_msw : std_logic_vector(17 downto 0); +attribute keep of sdr_wr_msw:signal is "true"; +signal dm_q : std_logic_vector(1 downto 0); + +signal nowin_idle_dqs : std_logic_vector(1 downto 0); +signal nowin_wr_nop1_d : std_logic_vector(15 downto 0); +signal nowin_wr_nop1_dqs : std_logic_vector(1 downto 0); +signal nowin_wr_nop1_dm : std_logic_vector(1 downto 0); +signal nowin_wr_nop2_dqs : std_logic_vector(1 downto 0); +signal nowin_wr_nop3_d : std_logic_vector(15 downto 0); +signal nowin_wr_nop3_dqs : std_logic_vector(1 downto 0); +attribute keep of nowin_idle_dqs:signal is "true"; +attribute keep of nowin_wr_nop1_d:signal is "true"; +attribute keep of nowin_wr_nop1_dqs:signal is "true"; +attribute keep of nowin_wr_nop1_dm:signal is "true"; +attribute keep of nowin_wr_nop2_dqs:signal is "true"; +attribute keep of nowin_wr_nop3_d:signal is "true"; +attribute keep of nowin_wr_nop3_dqs:signal is "true"; + +signal cas_n_smp : std_logic; +signal ras_n_smp : std_logic; +signal we_n_smp : std_logic; +signal read_start_sig : std_logic; +signal sdr_d_in : std_logic_vector(15 downto 0); +signal read_time_cnt : std_logic_vector(1 downto 0); +signal read_input_en : std_logic; +signal read_input_en_del : std_logic; +signal ddr_data_read_int : std_logic_vector(31 downto 0); + +signal refresh_pend : std_logic; +signal refresh_end : std_logic; +signal refresh_cnt : std_logic_vector(9 downto 0); +signal refresh_wait_cnt : std_logic_vector(3 downto 0); +signal refresh_wait_end : std_logic; + +signal cas_qn_p_del : std_logic; +signal ras_qn_p_del : std_logic; +signal we_qn_p_del : std_logic; +signal sdr_d_p_del : std_logic_vector(15 downto 0); + +signal saved_row : std_logic_vector(26 downto 11); +signal operation : std_logic_vector(1 downto 0); + +signal ddr_req_adr_int : std_logic_vector(25 downto 1); + +type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1, + rd_nop2,rd_nop3,rd_nop4, rd_nop5,pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2, + wr_nop3, cmd, cpu_pre, refresh, refresh_wait); +signal ddr_state : state_type; + +constant Clk_to_Output : time := 2.2 ns; +constant Input_Setup : time := 2.5 ns; + +constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110"; + +begin + + iotimingon: + if simulate_io_time generate + begin + cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup; + ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup; + we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup; + sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cas_qn_p_del <= cas_qn_p; + ras_qn_p_del <= ras_qn_p; + we_qn_p_del <= we_qn_p; + sdr_d_p_del <= sdr_d_p; + end generate; + + ddr_write_en <= ddr_write_en_int; + ddr_read_en <= ddr_read_en_int; + ddr_data_read <= ddr_data_read_int; + + ddr_req_adr_int <= (ddr_req_adr(24 downto 10) & '0' & ddr_req_adr(9 downto 1)) when (simulate_io_time) else ddr_req_adr; + + process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order + begin -- to find phase relation with 2x and 4x clocks + if areset = '1' then + cpu_clk_tog <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_tog <= not(cpu_clk_tog); + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x + begin + if areset = '1' then + cpu_clk_2x_smp1 <= '0'; + cpu_clk_2x_smp2 <= '0'; + clk2_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_2x_smp1 <= cpu_clk_tog; + cpu_clk_2x_smp2 <= cpu_clk_2x_smp1; + if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then + clk2_phase <= '0'; + else + clk2_phase <= not(clk2_phase); + end if; + end if; + end process; + + process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x + begin + if areset = '1' then + cpu_clk_4x_smp1 <= '0'; + cpu_clk_4x_smp2 <= '0'; + clk4_phase <= "0000"; + clk4_phase_short(0) <= "00"; + clk4_phase_short(1) <= "00"; + clk4_phase_short(2) <= "00"; + clk4_phase_short(3) <= "00"; + clk4_phase_short(4) <= "00"; + clk4_phase_short(5) <= "00"; + clk4_phase_short(6) <= "00"; + clk4_phase_short(7) <= "00"; + clk4_phase_short(8) <= "00"; + clk4_phase_short(9) <= "00"; + clk4_phase_short(10) <= "00"; + clk4_phase_short(11) <= "00"; + clk4_phase_short(12) <= "00"; + clk4_phase_short(13) <= "00"; + clk4_phase_short(14) <= "00"; + clk4_phase_short(15) <= "00"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + cpu_clk_4x_smp1 <= cpu_clk_tog; + cpu_clk_4x_smp2 <= cpu_clk_4x_smp1; + for i in 0 to 15 loop + if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then + clk4_phase <= "0100"; + clk4_phase_short(i) <= "01"; + else + clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3)); + clk4_phase_short(i) <= clk4_phase_short(i)(0) & clk4_phase_short(i)(1); + end if; + end loop; + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_clk <= '0'; + sdr_clk_n <= '0'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + if clk4_phase_short(0)(0) = '1' then + sdr_clk <= '1'; + else + sdr_clk <= '0'; + end if; + if clk4_phase_short(0)(1) = '1' then + sdr_clk_n <= '1'; + else + sdr_clk_n <= '0'; + end if; + end if; + end process; + + cke_q_p <= '1' after Clk_to_Output; + cs_qn_p <= '0' after Clk_to_Output; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + ras_qn_p <= '1'; + cas_qn_p <= '1'; + we_qn_p <= '1'; + dqs_q_p <= "ZZ"; + sdr_a_p <= "0000000000000"; + ba_q_p <= "00"; + sdr_clk_p <= '0'; + sdr_clk_n_p <= '1'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + ras_qn_p <= transport ras_qn after Clk_to_Output; + cas_qn_p <= transport cas_qn after Clk_to_Output; + we_qn_p <= transport we_qn after Clk_to_Output; + if dqs_oe_n(0) = '0' then + dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output; + else + dqs_q_p(0) <= transport 'Z' after Clk_to_Output; + end if; + if dqs_oe_n(1) = '0' then + dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output; + else + dqs_q_p(1) <= transport 'Z' after Clk_to_Output; + end if; + sdr_a_p <= transport sdr_a after Clk_to_Output; + ba_q_p <= transport ba_q after Clk_to_Output; + sdr_clk_p <= transport sdr_clk after Clk_to_Output; + sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_state <= idle; + ras_qn <= '1'; + cas_qn <= '1'; + we_qn <= '1'; + smp_req_adr <= (others => '0'); + smp_req_type <= '0'; + smp_req_len <= '0'; + sdr_a <= "XXXXXXXXXXXXX"; + ba_q <= "00"; + ddr_busy <= '1'; + saved_row <= "1000000000000000"; + ddr_write_en_int <= '0'; + ddr_read_en_int <= '0'; + nowin_idle_dqs <= "11"; + nowin_wr_nop1_d <= "0000000000000000"; + nowin_wr_nop1_dqs <= "00"; + nowin_wr_nop1_dm <= "00"; + nowin_wr_nop2_dqs <= "00"; + nowin_wr_nop3_d <= "0000000000000000"; + nowin_wr_nop3_dqs <= "00"; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + -- Default values + ras_qn <= '1'; + cas_qn <= '1'; + we_qn <= '1'; + sdr_a <= "XXXXXXXXXXXXX"; + ddr_busy <= '1'; + ddr_write_en_int <= '0'; + ddr_read_en_int <= '0'; + + nowin_idle_dqs <= "00"; + nowin_wr_nop1_d <= "0000000000000000"; + nowin_wr_nop1_dqs <= "00"; + nowin_wr_nop1_dm <= "00"; + nowin_wr_nop2_dqs <= "00"; + nowin_wr_nop3_d <= "0000000000000000"; + nowin_wr_nop3_dqs <= "00"; + + case ddr_state is + when idle => + smp_req_adr <= ddr_req_adr_int; + smp_req_type <= ddr_rd_wr_n; + smp_req_len <= ddr_req_len; + ddr_busy <= '0'; + operation <= "00"; + if refresh_pend = '1' then + operation <= "01"; + ddr_state <= pre; + elsif new_command = '1' then + if ddr_cmd(15) = '1' then + operation <= "10"; + ddr_state <= cpu_pre; + else + ddr_state <= cmd; + end if; + elsif (ddr_req = '1' and ddr_req_adr_int(25 downto 11) = saved_row(25 downto 11) and saved_row(26) = '0') then + operation <= "11"; + ddr_write_en_int <= not(ddr_rd_wr_n); + ddr_state <= rd_wr; + elsif ddr_req = '1' then + operation <= "11"; + ddr_state <= pre; + else + ddr_state <= idle; + nowin_idle_dqs <= "11"; + end if; + when act => + sdr_a <= smp_req_adr(23 downto 11); + ba_q <= smp_req_adr(25 downto 24); + ras_qn <= '0'; + ddr_write_en_int <= not(smp_req_type); + ddr_state <= act_nop1; + when act_nop1 => + ddr_state <= act_nop2; + when act_nop2 => + ddr_state <= rd_wr; + when rd_wr => + sdr_a(10) <= '0'; -- Disable auto precharge + sdr_a(9 downto 0) <= smp_req_adr(10 downto 1); + ba_q <= smp_req_adr(25 downto 24); + saved_row <= '0' & smp_req_adr(25 downto 11); + cas_qn <= '0'; + we_qn <= smp_req_type; + if smp_req_type = '1' then + ddr_state <= rd_nop1; + else + ddr_state <= wr_nop1; + nowin_wr_nop1_d <= "1111111111111111"; + nowin_wr_nop1_dqs <= "11"; + nowin_wr_nop1_dm <= "11"; + end if; + when wr_nop1 => + ddr_state <= wr_nop2; + nowin_wr_nop2_dqs <= "11"; + when wr_nop2 => + ddr_state <= wr_nop3; + nowin_wr_nop3_d <= "1111111111111111"; + nowin_wr_nop3_dqs <= "11"; + when wr_nop3 => + nowin_idle_dqs <= "11"; + ddr_state <= idle; + when rd_nop1 => + ddr_state <= rd_nop2; + when rd_nop2 => + if operation /= "11" then + nowin_idle_dqs <= "11"; + ddr_state <= idle; + else + ddr_state <= rd_nop3; + end if; + when rd_nop3 => + ddr_state <= rd_nop4; + when rd_nop4 => + ddr_read_en_int <= '1'; + ddr_state <= rd_nop5; + when rd_nop5 => + nowin_idle_dqs <= "11"; + ddr_state <= idle; + when pre => + ras_qn <= '0'; + we_qn <= '0'; + sdr_a(10) <= '1'; -- Precharge all banks + ba_q <= smp_req_adr(25 downto 24); + ddr_state <= pre_nop1; + when pre_nop1 => + ddr_state <= pre_nop2; + when cmd => + cas_qn <= '0'; + ras_qn <= '0'; + we_qn <= '0'; + ba_q <= ddr_cmd(14 downto 13); + sdr_a <= ddr_cmd(12 downto 0); + nowin_idle_dqs <= "11"; + ddr_state <= idle; + when cpu_pre => + ddr_state <= pre; + when refresh => + cas_qn <= '0'; + ras_qn <= '0'; + saved_row(26) <= '1'; + ddr_state <= refresh_wait; + when refresh_wait => + if refresh_wait_end = '1' then + ddr_state <= pre_nop2; + end if; + when pre_nop2 => + if operation = "01" then + operation <= "10"; + ddr_state <= refresh; + elsif operation = "10" then + nowin_idle_dqs <= "11"; + ddr_state <= idle; + else + ddr_state <= act; + end if; + when others => + ddr_state <= idle; + nowin_idle_dqs <= "11"; + end case; + end if; + end process; + + process(cpu_clk, areset) -- + begin + if areset = '1' then + ddr_cmd <= "0000000000000000"; + elsif (cpu_clk'event and cpu_clk = '1') then + if ddr_command_we = '1' then + ddr_cmd <= ddr_command; + else + ddr_cmd <= ddr_cmd; + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_cmd_we_smp <= '0'; + new_command <= '0'; + sdr_smp <= "000000000000000000000000000000000000"; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + ddr_cmd_we_smp <= ddr_command_we; + if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then + new_command <= '1'; + elsif ddr_state = cmd or ddr_state = cpu_pre then + new_command <= '0'; + else + new_command <= new_command; + end if; + + if ddr_write_en_int = '1' then + sdr_smp <= ddr_data_write; + else + sdr_smp <= sdr_smp; + end if; + + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + dqs_q <= "00"; + dqs_oe_n <= "11"; + sdr_oe_ctrl <= "1111111111111111"; + sdr_wr_msw <= "000000000000000000"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + + for i in 0 to 15 loop + if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(0) = '1' then + sdr_oe_ctrl(i) <= '0'; + elsif nowin_wr_nop3_d(i) = '1' and clk4_phase_short(i)(0) = '1' then + sdr_oe_ctrl(i) <= '1'; + end if; + end loop; + + for i in 0 to 1 loop + if nowin_idle_dqs(i) = '1' or nowin_wr_nop3_dqs(i) = '1' then + dqs_oe_n(i) <= '1'; + elsif nowin_wr_nop1_dqs(i) = '1' then + dqs_oe_n(i) <= '0'; + end if; + end loop; + + for i in 0 to 1 loop + if (nowin_wr_nop2_dqs(i) = '1' and clk4_phase_short(i)(0) = '1') then + dqs_q(i) <= '1'; + else + dqs_q(i) <= '0'; + end if; + end loop; + + for i in 0 to 15 loop + if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(1) = '1' then + sdr_wr_msw(i) <= '1'; + else + sdr_wr_msw(i) <= '0'; + end if; + end loop; + + for i in 0 to 1 loop + if nowin_wr_nop1_dm(i) = '1' and clk4_phase_short(i)(1) = '1' then + sdr_wr_msw(i+16) <= '1'; + else + sdr_wr_msw(i+16) <= '0'; + end if; + end loop; + + end if; + end process; + + -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_d_p <= "ZZZZZZZZZZZZZZZZ"; + dm_q_p <= "11"; + sdr_oe_n <= "1111111111111111"; + sdr_d <= "0000000000000000"; + dm_q <= "11"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then + + for i in 0 to 15 loop + if sdr_oe_n(i) = '0' then + sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output; + else + sdr_d_p(i) <= transport 'Z' after Clk_to_Output; + end if; + end loop; + + dm_q_p <= transport dm_q after Clk_to_Output; + + for i in 0 to 15 loop + if sdr_oe_ctrl(i) = '0' then + sdr_oe_n(i) <= '0'; + else + sdr_oe_n(i) <= '1'; + end if; + end loop; + + for i in 0 to 15 loop + if sdr_wr_msw(i) = '1' then + sdr_d(i) <= sdr_smp(i); + else + sdr_d(i) <= sdr_smp(i+16); + end if; + end loop; + + for i in 0 to 1 loop + if sdr_wr_msw(i+16) = '1' then + dm_q(i) <= sdr_smp(i+32); + else + dm_q(i) <= sdr_smp(i+34); + end if; + end loop; + + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + refresh_cnt <= "0000000000"; + refresh_pend <= '0'; + refresh_end <= '0'; + refresh_wait_cnt <= "0000"; + refresh_wait_end <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + if refresh_cnt = Refresh_Interval then + refresh_end <= '1'; + else + refresh_end <= '0'; + end if; + + if refresh_end = '1' then + refresh_cnt <= "0000000000"; + else + refresh_cnt <= refresh_cnt + '1'; + end if; + + if refresh_end = '1' and refresh_en = '1' then + refresh_pend <= '1'; + elsif ddr_state = refresh then + refresh_pend <= '0'; + else + refresh_pend <= refresh_pend; + end if; + + if ddr_state = refresh_wait then + refresh_wait_cnt <= refresh_wait_cnt + '1'; + else + refresh_wait_cnt <= "0000"; + end if; + + if refresh_wait_cnt = "1011" then + refresh_wait_end <= '1'; + else + refresh_wait_end <= '0'; + end if; + + end if; + end process; + + -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING + + process(ddr_in_clk, areset) + begin + if areset = '1' then + ddr_clk_tog <= '0'; + elsif (ddr_in_clk'event and ddr_in_clk = '1') then + ddr_clk_tog <= not(ddr_clk_tog); + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_clk_smp1 <= '0'; + ddr_clk_smp2 <= '0'; + ddr_clk_phase <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + ddr_clk_smp1 <= ddr_clk_tog; + ddr_clk_smp2 <= ddr_clk_smp1; + if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then + ddr_clk_phase <= '0'; + else + ddr_clk_phase <= not(ddr_clk_phase); + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + cas_n_smp <= '0'; + ras_n_smp <= '0'; + we_n_smp <= '0'; + read_start_sig <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + cas_n_smp <= cas_qn_p_del; + ras_n_smp <= ras_qn_p_del; + we_n_smp <= we_qn_p_del; + if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then + read_start_sig <= '1'; + else + read_start_sig <= '0'; + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + sdr_d_in <= "0000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + sdr_d_in <= sdr_d_p_del; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + read_time_cnt <= "00"; + read_input_en <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + + if read_start_sig = '1' then + read_time_cnt <= "01"; + elsif read_time_cnt = "00" then + read_time_cnt <= read_time_cnt; + else + read_time_cnt <= read_time_cnt + '1'; + end if; + + if read_time_cnt = "11" then + read_input_en <= '1'; + else + read_input_en <= '0'; + end if; + + read_input_en_del <= read_input_en; + + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_data_read_int <= "00000000000000000000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + if read_input_en = '1' then + ddr_data_read_int(15 downto 0) <= sdr_d_in; + end if; + if read_input_en_del = '1' then + ddr_data_read_int(31 downto 16) <= sdr_d_in; + end if; + end if; + end process; + +end behave; + + diff --git a/misc/ddrsdram/src/mt46v16m16.vhd b/misc/ddrsdram/src/mt46v16m16.vhd index 6b89345..356bb28 100644 --- a/misc/ddrsdram/src/mt46v16m16.vhd +++ b/misc/ddrsdram/src/mt46v16m16.vhd @@ -1,1320 +1,1320 @@ ------------------------------------------------------------------------------------------ --- --- File Name: MT46V16M16.VHD --- Version: 2.1 --- Date: January 14th, 2002 --- Model: Behavioral --- Simulator: NCDesktop - http://www.cadence.com --- ModelSim PE - http://www.model.com --- --- Dependencies: None --- --- Author: Son P. Huynh --- Email: sphuynh@micron.com --- Phone: (208) 368-3825 --- Company: Micron Technology, Inc. --- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks) --- --- Description: Micron 256 Mb SDRAM DDR (Double Data Rate) --- --- Limitation: Doesn't model internal refresh counter --- --- Note: --- --- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY --- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY --- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR --- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. --- --- Copyright (c) 1998 Micron Semiconductor Products, Inc. --- All rights researved --- --- Rev Author Date Changes --- --- ---------------------------- ---------- ------------------------------------- --- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter --- Micron Technology, Inc. --- --- 2.0 Son P. Huynh 11/08/2001 - Second release --- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE --- ------------------------------------------------------------------------------------------ - -LIBRARY IEEE; - USE IEEE.STD_LOGIC_1164.ALL; - USE IEEE.STD_LOGIC_UNSIGNED.ALL; - USE IEEE.STD_LOGIC_ARITH.ALL; - -ENTITY MT46V16M16 IS - GENERIC ( -- Timing for -75Z CL2 - tCK : TIME := 7.500 ns; - tCH : TIME := 3.375 ns; -- 0.45*tCK - tCL : TIME := 3.375 ns; -- 0.45*tCK - tDH : TIME := 0.500 ns; - tDS : TIME := 0.500 ns; - tIH : TIME := 0.900 ns; - tIS : TIME := 0.900 ns; - tMRD : TIME := 15.000 ns; - tRAS : TIME := 40.000 ns; - tRAP : TIME := 20.000 ns; - tRC : TIME := 65.000 ns; - tRFC : TIME := 75.000 ns; - tRCD : TIME := 20.000 ns; - tRP : TIME := 20.000 ns; - tRRD : TIME := 15.000 ns; - tWR : TIME := 15.000 ns; - addr_bits : INTEGER := 13; - data_bits : INTEGER := 16; - cols_bits : INTEGER := 9 - ); - PORT ( - Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); - Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; - Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); - Clk : IN STD_LOGIC; - Clk_n : IN STD_LOGIC; - Cke : IN STD_LOGIC; - Cs_n : IN STD_LOGIC; - Ras_n : IN STD_LOGIC; - Cas_n : IN STD_LOGIC; - We_n : IN STD_LOGIC; - Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); -END MT46V16M16; - -ARCHITECTURE behave OF MT46V16M16 IS - -- Array for Read pipeline - TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); - TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - - -- Array for Write pipeline - TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); - TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - - -- Array for Auto Precharge - TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER; - - -- Array for Manual Precharge - TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); - TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - - -- Array for Burst Terminate - TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; - - -- Array for Memory Access - TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); - TYPE Array_ram_pntr IS ACCESS Array_ram_type; - TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr; - - -- Data pair - SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0); - SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0); - - -- Mode Register - SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); - - -- Command Decode Variables - SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0'; - SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; - - -- Burst Length Decode Variables - SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0'; - - -- Cas Latency Decode Variables - SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0'; - - -- Internal Control Signals - SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; - - -- System Clock - SIGNAL Sys_clk : STD_LOGIC := '0'; - - -- Dqs buffer - SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; - -BEGIN - -- Strip the strength - Cs_in <= To_X01 (Cs_n); - Ras_in <= To_X01 (Ras_n); - Cas_in <= To_X01 (Cas_n); - We_in <= To_X01 (We_n); - - -- Commands Decode - Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; - Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; - Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); - Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1)); - Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1)); - Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); - Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; - Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); - - -- Burst Length Decode - Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); - Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); - Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); - Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); - - -- CAS Latency Decode - Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4)); - Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); - Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4)); - Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); - Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4)); - - -- Dqs buffer - Dqs <= Dqs_out; - - -- - -- System Clock - -- - int_clk : PROCESS (Clk, Clk_n) - VARIABLE ClkZ, CkeZ : STD_LOGIC := '0'; - begin - IF Clk = '1' AND Clk_n = '0' THEN - ClkZ := '1'; - CkeZ := Cke; - ELSIF Clk = '0' AND Clk_n = '1' THEN - ClkZ := '0'; - END IF; - Sys_clk <= CkeZ AND ClkZ; - END PROCESS; - - -- - -- Main Process - -- - state_register : PROCESS - -- Precharge Variables - VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; - - -- Activate Variables - VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; - - -- Data IO variables - VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; - - -- Internal address mux variables - VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0); - VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; - VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; - VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); - - -- DLL Reset variables - VARIABLE DLL_enable : STD_LOGIC := '0'; - VARIABLE DLL_reset : STD_LOGIC := '0'; - VARIABLE DLL_done : STD_LOGIC := '0'; - VARIABLE DLL_count : INTEGER := 0; - - -- Timing Check - VARIABLE MRD_chk : TIME := 0 ns; - VARIABLE RFC_chk : TIME := 0 ns; - VARIABLE RRD_chk : TIME := 0 ns; - VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; - VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns; - VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; - VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; - VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; - VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns; - - -- Read pipeline variables - VARIABLE Read_cmnd : Array_Read_cmnd; - VARIABLE Read_bank : Array_Read_bank; - VARIABLE Read_cols : Array_Read_cols; - - -- Write pipeline variables - VARIABLE Write_cmnd : Array_Write_cmnd; - VARIABLE Write_bank : Array_Write_bank; - VARIABLE Write_cols : Array_Write_cols; - - -- Auto Precharge variables - VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0'); - VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0'); - VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 ); - - -- Manual Precharge variables - VARIABLE A10_precharge : Array_A10_precharge; - VARIABLE Bank_precharge : Array_Bank_precharge; - VARIABLE Cmnd_precharge : Array_Cmnd_precharge; - - -- Burst Terminate variable - VARIABLE Cmnd_bst : Array_Cmnd_bst; - - -- Memory Banks - VARIABLE Bank0 : Array_ram_stor; - VARIABLE Bank1 : Array_ram_stor; - VARIABLE Bank2 : Array_ram_stor; - VARIABLE Bank3 : Array_ram_stor; - - -- Burst Counter - VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); - - -- Internal Dqs initialize - VARIABLE Dqs_int : STD_LOGIC := '0'; - - -- Data buffer for DM Mask - VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); - - -- - -- Initialize empty rows - -- - PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS - VARIABLE i, j : INTEGER := 0; - BEGIN - IF Bank = "00" THEN - IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty - Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank0 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - ELSIF Bank = "01" THEN - IF Bank1 (Row_index) = NULL THEN - Bank1 (Row_index) := NEW Array_ram_type; - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank1 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - ELSIF Bank = "10" THEN - IF Bank2 (Row_index) = NULL THEN - Bank2 (Row_index) := NEW Array_ram_type; - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank2 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - ELSIF Bank = "11" THEN - IF Bank3 (Row_index) = NULL THEN - Bank3 (Row_index) := NEW Array_ram_type; - FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP - FOR j IN (data_bits - 1) DOWNTO 0 LOOP - Bank3 (Row_index) (i) (j) := '0'; - END LOOP; - END LOOP; - END IF; - END IF; - END; - - -- - -- Burst Counter - -- - PROCEDURE Burst_decode IS - VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0'); - BEGIN - -- Advance burst counter - Burst_counter := Burst_counter + 1; - - -- Burst Type - IF Mode_reg (3) = '0' THEN - Cols_temp := Cols_addr + 1; - ELSIF Mode_reg (3) = '1' THEN - Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2); - Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1); - Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0); - END IF; - - -- Burst Length - IF Burst_length_2 = '1' THEN - Cols_addr (0) := Cols_temp (0); - ELSIF Burst_length_4 = '1' THEN - Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0); - ELSIF Burst_length_8 = '1' THEN - Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0); - ELSE - Cols_addr := Cols_temp; - END IF; - - -- Data counter - IF Burst_length_2 = '1' THEN - IF Burst_counter >= 2 THEN - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - ELSIF Data_out_enable = '1' THEN - Data_out_enable := '0'; - END IF; - END IF; - ELSIF Burst_length_4 = '1' THEN - IF Burst_counter >= 4 THEN - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - ELSIF Data_out_enable = '1' THEN - Data_out_enable := '0'; - END IF; - END IF; - ELSIF Burst_length_8 = '1' THEN - IF Burst_counter >= 8 THEN - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - ELSIF Data_out_enable = '1' THEN - Data_out_enable := '0'; - END IF; - END IF; - END IF; - END; - - BEGIN - WAIT ON Sys_clk; - - -- - -- Manual Precharge Pipeline - -- - IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN - -- A10 Precharge Pipeline - A10_precharge(0) := A10_precharge(1); - A10_precharge(1) := A10_precharge(2); - A10_precharge(2) := A10_precharge(3); - A10_precharge(3) := A10_precharge(4); - A10_precharge(4) := A10_precharge(5); - A10_precharge(5) := A10_precharge(6); - A10_precharge(6) := A10_precharge(7); - A10_precharge(7) := A10_precharge(8); - A10_precharge(8) := '0'; - - -- Bank Precharge Pipeline - Bank_precharge(0) := Bank_precharge(1); - Bank_precharge(1) := Bank_precharge(2); - Bank_precharge(2) := Bank_precharge(3); - Bank_precharge(3) := Bank_precharge(4); - Bank_precharge(4) := Bank_precharge(5); - Bank_precharge(5) := Bank_precharge(6); - Bank_precharge(6) := Bank_precharge(7); - Bank_precharge(7) := Bank_precharge(8); - Bank_precharge(8) := "00"; - - -- Command Precharge Pipeline - Cmnd_precharge(0) := Cmnd_precharge(1); - Cmnd_precharge(1) := Cmnd_precharge(2); - Cmnd_precharge(2) := Cmnd_precharge(3); - Cmnd_precharge(3) := Cmnd_precharge(4); - Cmnd_precharge(4) := Cmnd_precharge(5); - Cmnd_precharge(5) := Cmnd_precharge(6); - Cmnd_precharge(6) := Cmnd_precharge(7); - Cmnd_precharge(7) := Cmnd_precharge(8); - Cmnd_precharge(8) := '0'; - - -- Terminate Read if same bank or all banks - IF ((Cmnd_precharge (0) = '1') AND - (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND - (Data_out_enable = '1')) THEN - Data_out_enable := '0'; - END IF; - END IF; - - -- - -- Burst Terminate Pipeline - -- - IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN - -- Burst Terminate pipeline - Cmnd_bst (0) := Cmnd_bst (1); - Cmnd_bst (1) := Cmnd_bst (2); - Cmnd_bst (2) := Cmnd_bst (3); - Cmnd_bst (3) := Cmnd_bst (4); - Cmnd_bst (4) := Cmnd_bst (5); - Cmnd_bst (5) := Cmnd_bst (6); - Cmnd_bst (6) := Cmnd_bst (7); - Cmnd_bst (7) := Cmnd_bst (8); - Cmnd_bst (8) := '0'; - - -- Terminate current Read - IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN - Data_out_enable := '0'; - END IF; - END IF; - - -- - -- Dq and Dqs Drivers - -- - IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN - -- Read Command Pipeline - Read_cmnd (0) := Read_cmnd (1); - Read_cmnd (1) := Read_cmnd (2); - Read_cmnd (2) := Read_cmnd (3); - Read_cmnd (3) := Read_cmnd (4); - Read_cmnd (4) := Read_cmnd (5); - Read_cmnd (5) := Read_cmnd (6); - Read_cmnd (6) := Read_cmnd (7); - Read_cmnd (7) := Read_cmnd (8); - Read_cmnd (8) := '0'; - - -- Read Bank Pipeline - Read_bank (0) := Read_bank (1); - Read_bank (1) := Read_bank (2); - Read_bank (2) := Read_bank (3); - Read_bank (3) := Read_bank (4); - Read_bank (4) := Read_bank (5); - Read_bank (5) := Read_bank (6); - Read_bank (6) := Read_bank (7); - Read_bank (7) := Read_bank (8); - Read_bank (8) := "00"; - - -- Read Column Pipeline - Read_cols (0) := Read_cols (1); - Read_cols (1) := Read_cols (2); - Read_cols (2) := Read_cols (3); - Read_cols (3) := Read_cols (4); - Read_cols (4) := Read_cols (5); - Read_cols (5) := Read_cols (6); - Read_cols (6) := Read_cols (7); - Read_cols (7) := Read_cols (8); - Read_cols (8) := (OTHERS => '0'); - - -- Initialize Read command - IF Read_cmnd (0) = '1' THEN - Data_out_enable := '1'; - Bank_addr := Read_bank (0); - Cols_addr := Read_cols (0); - Cols_brst := Cols_addr (2 DOWNTO 0); - Burst_counter := (OTHERS => '0'); - - -- Row address mux - CASE Bank_addr IS - WHEN "00" => Rows_addr := B0_row_addr; - WHEN "01" => Rows_addr := B1_row_addr; - WHEN "10" => Rows_addr := B2_row_addr; - WHEN OTHERS => Rows_addr := B3_row_addr; - END CASE; - END IF; - - -- Toggle Dqs during Read command - IF Data_out_enable = '1' THEN - Dqs_int := '0'; - IF Dqs_out = "00" THEN - Dqs_out <= "11"; - ELSIF Dqs_out = "11" THEN - Dqs_out <= "00"; - ELSE - Dqs_out <= "00"; - END IF; - ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN - Dqs_out <= "ZZ"; - END IF; - - -- Initialize Dqs for Read command - IF Read_cmnd (2) = '1' THEN - IF Data_out_enable = '0' THEN - Dqs_int := '1'; - Dqs_out <= "00"; - END IF; - END IF; - - -- Read Latch - IF Data_out_enable = '1' THEN - -- Initialize Memory - Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); - - -- Output Data - CASE Bank_addr IS - WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - END CASE; - - -- Increase Burst Counter - Burst_decode; - ELSE - Dq <= (OTHERS => 'Z'); - END IF; - END IF; - - -- - -- Write FIFO and DM Mask Logic - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - -- Write command pipeline - Write_cmnd (0) := Write_cmnd (1); - Write_cmnd (1) := Write_cmnd (2); - Write_cmnd (2) := '0'; - - -- Write command pipeline - Write_bank (0) := Write_bank (1); - Write_bank (1) := Write_bank (2); - Write_bank (2) := "00"; - - -- Write column pipeline - Write_cols (0) := Write_cols (1); - Write_cols (1) := Write_cols (2); - Write_cols (2) := (OTHERS => '0'); - - -- Initialize Write command - IF Write_cmnd (0) = '1' THEN - Data_in_enable := '1'; - Bank_addr := Write_bank (0); - Cols_addr := Write_cols (0); - Cols_brst := Cols_addr (2 DOWNTO 0); - Burst_counter := (OTHERS => '0'); - - -- Row address mux - CASE Bank_addr IS - WHEN "00" => Rows_addr := B0_row_addr; - WHEN "01" => Rows_addr := B1_row_addr; - WHEN "10" => Rows_addr := B2_row_addr; - WHEN OTHERS => Rows_addr := B3_row_addr; - END CASE; - END IF; - - -- Write data - IF Data_in_enable = '1' THEN - -- Initialize memory - Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); - - -- Write first data - IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN - -- Data Buffer - CASE Bank_addr IS - WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - END CASE; - - -- Perform DM Mask - IF Dm_pair (0) = '0' THEN - Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0); - END IF; - IF Dm_pair (1) = '0' THEN - Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8); - END IF; - - -- Write Data - CASE Bank_addr IS - WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - END CASE; - END IF; - - -- Increase Burst Counter - Burst_decode; - - -- Write second data - IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN - -- Data Buffer - CASE Bank_addr IS - WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); - END CASE; - - -- Perform DM Mask - IF Dm_pair (2) = '0' THEN - Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16); - END IF; - IF Dm_pair (3) = '0' THEN - Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24); - END IF; - - -- Write Data - CASE Bank_addr IS - WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; - END CASE; - END IF; - - -- Increase Burst Counter - Burst_decode; - - -- tWR start and tWTR check - IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN - CASE Bank_addr IS - WHEN "00" => WR_chk0 := NOW; - WHEN "01" => WR_chk1 := NOW; - WHEN "10" => WR_chk2 := NOW; - WHEN OTHERS => WR_chk3 := NOW; - END CASE; - - -- tWTR check - ASSERT (Read_enable = '0') - REPORT "tWTR violation during Read" - SEVERITY WARNING; - END IF; - END IF; - END IF; - - -- - -- Auto Precharge Calculation - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - -- Precharge counter - IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN - Count_precharge (0) := Count_precharge (0) + 1; - END IF; - IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN - Count_precharge (1) := Count_precharge (1) + 1; - END IF; - IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN - Count_precharge (2) := Count_precharge (2) + 1; - END IF; - IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN - Count_precharge (3) := Count_precharge (3) + 1; - END IF; - - -- Read with AutoPrecharge Calculation - -- The device start internal precharge when: - -- 1. Meet tRAS requirement - -- 2. BL/2 cycles after command - IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN - Pc_b0 := '1'; - Act_b0 := '0'; - RP_chk0 := NOW; - Read_precharge(0) := '0'; - END IF; - END IF; - IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN - Pc_b1 := '1'; - Act_b1 := '0'; - RP_chk1 := NOW; - Read_precharge(1) := '0'; - END IF; - END IF; - IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN - Pc_b2 := '1'; - Act_b2 := '0'; - RP_chk2 := NOW; - Read_precharge(2) := '0'; - END IF; - END IF; - IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR - (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR - (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN - Pc_b3 := '1'; - Act_b3 := '0'; - RP_chk3 := NOW; - Read_precharge(3) := '0'; - END IF; - END IF; - - -- Write with AutoPrecharge Calculation - -- The device start internal precharge when: - -- 1. Meet tRAS requirement - -- 2. Two clock after last burst - -- Since tWR is time base, the model will compensate tRP - IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN - Pc_b0 := '1'; - Act_b0 := '0'; - RP_chk0 := NOW - ((2 * tCK) - tWR); - Write_precharge(0) := '0'; - END IF; - END IF; - IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN - Pc_b1 := '1'; - Act_b1 := '0'; - RP_chk1 := NOW - ((2 * tCK) - tWR); - Write_precharge(1) := '0'; - END IF; - END IF; - IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN - Pc_b2 := '1'; - Act_b2 := '0'; - RP_chk2 := NOW - ((2 * tCK) - tWR); - Write_precharge(2) := '0'; - END IF; - END IF; - IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN - IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR - (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR - (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN - Pc_b3 := '1'; - Act_b3 := '0'; - RP_chk3 := NOW - ((2 * tCK) - tWR); - Write_precharge(3) := '0'; - END IF; - END IF; - END IF; - - -- - -- DLL Counter - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - IF (DLL_Reset = '1' AND DLL_done = '0') THEN - DLL_count := DLL_count + 1; - IF (DLL_count >= 200) THEN - DLL_done := '1'; - END IF; - END IF; - END IF; - - -- - -- Control Logic - -- - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - -- Auto Refresh - IF Aref_enable = '1' THEN - -- Auto Refresh to Auto Refresh - ASSERT (NOW - RFC_chk >= tRFC) - REPORT "tRFC violation during Auto Refresh" - SEVERITY WARNING; - - -- Precharge to Auto Refresh - ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND - (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) - REPORT "tRP violation during Auto Refresh" - SEVERITY WARNING; - - -- Precharge to Auto Refresh - ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') - REPORT "All banks must be Precharge before Auto Refresh" - SEVERITY WARNING; - - -- Record current tRFC time - RFC_chk := NOW; - END IF; - - -- Extended Load Mode Register - IF Ext_mode_enable = '1' THEN - IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN - IF (Addr (0) = '0') THEN - DLL_enable := '1'; - ELSE - DLL_enable := '0'; - END IF; - END IF; - - -- Precharge to EMR - ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') - REPORT "All bank must be Precharged before Extended Mode Register" - SEVERITY WARNING; - - -- Precharge to EMR - ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND - (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) - REPORT "tRP violation during Extended Load Register" - SEVERITY WARNING; - - -- LMR/EMR to EMR - ASSERT (NOW - MRD_chk >= tMRD) - REPORT "tMRD violation during Extended Mode Register" - SEVERITY WARNING; - - -- Record current tMRD time - MRD_chk := NOW; - END IF; - - -- Load Mode Register - IF Mode_reg_enable = '1' THEN - -- Register mode - Mode_reg <= Addr; - - -- DLL Reset - IF (DLL_enable = '1' AND Addr (8) = '1') THEN - DLL_reset := '1'; - DLL_done := '0'; - DLL_count := 0; - ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN - ASSERT (FALSE) - REPORT "DLL is ENABLE: DLL RESET is require" - SEVERITY WARNING; - ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN - ASSERT (FALSE) - REPORT "DLL is DISABLE: DLL RESET will be ignored" - SEVERITY WARNING; - END IF; - - -- Precharge to LMR - ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') - REPORT "All bank must be Precharged before Load Mode Register" - SEVERITY WARNING; - - -- Precharge to EMR - ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND - (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) - REPORT "tRP violation during Load Mode Register" - SEVERITY WARNING; - - -- LMR/ELMR to LMR - ASSERT (NOW - MRD_chk >= tMRD) - REPORT "tMRD violation during Load Mode Register" - SEVERITY WARNING; - - -- Check for invalid Burst Length - ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2 - (Addr (2 DOWNTO 0) = "010") OR -- BL = 4 - (Addr (2 DOWNTO 0) = "011")) -- BL = 8 - REPORT "Invalid Burst Length during Load Mode Register" - SEVERITY WARNING; - - -- Check for invalid CAS Latency - ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0 - (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5 - REPORT "Invalid CAS Latency during Load Mode Register" - SEVERITY WARNING; - - -- Record current tMRD time - MRD_chk := NOW; - END IF; - - -- Active Block (latch Bank and Row Address) - IF Active_enable = '1' THEN - -- Activate an OPEN bank can corrupt data - ASSERT ((Ba = "00" AND Act_b0 = '0') OR - (Ba = "01" AND Act_b1 = '0') OR - (Ba = "10" AND Act_b2 = '0') OR - (Ba = "11" AND Act_b3 = '0')) - REPORT "Bank is already activated - data can be corrupted" - SEVERITY WARNING; - - -- Activate Bank 0 - IF Ba = "00" AND Pc_b0 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk0 >= tRC) - REPORT "tRC violation during Activate Bank 0" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk0 >= tRP) - REPORT "tRP violation during Activate Bank 0" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b0 := '1'; - Pc_b0 := '0'; - B0_row_addr := Addr; - RC_chk0 := NOW; - RCD_chk0 := NOW; - RAS_chk0 := NOW; - RAP_chk0 := NOW; - END IF; - - -- Activate Bank 1 - IF Ba = "01" AND Pc_b1 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk1 >= tRC) - REPORT "tRC violation during Activate Bank 1" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk1 >= tRP) - REPORT "tRP violation during Activate Bank 1" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b1 := '1'; - Pc_b1 := '0'; - B1_row_addr := Addr; - RC_chk1 := NOW; - RCD_chk1 := NOW; - RAS_chk1 := NOW; - RAP_chk1 := NOW; - END IF; - - -- Activate Bank 2 - IF Ba = "10" AND Pc_b2 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk2 >= tRC) - REPORT "tRC violation during Activate Bank 2" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk2 >= tRP) - REPORT "tRP violation during Activate Bank 2" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b2 := '1'; - Pc_b2 := '0'; - B2_row_addr := Addr; - RC_chk2 := NOW; - RCD_chk2 := NOW; - RAS_chk2 := NOW; - RAP_chk2 := NOW; - END IF; - - -- Activate Bank 3 - IF Ba = "11" AND Pc_b3 = '1' THEN - -- Activate to Activate (same bank) - ASSERT (NOW - RC_chk3 >= tRC) - REPORT "tRC violation during Activate Bank 3" - SEVERITY WARNING; - - -- Precharge to Active - ASSERT (NOW - RP_chk3 >= tRP) - REPORT "tRP violation during Activate Bank 3" - SEVERITY WARNING; - - -- Record Variables for checking violation - Act_b3 := '1'; - Pc_b3 := '0'; - B3_row_addr := Addr; - RC_chk3 := NOW; - RCD_chk3 := NOW; - RAS_chk3 := NOW; - RAP_chk3 := NOW; - END IF; - - -- Activate Bank A to Activate Bank B - IF (Prev_bank /= Ba) THEN - ASSERT (NOW - RRD_chk >= tRRD) - REPORT "tRRD violation during Activate" - SEVERITY WARNING; - END IF; - - -- AutoRefresh to Activate - ASSERT (NOW - RFC_chk >= tRFC) - REPORT "tRFC violation during Activate" - SEVERITY WARNING; - - -- Record Variables for Checking Violation - RRD_chk := NOW; - Prev_bank := Ba; - END IF; - - -- Precharge Block - Consider NOP if bank already precharged or in process of precharging - IF Prech_enable = '1' THEN - -- EMR or LMR to Precharge - ASSERT (NOW - MRD_chk >= tMRD) - REPORT "tMRD violation during Precharge" - SEVERITY WARNING; - - -- Precharge Bank 0 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN - Act_b0 := '0'; - Pc_b0 := '1'; - RP_chk0 := NOW; - - -- Activate to Precharge bank 0 - ASSERT (NOW - RAS_chk0 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk0 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Precharge Bank 1 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN - Act_b1 := '0'; - Pc_b1 := '1'; - RP_chk1 := NOW; - - -- Activate to Precharge - ASSERT (NOW - RAS_chk1 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk1 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Precharge Bank 2 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN - Act_b2 := '0'; - Pc_b2 := '1'; - RP_chk2 := NOW; - - -- Activate to Precharge - ASSERT (NOW - RAS_chk2 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk2 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Precharge Bank 3 - IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN - Act_b3 := '0'; - Pc_b3 := '1'; - RP_chk3 := NOW; - - -- Activate to Precharge - ASSERT (NOW - RAS_chk3 >= tRAS) - REPORT "tRAS violation during Precharge" - SEVERITY WARNING; - - -- tWR violation check for Write - ASSERT (NOW - WR_chk3 >= tWR) - REPORT "tWR violation during Precharge" - SEVERITY WARNING; - END IF; - - -- Pipeline for READ - IF CAS_latency_15 = '1' THEN - A10_precharge (3) := Addr(10); - Bank_precharge (3) := Ba; - Cmnd_precharge (3) := '1'; - ELSIF CAS_latency_2 = '1' THEN - A10_precharge (4) := Addr(10); - Bank_precharge (4) := Ba; - Cmnd_precharge (4) := '1'; - ELSIF CAS_latency_25 = '1' THEN - A10_precharge (5) := Addr(10); - Bank_precharge (5) := Ba; - Cmnd_precharge (5) := '1'; - ELSIF CAS_latency_3 = '1' THEN - A10_precharge (6) := Addr(10); - Bank_precharge (6) := Ba; - Cmnd_precharge (6) := '1'; - ELSIF CAS_latency_4 = '1' THEN - A10_precharge (8) := Addr(10); - Bank_precharge (8) := Ba; - Cmnd_precharge (8) := '1'; - END IF; - END IF; - - -- Burst Terminate - IF Burst_term = '1' THEN - -- Pipeline for Read - IF CAS_latency_15 = '1' THEN - Cmnd_bst (3) := '1'; - ELSIF CAS_latency_2 = '1' THEN - Cmnd_bst (4) := '1'; - ELSIF CAS_latency_25 = '1' THEN - Cmnd_bst (5) := '1'; - ELSIF CAS_latency_3 = '1' THEN - Cmnd_bst (6) := '1'; - ELSIF CAS_latency_4 = '1' THEN - Cmnd_bst (8) := '1'; - END IF; - - -- Terminate Write - ASSERT (Data_in_enable = '0') - REPORT "It's illegal to Burst Terminate a Write" - SEVERITY WARNING; - - -- Terminate Read with Auto Precharge - ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND - Read_precharge (2) = '0' AND Read_precharge (3) = '0') - REPORT "It's illegal to Burst Terminate a Read with Auto Precharge" - SEVERITY WARNING; - END IF; - - -- Read Command - IF Read_enable = '1' THEN - -- CAS Latency Pipeline - IF Cas_latency_15 = '1' THEN - Read_cmnd (3) := '1'; - Read_bank (3) := Ba; - Read_cols (3) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_2 = '1' THEN - Read_cmnd (4) := '1'; - Read_bank (4) := Ba; - Read_cols (4) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_25 = '1' THEN - Read_cmnd (5) := '1'; - Read_bank (5) := Ba; - Read_cols (5) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_3 = '1' THEN - Read_cmnd (6) := '1'; - Read_bank (6) := Ba; - Read_cols (6) := Addr (8 DOWNTO 0); - ELSIF Cas_latency_4 = '1' THEN - Read_cmnd (8) := '1'; - Read_bank (8) := Ba; - Read_cols (8) := Addr (8 DOWNTO 0); - END IF; - - -- Write to Read: Terminate Write Immediately - IF Data_in_enable = '1' THEN - Data_in_enable := '0'; - END IF; - - -- Interrupting a Read with Auto Precharge (same bank only) - ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0') - REPORT "It's illegal to interrupt a Read with Auto Precharge" - SEVERITY WARNING; - - -- Activate to Read - ASSERT ((Ba = "00" AND Act_b0 = '1') OR - (Ba = "01" AND Act_b1 = '1') OR - (Ba = "10" AND Act_b2 = '1') OR - (Ba = "11" AND Act_b3 = '1')) - REPORT "Bank is not Activated for Read" - SEVERITY WARNING; - - -- Activate to Read without Auto Precharge - IF Addr (10) = '0' THEN - ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR - (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR - (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR - (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) - REPORT "tRCD violation during Read" - SEVERITY WARNING; - END IF; - - -- Activate to Read with Auto Precharge - IF Addr (10) = '1' THEN - ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR - (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR - (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR - (Ba = "11" AND NOW - RAP_chk3 >= tRAP)) - REPORT "tRAP violation during Read" - SEVERITY WARNING; - END IF; - - -- Auto precharge - IF Addr (10) = '1' THEN - Read_precharge (Conv_INTEGER(Ba)) := '1'; - Count_precharge (Conv_INTEGER(Ba)) := 0; - END IF; - - -- DLL Check - IF (DLL_reset = '1') THEN - ASSERT (DLL_done = '1') - REPORT "DLL RESET not complete" - SEVERITY WARNING; - END IF; - END IF; - - -- Write Command - IF Write_enable = '1' THEN - -- Pipeline for Write - Write_cmnd (2) := '1'; - Write_bank (2) := Ba; - Write_cols (2) := Addr (8 DOWNTO 0); - - -- Interrupting a Write with Auto Precharge (same bank only) - ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0') - REPORT "It's illegal to interrupt a Write with Auto Precharge" - SEVERITY WARNING; - - -- Activate to Write - ASSERT ((Ba = "00" AND Act_b0 = '1') OR - (Ba = "01" AND Act_b1 = '1') OR - (Ba = "10" AND Act_b2 = '1') OR - (Ba = "11" AND Act_b3 = '1')) - REPORT "Bank is not Activated for Write" - SEVERITY WARNING; - - -- Activate to Write - ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR - (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR - (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR - (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) - REPORT "tRCD violation during Write" - SEVERITY WARNING; - - -- Auto precharge - IF Addr (10) = '1' THEN - Write_precharge (Conv_INTEGER(Ba)) := '1'; - Count_precharge (Conv_INTEGER(Ba)) := 0; - END IF; - END IF; - END IF; - END PROCESS; - - -- - -- Dqs Receiver - -- - dqs_rcvrs : PROCESS - VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0); - VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); - BEGIN - WAIT ON Dqs; - -- Latch data at posedge Dqs - IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN - Dq_temp := Dq; - Dm_temp := Dm; - END IF; - -- Latch data at negedge Dqs - IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN - Dq_pair <= (Dq & Dq_temp); - Dm_pair <= (Dm & Dm_temp); - END IF; - END PROCESS; - - -- - -- Setup timing checks - -- - Setup_check : PROCESS - BEGIN - WAIT ON Sys_clk; - IF Sys_clk'EVENT AND Sys_clk = '1' THEN - ASSERT(Cke'LAST_EVENT >= tIS) - REPORT "CKE Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Cs_n'LAST_EVENT >= tIS) - REPORT "CS# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Cas_n'LAST_EVENT >= tIS) - REPORT "CAS# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Ras_n'LAST_EVENT >= tIS) - REPORT "RAS# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(We_n'LAST_EVENT >= tIS) - REPORT "WE# Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Addr'LAST_EVENT >= tIS) - REPORT "ADDR Setup time violation -- tIS" - SEVERITY WARNING; - ASSERT(Ba'LAST_EVENT >= tIS) - REPORT "BA Setup time violation -- tIS" - SEVERITY WARNING; - END IF; - END PROCESS; - - -- - -- Hold timing checks - -- - Hold_check : PROCESS - BEGIN - WAIT ON Sys_clk'DELAYED (tIH); - IF Sys_clk'DELAYED (tIH) = '1' THEN - ASSERT(Cke'LAST_EVENT >= tIH) - REPORT "CKE Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Cs_n'LAST_EVENT >= tIH) - REPORT "CS# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Cas_n'LAST_EVENT >= tIH) - REPORT "CAS# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Ras_n'LAST_EVENT >= tIH) - REPORT "RAS# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(We_n'LAST_EVENT >= tIH) - REPORT "WE# Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Addr'LAST_EVENT >= tIH) - REPORT "ADDR Hold time violation -- tIH" - SEVERITY WARNING; - ASSERT(Ba'LAST_EVENT >= tIH) - REPORT "BA Hold time violation -- tIH" - SEVERITY WARNING; - END IF; - END PROCESS; - -END behave; +----------------------------------------------------------------------------------------- +-- +-- File Name: MT46V16M16.VHD +-- Version: 2.1 +-- Date: January 14th, 2002 +-- Model: Behavioral +-- Simulator: NCDesktop - http://www.cadence.com +-- ModelSim PE - http://www.model.com +-- +-- Dependencies: None +-- +-- Author: Son P. Huynh +-- Email: sphuynh@micron.com +-- Phone: (208) 368-3825 +-- Company: Micron Technology, Inc. +-- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks) +-- +-- Description: Micron 256 Mb SDRAM DDR (Double Data Rate) +-- +-- Limitation: Doesn't model internal refresh counter +-- +-- Note: +-- +-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY +-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR +-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. +-- +-- Copyright (c) 1998 Micron Semiconductor Products, Inc. +-- All rights researved +-- +-- Rev Author Date Changes +-- --- ---------------------------- ---------- ------------------------------------- +-- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter +-- Micron Technology, Inc. +-- +-- 2.0 Son P. Huynh 11/08/2001 - Second release +-- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE +-- +----------------------------------------------------------------------------------------- + +LIBRARY IEEE; + USE IEEE.STD_LOGIC_1164.ALL; + USE IEEE.STD_LOGIC_UNSIGNED.ALL; + USE IEEE.STD_LOGIC_ARITH.ALL; + +ENTITY MT46V16M16 IS + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); +END MT46V16M16; + +ARCHITECTURE behave OF MT46V16M16 IS + -- Array for Read pipeline + TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Write pipeline + TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Auto Precharge + TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER; + + -- Array for Manual Precharge + TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Burst Terminate + TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Memory Access + TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + TYPE Array_ram_pntr IS ACCESS Array_ram_type; + TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr; + + -- Data pair + SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0); + SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0); + + -- Mode Register + SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + -- Command Decode Variables + SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0'; + SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; + + -- Burst Length Decode Variables + SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0'; + + -- Cas Latency Decode Variables + SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0'; + + -- Internal Control Signals + SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; + + -- System Clock + SIGNAL Sys_clk : STD_LOGIC := '0'; + + -- Dqs buffer + SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + +BEGIN + -- Strip the strength + Cs_in <= To_X01 (Cs_n); + Ras_in <= To_X01 (Ras_n); + Cas_in <= To_X01 (Cas_n); + We_in <= To_X01 (We_n); + + -- Commands Decode + Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; + Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; + Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); + Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1)); + Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1)); + Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); + Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; + Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); + + -- Burst Length Decode + Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); + Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); + Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + + -- CAS Latency Decode + Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4)); + Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); + Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4)); + + -- Dqs buffer + Dqs <= Dqs_out; + + -- + -- System Clock + -- + int_clk : PROCESS (Clk, Clk_n) + VARIABLE ClkZ, CkeZ : STD_LOGIC := '0'; + begin + IF Clk = '1' AND Clk_n = '0' THEN + ClkZ := '1'; + CkeZ := Cke; + ELSIF Clk = '0' AND Clk_n = '1' THEN + ClkZ := '0'; + END IF; + Sys_clk <= CkeZ AND ClkZ; + END PROCESS; + + -- + -- Main Process + -- + state_register : PROCESS + -- Precharge Variables + VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; + + -- Activate Variables + VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; + + -- Data IO variables + VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; + + -- Internal address mux variables + VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0); + VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + + -- DLL Reset variables + VARIABLE DLL_enable : STD_LOGIC := '0'; + VARIABLE DLL_reset : STD_LOGIC := '0'; + VARIABLE DLL_done : STD_LOGIC := '0'; + VARIABLE DLL_count : INTEGER := 0; + + -- Timing Check + VARIABLE MRD_chk : TIME := 0 ns; + VARIABLE RFC_chk : TIME := 0 ns; + VARIABLE RRD_chk : TIME := 0 ns; + VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; + VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns; + VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; + VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; + VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; + VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns; + + -- Read pipeline variables + VARIABLE Read_cmnd : Array_Read_cmnd; + VARIABLE Read_bank : Array_Read_bank; + VARIABLE Read_cols : Array_Read_cols; + + -- Write pipeline variables + VARIABLE Write_cmnd : Array_Write_cmnd; + VARIABLE Write_bank : Array_Write_bank; + VARIABLE Write_cols : Array_Write_cols; + + -- Auto Precharge variables + VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 ); + + -- Manual Precharge variables + VARIABLE A10_precharge : Array_A10_precharge; + VARIABLE Bank_precharge : Array_Bank_precharge; + VARIABLE Cmnd_precharge : Array_Cmnd_precharge; + + -- Burst Terminate variable + VARIABLE Cmnd_bst : Array_Cmnd_bst; + + -- Memory Banks + VARIABLE Bank0 : Array_ram_stor; + VARIABLE Bank1 : Array_ram_stor; + VARIABLE Bank2 : Array_ram_stor; + VARIABLE Bank3 : Array_ram_stor; + + -- Burst Counter + VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Internal Dqs initialize + VARIABLE Dqs_int : STD_LOGIC := '0'; + + -- Data buffer for DM Mask + VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + + -- + -- Initialize empty rows + -- + PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS + VARIABLE i, j : INTEGER := 0; + BEGIN + IF Bank = "00" THEN + IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty + Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank0 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "01" THEN + IF Bank1 (Row_index) = NULL THEN + Bank1 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank1 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "10" THEN + IF Bank2 (Row_index) = NULL THEN + Bank2 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank2 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "11" THEN + IF Bank3 (Row_index) = NULL THEN + Bank3 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank3 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + END IF; + END; + + -- + -- Burst Counter + -- + PROCEDURE Burst_decode IS + VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0'); + BEGIN + -- Advance burst counter + Burst_counter := Burst_counter + 1; + + -- Burst Type + IF Mode_reg (3) = '0' THEN + Cols_temp := Cols_addr + 1; + ELSIF Mode_reg (3) = '1' THEN + Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2); + Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1); + Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0); + END IF; + + -- Burst Length + IF Burst_length_2 = '1' THEN + Cols_addr (0) := Cols_temp (0); + ELSIF Burst_length_4 = '1' THEN + Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0); + ELSIF Burst_length_8 = '1' THEN + Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0); + ELSE + Cols_addr := Cols_temp; + END IF; + + -- Data counter + IF Burst_length_2 = '1' THEN + IF Burst_counter >= 2 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_4 = '1' THEN + IF Burst_counter >= 4 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_8 = '1' THEN + IF Burst_counter >= 8 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + END IF; + END; + + BEGIN + WAIT ON Sys_clk; + + -- + -- Manual Precharge Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- A10 Precharge Pipeline + A10_precharge(0) := A10_precharge(1); + A10_precharge(1) := A10_precharge(2); + A10_precharge(2) := A10_precharge(3); + A10_precharge(3) := A10_precharge(4); + A10_precharge(4) := A10_precharge(5); + A10_precharge(5) := A10_precharge(6); + A10_precharge(6) := A10_precharge(7); + A10_precharge(7) := A10_precharge(8); + A10_precharge(8) := '0'; + + -- Bank Precharge Pipeline + Bank_precharge(0) := Bank_precharge(1); + Bank_precharge(1) := Bank_precharge(2); + Bank_precharge(2) := Bank_precharge(3); + Bank_precharge(3) := Bank_precharge(4); + Bank_precharge(4) := Bank_precharge(5); + Bank_precharge(5) := Bank_precharge(6); + Bank_precharge(6) := Bank_precharge(7); + Bank_precharge(7) := Bank_precharge(8); + Bank_precharge(8) := "00"; + + -- Command Precharge Pipeline + Cmnd_precharge(0) := Cmnd_precharge(1); + Cmnd_precharge(1) := Cmnd_precharge(2); + Cmnd_precharge(2) := Cmnd_precharge(3); + Cmnd_precharge(3) := Cmnd_precharge(4); + Cmnd_precharge(4) := Cmnd_precharge(5); + Cmnd_precharge(5) := Cmnd_precharge(6); + Cmnd_precharge(6) := Cmnd_precharge(7); + Cmnd_precharge(7) := Cmnd_precharge(8); + Cmnd_precharge(8) := '0'; + + -- Terminate Read if same bank or all banks + IF ((Cmnd_precharge (0) = '1') AND + (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND + (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Burst Terminate Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Burst Terminate pipeline + Cmnd_bst (0) := Cmnd_bst (1); + Cmnd_bst (1) := Cmnd_bst (2); + Cmnd_bst (2) := Cmnd_bst (3); + Cmnd_bst (3) := Cmnd_bst (4); + Cmnd_bst (4) := Cmnd_bst (5); + Cmnd_bst (5) := Cmnd_bst (6); + Cmnd_bst (6) := Cmnd_bst (7); + Cmnd_bst (7) := Cmnd_bst (8); + Cmnd_bst (8) := '0'; + + -- Terminate current Read + IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Dq and Dqs Drivers + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Read Command Pipeline + Read_cmnd (0) := Read_cmnd (1); + Read_cmnd (1) := Read_cmnd (2); + Read_cmnd (2) := Read_cmnd (3); + Read_cmnd (3) := Read_cmnd (4); + Read_cmnd (4) := Read_cmnd (5); + Read_cmnd (5) := Read_cmnd (6); + Read_cmnd (6) := Read_cmnd (7); + Read_cmnd (7) := Read_cmnd (8); + Read_cmnd (8) := '0'; + + -- Read Bank Pipeline + Read_bank (0) := Read_bank (1); + Read_bank (1) := Read_bank (2); + Read_bank (2) := Read_bank (3); + Read_bank (3) := Read_bank (4); + Read_bank (4) := Read_bank (5); + Read_bank (5) := Read_bank (6); + Read_bank (6) := Read_bank (7); + Read_bank (7) := Read_bank (8); + Read_bank (8) := "00"; + + -- Read Column Pipeline + Read_cols (0) := Read_cols (1); + Read_cols (1) := Read_cols (2); + Read_cols (2) := Read_cols (3); + Read_cols (3) := Read_cols (4); + Read_cols (4) := Read_cols (5); + Read_cols (5) := Read_cols (6); + Read_cols (6) := Read_cols (7); + Read_cols (7) := Read_cols (8); + Read_cols (8) := (OTHERS => '0'); + + -- Initialize Read command + IF Read_cmnd (0) = '1' THEN + Data_out_enable := '1'; + Bank_addr := Read_bank (0); + Cols_addr := Read_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Toggle Dqs during Read command + IF Data_out_enable = '1' THEN + Dqs_int := '0'; + IF Dqs_out = "00" THEN + Dqs_out <= "11"; + ELSIF Dqs_out = "11" THEN + Dqs_out <= "00"; + ELSE + Dqs_out <= "00"; + END IF; + ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN + Dqs_out <= "ZZ"; + END IF; + + -- Initialize Dqs for Read command + IF Read_cmnd (2) = '1' THEN + IF Data_out_enable = '0' THEN + Dqs_int := '1'; + Dqs_out <= "00"; + END IF; + END IF; + + -- Read Latch + IF Data_out_enable = '1' THEN + -- Initialize Memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Output Data + CASE Bank_addr IS + WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Increase Burst Counter + Burst_decode; + ELSE + Dq <= (OTHERS => 'Z'); + END IF; + END IF; + + -- + -- Write FIFO and DM Mask Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Write command pipeline + Write_cmnd (0) := Write_cmnd (1); + Write_cmnd (1) := Write_cmnd (2); + Write_cmnd (2) := '0'; + + -- Write command pipeline + Write_bank (0) := Write_bank (1); + Write_bank (1) := Write_bank (2); + Write_bank (2) := "00"; + + -- Write column pipeline + Write_cols (0) := Write_cols (1); + Write_cols (1) := Write_cols (2); + Write_cols (2) := (OTHERS => '0'); + + -- Initialize Write command + IF Write_cmnd (0) = '1' THEN + Data_in_enable := '1'; + Bank_addr := Write_bank (0); + Cols_addr := Write_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Write data + IF Data_in_enable = '1' THEN + -- Initialize memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Write first data + IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (0) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0); + END IF; + IF Dm_pair (1) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- Write second data + IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (2) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16); + END IF; + IF Dm_pair (3) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- tWR start and tWTR check + IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN + CASE Bank_addr IS + WHEN "00" => WR_chk0 := NOW; + WHEN "01" => WR_chk1 := NOW; + WHEN "10" => WR_chk2 := NOW; + WHEN OTHERS => WR_chk3 := NOW; + END CASE; + + -- tWTR check + ASSERT (Read_enable = '0') + REPORT "tWTR violation during Read" + SEVERITY WARNING; + END IF; + END IF; + END IF; + + -- + -- Auto Precharge Calculation + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Precharge counter + IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN + Count_precharge (0) := Count_precharge (0) + 1; + END IF; + IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN + Count_precharge (1) := Count_precharge (1) + 1; + END IF; + IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN + Count_precharge (2) := Count_precharge (2) + 1; + END IF; + IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN + Count_precharge (3) := Count_precharge (3) + 1; + END IF; + + -- Read with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. BL/2 cycles after command + IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Read_precharge(0) := '0'; + END IF; + END IF; + IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Read_precharge(1) := '0'; + END IF; + END IF; + IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Read_precharge(2) := '0'; + END IF; + END IF; + IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Read_precharge(3) := '0'; + END IF; + END IF; + + -- Write with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. Two clock after last burst + -- Since tWR is time base, the model will compensate tRP + IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW - ((2 * tCK) - tWR); + Write_precharge(0) := '0'; + END IF; + END IF; + IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW - ((2 * tCK) - tWR); + Write_precharge(1) := '0'; + END IF; + END IF; + IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW - ((2 * tCK) - tWR); + Write_precharge(2) := '0'; + END IF; + END IF; + IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW - ((2 * tCK) - tWR); + Write_precharge(3) := '0'; + END IF; + END IF; + END IF; + + -- + -- DLL Counter + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + IF (DLL_Reset = '1' AND DLL_done = '0') THEN + DLL_count := DLL_count + 1; + IF (DLL_count >= 200) THEN + DLL_done := '1'; + END IF; + END IF; + END IF; + + -- + -- Control Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Auto Refresh + IF Aref_enable = '1' THEN + -- Auto Refresh to Auto Refresh + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Auto Refresh" + SEVERITY WARNING; + + -- Record current tRFC time + RFC_chk := NOW; + END IF; + + -- Extended Load Mode Register + IF Ext_mode_enable = '1' THEN + IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN + IF (Addr (0) = '0') THEN + DLL_enable := '1'; + ELSE + DLL_enable := '0'; + END IF; + END IF; + + -- Precharge to EMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Extended Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Extended Load Register" + SEVERITY WARNING; + + -- LMR/EMR to EMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Extended Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Load Mode Register + IF Mode_reg_enable = '1' THEN + -- Register mode + Mode_reg <= Addr; + + -- DLL Reset + IF (DLL_enable = '1' AND Addr (8) = '1') THEN + DLL_reset := '1'; + DLL_done := '0'; + DLL_count := 0; + ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN + ASSERT (FALSE) + REPORT "DLL is ENABLE: DLL RESET is require" + SEVERITY WARNING; + ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN + ASSERT (FALSE) + REPORT "DLL is DISABLE: DLL RESET will be ignored" + SEVERITY WARNING; + END IF; + + -- Precharge to LMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Load Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Load Mode Register" + SEVERITY WARNING; + + -- LMR/ELMR to LMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid Burst Length + ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2 + (Addr (2 DOWNTO 0) = "010") OR -- BL = 4 + (Addr (2 DOWNTO 0) = "011")) -- BL = 8 + REPORT "Invalid Burst Length during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid CAS Latency + ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0 + (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5 + REPORT "Invalid CAS Latency during Load Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Active Block (latch Bank and Row Address) + IF Active_enable = '1' THEN + -- Activate an OPEN bank can corrupt data + ASSERT ((Ba = "00" AND Act_b0 = '0') OR + (Ba = "01" AND Act_b1 = '0') OR + (Ba = "10" AND Act_b2 = '0') OR + (Ba = "11" AND Act_b3 = '0')) + REPORT "Bank is already activated - data can be corrupted" + SEVERITY WARNING; + + -- Activate Bank 0 + IF Ba = "00" AND Pc_b0 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk0 >= tRC) + REPORT "tRC violation during Activate Bank 0" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk0 >= tRP) + REPORT "tRP violation during Activate Bank 0" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b0 := '1'; + Pc_b0 := '0'; + B0_row_addr := Addr; + RC_chk0 := NOW; + RCD_chk0 := NOW; + RAS_chk0 := NOW; + RAP_chk0 := NOW; + END IF; + + -- Activate Bank 1 + IF Ba = "01" AND Pc_b1 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk1 >= tRC) + REPORT "tRC violation during Activate Bank 1" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk1 >= tRP) + REPORT "tRP violation during Activate Bank 1" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b1 := '1'; + Pc_b1 := '0'; + B1_row_addr := Addr; + RC_chk1 := NOW; + RCD_chk1 := NOW; + RAS_chk1 := NOW; + RAP_chk1 := NOW; + END IF; + + -- Activate Bank 2 + IF Ba = "10" AND Pc_b2 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk2 >= tRC) + REPORT "tRC violation during Activate Bank 2" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk2 >= tRP) + REPORT "tRP violation during Activate Bank 2" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b2 := '1'; + Pc_b2 := '0'; + B2_row_addr := Addr; + RC_chk2 := NOW; + RCD_chk2 := NOW; + RAS_chk2 := NOW; + RAP_chk2 := NOW; + END IF; + + -- Activate Bank 3 + IF Ba = "11" AND Pc_b3 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk3 >= tRC) + REPORT "tRC violation during Activate Bank 3" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk3 >= tRP) + REPORT "tRP violation during Activate Bank 3" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b3 := '1'; + Pc_b3 := '0'; + B3_row_addr := Addr; + RC_chk3 := NOW; + RCD_chk3 := NOW; + RAS_chk3 := NOW; + RAP_chk3 := NOW; + END IF; + + -- Activate Bank A to Activate Bank B + IF (Prev_bank /= Ba) THEN + ASSERT (NOW - RRD_chk >= tRRD) + REPORT "tRRD violation during Activate" + SEVERITY WARNING; + END IF; + + -- AutoRefresh to Activate + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Activate" + SEVERITY WARNING; + + -- Record Variables for Checking Violation + RRD_chk := NOW; + Prev_bank := Ba; + END IF; + + -- Precharge Block - Consider NOP if bank already precharged or in process of precharging + IF Prech_enable = '1' THEN + -- EMR or LMR to Precharge + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Precharge" + SEVERITY WARNING; + + -- Precharge Bank 0 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN + Act_b0 := '0'; + Pc_b0 := '1'; + RP_chk0 := NOW; + + -- Activate to Precharge bank 0 + ASSERT (NOW - RAS_chk0 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk0 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 1 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN + Act_b1 := '0'; + Pc_b1 := '1'; + RP_chk1 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk1 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk1 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 2 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN + Act_b2 := '0'; + Pc_b2 := '1'; + RP_chk2 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk2 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk2 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 3 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN + Act_b3 := '0'; + Pc_b3 := '1'; + RP_chk3 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk3 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk3 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Pipeline for READ + IF CAS_latency_15 = '1' THEN + A10_precharge (3) := Addr(10); + Bank_precharge (3) := Ba; + Cmnd_precharge (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + A10_precharge (4) := Addr(10); + Bank_precharge (4) := Ba; + Cmnd_precharge (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + A10_precharge (5) := Addr(10); + Bank_precharge (5) := Ba; + Cmnd_precharge (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + A10_precharge (6) := Addr(10); + Bank_precharge (6) := Ba; + Cmnd_precharge (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + A10_precharge (8) := Addr(10); + Bank_precharge (8) := Ba; + Cmnd_precharge (8) := '1'; + END IF; + END IF; + + -- Burst Terminate + IF Burst_term = '1' THEN + -- Pipeline for Read + IF CAS_latency_15 = '1' THEN + Cmnd_bst (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + Cmnd_bst (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + Cmnd_bst (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + Cmnd_bst (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + Cmnd_bst (8) := '1'; + END IF; + + -- Terminate Write + ASSERT (Data_in_enable = '0') + REPORT "It's illegal to Burst Terminate a Write" + SEVERITY WARNING; + + -- Terminate Read with Auto Precharge + ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND + Read_precharge (2) = '0' AND Read_precharge (3) = '0') + REPORT "It's illegal to Burst Terminate a Read with Auto Precharge" + SEVERITY WARNING; + END IF; + + -- Read Command + IF Read_enable = '1' THEN + -- CAS Latency Pipeline + IF Cas_latency_15 = '1' THEN + Read_cmnd (3) := '1'; + Read_bank (3) := Ba; + Read_cols (3) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_2 = '1' THEN + Read_cmnd (4) := '1'; + Read_bank (4) := Ba; + Read_cols (4) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_25 = '1' THEN + Read_cmnd (5) := '1'; + Read_bank (5) := Ba; + Read_cols (5) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_3 = '1' THEN + Read_cmnd (6) := '1'; + Read_bank (6) := Ba; + Read_cols (6) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_4 = '1' THEN + Read_cmnd (8) := '1'; + Read_bank (8) := Ba; + Read_cols (8) := Addr (8 DOWNTO 0); + END IF; + + -- Write to Read: Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Interrupting a Read with Auto Precharge (same bank only) + ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Read with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Read + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Read" + SEVERITY WARNING; + + -- Activate to Read without Auto Precharge + IF Addr (10) = '0' THEN + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Read" + SEVERITY WARNING; + END IF; + + -- Activate to Read with Auto Precharge + IF Addr (10) = '1' THEN + ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR + (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR + (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR + (Ba = "11" AND NOW - RAP_chk3 >= tRAP)) + REPORT "tRAP violation during Read" + SEVERITY WARNING; + END IF; + + -- Auto precharge + IF Addr (10) = '1' THEN + Read_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + + -- DLL Check + IF (DLL_reset = '1') THEN + ASSERT (DLL_done = '1') + REPORT "DLL RESET not complete" + SEVERITY WARNING; + END IF; + END IF; + + -- Write Command + IF Write_enable = '1' THEN + -- Pipeline for Write + Write_cmnd (2) := '1'; + Write_bank (2) := Ba; + Write_cols (2) := Addr (8 DOWNTO 0); + + -- Interrupting a Write with Auto Precharge (same bank only) + ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Write with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Write" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Write" + SEVERITY WARNING; + + -- Auto precharge + IF Addr (10) = '1' THEN + Write_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + END IF; + END IF; + END PROCESS; + + -- + -- Dqs Receiver + -- + dqs_rcvrs : PROCESS + VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0); + VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + BEGIN + WAIT ON Dqs; + -- Latch data at posedge Dqs + IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN + Dq_temp := Dq; + Dm_temp := Dm; + END IF; + -- Latch data at negedge Dqs + IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN + Dq_pair <= (Dq & Dq_temp); + Dm_pair <= (Dm & Dm_temp); + END IF; + END PROCESS; + + -- + -- Setup timing checks + -- + Setup_check : PROCESS + BEGIN + WAIT ON Sys_clk; + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIS) + REPORT "CKE Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIS) + REPORT "CS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIS) + REPORT "CAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIS) + REPORT "RAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIS) + REPORT "WE# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIS) + REPORT "ADDR Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIS) + REPORT "BA Setup time violation -- tIS" + SEVERITY WARNING; + END IF; + END PROCESS; + + -- + -- Hold timing checks + -- + Hold_check : PROCESS + BEGIN + WAIT ON Sys_clk'DELAYED (tIH); + IF Sys_clk'DELAYED (tIH) = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIH) + REPORT "CKE Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIH) + REPORT "CS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIH) + REPORT "CAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIH) + REPORT "RAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIH) + REPORT "WE# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIH) + REPORT "ADDR Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIH) + REPORT "BA Hold time violation -- tIH" + SEVERITY WARNING; + END IF; + END PROCESS; + +END behave; diff --git a/misc/wishbone/src/atomic32_access.vhd b/misc/wishbone/src/atomic32_access.vhd index b062f98..9bc9825 100644 --- a/misc/wishbone/src/atomic32_access.vhd +++ b/misc/wishbone/src/atomic32_access.vhd @@ -1,132 +1,132 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -library work; ---use work.phi_config.all; -use work.wishbone_pkg.all; - -entity atomic32_access is - port ( cpu_clk : in std_logic; - areset : in std_logic; - - -- Wishbone from CPU interface - wb_16_i : in wishbone_bus_in; - wb_16_o : out wishbone_bus_out; - - -- Wishbone to FPGA registers and ethernet core - wb_32_i : in wishbone_bus_out; - wb_32_o : out wishbone_bus_in); -end atomic32_access; - -architecture behave of atomic32_access is - -type eth_state_wr_type is (idle, lsb_msb, lsb, msb, write, ack, wait_st); -signal eth_state_wr : eth_state_wr_type; -type eth_state_rd_type is (idle, lsb_msb, lsb_read, lsb, wait_st2, msb); -signal eth_state_rd : eth_state_rd_type; -signal core_data : std_logic_vector(31 downto 0); -signal core_addr : std_logic_vector(31 downto 0); - -begin - process(cpu_clk, areset) - begin - if areset = '1' then - eth_state_wr <= idle; - eth_state_rd <= idle; - wb_32_o.stb <= '0'; - wb_32_o.cyc <= '0'; - wb_16_o.ack <= '0'; - core_data <= (others => '0'); - core_addr <= (others => '0'); - elsif (rising_edge(cpu_clk)) then - - case eth_state_wr is --write cycle - when idle => - if wb_16_i.cyc = '1' and wb_16_i.we = '1' then - eth_state_wr <= lsb_msb; - end if; - when lsb_msb => - if wb_16_i.adr(1) = '0' then - eth_state_wr <= lsb; - end if; - if wb_16_i.adr(1) = '1' then - eth_state_wr <= msb; - end if; - when lsb => - core_data(15 downto 0) <= wb_16_i.dat(15 downto 0); - wb_16_o.ack <= '1'; - eth_state_wr <= wait_st; - when msb => - core_data(31 downto 16) <= wb_16_i.dat(31 downto 16); - core_addr <= wb_16_i.adr(31 downto 2) & "00"; - eth_state_wr <= write; - when write => - wb_32_o.dat <= core_data; - wb_32_o.adr <= core_addr; - wb_32_o.sel <= "1111"; - wb_32_o.we <= '1'; - wb_32_o.stb <= '1'; - wb_32_o.cyc <= '1'; - eth_state_wr <= ack; - when ack => - if wb_32_i.ack = '1' then - wb_16_o.ack <= '1'; - eth_state_wr <= wait_st; - wb_32_o.stb <= '0'; - wb_32_o.cyc <= '0'; - wb_32_o.sel <= "0000"; - wb_32_o.we <= '0'; - end if; - when wait_st => - wb_16_o.ack <= '0'; - eth_state_wr <= idle; - when others => - eth_state_wr <= idle; - end case; - - case eth_state_rd is --read cycle - when idle => - if wb_16_i.cyc = '1' and wb_16_i.we = '0' then - core_addr <= wb_16_i.adr(31 downto 2) & "00"; - eth_state_rd <= lsb_msb; - end if; - when lsb_msb => - if wb_16_i.adr(1) = '0' then - wb_32_o.adr <= core_addr; - eth_state_rd <= lsb_read; - end if; - if wb_16_i.adr(1) = '1' then - wb_32_o.adr <= core_addr; - eth_state_rd <= msb; - end if; - when lsb_read => - wb_32_o.sel <= "1111"; - wb_32_o.we <= '0'; - wb_32_o.stb <= '1'; - wb_32_o.cyc <= '1'; - eth_state_rd <= lsb; - when lsb => - if wb_32_i.ack = '1' then - wb_32_o.sel <= "0000"; - wb_32_o.stb <= '0'; - wb_32_o.cyc <= '0'; - core_data <= wb_32_i.dat; - wb_16_o.dat <= x"0000" & wb_32_i.dat(15 downto 0); - wb_16_o.ack <= '1'; - eth_state_rd <= wait_st2; - end if; - when wait_st2 => - wb_16_o.ack <= '0'; - eth_state_rd <= idle; - when msb => - wb_16_o.ack <= '1'; - wb_16_o.dat <= core_data(31 downto 16) & x"0000"; - eth_state_rd <= wait_st2; - when others => - eth_state_rd <= idle; - end case; - end if; - end process; - +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +--use work.phi_config.all; +use work.wishbone_pkg.all; + +entity atomic32_access is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from CPU interface + wb_16_i : in wishbone_bus_in; + wb_16_o : out wishbone_bus_out; + + -- Wishbone to FPGA registers and ethernet core + wb_32_i : in wishbone_bus_out; + wb_32_o : out wishbone_bus_in); +end atomic32_access; + +architecture behave of atomic32_access is + +type eth_state_wr_type is (idle, lsb_msb, lsb, msb, write, ack, wait_st); +signal eth_state_wr : eth_state_wr_type; +type eth_state_rd_type is (idle, lsb_msb, lsb_read, lsb, wait_st2, msb); +signal eth_state_rd : eth_state_rd_type; +signal core_data : std_logic_vector(31 downto 0); +signal core_addr : std_logic_vector(31 downto 0); + +begin + process(cpu_clk, areset) + begin + if areset = '1' then + eth_state_wr <= idle; + eth_state_rd <= idle; + wb_32_o.stb <= '0'; + wb_32_o.cyc <= '0'; + wb_16_o.ack <= '0'; + core_data <= (others => '0'); + core_addr <= (others => '0'); + elsif (rising_edge(cpu_clk)) then + + case eth_state_wr is --write cycle + when idle => + if wb_16_i.cyc = '1' and wb_16_i.we = '1' then + eth_state_wr <= lsb_msb; + end if; + when lsb_msb => + if wb_16_i.adr(1) = '0' then + eth_state_wr <= lsb; + end if; + if wb_16_i.adr(1) = '1' then + eth_state_wr <= msb; + end if; + when lsb => + core_data(15 downto 0) <= wb_16_i.dat(15 downto 0); + wb_16_o.ack <= '1'; + eth_state_wr <= wait_st; + when msb => + core_data(31 downto 16) <= wb_16_i.dat(31 downto 16); + core_addr <= wb_16_i.adr(31 downto 2) & "00"; + eth_state_wr <= write; + when write => + wb_32_o.dat <= core_data; + wb_32_o.adr <= core_addr; + wb_32_o.sel <= "1111"; + wb_32_o.we <= '1'; + wb_32_o.stb <= '1'; + wb_32_o.cyc <= '1'; + eth_state_wr <= ack; + when ack => + if wb_32_i.ack = '1' then + wb_16_o.ack <= '1'; + eth_state_wr <= wait_st; + wb_32_o.stb <= '0'; + wb_32_o.cyc <= '0'; + wb_32_o.sel <= "0000"; + wb_32_o.we <= '0'; + end if; + when wait_st => + wb_16_o.ack <= '0'; + eth_state_wr <= idle; + when others => + eth_state_wr <= idle; + end case; + + case eth_state_rd is --read cycle + when idle => + if wb_16_i.cyc = '1' and wb_16_i.we = '0' then + core_addr <= wb_16_i.adr(31 downto 2) & "00"; + eth_state_rd <= lsb_msb; + end if; + when lsb_msb => + if wb_16_i.adr(1) = '0' then + wb_32_o.adr <= core_addr; + eth_state_rd <= lsb_read; + end if; + if wb_16_i.adr(1) = '1' then + wb_32_o.adr <= core_addr; + eth_state_rd <= msb; + end if; + when lsb_read => + wb_32_o.sel <= "1111"; + wb_32_o.we <= '0'; + wb_32_o.stb <= '1'; + wb_32_o.cyc <= '1'; + eth_state_rd <= lsb; + when lsb => + if wb_32_i.ack = '1' then + wb_32_o.sel <= "0000"; + wb_32_o.stb <= '0'; + wb_32_o.cyc <= '0'; + core_data <= wb_32_i.dat; + wb_16_o.dat <= x"0000" & wb_32_i.dat(15 downto 0); + wb_16_o.ack <= '1'; + eth_state_rd <= wait_st2; + end if; + when wait_st2 => + wb_16_o.ack <= '0'; + eth_state_rd <= idle; + when msb => + wb_16_o.ack <= '1'; + wb_16_o.dat <= core_data(31 downto 16) & x"0000"; + eth_state_rd <= wait_st2; + when others => + eth_state_rd <= idle; + end case; + end if; + end process; + end behave; \ No newline at end of file diff --git a/misc/wishbone/src/wishbone_pkg.vhd b/misc/wishbone/src/wishbone_pkg.vhd index c3b0d9b..359a33f 100644 --- a/misc/wishbone/src/wishbone_pkg.vhd +++ b/misc/wishbone/src/wishbone_pkg.vhd @@ -1,52 +1,52 @@ -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -package wishbone_pkg is - - type wishbone_bus_in is record - adr : std_logic_vector(31 downto 0); - sel : std_logic_vector(3 downto 0); - we : std_logic; - dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we' - cyc : std_logic; - stb : std_logic; - end record; - - type wishbone_bus_out is record - dat : std_logic_vector(31 downto 0); - ack : std_logic; - end record; - - type wishbone_bus is record - insig : wishbone_bus_in; - outsig : wishbone_bus_out; - end record; - - component atomic32_access is - port ( cpu_clk : in std_logic; - areset : in std_logic; - - -- Wishbone from CPU interface - wb_16_i : in wishbone_bus_in; - wb_16_o : out wishbone_bus_out; - -- Wishbone to FPGA registers and ethernet core - wb_32_i : in wishbone_bus_out; - wb_32_o : out wishbone_bus_in); - end component; - - component eth_access_corr is - port ( cpu_clk : in std_logic; - areset : in std_logic; - - -- Wishbone from Wishbone MUX - eth_raw_o : out wishbone_bus_out; - eth_raw_i : in wishbone_bus_in; - - -- Wishbone ethernet core - eth_slave_i : in wishbone_bus_out; - eth_slave_o : out wishbone_bus_in); - end component; - - -end wishbone_pkg; +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package wishbone_pkg is + + type wishbone_bus_in is record + adr : std_logic_vector(31 downto 0); + sel : std_logic_vector(3 downto 0); + we : std_logic; + dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we' + cyc : std_logic; + stb : std_logic; + end record; + + type wishbone_bus_out is record + dat : std_logic_vector(31 downto 0); + ack : std_logic; + end record; + + type wishbone_bus is record + insig : wishbone_bus_in; + outsig : wishbone_bus_out; + end record; + + component atomic32_access is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from CPU interface + wb_16_i : in wishbone_bus_in; + wb_16_o : out wishbone_bus_out; + -- Wishbone to FPGA registers and ethernet core + wb_32_i : in wishbone_bus_out; + wb_32_o : out wishbone_bus_in); + end component; + + component eth_access_corr is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from Wishbone MUX + eth_raw_o : out wishbone_bus_out; + eth_raw_i : in wishbone_bus_in; + + -- Wishbone ethernet core + eth_slave_i : in wishbone_bus_out; + eth_slave_o : out wishbone_bus_in); + end component; + + +end wishbone_pkg; diff --git a/zpu/hdl/example/bram_dmips.vhd b/zpu/hdl/example/bram_dmips.vhd index 733560e..07b19f4 100644 --- a/zpu/hdl/example/bram_dmips.vhd +++ b/zpu/hdl/example/bram_dmips.vhd @@ -1,3356 +1,3356 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(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 dualport_ram; - -architecture dualport_ram_arch of dualport_ram is - - -type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); - -shared variable ram : ram_type := -( - 0 => x"0b0b0b0b", - 1 => x"82700b0b", - 2 => x"80d5f40c", - 3 => x"3a0b0b80", - 4 => x"c4fb0400", - 5 => x"00000000", - 6 => x"00000000", - 7 => x"00000000", - 8 => x"80088408", - 9 => x"88080b0b", - 10 => x"80c5c22d", - 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"c3040000", - 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"0b0b88a6", - 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"0b0b80d5", - 162 => x"e0738306", - 163 => x"10100508", - 164 => x"060b0b0b", - 165 => x"88a90400", - 166 => x"00000000", - 167 => x"00000000", - 168 => x"80088408", - 169 => x"88087575", - 170 => x"0b0b0bad", - 171 => x"aa2d5050", - 172 => x"80085688", - 173 => x"0c840c80", - 174 => x"0c510400", - 175 => x"00000000", - 176 => x"80088408", - 177 => x"88087575", - 178 => x"0b0b0bad", - 179 => x"ee2d5050", - 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"80d5f00c", - 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"82fd3fbf", - 257 => x"a03f0410", - 258 => x"10101010", - 259 => x"10101010", - 260 => x"10101010", - 261 => x"10101010", - 262 => x"10101010", - 263 => x"10101010", - 264 => x"10101010", - 265 => x"10105351", - 266 => x"047381ff", - 267 => x"06738306", - 268 => x"09810583", - 269 => x"05101010", - 270 => x"2b0772fc", - 271 => x"060c5151", - 272 => x"043c0472", - 273 => x"72807281", - 274 => x"06ff0509", - 275 => x"72060571", - 276 => x"1052720a", - 277 => x"100a5372", - 278 => x"ed385151", - 279 => x"535104ff", - 280 => x"3d0d0b0b", - 281 => x"80e5e408", - 282 => x"52710870", - 283 => x"882a8132", - 284 => x"70810651", - 285 => x"515170f1", - 286 => x"3873720c", - 287 => x"833d0d04", - 288 => x"80d5f008", - 289 => x"802ea438", - 290 => x"80d5f408", - 291 => x"822ebd38", - 292 => x"8380800b", - 293 => x"0b0b80e5", - 294 => x"e40c82a0", - 295 => x"800b80e5", - 296 => x"e80c8290", - 297 => x"800b80e5", - 298 => x"ec0c04f8", - 299 => x"808080a4", - 300 => x"0b0b0b80", - 301 => x"e5e40cf8", - 302 => x"80808280", - 303 => x"0b80e5e8", - 304 => x"0cf88080", - 305 => x"84800b80", - 306 => x"e5ec0c04", - 307 => x"80c0a880", - 308 => x"8c0b0b0b", - 309 => x"80e5e40c", - 310 => x"80c0a880", - 311 => x"940b80e5", - 312 => x"e80c0b0b", - 313 => x"80c7d00b", - 314 => x"80e5ec0c", - 315 => x"04f23d0d", - 316 => x"6080e5e8", - 317 => x"08565d82", - 318 => x"750c8059", - 319 => x"805a800b", - 320 => x"8f3d5d5b", - 321 => x"7a101015", - 322 => x"70087108", - 323 => x"719f2c7e", - 324 => x"852b5855", - 325 => x"557d5359", - 326 => x"5799993f", - 327 => x"7d7f7a72", - 328 => x"077c7207", - 329 => x"71716081", - 330 => x"05415f5d", - 331 => x"5b595755", - 332 => x"817b278f", - 333 => x"38767d0c", - 334 => x"77841e0c", - 335 => x"7c800c90", - 336 => x"3d0d0480", - 337 => x"e5e80855", - 338 => x"ffba3970", - 339 => x"7080e5f0", - 340 => x"335170a7", - 341 => x"3880d5fc", - 342 => x"08700852", - 343 => x"5270802e", - 344 => x"94388412", - 345 => x"80d5fc0c", - 346 => x"702d80d5", - 347 => x"fc087008", - 348 => x"525270ee", - 349 => x"38810b80", - 350 => x"e5f03450", - 351 => x"50040470", - 352 => x"0b0b80e5", - 353 => x"e008802e", - 354 => x"8e380b0b", - 355 => x"0b0b800b", - 356 => x"802e0981", - 357 => x"06833850", - 358 => x"040b0b80", - 359 => x"e5e0510b", - 360 => x"0b0bf4dc", - 361 => x"3f500404", - 362 => x"ff3d0d02", - 363 => x"8f053352", - 364 => x"718a2e8a", - 365 => x"387151fd", - 366 => x"a63f833d", - 367 => x"0d048d51", - 368 => x"fd9d3f71", - 369 => x"51fd983f", - 370 => x"833d0d04", - 371 => x"ce3d0db5", - 372 => x"3d707084", - 373 => x"0552088b", - 374 => x"a85c56a5", - 375 => x"3d5e5c80", - 376 => x"75708105", - 377 => x"5733765b", - 378 => x"55587378", - 379 => x"2e80c138", - 380 => x"8e3d5b73", - 381 => x"a52e0981", - 382 => x"0680c538", - 383 => x"78708105", - 384 => x"5a335473", - 385 => x"80e42e81", - 386 => x"b6387380", - 387 => x"e42480c6", - 388 => x"387380e3", - 389 => x"2ea13880", - 390 => x"52a55179", - 391 => x"2d805273", - 392 => x"51792d82", - 393 => x"18587870", - 394 => x"81055a33", - 395 => x"5473c438", - 396 => x"77800cb4", - 397 => x"3d0d047b", - 398 => x"841d8312", - 399 => x"33565d57", - 400 => x"80527351", - 401 => x"792d8118", - 402 => x"79708105", - 403 => x"5b335558", - 404 => x"73ffa038", - 405 => x"db397380", - 406 => x"f32e0981", - 407 => x"06ffb838", - 408 => x"7b841d71", - 409 => x"08595d56", - 410 => x"80773355", - 411 => x"5673762e", - 412 => x"8d388116", - 413 => x"70187033", - 414 => x"57555674", - 415 => x"f538ff16", - 416 => x"55807625", - 417 => x"ffa03876", - 418 => x"70810558", - 419 => x"33548052", - 420 => x"7351792d", - 421 => x"811875ff", - 422 => x"17575758", - 423 => x"807625ff", - 424 => x"85387670", - 425 => x"81055833", - 426 => x"54805273", - 427 => x"51792d81", - 428 => x"1875ff17", - 429 => x"57575875", - 430 => x"8024cc38", - 431 => x"fee8397b", - 432 => x"841d7108", - 433 => x"70719f2c", - 434 => x"5953595d", - 435 => x"56807524", - 436 => x"81913875", - 437 => x"7d7c5856", - 438 => x"54805773", - 439 => x"772e0981", - 440 => x"06b638b0", - 441 => x"7b3402b5", - 442 => x"05567a76", - 443 => x"2e9738ff", - 444 => x"16567533", - 445 => x"75708105", - 446 => x"57348117", - 447 => x"577a762e", - 448 => x"098106eb", - 449 => x"38807534", - 450 => x"767dff12", - 451 => x"57585675", - 452 => x"8024fef3", - 453 => x"38fe8f39", - 454 => x"8a527351", - 455 => x"9fd03f80", - 456 => x"0880c7d4", - 457 => x"05337670", - 458 => x"81055834", - 459 => x"8a527351", - 460 => x"9ef83f80", - 461 => x"08548008", - 462 => x"802effae", - 463 => x"388a5273", - 464 => x"519fab3f", - 465 => x"800880c7", - 466 => x"d4053376", - 467 => x"70810558", - 468 => x"348a5273", - 469 => x"519ed33f", - 470 => x"80085480", - 471 => x"08ffb938", - 472 => x"ff883974", - 473 => x"527653b4", - 474 => x"3dffb805", - 475 => x"51949a3f", - 476 => x"a33d0856", - 477 => x"fedd3980", - 478 => x"3d0d80c1", - 479 => x"0b81b4bc", - 480 => x"34800b81", - 481 => x"b6980c70", - 482 => x"800c823d", - 483 => x"0d04ff3d", - 484 => x"0d800b81", - 485 => x"b4bc3352", - 486 => x"527080c1", - 487 => x"2e993871", - 488 => x"81b69808", - 489 => x"0781b698", - 490 => x"0c80c20b", - 491 => x"81b4c034", - 492 => x"70800c83", - 493 => x"3d0d0481", - 494 => x"0b81b698", - 495 => x"080781b6", - 496 => x"980c80c2", - 497 => x"0b81b4c0", - 498 => x"3470800c", - 499 => x"833d0d04", - 500 => x"fd3d0d75", - 501 => x"70088a05", - 502 => x"535381b4", - 503 => x"bc335170", - 504 => x"80c12e8b", - 505 => x"3873f338", - 506 => x"70800c85", - 507 => x"3d0d04ff", - 508 => x"127081b4", - 509 => x"b8083174", - 510 => x"0c800c85", - 511 => x"3d0d04fc", - 512 => x"3d0d81b4", - 513 => x"c4085574", - 514 => x"802e8c38", - 515 => x"76750871", - 516 => x"0c81b4c4", - 517 => x"0856548c", - 518 => x"155381b4", - 519 => x"b808528a", - 520 => x"518fd43f", - 521 => x"73800c86", - 522 => x"3d0d04fb", - 523 => x"3d0d7770", - 524 => x"085656b0", - 525 => x"5381b4c4", - 526 => x"08527451", - 527 => x"ab943f85", - 528 => x"0b8c170c", - 529 => x"850b8c16", - 530 => x"0c750875", - 531 => x"0c81b4c4", - 532 => x"08547380", - 533 => x"2e8a3873", - 534 => x"08750c81", - 535 => x"b4c40854", - 536 => x"8c145381", - 537 => x"b4b80852", - 538 => x"8a518f8b", - 539 => x"3f841508", - 540 => x"ad38860b", - 541 => x"8c160c88", - 542 => x"15528816", - 543 => x"08518e97", - 544 => x"3f81b4c4", - 545 => x"08700876", - 546 => x"0c548c15", - 547 => x"7054548a", - 548 => x"52730851", - 549 => x"8ee13f73", - 550 => x"800c873d", - 551 => x"0d047508", - 552 => x"54b05373", - 553 => x"527551aa", - 554 => x"a93f7380", - 555 => x"0c873d0d", - 556 => x"04d93d0d", - 557 => x"b0519dcf", - 558 => x"3f800881", - 559 => x"b4b40cb0", - 560 => x"519dc43f", - 561 => x"800881b4", - 562 => x"c40c81b4", - 563 => x"b4088008", - 564 => x"0c800b80", - 565 => x"0884050c", - 566 => x"820b8008", - 567 => x"88050ca8", - 568 => x"0b80088c", - 569 => x"050c9f53", - 570 => x"80c7e052", - 571 => x"80089005", - 572 => x"51a9df3f", - 573 => x"a13d5e9f", - 574 => x"5380c880", - 575 => x"527d51a9", - 576 => x"d13f8a0b", - 577 => x"80f2f80c", - 578 => x"80d2a451", - 579 => x"f9be3f80", - 580 => x"c8a051f9", - 581 => x"b73f80d2", - 582 => x"a451f9b0", - 583 => x"3f80d684", - 584 => x"08802e89", - 585 => x"d33880c8", - 586 => x"d051f9a0", - 587 => x"3f80d2a4", - 588 => x"51f9993f", - 589 => x"80d68008", - 590 => x"5280c8fc", - 591 => x"51f98d3f", - 592 => x"80e69451", - 593 => x"b2ff3f81", - 594 => x"0b9a3d5e", - 595 => x"5b800b80", - 596 => x"d6800825", - 597 => x"82d43890", - 598 => x"3d5f80c1", - 599 => x"0b81b4bc", - 600 => x"34810b81", - 601 => x"b6980c80", - 602 => x"c20b81b4", - 603 => x"c0348240", - 604 => x"835a9f53", - 605 => x"80c9ac52", - 606 => x"7c51a8d6", - 607 => x"3f814180", - 608 => x"7d537e52", - 609 => x"568e943f", - 610 => x"8008762e", - 611 => x"09810683", - 612 => x"38815675", - 613 => x"81b6980c", - 614 => x"7f705856", - 615 => x"758325a2", - 616 => x"38751010", - 617 => x"16fd0542", - 618 => x"a93dffa4", - 619 => x"05538352", - 620 => x"76518cc3", - 621 => x"3f7f8105", - 622 => x"70417058", - 623 => x"56837624", - 624 => x"e0386154", - 625 => x"755380e6", - 626 => x"9c5281b4", - 627 => x"d0518cb7", - 628 => x"3f81b4c4", - 629 => x"08700858", - 630 => x"58b05377", - 631 => x"527651a7", - 632 => x"f13f850b", - 633 => x"8c190c85", - 634 => x"0b8c180c", - 635 => x"7708770c", - 636 => x"81b4c408", - 637 => x"5675802e", - 638 => x"8a387508", - 639 => x"770c81b4", - 640 => x"c408568c", - 641 => x"165381b4", - 642 => x"b808528a", - 643 => x"518be83f", - 644 => x"84170887", - 645 => x"ea38860b", - 646 => x"8c180c88", - 647 => x"17528818", - 648 => x"08518af3", - 649 => x"3f81b4c4", - 650 => x"08700878", - 651 => x"0c568c17", - 652 => x"7054598a", - 653 => x"52780851", - 654 => x"8bbd3f80", - 655 => x"c10b81b4", - 656 => x"c0335757", - 657 => x"767626a2", - 658 => x"3880c352", - 659 => x"76518ca1", - 660 => x"3f800861", - 661 => x"2e89e438", - 662 => x"81177081", - 663 => x"ff0681b4", - 664 => x"c0335858", - 665 => x"58757727", - 666 => x"e0387960", - 667 => x"29627054", - 668 => x"71535b59", - 669 => x"98b43f80", - 670 => x"0840787a", - 671 => x"31708729", - 672 => x"80083180", - 673 => x"088a0581", - 674 => x"b4bc3381", - 675 => x"b4b8085e", - 676 => x"5b525a56", - 677 => x"7780c12e", - 678 => x"89ce387b", - 679 => x"f738811b", - 680 => x"5b80d680", - 681 => x"087b25fd", - 682 => x"b13881b4", - 683 => x"ac51b095", - 684 => x"3f80c9cc", - 685 => x"51f6953f", - 686 => x"80d2a451", - 687 => x"f68e3f80", - 688 => x"c9dc51f6", - 689 => x"873f80d2", - 690 => x"a451f680", - 691 => x"3f81b4b8", - 692 => x"085280ca", - 693 => x"9451f5f4", - 694 => x"3f855280", - 695 => x"cab051f5", - 696 => x"eb3f81b6", - 697 => x"98085280", - 698 => x"cacc51f5", - 699 => x"df3f8152", - 700 => x"80cab051", - 701 => x"f5d63f81", - 702 => x"b4bc3352", - 703 => x"80cae851", - 704 => x"f5ca3f80", - 705 => x"c15280cb", - 706 => x"8451f5c0", - 707 => x"3f81b4c0", - 708 => x"335280cb", - 709 => x"a051f5b4", - 710 => x"3f80c252", - 711 => x"80cb8451", - 712 => x"f5aa3f81", - 713 => x"b4f00852", - 714 => x"80cbbc51", - 715 => x"f59e3f87", - 716 => x"5280cab0", - 717 => x"51f5953f", - 718 => x"80f2f808", - 719 => x"5280cbd8", - 720 => x"51f5893f", - 721 => x"80cbf451", - 722 => x"f5823f80", - 723 => x"cca051f4", - 724 => x"fb3f81b4", - 725 => x"c4087008", - 726 => x"535a80cc", - 727 => x"ac51f4ec", - 728 => x"3f80ccc8", - 729 => x"51f4e53f", - 730 => x"81b4c408", - 731 => x"84110853", - 732 => x"5680ccfc", - 733 => x"51f4d53f", - 734 => x"805280ca", - 735 => x"b051f4cc", - 736 => x"3f81b4c4", - 737 => x"08881108", - 738 => x"535880cd", - 739 => x"9851f4bc", - 740 => x"3f825280", - 741 => x"cab051f4", - 742 => x"b33f81b4", - 743 => x"c4088c11", - 744 => x"08535780", - 745 => x"cdb451f4", - 746 => x"a33f9152", - 747 => x"80cab051", - 748 => x"f49a3f81", - 749 => x"b4c40890", - 750 => x"055280cd", - 751 => x"d051f48c", - 752 => x"3f80cdec", - 753 => x"51f4853f", - 754 => x"80cea451", - 755 => x"f3fe3f81", - 756 => x"b4b40870", - 757 => x"08535f80", - 758 => x"ccac51f3", - 759 => x"ef3f80ce", - 760 => x"b851f3e8", - 761 => x"3f81b4b4", - 762 => x"08841108", - 763 => x"535b80cc", - 764 => x"fc51f3d8", - 765 => x"3f805280", - 766 => x"cab051f3", - 767 => x"cf3f81b4", - 768 => x"b4088811", - 769 => x"08535c80", - 770 => x"cd9851f3", - 771 => x"bf3f8152", - 772 => x"80cab051", - 773 => x"f3b63f81", - 774 => x"b4b4088c", - 775 => x"1108535a", - 776 => x"80cdb451", - 777 => x"f3a63f92", - 778 => x"5280cab0", - 779 => x"51f39d3f", - 780 => x"81b4b408", - 781 => x"90055280", - 782 => x"cdd051f3", - 783 => x"8f3f80cd", - 784 => x"ec51f388", - 785 => x"3f7f5280", - 786 => x"cef851f2", - 787 => x"ff3f8552", - 788 => x"80cab051", - 789 => x"f2f63f78", - 790 => x"5280cf94", - 791 => x"51f2ed3f", - 792 => x"8d5280ca", - 793 => x"b051f2e4", - 794 => x"3f615280", - 795 => x"cfb051f2", - 796 => x"db3f8752", - 797 => x"80cab051", - 798 => x"f2d23f60", - 799 => x"5280cfcc", - 800 => x"51f2c93f", - 801 => x"815280ca", - 802 => x"b051f2c0", - 803 => x"3f7d5280", - 804 => x"cfe851f2", - 805 => x"b73f80d0", - 806 => x"8451f2b0", - 807 => x"3f7c5280", - 808 => x"d0bc51f2", - 809 => x"a73f80d0", - 810 => x"d851f2a0", - 811 => x"3f80d2a4", - 812 => x"51f2993f", - 813 => x"81b4ac08", - 814 => x"81b4b008", - 815 => x"80e69408", - 816 => x"80e69808", - 817 => x"72713170", - 818 => x"74267574", - 819 => x"31707231", - 820 => x"80e68c0c", - 821 => x"444480e6", - 822 => x"900c80e6", - 823 => x"90085680", - 824 => x"d190555c", - 825 => x"595758f1", - 826 => x"e33f80e6", - 827 => x"8c085680", - 828 => x"762582a3", - 829 => x"3880d680", - 830 => x"0870719f", - 831 => x"2c9a3d53", - 832 => x"565680e6", - 833 => x"8c0880e6", - 834 => x"90084153", - 835 => x"7f547052", - 836 => x"5a89eb3f", - 837 => x"66685f80", - 838 => x"e5fc0c7d", - 839 => x"80e6800c", - 840 => x"80d68008", - 841 => x"709f2c58", - 842 => x"568058bd", - 843 => x"84c07855", - 844 => x"55765275", - 845 => x"53795187", - 846 => x"d13f953d", - 847 => x"80e68c08", - 848 => x"80e69008", - 849 => x"41557f56", - 850 => x"67694053", - 851 => x"7e547052", - 852 => x"5c89ab3f", - 853 => x"64665e80", - 854 => x"e6840c7c", - 855 => x"80e6880c", - 856 => x"80d68008", - 857 => x"709f2c40", - 858 => x"58805783", - 859 => x"dceb9480", - 860 => x"7755557e", - 861 => x"5277537b", - 862 => x"51878f3f", - 863 => x"64665d5b", - 864 => x"805e8ddd", - 865 => x"7e555580", - 866 => x"e68c0880", - 867 => x"e6900859", - 868 => x"52775379", - 869 => x"5186f33f", - 870 => x"66684054", - 871 => x"7e557a52", - 872 => x"7b53a93d", - 873 => x"ffa80551", - 874 => x"88d43f62", - 875 => x"645e81b4", - 876 => x"c80c7c81", - 877 => x"b4cc0c80", - 878 => x"d1a051f0", - 879 => x"8f3f80e6", - 880 => x"80085280", - 881 => x"d1d051f0", - 882 => x"833f80d1", - 883 => x"d851effc", - 884 => x"3f80e688", - 885 => x"085280d1", - 886 => x"d051eff0", - 887 => x"3f81b4cc", - 888 => x"085280d2", - 889 => x"8851efe4", - 890 => x"3f80d2a4", - 891 => x"51efdd3f", - 892 => x"800b800c", - 893 => x"a93d0d04", - 894 => x"80d2a851", - 895 => x"f6ac3977", - 896 => x"0857b053", - 897 => x"76527751", - 898 => x"9fc83f80", - 899 => x"c10b81b4", - 900 => x"c0335757", - 901 => x"f8ae3975", - 902 => x"8a3880e6", - 903 => x"90088126", - 904 => x"fdd33880", - 905 => x"d2d851ef", - 906 => x"a33f80d3", - 907 => x"9051ef9c", - 908 => x"3f80d2a4", - 909 => x"51ef953f", - 910 => x"80d68008", - 911 => x"70719f2c", - 912 => x"9a3d5356", - 913 => x"5680e68c", - 914 => x"0880e690", - 915 => x"0841537f", - 916 => x"5470525a", - 917 => x"87a83f66", - 918 => x"685f80e5", - 919 => x"fc0c7d80", - 920 => x"e6800c80", - 921 => x"d6800870", - 922 => x"9f2c5856", - 923 => x"8058bd84", - 924 => x"c0785555", - 925 => x"76527553", - 926 => x"7951858e", - 927 => x"3f953d80", - 928 => x"e68c0880", - 929 => x"e6900841", - 930 => x"557f5667", - 931 => x"6940537e", - 932 => x"5470525c", - 933 => x"86e83f64", - 934 => x"665e80e6", - 935 => x"840c7c80", - 936 => x"e6880c80", - 937 => x"d6800870", - 938 => x"9f2c4058", - 939 => x"805783dc", - 940 => x"eb948077", - 941 => x"55557e52", - 942 => x"77537b51", - 943 => x"84cc3f64", - 944 => x"665d5b80", - 945 => x"5e8ddd7e", - 946 => x"555580e6", - 947 => x"8c0880e6", - 948 => x"90085952", - 949 => x"77537951", - 950 => x"84b03f66", - 951 => x"6840547e", - 952 => x"557a527b", - 953 => x"53a93dff", - 954 => x"a8055186", - 955 => x"913f6264", - 956 => x"5e81b4c8", - 957 => x"0c7c81b4", - 958 => x"cc0c80d1", - 959 => x"a051edcc", - 960 => x"3f80e680", - 961 => x"085280d1", - 962 => x"d051edc0", - 963 => x"3f80d1d8", - 964 => x"51edb93f", - 965 => x"80e68808", - 966 => x"5280d1d0", - 967 => x"51edad3f", - 968 => x"81b4cc08", - 969 => x"5280d288", - 970 => x"51eda13f", - 971 => x"80d2a451", - 972 => x"ed9a3f80", - 973 => x"0b800ca9", - 974 => x"3d0d04a9", - 975 => x"3dffa005", - 976 => x"52805180", - 977 => x"d23f9f53", - 978 => x"80d3b052", - 979 => x"7c519d82", - 980 => x"3f7a7b81", - 981 => x"b4b80c81", - 982 => x"187081ff", - 983 => x"0681b4c0", - 984 => x"33595959", - 985 => x"5af5fe39", - 986 => x"ff16707b", - 987 => x"31600c5c", - 988 => x"800b811c", - 989 => x"5c5c80d6", - 990 => x"80087b25", - 991 => x"f3dc38f6", - 992 => x"a939ff3d", - 993 => x"0d738232", - 994 => x"70307072", - 995 => x"07802580", - 996 => x"0c525283", - 997 => x"3d0d04fe", - 998 => x"3d0d7476", - 999 => x"71535452", - 1000 => x"71822e83", - 1001 => x"38835171", - 1002 => x"812e9a38", - 1003 => x"8172269f", - 1004 => x"3871822e", - 1005 => x"b8387184", - 1006 => x"2ea93870", - 1007 => x"730c7080", - 1008 => x"0c843d0d", - 1009 => x"0480e40b", - 1010 => x"81b4b808", - 1011 => x"258b3880", - 1012 => x"730c7080", - 1013 => x"0c843d0d", - 1014 => x"0483730c", - 1015 => x"70800c84", - 1016 => x"3d0d0482", - 1017 => x"730c7080", - 1018 => x"0c843d0d", - 1019 => x"0481730c", - 1020 => x"70800c84", - 1021 => x"3d0d0480", - 1022 => x"3d0d7474", - 1023 => x"14820571", - 1024 => x"0c800c82", - 1025 => x"3d0d04f7", - 1026 => x"3d0d7b7d", - 1027 => x"7f618512", - 1028 => x"70822b75", - 1029 => x"11707471", - 1030 => x"70840553", - 1031 => x"0c5a5a5d", - 1032 => x"5b760c79", - 1033 => x"80f8180c", - 1034 => x"79861252", - 1035 => x"57585a5a", - 1036 => x"76762499", - 1037 => x"3876b329", - 1038 => x"822b7911", - 1039 => x"51537673", - 1040 => x"70840555", - 1041 => x"0c811454", - 1042 => x"757425f2", - 1043 => x"387681cc", - 1044 => x"2919fc11", - 1045 => x"088105fc", - 1046 => x"120c7a19", - 1047 => x"70089fa0", - 1048 => x"130c5856", - 1049 => x"850b81b4", - 1050 => x"b80c7580", - 1051 => x"0c8b3d0d", - 1052 => x"04fe3d0d", - 1053 => x"02930533", - 1054 => x"51800284", - 1055 => x"05970533", - 1056 => x"54527073", - 1057 => x"2e883871", - 1058 => x"800c843d", - 1059 => x"0d047081", - 1060 => x"b4bc3481", - 1061 => x"0b800c84", - 1062 => x"3d0d04f8", - 1063 => x"3d0d7a7c", - 1064 => x"5956820b", - 1065 => x"83195555", - 1066 => x"74167033", - 1067 => x"75335b51", - 1068 => x"5372792e", - 1069 => x"80c63880", - 1070 => x"c10b8116", - 1071 => x"81165656", - 1072 => x"57827525", - 1073 => x"e338ffa9", - 1074 => x"177081ff", - 1075 => x"06555973", - 1076 => x"82268338", - 1077 => x"87558153", - 1078 => x"7680d22e", - 1079 => x"98387752", - 1080 => x"75519bc3", - 1081 => x"3f805372", - 1082 => x"80082589", - 1083 => x"38871581", - 1084 => x"b4b80c81", - 1085 => x"5372800c", - 1086 => x"8a3d0d04", - 1087 => x"7281b4bc", - 1088 => x"34827525", - 1089 => x"ffa238ff", - 1090 => x"bd39ef3d", - 1091 => x"0d636567", - 1092 => x"5b427943", - 1093 => x"67695940", - 1094 => x"77415a80", - 1095 => x"5d805e61", - 1096 => x"7083ffff", - 1097 => x"0671902a", - 1098 => x"627083ff", - 1099 => x"ff067190", - 1100 => x"2a747229", - 1101 => x"74732975", - 1102 => x"73297774", - 1103 => x"2973902a", - 1104 => x"05721151", - 1105 => x"5856535f", - 1106 => x"5a575a58", - 1107 => x"55587373", - 1108 => x"27863884", - 1109 => x"80801656", - 1110 => x"73902a16", - 1111 => x"5b7883ff", - 1112 => x"ff067484", - 1113 => x"80802905", - 1114 => x"5c7a7c5a", - 1115 => x"5d785e77", - 1116 => x"7f296178", - 1117 => x"29057d05", - 1118 => x"5d7c7e56", - 1119 => x"7a0c7484", - 1120 => x"1b0c7980", - 1121 => x"0c933d0d", - 1122 => x"04f93d0d", - 1123 => x"797b7d54", - 1124 => x"58725977", - 1125 => x"30797030", - 1126 => x"7072079f", - 1127 => x"2a737131", - 1128 => x"5a525977", - 1129 => x"7956730c", - 1130 => x"53738413", - 1131 => x"0c54800c", - 1132 => x"893d0d04", - 1133 => x"f93d0d79", - 1134 => x"7b7d7f56", - 1135 => x"54525472", - 1136 => x"802ea038", - 1137 => x"70577158", - 1138 => x"a0733152", - 1139 => x"807225a1", - 1140 => x"38777074", - 1141 => x"2b577073", - 1142 => x"2a78752b", - 1143 => x"07565174", - 1144 => x"76535170", - 1145 => x"740c7184", - 1146 => x"150c7380", - 1147 => x"0c893d0d", - 1148 => x"04805677", - 1149 => x"72302b55", - 1150 => x"74765351", - 1151 => x"e639e43d", - 1152 => x"0d6ea13d", - 1153 => x"08a33d08", - 1154 => x"59575f80", - 1155 => x"764d774e", - 1156 => x"a33d08a5", - 1157 => x"3d08574b", - 1158 => x"754c5e7d", - 1159 => x"6c2486fb", - 1160 => x"38806a24", - 1161 => x"878f3869", - 1162 => x"6b58566b", - 1163 => x"6d5d467b", - 1164 => x"47754476", - 1165 => x"45646468", - 1166 => x"685c5c56", - 1167 => x"567481e7", - 1168 => x"38787627", - 1169 => x"82c73875", - 1170 => x"81ff2683", - 1171 => x"2b5583ff", - 1172 => x"ff76278c", - 1173 => x"389055fe", - 1174 => x"800a7627", - 1175 => x"83389855", - 1176 => x"75752a80", - 1177 => x"d3d00570", - 1178 => x"33a07731", - 1179 => x"71315755", - 1180 => x"5774802e", - 1181 => x"95387575", - 1182 => x"2ba07631", - 1183 => x"7a772b7c", - 1184 => x"722a077c", - 1185 => x"782b5d5b", - 1186 => x"59567590", - 1187 => x"2a7683ff", - 1188 => x"ff067154", - 1189 => x"7a535957", - 1190 => x"88803f80", - 1191 => x"085b87ea", - 1192 => x"3f800880", - 1193 => x"0879297c", - 1194 => x"902b7c90", - 1195 => x"2a075656", - 1196 => x"59737527", - 1197 => x"94388008", - 1198 => x"ff057615", - 1199 => x"55597574", - 1200 => x"26873874", - 1201 => x"742687b9", - 1202 => x"38765273", - 1203 => x"75315187", - 1204 => x"c93f8008", - 1205 => x"5587b33f", - 1206 => x"80088008", - 1207 => x"79297b83", - 1208 => x"ffff0677", - 1209 => x"902b0756", - 1210 => x"59577378", - 1211 => x"27963880", - 1212 => x"08ff0576", - 1213 => x"15555775", - 1214 => x"74268938", - 1215 => x"77742677", - 1216 => x"71315856", - 1217 => x"78902b77", - 1218 => x"0758805b", - 1219 => x"7a407741", - 1220 => x"7f615654", - 1221 => x"7d80d938", - 1222 => x"737f0c74", - 1223 => x"7f84050c", - 1224 => x"7e800c9e", - 1225 => x"3d0d0480", - 1226 => x"705c5874", - 1227 => x"7926dd38", - 1228 => x"7481ff26", - 1229 => x"832b5774", - 1230 => x"83ffff26", - 1231 => x"82a53874", - 1232 => x"772a80d3", - 1233 => x"d0057033", - 1234 => x"a0793171", - 1235 => x"31595c5d", - 1236 => x"7682b338", - 1237 => x"76547479", - 1238 => x"27833881", - 1239 => x"54797627", - 1240 => x"74075981", - 1241 => x"5878ffa2", - 1242 => x"38765880", - 1243 => x"5bff9d39", - 1244 => x"73527453", - 1245 => x"9e3de805", - 1246 => x"51fc8e3f", - 1247 => x"6769567f", - 1248 => x"0c747f84", - 1249 => x"050c7e80", - 1250 => x"0c9e3d0d", - 1251 => x"0475802e", - 1252 => x"81c43875", - 1253 => x"81ff2683", - 1254 => x"2b5583ff", - 1255 => x"ff76278c", - 1256 => x"389055fe", - 1257 => x"800a7627", - 1258 => x"83389855", - 1259 => x"75752a80", - 1260 => x"d3d00570", - 1261 => x"33a07731", - 1262 => x"7131575e", - 1263 => x"54748491", - 1264 => x"38787631", - 1265 => x"54817690", - 1266 => x"2a7783ff", - 1267 => x"ff065f5d", - 1268 => x"5b7b5273", - 1269 => x"5185c33f", - 1270 => x"80085785", - 1271 => x"ad3f8008", - 1272 => x"80087e29", - 1273 => x"78902b7c", - 1274 => x"902a0756", - 1275 => x"56597375", - 1276 => x"27943880", - 1277 => x"08ff0576", - 1278 => x"15555975", - 1279 => x"74268738", - 1280 => x"74742684", - 1281 => x"f3387b52", - 1282 => x"73753151", - 1283 => x"858c3f80", - 1284 => x"085584f6", - 1285 => x"3f800880", - 1286 => x"087e297b", - 1287 => x"83ffff06", - 1288 => x"77902b07", - 1289 => x"56595773", - 1290 => x"78279638", - 1291 => x"8008ff05", - 1292 => x"76155557", - 1293 => x"75742689", - 1294 => x"38777426", - 1295 => x"77713158", - 1296 => x"5a78902b", - 1297 => x"77077b41", - 1298 => x"417f6156", - 1299 => x"547d802e", - 1300 => x"fdc638fe", - 1301 => x"9b397552", - 1302 => x"815184ae", - 1303 => x"3f800856", - 1304 => x"feb13990", - 1305 => x"57fe800a", - 1306 => x"7527fdd3", - 1307 => x"38987571", - 1308 => x"2a80d3d0", - 1309 => x"057033a0", - 1310 => x"73317131", - 1311 => x"535d5e57", - 1312 => x"76802efd", - 1313 => x"cf38a077", - 1314 => x"3175782b", - 1315 => x"77722a07", - 1316 => x"77792b7b", - 1317 => x"7a2b7d74", - 1318 => x"2a077d7b", - 1319 => x"2b73902a", - 1320 => x"7483ffff", - 1321 => x"0671597f", - 1322 => x"772a585e", - 1323 => x"5c415f58", - 1324 => x"5c5483e6", - 1325 => x"3f800854", - 1326 => x"83d03f80", - 1327 => x"08800879", - 1328 => x"2975902b", - 1329 => x"7e902a07", - 1330 => x"56565973", - 1331 => x"75279938", - 1332 => x"8008ff05", - 1333 => x"7b155559", - 1334 => x"7a74268c", - 1335 => x"38737527", - 1336 => x"8738ff19", - 1337 => x"7b155559", - 1338 => x"76527375", - 1339 => x"315183aa", - 1340 => x"3f800855", - 1341 => x"83943f80", - 1342 => x"08800879", - 1343 => x"297d83ff", - 1344 => x"ff067790", - 1345 => x"2b075659", - 1346 => x"57737827", - 1347 => x"99388008", - 1348 => x"ff057b15", - 1349 => x"55577a74", - 1350 => x"268c3873", - 1351 => x"78278738", - 1352 => x"ff177b15", - 1353 => x"55577378", - 1354 => x"3179902b", - 1355 => x"78077083", - 1356 => x"ffff0671", - 1357 => x"902a7983", - 1358 => x"ffff067a", - 1359 => x"902a7372", - 1360 => x"29737329", - 1361 => x"74732976", - 1362 => x"74297390", - 1363 => x"2a057205", - 1364 => x"5755435f", - 1365 => x"5b585a57", - 1366 => x"595a747c", - 1367 => x"27863884", - 1368 => x"80801757", - 1369 => x"74902a17", - 1370 => x"7983ffff", - 1371 => x"06768480", - 1372 => x"80290557", - 1373 => x"57767a26", - 1374 => x"9a38767a", - 1375 => x"32703070", - 1376 => x"72078025", - 1377 => x"565a5b7c", - 1378 => x"7627fafe", - 1379 => x"3873802e", - 1380 => x"faf838ff", - 1381 => x"1858805b", - 1382 => x"faf239ff", - 1383 => x"76537754", - 1384 => x"9f3de805", - 1385 => x"525ef7e1", - 1386 => x"3f676957", - 1387 => x"4c754d69", - 1388 => x"8025f8f3", - 1389 => x"387d096a", - 1390 => x"6c5c537a", - 1391 => x"549f3de8", - 1392 => x"05525ef7", - 1393 => x"c43f6769", - 1394 => x"714c704d", - 1395 => x"5856f8db", - 1396 => x"39a07531", - 1397 => x"76762b7a", - 1398 => x"772b7c73", - 1399 => x"2a077c78", - 1400 => x"2b72902a", - 1401 => x"7383ffff", - 1402 => x"0671587e", - 1403 => x"762a5742", - 1404 => x"405d5d57", - 1405 => x"5881a33f", - 1406 => x"80085781", - 1407 => x"8d3f8008", - 1408 => x"80087e29", - 1409 => x"78902b7d", - 1410 => x"902a0756", - 1411 => x"56597375", - 1412 => x"27993880", - 1413 => x"08ff0576", - 1414 => x"15555975", - 1415 => x"74268c38", - 1416 => x"73752787", - 1417 => x"38ff1976", - 1418 => x"1555597b", - 1419 => x"52737531", - 1420 => x"5180e73f", - 1421 => x"80085580", - 1422 => x"d13f8008", - 1423 => x"80087e29", - 1424 => x"7c83ffff", - 1425 => x"06707890", - 1426 => x"2b075156", - 1427 => x"58587377", - 1428 => x"27993880", - 1429 => x"08ff0576", - 1430 => x"15555875", - 1431 => x"74268c38", - 1432 => x"73772787", - 1433 => x"38ff1876", - 1434 => x"15555878", - 1435 => x"902b7807", - 1436 => x"74783155", - 1437 => x"5bfada39", - 1438 => x"ff197615", - 1439 => x"5559fb86", - 1440 => x"39ff1976", - 1441 => x"155559f8", - 1442 => x"c0397070", - 1443 => x"70805375", - 1444 => x"52745181", - 1445 => x"913f5050", - 1446 => x"50047070", - 1447 => x"70815375", - 1448 => x"52745181", - 1449 => x"813f5050", - 1450 => x"5004fb3d", - 1451 => x"0d777955", - 1452 => x"55805675", - 1453 => x"7524ab38", - 1454 => x"8074249d", - 1455 => x"38805373", - 1456 => x"52745180", - 1457 => x"e13f8008", - 1458 => x"5475802e", - 1459 => x"85388008", - 1460 => x"30547380", - 1461 => x"0c873d0d", - 1462 => x"04733076", - 1463 => x"81325754", - 1464 => x"dc397430", - 1465 => x"55815673", - 1466 => x"8025d238", - 1467 => x"ec39fa3d", - 1468 => x"0d787a57", - 1469 => x"55805776", - 1470 => x"7524a438", - 1471 => x"759f2c54", - 1472 => x"81537574", - 1473 => x"32743152", - 1474 => x"74519b3f", - 1475 => x"80085476", - 1476 => x"802e8538", - 1477 => x"80083054", - 1478 => x"73800c88", - 1479 => x"3d0d0474", - 1480 => x"30558157", - 1481 => x"d739fc3d", - 1482 => x"0d767853", - 1483 => x"54815380", - 1484 => x"74732652", - 1485 => x"5572802e", - 1486 => x"98387080", - 1487 => x"2eab3880", - 1488 => x"7224a638", - 1489 => x"71107310", - 1490 => x"75722653", - 1491 => x"545272ea", - 1492 => x"38735178", - 1493 => x"83387451", - 1494 => x"70800c86", - 1495 => x"3d0d0472", - 1496 => x"0a100a72", - 1497 => x"0a100a53", - 1498 => x"5372802e", - 1499 => x"e4387174", - 1500 => x"26ed3873", - 1501 => x"72317574", - 1502 => x"07740a10", - 1503 => x"0a740a10", - 1504 => x"0a555556", - 1505 => x"54e33970", - 1506 => x"70735280", - 1507 => x"decc0851", - 1508 => x"933f5050", - 1509 => x"04707073", - 1510 => x"5280decc", - 1511 => x"085190ce", - 1512 => x"3f505004", - 1513 => x"f43d0d7e", - 1514 => x"608b1170", - 1515 => x"f8065b55", - 1516 => x"555d7296", - 1517 => x"26833890", - 1518 => x"58807824", - 1519 => x"74792607", - 1520 => x"55805474", - 1521 => x"742e0981", - 1522 => x"0680ca38", - 1523 => x"7c518d9e", - 1524 => x"3f7783f7", - 1525 => x"2680c538", - 1526 => x"77832a70", - 1527 => x"10101080", - 1528 => x"d6c4058c", - 1529 => x"11085858", - 1530 => x"5475772e", - 1531 => x"81f03884", - 1532 => x"1608fc06", - 1533 => x"8c170888", - 1534 => x"1808718c", - 1535 => x"120c8812", - 1536 => x"0c5b7605", - 1537 => x"84110881", - 1538 => x"0784120c", - 1539 => x"537c518c", - 1540 => x"de3f8816", - 1541 => x"5473800c", - 1542 => x"8e3d0d04", - 1543 => x"77892a78", - 1544 => x"832a5854", - 1545 => x"73802ebf", - 1546 => x"3877862a", - 1547 => x"b8055784", - 1548 => x"7427b438", - 1549 => x"80db1457", - 1550 => x"947427ab", - 1551 => x"38778c2a", - 1552 => x"80ee0557", - 1553 => x"80d47427", - 1554 => x"9e38778f", - 1555 => x"2a80f705", - 1556 => x"5782d474", - 1557 => x"27913877", - 1558 => x"922a80fc", - 1559 => x"05578ad4", - 1560 => x"74278438", - 1561 => x"80fe5776", - 1562 => x"10101080", - 1563 => x"d6c4058c", - 1564 => x"11085653", - 1565 => x"74732ea3", - 1566 => x"38841508", - 1567 => x"fc067079", - 1568 => x"31555673", - 1569 => x"8f2488e4", - 1570 => x"38738025", - 1571 => x"88e6388c", - 1572 => x"15085574", - 1573 => x"732e0981", - 1574 => x"06df3881", - 1575 => x"175980d6", - 1576 => x"d4085675", - 1577 => x"80d6cc2e", - 1578 => x"82cc3884", - 1579 => x"1608fc06", - 1580 => x"70793155", - 1581 => x"55738f24", - 1582 => x"bb3880d6", - 1583 => x"cc0b80d6", - 1584 => x"d80c80d6", - 1585 => x"cc0b80d6", - 1586 => x"d40c8074", - 1587 => x"2480db38", - 1588 => x"74168411", - 1589 => x"08810784", - 1590 => x"120c53fe", - 1591 => x"b0398816", - 1592 => x"8c110857", - 1593 => x"5975792e", - 1594 => x"098106fe", - 1595 => x"82388214", - 1596 => x"59ffab39", - 1597 => x"77167881", - 1598 => x"0784180c", - 1599 => x"7080d6d8", - 1600 => x"0c7080d6", - 1601 => x"d40c80d6", - 1602 => x"cc0b8c12", - 1603 => x"0c8c1108", - 1604 => x"88120c74", - 1605 => x"81078412", - 1606 => x"0c740574", - 1607 => x"710c5b7c", - 1608 => x"518acc3f", - 1609 => x"881654fd", - 1610 => x"ec3983ff", - 1611 => x"75278391", - 1612 => x"3874892a", - 1613 => x"75832a54", - 1614 => x"5473802e", - 1615 => x"bf387486", - 1616 => x"2ab80553", - 1617 => x"847427b4", - 1618 => x"3880db14", - 1619 => x"53947427", - 1620 => x"ab38748c", - 1621 => x"2a80ee05", - 1622 => x"5380d474", - 1623 => x"279e3874", - 1624 => x"8f2a80f7", - 1625 => x"055382d4", - 1626 => x"74279138", - 1627 => x"74922a80", - 1628 => x"fc05538a", - 1629 => x"d4742784", - 1630 => x"3880fe53", - 1631 => x"72101010", - 1632 => x"80d6c405", - 1633 => x"88110855", - 1634 => x"5773772e", - 1635 => x"868b3884", - 1636 => x"1408fc06", - 1637 => x"5b747b27", - 1638 => x"8d388814", - 1639 => x"08547377", - 1640 => x"2e098106", - 1641 => x"ea388c14", - 1642 => x"0880d6c4", - 1643 => x"0b840508", - 1644 => x"718c190c", - 1645 => x"7588190c", - 1646 => x"7788130c", - 1647 => x"5c57758c", - 1648 => x"150c7853", - 1649 => x"80792483", - 1650 => x"98387282", - 1651 => x"2c81712b", - 1652 => x"5656747b", - 1653 => x"2680ca38", - 1654 => x"7a750657", - 1655 => x"7682a338", - 1656 => x"78fc0684", - 1657 => x"05597410", - 1658 => x"707c0655", - 1659 => x"55738292", - 1660 => x"38841959", - 1661 => x"f13980d6", - 1662 => x"c40b8405", - 1663 => x"0879545b", - 1664 => x"788025c6", - 1665 => x"3882da39", - 1666 => x"74097b06", - 1667 => x"7080d6c4", - 1668 => x"0b84050c", - 1669 => x"5b741055", - 1670 => x"747b2685", - 1671 => x"387485bc", - 1672 => x"3880d6c4", - 1673 => x"0b880508", - 1674 => x"70841208", - 1675 => x"fc06707b", - 1676 => x"317b7226", - 1677 => x"8f722507", - 1678 => x"5d575c5c", - 1679 => x"5578802e", - 1680 => x"80d93879", - 1681 => x"1580d6bc", - 1682 => x"08199011", - 1683 => x"59545680", - 1684 => x"d6b808ff", - 1685 => x"2e8838a0", - 1686 => x"8f13e080", - 1687 => x"06577652", - 1688 => x"7c51888c", - 1689 => x"3f800854", - 1690 => x"8008ff2e", - 1691 => x"90388008", - 1692 => x"762782a7", - 1693 => x"387480d6", - 1694 => x"c42e829f", - 1695 => x"3880d6c4", - 1696 => x"0b880508", - 1697 => x"55841508", - 1698 => x"fc067079", - 1699 => x"31797226", - 1700 => x"8f722507", - 1701 => x"5d555a7a", - 1702 => x"83f23877", - 1703 => x"81078416", - 1704 => x"0c771570", - 1705 => x"80d6c40b", - 1706 => x"88050c74", - 1707 => x"81078412", - 1708 => x"0c567c51", - 1709 => x"87b93f88", - 1710 => x"15547380", - 1711 => x"0c8e3d0d", - 1712 => x"0474832a", - 1713 => x"70545480", - 1714 => x"7424819b", - 1715 => x"3872822c", - 1716 => x"81712b80", - 1717 => x"d6c80807", - 1718 => x"7080d6c4", - 1719 => x"0b84050c", - 1720 => x"75101010", - 1721 => x"80d6c405", - 1722 => x"88110871", - 1723 => x"8c1b0c70", - 1724 => x"881b0c79", - 1725 => x"88130c57", - 1726 => x"555c5575", - 1727 => x"8c150cfd", - 1728 => x"c1397879", - 1729 => x"10101080", - 1730 => x"d6c40570", - 1731 => x"565b5c8c", - 1732 => x"14085675", - 1733 => x"742ea338", - 1734 => x"841608fc", - 1735 => x"06707931", - 1736 => x"5853768f", - 1737 => x"2483f138", - 1738 => x"76802584", - 1739 => x"af388c16", - 1740 => x"08567574", - 1741 => x"2e098106", - 1742 => x"df388814", - 1743 => x"811a7083", - 1744 => x"06555a54", - 1745 => x"72c9387b", - 1746 => x"83065675", - 1747 => x"802efdb8", - 1748 => x"38ff1cf8", - 1749 => x"1b5b5c88", - 1750 => x"1a087a2e", - 1751 => x"ea38fdb5", - 1752 => x"39831953", - 1753 => x"fce43983", - 1754 => x"1470822c", - 1755 => x"81712b80", - 1756 => x"d6c80807", - 1757 => x"7080d6c4", - 1758 => x"0b84050c", - 1759 => x"76101010", - 1760 => x"80d6c405", - 1761 => x"88110871", - 1762 => x"8c1c0c70", - 1763 => x"881c0c7a", - 1764 => x"88130c58", - 1765 => x"535d5653", - 1766 => x"fee13980", - 1767 => x"d6880817", - 1768 => x"59800876", - 1769 => x"2e818b38", - 1770 => x"80d6b808", - 1771 => x"ff2e848e", - 1772 => x"38737631", - 1773 => x"1980d688", - 1774 => x"0c738706", - 1775 => x"70565372", - 1776 => x"802e8838", - 1777 => x"88733170", - 1778 => x"15555576", - 1779 => x"149fff06", - 1780 => x"a0807131", - 1781 => x"1670547e", - 1782 => x"53515385", - 1783 => x"933f8008", - 1784 => x"568008ff", - 1785 => x"2e819e38", - 1786 => x"80d68808", - 1787 => x"137080d6", - 1788 => x"880c7475", - 1789 => x"80d6c40b", - 1790 => x"88050c77", - 1791 => x"76311581", - 1792 => x"07555659", - 1793 => x"7a80d6c4", - 1794 => x"2e83c038", - 1795 => x"798f2682", - 1796 => x"ef38810b", - 1797 => x"84150c84", - 1798 => x"1508fc06", - 1799 => x"70793179", - 1800 => x"72268f72", - 1801 => x"25075d55", - 1802 => x"5a7a802e", - 1803 => x"fced3880", - 1804 => x"db398008", - 1805 => x"9fff0655", - 1806 => x"74feed38", - 1807 => x"7880d688", - 1808 => x"0c80d6c4", - 1809 => x"0b880508", - 1810 => x"7a188107", - 1811 => x"84120c55", - 1812 => x"80d6b408", - 1813 => x"79278638", - 1814 => x"7880d6b4", - 1815 => x"0c80d6b0", - 1816 => x"087927fc", - 1817 => x"a0387880", - 1818 => x"d6b00c84", - 1819 => x"1508fc06", - 1820 => x"70793179", - 1821 => x"72268f72", - 1822 => x"25075d55", - 1823 => x"5a7a802e", - 1824 => x"fc993888", - 1825 => x"39807457", - 1826 => x"53fedd39", - 1827 => x"7c5183df", - 1828 => x"3f800b80", - 1829 => x"0c8e3d0d", - 1830 => x"04807324", - 1831 => x"a5387282", - 1832 => x"2c81712b", - 1833 => x"80d6c808", - 1834 => x"077080d6", - 1835 => x"c40b8405", - 1836 => x"0c5c5a76", - 1837 => x"8c170c73", - 1838 => x"88170c75", - 1839 => x"88180cf9", - 1840 => x"fd398313", - 1841 => x"70822c81", - 1842 => x"712b80d6", - 1843 => x"c8080770", - 1844 => x"80d6c40b", - 1845 => x"84050c5d", - 1846 => x"5b53d839", - 1847 => x"7a75065c", - 1848 => x"7bfc9f38", - 1849 => x"84197510", - 1850 => x"5659f139", - 1851 => x"ff178105", - 1852 => x"59f7ab39", - 1853 => x"8c150888", - 1854 => x"1608718c", - 1855 => x"120c8812", - 1856 => x"0c597515", - 1857 => x"84110881", - 1858 => x"0784120c", - 1859 => x"587c5182", - 1860 => x"de3f8815", - 1861 => x"54fba339", - 1862 => x"77167881", - 1863 => x"0784180c", - 1864 => x"8c170888", - 1865 => x"1808718c", - 1866 => x"120c8812", - 1867 => x"0c5c7080", - 1868 => x"d6d80c70", - 1869 => x"80d6d40c", - 1870 => x"80d6cc0b", - 1871 => x"8c120c8c", - 1872 => x"11088812", - 1873 => x"0c778107", - 1874 => x"84120c77", - 1875 => x"0577710c", - 1876 => x"557c5182", - 1877 => x"9a3f8816", - 1878 => x"54f5ba39", - 1879 => x"72168411", - 1880 => x"08810784", - 1881 => x"120c588c", - 1882 => x"16088817", - 1883 => x"08718c12", - 1884 => x"0c88120c", - 1885 => x"577c5181", - 1886 => x"f63f8816", - 1887 => x"54f59639", - 1888 => x"7284150c", - 1889 => x"f41af806", - 1890 => x"70841d08", - 1891 => x"81060784", - 1892 => x"1d0c701c", - 1893 => x"5556850b", - 1894 => x"84150c85", - 1895 => x"0b88150c", - 1896 => x"8f7627fd", - 1897 => x"ab38881b", - 1898 => x"527c5184", - 1899 => x"c13f80d6", - 1900 => x"c40b8805", - 1901 => x"0880d688", - 1902 => x"085a55fd", - 1903 => x"93397880", - 1904 => x"d6880c73", - 1905 => x"80d6b80c", - 1906 => x"fbef3972", - 1907 => x"84150cfc", - 1908 => x"ff39fb3d", - 1909 => x"0d77707a", - 1910 => x"7c585553", - 1911 => x"568f7527", - 1912 => x"80e63872", - 1913 => x"76078306", - 1914 => x"517080dc", - 1915 => x"38757352", - 1916 => x"54707084", - 1917 => x"05520874", - 1918 => x"70840556", - 1919 => x"0c737170", - 1920 => x"84055308", - 1921 => x"71708405", - 1922 => x"530c7170", - 1923 => x"84055308", - 1924 => x"71708405", - 1925 => x"530c7170", - 1926 => x"84055308", - 1927 => x"71708405", - 1928 => x"530cf016", - 1929 => x"5654748f", - 1930 => x"26c73883", - 1931 => x"75279538", - 1932 => x"70708405", - 1933 => x"52087470", - 1934 => x"8405560c", - 1935 => x"fc155574", - 1936 => x"8326ed38", - 1937 => x"73715452", - 1938 => x"ff155170", - 1939 => x"ff2e9838", - 1940 => x"72708105", - 1941 => x"54337270", - 1942 => x"81055434", - 1943 => x"ff115170", - 1944 => x"ff2e0981", - 1945 => x"06ea3875", - 1946 => x"800c873d", - 1947 => x"0d040404", - 1948 => x"70707070", - 1949 => x"800b81b6", - 1950 => x"9c0c7651", - 1951 => x"87cc3f80", - 1952 => x"08538008", - 1953 => x"ff2e8938", - 1954 => x"72800c50", - 1955 => x"50505004", - 1956 => x"81b69c08", - 1957 => x"5473802e", - 1958 => x"ef387574", - 1959 => x"710c5272", - 1960 => x"800c5050", - 1961 => x"505004fb", - 1962 => x"3d0d7779", - 1963 => x"70720783", - 1964 => x"06535452", - 1965 => x"70933871", - 1966 => x"73730854", - 1967 => x"56547173", - 1968 => x"082e80c4", - 1969 => x"38737554", - 1970 => x"52713370", - 1971 => x"81ff0652", - 1972 => x"5470802e", - 1973 => x"9d387233", - 1974 => x"5570752e", - 1975 => x"09810695", - 1976 => x"38811281", - 1977 => x"14713370", - 1978 => x"81ff0654", - 1979 => x"56545270", - 1980 => x"e5387233", - 1981 => x"557381ff", - 1982 => x"067581ff", - 1983 => x"06717131", - 1984 => x"800c5552", - 1985 => x"873d0d04", - 1986 => x"7109f7fb", - 1987 => x"fdff1306", - 1988 => x"f8848281", - 1989 => x"80065271", - 1990 => x"97388414", - 1991 => x"84167108", - 1992 => x"54565471", - 1993 => x"75082ee0", - 1994 => x"38737554", - 1995 => x"52ff9a39", - 1996 => x"800b800c", - 1997 => x"873d0d04", - 1998 => x"fb3d0d77", - 1999 => x"705256fe", - 2000 => x"ad3f80d6", - 2001 => x"c40b8805", - 2002 => x"08841108", - 2003 => x"fc06707b", - 2004 => x"319fef05", - 2005 => x"e08006e0", - 2006 => x"80055255", - 2007 => x"55a08075", - 2008 => x"24943880", - 2009 => x"527551fe", - 2010 => x"873f80d6", - 2011 => x"cc081453", - 2012 => x"7280082e", - 2013 => x"8f387551", - 2014 => x"fdf53f80", - 2015 => x"5372800c", - 2016 => x"873d0d04", - 2017 => x"74305275", - 2018 => x"51fde53f", - 2019 => x"8008ff2e", - 2020 => x"a83880d6", - 2021 => x"c40b8805", - 2022 => x"08747631", - 2023 => x"81078412", - 2024 => x"0c5380d6", - 2025 => x"88087531", - 2026 => x"80d6880c", - 2027 => x"7551fdbf", - 2028 => x"3f810b80", - 2029 => x"0c873d0d", - 2030 => x"04805275", - 2031 => x"51fdb13f", - 2032 => x"80d6c40b", - 2033 => x"88050880", - 2034 => x"08713154", - 2035 => x"548f7325", - 2036 => x"ffa43880", - 2037 => x"0880d6b8", - 2038 => x"083180d6", - 2039 => x"880c7281", - 2040 => x"0784150c", - 2041 => x"7551fd87", - 2042 => x"3f8053ff", - 2043 => x"9039f73d", - 2044 => x"0d7b7d54", - 2045 => x"5a72802e", - 2046 => x"82833879", - 2047 => x"51fcef3f", - 2048 => x"f8138411", - 2049 => x"0870fe06", - 2050 => x"70138411", - 2051 => x"08fc065c", - 2052 => x"57585457", - 2053 => x"80d6cc08", - 2054 => x"742e82de", - 2055 => x"38778415", - 2056 => x"0c807381", - 2057 => x"06565974", - 2058 => x"792e81d5", - 2059 => x"38771484", - 2060 => x"11088106", - 2061 => x"565374a0", - 2062 => x"38771656", - 2063 => x"7881e638", - 2064 => x"88140855", - 2065 => x"7480d6cc", - 2066 => x"2e82f938", - 2067 => x"8c140870", - 2068 => x"8c170c75", - 2069 => x"88120c58", - 2070 => x"75810784", - 2071 => x"180c7517", - 2072 => x"76710c54", - 2073 => x"78819138", - 2074 => x"83ff7627", - 2075 => x"81c83875", - 2076 => x"892a7683", - 2077 => x"2a545473", - 2078 => x"802ebf38", - 2079 => x"75862ab8", - 2080 => x"05538474", - 2081 => x"27b43880", - 2082 => x"db145394", - 2083 => x"7427ab38", - 2084 => x"758c2a80", - 2085 => x"ee055380", - 2086 => x"d474279e", - 2087 => x"38758f2a", - 2088 => x"80f70553", - 2089 => x"82d47427", - 2090 => x"91387592", - 2091 => x"2a80fc05", - 2092 => x"538ad474", - 2093 => x"27843880", - 2094 => x"fe537210", - 2095 => x"101080d6", - 2096 => x"c4058811", - 2097 => x"08555573", - 2098 => x"752e82bf", - 2099 => x"38841408", - 2100 => x"fc065975", - 2101 => x"79278d38", - 2102 => x"88140854", - 2103 => x"73752e09", - 2104 => x"8106ea38", - 2105 => x"8c140870", - 2106 => x"8c190c74", - 2107 => x"88190c77", - 2108 => x"88120c55", - 2109 => x"768c150c", - 2110 => x"7951faf3", - 2111 => x"3f8b3d0d", - 2112 => x"04760877", - 2113 => x"71315876", - 2114 => x"05881808", - 2115 => x"56567480", - 2116 => x"d6cc2e80", - 2117 => x"e0388c17", - 2118 => x"08708c17", - 2119 => x"0c758812", - 2120 => x"0c53fe89", - 2121 => x"39881408", - 2122 => x"8c150870", - 2123 => x"8c130c59", - 2124 => x"88190cfe", - 2125 => x"a3397583", - 2126 => x"2a705454", - 2127 => x"80742481", - 2128 => x"98387282", - 2129 => x"2c81712b", - 2130 => x"80d6c808", - 2131 => x"0780d6c4", - 2132 => x"0b84050c", - 2133 => x"74101010", - 2134 => x"80d6c405", - 2135 => x"88110871", - 2136 => x"8c1b0c70", - 2137 => x"881b0c79", - 2138 => x"88130c56", - 2139 => x"5a55768c", - 2140 => x"150cff84", - 2141 => x"398159fd", - 2142 => x"b4397716", - 2143 => x"73810654", - 2144 => x"55729838", - 2145 => x"76087771", - 2146 => x"31587505", - 2147 => x"8c180888", - 2148 => x"1908718c", - 2149 => x"120c8812", - 2150 => x"0c555574", - 2151 => x"81078418", - 2152 => x"0c7680d6", - 2153 => x"c40b8805", - 2154 => x"0c80d6c0", - 2155 => x"087526fe", - 2156 => x"c73880d6", - 2157 => x"bc085279", - 2158 => x"51fafd3f", - 2159 => x"7951f9af", - 2160 => x"3ffeba39", - 2161 => x"81778c17", - 2162 => x"0c778817", - 2163 => x"0c758c19", - 2164 => x"0c758819", - 2165 => x"0c59fd80", - 2166 => x"39831470", - 2167 => x"822c8171", - 2168 => x"2b80d6c8", - 2169 => x"080780d6", - 2170 => x"c40b8405", - 2171 => x"0c751010", - 2172 => x"1080d6c4", - 2173 => x"05881108", - 2174 => x"718c1c0c", - 2175 => x"70881c0c", - 2176 => x"7a88130c", - 2177 => x"575b5653", - 2178 => x"fee43980", - 2179 => x"7324a338", - 2180 => x"72822c81", - 2181 => x"712b80d6", - 2182 => x"c8080780", - 2183 => x"d6c40b84", - 2184 => x"050c5874", - 2185 => x"8c180c73", - 2186 => x"88180c76", - 2187 => x"88160cfd", - 2188 => x"c3398313", - 2189 => x"70822c81", - 2190 => x"712b80d6", - 2191 => x"c8080780", - 2192 => x"d6c40b84", - 2193 => x"050c5953", - 2194 => x"da397070", - 2195 => x"7080e5f4", - 2196 => x"08893881", - 2197 => x"b6a00b80", - 2198 => x"e5f40c80", - 2199 => x"e5f40875", - 2200 => x"115252ff", - 2201 => x"537087fb", - 2202 => x"80802688", - 2203 => x"387080e5", - 2204 => x"f40c7153", - 2205 => x"72800c50", - 2206 => x"505004fd", - 2207 => x"3d0d800b", - 2208 => x"80d5f408", - 2209 => x"54547281", - 2210 => x"2e9b3873", - 2211 => x"80e5f80c", - 2212 => x"c3ee3fc2", - 2213 => x"eb3f80e5", - 2214 => x"cc528151", - 2215 => x"cc933f80", - 2216 => x"085180dd", - 2217 => x"3f7280e5", - 2218 => x"f80cc3d4", - 2219 => x"3fc2d13f", - 2220 => x"80e5cc52", - 2221 => x"8151cbf9", - 2222 => x"3f800851", - 2223 => x"80c33f00", - 2224 => x"ff3900ff", - 2225 => x"39f43d0d", - 2226 => x"7e80e5ec", - 2227 => x"08700870", - 2228 => x"81ff0692", - 2229 => x"3df80555", - 2230 => x"515a5759", - 2231 => x"c48f3f80", - 2232 => x"5477557b", - 2233 => x"7d585276", - 2234 => x"538e3df0", - 2235 => x"0551de8e", - 2236 => x"3f797b58", - 2237 => x"790c7684", - 2238 => x"1a0c7880", - 2239 => x"0c8e3d0d", - 2240 => x"04f73d0d", - 2241 => x"7b80decc", - 2242 => x"0882c811", - 2243 => x"085a545a", - 2244 => x"77802e80", - 2245 => x"da388188", - 2246 => x"18841908", - 2247 => x"ff058171", - 2248 => x"2b595559", - 2249 => x"80742480", - 2250 => x"ea388074", - 2251 => x"24b53873", - 2252 => x"822b7811", - 2253 => x"88055656", - 2254 => x"81801908", - 2255 => x"77065372", - 2256 => x"802eb638", - 2257 => x"78167008", - 2258 => x"53537951", - 2259 => x"74085372", - 2260 => x"2dff14fc", - 2261 => x"17fc1779", - 2262 => x"812c5a57", - 2263 => x"57547380", - 2264 => x"25d63877", - 2265 => x"085877ff", - 2266 => x"ad3880de", - 2267 => x"cc0853bc", - 2268 => x"1308a538", - 2269 => x"7951fec7", - 2270 => x"3f740853", - 2271 => x"722dff14", - 2272 => x"fc17fc17", - 2273 => x"79812c5a", - 2274 => x"57575473", - 2275 => x"8025ffa8", - 2276 => x"38d13980", - 2277 => x"57ff9339", - 2278 => x"7251bc13", - 2279 => x"0854732d", - 2280 => x"7951fe9b", - 2281 => x"3f707080", - 2282 => x"e5d40bfc", - 2283 => x"05700852", - 2284 => x"5270ff2e", - 2285 => x"9138702d", - 2286 => x"fc127008", - 2287 => x"525270ff", - 2288 => x"2e098106", - 2289 => x"f1385050", - 2290 => x"0404c2ff", - 2291 => x"3f040000", - 2292 => x"00000040", - 2293 => x"30313233", - 2294 => x"34353637", - 2295 => x"38390000", - 2296 => x"44485259", - 2297 => x"53544f4e", - 2298 => x"45205052", - 2299 => x"4f475241", - 2300 => x"4d2c2053", - 2301 => x"4f4d4520", - 2302 => x"53545249", - 2303 => x"4e470000", - 2304 => x"44485259", - 2305 => x"53544f4e", - 2306 => x"45205052", - 2307 => x"4f475241", - 2308 => x"4d2c2031", - 2309 => x"27535420", - 2310 => x"53545249", - 2311 => x"4e470000", - 2312 => x"44687279", - 2313 => x"73746f6e", - 2314 => x"65204265", - 2315 => x"6e63686d", - 2316 => x"61726b2c", - 2317 => x"20566572", - 2318 => x"73696f6e", - 2319 => x"20322e31", - 2320 => x"20284c61", - 2321 => x"6e677561", - 2322 => x"67653a20", - 2323 => x"43290a00", - 2324 => x"50726f67", - 2325 => x"72616d20", - 2326 => x"636f6d70", - 2327 => x"696c6564", - 2328 => x"20776974", - 2329 => x"68202772", - 2330 => x"65676973", - 2331 => x"74657227", - 2332 => x"20617474", - 2333 => x"72696275", - 2334 => x"74650a00", - 2335 => x"45786563", - 2336 => x"7574696f", - 2337 => x"6e207374", - 2338 => x"61727473", - 2339 => x"2c202564", - 2340 => x"2072756e", - 2341 => x"73207468", - 2342 => x"726f7567", - 2343 => x"68204468", - 2344 => x"72797374", - 2345 => x"6f6e650a", - 2346 => x"00000000", - 2347 => x"44485259", - 2348 => x"53544f4e", - 2349 => x"45205052", - 2350 => x"4f475241", - 2351 => x"4d2c2032", - 2352 => x"274e4420", - 2353 => x"53545249", - 2354 => x"4e470000", - 2355 => x"45786563", - 2356 => x"7574696f", - 2357 => x"6e20656e", - 2358 => x"64730a00", - 2359 => x"46696e61", - 2360 => x"6c207661", - 2361 => x"6c756573", - 2362 => x"206f6620", - 2363 => x"74686520", - 2364 => x"76617269", - 2365 => x"61626c65", - 2366 => x"73207573", - 2367 => x"65642069", - 2368 => x"6e207468", - 2369 => x"65206265", - 2370 => x"6e63686d", - 2371 => x"61726b3a", - 2372 => x"0a000000", - 2373 => x"496e745f", - 2374 => x"476c6f62", - 2375 => x"3a202020", - 2376 => x"20202020", - 2377 => x"20202020", - 2378 => x"2025640a", - 2379 => x"00000000", - 2380 => x"20202020", - 2381 => x"20202020", - 2382 => x"73686f75", - 2383 => x"6c642062", - 2384 => x"653a2020", - 2385 => x"2025640a", - 2386 => x"00000000", - 2387 => x"426f6f6c", - 2388 => x"5f476c6f", - 2389 => x"623a2020", - 2390 => x"20202020", - 2391 => x"20202020", - 2392 => x"2025640a", - 2393 => x"00000000", - 2394 => x"43685f31", - 2395 => x"5f476c6f", - 2396 => x"623a2020", - 2397 => x"20202020", - 2398 => x"20202020", - 2399 => x"2025630a", - 2400 => x"00000000", - 2401 => x"20202020", - 2402 => x"20202020", - 2403 => x"73686f75", - 2404 => x"6c642062", - 2405 => x"653a2020", - 2406 => x"2025630a", - 2407 => x"00000000", - 2408 => x"43685f32", - 2409 => x"5f476c6f", - 2410 => x"623a2020", - 2411 => x"20202020", - 2412 => x"20202020", - 2413 => x"2025630a", - 2414 => x"00000000", - 2415 => x"4172725f", - 2416 => x"315f476c", - 2417 => x"6f625b38", - 2418 => x"5d3a2020", - 2419 => x"20202020", - 2420 => x"2025640a", - 2421 => x"00000000", - 2422 => x"4172725f", - 2423 => x"325f476c", - 2424 => x"6f625b38", - 2425 => x"5d5b375d", - 2426 => x"3a202020", - 2427 => x"2025640a", - 2428 => x"00000000", - 2429 => x"20202020", - 2430 => x"20202020", - 2431 => x"73686f75", - 2432 => x"6c642062", - 2433 => x"653a2020", - 2434 => x"204e756d", - 2435 => x"6265725f", - 2436 => x"4f665f52", - 2437 => x"756e7320", - 2438 => x"2b203130", - 2439 => x"0a000000", - 2440 => x"5074725f", - 2441 => x"476c6f62", - 2442 => x"2d3e0a00", - 2443 => x"20205074", - 2444 => x"725f436f", - 2445 => x"6d703a20", - 2446 => x"20202020", - 2447 => x"20202020", - 2448 => x"2025640a", - 2449 => x"00000000", - 2450 => x"20202020", - 2451 => x"20202020", - 2452 => x"73686f75", - 2453 => x"6c642062", - 2454 => x"653a2020", - 2455 => x"2028696d", - 2456 => x"706c656d", - 2457 => x"656e7461", - 2458 => x"74696f6e", - 2459 => x"2d646570", - 2460 => x"656e6465", - 2461 => x"6e74290a", - 2462 => x"00000000", - 2463 => x"20204469", - 2464 => x"7363723a", - 2465 => x"20202020", - 2466 => x"20202020", - 2467 => x"20202020", - 2468 => x"2025640a", - 2469 => x"00000000", - 2470 => x"2020456e", - 2471 => x"756d5f43", - 2472 => x"6f6d703a", - 2473 => x"20202020", - 2474 => x"20202020", - 2475 => x"2025640a", - 2476 => x"00000000", - 2477 => x"2020496e", - 2478 => x"745f436f", - 2479 => x"6d703a20", - 2480 => x"20202020", - 2481 => x"20202020", - 2482 => x"2025640a", - 2483 => x"00000000", - 2484 => x"20205374", - 2485 => x"725f436f", - 2486 => x"6d703a20", - 2487 => x"20202020", - 2488 => x"20202020", - 2489 => x"2025730a", - 2490 => x"00000000", - 2491 => x"20202020", - 2492 => x"20202020", - 2493 => x"73686f75", - 2494 => x"6c642062", - 2495 => x"653a2020", - 2496 => x"20444852", - 2497 => x"5953544f", - 2498 => x"4e452050", - 2499 => x"524f4752", - 2500 => x"414d2c20", - 2501 => x"534f4d45", - 2502 => x"20535452", - 2503 => x"494e470a", - 2504 => x"00000000", - 2505 => x"4e657874", - 2506 => x"5f507472", - 2507 => x"5f476c6f", - 2508 => x"622d3e0a", - 2509 => x"00000000", - 2510 => x"20202020", - 2511 => x"20202020", - 2512 => x"73686f75", - 2513 => x"6c642062", - 2514 => x"653a2020", - 2515 => x"2028696d", - 2516 => x"706c656d", - 2517 => x"656e7461", - 2518 => x"74696f6e", - 2519 => x"2d646570", - 2520 => x"656e6465", - 2521 => x"6e74292c", - 2522 => x"2073616d", - 2523 => x"65206173", - 2524 => x"2061626f", - 2525 => x"76650a00", - 2526 => x"496e745f", - 2527 => x"315f4c6f", - 2528 => x"633a2020", - 2529 => x"20202020", - 2530 => x"20202020", - 2531 => x"2025640a", - 2532 => x"00000000", - 2533 => x"496e745f", - 2534 => x"325f4c6f", - 2535 => x"633a2020", - 2536 => x"20202020", - 2537 => x"20202020", - 2538 => x"2025640a", - 2539 => x"00000000", - 2540 => x"496e745f", - 2541 => x"335f4c6f", - 2542 => x"633a2020", - 2543 => x"20202020", - 2544 => x"20202020", - 2545 => x"2025640a", - 2546 => x"00000000", - 2547 => x"456e756d", - 2548 => x"5f4c6f63", - 2549 => x"3a202020", - 2550 => x"20202020", - 2551 => x"20202020", - 2552 => x"2025640a", - 2553 => x"00000000", - 2554 => x"5374725f", - 2555 => x"315f4c6f", - 2556 => x"633a2020", - 2557 => x"20202020", - 2558 => x"20202020", - 2559 => x"2025730a", - 2560 => x"00000000", - 2561 => x"20202020", - 2562 => x"20202020", - 2563 => x"73686f75", - 2564 => x"6c642062", - 2565 => x"653a2020", - 2566 => x"20444852", - 2567 => x"5953544f", - 2568 => x"4e452050", - 2569 => x"524f4752", - 2570 => x"414d2c20", - 2571 => x"31275354", - 2572 => x"20535452", - 2573 => x"494e470a", - 2574 => x"00000000", - 2575 => x"5374725f", - 2576 => x"325f4c6f", - 2577 => x"633a2020", - 2578 => x"20202020", - 2579 => x"20202020", - 2580 => x"2025730a", - 2581 => x"00000000", - 2582 => x"20202020", - 2583 => x"20202020", - 2584 => x"73686f75", - 2585 => x"6c642062", - 2586 => x"653a2020", - 2587 => x"20444852", - 2588 => x"5953544f", - 2589 => x"4e452050", - 2590 => x"524f4752", - 2591 => x"414d2c20", - 2592 => x"32274e44", - 2593 => x"20535452", - 2594 => x"494e470a", - 2595 => x"00000000", - 2596 => x"55736572", - 2597 => x"2074696d", - 2598 => x"653a2025", - 2599 => x"640a0000", - 2600 => x"4d696372", - 2601 => x"6f736563", - 2602 => x"6f6e6473", - 2603 => x"20666f72", - 2604 => x"206f6e65", - 2605 => x"2072756e", - 2606 => x"20746872", - 2607 => x"6f756768", - 2608 => x"20446872", - 2609 => x"7973746f", - 2610 => x"6e653a20", - 2611 => x"00000000", - 2612 => x"2564200a", - 2613 => x"00000000", - 2614 => x"44687279", - 2615 => x"73746f6e", - 2616 => x"65732070", - 2617 => x"65722053", - 2618 => x"65636f6e", - 2619 => x"643a2020", - 2620 => x"20202020", - 2621 => x"20202020", - 2622 => x"20202020", - 2623 => x"20202020", - 2624 => x"20202020", - 2625 => x"00000000", - 2626 => x"56415820", - 2627 => x"4d495053", - 2628 => x"20726174", - 2629 => x"696e6720", - 2630 => x"2a203130", - 2631 => x"3030203d", - 2632 => x"20256420", - 2633 => x"0a000000", - 2634 => x"50726f67", - 2635 => x"72616d20", - 2636 => x"636f6d70", - 2637 => x"696c6564", - 2638 => x"20776974", - 2639 => x"686f7574", - 2640 => x"20277265", - 2641 => x"67697374", - 2642 => x"65722720", - 2643 => x"61747472", - 2644 => x"69627574", - 2645 => x"650a0000", - 2646 => x"4d656173", - 2647 => x"75726564", - 2648 => x"2074696d", - 2649 => x"6520746f", - 2650 => x"6f20736d", - 2651 => x"616c6c20", - 2652 => x"746f206f", - 2653 => x"62746169", - 2654 => x"6e206d65", - 2655 => x"616e696e", - 2656 => x"6766756c", - 2657 => x"20726573", - 2658 => x"756c7473", - 2659 => x"0a000000", - 2660 => x"506c6561", - 2661 => x"73652069", - 2662 => x"6e637265", - 2663 => x"61736520", - 2664 => x"6e756d62", - 2665 => x"6572206f", - 2666 => x"66207275", - 2667 => x"6e730a00", - 2668 => x"44485259", - 2669 => x"53544f4e", - 2670 => x"45205052", - 2671 => x"4f475241", - 2672 => x"4d2c2033", - 2673 => x"27524420", - 2674 => x"53545249", - 2675 => x"4e470000", - 2676 => x"00010202", - 2677 => x"03030303", - 2678 => x"04040404", - 2679 => x"04040404", - 2680 => x"05050505", - 2681 => x"05050505", - 2682 => x"05050505", - 2683 => x"05050505", - 2684 => x"06060606", - 2685 => x"06060606", - 2686 => x"06060606", - 2687 => x"06060606", - 2688 => x"06060606", - 2689 => x"06060606", - 2690 => x"06060606", - 2691 => x"06060606", - 2692 => x"07070707", - 2693 => x"07070707", - 2694 => x"07070707", - 2695 => x"07070707", - 2696 => x"07070707", - 2697 => x"07070707", - 2698 => x"07070707", - 2699 => x"07070707", - 2700 => x"07070707", - 2701 => x"07070707", - 2702 => x"07070707", - 2703 => x"07070707", - 2704 => x"07070707", - 2705 => x"07070707", - 2706 => x"07070707", - 2707 => x"07070707", - 2708 => x"08080808", - 2709 => x"08080808", - 2710 => x"08080808", - 2711 => x"08080808", - 2712 => x"08080808", - 2713 => x"08080808", - 2714 => x"08080808", - 2715 => x"08080808", - 2716 => x"08080808", - 2717 => x"08080808", - 2718 => x"08080808", - 2719 => x"08080808", - 2720 => x"08080808", - 2721 => x"08080808", - 2722 => x"08080808", - 2723 => x"08080808", - 2724 => x"08080808", - 2725 => x"08080808", - 2726 => x"08080808", - 2727 => x"08080808", - 2728 => x"08080808", - 2729 => x"08080808", - 2730 => x"08080808", - 2731 => x"08080808", - 2732 => x"08080808", - 2733 => x"08080808", - 2734 => x"08080808", - 2735 => x"08080808", - 2736 => x"08080808", - 2737 => x"08080808", - 2738 => x"08080808", - 2739 => x"08080808", - 2740 => x"43000000", - 2741 => x"64756d6d", - 2742 => x"792e6578", - 2743 => x"65000000", - 2744 => x"00ffffff", - 2745 => x"ff00ffff", - 2746 => x"ffff00ff", - 2747 => x"ffffff00", - 2748 => x"00000000", - 2749 => x"00000000", - 2750 => x"00000000", - 2751 => x"000032dc", - 2752 => x"0000c350", - 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"ffffffff", - 2767 => x"00000000", - 2768 => x"00020000", - 2769 => x"00000000", - 2770 => x"00000000", - 2771 => x"00002b44", - 2772 => x"00002b44", - 2773 => x"00002b4c", - 2774 => x"00002b4c", - 2775 => x"00002b54", - 2776 => x"00002b54", - 2777 => x"00002b5c", - 2778 => x"00002b5c", - 2779 => x"00002b64", - 2780 => x"00002b64", - 2781 => x"00002b6c", - 2782 => x"00002b6c", - 2783 => x"00002b74", - 2784 => x"00002b74", - 2785 => x"00002b7c", - 2786 => x"00002b7c", - 2787 => x"00002b84", - 2788 => x"00002b84", - 2789 => x"00002b8c", - 2790 => x"00002b8c", - 2791 => x"00002b94", - 2792 => x"00002b94", - 2793 => x"00002b9c", - 2794 => x"00002b9c", - 2795 => x"00002ba4", - 2796 => x"00002ba4", - 2797 => x"00002bac", - 2798 => x"00002bac", - 2799 => x"00002bb4", - 2800 => x"00002bb4", - 2801 => x"00002bbc", - 2802 => x"00002bbc", - 2803 => x"00002bc4", - 2804 => x"00002bc4", - 2805 => x"00002bcc", - 2806 => x"00002bcc", - 2807 => x"00002bd4", - 2808 => x"00002bd4", - 2809 => x"00002bdc", - 2810 => x"00002bdc", - 2811 => x"00002be4", - 2812 => x"00002be4", - 2813 => x"00002bec", - 2814 => x"00002bec", - 2815 => x"00002bf4", - 2816 => x"00002bf4", - 2817 => x"00002bfc", - 2818 => x"00002bfc", - 2819 => x"00002c04", - 2820 => x"00002c04", - 2821 => x"00002c0c", - 2822 => x"00002c0c", - 2823 => x"00002c14", - 2824 => x"00002c14", - 2825 => x"00002c1c", - 2826 => x"00002c1c", - 2827 => x"00002c24", - 2828 => x"00002c24", - 2829 => x"00002c2c", - 2830 => x"00002c2c", - 2831 => x"00002c34", - 2832 => x"00002c34", - 2833 => x"00002c3c", - 2834 => x"00002c3c", - 2835 => x"00002c44", - 2836 => x"00002c44", - 2837 => x"00002c4c", - 2838 => x"00002c4c", - 2839 => x"00002c54", - 2840 => x"00002c54", - 2841 => x"00002c5c", - 2842 => x"00002c5c", - 2843 => x"00002c64", - 2844 => x"00002c64", - 2845 => x"00002c6c", - 2846 => x"00002c6c", - 2847 => x"00002c74", - 2848 => x"00002c74", - 2849 => x"00002c7c", - 2850 => x"00002c7c", - 2851 => x"00002c84", - 2852 => x"00002c84", - 2853 => x"00002c8c", - 2854 => x"00002c8c", - 2855 => x"00002c94", - 2856 => x"00002c94", - 2857 => x"00002c9c", - 2858 => x"00002c9c", - 2859 => x"00002ca4", - 2860 => x"00002ca4", - 2861 => x"00002cac", - 2862 => x"00002cac", - 2863 => x"00002cb4", - 2864 => x"00002cb4", - 2865 => x"00002cbc", - 2866 => x"00002cbc", - 2867 => x"00002cc4", - 2868 => x"00002cc4", - 2869 => x"00002ccc", - 2870 => x"00002ccc", - 2871 => x"00002cd4", - 2872 => x"00002cd4", - 2873 => x"00002cdc", - 2874 => x"00002cdc", - 2875 => x"00002ce4", - 2876 => x"00002ce4", - 2877 => x"00002cec", - 2878 => x"00002cec", - 2879 => x"00002cf4", - 2880 => x"00002cf4", - 2881 => x"00002cfc", - 2882 => x"00002cfc", - 2883 => x"00002d04", - 2884 => x"00002d04", - 2885 => x"00002d0c", - 2886 => x"00002d0c", - 2887 => x"00002d14", - 2888 => x"00002d14", - 2889 => x"00002d1c", - 2890 => x"00002d1c", - 2891 => x"00002d24", - 2892 => x"00002d24", - 2893 => x"00002d2c", - 2894 => x"00002d2c", - 2895 => x"00002d34", - 2896 => x"00002d34", - 2897 => x"00002d3c", - 2898 => x"00002d3c", - 2899 => x"00002d44", - 2900 => x"00002d44", - 2901 => x"00002d4c", - 2902 => x"00002d4c", - 2903 => x"00002d54", - 2904 => x"00002d54", - 2905 => x"00002d5c", - 2906 => x"00002d5c", - 2907 => x"00002d64", - 2908 => x"00002d64", - 2909 => x"00002d6c", - 2910 => x"00002d6c", - 2911 => x"00002d74", - 2912 => x"00002d74", - 2913 => x"00002d7c", - 2914 => x"00002d7c", - 2915 => x"00002d84", - 2916 => x"00002d84", - 2917 => x"00002d8c", - 2918 => x"00002d8c", - 2919 => x"00002d94", - 2920 => x"00002d94", - 2921 => x"00002d9c", - 2922 => x"00002d9c", - 2923 => x"00002da4", - 2924 => x"00002da4", - 2925 => x"00002dac", - 2926 => x"00002dac", - 2927 => x"00002db4", - 2928 => x"00002db4", - 2929 => x"00002dbc", - 2930 => x"00002dbc", - 2931 => x"00002dc4", - 2932 => x"00002dc4", - 2933 => x"00002dcc", - 2934 => x"00002dcc", - 2935 => x"00002dd4", - 2936 => x"00002dd4", - 2937 => x"00002ddc", - 2938 => x"00002ddc", - 2939 => x"00002de4", - 2940 => x"00002de4", - 2941 => x"00002dec", - 2942 => x"00002dec", - 2943 => x"00002df4", - 2944 => x"00002df4", - 2945 => x"00002dfc", - 2946 => x"00002dfc", - 2947 => x"00002e04", - 2948 => x"00002e04", - 2949 => x"00002e0c", - 2950 => x"00002e0c", - 2951 => x"00002e14", - 2952 => x"00002e14", - 2953 => x"00002e1c", - 2954 => x"00002e1c", - 2955 => x"00002e24", - 2956 => x"00002e24", - 2957 => x"00002e2c", - 2958 => x"00002e2c", - 2959 => x"00002e34", - 2960 => x"00002e34", - 2961 => x"00002e3c", - 2962 => x"00002e3c", - 2963 => x"00002e44", - 2964 => x"00002e44", - 2965 => x"00002e4c", - 2966 => x"00002e4c", - 2967 => x"00002e54", - 2968 => x"00002e54", - 2969 => x"00002e5c", - 2970 => x"00002e5c", - 2971 => x"00002e64", - 2972 => x"00002e64", - 2973 => x"00002e6c", - 2974 => x"00002e6c", - 2975 => x"00002e74", - 2976 => x"00002e74", - 2977 => x"00002e7c", - 2978 => x"00002e7c", - 2979 => x"00002e84", - 2980 => x"00002e84", - 2981 => x"00002e8c", - 2982 => x"00002e8c", - 2983 => x"00002e94", - 2984 => x"00002e94", - 2985 => x"00002e9c", - 2986 => x"00002e9c", - 2987 => x"00002ea4", - 2988 => x"00002ea4", - 2989 => x"00002eac", - 2990 => x"00002eac", - 2991 => x"00002eb4", - 2992 => x"00002eb4", - 2993 => x"00002ebc", - 2994 => x"00002ebc", - 2995 => x"00002ec4", - 2996 => x"00002ec4", - 2997 => x"00002ecc", - 2998 => x"00002ecc", - 2999 => x"00002ed4", - 3000 => x"00002ed4", - 3001 => x"00002edc", - 3002 => x"00002edc", - 3003 => x"00002ee4", - 3004 => x"00002ee4", - 3005 => x"00002eec", - 3006 => x"00002eec", - 3007 => x"00002ef4", - 3008 => x"00002ef4", - 3009 => x"00002efc", - 3010 => x"00002efc", - 3011 => x"00002f04", - 3012 => x"00002f04", - 3013 => x"00002f0c", - 3014 => x"00002f0c", - 3015 => x"00002f14", - 3016 => x"00002f14", - 3017 => x"00002f1c", - 3018 => x"00002f1c", - 3019 => x"00002f24", - 3020 => x"00002f24", - 3021 => x"00002f2c", - 3022 => x"00002f2c", - 3023 => x"00002f34", - 3024 => x"00002f34", - 3025 => x"00002f3c", - 3026 => x"00002f3c", - 3027 => x"00002f50", - 3028 => x"00000000", - 3029 => x"000031b8", - 3030 => x"00003214", - 3031 => x"00003270", - 3032 => x"00000000", - 3033 => x"00000000", - 3034 => x"00000000", - 3035 => x"00000000", - 3036 => x"00000000", - 3037 => x"00000000", - 3038 => x"00000000", - 3039 => x"00000000", - 3040 => x"00000000", - 3041 => x"00002ad0", - 3042 => x"00000000", - 3043 => x"00000000", - 3044 => x"00000000", - 3045 => x"00000000", - 3046 => x"00000000", - 3047 => x"00000000", - 3048 => x"00000000", - 3049 => x"00000000", - 3050 => x"00000000", - 3051 => x"00000000", - 3052 => x"00000000", - 3053 => x"00000000", - 3054 => x"00000000", - 3055 => x"00000000", - 3056 => x"00000000", - 3057 => x"00000000", - 3058 => x"00000000", - 3059 => x"00000000", - 3060 => x"00000000", - 3061 => x"00000000", - 3062 => x"00000000", - 3063 => x"00000000", - 3064 => x"00000000", - 3065 => x"00000000", - 3066 => x"00000000", - 3067 => x"00000000", - 3068 => x"00000000", - 3069 => x"00000000", - 3070 => x"00000001", - 3071 => x"330eabcd", - 3072 => x"1234e66d", - 3073 => x"deec0005", - 3074 => x"000b0000", - 3075 => x"00000000", - 3076 => x"00000000", - 3077 => x"00000000", - 3078 => x"00000000", - 3079 => x"00000000", - 3080 => x"00000000", - 3081 => x"00000000", - 3082 => x"00000000", - 3083 => x"00000000", - 3084 => x"00000000", - 3085 => x"00000000", - 3086 => x"00000000", - 3087 => x"00000000", - 3088 => x"00000000", - 3089 => x"00000000", - 3090 => x"00000000", - 3091 => x"00000000", - 3092 => x"00000000", - 3093 => x"00000000", - 3094 => x"00000000", - 3095 => x"00000000", - 3096 => x"00000000", - 3097 => x"00000000", - 3098 => x"00000000", - 3099 => x"00000000", - 3100 => x"00000000", - 3101 => x"00000000", - 3102 => x"00000000", - 3103 => x"00000000", - 3104 => x"00000000", - 3105 => x"00000000", - 3106 => x"00000000", - 3107 => x"00000000", - 3108 => x"00000000", - 3109 => x"00000000", - 3110 => x"00000000", - 3111 => x"00000000", - 3112 => x"00000000", - 3113 => x"00000000", - 3114 => x"00000000", - 3115 => x"00000000", - 3116 => x"00000000", - 3117 => x"00000000", - 3118 => x"00000000", - 3119 => x"00000000", - 3120 => x"00000000", - 3121 => x"00000000", - 3122 => x"00000000", - 3123 => x"00000000", - 3124 => x"00000000", - 3125 => x"00000000", - 3126 => x"00000000", - 3127 => x"00000000", - 3128 => x"00000000", - 3129 => x"00000000", - 3130 => x"00000000", - 3131 => x"00000000", - 3132 => x"00000000", - 3133 => x"00000000", - 3134 => x"00000000", - 3135 => x"00000000", - 3136 => x"00000000", - 3137 => x"00000000", - 3138 => x"00000000", - 3139 => x"00000000", - 3140 => x"00000000", - 3141 => x"00000000", - 3142 => x"00000000", - 3143 => x"00000000", - 3144 => x"00000000", - 3145 => x"00000000", - 3146 => x"00000000", - 3147 => x"00000000", - 3148 => x"00000000", - 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"00000000", - 3163 => x"00000000", - 3164 => x"00000000", - 3165 => x"00000000", - 3166 => x"00000000", - 3167 => x"00000000", - 3168 => x"00000000", - 3169 => x"00000000", - 3170 => x"00000000", - 3171 => x"00000000", - 3172 => x"00000000", - 3173 => x"00000000", - 3174 => x"00000000", - 3175 => x"00000000", - 3176 => x"00000000", - 3177 => x"00000000", - 3178 => x"00000000", - 3179 => x"00000000", - 3180 => x"00000000", - 3181 => x"00000000", - 3182 => x"00000000", - 3183 => x"00000000", - 3184 => x"00000000", - 3185 => x"00000000", - 3186 => x"00000000", - 3187 => x"00000000", - 3188 => x"00000000", - 3189 => x"00000000", - 3190 => x"00000000", - 3191 => x"00000000", - 3192 => x"00000000", - 3193 => x"00000000", - 3194 => x"00000000", - 3195 => x"00000000", - 3196 => x"00000000", - 3197 => x"00000000", - 3198 => x"00000000", - 3199 => x"00000000", - 3200 => x"00000000", - 3201 => x"00000000", - 3202 => x"00000000", - 3203 => x"00000000", - 3204 => x"00000000", - 3205 => x"00000000", - 3206 => x"00000000", - 3207 => x"00000000", - 3208 => x"00000000", - 3209 => x"00000000", - 3210 => x"00000000", - 3211 => x"00000000", - 3212 => x"00000000", - 3213 => x"00000000", - 3214 => x"00000000", - 3215 => x"00000000", - 3216 => x"00000000", - 3217 => x"00000000", - 3218 => x"00000000", - 3219 => x"00000000", - 3220 => x"00000000", - 3221 => x"00000000", - 3222 => x"00000000", - 3223 => x"00000000", - 3224 => x"00000000", - 3225 => x"00000000", - 3226 => x"00000000", - 3227 => x"00000000", - 3228 => x"00000000", - 3229 => x"00000000", - 3230 => x"00000000", - 3231 => x"00000000", - 3232 => x"00000000", - 3233 => x"00000000", - 3234 => x"00000000", - 3235 => x"00000000", - 3236 => x"00000000", - 3237 => x"00000000", - 3238 => x"00000000", - 3239 => x"00000000", - 3240 => x"00000000", - 3241 => x"00000000", - 3242 => x"00000000", - 3243 => x"00000000", - 3244 => x"00000000", - 3245 => x"00000000", - 3246 => x"00000000", - 3247 => x"00000000", - 3248 => x"00000000", - 3249 => x"00000000", - 3250 => x"00000000", - 3251 => x"00002ad4", - 3252 => x"ffffffff", - 3253 => x"00000000", - 3254 => x"ffffffff", - 3255 => x"00000000", - 3256 => 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(to_integer(unsigned(memAAddr))) := memAWrite; - memARead <= memAWrite; - else - memARead <= ram(to_integer(unsigned(memAAddr))); - end if; - end if; -end process; - -process (clk) -begin - if (clk'event and clk = '1') then - if (memBWriteEnable = '1') then - ram(to_integer(unsigned(memBAddr))) := memBWrite; - memBRead <= memBWrite; - else - memBRead <= ram(to_integer(unsigned(memBAddr))); - end if; - end if; -end process; - - - - -end dualport_ram_arch; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(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 dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( + 0 => x"0b0b0b0b", + 1 => x"82700b0b", + 2 => x"80d5f40c", + 3 => x"3a0b0b80", + 4 => x"c4fb0400", + 5 => x"00000000", + 6 => x"00000000", + 7 => x"00000000", + 8 => x"80088408", + 9 => x"88080b0b", + 10 => x"80c5c22d", + 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"c3040000", + 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"0b0b88a6", + 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"0b0b80d5", + 162 => x"e0738306", + 163 => x"10100508", + 164 => x"060b0b0b", + 165 => x"88a90400", + 166 => x"00000000", + 167 => x"00000000", + 168 => x"80088408", + 169 => x"88087575", + 170 => x"0b0b0bad", + 171 => x"aa2d5050", + 172 => x"80085688", + 173 => x"0c840c80", + 174 => x"0c510400", + 175 => x"00000000", + 176 => x"80088408", + 177 => x"88087575", + 178 => x"0b0b0bad", + 179 => x"ee2d5050", + 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"80d5f00c", + 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"82fd3fbf", + 257 => x"a03f0410", + 258 => x"10101010", + 259 => x"10101010", + 260 => x"10101010", + 261 => x"10101010", + 262 => x"10101010", + 263 => x"10101010", + 264 => x"10101010", + 265 => x"10105351", + 266 => x"047381ff", + 267 => x"06738306", + 268 => x"09810583", + 269 => x"05101010", + 270 => x"2b0772fc", + 271 => x"060c5151", + 272 => x"043c0472", + 273 => x"72807281", + 274 => x"06ff0509", + 275 => x"72060571", + 276 => x"1052720a", + 277 => x"100a5372", + 278 => x"ed385151", + 279 => x"535104ff", + 280 => x"3d0d0b0b", + 281 => x"80e5e408", + 282 => x"52710870", + 283 => x"882a8132", + 284 => x"70810651", + 285 => x"515170f1", + 286 => x"3873720c", + 287 => x"833d0d04", + 288 => x"80d5f008", + 289 => x"802ea438", + 290 => x"80d5f408", + 291 => x"822ebd38", + 292 => x"8380800b", + 293 => x"0b0b80e5", + 294 => x"e40c82a0", + 295 => x"800b80e5", + 296 => x"e80c8290", + 297 => x"800b80e5", + 298 => x"ec0c04f8", + 299 => x"808080a4", + 300 => x"0b0b0b80", + 301 => x"e5e40cf8", + 302 => x"80808280", + 303 => x"0b80e5e8", + 304 => x"0cf88080", + 305 => x"84800b80", + 306 => x"e5ec0c04", + 307 => x"80c0a880", + 308 => x"8c0b0b0b", + 309 => x"80e5e40c", + 310 => x"80c0a880", + 311 => x"940b80e5", + 312 => x"e80c0b0b", + 313 => x"80c7d00b", + 314 => x"80e5ec0c", + 315 => x"04f23d0d", + 316 => x"6080e5e8", + 317 => x"08565d82", + 318 => x"750c8059", + 319 => x"805a800b", + 320 => x"8f3d5d5b", + 321 => x"7a101015", + 322 => x"70087108", + 323 => x"719f2c7e", + 324 => x"852b5855", + 325 => x"557d5359", + 326 => x"5799993f", + 327 => x"7d7f7a72", + 328 => x"077c7207", + 329 => x"71716081", + 330 => x"05415f5d", + 331 => x"5b595755", + 332 => x"817b278f", + 333 => x"38767d0c", + 334 => x"77841e0c", + 335 => x"7c800c90", + 336 => x"3d0d0480", + 337 => x"e5e80855", + 338 => x"ffba3970", + 339 => x"7080e5f0", + 340 => x"335170a7", + 341 => x"3880d5fc", + 342 => x"08700852", + 343 => x"5270802e", + 344 => x"94388412", + 345 => x"80d5fc0c", + 346 => x"702d80d5", + 347 => x"fc087008", + 348 => x"525270ee", + 349 => x"38810b80", + 350 => x"e5f03450", + 351 => x"50040470", + 352 => x"0b0b80e5", + 353 => x"e008802e", + 354 => x"8e380b0b", + 355 => x"0b0b800b", + 356 => x"802e0981", + 357 => x"06833850", + 358 => x"040b0b80", + 359 => x"e5e0510b", + 360 => x"0b0bf4dc", + 361 => x"3f500404", + 362 => x"ff3d0d02", + 363 => x"8f053352", + 364 => x"718a2e8a", + 365 => x"387151fd", + 366 => x"a63f833d", + 367 => x"0d048d51", + 368 => x"fd9d3f71", + 369 => x"51fd983f", + 370 => x"833d0d04", + 371 => x"ce3d0db5", + 372 => x"3d707084", + 373 => x"0552088b", + 374 => x"a85c56a5", + 375 => x"3d5e5c80", + 376 => x"75708105", + 377 => x"5733765b", + 378 => x"55587378", + 379 => x"2e80c138", + 380 => x"8e3d5b73", + 381 => x"a52e0981", + 382 => x"0680c538", + 383 => x"78708105", + 384 => x"5a335473", + 385 => x"80e42e81", + 386 => x"b6387380", + 387 => x"e42480c6", + 388 => x"387380e3", + 389 => x"2ea13880", + 390 => x"52a55179", + 391 => x"2d805273", + 392 => x"51792d82", + 393 => x"18587870", + 394 => x"81055a33", + 395 => x"5473c438", + 396 => x"77800cb4", + 397 => x"3d0d047b", + 398 => x"841d8312", + 399 => x"33565d57", + 400 => x"80527351", + 401 => x"792d8118", + 402 => x"79708105", + 403 => x"5b335558", + 404 => x"73ffa038", + 405 => x"db397380", + 406 => x"f32e0981", + 407 => x"06ffb838", + 408 => x"7b841d71", + 409 => x"08595d56", + 410 => x"80773355", + 411 => x"5673762e", + 412 => x"8d388116", + 413 => x"70187033", + 414 => x"57555674", + 415 => x"f538ff16", + 416 => x"55807625", + 417 => x"ffa03876", + 418 => x"70810558", + 419 => x"33548052", + 420 => x"7351792d", + 421 => x"811875ff", + 422 => x"17575758", + 423 => x"807625ff", + 424 => x"85387670", + 425 => x"81055833", + 426 => x"54805273", + 427 => x"51792d81", + 428 => x"1875ff17", + 429 => x"57575875", + 430 => x"8024cc38", + 431 => x"fee8397b", + 432 => x"841d7108", + 433 => x"70719f2c", + 434 => x"5953595d", + 435 => x"56807524", + 436 => x"81913875", + 437 => x"7d7c5856", + 438 => x"54805773", + 439 => x"772e0981", + 440 => x"06b638b0", + 441 => x"7b3402b5", + 442 => x"05567a76", + 443 => x"2e9738ff", + 444 => x"16567533", + 445 => x"75708105", + 446 => x"57348117", + 447 => x"577a762e", + 448 => x"098106eb", + 449 => x"38807534", + 450 => x"767dff12", + 451 => x"57585675", + 452 => x"8024fef3", + 453 => x"38fe8f39", + 454 => x"8a527351", + 455 => x"9fd03f80", + 456 => x"0880c7d4", + 457 => x"05337670", + 458 => x"81055834", + 459 => x"8a527351", + 460 => x"9ef83f80", + 461 => x"08548008", + 462 => x"802effae", + 463 => x"388a5273", + 464 => x"519fab3f", + 465 => x"800880c7", + 466 => x"d4053376", + 467 => x"70810558", + 468 => x"348a5273", + 469 => x"519ed33f", + 470 => x"80085480", + 471 => x"08ffb938", + 472 => x"ff883974", + 473 => x"527653b4", + 474 => x"3dffb805", + 475 => x"51949a3f", + 476 => x"a33d0856", + 477 => x"fedd3980", + 478 => x"3d0d80c1", + 479 => x"0b81b4bc", + 480 => x"34800b81", + 481 => x"b6980c70", + 482 => x"800c823d", + 483 => x"0d04ff3d", + 484 => x"0d800b81", + 485 => x"b4bc3352", + 486 => x"527080c1", + 487 => x"2e993871", + 488 => x"81b69808", + 489 => x"0781b698", + 490 => x"0c80c20b", + 491 => x"81b4c034", + 492 => x"70800c83", + 493 => x"3d0d0481", + 494 => x"0b81b698", + 495 => x"080781b6", + 496 => x"980c80c2", + 497 => x"0b81b4c0", + 498 => x"3470800c", + 499 => x"833d0d04", + 500 => x"fd3d0d75", + 501 => x"70088a05", + 502 => x"535381b4", + 503 => x"bc335170", + 504 => x"80c12e8b", + 505 => x"3873f338", + 506 => x"70800c85", + 507 => x"3d0d04ff", + 508 => x"127081b4", + 509 => x"b8083174", + 510 => x"0c800c85", + 511 => x"3d0d04fc", + 512 => x"3d0d81b4", + 513 => x"c4085574", + 514 => x"802e8c38", + 515 => x"76750871", + 516 => x"0c81b4c4", + 517 => x"0856548c", + 518 => x"155381b4", + 519 => x"b808528a", + 520 => x"518fd43f", + 521 => x"73800c86", + 522 => x"3d0d04fb", + 523 => x"3d0d7770", + 524 => x"085656b0", + 525 => x"5381b4c4", + 526 => x"08527451", + 527 => x"ab943f85", + 528 => x"0b8c170c", + 529 => x"850b8c16", + 530 => x"0c750875", + 531 => x"0c81b4c4", + 532 => x"08547380", + 533 => x"2e8a3873", + 534 => x"08750c81", + 535 => x"b4c40854", + 536 => x"8c145381", + 537 => x"b4b80852", + 538 => x"8a518f8b", + 539 => x"3f841508", + 540 => x"ad38860b", + 541 => x"8c160c88", + 542 => x"15528816", + 543 => x"08518e97", + 544 => x"3f81b4c4", + 545 => x"08700876", + 546 => x"0c548c15", + 547 => x"7054548a", + 548 => x"52730851", + 549 => x"8ee13f73", + 550 => x"800c873d", + 551 => x"0d047508", + 552 => x"54b05373", + 553 => x"527551aa", + 554 => x"a93f7380", + 555 => x"0c873d0d", + 556 => x"04d93d0d", + 557 => x"b0519dcf", + 558 => x"3f800881", + 559 => x"b4b40cb0", + 560 => x"519dc43f", + 561 => x"800881b4", + 562 => x"c40c81b4", + 563 => x"b4088008", + 564 => x"0c800b80", + 565 => x"0884050c", + 566 => x"820b8008", + 567 => x"88050ca8", + 568 => x"0b80088c", + 569 => x"050c9f53", + 570 => x"80c7e052", + 571 => x"80089005", + 572 => x"51a9df3f", + 573 => x"a13d5e9f", + 574 => x"5380c880", + 575 => x"527d51a9", + 576 => x"d13f8a0b", + 577 => x"80f2f80c", + 578 => x"80d2a451", + 579 => x"f9be3f80", + 580 => x"c8a051f9", + 581 => x"b73f80d2", + 582 => x"a451f9b0", + 583 => x"3f80d684", + 584 => x"08802e89", + 585 => x"d33880c8", + 586 => x"d051f9a0", + 587 => x"3f80d2a4", + 588 => x"51f9993f", + 589 => x"80d68008", + 590 => x"5280c8fc", + 591 => x"51f98d3f", + 592 => x"80e69451", + 593 => x"b2ff3f81", + 594 => x"0b9a3d5e", + 595 => x"5b800b80", + 596 => x"d6800825", + 597 => x"82d43890", + 598 => x"3d5f80c1", + 599 => x"0b81b4bc", + 600 => x"34810b81", + 601 => x"b6980c80", + 602 => x"c20b81b4", + 603 => x"c0348240", + 604 => x"835a9f53", + 605 => x"80c9ac52", + 606 => x"7c51a8d6", + 607 => x"3f814180", + 608 => x"7d537e52", + 609 => x"568e943f", + 610 => x"8008762e", + 611 => x"09810683", + 612 => x"38815675", + 613 => x"81b6980c", + 614 => x"7f705856", + 615 => x"758325a2", + 616 => x"38751010", + 617 => x"16fd0542", + 618 => x"a93dffa4", + 619 => x"05538352", + 620 => x"76518cc3", + 621 => x"3f7f8105", + 622 => x"70417058", + 623 => x"56837624", + 624 => x"e0386154", + 625 => x"755380e6", + 626 => x"9c5281b4", + 627 => x"d0518cb7", + 628 => x"3f81b4c4", + 629 => x"08700858", + 630 => x"58b05377", + 631 => x"527651a7", + 632 => x"f13f850b", + 633 => x"8c190c85", + 634 => x"0b8c180c", + 635 => x"7708770c", + 636 => x"81b4c408", + 637 => x"5675802e", + 638 => x"8a387508", + 639 => x"770c81b4", + 640 => x"c408568c", + 641 => x"165381b4", + 642 => x"b808528a", + 643 => x"518be83f", + 644 => x"84170887", + 645 => x"ea38860b", + 646 => x"8c180c88", + 647 => x"17528818", + 648 => x"08518af3", + 649 => x"3f81b4c4", + 650 => x"08700878", + 651 => x"0c568c17", + 652 => x"7054598a", + 653 => x"52780851", + 654 => x"8bbd3f80", + 655 => x"c10b81b4", + 656 => x"c0335757", + 657 => x"767626a2", + 658 => x"3880c352", + 659 => x"76518ca1", + 660 => x"3f800861", + 661 => x"2e89e438", + 662 => x"81177081", + 663 => x"ff0681b4", + 664 => x"c0335858", + 665 => x"58757727", + 666 => x"e0387960", + 667 => x"29627054", + 668 => x"71535b59", + 669 => x"98b43f80", + 670 => x"0840787a", + 671 => x"31708729", + 672 => x"80083180", + 673 => x"088a0581", + 674 => x"b4bc3381", + 675 => x"b4b8085e", + 676 => x"5b525a56", + 677 => x"7780c12e", + 678 => x"89ce387b", + 679 => x"f738811b", + 680 => x"5b80d680", + 681 => x"087b25fd", + 682 => x"b13881b4", + 683 => x"ac51b095", + 684 => x"3f80c9cc", + 685 => x"51f6953f", + 686 => x"80d2a451", + 687 => x"f68e3f80", + 688 => x"c9dc51f6", + 689 => x"873f80d2", + 690 => x"a451f680", + 691 => x"3f81b4b8", + 692 => x"085280ca", + 693 => x"9451f5f4", + 694 => x"3f855280", + 695 => x"cab051f5", + 696 => x"eb3f81b6", + 697 => x"98085280", + 698 => x"cacc51f5", + 699 => x"df3f8152", + 700 => x"80cab051", + 701 => x"f5d63f81", + 702 => x"b4bc3352", + 703 => x"80cae851", + 704 => x"f5ca3f80", + 705 => x"c15280cb", + 706 => x"8451f5c0", + 707 => x"3f81b4c0", + 708 => x"335280cb", + 709 => x"a051f5b4", + 710 => x"3f80c252", + 711 => x"80cb8451", + 712 => x"f5aa3f81", + 713 => x"b4f00852", + 714 => x"80cbbc51", + 715 => x"f59e3f87", + 716 => x"5280cab0", + 717 => x"51f5953f", + 718 => x"80f2f808", + 719 => x"5280cbd8", + 720 => x"51f5893f", + 721 => x"80cbf451", + 722 => x"f5823f80", + 723 => x"cca051f4", + 724 => x"fb3f81b4", + 725 => x"c4087008", + 726 => x"535a80cc", + 727 => x"ac51f4ec", + 728 => x"3f80ccc8", + 729 => x"51f4e53f", + 730 => x"81b4c408", + 731 => x"84110853", + 732 => x"5680ccfc", + 733 => x"51f4d53f", + 734 => x"805280ca", + 735 => x"b051f4cc", + 736 => x"3f81b4c4", + 737 => x"08881108", + 738 => x"535880cd", + 739 => x"9851f4bc", + 740 => x"3f825280", + 741 => x"cab051f4", + 742 => x"b33f81b4", + 743 => x"c4088c11", + 744 => x"08535780", + 745 => x"cdb451f4", + 746 => x"a33f9152", + 747 => x"80cab051", + 748 => x"f49a3f81", + 749 => x"b4c40890", + 750 => x"055280cd", + 751 => x"d051f48c", + 752 => x"3f80cdec", + 753 => x"51f4853f", + 754 => x"80cea451", + 755 => x"f3fe3f81", + 756 => x"b4b40870", + 757 => x"08535f80", + 758 => x"ccac51f3", + 759 => x"ef3f80ce", + 760 => x"b851f3e8", + 761 => x"3f81b4b4", + 762 => x"08841108", + 763 => x"535b80cc", + 764 => x"fc51f3d8", + 765 => x"3f805280", + 766 => x"cab051f3", + 767 => x"cf3f81b4", + 768 => x"b4088811", + 769 => x"08535c80", + 770 => x"cd9851f3", + 771 => x"bf3f8152", + 772 => x"80cab051", + 773 => x"f3b63f81", + 774 => x"b4b4088c", + 775 => x"1108535a", + 776 => x"80cdb451", + 777 => x"f3a63f92", + 778 => x"5280cab0", + 779 => x"51f39d3f", + 780 => x"81b4b408", + 781 => x"90055280", + 782 => x"cdd051f3", + 783 => x"8f3f80cd", + 784 => x"ec51f388", + 785 => x"3f7f5280", + 786 => x"cef851f2", + 787 => x"ff3f8552", + 788 => x"80cab051", + 789 => x"f2f63f78", + 790 => x"5280cf94", + 791 => x"51f2ed3f", + 792 => x"8d5280ca", + 793 => x"b051f2e4", + 794 => x"3f615280", + 795 => x"cfb051f2", + 796 => x"db3f8752", + 797 => x"80cab051", + 798 => x"f2d23f60", + 799 => x"5280cfcc", + 800 => x"51f2c93f", + 801 => x"815280ca", + 802 => x"b051f2c0", + 803 => x"3f7d5280", + 804 => x"cfe851f2", + 805 => x"b73f80d0", + 806 => x"8451f2b0", + 807 => x"3f7c5280", + 808 => x"d0bc51f2", + 809 => x"a73f80d0", + 810 => x"d851f2a0", + 811 => x"3f80d2a4", + 812 => x"51f2993f", + 813 => x"81b4ac08", + 814 => x"81b4b008", + 815 => x"80e69408", + 816 => x"80e69808", + 817 => x"72713170", + 818 => x"74267574", + 819 => x"31707231", + 820 => x"80e68c0c", + 821 => x"444480e6", + 822 => x"900c80e6", + 823 => x"90085680", + 824 => x"d190555c", + 825 => x"595758f1", + 826 => x"e33f80e6", + 827 => x"8c085680", + 828 => x"762582a3", + 829 => x"3880d680", + 830 => x"0870719f", + 831 => x"2c9a3d53", + 832 => x"565680e6", + 833 => x"8c0880e6", + 834 => x"90084153", + 835 => x"7f547052", + 836 => x"5a89eb3f", + 837 => x"66685f80", + 838 => x"e5fc0c7d", + 839 => x"80e6800c", + 840 => x"80d68008", + 841 => x"709f2c58", + 842 => x"568058bd", + 843 => x"84c07855", + 844 => x"55765275", + 845 => x"53795187", + 846 => x"d13f953d", + 847 => x"80e68c08", + 848 => x"80e69008", + 849 => x"41557f56", + 850 => x"67694053", + 851 => x"7e547052", + 852 => x"5c89ab3f", + 853 => x"64665e80", + 854 => x"e6840c7c", + 855 => x"80e6880c", + 856 => x"80d68008", + 857 => x"709f2c40", + 858 => x"58805783", + 859 => x"dceb9480", + 860 => x"7755557e", + 861 => x"5277537b", + 862 => x"51878f3f", + 863 => x"64665d5b", + 864 => x"805e8ddd", + 865 => x"7e555580", + 866 => x"e68c0880", + 867 => x"e6900859", + 868 => x"52775379", + 869 => x"5186f33f", + 870 => x"66684054", + 871 => x"7e557a52", + 872 => x"7b53a93d", + 873 => x"ffa80551", + 874 => x"88d43f62", + 875 => x"645e81b4", + 876 => x"c80c7c81", + 877 => x"b4cc0c80", + 878 => x"d1a051f0", + 879 => x"8f3f80e6", + 880 => x"80085280", + 881 => x"d1d051f0", + 882 => x"833f80d1", + 883 => x"d851effc", + 884 => x"3f80e688", + 885 => x"085280d1", + 886 => x"d051eff0", + 887 => x"3f81b4cc", + 888 => x"085280d2", + 889 => x"8851efe4", + 890 => x"3f80d2a4", + 891 => x"51efdd3f", + 892 => x"800b800c", + 893 => x"a93d0d04", + 894 => x"80d2a851", + 895 => x"f6ac3977", + 896 => x"0857b053", + 897 => x"76527751", + 898 => x"9fc83f80", + 899 => x"c10b81b4", + 900 => x"c0335757", + 901 => x"f8ae3975", + 902 => x"8a3880e6", + 903 => x"90088126", + 904 => x"fdd33880", + 905 => x"d2d851ef", + 906 => x"a33f80d3", + 907 => x"9051ef9c", + 908 => x"3f80d2a4", + 909 => x"51ef953f", + 910 => x"80d68008", + 911 => x"70719f2c", + 912 => x"9a3d5356", + 913 => x"5680e68c", + 914 => x"0880e690", + 915 => x"0841537f", + 916 => x"5470525a", + 917 => x"87a83f66", + 918 => x"685f80e5", + 919 => x"fc0c7d80", + 920 => x"e6800c80", + 921 => x"d6800870", + 922 => x"9f2c5856", + 923 => x"8058bd84", + 924 => x"c0785555", + 925 => x"76527553", + 926 => x"7951858e", + 927 => x"3f953d80", + 928 => x"e68c0880", + 929 => x"e6900841", + 930 => x"557f5667", + 931 => x"6940537e", + 932 => x"5470525c", + 933 => x"86e83f64", + 934 => x"665e80e6", + 935 => x"840c7c80", + 936 => x"e6880c80", + 937 => x"d6800870", + 938 => x"9f2c4058", + 939 => x"805783dc", + 940 => x"eb948077", + 941 => x"55557e52", + 942 => x"77537b51", + 943 => x"84cc3f64", + 944 => x"665d5b80", + 945 => x"5e8ddd7e", + 946 => x"555580e6", + 947 => x"8c0880e6", + 948 => x"90085952", + 949 => x"77537951", + 950 => x"84b03f66", + 951 => x"6840547e", + 952 => x"557a527b", + 953 => x"53a93dff", + 954 => x"a8055186", + 955 => x"913f6264", + 956 => x"5e81b4c8", + 957 => x"0c7c81b4", + 958 => x"cc0c80d1", + 959 => x"a051edcc", + 960 => x"3f80e680", + 961 => x"085280d1", + 962 => x"d051edc0", + 963 => x"3f80d1d8", + 964 => x"51edb93f", + 965 => x"80e68808", + 966 => x"5280d1d0", + 967 => x"51edad3f", + 968 => x"81b4cc08", + 969 => x"5280d288", + 970 => x"51eda13f", + 971 => x"80d2a451", + 972 => x"ed9a3f80", + 973 => x"0b800ca9", + 974 => x"3d0d04a9", + 975 => x"3dffa005", + 976 => x"52805180", + 977 => x"d23f9f53", + 978 => x"80d3b052", + 979 => x"7c519d82", + 980 => x"3f7a7b81", + 981 => x"b4b80c81", + 982 => x"187081ff", + 983 => x"0681b4c0", + 984 => x"33595959", + 985 => x"5af5fe39", + 986 => x"ff16707b", + 987 => x"31600c5c", + 988 => x"800b811c", + 989 => x"5c5c80d6", + 990 => x"80087b25", + 991 => x"f3dc38f6", + 992 => x"a939ff3d", + 993 => x"0d738232", + 994 => x"70307072", + 995 => x"07802580", + 996 => x"0c525283", + 997 => x"3d0d04fe", + 998 => x"3d0d7476", + 999 => x"71535452", + 1000 => x"71822e83", + 1001 => x"38835171", + 1002 => x"812e9a38", + 1003 => x"8172269f", + 1004 => x"3871822e", + 1005 => x"b8387184", + 1006 => x"2ea93870", + 1007 => x"730c7080", + 1008 => x"0c843d0d", + 1009 => x"0480e40b", + 1010 => x"81b4b808", + 1011 => x"258b3880", + 1012 => x"730c7080", + 1013 => x"0c843d0d", + 1014 => x"0483730c", + 1015 => x"70800c84", + 1016 => x"3d0d0482", + 1017 => x"730c7080", + 1018 => x"0c843d0d", + 1019 => x"0481730c", + 1020 => x"70800c84", + 1021 => x"3d0d0480", + 1022 => x"3d0d7474", + 1023 => x"14820571", + 1024 => x"0c800c82", + 1025 => x"3d0d04f7", + 1026 => x"3d0d7b7d", + 1027 => x"7f618512", + 1028 => x"70822b75", + 1029 => x"11707471", + 1030 => x"70840553", + 1031 => x"0c5a5a5d", + 1032 => x"5b760c79", + 1033 => x"80f8180c", + 1034 => x"79861252", + 1035 => x"57585a5a", + 1036 => x"76762499", + 1037 => x"3876b329", + 1038 => x"822b7911", + 1039 => x"51537673", + 1040 => x"70840555", + 1041 => x"0c811454", + 1042 => x"757425f2", + 1043 => x"387681cc", + 1044 => x"2919fc11", + 1045 => x"088105fc", + 1046 => x"120c7a19", + 1047 => x"70089fa0", + 1048 => x"130c5856", + 1049 => x"850b81b4", + 1050 => x"b80c7580", + 1051 => x"0c8b3d0d", + 1052 => x"04fe3d0d", + 1053 => x"02930533", + 1054 => x"51800284", + 1055 => x"05970533", + 1056 => x"54527073", + 1057 => x"2e883871", + 1058 => x"800c843d", + 1059 => x"0d047081", + 1060 => x"b4bc3481", + 1061 => x"0b800c84", + 1062 => x"3d0d04f8", + 1063 => x"3d0d7a7c", + 1064 => x"5956820b", + 1065 => x"83195555", + 1066 => x"74167033", + 1067 => x"75335b51", + 1068 => x"5372792e", + 1069 => x"80c63880", + 1070 => x"c10b8116", + 1071 => x"81165656", + 1072 => x"57827525", + 1073 => x"e338ffa9", + 1074 => x"177081ff", + 1075 => x"06555973", + 1076 => x"82268338", + 1077 => x"87558153", + 1078 => x"7680d22e", + 1079 => x"98387752", + 1080 => x"75519bc3", + 1081 => x"3f805372", + 1082 => x"80082589", + 1083 => x"38871581", + 1084 => x"b4b80c81", + 1085 => x"5372800c", + 1086 => x"8a3d0d04", + 1087 => x"7281b4bc", + 1088 => x"34827525", + 1089 => x"ffa238ff", + 1090 => x"bd39ef3d", + 1091 => x"0d636567", + 1092 => x"5b427943", + 1093 => x"67695940", + 1094 => x"77415a80", + 1095 => x"5d805e61", + 1096 => x"7083ffff", + 1097 => x"0671902a", + 1098 => x"627083ff", + 1099 => x"ff067190", + 1100 => x"2a747229", + 1101 => x"74732975", + 1102 => x"73297774", + 1103 => x"2973902a", + 1104 => x"05721151", + 1105 => x"5856535f", + 1106 => x"5a575a58", + 1107 => x"55587373", + 1108 => x"27863884", + 1109 => x"80801656", + 1110 => x"73902a16", + 1111 => x"5b7883ff", + 1112 => x"ff067484", + 1113 => x"80802905", + 1114 => x"5c7a7c5a", + 1115 => x"5d785e77", + 1116 => x"7f296178", + 1117 => x"29057d05", + 1118 => x"5d7c7e56", + 1119 => x"7a0c7484", + 1120 => x"1b0c7980", + 1121 => x"0c933d0d", + 1122 => x"04f93d0d", + 1123 => x"797b7d54", + 1124 => x"58725977", + 1125 => x"30797030", + 1126 => x"7072079f", + 1127 => x"2a737131", + 1128 => x"5a525977", + 1129 => x"7956730c", + 1130 => x"53738413", + 1131 => x"0c54800c", + 1132 => x"893d0d04", + 1133 => x"f93d0d79", + 1134 => x"7b7d7f56", + 1135 => x"54525472", + 1136 => x"802ea038", + 1137 => x"70577158", + 1138 => x"a0733152", + 1139 => x"807225a1", + 1140 => x"38777074", + 1141 => x"2b577073", + 1142 => x"2a78752b", + 1143 => x"07565174", + 1144 => x"76535170", + 1145 => x"740c7184", + 1146 => x"150c7380", + 1147 => x"0c893d0d", + 1148 => x"04805677", + 1149 => x"72302b55", + 1150 => x"74765351", + 1151 => x"e639e43d", + 1152 => x"0d6ea13d", + 1153 => x"08a33d08", + 1154 => x"59575f80", + 1155 => x"764d774e", + 1156 => x"a33d08a5", + 1157 => x"3d08574b", + 1158 => x"754c5e7d", + 1159 => x"6c2486fb", + 1160 => x"38806a24", + 1161 => x"878f3869", + 1162 => x"6b58566b", + 1163 => x"6d5d467b", + 1164 => x"47754476", + 1165 => x"45646468", + 1166 => x"685c5c56", + 1167 => x"567481e7", + 1168 => x"38787627", + 1169 => x"82c73875", + 1170 => x"81ff2683", + 1171 => x"2b5583ff", + 1172 => x"ff76278c", + 1173 => x"389055fe", + 1174 => x"800a7627", + 1175 => x"83389855", + 1176 => x"75752a80", + 1177 => x"d3d00570", + 1178 => x"33a07731", + 1179 => x"71315755", + 1180 => x"5774802e", + 1181 => x"95387575", + 1182 => x"2ba07631", + 1183 => x"7a772b7c", + 1184 => x"722a077c", + 1185 => x"782b5d5b", + 1186 => x"59567590", + 1187 => x"2a7683ff", + 1188 => x"ff067154", + 1189 => x"7a535957", + 1190 => x"88803f80", + 1191 => x"085b87ea", + 1192 => x"3f800880", + 1193 => x"0879297c", + 1194 => x"902b7c90", + 1195 => x"2a075656", + 1196 => x"59737527", + 1197 => x"94388008", + 1198 => x"ff057615", + 1199 => x"55597574", + 1200 => x"26873874", + 1201 => x"742687b9", + 1202 => x"38765273", + 1203 => x"75315187", + 1204 => x"c93f8008", + 1205 => x"5587b33f", + 1206 => x"80088008", + 1207 => x"79297b83", + 1208 => x"ffff0677", + 1209 => x"902b0756", + 1210 => x"59577378", + 1211 => x"27963880", + 1212 => x"08ff0576", + 1213 => x"15555775", + 1214 => x"74268938", + 1215 => x"77742677", + 1216 => x"71315856", + 1217 => x"78902b77", + 1218 => x"0758805b", + 1219 => x"7a407741", + 1220 => x"7f615654", + 1221 => x"7d80d938", + 1222 => x"737f0c74", + 1223 => x"7f84050c", + 1224 => x"7e800c9e", + 1225 => x"3d0d0480", + 1226 => x"705c5874", + 1227 => x"7926dd38", + 1228 => x"7481ff26", + 1229 => x"832b5774", + 1230 => x"83ffff26", + 1231 => x"82a53874", + 1232 => x"772a80d3", + 1233 => x"d0057033", + 1234 => x"a0793171", + 1235 => x"31595c5d", + 1236 => x"7682b338", + 1237 => x"76547479", + 1238 => x"27833881", + 1239 => x"54797627", + 1240 => x"74075981", + 1241 => x"5878ffa2", + 1242 => x"38765880", + 1243 => x"5bff9d39", + 1244 => x"73527453", + 1245 => x"9e3de805", + 1246 => x"51fc8e3f", + 1247 => x"6769567f", + 1248 => x"0c747f84", + 1249 => x"050c7e80", + 1250 => x"0c9e3d0d", + 1251 => x"0475802e", + 1252 => x"81c43875", + 1253 => x"81ff2683", + 1254 => x"2b5583ff", + 1255 => x"ff76278c", + 1256 => x"389055fe", + 1257 => x"800a7627", + 1258 => x"83389855", + 1259 => x"75752a80", + 1260 => x"d3d00570", + 1261 => x"33a07731", + 1262 => x"7131575e", + 1263 => x"54748491", + 1264 => x"38787631", + 1265 => x"54817690", + 1266 => x"2a7783ff", + 1267 => x"ff065f5d", + 1268 => x"5b7b5273", + 1269 => x"5185c33f", + 1270 => x"80085785", + 1271 => x"ad3f8008", + 1272 => x"80087e29", + 1273 => x"78902b7c", + 1274 => x"902a0756", + 1275 => x"56597375", + 1276 => x"27943880", + 1277 => x"08ff0576", + 1278 => x"15555975", + 1279 => x"74268738", + 1280 => x"74742684", + 1281 => x"f3387b52", + 1282 => x"73753151", + 1283 => x"858c3f80", + 1284 => x"085584f6", + 1285 => x"3f800880", + 1286 => x"087e297b", + 1287 => x"83ffff06", + 1288 => x"77902b07", + 1289 => x"56595773", + 1290 => x"78279638", + 1291 => x"8008ff05", + 1292 => x"76155557", + 1293 => x"75742689", + 1294 => x"38777426", + 1295 => x"77713158", + 1296 => x"5a78902b", + 1297 => x"77077b41", + 1298 => x"417f6156", + 1299 => x"547d802e", + 1300 => x"fdc638fe", + 1301 => x"9b397552", + 1302 => x"815184ae", + 1303 => x"3f800856", + 1304 => x"feb13990", + 1305 => x"57fe800a", + 1306 => x"7527fdd3", + 1307 => x"38987571", + 1308 => x"2a80d3d0", + 1309 => x"057033a0", + 1310 => x"73317131", + 1311 => x"535d5e57", + 1312 => x"76802efd", + 1313 => x"cf38a077", + 1314 => x"3175782b", + 1315 => x"77722a07", + 1316 => x"77792b7b", + 1317 => x"7a2b7d74", + 1318 => x"2a077d7b", + 1319 => x"2b73902a", + 1320 => x"7483ffff", + 1321 => x"0671597f", + 1322 => x"772a585e", + 1323 => x"5c415f58", + 1324 => x"5c5483e6", + 1325 => x"3f800854", + 1326 => x"83d03f80", + 1327 => x"08800879", + 1328 => x"2975902b", + 1329 => x"7e902a07", + 1330 => x"56565973", + 1331 => x"75279938", + 1332 => x"8008ff05", + 1333 => x"7b155559", + 1334 => x"7a74268c", + 1335 => x"38737527", + 1336 => x"8738ff19", + 1337 => x"7b155559", + 1338 => x"76527375", + 1339 => x"315183aa", + 1340 => x"3f800855", + 1341 => x"83943f80", + 1342 => x"08800879", + 1343 => x"297d83ff", + 1344 => x"ff067790", + 1345 => x"2b075659", + 1346 => x"57737827", + 1347 => x"99388008", + 1348 => x"ff057b15", + 1349 => x"55577a74", + 1350 => x"268c3873", + 1351 => x"78278738", + 1352 => x"ff177b15", + 1353 => x"55577378", + 1354 => x"3179902b", + 1355 => x"78077083", + 1356 => x"ffff0671", + 1357 => x"902a7983", + 1358 => x"ffff067a", + 1359 => x"902a7372", + 1360 => x"29737329", + 1361 => x"74732976", + 1362 => x"74297390", + 1363 => x"2a057205", + 1364 => x"5755435f", + 1365 => x"5b585a57", + 1366 => x"595a747c", + 1367 => x"27863884", + 1368 => x"80801757", + 1369 => x"74902a17", + 1370 => x"7983ffff", + 1371 => x"06768480", + 1372 => x"80290557", + 1373 => x"57767a26", + 1374 => x"9a38767a", + 1375 => x"32703070", + 1376 => x"72078025", + 1377 => x"565a5b7c", + 1378 => x"7627fafe", + 1379 => x"3873802e", + 1380 => x"faf838ff", + 1381 => x"1858805b", + 1382 => x"faf239ff", + 1383 => x"76537754", + 1384 => x"9f3de805", + 1385 => x"525ef7e1", + 1386 => x"3f676957", + 1387 => x"4c754d69", + 1388 => x"8025f8f3", + 1389 => x"387d096a", + 1390 => x"6c5c537a", + 1391 => x"549f3de8", + 1392 => x"05525ef7", + 1393 => x"c43f6769", + 1394 => x"714c704d", + 1395 => x"5856f8db", + 1396 => x"39a07531", + 1397 => x"76762b7a", + 1398 => x"772b7c73", + 1399 => x"2a077c78", + 1400 => x"2b72902a", + 1401 => x"7383ffff", + 1402 => x"0671587e", + 1403 => x"762a5742", + 1404 => x"405d5d57", + 1405 => x"5881a33f", + 1406 => x"80085781", + 1407 => x"8d3f8008", + 1408 => x"80087e29", + 1409 => x"78902b7d", + 1410 => x"902a0756", + 1411 => x"56597375", + 1412 => x"27993880", + 1413 => x"08ff0576", + 1414 => x"15555975", + 1415 => x"74268c38", + 1416 => x"73752787", + 1417 => x"38ff1976", + 1418 => x"1555597b", + 1419 => x"52737531", + 1420 => x"5180e73f", + 1421 => x"80085580", + 1422 => x"d13f8008", + 1423 => x"80087e29", + 1424 => x"7c83ffff", + 1425 => x"06707890", + 1426 => x"2b075156", + 1427 => x"58587377", + 1428 => x"27993880", + 1429 => x"08ff0576", + 1430 => x"15555875", + 1431 => x"74268c38", + 1432 => x"73772787", + 1433 => x"38ff1876", + 1434 => x"15555878", + 1435 => x"902b7807", + 1436 => x"74783155", + 1437 => x"5bfada39", + 1438 => x"ff197615", + 1439 => x"5559fb86", + 1440 => x"39ff1976", + 1441 => x"155559f8", + 1442 => x"c0397070", + 1443 => x"70805375", + 1444 => x"52745181", + 1445 => x"913f5050", + 1446 => x"50047070", + 1447 => x"70815375", + 1448 => x"52745181", + 1449 => x"813f5050", + 1450 => x"5004fb3d", + 1451 => x"0d777955", + 1452 => x"55805675", + 1453 => x"7524ab38", + 1454 => x"8074249d", + 1455 => x"38805373", + 1456 => x"52745180", + 1457 => x"e13f8008", + 1458 => x"5475802e", + 1459 => x"85388008", + 1460 => x"30547380", + 1461 => x"0c873d0d", + 1462 => x"04733076", + 1463 => x"81325754", + 1464 => x"dc397430", + 1465 => x"55815673", + 1466 => x"8025d238", + 1467 => x"ec39fa3d", + 1468 => x"0d787a57", + 1469 => x"55805776", + 1470 => x"7524a438", + 1471 => x"759f2c54", + 1472 => x"81537574", + 1473 => x"32743152", + 1474 => x"74519b3f", + 1475 => x"80085476", + 1476 => x"802e8538", + 1477 => x"80083054", + 1478 => x"73800c88", + 1479 => x"3d0d0474", + 1480 => x"30558157", + 1481 => x"d739fc3d", + 1482 => x"0d767853", + 1483 => x"54815380", + 1484 => x"74732652", + 1485 => x"5572802e", + 1486 => x"98387080", + 1487 => x"2eab3880", + 1488 => x"7224a638", + 1489 => x"71107310", + 1490 => x"75722653", + 1491 => x"545272ea", + 1492 => x"38735178", + 1493 => x"83387451", + 1494 => x"70800c86", + 1495 => x"3d0d0472", + 1496 => x"0a100a72", + 1497 => x"0a100a53", + 1498 => x"5372802e", + 1499 => x"e4387174", + 1500 => x"26ed3873", + 1501 => x"72317574", + 1502 => x"07740a10", + 1503 => x"0a740a10", + 1504 => x"0a555556", + 1505 => x"54e33970", + 1506 => x"70735280", + 1507 => x"decc0851", + 1508 => x"933f5050", + 1509 => x"04707073", + 1510 => x"5280decc", + 1511 => x"085190ce", + 1512 => x"3f505004", + 1513 => x"f43d0d7e", + 1514 => x"608b1170", + 1515 => x"f8065b55", + 1516 => x"555d7296", + 1517 => x"26833890", + 1518 => x"58807824", + 1519 => x"74792607", + 1520 => x"55805474", + 1521 => x"742e0981", + 1522 => x"0680ca38", + 1523 => x"7c518d9e", + 1524 => x"3f7783f7", + 1525 => x"2680c538", + 1526 => x"77832a70", + 1527 => x"10101080", + 1528 => x"d6c4058c", + 1529 => x"11085858", + 1530 => x"5475772e", + 1531 => x"81f03884", + 1532 => x"1608fc06", + 1533 => x"8c170888", + 1534 => x"1808718c", + 1535 => x"120c8812", + 1536 => x"0c5b7605", + 1537 => x"84110881", + 1538 => x"0784120c", + 1539 => x"537c518c", + 1540 => x"de3f8816", + 1541 => x"5473800c", + 1542 => x"8e3d0d04", + 1543 => x"77892a78", + 1544 => x"832a5854", + 1545 => x"73802ebf", + 1546 => x"3877862a", + 1547 => x"b8055784", + 1548 => x"7427b438", + 1549 => x"80db1457", + 1550 => x"947427ab", + 1551 => x"38778c2a", + 1552 => x"80ee0557", + 1553 => x"80d47427", + 1554 => x"9e38778f", + 1555 => x"2a80f705", + 1556 => x"5782d474", + 1557 => x"27913877", + 1558 => x"922a80fc", + 1559 => x"05578ad4", + 1560 => x"74278438", + 1561 => x"80fe5776", + 1562 => x"10101080", + 1563 => x"d6c4058c", + 1564 => x"11085653", + 1565 => x"74732ea3", + 1566 => x"38841508", + 1567 => x"fc067079", + 1568 => x"31555673", + 1569 => x"8f2488e4", + 1570 => x"38738025", + 1571 => x"88e6388c", + 1572 => x"15085574", + 1573 => x"732e0981", + 1574 => x"06df3881", + 1575 => x"175980d6", + 1576 => x"d4085675", + 1577 => x"80d6cc2e", + 1578 => x"82cc3884", + 1579 => x"1608fc06", + 1580 => x"70793155", + 1581 => x"55738f24", + 1582 => x"bb3880d6", + 1583 => x"cc0b80d6", + 1584 => x"d80c80d6", + 1585 => x"cc0b80d6", + 1586 => x"d40c8074", + 1587 => x"2480db38", + 1588 => x"74168411", + 1589 => x"08810784", + 1590 => x"120c53fe", + 1591 => x"b0398816", + 1592 => x"8c110857", + 1593 => x"5975792e", + 1594 => x"098106fe", + 1595 => x"82388214", + 1596 => x"59ffab39", + 1597 => x"77167881", + 1598 => x"0784180c", + 1599 => x"7080d6d8", + 1600 => x"0c7080d6", + 1601 => x"d40c80d6", + 1602 => x"cc0b8c12", + 1603 => x"0c8c1108", + 1604 => x"88120c74", + 1605 => x"81078412", + 1606 => x"0c740574", + 1607 => x"710c5b7c", + 1608 => x"518acc3f", + 1609 => x"881654fd", + 1610 => x"ec3983ff", + 1611 => x"75278391", + 1612 => x"3874892a", + 1613 => x"75832a54", + 1614 => x"5473802e", + 1615 => x"bf387486", + 1616 => x"2ab80553", + 1617 => x"847427b4", + 1618 => x"3880db14", + 1619 => x"53947427", + 1620 => x"ab38748c", + 1621 => x"2a80ee05", + 1622 => x"5380d474", + 1623 => x"279e3874", + 1624 => x"8f2a80f7", + 1625 => x"055382d4", + 1626 => x"74279138", + 1627 => x"74922a80", + 1628 => x"fc05538a", + 1629 => x"d4742784", + 1630 => x"3880fe53", + 1631 => x"72101010", + 1632 => x"80d6c405", + 1633 => x"88110855", + 1634 => x"5773772e", + 1635 => x"868b3884", + 1636 => x"1408fc06", + 1637 => x"5b747b27", + 1638 => x"8d388814", + 1639 => x"08547377", + 1640 => x"2e098106", + 1641 => x"ea388c14", + 1642 => x"0880d6c4", + 1643 => x"0b840508", + 1644 => x"718c190c", + 1645 => x"7588190c", + 1646 => x"7788130c", + 1647 => x"5c57758c", + 1648 => x"150c7853", + 1649 => x"80792483", + 1650 => x"98387282", + 1651 => x"2c81712b", + 1652 => x"5656747b", + 1653 => x"2680ca38", + 1654 => x"7a750657", + 1655 => x"7682a338", + 1656 => x"78fc0684", + 1657 => x"05597410", + 1658 => x"707c0655", + 1659 => x"55738292", + 1660 => x"38841959", + 1661 => x"f13980d6", + 1662 => x"c40b8405", + 1663 => x"0879545b", + 1664 => x"788025c6", + 1665 => x"3882da39", + 1666 => x"74097b06", + 1667 => x"7080d6c4", + 1668 => x"0b84050c", + 1669 => x"5b741055", + 1670 => x"747b2685", + 1671 => x"387485bc", + 1672 => x"3880d6c4", + 1673 => x"0b880508", + 1674 => x"70841208", + 1675 => x"fc06707b", + 1676 => x"317b7226", + 1677 => x"8f722507", + 1678 => x"5d575c5c", + 1679 => x"5578802e", + 1680 => x"80d93879", + 1681 => x"1580d6bc", + 1682 => x"08199011", + 1683 => x"59545680", + 1684 => x"d6b808ff", + 1685 => x"2e8838a0", + 1686 => x"8f13e080", + 1687 => x"06577652", + 1688 => x"7c51888c", + 1689 => x"3f800854", + 1690 => x"8008ff2e", + 1691 => x"90388008", + 1692 => x"762782a7", + 1693 => x"387480d6", + 1694 => x"c42e829f", + 1695 => x"3880d6c4", + 1696 => x"0b880508", + 1697 => x"55841508", + 1698 => x"fc067079", + 1699 => x"31797226", + 1700 => x"8f722507", + 1701 => x"5d555a7a", + 1702 => x"83f23877", + 1703 => x"81078416", + 1704 => x"0c771570", + 1705 => x"80d6c40b", + 1706 => x"88050c74", + 1707 => x"81078412", + 1708 => x"0c567c51", + 1709 => x"87b93f88", + 1710 => x"15547380", + 1711 => x"0c8e3d0d", + 1712 => x"0474832a", + 1713 => x"70545480", + 1714 => x"7424819b", + 1715 => x"3872822c", + 1716 => x"81712b80", + 1717 => x"d6c80807", + 1718 => x"7080d6c4", + 1719 => x"0b84050c", + 1720 => x"75101010", + 1721 => x"80d6c405", + 1722 => x"88110871", + 1723 => x"8c1b0c70", + 1724 => x"881b0c79", + 1725 => x"88130c57", + 1726 => x"555c5575", + 1727 => x"8c150cfd", + 1728 => x"c1397879", + 1729 => x"10101080", + 1730 => x"d6c40570", + 1731 => x"565b5c8c", + 1732 => x"14085675", + 1733 => x"742ea338", + 1734 => x"841608fc", + 1735 => x"06707931", + 1736 => x"5853768f", + 1737 => x"2483f138", + 1738 => x"76802584", + 1739 => x"af388c16", + 1740 => x"08567574", + 1741 => x"2e098106", + 1742 => x"df388814", + 1743 => x"811a7083", + 1744 => x"06555a54", + 1745 => x"72c9387b", + 1746 => x"83065675", + 1747 => x"802efdb8", + 1748 => x"38ff1cf8", + 1749 => x"1b5b5c88", + 1750 => x"1a087a2e", + 1751 => x"ea38fdb5", + 1752 => x"39831953", + 1753 => x"fce43983", + 1754 => x"1470822c", + 1755 => x"81712b80", + 1756 => x"d6c80807", + 1757 => x"7080d6c4", + 1758 => x"0b84050c", + 1759 => x"76101010", + 1760 => x"80d6c405", + 1761 => x"88110871", + 1762 => x"8c1c0c70", + 1763 => x"881c0c7a", + 1764 => x"88130c58", + 1765 => x"535d5653", + 1766 => x"fee13980", + 1767 => x"d6880817", + 1768 => x"59800876", + 1769 => x"2e818b38", + 1770 => x"80d6b808", + 1771 => x"ff2e848e", + 1772 => x"38737631", + 1773 => x"1980d688", + 1774 => x"0c738706", + 1775 => x"70565372", + 1776 => x"802e8838", + 1777 => x"88733170", + 1778 => x"15555576", + 1779 => x"149fff06", + 1780 => x"a0807131", + 1781 => x"1670547e", + 1782 => x"53515385", + 1783 => x"933f8008", + 1784 => x"568008ff", + 1785 => x"2e819e38", + 1786 => x"80d68808", + 1787 => x"137080d6", + 1788 => x"880c7475", + 1789 => x"80d6c40b", + 1790 => x"88050c77", + 1791 => x"76311581", + 1792 => x"07555659", + 1793 => x"7a80d6c4", + 1794 => x"2e83c038", + 1795 => x"798f2682", + 1796 => x"ef38810b", + 1797 => x"84150c84", + 1798 => x"1508fc06", + 1799 => x"70793179", + 1800 => x"72268f72", + 1801 => x"25075d55", + 1802 => x"5a7a802e", + 1803 => x"fced3880", + 1804 => x"db398008", + 1805 => x"9fff0655", + 1806 => x"74feed38", + 1807 => x"7880d688", + 1808 => x"0c80d6c4", + 1809 => x"0b880508", + 1810 => x"7a188107", + 1811 => x"84120c55", + 1812 => x"80d6b408", + 1813 => x"79278638", + 1814 => x"7880d6b4", + 1815 => x"0c80d6b0", + 1816 => x"087927fc", + 1817 => x"a0387880", + 1818 => x"d6b00c84", + 1819 => x"1508fc06", + 1820 => x"70793179", + 1821 => x"72268f72", + 1822 => x"25075d55", + 1823 => x"5a7a802e", + 1824 => x"fc993888", + 1825 => x"39807457", + 1826 => x"53fedd39", + 1827 => x"7c5183df", + 1828 => x"3f800b80", + 1829 => x"0c8e3d0d", + 1830 => x"04807324", + 1831 => x"a5387282", + 1832 => x"2c81712b", + 1833 => x"80d6c808", + 1834 => x"077080d6", + 1835 => x"c40b8405", + 1836 => x"0c5c5a76", + 1837 => x"8c170c73", + 1838 => x"88170c75", + 1839 => x"88180cf9", + 1840 => x"fd398313", + 1841 => x"70822c81", + 1842 => x"712b80d6", + 1843 => x"c8080770", + 1844 => x"80d6c40b", + 1845 => x"84050c5d", + 1846 => x"5b53d839", + 1847 => x"7a75065c", + 1848 => x"7bfc9f38", + 1849 => x"84197510", + 1850 => x"5659f139", + 1851 => x"ff178105", + 1852 => x"59f7ab39", + 1853 => x"8c150888", + 1854 => x"1608718c", + 1855 => x"120c8812", + 1856 => x"0c597515", + 1857 => x"84110881", + 1858 => x"0784120c", + 1859 => x"587c5182", + 1860 => x"de3f8815", + 1861 => x"54fba339", + 1862 => x"77167881", + 1863 => x"0784180c", + 1864 => x"8c170888", + 1865 => x"1808718c", + 1866 => x"120c8812", + 1867 => x"0c5c7080", + 1868 => x"d6d80c70", + 1869 => x"80d6d40c", + 1870 => x"80d6cc0b", + 1871 => x"8c120c8c", + 1872 => x"11088812", + 1873 => x"0c778107", + 1874 => x"84120c77", + 1875 => x"0577710c", + 1876 => x"557c5182", + 1877 => x"9a3f8816", + 1878 => x"54f5ba39", + 1879 => x"72168411", + 1880 => x"08810784", + 1881 => x"120c588c", + 1882 => x"16088817", + 1883 => x"08718c12", + 1884 => x"0c88120c", + 1885 => x"577c5181", + 1886 => x"f63f8816", + 1887 => x"54f59639", + 1888 => x"7284150c", + 1889 => x"f41af806", + 1890 => x"70841d08", + 1891 => x"81060784", + 1892 => x"1d0c701c", + 1893 => x"5556850b", + 1894 => x"84150c85", + 1895 => x"0b88150c", + 1896 => x"8f7627fd", + 1897 => x"ab38881b", + 1898 => x"527c5184", + 1899 => x"c13f80d6", + 1900 => x"c40b8805", + 1901 => x"0880d688", + 1902 => x"085a55fd", + 1903 => x"93397880", + 1904 => x"d6880c73", + 1905 => x"80d6b80c", + 1906 => x"fbef3972", + 1907 => x"84150cfc", + 1908 => x"ff39fb3d", + 1909 => x"0d77707a", + 1910 => x"7c585553", + 1911 => x"568f7527", + 1912 => x"80e63872", + 1913 => x"76078306", + 1914 => x"517080dc", + 1915 => x"38757352", + 1916 => x"54707084", + 1917 => x"05520874", + 1918 => x"70840556", + 1919 => x"0c737170", + 1920 => x"84055308", + 1921 => x"71708405", + 1922 => x"530c7170", + 1923 => x"84055308", + 1924 => x"71708405", + 1925 => x"530c7170", + 1926 => x"84055308", + 1927 => x"71708405", + 1928 => x"530cf016", + 1929 => x"5654748f", + 1930 => x"26c73883", + 1931 => x"75279538", + 1932 => x"70708405", + 1933 => x"52087470", + 1934 => x"8405560c", + 1935 => x"fc155574", + 1936 => x"8326ed38", + 1937 => x"73715452", + 1938 => x"ff155170", + 1939 => x"ff2e9838", + 1940 => x"72708105", + 1941 => x"54337270", + 1942 => x"81055434", + 1943 => x"ff115170", + 1944 => x"ff2e0981", + 1945 => x"06ea3875", + 1946 => x"800c873d", + 1947 => x"0d040404", + 1948 => x"70707070", + 1949 => x"800b81b6", + 1950 => x"9c0c7651", + 1951 => x"87cc3f80", + 1952 => x"08538008", + 1953 => x"ff2e8938", + 1954 => x"72800c50", + 1955 => x"50505004", + 1956 => x"81b69c08", + 1957 => x"5473802e", + 1958 => x"ef387574", + 1959 => x"710c5272", + 1960 => x"800c5050", + 1961 => x"505004fb", + 1962 => x"3d0d7779", + 1963 => x"70720783", + 1964 => x"06535452", + 1965 => x"70933871", + 1966 => x"73730854", + 1967 => x"56547173", + 1968 => x"082e80c4", + 1969 => x"38737554", + 1970 => x"52713370", + 1971 => x"81ff0652", + 1972 => x"5470802e", + 1973 => x"9d387233", + 1974 => x"5570752e", + 1975 => x"09810695", + 1976 => x"38811281", + 1977 => x"14713370", + 1978 => x"81ff0654", + 1979 => x"56545270", + 1980 => x"e5387233", + 1981 => x"557381ff", + 1982 => x"067581ff", + 1983 => x"06717131", + 1984 => x"800c5552", + 1985 => x"873d0d04", + 1986 => x"7109f7fb", + 1987 => x"fdff1306", + 1988 => x"f8848281", + 1989 => x"80065271", + 1990 => x"97388414", + 1991 => x"84167108", + 1992 => x"54565471", + 1993 => x"75082ee0", + 1994 => x"38737554", + 1995 => x"52ff9a39", + 1996 => x"800b800c", + 1997 => x"873d0d04", + 1998 => x"fb3d0d77", + 1999 => x"705256fe", + 2000 => x"ad3f80d6", + 2001 => x"c40b8805", + 2002 => x"08841108", + 2003 => x"fc06707b", + 2004 => x"319fef05", + 2005 => x"e08006e0", + 2006 => x"80055255", + 2007 => x"55a08075", + 2008 => x"24943880", + 2009 => x"527551fe", + 2010 => x"873f80d6", + 2011 => x"cc081453", + 2012 => x"7280082e", + 2013 => x"8f387551", + 2014 => x"fdf53f80", + 2015 => x"5372800c", + 2016 => x"873d0d04", + 2017 => x"74305275", + 2018 => x"51fde53f", + 2019 => x"8008ff2e", + 2020 => x"a83880d6", + 2021 => x"c40b8805", + 2022 => x"08747631", + 2023 => x"81078412", + 2024 => x"0c5380d6", + 2025 => x"88087531", + 2026 => x"80d6880c", + 2027 => x"7551fdbf", + 2028 => x"3f810b80", + 2029 => x"0c873d0d", + 2030 => x"04805275", + 2031 => x"51fdb13f", + 2032 => x"80d6c40b", + 2033 => x"88050880", + 2034 => x"08713154", + 2035 => x"548f7325", + 2036 => x"ffa43880", + 2037 => x"0880d6b8", + 2038 => x"083180d6", + 2039 => x"880c7281", + 2040 => x"0784150c", + 2041 => x"7551fd87", + 2042 => x"3f8053ff", + 2043 => x"9039f73d", + 2044 => x"0d7b7d54", + 2045 => x"5a72802e", + 2046 => x"82833879", + 2047 => x"51fcef3f", + 2048 => x"f8138411", + 2049 => x"0870fe06", + 2050 => x"70138411", + 2051 => x"08fc065c", + 2052 => x"57585457", + 2053 => x"80d6cc08", + 2054 => x"742e82de", + 2055 => x"38778415", + 2056 => x"0c807381", + 2057 => x"06565974", + 2058 => x"792e81d5", + 2059 => x"38771484", + 2060 => x"11088106", + 2061 => x"565374a0", + 2062 => x"38771656", + 2063 => x"7881e638", + 2064 => x"88140855", + 2065 => x"7480d6cc", + 2066 => x"2e82f938", + 2067 => x"8c140870", + 2068 => x"8c170c75", + 2069 => x"88120c58", + 2070 => x"75810784", + 2071 => x"180c7517", + 2072 => x"76710c54", + 2073 => x"78819138", + 2074 => x"83ff7627", + 2075 => x"81c83875", + 2076 => x"892a7683", + 2077 => x"2a545473", + 2078 => x"802ebf38", + 2079 => x"75862ab8", + 2080 => x"05538474", + 2081 => x"27b43880", + 2082 => x"db145394", + 2083 => x"7427ab38", + 2084 => x"758c2a80", + 2085 => x"ee055380", + 2086 => x"d474279e", + 2087 => x"38758f2a", + 2088 => x"80f70553", + 2089 => x"82d47427", + 2090 => x"91387592", + 2091 => x"2a80fc05", + 2092 => x"538ad474", + 2093 => x"27843880", + 2094 => x"fe537210", + 2095 => x"101080d6", + 2096 => x"c4058811", + 2097 => x"08555573", + 2098 => x"752e82bf", + 2099 => x"38841408", + 2100 => x"fc065975", + 2101 => x"79278d38", + 2102 => x"88140854", + 2103 => x"73752e09", + 2104 => x"8106ea38", + 2105 => x"8c140870", + 2106 => x"8c190c74", + 2107 => x"88190c77", + 2108 => x"88120c55", + 2109 => x"768c150c", + 2110 => x"7951faf3", + 2111 => x"3f8b3d0d", + 2112 => x"04760877", + 2113 => x"71315876", + 2114 => x"05881808", + 2115 => x"56567480", + 2116 => x"d6cc2e80", + 2117 => x"e0388c17", + 2118 => x"08708c17", + 2119 => x"0c758812", + 2120 => x"0c53fe89", + 2121 => x"39881408", + 2122 => x"8c150870", + 2123 => x"8c130c59", + 2124 => x"88190cfe", + 2125 => x"a3397583", + 2126 => x"2a705454", + 2127 => x"80742481", + 2128 => x"98387282", + 2129 => x"2c81712b", + 2130 => x"80d6c808", + 2131 => x"0780d6c4", + 2132 => x"0b84050c", + 2133 => x"74101010", + 2134 => x"80d6c405", + 2135 => x"88110871", + 2136 => x"8c1b0c70", + 2137 => x"881b0c79", + 2138 => x"88130c56", + 2139 => x"5a55768c", + 2140 => x"150cff84", + 2141 => x"398159fd", + 2142 => x"b4397716", + 2143 => x"73810654", + 2144 => x"55729838", + 2145 => x"76087771", + 2146 => x"31587505", + 2147 => x"8c180888", + 2148 => x"1908718c", + 2149 => x"120c8812", + 2150 => x"0c555574", + 2151 => x"81078418", + 2152 => x"0c7680d6", + 2153 => x"c40b8805", + 2154 => x"0c80d6c0", + 2155 => x"087526fe", + 2156 => x"c73880d6", + 2157 => x"bc085279", + 2158 => x"51fafd3f", + 2159 => x"7951f9af", + 2160 => x"3ffeba39", + 2161 => x"81778c17", + 2162 => x"0c778817", + 2163 => x"0c758c19", + 2164 => x"0c758819", + 2165 => x"0c59fd80", + 2166 => x"39831470", + 2167 => x"822c8171", + 2168 => x"2b80d6c8", + 2169 => x"080780d6", + 2170 => x"c40b8405", + 2171 => x"0c751010", + 2172 => x"1080d6c4", + 2173 => x"05881108", + 2174 => x"718c1c0c", + 2175 => x"70881c0c", + 2176 => x"7a88130c", + 2177 => x"575b5653", + 2178 => x"fee43980", + 2179 => x"7324a338", + 2180 => x"72822c81", + 2181 => x"712b80d6", + 2182 => x"c8080780", + 2183 => x"d6c40b84", + 2184 => x"050c5874", + 2185 => x"8c180c73", + 2186 => x"88180c76", + 2187 => x"88160cfd", + 2188 => x"c3398313", + 2189 => x"70822c81", + 2190 => x"712b80d6", + 2191 => x"c8080780", + 2192 => x"d6c40b84", + 2193 => x"050c5953", + 2194 => x"da397070", + 2195 => x"7080e5f4", + 2196 => x"08893881", + 2197 => x"b6a00b80", + 2198 => x"e5f40c80", + 2199 => x"e5f40875", + 2200 => x"115252ff", + 2201 => x"537087fb", + 2202 => x"80802688", + 2203 => x"387080e5", + 2204 => x"f40c7153", + 2205 => x"72800c50", + 2206 => x"505004fd", + 2207 => x"3d0d800b", + 2208 => x"80d5f408", + 2209 => x"54547281", + 2210 => x"2e9b3873", + 2211 => x"80e5f80c", + 2212 => x"c3ee3fc2", + 2213 => x"eb3f80e5", + 2214 => x"cc528151", + 2215 => x"cc933f80", + 2216 => x"085180dd", + 2217 => x"3f7280e5", + 2218 => x"f80cc3d4", + 2219 => x"3fc2d13f", + 2220 => x"80e5cc52", + 2221 => x"8151cbf9", + 2222 => x"3f800851", + 2223 => x"80c33f00", + 2224 => x"ff3900ff", + 2225 => x"39f43d0d", + 2226 => x"7e80e5ec", + 2227 => x"08700870", + 2228 => x"81ff0692", + 2229 => x"3df80555", + 2230 => x"515a5759", + 2231 => x"c48f3f80", + 2232 => x"5477557b", + 2233 => x"7d585276", + 2234 => x"538e3df0", + 2235 => x"0551de8e", + 2236 => x"3f797b58", + 2237 => x"790c7684", + 2238 => x"1a0c7880", + 2239 => x"0c8e3d0d", + 2240 => x"04f73d0d", + 2241 => x"7b80decc", + 2242 => x"0882c811", + 2243 => x"085a545a", + 2244 => x"77802e80", + 2245 => x"da388188", + 2246 => x"18841908", + 2247 => x"ff058171", + 2248 => x"2b595559", + 2249 => x"80742480", + 2250 => x"ea388074", + 2251 => x"24b53873", + 2252 => x"822b7811", + 2253 => x"88055656", + 2254 => x"81801908", + 2255 => x"77065372", + 2256 => x"802eb638", + 2257 => x"78167008", + 2258 => x"53537951", + 2259 => x"74085372", + 2260 => x"2dff14fc", + 2261 => x"17fc1779", + 2262 => x"812c5a57", + 2263 => x"57547380", + 2264 => x"25d63877", + 2265 => x"085877ff", + 2266 => x"ad3880de", + 2267 => x"cc0853bc", + 2268 => x"1308a538", + 2269 => x"7951fec7", + 2270 => x"3f740853", + 2271 => x"722dff14", + 2272 => x"fc17fc17", + 2273 => x"79812c5a", + 2274 => x"57575473", + 2275 => x"8025ffa8", + 2276 => x"38d13980", + 2277 => x"57ff9339", + 2278 => x"7251bc13", + 2279 => x"0854732d", + 2280 => x"7951fe9b", + 2281 => x"3f707080", + 2282 => x"e5d40bfc", + 2283 => x"05700852", + 2284 => x"5270ff2e", + 2285 => x"9138702d", + 2286 => x"fc127008", + 2287 => x"525270ff", + 2288 => x"2e098106", + 2289 => x"f1385050", + 2290 => x"0404c2ff", + 2291 => x"3f040000", + 2292 => x"00000040", + 2293 => x"30313233", + 2294 => x"34353637", + 2295 => x"38390000", + 2296 => x"44485259", + 2297 => x"53544f4e", + 2298 => x"45205052", + 2299 => x"4f475241", + 2300 => x"4d2c2053", + 2301 => x"4f4d4520", + 2302 => x"53545249", + 2303 => x"4e470000", + 2304 => x"44485259", + 2305 => x"53544f4e", + 2306 => x"45205052", + 2307 => x"4f475241", + 2308 => x"4d2c2031", + 2309 => x"27535420", + 2310 => x"53545249", + 2311 => x"4e470000", + 2312 => x"44687279", + 2313 => x"73746f6e", + 2314 => x"65204265", + 2315 => x"6e63686d", + 2316 => x"61726b2c", + 2317 => x"20566572", + 2318 => x"73696f6e", + 2319 => x"20322e31", + 2320 => x"20284c61", + 2321 => x"6e677561", + 2322 => x"67653a20", + 2323 => x"43290a00", + 2324 => x"50726f67", + 2325 => x"72616d20", + 2326 => x"636f6d70", + 2327 => x"696c6564", + 2328 => x"20776974", + 2329 => x"68202772", + 2330 => x"65676973", + 2331 => x"74657227", + 2332 => x"20617474", + 2333 => x"72696275", + 2334 => x"74650a00", + 2335 => x"45786563", + 2336 => x"7574696f", + 2337 => x"6e207374", + 2338 => x"61727473", + 2339 => x"2c202564", + 2340 => x"2072756e", + 2341 => x"73207468", + 2342 => x"726f7567", + 2343 => x"68204468", + 2344 => x"72797374", + 2345 => x"6f6e650a", + 2346 => x"00000000", + 2347 => x"44485259", + 2348 => x"53544f4e", + 2349 => x"45205052", + 2350 => x"4f475241", + 2351 => x"4d2c2032", + 2352 => x"274e4420", + 2353 => x"53545249", + 2354 => x"4e470000", + 2355 => x"45786563", + 2356 => x"7574696f", + 2357 => x"6e20656e", + 2358 => x"64730a00", + 2359 => x"46696e61", + 2360 => x"6c207661", + 2361 => x"6c756573", + 2362 => x"206f6620", + 2363 => x"74686520", + 2364 => x"76617269", + 2365 => x"61626c65", + 2366 => x"73207573", + 2367 => x"65642069", + 2368 => x"6e207468", + 2369 => x"65206265", + 2370 => x"6e63686d", + 2371 => x"61726b3a", + 2372 => x"0a000000", + 2373 => x"496e745f", + 2374 => x"476c6f62", + 2375 => x"3a202020", + 2376 => x"20202020", + 2377 => x"20202020", + 2378 => x"2025640a", + 2379 => x"00000000", + 2380 => x"20202020", + 2381 => x"20202020", + 2382 => x"73686f75", + 2383 => x"6c642062", + 2384 => x"653a2020", + 2385 => x"2025640a", + 2386 => x"00000000", + 2387 => x"426f6f6c", + 2388 => x"5f476c6f", + 2389 => x"623a2020", + 2390 => x"20202020", + 2391 => x"20202020", + 2392 => x"2025640a", + 2393 => x"00000000", + 2394 => x"43685f31", + 2395 => x"5f476c6f", + 2396 => x"623a2020", + 2397 => x"20202020", + 2398 => x"20202020", + 2399 => x"2025630a", + 2400 => x"00000000", + 2401 => x"20202020", + 2402 => x"20202020", + 2403 => x"73686f75", + 2404 => x"6c642062", + 2405 => x"653a2020", + 2406 => x"2025630a", + 2407 => x"00000000", + 2408 => x"43685f32", + 2409 => x"5f476c6f", + 2410 => x"623a2020", + 2411 => x"20202020", + 2412 => x"20202020", + 2413 => x"2025630a", + 2414 => x"00000000", + 2415 => x"4172725f", + 2416 => x"315f476c", + 2417 => x"6f625b38", + 2418 => x"5d3a2020", + 2419 => x"20202020", + 2420 => x"2025640a", + 2421 => x"00000000", + 2422 => x"4172725f", + 2423 => x"325f476c", + 2424 => x"6f625b38", + 2425 => x"5d5b375d", + 2426 => x"3a202020", + 2427 => x"2025640a", + 2428 => x"00000000", + 2429 => x"20202020", + 2430 => x"20202020", + 2431 => x"73686f75", + 2432 => x"6c642062", + 2433 => x"653a2020", + 2434 => x"204e756d", + 2435 => x"6265725f", + 2436 => x"4f665f52", + 2437 => x"756e7320", + 2438 => x"2b203130", + 2439 => x"0a000000", + 2440 => x"5074725f", + 2441 => x"476c6f62", + 2442 => x"2d3e0a00", + 2443 => x"20205074", + 2444 => x"725f436f", + 2445 => x"6d703a20", + 2446 => x"20202020", + 2447 => x"20202020", + 2448 => x"2025640a", + 2449 => x"00000000", + 2450 => x"20202020", + 2451 => x"20202020", + 2452 => x"73686f75", + 2453 => x"6c642062", + 2454 => x"653a2020", + 2455 => x"2028696d", + 2456 => x"706c656d", + 2457 => x"656e7461", + 2458 => x"74696f6e", + 2459 => x"2d646570", + 2460 => x"656e6465", + 2461 => x"6e74290a", + 2462 => x"00000000", + 2463 => x"20204469", + 2464 => x"7363723a", + 2465 => x"20202020", + 2466 => x"20202020", + 2467 => x"20202020", + 2468 => x"2025640a", + 2469 => x"00000000", + 2470 => x"2020456e", + 2471 => x"756d5f43", + 2472 => x"6f6d703a", + 2473 => x"20202020", + 2474 => x"20202020", + 2475 => x"2025640a", + 2476 => x"00000000", + 2477 => x"2020496e", + 2478 => x"745f436f", + 2479 => x"6d703a20", + 2480 => x"20202020", + 2481 => x"20202020", + 2482 => x"2025640a", + 2483 => x"00000000", + 2484 => x"20205374", + 2485 => x"725f436f", + 2486 => x"6d703a20", + 2487 => x"20202020", + 2488 => x"20202020", + 2489 => x"2025730a", + 2490 => x"00000000", + 2491 => x"20202020", + 2492 => x"20202020", + 2493 => x"73686f75", + 2494 => x"6c642062", + 2495 => x"653a2020", + 2496 => x"20444852", + 2497 => x"5953544f", + 2498 => x"4e452050", + 2499 => x"524f4752", + 2500 => x"414d2c20", + 2501 => x"534f4d45", + 2502 => x"20535452", + 2503 => x"494e470a", + 2504 => x"00000000", + 2505 => x"4e657874", + 2506 => x"5f507472", + 2507 => x"5f476c6f", + 2508 => x"622d3e0a", + 2509 => x"00000000", + 2510 => x"20202020", + 2511 => x"20202020", + 2512 => x"73686f75", + 2513 => x"6c642062", + 2514 => x"653a2020", + 2515 => x"2028696d", + 2516 => x"706c656d", + 2517 => x"656e7461", + 2518 => x"74696f6e", + 2519 => x"2d646570", + 2520 => x"656e6465", + 2521 => x"6e74292c", + 2522 => x"2073616d", + 2523 => x"65206173", + 2524 => x"2061626f", + 2525 => x"76650a00", + 2526 => x"496e745f", + 2527 => x"315f4c6f", + 2528 => x"633a2020", + 2529 => x"20202020", + 2530 => x"20202020", + 2531 => x"2025640a", + 2532 => x"00000000", + 2533 => x"496e745f", + 2534 => x"325f4c6f", + 2535 => x"633a2020", + 2536 => x"20202020", + 2537 => x"20202020", + 2538 => x"2025640a", + 2539 => x"00000000", + 2540 => x"496e745f", + 2541 => x"335f4c6f", + 2542 => x"633a2020", + 2543 => x"20202020", + 2544 => x"20202020", + 2545 => x"2025640a", + 2546 => x"00000000", + 2547 => x"456e756d", + 2548 => x"5f4c6f63", + 2549 => x"3a202020", + 2550 => x"20202020", + 2551 => x"20202020", + 2552 => x"2025640a", + 2553 => x"00000000", + 2554 => x"5374725f", + 2555 => x"315f4c6f", + 2556 => x"633a2020", + 2557 => x"20202020", + 2558 => x"20202020", + 2559 => x"2025730a", + 2560 => x"00000000", + 2561 => x"20202020", + 2562 => x"20202020", + 2563 => x"73686f75", + 2564 => x"6c642062", + 2565 => x"653a2020", + 2566 => x"20444852", + 2567 => x"5953544f", + 2568 => x"4e452050", + 2569 => x"524f4752", + 2570 => x"414d2c20", + 2571 => x"31275354", + 2572 => x"20535452", + 2573 => x"494e470a", + 2574 => x"00000000", + 2575 => x"5374725f", + 2576 => x"325f4c6f", + 2577 => x"633a2020", + 2578 => x"20202020", + 2579 => x"20202020", + 2580 => x"2025730a", + 2581 => x"00000000", + 2582 => x"20202020", + 2583 => x"20202020", + 2584 => x"73686f75", + 2585 => x"6c642062", + 2586 => x"653a2020", + 2587 => x"20444852", + 2588 => x"5953544f", + 2589 => x"4e452050", + 2590 => x"524f4752", + 2591 => x"414d2c20", + 2592 => x"32274e44", + 2593 => x"20535452", + 2594 => x"494e470a", + 2595 => x"00000000", + 2596 => x"55736572", + 2597 => x"2074696d", + 2598 => x"653a2025", + 2599 => x"640a0000", + 2600 => x"4d696372", + 2601 => x"6f736563", + 2602 => x"6f6e6473", + 2603 => x"20666f72", + 2604 => x"206f6e65", + 2605 => x"2072756e", + 2606 => x"20746872", + 2607 => x"6f756768", + 2608 => x"20446872", + 2609 => x"7973746f", + 2610 => x"6e653a20", + 2611 => x"00000000", + 2612 => x"2564200a", + 2613 => x"00000000", + 2614 => x"44687279", + 2615 => x"73746f6e", + 2616 => x"65732070", + 2617 => x"65722053", + 2618 => x"65636f6e", + 2619 => x"643a2020", + 2620 => x"20202020", + 2621 => x"20202020", + 2622 => x"20202020", + 2623 => x"20202020", + 2624 => x"20202020", + 2625 => x"00000000", + 2626 => x"56415820", + 2627 => x"4d495053", + 2628 => x"20726174", + 2629 => x"696e6720", + 2630 => x"2a203130", + 2631 => x"3030203d", + 2632 => x"20256420", + 2633 => x"0a000000", + 2634 => x"50726f67", + 2635 => x"72616d20", + 2636 => x"636f6d70", + 2637 => x"696c6564", + 2638 => x"20776974", + 2639 => x"686f7574", + 2640 => x"20277265", + 2641 => x"67697374", + 2642 => x"65722720", + 2643 => x"61747472", + 2644 => x"69627574", + 2645 => x"650a0000", + 2646 => x"4d656173", + 2647 => x"75726564", + 2648 => x"2074696d", + 2649 => x"6520746f", + 2650 => x"6f20736d", + 2651 => x"616c6c20", + 2652 => x"746f206f", + 2653 => x"62746169", + 2654 => x"6e206d65", + 2655 => x"616e696e", + 2656 => x"6766756c", + 2657 => x"20726573", + 2658 => x"756c7473", + 2659 => x"0a000000", + 2660 => x"506c6561", + 2661 => x"73652069", + 2662 => x"6e637265", + 2663 => x"61736520", + 2664 => x"6e756d62", + 2665 => x"6572206f", + 2666 => x"66207275", + 2667 => x"6e730a00", + 2668 => x"44485259", + 2669 => x"53544f4e", + 2670 => x"45205052", + 2671 => x"4f475241", + 2672 => x"4d2c2033", + 2673 => x"27524420", + 2674 => x"53545249", + 2675 => x"4e470000", + 2676 => x"00010202", + 2677 => x"03030303", + 2678 => x"04040404", + 2679 => x"04040404", + 2680 => x"05050505", + 2681 => x"05050505", + 2682 => x"05050505", + 2683 => x"05050505", + 2684 => x"06060606", + 2685 => x"06060606", + 2686 => x"06060606", + 2687 => x"06060606", + 2688 => x"06060606", + 2689 => x"06060606", + 2690 => x"06060606", + 2691 => x"06060606", + 2692 => x"07070707", + 2693 => x"07070707", + 2694 => x"07070707", + 2695 => x"07070707", + 2696 => x"07070707", + 2697 => x"07070707", + 2698 => x"07070707", + 2699 => x"07070707", + 2700 => x"07070707", + 2701 => x"07070707", + 2702 => x"07070707", + 2703 => x"07070707", + 2704 => x"07070707", + 2705 => x"07070707", + 2706 => x"07070707", + 2707 => x"07070707", + 2708 => x"08080808", + 2709 => x"08080808", + 2710 => x"08080808", + 2711 => x"08080808", + 2712 => x"08080808", + 2713 => x"08080808", + 2714 => x"08080808", + 2715 => x"08080808", + 2716 => x"08080808", + 2717 => x"08080808", + 2718 => x"08080808", + 2719 => x"08080808", + 2720 => x"08080808", + 2721 => x"08080808", + 2722 => x"08080808", + 2723 => x"08080808", + 2724 => x"08080808", + 2725 => x"08080808", + 2726 => x"08080808", + 2727 => x"08080808", + 2728 => x"08080808", + 2729 => x"08080808", + 2730 => x"08080808", + 2731 => x"08080808", + 2732 => x"08080808", + 2733 => x"08080808", + 2734 => x"08080808", + 2735 => x"08080808", + 2736 => x"08080808", + 2737 => x"08080808", + 2738 => x"08080808", + 2739 => x"08080808", + 2740 => x"43000000", + 2741 => x"64756d6d", + 2742 => x"792e6578", + 2743 => x"65000000", + 2744 => x"00ffffff", + 2745 => x"ff00ffff", + 2746 => x"ffff00ff", + 2747 => x"ffffff00", + 2748 => x"00000000", + 2749 => x"00000000", + 2750 => x"00000000", + 2751 => x"000032dc", + 2752 => x"0000c350", + 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"ffffffff", + 2767 => x"00000000", + 2768 => x"00020000", + 2769 => x"00000000", + 2770 => x"00000000", + 2771 => x"00002b44", + 2772 => x"00002b44", + 2773 => x"00002b4c", + 2774 => x"00002b4c", + 2775 => x"00002b54", + 2776 => x"00002b54", + 2777 => x"00002b5c", + 2778 => x"00002b5c", + 2779 => x"00002b64", + 2780 => x"00002b64", + 2781 => x"00002b6c", + 2782 => x"00002b6c", + 2783 => x"00002b74", + 2784 => x"00002b74", + 2785 => x"00002b7c", + 2786 => x"00002b7c", + 2787 => x"00002b84", + 2788 => x"00002b84", + 2789 => x"00002b8c", + 2790 => x"00002b8c", + 2791 => x"00002b94", + 2792 => x"00002b94", + 2793 => x"00002b9c", + 2794 => x"00002b9c", + 2795 => x"00002ba4", + 2796 => x"00002ba4", + 2797 => x"00002bac", + 2798 => x"00002bac", + 2799 => x"00002bb4", + 2800 => x"00002bb4", + 2801 => x"00002bbc", + 2802 => x"00002bbc", + 2803 => x"00002bc4", + 2804 => x"00002bc4", + 2805 => x"00002bcc", + 2806 => x"00002bcc", + 2807 => x"00002bd4", + 2808 => x"00002bd4", + 2809 => x"00002bdc", + 2810 => x"00002bdc", + 2811 => x"00002be4", + 2812 => x"00002be4", + 2813 => x"00002bec", + 2814 => x"00002bec", + 2815 => x"00002bf4", + 2816 => x"00002bf4", + 2817 => x"00002bfc", + 2818 => x"00002bfc", + 2819 => x"00002c04", + 2820 => x"00002c04", + 2821 => x"00002c0c", + 2822 => x"00002c0c", + 2823 => x"00002c14", + 2824 => x"00002c14", + 2825 => x"00002c1c", + 2826 => x"00002c1c", + 2827 => x"00002c24", + 2828 => x"00002c24", + 2829 => x"00002c2c", + 2830 => x"00002c2c", + 2831 => x"00002c34", + 2832 => x"00002c34", + 2833 => x"00002c3c", + 2834 => x"00002c3c", + 2835 => x"00002c44", + 2836 => x"00002c44", + 2837 => x"00002c4c", + 2838 => x"00002c4c", + 2839 => x"00002c54", + 2840 => x"00002c54", + 2841 => x"00002c5c", + 2842 => x"00002c5c", + 2843 => x"00002c64", + 2844 => x"00002c64", + 2845 => x"00002c6c", + 2846 => x"00002c6c", + 2847 => x"00002c74", + 2848 => x"00002c74", + 2849 => x"00002c7c", + 2850 => x"00002c7c", + 2851 => x"00002c84", + 2852 => x"00002c84", + 2853 => x"00002c8c", + 2854 => x"00002c8c", + 2855 => x"00002c94", + 2856 => x"00002c94", + 2857 => x"00002c9c", + 2858 => x"00002c9c", + 2859 => x"00002ca4", + 2860 => x"00002ca4", + 2861 => x"00002cac", + 2862 => x"00002cac", + 2863 => x"00002cb4", + 2864 => x"00002cb4", + 2865 => x"00002cbc", + 2866 => x"00002cbc", + 2867 => x"00002cc4", + 2868 => x"00002cc4", + 2869 => x"00002ccc", + 2870 => x"00002ccc", + 2871 => x"00002cd4", + 2872 => x"00002cd4", + 2873 => x"00002cdc", + 2874 => x"00002cdc", + 2875 => x"00002ce4", + 2876 => x"00002ce4", + 2877 => x"00002cec", + 2878 => x"00002cec", + 2879 => x"00002cf4", + 2880 => x"00002cf4", + 2881 => x"00002cfc", + 2882 => x"00002cfc", + 2883 => x"00002d04", + 2884 => x"00002d04", + 2885 => x"00002d0c", + 2886 => x"00002d0c", + 2887 => x"00002d14", + 2888 => x"00002d14", + 2889 => x"00002d1c", + 2890 => x"00002d1c", + 2891 => x"00002d24", + 2892 => x"00002d24", + 2893 => x"00002d2c", + 2894 => x"00002d2c", + 2895 => x"00002d34", + 2896 => x"00002d34", + 2897 => x"00002d3c", + 2898 => x"00002d3c", + 2899 => x"00002d44", + 2900 => x"00002d44", + 2901 => x"00002d4c", + 2902 => x"00002d4c", + 2903 => x"00002d54", + 2904 => x"00002d54", + 2905 => x"00002d5c", + 2906 => x"00002d5c", + 2907 => x"00002d64", + 2908 => x"00002d64", + 2909 => x"00002d6c", + 2910 => x"00002d6c", + 2911 => x"00002d74", + 2912 => x"00002d74", + 2913 => x"00002d7c", + 2914 => x"00002d7c", + 2915 => x"00002d84", + 2916 => x"00002d84", + 2917 => x"00002d8c", + 2918 => x"00002d8c", + 2919 => x"00002d94", + 2920 => x"00002d94", + 2921 => x"00002d9c", + 2922 => x"00002d9c", + 2923 => x"00002da4", + 2924 => x"00002da4", + 2925 => x"00002dac", + 2926 => x"00002dac", + 2927 => x"00002db4", + 2928 => x"00002db4", + 2929 => x"00002dbc", + 2930 => x"00002dbc", + 2931 => x"00002dc4", + 2932 => x"00002dc4", + 2933 => x"00002dcc", + 2934 => x"00002dcc", + 2935 => x"00002dd4", + 2936 => x"00002dd4", + 2937 => x"00002ddc", + 2938 => x"00002ddc", + 2939 => x"00002de4", + 2940 => x"00002de4", + 2941 => x"00002dec", + 2942 => x"00002dec", + 2943 => x"00002df4", + 2944 => x"00002df4", + 2945 => x"00002dfc", + 2946 => x"00002dfc", + 2947 => x"00002e04", + 2948 => x"00002e04", + 2949 => x"00002e0c", + 2950 => x"00002e0c", + 2951 => x"00002e14", + 2952 => x"00002e14", + 2953 => x"00002e1c", + 2954 => x"00002e1c", + 2955 => x"00002e24", + 2956 => x"00002e24", + 2957 => x"00002e2c", + 2958 => x"00002e2c", + 2959 => x"00002e34", + 2960 => x"00002e34", + 2961 => x"00002e3c", + 2962 => x"00002e3c", + 2963 => x"00002e44", + 2964 => x"00002e44", + 2965 => x"00002e4c", + 2966 => x"00002e4c", + 2967 => x"00002e54", + 2968 => x"00002e54", + 2969 => x"00002e5c", + 2970 => x"00002e5c", + 2971 => x"00002e64", + 2972 => x"00002e64", + 2973 => x"00002e6c", + 2974 => x"00002e6c", + 2975 => x"00002e74", + 2976 => x"00002e74", + 2977 => x"00002e7c", + 2978 => x"00002e7c", + 2979 => x"00002e84", + 2980 => x"00002e84", + 2981 => x"00002e8c", + 2982 => x"00002e8c", + 2983 => x"00002e94", + 2984 => x"00002e94", + 2985 => x"00002e9c", + 2986 => x"00002e9c", + 2987 => x"00002ea4", + 2988 => x"00002ea4", + 2989 => x"00002eac", + 2990 => x"00002eac", + 2991 => x"00002eb4", + 2992 => x"00002eb4", + 2993 => x"00002ebc", + 2994 => x"00002ebc", + 2995 => x"00002ec4", + 2996 => x"00002ec4", + 2997 => x"00002ecc", + 2998 => x"00002ecc", + 2999 => x"00002ed4", + 3000 => x"00002ed4", + 3001 => x"00002edc", + 3002 => x"00002edc", + 3003 => x"00002ee4", + 3004 => x"00002ee4", + 3005 => x"00002eec", + 3006 => x"00002eec", + 3007 => x"00002ef4", + 3008 => x"00002ef4", + 3009 => x"00002efc", + 3010 => x"00002efc", + 3011 => x"00002f04", + 3012 => x"00002f04", + 3013 => x"00002f0c", + 3014 => x"00002f0c", + 3015 => x"00002f14", + 3016 => x"00002f14", + 3017 => x"00002f1c", + 3018 => x"00002f1c", + 3019 => x"00002f24", + 3020 => x"00002f24", + 3021 => x"00002f2c", + 3022 => x"00002f2c", + 3023 => x"00002f34", + 3024 => x"00002f34", + 3025 => x"00002f3c", + 3026 => x"00002f3c", + 3027 => x"00002f50", + 3028 => x"00000000", + 3029 => x"000031b8", + 3030 => x"00003214", + 3031 => x"00003270", + 3032 => x"00000000", + 3033 => x"00000000", + 3034 => x"00000000", + 3035 => x"00000000", + 3036 => x"00000000", + 3037 => x"00000000", + 3038 => x"00000000", + 3039 => x"00000000", + 3040 => x"00000000", + 3041 => x"00002ad0", + 3042 => x"00000000", + 3043 => x"00000000", + 3044 => x"00000000", + 3045 => x"00000000", + 3046 => x"00000000", + 3047 => x"00000000", + 3048 => x"00000000", + 3049 => x"00000000", + 3050 => x"00000000", + 3051 => x"00000000", + 3052 => x"00000000", + 3053 => x"00000000", + 3054 => x"00000000", + 3055 => x"00000000", + 3056 => x"00000000", + 3057 => x"00000000", + 3058 => x"00000000", + 3059 => x"00000000", + 3060 => x"00000000", + 3061 => x"00000000", + 3062 => x"00000000", + 3063 => x"00000000", + 3064 => x"00000000", + 3065 => x"00000000", + 3066 => x"00000000", + 3067 => x"00000000", + 3068 => x"00000000", + 3069 => x"00000000", + 3070 => x"00000001", + 3071 => x"330eabcd", + 3072 => x"1234e66d", + 3073 => x"deec0005", + 3074 => x"000b0000", + 3075 => x"00000000", + 3076 => x"00000000", + 3077 => x"00000000", + 3078 => x"00000000", + 3079 => x"00000000", + 3080 => x"00000000", + 3081 => x"00000000", + 3082 => x"00000000", + 3083 => x"00000000", + 3084 => x"00000000", + 3085 => x"00000000", + 3086 => x"00000000", + 3087 => x"00000000", + 3088 => x"00000000", + 3089 => x"00000000", + 3090 => x"00000000", + 3091 => x"00000000", + 3092 => x"00000000", + 3093 => x"00000000", + 3094 => x"00000000", + 3095 => x"00000000", + 3096 => x"00000000", + 3097 => x"00000000", + 3098 => x"00000000", + 3099 => x"00000000", + 3100 => x"00000000", + 3101 => x"00000000", + 3102 => x"00000000", + 3103 => x"00000000", + 3104 => x"00000000", + 3105 => x"00000000", + 3106 => x"00000000", + 3107 => x"00000000", + 3108 => x"00000000", + 3109 => x"00000000", + 3110 => x"00000000", + 3111 => x"00000000", + 3112 => x"00000000", + 3113 => x"00000000", + 3114 => x"00000000", + 3115 => x"00000000", + 3116 => x"00000000", + 3117 => x"00000000", + 3118 => x"00000000", + 3119 => x"00000000", + 3120 => x"00000000", + 3121 => x"00000000", + 3122 => x"00000000", + 3123 => x"00000000", + 3124 => x"00000000", + 3125 => x"00000000", + 3126 => x"00000000", + 3127 => x"00000000", + 3128 => x"00000000", + 3129 => x"00000000", + 3130 => x"00000000", + 3131 => x"00000000", + 3132 => x"00000000", + 3133 => x"00000000", + 3134 => x"00000000", + 3135 => x"00000000", + 3136 => x"00000000", + 3137 => x"00000000", + 3138 => x"00000000", + 3139 => x"00000000", + 3140 => x"00000000", + 3141 => x"00000000", + 3142 => x"00000000", + 3143 => x"00000000", + 3144 => x"00000000", + 3145 => x"00000000", + 3146 => x"00000000", + 3147 => x"00000000", + 3148 => x"00000000", + 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"00000000", + 3163 => x"00000000", + 3164 => x"00000000", + 3165 => x"00000000", + 3166 => x"00000000", + 3167 => x"00000000", + 3168 => x"00000000", + 3169 => x"00000000", + 3170 => x"00000000", + 3171 => x"00000000", + 3172 => x"00000000", + 3173 => x"00000000", + 3174 => x"00000000", + 3175 => x"00000000", + 3176 => x"00000000", + 3177 => x"00000000", + 3178 => x"00000000", + 3179 => x"00000000", + 3180 => x"00000000", + 3181 => x"00000000", + 3182 => x"00000000", + 3183 => x"00000000", + 3184 => x"00000000", + 3185 => x"00000000", + 3186 => x"00000000", + 3187 => x"00000000", + 3188 => x"00000000", + 3189 => x"00000000", + 3190 => x"00000000", + 3191 => x"00000000", + 3192 => x"00000000", + 3193 => x"00000000", + 3194 => x"00000000", + 3195 => x"00000000", + 3196 => x"00000000", + 3197 => x"00000000", + 3198 => x"00000000", + 3199 => x"00000000", + 3200 => x"00000000", + 3201 => x"00000000", + 3202 => x"00000000", + 3203 => x"00000000", + 3204 => x"00000000", + 3205 => x"00000000", + 3206 => x"00000000", + 3207 => x"00000000", + 3208 => x"00000000", + 3209 => x"00000000", + 3210 => x"00000000", + 3211 => x"00000000", + 3212 => x"00000000", + 3213 => x"00000000", + 3214 => x"00000000", + 3215 => x"00000000", + 3216 => x"00000000", + 3217 => x"00000000", + 3218 => x"00000000", + 3219 => x"00000000", + 3220 => x"00000000", + 3221 => x"00000000", + 3222 => x"00000000", + 3223 => x"00000000", + 3224 => x"00000000", + 3225 => x"00000000", + 3226 => x"00000000", + 3227 => x"00000000", + 3228 => x"00000000", + 3229 => x"00000000", + 3230 => x"00000000", + 3231 => x"00000000", + 3232 => x"00000000", + 3233 => x"00000000", + 3234 => x"00000000", + 3235 => x"00000000", + 3236 => x"00000000", + 3237 => x"00000000", + 3238 => x"00000000", + 3239 => x"00000000", + 3240 => x"00000000", + 3241 => x"00000000", + 3242 => x"00000000", + 3243 => x"00000000", + 3244 => x"00000000", + 3245 => x"00000000", + 3246 => x"00000000", + 3247 => x"00000000", + 3248 => x"00000000", + 3249 => x"00000000", + 3250 => x"00000000", + 3251 => x"00002ad4", + 3252 => x"ffffffff", + 3253 => x"00000000", + 3254 => x"ffffffff", + 3255 => x"00000000", + 3256 => 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(to_integer(unsigned(memAAddr))) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(to_integer(unsigned(memAAddr))); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(to_integer(unsigned(memBAddr))) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(to_integer(unsigned(memBAddr))); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/example/helloworld.vhd b/zpu/hdl/example/helloworld.vhd index a11bbb7..cc8d8c6 100644 --- a/zpu/hdl/example/helloworld.vhd +++ b/zpu/hdl/example/helloworld.vhd @@ -1,3154 +1,3154 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(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 dualport_ram; - -architecture dualport_ram_arch of dualport_ram is - - -type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); - -shared variable ram : ram_type := -( -0 => x"0b0b0b0b", -1 => x"82700b0b", -2 => x"80cfd80c", -3 => x"3a0b0b80", -4 => x"c6d00400", -5 => x"00000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80c7972d", -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"0b0b80cf", -162 => x"c4738306", -163 => x"10100508", -164 => x"060b0b0b", -165 => x"88aa0400", -166 => x"00000000", -167 => x"00000000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0b8b", -171 => x"9f2d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0b8b", -179 => x"e32d5050", -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"80cfd40c", -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"82c53f80", -257 => x"c6d93f04", -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"fe3d0d0b", -281 => x"0b80dfc0", -282 => x"08538413", -283 => x"0870882a", -284 => x"70810651", -285 => x"52527080", -286 => x"2ef03871", -287 => x"81ff0680", -288 => x"0c843d0d", -289 => x"04ff3d0d", -290 => x"0b0b80df", -291 => x"c0085271", -292 => x"0870882a", -293 => x"81327081", -294 => x"06515151", -295 => x"70f13873", -296 => x"720c833d", -297 => x"0d0480cf", -298 => x"d408802e", -299 => x"a43880cf", -300 => x"d808822e", -301 => x"bd388380", -302 => x"800b0b0b", -303 => x"80dfc00c", -304 => x"82a0800b", -305 => x"80dfc40c", -306 => x"8290800b", -307 => x"80dfc80c", -308 => x"04f88080", -309 => x"80a40b0b", -310 => x"0b80dfc0", -311 => x"0cf88080", -312 => x"82800b80", -313 => x"dfc40cf8", -314 => x"80808480", -315 => x"0b80dfc8", -316 => x"0c0480c0", -317 => x"a8808c0b", -318 => x"0b0b80df", -319 => x"c00c80c0", -320 => x"a880940b", -321 => x"80dfc40c", -322 => x"0b0b80cf", -323 => x"8c0b80df", -324 => x"c80c0470", -325 => x"7080dfcc", -326 => x"335170a7", -327 => x"3880cfe0", -328 => x"08700852", -329 => x"5270802e", -330 => x"94388412", -331 => x"80cfe00c", -332 => x"702d80cf", -333 => x"e0087008", -334 => x"525270ee", -335 => x"38810b80", -336 => x"dfcc3450", -337 => x"50040470", -338 => x"0b0b80df", -339 => x"bc08802e", -340 => x"8e380b0b", -341 => x"0b0b800b", -342 => x"802e0981", -343 => x"06833850", -344 => x"040b0b80", -345 => x"dfbc510b", -346 => x"0b0bf594", -347 => x"3f500404", -348 => x"fe3d0d89", -349 => x"5380cf90", -350 => x"5182c13f", -351 => x"80cfa051", -352 => x"82ba3f81", -353 => x"0a0b80df", -354 => x"d80cff0b", -355 => x"80dfdc0c", -356 => x"ff135372", -357 => x"8025de38", -358 => x"72800c84", -359 => x"3d0d04fb", -360 => x"3d0d7779", -361 => x"55558056", -362 => x"757524ab", -363 => x"38807424", -364 => x"9d388053", -365 => x"73527451", -366 => x"80e13f80", -367 => x"08547580", -368 => x"2e853880", -369 => x"08305473", -370 => x"800c873d", -371 => x"0d047330", -372 => x"76813257", -373 => x"54dc3974", -374 => x"30558156", -375 => x"738025d2", -376 => x"38ec39fa", -377 => x"3d0d787a", -378 => x"57558057", -379 => x"767524a4", -380 => x"38759f2c", -381 => x"54815375", -382 => x"74327431", -383 => x"5274519b", -384 => x"3f800854", -385 => x"76802e85", -386 => x"38800830", -387 => x"5473800c", -388 => x"883d0d04", -389 => x"74305581", -390 => x"57d739fc", -391 => x"3d0d7678", -392 => x"53548153", -393 => x"80747326", -394 => x"52557280", -395 => x"2e983870", -396 => x"802eab38", -397 => x"807224a6", -398 => x"38711073", -399 => x"10757226", -400 => x"53545272", -401 => x"ea387351", -402 => x"78833874", -403 => x"5170800c", -404 => x"863d0d04", -405 => x"720a100a", -406 => x"720a100a", -407 => x"53537280", -408 => x"2ee43871", -409 => x"7426ed38", -410 => x"73723175", -411 => x"7407740a", -412 => x"100a740a", -413 => x"100a5555", -414 => x"5654e339", -415 => x"f73d0d7c", -416 => x"70525380", -417 => x"f93f7254", -418 => x"80085580", -419 => x"cfb05681", -420 => x"57800881", -421 => x"055a8b3d", -422 => x"e4115953", -423 => x"8259f413", -424 => x"527b8811", -425 => x"08525381", -426 => x"b23f8008", -427 => x"30708008", -428 => x"079f2c8a", -429 => x"07800c53", -430 => x"8b3d0d04", -431 => x"f63d0d7c", -432 => x"80cfe408", -433 => x"71535553", -434 => x"b53f7255", -435 => x"80085680", -436 => x"cfb05781", -437 => x"58800881", -438 => x"055b8c3d", -439 => x"e4115a53", -440 => x"825af413", -441 => x"52881408", -442 => x"5180f03f", -443 => x"80083070", -444 => x"8008079f", -445 => x"2c8a0780", -446 => x"0c548c3d", -447 => x"0d047070", -448 => x"70707570", -449 => x"71830653", -450 => x"555270b4", -451 => x"38717008", -452 => x"7009f7fb", -453 => x"fdff1206", -454 => x"f8848281", -455 => x"80065452", -456 => x"53719b38", -457 => x"84137008", -458 => x"7009f7fb", -459 => x"fdff1206", -460 => x"f8848281", -461 => x"80065452", -462 => x"5371802e", -463 => x"e7387252", -464 => x"71335372", -465 => x"802e8a38", -466 => x"81127033", -467 => x"545272f8", -468 => x"38717431", -469 => x"800c5050", -470 => x"505004f2", -471 => x"3d0d6062", -472 => x"88110870", -473 => x"58565f5a", -474 => x"73802e81", -475 => x"8c388c1a", -476 => x"2270832a", -477 => x"81328106", -478 => x"56587486", -479 => x"38901a08", -480 => x"91387951", -481 => x"90b73fff", -482 => x"55800880", -483 => x"ec388c1a", -484 => x"22587d08", -485 => x"55807883", -486 => x"ffff0670", -487 => x"0a100a81", -488 => x"06415c57", -489 => x"7e772e80", -490 => x"d7387690", -491 => x"38740884", -492 => x"16088817", -493 => x"57585676", -494 => x"802ef238", -495 => x"76548880", -496 => x"77278438", -497 => x"88805473", -498 => x"5375529c", -499 => x"1a0851a4", -500 => x"1a085877", -501 => x"2d800b80", -502 => x"082582e0", -503 => x"38800816", -504 => x"77800831", -505 => x"7f880508", -506 => x"80083170", -507 => x"6188050c", -508 => x"5b585678", -509 => x"ffb43880", -510 => x"5574800c", -511 => x"903d0d04", -512 => x"7a813281", -513 => x"06774056", -514 => x"75802e81", -515 => x"bd387690", -516 => x"38740884", -517 => x"16088817", -518 => x"57585976", -519 => x"802ef238", -520 => x"881a0878", -521 => x"83ffff06", -522 => x"70892a81", -523 => x"06565956", -524 => x"73802e82", -525 => x"f8387577", -526 => x"278b3877", -527 => x"872a8106", -528 => x"5c7b82b5", -529 => x"38767627", -530 => x"83387656", -531 => x"75537852", -532 => x"79085185", -533 => x"833f881a", -534 => x"08763188", -535 => x"1b0c7908", -536 => x"167a0c76", -537 => x"56751977", -538 => x"77317f88", -539 => x"05087831", -540 => x"70618805", -541 => x"0c415859", -542 => x"7e802efe", -543 => x"fa388c1a", -544 => x"2258ff8a", -545 => x"39787954", -546 => x"7c537b52", -547 => x"5684c93f", -548 => x"881a0879", -549 => x"31881b0c", -550 => x"7908197a", -551 => x"0c7c7631", -552 => x"5d7c8e38", -553 => x"79518ff2", -554 => x"3f800881", -555 => x"8f388008", -556 => x"5f751c77", -557 => x"77317f88", -558 => x"05087831", -559 => x"70618805", -560 => x"0c5d585c", -561 => x"7a802efe", -562 => x"ae387681", -563 => x"83387408", -564 => x"84160888", -565 => x"1757585c", -566 => x"76802ef2", -567 => x"3876538a", -568 => x"527b5182", -569 => x"d33f8008", -570 => x"7c318105", -571 => x"5d800884", -572 => x"3881175d", -573 => x"815f7c59", -574 => x"767d2783", -575 => x"38765994", -576 => x"1a08881b", -577 => x"08115758", -578 => x"807a085c", -579 => x"54901a08", -580 => x"7b278338", -581 => x"81547579", -582 => x"25843873", -583 => x"ba387779", -584 => x"24fee238", -585 => x"77537b52", -586 => x"9c1a0851", -587 => x"a41a0859", -588 => x"782d8008", -589 => x"56800880", -590 => x"24fee238", -591 => x"8c1a2280", -592 => x"c0075e7d", -593 => x"8c1b23ff", -594 => x"5574800c", -595 => x"903d0d04", -596 => x"7effa338", -597 => x"ff873975", -598 => x"537b527a", -599 => x"5182f93f", -600 => x"7908167a", -601 => x"0c79518e", -602 => x"b13f8008", -603 => x"cf387c76", -604 => x"315d7cfe", -605 => x"bc38feac", -606 => x"39901a08", -607 => x"7a087131", -608 => x"78117056", -609 => x"5a575280", -610 => x"cfe40851", -611 => x"84943f80", -612 => x"08802eff", -613 => x"a7388008", -614 => x"901b0c80", -615 => x"08167a0c", -616 => x"77941b0c", -617 => x"76881b0c", -618 => x"7656fd99", -619 => x"39790858", -620 => x"901a0878", -621 => x"27833881", -622 => x"54757727", -623 => x"843873b3", -624 => x"38941a08", -625 => x"54737726", -626 => x"80d33873", -627 => x"5378529c", -628 => x"1a0851a4", -629 => x"1a085877", -630 => x"2d800856", -631 => x"80088024", -632 => x"fd83388c", -633 => x"1a2280c0", -634 => x"075e7d8c", -635 => x"1b23ff55", -636 => x"fed73975", -637 => x"53785277", -638 => x"5181dd3f", -639 => x"7908167a", -640 => x"0c79518d", -641 => x"953f8008", -642 => x"802efcd9", -643 => x"388c1a22", -644 => x"80c0075e", -645 => x"7d8c1b23", -646 => x"ff55fead", -647 => x"39767754", -648 => x"79537852", -649 => x"5681b13f", -650 => x"881a0877", -651 => x"31881b0c", -652 => x"7908177a", -653 => x"0cfcae39", -654 => x"fa3d0d7a", -655 => x"79028805", -656 => x"a7053355", -657 => x"53548374", -658 => x"2780df38", -659 => x"71830651", -660 => x"7080d738", -661 => x"71715755", -662 => x"83517582", -663 => x"802913ff", -664 => x"12525670", -665 => x"8025f338", -666 => x"837427bc", -667 => x"38740876", -668 => x"327009f7", -669 => x"fbfdff12", -670 => x"06f88482", -671 => x"81800651", -672 => x"5170802e", -673 => x"98387451", -674 => x"80527033", -675 => x"5772772e", -676 => x"b9388111", -677 => x"81135351", -678 => x"837227ee", -679 => x"38fc1484", -680 => x"16565473", -681 => x"8326c638", -682 => x"7452ff14", -683 => x"5170ff2e", -684 => x"97387133", -685 => x"5472742e", -686 => x"98388112", -687 => x"ff125252", -688 => x"70ff2e09", -689 => x"8106eb38", -690 => x"80517080", -691 => x"0c883d0d", -692 => x"0471800c", -693 => x"883d0d04", -694 => x"fa3d0d78", -695 => x"7a7c7272", -696 => x"72595755", -697 => x"58565774", -698 => x"7727b238", -699 => x"75155176", -700 => x"7127aa38", -701 => x"707618ff", -702 => x"18535353", -703 => x"70ff2e96", -704 => x"38ff12ff", -705 => x"14545272", -706 => x"337234ff", -707 => x"115170ff", -708 => x"2e098106", -709 => x"ec387680", -710 => x"0c883d0d", -711 => x"048f7627", -712 => x"80e63874", -713 => x"77078306", -714 => x"517080dc", -715 => x"38767552", -716 => x"53707084", -717 => x"05520873", -718 => x"70840555", -719 => x"0c727170", -720 => x"84055308", -721 => x"71708405", -722 => x"530c7170", -723 => x"84055308", -724 => x"71708405", -725 => x"530c7170", -726 => x"84055308", -727 => x"71708405", -728 => x"530cf015", -729 => x"5553738f", -730 => x"26c73883", -731 => x"74279538", -732 => x"70708405", -733 => x"52087370", -734 => x"8405550c", -735 => x"fc145473", -736 => x"8326ed38", -737 => x"72715452", -738 => x"ff145170", -739 => x"ff2eff86", -740 => x"38727081", -741 => x"05543372", -742 => x"70810554", -743 => x"34ff1151", -744 => x"ea39ef3d", -745 => x"0d636567", -746 => x"405d427b", -747 => x"802e8582", -748 => x"386151a9", -749 => x"e73ff81c", -750 => x"70841208", -751 => x"70fc0670", -752 => x"628b0570", -753 => x"f8064159", -754 => x"455c5f41", -755 => x"57967427", -756 => x"82c53880", -757 => x"7b247e7c", -758 => x"26075880", -759 => x"5477742e", -760 => x"09810682", -761 => x"ab38787b", -762 => x"2581fe38", -763 => x"781780d7", -764 => x"a00b8805", -765 => x"085b5679", -766 => x"762e84c5", -767 => x"38841608", -768 => x"70fe0617", -769 => x"84110881", -770 => x"06415555", -771 => x"7e828d38", -772 => x"74fc0658", -773 => x"79762e84", -774 => x"e3387818", -775 => x"5f7e7b25", -776 => x"81ff387c", -777 => x"81065473", -778 => x"82c13876", -779 => x"77083184", -780 => x"1108fc06", -781 => x"56577580", -782 => x"2e913879", -783 => x"762e84f0", -784 => x"38741819", -785 => x"58777b25", -786 => x"84913876", -787 => x"802e829b", -788 => x"38781556", -789 => x"7a762482", -790 => x"92388c17", -791 => x"08881808", -792 => x"718c120c", -793 => x"88120c5e", -794 => x"75598817", -795 => x"61fc055b", -796 => x"5679a426", -797 => x"85ff387b", -798 => x"76595593", -799 => x"7a2780c9", -800 => x"387b7084", -801 => x"055d087c", -802 => x"56760c74", -803 => x"70840556", -804 => x"088c180c", -805 => x"9017589b", -806 => x"7a27ae38", -807 => x"74708405", -808 => x"5608780c", -809 => x"74708405", -810 => x"56089418", -811 => x"0c981758", -812 => x"a37a2795", -813 => x"38747084", -814 => x"05560878", -815 => x"0c747084", -816 => x"0556089c", -817 => x"180ca017", -818 => x"58747084", -819 => x"05560875", -820 => x"5f787084", -821 => x"055a0c77", -822 => x"7e708405", -823 => x"40087170", -824 => x"8405530c", -825 => x"7e08710c", -826 => x"5d787b31", -827 => x"56758f26", -828 => x"80c93884", -829 => x"17088106", -830 => x"79078418", -831 => x"0c781784", -832 => x"11088107", -833 => x"84120c5b", -834 => x"6151a791", -835 => x"3f881754", -836 => x"73800c93", -837 => x"3d0d0490", -838 => x"5bfdb839", -839 => x"7756fe83", -840 => x"398c1608", -841 => x"88170871", -842 => x"8c120c88", -843 => x"120c587e", -844 => x"707c3157", -845 => x"598f7627", -846 => x"ffb9387a", -847 => x"17841808", -848 => x"81067c07", -849 => x"84190c76", -850 => x"81078412", -851 => x"0c761184", -852 => x"11088107", -853 => x"84120c5b", -854 => x"88055261", -855 => x"518fda3f", -856 => x"6151a6b9", -857 => x"3f881754", -858 => x"ffa6397d", -859 => x"52615197", -860 => x"d73f8008", -861 => x"5a800880", -862 => x"2e81ab38", -863 => x"8008f805", -864 => x"60840508", -865 => x"fe066105", -866 => x"58557477", -867 => x"2e83f238", -868 => x"fc195877", -869 => x"a42681b0", -870 => x"387b8008", -871 => x"56579378", -872 => x"2780dc38", -873 => x"7b707084", -874 => x"05520880", -875 => x"08708405", -876 => x"800c0c80", -877 => x"08717084", -878 => x"0553085d", -879 => x"567b7670", -880 => x"8405580c", -881 => x"579b7827", -882 => x"b6387670", -883 => x"84055808", -884 => x"75708405", -885 => x"570c7670", -886 => x"84055808", -887 => x"75708405", -888 => x"570ca378", -889 => x"27993876", -890 => x"70840558", -891 => x"08757084", -892 => x"05570c76", -893 => x"70840558", -894 => x"08757084", -895 => x"05570c76", -896 => x"70840558", -897 => x"08775e75", -898 => x"70840557", -899 => x"0c747d70", -900 => x"84055f08", -901 => x"71708405", -902 => x"530c7d08", -903 => x"710c5f7b", -904 => x"5261518e", -905 => x"943f6151", -906 => x"a4f33f79", -907 => x"800c933d", -908 => x"0d047d52", -909 => x"61519690", -910 => x"3f800880", -911 => x"0c933d0d", -912 => x"04841608", -913 => x"55fbc939", -914 => x"77537b52", -915 => x"800851a2", -916 => x"a53f7b52", -917 => x"61518de1", -918 => x"3fcc398c", -919 => x"16088817", -920 => x"08718c12", -921 => x"0c88120c", -922 => x"5d8c1708", -923 => x"88180871", -924 => x"8c120c88", -925 => x"120c5977", -926 => x"59fbef39", -927 => x"7818901c", -928 => x"40557e75", -929 => x"24fb9c38", -930 => x"7a177080", -931 => x"d7a00b88", -932 => x"050c757c", -933 => x"31810784", -934 => x"120c5684", -935 => x"17088106", -936 => x"7b078418", -937 => x"0c6151a3", -938 => x"f43f8817", -939 => x"54fce139", -940 => x"74181990", -941 => x"1c5e5a7c", -942 => x"7a24fb8f", -943 => x"388c1708", -944 => x"88180871", -945 => x"8c120c88", -946 => x"120c5e88", -947 => x"1761fc05", -948 => x"575975a4", -949 => x"2681b638", -950 => x"7b795955", -951 => x"93762780", -952 => x"c9387b70", -953 => x"84055d08", -954 => x"7c56790c", -955 => x"74708405", -956 => x"56088c18", -957 => x"0c901758", -958 => x"9b7627ae", -959 => x"38747084", -960 => x"05560878", -961 => x"0c747084", -962 => x"05560894", -963 => x"180c9817", -964 => x"58a37627", -965 => x"95387470", -966 => x"84055608", -967 => x"780c7470", -968 => x"84055608", -969 => x"9c180ca0", -970 => x"17587470", -971 => x"84055608", -972 => x"75417870", -973 => x"84055a0c", -974 => x"77607084", -975 => x"05420871", -976 => x"70840553", -977 => x"0c600871", -978 => x"0c5e7a17", -979 => x"7080d7a0", -980 => x"0b88050c", -981 => x"7a7c3181", -982 => x"0784120c", -983 => x"58841708", -984 => x"81067b07", -985 => x"84180c61", -986 => x"51a2b23f", -987 => x"78547380", -988 => x"0c933d0d", -989 => x"0479537b", -990 => x"5275519f", -991 => x"f93ffae9", -992 => x"39841508", -993 => x"fc061960", -994 => x"5859fadd", -995 => x"3975537b", -996 => x"5278519f", -997 => x"e13f7a17", -998 => x"7080d7a0", -999 => x"0b88050c", -1000 => x"7a7c3181", -1001 => x"0784120c", -1002 => x"58841708", -1003 => x"81067b07", -1004 => x"84180c61", -1005 => x"51a1e63f", -1006 => x"7854ffb2", -1007 => x"39fa3d0d", -1008 => x"7880cfe4", -1009 => x"085455b8", -1010 => x"1308802e", -1011 => x"81af388c", -1012 => x"15227083", -1013 => x"ffff0670", -1014 => x"832a8132", -1015 => x"81065555", -1016 => x"5672802e", -1017 => x"80da3873", -1018 => x"842a8132", -1019 => x"810657ff", -1020 => x"537680f2", -1021 => x"3873822a", -1022 => x"81065473", -1023 => x"802eb938", -1024 => x"b0150854", -1025 => x"73802e9c", -1026 => x"3880c015", -1027 => x"5373732e", -1028 => x"8f387352", -1029 => x"80cfe408", -1030 => x"518a9e3f", -1031 => x"8c152256", -1032 => x"76b0160c", -1033 => x"75db0657", -1034 => x"768c1623", -1035 => x"800b8416", -1036 => x"0c901508", -1037 => x"750c7656", -1038 => x"75880754", -1039 => x"738c1623", -1040 => x"90150880", -1041 => x"2ebf388c", -1042 => x"15227081", -1043 => x"06555373", -1044 => x"9c38720a", -1045 => x"100a8106", -1046 => x"56758538", -1047 => x"94150854", -1048 => x"7388160c", -1049 => x"80537280", -1050 => x"0c883d0d", -1051 => x"04800b88", -1052 => x"160c9415", -1053 => x"08309816", -1054 => x"0c8053ea", -1055 => x"39725182", -1056 => x"a63ffecb", -1057 => x"3974518f", -1058 => x"bc3f8c15", -1059 => x"22708106", -1060 => x"55537380", -1061 => x"2effbb38", -1062 => x"d439f83d", -1063 => x"0d7a5776", -1064 => x"802e8197", -1065 => x"3880cfe4", -1066 => x"0854b814", -1067 => x"08802e80", -1068 => x"eb388c17", -1069 => x"2270902b", -1070 => x"70902c70", -1071 => x"832a8132", -1072 => x"81065b5b", -1073 => x"57557780", -1074 => x"cb389017", -1075 => x"08567580", -1076 => x"2e80c138", -1077 => x"76087631", -1078 => x"76780c79", -1079 => x"83065555", -1080 => x"73853894", -1081 => x"17085877", -1082 => x"88180c80", -1083 => x"7525a538", -1084 => x"74537552", -1085 => x"9c170851", -1086 => x"a4170854", -1087 => x"732d800b", -1088 => x"80082580", -1089 => x"c9388008", -1090 => x"16758008", -1091 => x"31565674", -1092 => x"8024dd38", -1093 => x"800b800c", -1094 => x"8a3d0d04", -1095 => x"73518187", -1096 => x"3f8c1722", -1097 => x"70902b70", -1098 => x"902c7083", -1099 => x"2a813281", -1100 => x"065b5b57", -1101 => x"5577dd38", -1102 => x"ff9039a1", -1103 => x"9a5280cf", -1104 => x"e408518c", -1105 => x"d03f8008", -1106 => x"800c8a3d", -1107 => x"0d048c17", -1108 => x"2280c007", -1109 => x"58778c18", -1110 => x"23ff0b80", -1111 => x"0c8a3d0d", -1112 => x"04fa3d0d", -1113 => x"797080dc", -1114 => x"298c1154", -1115 => x"7a535657", -1116 => x"8fd63f80", -1117 => x"08800855", -1118 => x"56800880", -1119 => x"2ea23880", -1120 => x"088c0554", -1121 => x"800b8008", -1122 => x"0c768008", -1123 => x"84050c73", -1124 => x"80088805", -1125 => x"0c745380", -1126 => x"5273519c", -1127 => x"f53f7554", -1128 => x"73800c88", -1129 => x"3d0d0470", -1130 => x"707074a8", -1131 => x"e60bbc12", -1132 => x"0c53810b", -1133 => x"b8140c80", -1134 => x"0b84dc14", -1135 => x"0c830b84", -1136 => x"e0140c84", -1137 => x"e81384e4", -1138 => x"140c8413", -1139 => x"08518070", -1140 => x"720c7084", -1141 => x"130c7088", -1142 => x"130c5284", -1143 => x"0b8c1223", -1144 => x"718e1223", -1145 => x"7190120c", -1146 => x"7194120c", -1147 => x"7198120c", -1148 => x"709c120c", -1149 => x"80c1d50b", -1150 => x"a0120c80", -1151 => x"c2a10ba4", -1152 => x"120c80c3", -1153 => x"9d0ba812", -1154 => x"0c80c3ee", -1155 => x"0bac120c", -1156 => x"88130872", -1157 => x"710c7284", -1158 => x"120c7288", -1159 => x"120c5189", -1160 => x"0b8c1223", -1161 => x"810b8e12", -1162 => x"23719012", -1163 => x"0c719412", -1164 => x"0c719812", -1165 => x"0c709c12", -1166 => x"0c80c1d5", -1167 => x"0ba0120c", -1168 => x"80c2a10b", -1169 => x"a4120c80", -1170 => x"c39d0ba8", -1171 => x"120c80c3", -1172 => x"ee0bac12", -1173 => x"0c8c1308", -1174 => x"72710c72", -1175 => x"84120c72", -1176 => x"88120c51", -1177 => x"8a0b8c12", -1178 => x"23820b8e", -1179 => x"12237190", -1180 => x"120c7194", -1181 => x"120c7198", -1182 => x"120c709c", -1183 => x"120c80c1", -1184 => x"d50ba012", -1185 => x"0c80c2a1", -1186 => x"0ba4120c", -1187 => x"80c39d0b", -1188 => x"a8120c80", -1189 => x"c3ee0bac", -1190 => x"120c5050", -1191 => x"5004f83d", -1192 => x"0d7a80cf", -1193 => x"e408b811", -1194 => x"08575758", -1195 => x"7481ec38", -1196 => x"a8e60bbc", -1197 => x"170c810b", -1198 => x"b8170c74", -1199 => x"84dc170c", -1200 => x"830b84e0", -1201 => x"170c84e8", -1202 => x"1684e417", -1203 => x"0c841608", -1204 => x"75710c75", -1205 => x"84120c75", -1206 => x"88120c59", -1207 => x"840b8c1a", -1208 => x"23748e1a", -1209 => x"2374901a", -1210 => x"0c74941a", -1211 => x"0c74981a", -1212 => x"0c789c1a", -1213 => x"0c80c1d5", -1214 => x"0ba01a0c", -1215 => x"80c2a10b", -1216 => x"a41a0c80", -1217 => x"c39d0ba8", -1218 => x"1a0c80c3", -1219 => x"ee0bac1a", -1220 => x"0c881608", -1221 => x"75710c75", -1222 => x"84120c75", -1223 => x"88120c57", -1224 => x"890b8c18", -1225 => x"23810b8e", -1226 => x"18237490", -1227 => x"180c7494", -1228 => x"180c7498", -1229 => x"180c769c", -1230 => x"180c80c1", -1231 => x"d50ba018", -1232 => x"0c80c2a1", -1233 => x"0ba4180c", -1234 => x"80c39d0b", -1235 => x"a8180c80", -1236 => x"c3ee0bac", -1237 => x"180c8c16", -1238 => x"0875710c", -1239 => x"7584120c", -1240 => x"7588120c", -1241 => x"548a0b8c", -1242 => x"1523820b", -1243 => x"8e152374", -1244 => x"90150c74", -1245 => x"94150c74", -1246 => x"98150c73", -1247 => x"9c150c80", -1248 => x"c1d50ba0", -1249 => x"150c80c2", -1250 => x"a10ba415", -1251 => x"0c80c39d", -1252 => x"0ba8150c", -1253 => x"80c3ee0b", -1254 => x"ac150c84", -1255 => x"dc168811", -1256 => x"08841208", -1257 => x"ff055757", -1258 => x"57807524", -1259 => x"9f388c16", -1260 => x"2270902b", -1261 => x"70902c51", -1262 => x"55597380", -1263 => x"2e80ed38", -1264 => x"80dc16ff", -1265 => x"16565674", -1266 => x"8025e338", -1267 => x"76085574", -1268 => x"802e8f38", -1269 => x"74881108", -1270 => x"841208ff", -1271 => x"05575757", -1272 => x"c83982fc", -1273 => x"5277518a", -1274 => x"df3f8008", -1275 => x"80085556", -1276 => x"8008802e", -1277 => x"a3388008", -1278 => x"8c057580", -1279 => x"080c5484", -1280 => x"0b800884", -1281 => x"050c7380", -1282 => x"0888050c", -1283 => x"82f05374", -1284 => x"52735197", -1285 => x"fd3f7554", -1286 => x"7374780c", -1287 => x"5573ffb4", -1288 => x"388c780c", -1289 => x"800b800c", -1290 => x"8a3d0d04", -1291 => x"810b8c17", -1292 => x"2373760c", -1293 => x"7388170c", -1294 => x"7384170c", -1295 => x"7390170c", -1296 => x"7394170c", -1297 => x"7398170c", -1298 => x"ff0b8e17", -1299 => x"2373b017", -1300 => x"0c73b417", -1301 => x"0c7380c4", -1302 => x"170c7380", -1303 => x"c8170c75", -1304 => x"800c8a3d", -1305 => x"0d047070", -1306 => x"a19a5273", -1307 => x"5186a63f", -1308 => x"50500470", -1309 => x"70a19a52", -1310 => x"80cfe408", -1311 => x"5186963f", -1312 => x"505004fb", -1313 => x"3d0d7770", -1314 => x"52569890", -1315 => x"3f80d7a0", -1316 => x"0b880508", -1317 => x"841108fc", -1318 => x"06707b31", -1319 => x"9fef05e0", -1320 => x"8006e080", -1321 => x"05525555", -1322 => x"a0807524", -1323 => x"94388052", -1324 => x"755197ea", -1325 => x"3f80d7a8", -1326 => x"08145372", -1327 => x"80082e8f", -1328 => x"38755197", -1329 => x"d83f8053", -1330 => x"72800c87", -1331 => x"3d0d0474", -1332 => x"30527551", -1333 => x"97c83f80", -1334 => x"08ff2ea8", -1335 => x"3880d7a0", -1336 => x"0b880508", -1337 => x"74763181", -1338 => x"0784120c", -1339 => x"5380d6e4", -1340 => x"08753180", -1341 => x"d6e40c75", -1342 => x"5197a23f", -1343 => x"810b800c", -1344 => x"873d0d04", -1345 => x"80527551", -1346 => x"97943f80", -1347 => x"d7a00b88", -1348 => x"05088008", -1349 => x"71315454", -1350 => x"8f7325ff", -1351 => x"a4388008", -1352 => x"80d79408", -1353 => x"3180d6e4", -1354 => x"0c728107", -1355 => x"84150c75", -1356 => x"5196ea3f", -1357 => x"8053ff90", -1358 => x"39f73d0d", -1359 => x"7b7d545a", -1360 => x"72802e82", -1361 => x"83387951", -1362 => x"96d23ff8", -1363 => x"13841108", -1364 => x"70fe0670", -1365 => x"13841108", -1366 => x"fc065c57", -1367 => x"58545780", -1368 => x"d7a80874", -1369 => x"2e82de38", -1370 => x"7784150c", -1371 => x"80738106", -1372 => x"56597479", -1373 => x"2e81d538", -1374 => x"77148411", -1375 => x"08810656", -1376 => x"5374a038", -1377 => x"77165678", -1378 => x"81e63888", -1379 => x"14085574", -1380 => x"80d7a82e", -1381 => x"82f9388c", -1382 => x"1408708c", -1383 => x"170c7588", -1384 => x"120c5875", -1385 => x"81078418", -1386 => x"0c751776", -1387 => x"710c5478", -1388 => x"81913883", -1389 => x"ff762781", -1390 => x"c8387589", -1391 => x"2a76832a", -1392 => x"54547380", -1393 => x"2ebf3875", -1394 => x"862ab805", -1395 => x"53847427", -1396 => x"b43880db", -1397 => x"14539474", -1398 => x"27ab3875", -1399 => x"8c2a80ee", -1400 => x"055380d4", -1401 => x"74279e38", -1402 => x"758f2a80", -1403 => x"f7055382", -1404 => x"d4742791", -1405 => x"3875922a", -1406 => x"80fc0553", -1407 => x"8ad47427", -1408 => x"843880fe", -1409 => x"53721010", -1410 => x"1080d7a0", -1411 => x"05881108", -1412 => x"55557375", -1413 => x"2e82bf38", -1414 => x"841408fc", -1415 => x"06597579", -1416 => x"278d3888", -1417 => x"14085473", -1418 => x"752e0981", -1419 => x"06ea388c", -1420 => x"1408708c", -1421 => x"190c7488", -1422 => x"190c7788", -1423 => x"120c5576", -1424 => x"8c150c79", -1425 => x"5194d63f", -1426 => x"8b3d0d04", -1427 => x"76087771", -1428 => x"31587605", -1429 => x"88180856", -1430 => x"567480d7", -1431 => x"a82e80e0", -1432 => x"388c1708", -1433 => x"708c170c", -1434 => x"7588120c", -1435 => x"53fe8939", -1436 => x"8814088c", -1437 => x"1508708c", -1438 => x"130c5988", -1439 => x"190cfea3", -1440 => x"3975832a", -1441 => x"70545480", -1442 => x"74248198", -1443 => x"3872822c", -1444 => x"81712b80", -1445 => x"d7a40807", -1446 => x"80d7a00b", -1447 => x"84050c74", -1448 => x"10101080", -1449 => x"d7a00588", -1450 => x"1108718c", -1451 => x"1b0c7088", -1452 => x"1b0c7988", -1453 => x"130c565a", -1454 => x"55768c15", -1455 => x"0cff8439", -1456 => x"8159fdb4", -1457 => x"39771673", -1458 => x"81065455", -1459 => x"72983876", -1460 => x"08777131", -1461 => x"5875058c", -1462 => x"18088819", -1463 => x"08718c12", -1464 => x"0c88120c", -1465 => x"55557481", -1466 => x"0784180c", -1467 => x"7680d7a0", -1468 => x"0b88050c", -1469 => x"80d79c08", -1470 => x"7526fec7", -1471 => x"3880d798", -1472 => x"08527951", -1473 => x"fafd3f79", -1474 => x"5193923f", -1475 => x"feba3981", -1476 => x"778c170c", -1477 => x"7788170c", -1478 => x"758c190c", -1479 => x"7588190c", -1480 => x"59fd8039", -1481 => x"83147082", -1482 => x"2c81712b", -1483 => x"80d7a408", -1484 => x"0780d7a0", -1485 => x"0b84050c", -1486 => x"75101010", -1487 => x"80d7a005", -1488 => x"88110871", -1489 => x"8c1c0c70", -1490 => x"881c0c7a", -1491 => x"88130c57", -1492 => x"5b5653fe", -1493 => x"e4398073", -1494 => x"24a33872", -1495 => x"822c8171", -1496 => x"2b80d7a4", -1497 => x"080780d7", -1498 => x"a00b8405", -1499 => x"0c58748c", -1500 => x"180c7388", -1501 => x"180c7688", -1502 => x"160cfdc3", -1503 => x"39831370", -1504 => x"822c8171", -1505 => x"2b80d7a4", -1506 => x"080780d7", -1507 => x"a00b8405", -1508 => x"0c5953da", -1509 => x"39f93d0d", -1510 => x"797b5853", -1511 => x"800b80cf", -1512 => x"e4085356", -1513 => x"72722ebc", -1514 => x"3884dc13", -1515 => x"5574762e", -1516 => x"b3388815", -1517 => x"08841608", -1518 => x"ff055454", -1519 => x"80732499", -1520 => x"388c1422", -1521 => x"70902b53", -1522 => x"587180d4", -1523 => x"3880dc14", -1524 => x"ff145454", -1525 => x"728025e9", -1526 => x"38740855", -1527 => x"74d43880", -1528 => x"cfe40852", -1529 => x"84dc1255", -1530 => x"74802ead", -1531 => x"38881508", -1532 => x"841608ff", -1533 => x"05545480", -1534 => x"73249838", -1535 => x"8c142270", -1536 => x"902b5358", -1537 => x"71ad3880", -1538 => x"dc14ff14", -1539 => x"54547280", -1540 => x"25ea3874", -1541 => x"085574d5", -1542 => x"3875800c", -1543 => x"893d0d04", -1544 => x"7351762d", -1545 => x"75800807", -1546 => x"80dc15ff", -1547 => x"15555556", -1548 => x"ffa23973", -1549 => x"51762d75", -1550 => x"80080780", -1551 => x"dc15ff15", -1552 => x"555556ca", -1553 => x"39ea3d0d", -1554 => x"688c1122", -1555 => x"700a100a", -1556 => x"81065758", -1557 => x"567480e4", -1558 => x"388e1622", -1559 => x"70902b70", -1560 => x"902c5155", -1561 => x"58807424", -1562 => x"b138983d", -1563 => x"c4055373", -1564 => x"5280cfe4", -1565 => x"08519481", -1566 => x"3f800b80", -1567 => x"08249738", -1568 => x"7983e080", -1569 => x"06547380", -1570 => x"c0802e81", -1571 => x"8f387382", -1572 => x"80802e81", -1573 => x"91388c16", -1574 => x"22577690", -1575 => x"80075473", -1576 => x"8c172388", -1577 => x"805280cf", -1578 => x"e4085181", -1579 => x"9b3f8008", -1580 => x"9d388c16", -1581 => x"22820755", -1582 => x"748c1723", -1583 => x"80c31670", -1584 => x"770c9017", -1585 => x"0c810b94", -1586 => x"170c983d", -1587 => x"0d0480cf", -1588 => x"e408a8e6", -1589 => x"0bbc120c", -1590 => x"588c1622", -1591 => x"81800754", -1592 => x"738c1723", -1593 => x"8008760c", -1594 => x"80089017", -1595 => x"0c88800b", -1596 => x"94170c74", -1597 => x"802ed338", -1598 => x"8e162270", -1599 => x"902b7090", -1600 => x"2c535654", -1601 => x"9afe3f80", -1602 => x"08802eff", -1603 => x"bd388c16", -1604 => x"22810757", -1605 => x"768c1723", -1606 => x"983d0d04", -1607 => x"810b8c17", -1608 => x"225855fe", -1609 => x"f539a816", -1610 => x"0880c39d", -1611 => x"2e098106", -1612 => x"fee4388c", -1613 => x"16228880", -1614 => x"0754738c", -1615 => x"17238880", -1616 => x"0b80cc17", -1617 => x"0cfedc39", -1618 => x"f43d0d7e", -1619 => x"608b1170", -1620 => x"f8065b55", -1621 => x"555d7296", -1622 => x"26833890", -1623 => x"58807824", -1624 => x"74792607", -1625 => x"55805474", -1626 => x"742e0981", -1627 => x"0680ca38", -1628 => x"7c518ea8", -1629 => x"3f7783f7", -1630 => x"2680c538", -1631 => x"77832a70", -1632 => x"10101080", -1633 => x"d7a0058c", -1634 => x"11085858", -1635 => x"5475772e", -1636 => x"81f03884", -1637 => x"1608fc06", -1638 => x"8c170888", -1639 => x"1808718c", -1640 => x"120c8812", -1641 => x"0c5b7605", -1642 => x"84110881", -1643 => x"0784120c", -1644 => x"537c518d", -1645 => x"e83f8816", -1646 => x"5473800c", -1647 => x"8e3d0d04", -1648 => x"77892a78", -1649 => x"832a5854", -1650 => x"73802ebf", -1651 => x"3877862a", -1652 => x"b8055784", -1653 => x"7427b438", -1654 => x"80db1457", -1655 => x"947427ab", -1656 => x"38778c2a", -1657 => x"80ee0557", -1658 => x"80d47427", -1659 => x"9e38778f", -1660 => x"2a80f705", -1661 => x"5782d474", -1662 => x"27913877", -1663 => x"922a80fc", -1664 => x"05578ad4", -1665 => x"74278438", -1666 => x"80fe5776", -1667 => x"10101080", -1668 => x"d7a0058c", -1669 => x"11085653", -1670 => x"74732ea3", -1671 => x"38841508", -1672 => x"fc067079", -1673 => x"31555673", -1674 => x"8f2488e4", -1675 => x"38738025", -1676 => x"88e6388c", -1677 => x"15085574", -1678 => x"732e0981", -1679 => x"06df3881", -1680 => x"175980d7", -1681 => x"b0085675", -1682 => x"80d7a82e", -1683 => x"82cc3884", -1684 => x"1608fc06", -1685 => x"70793155", -1686 => x"55738f24", -1687 => x"bb3880d7", -1688 => x"a80b80d7", -1689 => x"b40c80d7", -1690 => x"a80b80d7", -1691 => x"b00c8074", -1692 => x"2480db38", -1693 => x"74168411", -1694 => x"08810784", -1695 => x"120c53fe", -1696 => x"b0398816", -1697 => x"8c110857", -1698 => x"5975792e", -1699 => x"098106fe", -1700 => x"82388214", -1701 => x"59ffab39", -1702 => x"77167881", -1703 => x"0784180c", -1704 => x"7080d7b4", -1705 => x"0c7080d7", -1706 => x"b00c80d7", -1707 => x"a80b8c12", -1708 => x"0c8c1108", -1709 => x"88120c74", -1710 => x"81078412", -1711 => x"0c740574", -1712 => x"710c5b7c", -1713 => x"518bd63f", -1714 => x"881654fd", -1715 => x"ec3983ff", -1716 => x"75278391", -1717 => x"3874892a", -1718 => x"75832a54", -1719 => x"5473802e", -1720 => x"bf387486", -1721 => x"2ab80553", -1722 => x"847427b4", -1723 => x"3880db14", -1724 => x"53947427", -1725 => x"ab38748c", -1726 => x"2a80ee05", -1727 => x"5380d474", -1728 => x"279e3874", -1729 => x"8f2a80f7", -1730 => x"055382d4", -1731 => x"74279138", -1732 => x"74922a80", -1733 => x"fc05538a", -1734 => x"d4742784", -1735 => x"3880fe53", -1736 => x"72101010", -1737 => x"80d7a005", -1738 => x"88110855", -1739 => x"5773772e", -1740 => x"868b3884", -1741 => x"1408fc06", -1742 => x"5b747b27", -1743 => x"8d388814", -1744 => x"08547377", -1745 => x"2e098106", -1746 => x"ea388c14", -1747 => x"0880d7a0", -1748 => x"0b840508", -1749 => x"718c190c", -1750 => x"7588190c", -1751 => x"7788130c", -1752 => x"5c57758c", -1753 => x"150c7853", -1754 => x"80792483", -1755 => x"98387282", -1756 => x"2c81712b", -1757 => x"5656747b", -1758 => x"2680ca38", -1759 => x"7a750657", -1760 => x"7682a338", -1761 => x"78fc0684", -1762 => x"05597410", -1763 => x"707c0655", -1764 => x"55738292", -1765 => x"38841959", -1766 => x"f13980d7", -1767 => x"a00b8405", -1768 => x"0879545b", -1769 => x"788025c6", -1770 => x"3882da39", -1771 => x"74097b06", -1772 => x"7080d7a0", -1773 => x"0b84050c", -1774 => x"5b741055", -1775 => x"747b2685", -1776 => x"387485bc", -1777 => x"3880d7a0", -1778 => x"0b880508", -1779 => x"70841208", -1780 => x"fc06707b", -1781 => x"317b7226", -1782 => x"8f722507", -1783 => x"5d575c5c", -1784 => x"5578802e", -1785 => x"80d93879", -1786 => x"1580d798", -1787 => x"08199011", -1788 => x"59545680", -1789 => x"d79408ff", -1790 => x"2e8838a0", -1791 => x"8f13e080", -1792 => x"06577652", -1793 => x"7c518996", -1794 => x"3f800854", -1795 => x"8008ff2e", -1796 => x"90388008", -1797 => x"762782a7", -1798 => x"387480d7", -1799 => x"a02e829f", -1800 => x"3880d7a0", -1801 => x"0b880508", -1802 => x"55841508", -1803 => x"fc067079", -1804 => x"31797226", -1805 => x"8f722507", -1806 => x"5d555a7a", -1807 => x"83f23877", -1808 => x"81078416", -1809 => x"0c771570", -1810 => x"80d7a00b", -1811 => x"88050c74", -1812 => x"81078412", -1813 => x"0c567c51", -1814 => x"88c33f88", -1815 => x"15547380", -1816 => x"0c8e3d0d", -1817 => x"0474832a", -1818 => x"70545480", -1819 => x"7424819b", -1820 => x"3872822c", -1821 => x"81712b80", -1822 => x"d7a40807", -1823 => x"7080d7a0", -1824 => x"0b84050c", -1825 => x"75101010", -1826 => x"80d7a005", -1827 => x"88110871", -1828 => x"8c1b0c70", -1829 => x"881b0c79", -1830 => x"88130c57", -1831 => x"555c5575", -1832 => x"8c150cfd", -1833 => x"c1397879", -1834 => x"10101080", -1835 => x"d7a00570", -1836 => x"565b5c8c", -1837 => x"14085675", -1838 => x"742ea338", -1839 => x"841608fc", -1840 => x"06707931", -1841 => x"5853768f", -1842 => x"2483f138", -1843 => x"76802584", -1844 => x"af388c16", -1845 => x"08567574", -1846 => x"2e098106", -1847 => x"df388814", -1848 => x"811a7083", -1849 => x"06555a54", -1850 => x"72c9387b", -1851 => x"83065675", -1852 => x"802efdb8", -1853 => x"38ff1cf8", -1854 => x"1b5b5c88", -1855 => x"1a087a2e", -1856 => x"ea38fdb5", -1857 => x"39831953", -1858 => x"fce43983", -1859 => x"1470822c", -1860 => x"81712b80", -1861 => x"d7a40807", -1862 => x"7080d7a0", -1863 => x"0b84050c", -1864 => x"76101010", -1865 => x"80d7a005", -1866 => x"88110871", -1867 => x"8c1c0c70", -1868 => x"881c0c7a", -1869 => x"88130c58", -1870 => x"535d5653", -1871 => x"fee13980", -1872 => x"d6e40817", -1873 => x"59800876", -1874 => x"2e818b38", -1875 => x"80d79408", -1876 => x"ff2e848e", -1877 => x"38737631", -1878 => x"1980d6e4", -1879 => x"0c738706", -1880 => x"70565372", -1881 => x"802e8838", -1882 => x"88733170", -1883 => x"15555576", -1884 => x"149fff06", -1885 => x"a0807131", -1886 => x"1670547e", -1887 => x"53515386", -1888 => x"9d3f8008", -1889 => x"568008ff", -1890 => x"2e819e38", -1891 => x"80d6e408", -1892 => x"137080d6", -1893 => x"e40c7475", -1894 => x"80d7a00b", -1895 => x"88050c77", -1896 => x"76311581", -1897 => x"07555659", -1898 => x"7a80d7a0", -1899 => x"2e83c038", -1900 => x"798f2682", -1901 => x"ef38810b", -1902 => x"84150c84", -1903 => x"1508fc06", -1904 => x"70793179", -1905 => x"72268f72", -1906 => x"25075d55", -1907 => x"5a7a802e", -1908 => x"fced3880", -1909 => x"db398008", -1910 => x"9fff0655", -1911 => x"74feed38", -1912 => x"7880d6e4", -1913 => x"0c80d7a0", -1914 => x"0b880508", -1915 => x"7a188107", -1916 => x"84120c55", -1917 => x"80d79008", -1918 => x"79278638", -1919 => x"7880d790", -1920 => x"0c80d78c", -1921 => x"087927fc", -1922 => x"a0387880", -1923 => x"d78c0c84", -1924 => x"1508fc06", -1925 => x"70793179", -1926 => x"72268f72", -1927 => x"25075d55", -1928 => x"5a7a802e", -1929 => x"fc993888", -1930 => x"39807457", -1931 => x"53fedd39", -1932 => x"7c5184e9", -1933 => x"3f800b80", -1934 => x"0c8e3d0d", -1935 => x"04807324", -1936 => x"a5387282", -1937 => x"2c81712b", -1938 => x"80d7a408", -1939 => x"077080d7", -1940 => x"a00b8405", -1941 => x"0c5c5a76", -1942 => x"8c170c73", -1943 => x"88170c75", -1944 => x"88180cf9", -1945 => x"fd398313", -1946 => x"70822c81", -1947 => x"712b80d7", -1948 => x"a4080770", -1949 => x"80d7a00b", -1950 => x"84050c5d", -1951 => x"5b53d839", -1952 => x"7a75065c", -1953 => x"7bfc9f38", -1954 => x"84197510", -1955 => x"5659f139", -1956 => x"ff178105", -1957 => x"59f7ab39", -1958 => x"8c150888", -1959 => x"1608718c", -1960 => x"120c8812", -1961 => x"0c597515", -1962 => x"84110881", -1963 => x"0784120c", -1964 => x"587c5183", -1965 => x"e83f8815", -1966 => x"54fba339", -1967 => x"77167881", -1968 => x"0784180c", -1969 => x"8c170888", -1970 => x"1808718c", -1971 => x"120c8812", -1972 => x"0c5c7080", -1973 => x"d7b40c70", -1974 => x"80d7b00c", -1975 => x"80d7a80b", -1976 => x"8c120c8c", -1977 => x"11088812", -1978 => x"0c778107", -1979 => x"84120c77", -1980 => x"0577710c", -1981 => x"557c5183", -1982 => x"a43f8816", -1983 => x"54f5ba39", -1984 => x"72168411", -1985 => x"08810784", -1986 => x"120c588c", -1987 => x"16088817", -1988 => x"08718c12", -1989 => x"0c88120c", -1990 => x"577c5183", -1991 => x"803f8816", -1992 => x"54f59639", -1993 => x"7284150c", -1994 => x"f41af806", -1995 => x"70841d08", -1996 => x"81060784", -1997 => x"1d0c701c", -1998 => x"5556850b", -1999 => x"84150c85", -2000 => x"0b88150c", -2001 => x"8f7627fd", -2002 => x"ab38881b", -2003 => x"527c51eb", -2004 => x"e83f80d7", -2005 => x"a00b8805", -2006 => x"0880d6e4", -2007 => x"085a55fd", -2008 => x"93397880", -2009 => x"d6e40c73", -2010 => x"80d7940c", -2011 => x"fbef3972", -2012 => x"84150cfc", -2013 => x"ff39fb3d", -2014 => x"0d77707a", -2015 => x"7c585553", -2016 => x"568f7527", -2017 => x"80e63872", -2018 => x"76078306", -2019 => x"517080dc", -2020 => x"38757352", -2021 => x"54707084", -2022 => x"05520874", -2023 => x"70840556", -2024 => x"0c737170", -2025 => x"84055308", -2026 => x"71708405", -2027 => x"530c7170", -2028 => x"84055308", -2029 => x"71708405", -2030 => x"530c7170", -2031 => x"84055308", -2032 => x"71708405", -2033 => x"530cf016", -2034 => x"5654748f", -2035 => x"26c73883", -2036 => x"75279538", -2037 => x"70708405", -2038 => x"52087470", -2039 => x"8405560c", -2040 => x"fc155574", -2041 => x"8326ed38", -2042 => x"73715452", -2043 => x"ff155170", -2044 => x"ff2e9838", -2045 => x"72708105", -2046 => x"54337270", -2047 => x"81055434", -2048 => x"ff115170", -2049 => x"ff2e0981", -2050 => x"06ea3875", -2051 => x"800c873d", -2052 => x"0d04fb3d", -2053 => x"0d777a71", -2054 => x"028c05a3", -2055 => x"05335854", -2056 => x"54568373", -2057 => x"2780d438", -2058 => x"75830651", -2059 => x"7080cc38", -2060 => x"74882b75", -2061 => x"07707190", -2062 => x"2b075551", -2063 => x"8f7327a7", -2064 => x"38737270", -2065 => x"8405540c", -2066 => x"71747170", -2067 => x"8405530c", -2068 => x"74717084", -2069 => x"05530c74", -2070 => x"71708405", -2071 => x"530cf014", -2072 => x"5452728f", -2073 => x"26db3883", -2074 => x"73279038", -2075 => x"73727084", -2076 => x"05540cfc", -2077 => x"13537283", -2078 => x"26f238ff", -2079 => x"135170ff", -2080 => x"2e933874", -2081 => x"72708105", -2082 => x"5434ff11", -2083 => x"5170ff2e", -2084 => x"098106ef", -2085 => x"3875800c", -2086 => x"873d0d04", -2087 => x"04047070", -2088 => x"7070800b", -2089 => x"80dfe00c", -2090 => x"765184f3", -2091 => x"3f800853", -2092 => x"8008ff2e", -2093 => x"89387280", -2094 => x"0c505050", -2095 => x"500480df", -2096 => x"e0085473", -2097 => x"802eef38", -2098 => x"7574710c", -2099 => x"5272800c", -2100 => x"50505050", -2101 => x"04f93d0d", -2102 => x"797c557b", -2103 => x"548e1122", -2104 => x"70902b70", -2105 => x"902c5557", -2106 => x"80cfe408", -2107 => x"53585683", -2108 => x"f63f8008", -2109 => x"57800b80", -2110 => x"08249338", -2111 => x"80d01608", -2112 => x"80080580", -2113 => x"d0170c76", -2114 => x"800c893d", -2115 => x"0d048c16", -2116 => x"2283dfff", -2117 => x"0655748c", -2118 => x"17237680", -2119 => x"0c893d0d", -2120 => x"04fa3d0d", -2121 => x"788c1122", -2122 => x"70882a70", -2123 => x"81065157", -2124 => x"585674a9", -2125 => x"388c1622", -2126 => x"83dfff06", -2127 => x"55748c17", -2128 => x"237a5479", -2129 => x"538e1622", -2130 => x"70902b70", -2131 => x"902c5456", -2132 => x"80cfe408", -2133 => x"525681b2", -2134 => x"3f883d0d", -2135 => x"04825480", -2136 => x"538e1622", -2137 => x"70902b70", -2138 => x"902c5456", -2139 => x"80cfe408", -2140 => x"525782bb", -2141 => x"3f8c1622", -2142 => x"83dfff06", -2143 => x"55748c17", -2144 => x"237a5479", -2145 => x"538e1622", -2146 => x"70902b70", -2147 => x"902c5456", -2148 => x"80cfe408", -2149 => x"525680f2", -2150 => x"3f883d0d", -2151 => x"04f93d0d", -2152 => x"797c557b", -2153 => x"548e1122", -2154 => x"70902b70", -2155 => x"902c5557", -2156 => x"80cfe408", -2157 => x"53585681", -2158 => x"f63f8008", -2159 => x"578008ff", -2160 => x"2e99388c", -2161 => x"1622a080", -2162 => x"0755748c", -2163 => x"17238008", -2164 => x"80d0170c", -2165 => x"76800c89", -2166 => x"3d0d048c", -2167 => x"162283df", -2168 => x"ff065574", -2169 => x"8c172376", -2170 => x"800c893d", -2171 => x"0d047070", -2172 => x"70748e11", -2173 => x"2270902b", -2174 => x"70902c55", -2175 => x"51515380", -2176 => x"cfe40851", -2177 => x"bd3f5050", -2178 => x"5004fb3d", -2179 => x"0d800b80", -2180 => x"dfe00c7a", -2181 => x"53795278", -2182 => x"5182ff3f", -2183 => x"80085580", -2184 => x"08ff2e88", -2185 => x"3874800c", -2186 => x"873d0d04", -2187 => x"80dfe008", -2188 => x"5675802e", -2189 => x"f0387776", -2190 => x"710c5474", -2191 => x"800c873d", -2192 => x"0d047070", -2193 => x"7070800b", -2194 => x"80dfe00c", -2195 => x"765184cc", -2196 => x"3f800853", -2197 => x"8008ff2e", -2198 => x"89387280", -2199 => x"0c505050", -2200 => x"500480df", -2201 => x"e0085473", -2202 => x"802eef38", -2203 => x"7574710c", -2204 => x"5272800c", -2205 => x"50505050", -2206 => x"04fc3d0d", -2207 => x"800b80df", -2208 => x"e00c7852", -2209 => x"775187b3", -2210 => x"3f800854", -2211 => x"8008ff2e", -2212 => x"88387380", -2213 => x"0c863d0d", -2214 => x"0480dfe0", -2215 => x"08557480", -2216 => x"2ef03876", -2217 => x"75710c53", -2218 => x"73800c86", -2219 => x"3d0d04fb", -2220 => x"3d0d800b", -2221 => x"80dfe00c", -2222 => x"7a537952", -2223 => x"7851848e", -2224 => x"3f800855", -2225 => x"8008ff2e", -2226 => x"88387480", -2227 => x"0c873d0d", -2228 => x"0480dfe0", -2229 => x"08567580", -2230 => x"2ef03877", -2231 => x"76710c54", -2232 => x"74800c87", -2233 => x"3d0d04fb", -2234 => x"3d0d800b", -2235 => x"80dfe00c", -2236 => x"7a537952", -2237 => x"78518296", -2238 => x"3f800855", -2239 => x"8008ff2e", -2240 => x"88387480", -2241 => x"0c873d0d", -2242 => x"0480dfe0", -2243 => x"08567580", -2244 => x"2ef03877", -2245 => x"76710c54", -2246 => x"74800c87", -2247 => x"3d0d0470", -2248 => x"707080df", -2249 => x"d0088938", -2250 => x"80dfe40b", -2251 => x"80dfd00c", -2252 => x"80dfd008", -2253 => x"75115252", -2254 => x"ff537087", -2255 => x"fb808026", -2256 => x"88387080", -2257 => x"dfd00c71", -2258 => x"5372800c", -2259 => x"50505004", -2260 => x"fd3d0d80", -2261 => x"0b80cfd8", -2262 => x"08545472", -2263 => x"812e9b38", -2264 => x"7380dfd4", -2265 => x"0cc2bf3f", -2266 => x"c1963f80", -2267 => x"dfa85281", -2268 => x"51c3fd3f", -2269 => x"80085186", -2270 => x"c23f7280", -2271 => x"dfd40cc2", -2272 => x"a53fc0fc", -2273 => x"3f80dfa8", -2274 => x"528151c3", -2275 => x"e33f8008", -2276 => x"5186a83f", -2277 => x"00ff3900", -2278 => x"ff39f53d", -2279 => x"0d7e6080", -2280 => x"dfd40870", -2281 => x"5b585b5b", -2282 => x"7580c238", -2283 => x"777a25a1", -2284 => x"38771b70", -2285 => x"337081ff", -2286 => x"06585859", -2287 => x"758a2e98", -2288 => x"387681ff", -2289 => x"0651c1bd", -2290 => x"3f811858", -2291 => x"797824e1", -2292 => x"3879800c", -2293 => x"8d3d0d04", -2294 => x"8d51c1a9", -2295 => x"3f783370", -2296 => x"81ff0652", -2297 => x"57c19e3f", -2298 => x"811858e0", -2299 => x"3979557a", -2300 => x"547d5385", -2301 => x"528d3dfc", -2302 => x"0551c0c6", -2303 => x"3f800856", -2304 => x"85b23f7b", -2305 => x"80080c75", -2306 => x"800c8d3d", -2307 => x"0d04f63d", -2308 => x"0d7d7f80", -2309 => x"dfd40870", -2310 => x"5b585a5a", -2311 => x"7580c138", -2312 => x"777925b3", -2313 => x"38c0b93f", -2314 => x"800881ff", -2315 => x"06708d32", -2316 => x"7030709f", -2317 => x"2a515157", -2318 => x"57768a2e", -2319 => x"80c43875", -2320 => x"802ebf38", -2321 => x"771a5676", -2322 => x"76347651", -2323 => x"c0b73f81", -2324 => x"18587878", -2325 => x"24cf3877", -2326 => x"5675800c", -2327 => x"8c3d0d04", -2328 => x"78557954", -2329 => x"7c538452", -2330 => x"8c3dfc05", -2331 => x"51ffbfd2", -2332 => x"3f800856", -2333 => x"84be3f7a", -2334 => x"80080c75", -2335 => x"800c8c3d", -2336 => x"0d04771a", -2337 => x"598a7934", -2338 => x"8118588d", -2339 => x"51ffbff5", -2340 => x"3f8a51ff", -2341 => x"bfef3f77", -2342 => x"56ffbe39", -2343 => x"fb3d0d80", -2344 => x"dfd40870", -2345 => x"56547388", -2346 => x"3874800c", -2347 => x"873d0d04", -2348 => x"77538352", -2349 => x"873dfc05", -2350 => x"51ffbf86", -2351 => x"3f800854", -2352 => x"83f23f75", -2353 => x"80080c73", -2354 => x"800c873d", -2355 => x"0d04fa3d", -2356 => x"0d80dfd4", -2357 => x"08802ea3", -2358 => x"387a5579", -2359 => x"54785386", -2360 => x"52883dfc", -2361 => x"0551ffbe", -2362 => x"d93f8008", -2363 => x"5683c53f", -2364 => x"7680080c", -2365 => x"75800c88", -2366 => x"3d0d0483", -2367 => x"b73f9d0b", -2368 => x"80080cff", -2369 => x"0b800c88", -2370 => x"3d0d04f7", -2371 => x"3d0d7b7d", -2372 => x"5b59bc53", -2373 => x"80527951", -2374 => x"f5f83f80", -2375 => x"70565798", -2376 => x"56741970", -2377 => x"3370782b", -2378 => x"79078118", -2379 => x"f81a5a58", -2380 => x"59555884", -2381 => x"7524ea38", -2382 => x"767a2384", -2383 => x"19588070", -2384 => x"56579856", -2385 => x"74187033", -2386 => x"70782b79", -2387 => x"078118f8", -2388 => x"1a5a5859", -2389 => x"51548475", -2390 => x"24ea3876", -2391 => x"821b2388", -2392 => x"19588070", -2393 => x"56579856", -2394 => x"74187033", -2395 => x"70782b79", -2396 => x"078118f8", -2397 => x"1a5a5859", -2398 => x"51548475", -2399 => x"24ea3876", -2400 => x"841b0c8c", -2401 => x"19588070", -2402 => x"56579856", -2403 => x"74187033", -2404 => x"70782b79", -2405 => x"078118f8", -2406 => x"1a5a5859", -2407 => x"51548475", -2408 => x"24ea3876", -2409 => x"881b2390", -2410 => x"19588070", -2411 => x"56579856", -2412 => x"74187033", -2413 => x"70782b79", -2414 => x"078118f8", -2415 => x"1a5a5859", -2416 => x"51548475", -2417 => x"24ea3876", -2418 => x"8a1b2394", -2419 => x"19588070", -2420 => x"56579856", -2421 => x"74187033", -2422 => x"70782b79", -2423 => x"078118f8", -2424 => x"1a5a5859", -2425 => x"51548475", -2426 => x"24ea3876", -2427 => x"8c1b2398", -2428 => x"19588070", -2429 => x"56579856", -2430 => x"74187033", -2431 => x"70782b79", -2432 => x"078118f8", -2433 => x"1a5a5859", -2434 => x"51548475", -2435 => x"24ea3876", -2436 => x"8e1b239c", -2437 => x"19588070", -2438 => x"5657b856", -2439 => x"74187033", -2440 => x"70782b79", -2441 => x"078118f8", -2442 => x"1a5a5859", -2443 => x"5a548875", -2444 => x"24ea3876", -2445 => x"901b0c8b", -2446 => x"3d0d04e9", -2447 => x"3d0d6a80", -2448 => x"dfd40857", -2449 => x"57759338", -2450 => x"80c0800b", -2451 => x"84180c75", -2452 => x"ac180c75", -2453 => x"800c993d", -2454 => x"0d04893d", -2455 => x"70556a54", -2456 => x"558a5299", -2457 => x"3dffbc05", -2458 => x"51ffbbd6", -2459 => x"3f800877", -2460 => x"53755256", -2461 => x"fd953fbc", -2462 => x"3f778008", -2463 => x"0c75800c", -2464 => x"993d0d04", -2465 => x"fc3d0d81", -2466 => x"5480dfd4", -2467 => x"08883873", -2468 => x"800c863d", -2469 => x"0d047653", -2470 => x"97b95286", -2471 => x"3dfc0551", -2472 => x"ffbb9f3f", -2473 => x"8008548c", -2474 => x"3f748008", -2475 => x"0c73800c", -2476 => x"863d0d04", -2477 => x"80cfe408", -2478 => x"800c04f7", -2479 => x"3d0d7b80", -2480 => x"cfe40882", -2481 => x"c811085a", -2482 => x"545a7780", -2483 => x"2e80da38", -2484 => x"81881884", -2485 => x"1908ff05", -2486 => x"81712b59", -2487 => x"55598074", -2488 => x"2480ea38", -2489 => x"807424b5", -2490 => x"3873822b", -2491 => x"78118805", -2492 => x"56568180", -2493 => x"19087706", -2494 => x"5372802e", -2495 => x"b6387816", -2496 => x"70085353", -2497 => x"79517408", -2498 => x"53722dff", -2499 => x"14fc17fc", -2500 => x"1779812c", -2501 => x"5a575754", -2502 => x"738025d6", -2503 => x"38770858", -2504 => x"77ffad38", -2505 => x"80cfe408", -2506 => x"53bc1308", -2507 => x"a5387951", -2508 => x"f8e23f74", -2509 => x"0853722d", -2510 => x"ff14fc17", -2511 => x"fc177981", -2512 => x"2c5a5757", -2513 => x"54738025", -2514 => x"ffa838d1", -2515 => x"398057ff", -2516 => x"93397251", -2517 => x"bc130854", -2518 => x"732d7951", -2519 => x"f8b63f70", -2520 => x"7080dfb0", -2521 => x"0bfc0570", -2522 => x"08525270", -2523 => x"ff2e9138", -2524 => x"702dfc12", -2525 => x"70085252", -2526 => x"70ff2e09", -2527 => x"8106f138", -2528 => x"50500404", -2529 => x"ffbb8c3f", -2530 => x"04000000", -2531 => x"00000040", -2532 => x"48656c6c", -2533 => x"6f20776f", -2534 => x"726c6420", -2535 => x"310a0000", -2536 => x"48656c6c", -2537 => x"6f20776f", -2538 => x"726c6420", -2539 => x"320a0000", -2540 => x"0a000000", -2541 => x"43000000", -2542 => x"64756d6d", -2543 => x"792e6578", -2544 => x"65000000", -2545 => x"00ffffff", -2546 => x"ff00ffff", -2547 => x"ffff00ff", -2548 => x"ffffff00", -2549 => x"00000000", -2550 => x"00000000", -2551 => x"00000000", -2552 => x"00002fb8", -2553 => x"000027e8", -2554 => x"00000000", -2555 => x"00002a50", -2556 => x"00002aac", -2557 => x"00002b08", -2558 => x"00000000", -2559 => x"00000000", -2560 => x"00000000", -2561 => x"00000000", -2562 => x"00000000", -2563 => x"00000000", -2564 => x"00000000", -2565 => x"00000000", -2566 => x"00000000", -2567 => x"000027b4", -2568 => x"00000000", -2569 => x"00000000", -2570 => x"00000000", -2571 => x"00000000", -2572 => x"00000000", -2573 => x"00000000", -2574 => x"00000000", -2575 => x"00000000", -2576 => x"00000000", -2577 => x"00000000", -2578 => x"00000000", -2579 => x"00000000", -2580 => x"00000000", -2581 => x"00000000", -2582 => x"00000000", -2583 => x"00000000", -2584 => x"00000000", -2585 => x"00000000", -2586 => x"00000000", -2587 => x"00000000", -2588 => x"00000000", -2589 => x"00000000", -2590 => x"00000000", -2591 => x"00000000", -2592 => x"00000000", -2593 => x"00000000", -2594 => x"00000000", -2595 => x"00000000", -2596 => x"00000001", -2597 => x"330eabcd", -2598 => x"1234e66d", -2599 => x"deec0005", -2600 => x"000b0000", -2601 => x"00000000", -2602 => x"00000000", -2603 => x"00000000", -2604 => x"00000000", -2605 => x"00000000", -2606 => x"00000000", -2607 => x"00000000", -2608 => x"00000000", -2609 => x"00000000", -2610 => x"00000000", -2611 => x"00000000", -2612 => x"00000000", -2613 => x"00000000", -2614 => x"00000000", -2615 => x"00000000", -2616 => x"00000000", -2617 => x"00000000", -2618 => x"00000000", -2619 => x"00000000", -2620 => x"00000000", -2621 => x"00000000", -2622 => x"00000000", -2623 => x"00000000", -2624 => x"00000000", -2625 => x"00000000", -2626 => x"00000000", -2627 => x"00000000", -2628 => x"00000000", -2629 => x"00000000", -2630 => x"00000000", -2631 => x"00000000", -2632 => x"00000000", -2633 => x"00000000", -2634 => x"00000000", -2635 => x"00000000", -2636 => x"00000000", -2637 => x"00000000", -2638 => x"00000000", -2639 => x"00000000", -2640 => x"00000000", -2641 => x"00000000", -2642 => x"00000000", -2643 => x"00000000", -2644 => x"00000000", -2645 => x"00000000", -2646 => x"00000000", -2647 => x"00000000", -2648 => x"00000000", -2649 => x"00000000", -2650 => x"00000000", -2651 => x"00000000", -2652 => x"00000000", -2653 => x"00000000", -2654 => x"00000000", -2655 => x"00000000", -2656 => x"00000000", -2657 => x"00000000", -2658 => x"00000000", -2659 => x"00000000", -2660 => x"00000000", -2661 => x"00000000", -2662 => x"00000000", -2663 => x"00000000", -2664 => x"00000000", -2665 => x"00000000", -2666 => x"00000000", -2667 => x"00000000", -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"00000000", -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"00000000", -2707 => x"00000000", -2708 => x"00000000", -2709 => x"00000000", -2710 => x"00000000", -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"ffffffff", -2790 => x"00000000", -2791 => x"00020000", -2792 => x"00000000", -2793 => x"00000000", -2794 => x"00002ba0", -2795 => x"00002ba0", -2796 => x"00002ba8", -2797 => x"00002ba8", -2798 => x"00002bb0", -2799 => x"00002bb0", -2800 => x"00002bb8", -2801 => x"00002bb8", -2802 => x"00002bc0", -2803 => x"00002bc0", -2804 => x"00002bc8", -2805 => x"00002bc8", -2806 => x"00002bd0", -2807 => x"00002bd0", -2808 => x"00002bd8", -2809 => x"00002bd8", -2810 => x"00002be0", -2811 => x"00002be0", -2812 => x"00002be8", -2813 => x"00002be8", -2814 => x"00002bf0", -2815 => x"00002bf0", -2816 => x"00002bf8", -2817 => x"00002bf8", -2818 => x"00002c00", -2819 => x"00002c00", -2820 => x"00002c08", -2821 => x"00002c08", -2822 => x"00002c10", -2823 => x"00002c10", -2824 => x"00002c18", -2825 => x"00002c18", -2826 => x"00002c20", -2827 => x"00002c20", -2828 => x"00002c28", -2829 => x"00002c28", -2830 => x"00002c30", -2831 => x"00002c30", -2832 => x"00002c38", -2833 => x"00002c38", -2834 => x"00002c40", -2835 => x"00002c40", -2836 => x"00002c48", -2837 => x"00002c48", -2838 => x"00002c50", -2839 => x"00002c50", -2840 => x"00002c58", -2841 => x"00002c58", -2842 => x"00002c60", -2843 => x"00002c60", -2844 => x"00002c68", -2845 => x"00002c68", -2846 => x"00002c70", -2847 => x"00002c70", -2848 => x"00002c78", -2849 => x"00002c78", -2850 => x"00002c80", -2851 => x"00002c80", -2852 => x"00002c88", -2853 => x"00002c88", -2854 => x"00002c90", -2855 => x"00002c90", -2856 => x"00002c98", -2857 => x"00002c98", -2858 => x"00002ca0", -2859 => x"00002ca0", -2860 => x"00002ca8", -2861 => x"00002ca8", -2862 => x"00002cb0", -2863 => x"00002cb0", -2864 => x"00002cb8", -2865 => x"00002cb8", -2866 => x"00002cc0", -2867 => x"00002cc0", -2868 => x"00002cc8", -2869 => x"00002cc8", -2870 => x"00002cd0", -2871 => x"00002cd0", -2872 => x"00002cd8", -2873 => x"00002cd8", -2874 => x"00002ce0", -2875 => x"00002ce0", -2876 => x"00002ce8", -2877 => x"00002ce8", -2878 => x"00002cf0", -2879 => x"00002cf0", -2880 => x"00002cf8", -2881 => x"00002cf8", -2882 => x"00002d00", -2883 => x"00002d00", -2884 => x"00002d08", -2885 => x"00002d08", -2886 => x"00002d10", -2887 => x"00002d10", -2888 => x"00002d18", -2889 => x"00002d18", -2890 => x"00002d20", -2891 => x"00002d20", -2892 => x"00002d28", -2893 => x"00002d28", -2894 => x"00002d30", -2895 => x"00002d30", -2896 => x"00002d38", -2897 => x"00002d38", -2898 => x"00002d40", -2899 => x"00002d40", -2900 => x"00002d48", -2901 => x"00002d48", -2902 => x"00002d50", -2903 => x"00002d50", -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"000027b8", -3051 => x"ffffffff", -3052 => x"00000000", -3053 => x"ffffffff", -3054 => 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(to_integer(unsigned(memAAddr))) := memAWrite; - memARead <= memAWrite; - else - memARead <= ram(to_integer(unsigned(memAAddr))); - end if; - end if; -end process; - -process (clk) -begin - if (clk'event and clk = '1') then - if (memBWriteEnable = '1') then - ram(to_integer(unsigned(memBAddr))) := memBWrite; - memBRead <= memBWrite; - else - memBRead <= ram(to_integer(unsigned(memBAddr))); - end if; - end if; -end process; - - - - -end dualport_ram_arch; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(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 dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80cfd80c", +3 => x"3a0b0b80", +4 => x"c6d00400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c7972d", +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"0b0b80cf", +162 => x"c4738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8b", +171 => x"9f2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8b", +179 => x"e32d5050", +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"80cfd40c", +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"82c53f80", +257 => x"c6d93f04", +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"fe3d0d0b", +281 => x"0b80dfc0", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c0085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"d408802e", +299 => x"a43880cf", +300 => x"d808822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc00c", +304 => x"82a0800b", +305 => x"80dfc40c", +306 => x"8290800b", +307 => x"80dfc80c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc0", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfc40cf8", +314 => x"80808480", +315 => x"0b80dfc8", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c00c80c0", +320 => x"a880940b", +321 => x"80dfc40c", +322 => x"0b0b80cf", +323 => x"8c0b80df", +324 => x"c80c0470", +325 => x"7080dfcc", +326 => x"335170a7", +327 => x"3880cfe0", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe00c", +332 => x"702d80cf", +333 => x"e0087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfcc3450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"bc08802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfbc510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"fe3d0d89", +349 => x"5380cf90", +350 => x"5182c13f", +351 => x"80cfa051", +352 => x"82ba3f81", +353 => x"0a0b80df", +354 => x"d80cff0b", +355 => x"80dfdc0c", +356 => x"ff135372", +357 => x"8025de38", +358 => x"72800c84", +359 => x"3d0d04fb", +360 => x"3d0d7779", +361 => x"55558056", +362 => x"757524ab", +363 => x"38807424", +364 => x"9d388053", +365 => x"73527451", +366 => x"80e13f80", +367 => x"08547580", +368 => x"2e853880", +369 => x"08305473", +370 => x"800c873d", +371 => x"0d047330", +372 => x"76813257", +373 => x"54dc3974", +374 => x"30558156", +375 => x"738025d2", +376 => x"38ec39fa", +377 => x"3d0d787a", +378 => x"57558057", +379 => x"767524a4", +380 => x"38759f2c", +381 => x"54815375", +382 => x"74327431", +383 => x"5274519b", +384 => x"3f800854", +385 => x"76802e85", +386 => x"38800830", +387 => x"5473800c", +388 => x"883d0d04", +389 => x"74305581", +390 => x"57d739fc", +391 => x"3d0d7678", +392 => x"53548153", +393 => x"80747326", +394 => x"52557280", +395 => x"2e983870", +396 => x"802eab38", +397 => x"807224a6", +398 => x"38711073", +399 => x"10757226", +400 => x"53545272", +401 => x"ea387351", +402 => x"78833874", +403 => x"5170800c", +404 => x"863d0d04", +405 => x"720a100a", +406 => x"720a100a", +407 => x"53537280", +408 => x"2ee43871", +409 => x"7426ed38", +410 => x"73723175", +411 => x"7407740a", +412 => x"100a740a", +413 => x"100a5555", +414 => x"5654e339", +415 => x"f73d0d7c", +416 => x"70525380", +417 => x"f93f7254", +418 => x"80085580", +419 => x"cfb05681", +420 => x"57800881", +421 => x"055a8b3d", +422 => x"e4115953", +423 => x"8259f413", +424 => x"527b8811", +425 => x"08525381", +426 => x"b23f8008", +427 => x"30708008", +428 => x"079f2c8a", +429 => x"07800c53", +430 => x"8b3d0d04", +431 => x"f63d0d7c", +432 => x"80cfe408", +433 => x"71535553", +434 => x"b53f7255", +435 => x"80085680", +436 => x"cfb05781", +437 => x"58800881", +438 => x"055b8c3d", +439 => x"e4115a53", +440 => x"825af413", +441 => x"52881408", +442 => x"5180f03f", +443 => x"80083070", +444 => x"8008079f", +445 => x"2c8a0780", +446 => x"0c548c3d", +447 => x"0d047070", +448 => x"70707570", +449 => x"71830653", +450 => x"555270b4", +451 => x"38717008", +452 => x"7009f7fb", +453 => x"fdff1206", +454 => x"f8848281", +455 => x"80065452", +456 => x"53719b38", +457 => x"84137008", +458 => x"7009f7fb", +459 => x"fdff1206", +460 => x"f8848281", +461 => x"80065452", +462 => x"5371802e", +463 => x"e7387252", +464 => x"71335372", +465 => x"802e8a38", +466 => x"81127033", +467 => x"545272f8", +468 => x"38717431", +469 => x"800c5050", +470 => x"505004f2", +471 => x"3d0d6062", +472 => x"88110870", +473 => x"58565f5a", +474 => x"73802e81", +475 => x"8c388c1a", +476 => x"2270832a", +477 => x"81328106", +478 => x"56587486", +479 => x"38901a08", +480 => x"91387951", +481 => x"90b73fff", +482 => x"55800880", +483 => x"ec388c1a", +484 => x"22587d08", +485 => x"55807883", +486 => x"ffff0670", +487 => x"0a100a81", +488 => x"06415c57", +489 => x"7e772e80", +490 => x"d7387690", +491 => x"38740884", +492 => x"16088817", +493 => x"57585676", +494 => x"802ef238", +495 => x"76548880", +496 => x"77278438", +497 => x"88805473", +498 => x"5375529c", +499 => x"1a0851a4", +500 => x"1a085877", +501 => x"2d800b80", +502 => x"082582e0", +503 => x"38800816", +504 => x"77800831", +505 => x"7f880508", +506 => x"80083170", +507 => x"6188050c", +508 => x"5b585678", +509 => x"ffb43880", +510 => x"5574800c", +511 => x"903d0d04", +512 => x"7a813281", +513 => x"06774056", +514 => x"75802e81", +515 => x"bd387690", +516 => x"38740884", +517 => x"16088817", +518 => x"57585976", +519 => x"802ef238", +520 => x"881a0878", +521 => x"83ffff06", +522 => x"70892a81", +523 => x"06565956", +524 => x"73802e82", +525 => x"f8387577", +526 => x"278b3877", +527 => x"872a8106", +528 => x"5c7b82b5", +529 => x"38767627", +530 => x"83387656", +531 => x"75537852", +532 => x"79085185", +533 => x"833f881a", +534 => x"08763188", +535 => x"1b0c7908", +536 => x"167a0c76", +537 => x"56751977", +538 => x"77317f88", +539 => x"05087831", +540 => x"70618805", +541 => x"0c415859", +542 => x"7e802efe", +543 => x"fa388c1a", +544 => x"2258ff8a", +545 => x"39787954", +546 => x"7c537b52", +547 => x"5684c93f", +548 => x"881a0879", +549 => x"31881b0c", +550 => x"7908197a", +551 => x"0c7c7631", +552 => x"5d7c8e38", +553 => x"79518ff2", +554 => x"3f800881", +555 => x"8f388008", +556 => x"5f751c77", +557 => x"77317f88", +558 => x"05087831", +559 => x"70618805", +560 => x"0c5d585c", +561 => x"7a802efe", +562 => x"ae387681", +563 => x"83387408", +564 => x"84160888", +565 => x"1757585c", +566 => x"76802ef2", +567 => x"3876538a", +568 => x"527b5182", +569 => x"d33f8008", +570 => x"7c318105", +571 => x"5d800884", +572 => x"3881175d", +573 => x"815f7c59", +574 => x"767d2783", +575 => x"38765994", +576 => x"1a08881b", +577 => x"08115758", +578 => x"807a085c", +579 => x"54901a08", +580 => x"7b278338", +581 => x"81547579", +582 => x"25843873", +583 => x"ba387779", +584 => x"24fee238", +585 => x"77537b52", +586 => x"9c1a0851", +587 => x"a41a0859", +588 => x"782d8008", +589 => x"56800880", +590 => x"24fee238", +591 => x"8c1a2280", +592 => x"c0075e7d", +593 => x"8c1b23ff", +594 => x"5574800c", +595 => x"903d0d04", +596 => x"7effa338", +597 => x"ff873975", +598 => x"537b527a", +599 => x"5182f93f", +600 => x"7908167a", +601 => x"0c79518e", +602 => x"b13f8008", +603 => x"cf387c76", +604 => x"315d7cfe", +605 => x"bc38feac", +606 => x"39901a08", +607 => x"7a087131", +608 => x"78117056", +609 => x"5a575280", +610 => x"cfe40851", +611 => x"84943f80", +612 => x"08802eff", +613 => x"a7388008", +614 => x"901b0c80", +615 => x"08167a0c", +616 => x"77941b0c", +617 => x"76881b0c", +618 => x"7656fd99", +619 => x"39790858", +620 => x"901a0878", +621 => x"27833881", +622 => x"54757727", +623 => x"843873b3", +624 => x"38941a08", +625 => x"54737726", +626 => x"80d33873", +627 => x"5378529c", +628 => x"1a0851a4", +629 => x"1a085877", +630 => x"2d800856", +631 => x"80088024", +632 => x"fd83388c", +633 => x"1a2280c0", +634 => x"075e7d8c", +635 => x"1b23ff55", +636 => x"fed73975", +637 => x"53785277", +638 => x"5181dd3f", +639 => x"7908167a", +640 => x"0c79518d", +641 => x"953f8008", +642 => x"802efcd9", +643 => x"388c1a22", +644 => x"80c0075e", +645 => x"7d8c1b23", +646 => x"ff55fead", +647 => x"39767754", +648 => x"79537852", +649 => x"5681b13f", +650 => x"881a0877", +651 => x"31881b0c", +652 => x"7908177a", +653 => x"0cfcae39", +654 => x"fa3d0d7a", +655 => x"79028805", +656 => x"a7053355", +657 => x"53548374", +658 => x"2780df38", +659 => x"71830651", +660 => x"7080d738", +661 => x"71715755", +662 => x"83517582", +663 => x"802913ff", +664 => x"12525670", +665 => x"8025f338", +666 => x"837427bc", +667 => x"38740876", +668 => x"327009f7", +669 => x"fbfdff12", +670 => x"06f88482", +671 => x"81800651", +672 => x"5170802e", +673 => x"98387451", +674 => x"80527033", +675 => x"5772772e", +676 => x"b9388111", +677 => x"81135351", +678 => x"837227ee", +679 => x"38fc1484", +680 => x"16565473", +681 => x"8326c638", +682 => x"7452ff14", +683 => x"5170ff2e", +684 => x"97387133", +685 => x"5472742e", +686 => x"98388112", +687 => x"ff125252", +688 => x"70ff2e09", +689 => x"8106eb38", +690 => x"80517080", +691 => x"0c883d0d", +692 => x"0471800c", +693 => x"883d0d04", +694 => x"fa3d0d78", +695 => x"7a7c7272", +696 => x"72595755", +697 => x"58565774", +698 => x"7727b238", +699 => x"75155176", +700 => x"7127aa38", +701 => x"707618ff", +702 => x"18535353", +703 => x"70ff2e96", +704 => x"38ff12ff", +705 => x"14545272", +706 => x"337234ff", +707 => x"115170ff", +708 => x"2e098106", +709 => x"ec387680", +710 => x"0c883d0d", +711 => x"048f7627", +712 => x"80e63874", +713 => x"77078306", +714 => x"517080dc", +715 => x"38767552", +716 => x"53707084", +717 => x"05520873", +718 => x"70840555", +719 => x"0c727170", +720 => x"84055308", +721 => x"71708405", +722 => x"530c7170", +723 => x"84055308", +724 => x"71708405", +725 => x"530c7170", +726 => x"84055308", +727 => x"71708405", +728 => x"530cf015", +729 => x"5553738f", +730 => x"26c73883", +731 => x"74279538", +732 => x"70708405", +733 => x"52087370", +734 => x"8405550c", +735 => x"fc145473", +736 => x"8326ed38", +737 => x"72715452", +738 => x"ff145170", +739 => x"ff2eff86", +740 => x"38727081", +741 => x"05543372", +742 => x"70810554", +743 => x"34ff1151", +744 => x"ea39ef3d", +745 => x"0d636567", +746 => x"405d427b", +747 => x"802e8582", +748 => x"386151a9", +749 => x"e73ff81c", +750 => x"70841208", +751 => x"70fc0670", +752 => x"628b0570", +753 => x"f8064159", +754 => x"455c5f41", +755 => x"57967427", +756 => x"82c53880", +757 => x"7b247e7c", +758 => x"26075880", +759 => x"5477742e", +760 => x"09810682", +761 => x"ab38787b", +762 => x"2581fe38", +763 => x"781780d7", +764 => x"a00b8805", +765 => x"085b5679", +766 => x"762e84c5", +767 => x"38841608", +768 => x"70fe0617", +769 => x"84110881", +770 => x"06415555", +771 => x"7e828d38", +772 => x"74fc0658", +773 => x"79762e84", +774 => x"e3387818", +775 => x"5f7e7b25", +776 => x"81ff387c", +777 => x"81065473", +778 => x"82c13876", +779 => x"77083184", +780 => x"1108fc06", +781 => x"56577580", +782 => x"2e913879", +783 => x"762e84f0", +784 => x"38741819", +785 => x"58777b25", +786 => x"84913876", +787 => x"802e829b", +788 => x"38781556", +789 => x"7a762482", +790 => x"92388c17", +791 => x"08881808", +792 => x"718c120c", +793 => x"88120c5e", +794 => x"75598817", +795 => x"61fc055b", +796 => x"5679a426", +797 => x"85ff387b", +798 => x"76595593", +799 => x"7a2780c9", +800 => x"387b7084", +801 => x"055d087c", +802 => x"56760c74", +803 => x"70840556", +804 => x"088c180c", +805 => x"9017589b", +806 => x"7a27ae38", +807 => x"74708405", +808 => x"5608780c", +809 => x"74708405", +810 => x"56089418", +811 => x"0c981758", +812 => x"a37a2795", +813 => x"38747084", +814 => x"05560878", +815 => x"0c747084", +816 => x"0556089c", +817 => x"180ca017", +818 => x"58747084", +819 => x"05560875", +820 => x"5f787084", +821 => x"055a0c77", +822 => x"7e708405", +823 => x"40087170", +824 => x"8405530c", +825 => x"7e08710c", +826 => x"5d787b31", +827 => x"56758f26", +828 => x"80c93884", +829 => x"17088106", +830 => x"79078418", +831 => x"0c781784", +832 => x"11088107", +833 => x"84120c5b", +834 => x"6151a791", +835 => x"3f881754", +836 => x"73800c93", +837 => x"3d0d0490", +838 => x"5bfdb839", +839 => x"7756fe83", +840 => x"398c1608", +841 => x"88170871", +842 => x"8c120c88", +843 => x"120c587e", +844 => x"707c3157", +845 => x"598f7627", +846 => x"ffb9387a", +847 => x"17841808", +848 => x"81067c07", +849 => x"84190c76", +850 => x"81078412", +851 => x"0c761184", +852 => x"11088107", +853 => x"84120c5b", +854 => x"88055261", +855 => x"518fda3f", +856 => x"6151a6b9", +857 => x"3f881754", +858 => x"ffa6397d", +859 => x"52615197", +860 => x"d73f8008", +861 => x"5a800880", +862 => x"2e81ab38", +863 => x"8008f805", +864 => x"60840508", +865 => x"fe066105", +866 => x"58557477", +867 => x"2e83f238", +868 => x"fc195877", +869 => x"a42681b0", +870 => x"387b8008", +871 => x"56579378", +872 => x"2780dc38", +873 => x"7b707084", +874 => x"05520880", +875 => x"08708405", +876 => x"800c0c80", +877 => x"08717084", +878 => x"0553085d", +879 => x"567b7670", +880 => x"8405580c", +881 => x"579b7827", +882 => x"b6387670", +883 => x"84055808", +884 => x"75708405", +885 => x"570c7670", +886 => x"84055808", +887 => x"75708405", +888 => x"570ca378", +889 => x"27993876", +890 => x"70840558", +891 => x"08757084", +892 => x"05570c76", +893 => x"70840558", +894 => x"08757084", +895 => x"05570c76", +896 => x"70840558", +897 => x"08775e75", +898 => x"70840557", +899 => x"0c747d70", +900 => x"84055f08", +901 => x"71708405", +902 => x"530c7d08", +903 => x"710c5f7b", +904 => x"5261518e", +905 => x"943f6151", +906 => x"a4f33f79", +907 => x"800c933d", +908 => x"0d047d52", +909 => x"61519690", +910 => x"3f800880", +911 => x"0c933d0d", +912 => x"04841608", +913 => x"55fbc939", +914 => x"77537b52", +915 => x"800851a2", +916 => x"a53f7b52", +917 => x"61518de1", +918 => x"3fcc398c", +919 => x"16088817", +920 => x"08718c12", +921 => x"0c88120c", +922 => x"5d8c1708", +923 => x"88180871", +924 => x"8c120c88", +925 => x"120c5977", +926 => x"59fbef39", +927 => x"7818901c", +928 => x"40557e75", +929 => x"24fb9c38", +930 => x"7a177080", +931 => x"d7a00b88", +932 => x"050c757c", +933 => x"31810784", +934 => x"120c5684", +935 => x"17088106", +936 => x"7b078418", +937 => x"0c6151a3", +938 => x"f43f8817", +939 => x"54fce139", +940 => x"74181990", +941 => x"1c5e5a7c", +942 => x"7a24fb8f", +943 => x"388c1708", +944 => x"88180871", +945 => x"8c120c88", +946 => x"120c5e88", +947 => x"1761fc05", +948 => x"575975a4", +949 => x"2681b638", +950 => x"7b795955", +951 => x"93762780", +952 => x"c9387b70", +953 => x"84055d08", +954 => x"7c56790c", +955 => x"74708405", +956 => x"56088c18", +957 => x"0c901758", +958 => x"9b7627ae", +959 => x"38747084", +960 => x"05560878", +961 => x"0c747084", +962 => x"05560894", +963 => x"180c9817", +964 => x"58a37627", +965 => x"95387470", +966 => x"84055608", +967 => x"780c7470", +968 => x"84055608", +969 => x"9c180ca0", +970 => x"17587470", +971 => x"84055608", +972 => x"75417870", +973 => x"84055a0c", +974 => x"77607084", +975 => x"05420871", +976 => x"70840553", +977 => x"0c600871", +978 => x"0c5e7a17", +979 => x"7080d7a0", +980 => x"0b88050c", +981 => x"7a7c3181", +982 => x"0784120c", +983 => x"58841708", +984 => x"81067b07", +985 => x"84180c61", +986 => x"51a2b23f", +987 => x"78547380", +988 => x"0c933d0d", +989 => x"0479537b", +990 => x"5275519f", +991 => x"f93ffae9", +992 => x"39841508", +993 => x"fc061960", +994 => x"5859fadd", +995 => x"3975537b", +996 => x"5278519f", +997 => x"e13f7a17", +998 => x"7080d7a0", +999 => x"0b88050c", +1000 => x"7a7c3181", +1001 => x"0784120c", +1002 => x"58841708", +1003 => x"81067b07", +1004 => x"84180c61", +1005 => x"51a1e63f", +1006 => x"7854ffb2", +1007 => x"39fa3d0d", +1008 => x"7880cfe4", +1009 => x"085455b8", +1010 => x"1308802e", +1011 => x"81af388c", +1012 => x"15227083", +1013 => x"ffff0670", +1014 => x"832a8132", +1015 => x"81065555", +1016 => x"5672802e", +1017 => x"80da3873", +1018 => x"842a8132", +1019 => x"810657ff", +1020 => x"537680f2", +1021 => x"3873822a", +1022 => x"81065473", +1023 => x"802eb938", +1024 => x"b0150854", +1025 => x"73802e9c", +1026 => x"3880c015", +1027 => x"5373732e", +1028 => x"8f387352", +1029 => x"80cfe408", +1030 => x"518a9e3f", +1031 => x"8c152256", +1032 => x"76b0160c", +1033 => x"75db0657", +1034 => x"768c1623", +1035 => x"800b8416", +1036 => x"0c901508", +1037 => x"750c7656", +1038 => x"75880754", +1039 => x"738c1623", +1040 => x"90150880", +1041 => x"2ebf388c", +1042 => x"15227081", +1043 => x"06555373", +1044 => x"9c38720a", +1045 => x"100a8106", +1046 => x"56758538", +1047 => x"94150854", +1048 => x"7388160c", +1049 => x"80537280", +1050 => x"0c883d0d", +1051 => x"04800b88", +1052 => x"160c9415", +1053 => x"08309816", +1054 => x"0c8053ea", +1055 => x"39725182", +1056 => x"a63ffecb", +1057 => x"3974518f", +1058 => x"bc3f8c15", +1059 => x"22708106", +1060 => x"55537380", +1061 => x"2effbb38", +1062 => x"d439f83d", +1063 => x"0d7a5776", +1064 => x"802e8197", +1065 => x"3880cfe4", +1066 => x"0854b814", +1067 => x"08802e80", +1068 => x"eb388c17", +1069 => x"2270902b", +1070 => x"70902c70", +1071 => x"832a8132", +1072 => x"81065b5b", +1073 => x"57557780", +1074 => x"cb389017", +1075 => x"08567580", +1076 => x"2e80c138", +1077 => x"76087631", +1078 => x"76780c79", +1079 => x"83065555", +1080 => x"73853894", +1081 => x"17085877", +1082 => x"88180c80", +1083 => x"7525a538", +1084 => x"74537552", +1085 => x"9c170851", +1086 => x"a4170854", +1087 => x"732d800b", +1088 => x"80082580", +1089 => x"c9388008", +1090 => x"16758008", +1091 => x"31565674", +1092 => x"8024dd38", +1093 => x"800b800c", +1094 => x"8a3d0d04", +1095 => x"73518187", +1096 => x"3f8c1722", +1097 => x"70902b70", +1098 => x"902c7083", +1099 => x"2a813281", +1100 => x"065b5b57", +1101 => x"5577dd38", +1102 => x"ff9039a1", +1103 => x"9a5280cf", +1104 => x"e408518c", +1105 => x"d03f8008", +1106 => x"800c8a3d", +1107 => x"0d048c17", +1108 => x"2280c007", +1109 => x"58778c18", +1110 => x"23ff0b80", +1111 => x"0c8a3d0d", +1112 => x"04fa3d0d", +1113 => x"797080dc", +1114 => x"298c1154", +1115 => x"7a535657", +1116 => x"8fd63f80", +1117 => x"08800855", +1118 => x"56800880", +1119 => x"2ea23880", +1120 => x"088c0554", +1121 => x"800b8008", +1122 => x"0c768008", +1123 => x"84050c73", +1124 => x"80088805", +1125 => x"0c745380", +1126 => x"5273519c", +1127 => x"f53f7554", +1128 => x"73800c88", +1129 => x"3d0d0470", +1130 => x"707074a8", +1131 => x"e60bbc12", +1132 => x"0c53810b", +1133 => x"b8140c80", +1134 => x"0b84dc14", +1135 => x"0c830b84", +1136 => x"e0140c84", +1137 => x"e81384e4", +1138 => x"140c8413", +1139 => x"08518070", +1140 => x"720c7084", +1141 => x"130c7088", +1142 => x"130c5284", +1143 => x"0b8c1223", +1144 => x"718e1223", +1145 => x"7190120c", +1146 => x"7194120c", +1147 => x"7198120c", +1148 => x"709c120c", +1149 => x"80c1d50b", +1150 => x"a0120c80", +1151 => x"c2a10ba4", +1152 => x"120c80c3", +1153 => x"9d0ba812", +1154 => x"0c80c3ee", +1155 => x"0bac120c", +1156 => x"88130872", +1157 => x"710c7284", +1158 => x"120c7288", +1159 => x"120c5189", +1160 => x"0b8c1223", +1161 => x"810b8e12", +1162 => x"23719012", +1163 => x"0c719412", +1164 => x"0c719812", +1165 => x"0c709c12", +1166 => x"0c80c1d5", +1167 => x"0ba0120c", +1168 => x"80c2a10b", +1169 => x"a4120c80", +1170 => x"c39d0ba8", +1171 => x"120c80c3", +1172 => x"ee0bac12", +1173 => x"0c8c1308", +1174 => x"72710c72", +1175 => x"84120c72", +1176 => x"88120c51", +1177 => x"8a0b8c12", +1178 => x"23820b8e", +1179 => x"12237190", +1180 => x"120c7194", +1181 => x"120c7198", +1182 => x"120c709c", +1183 => x"120c80c1", +1184 => x"d50ba012", +1185 => x"0c80c2a1", +1186 => x"0ba4120c", +1187 => x"80c39d0b", +1188 => x"a8120c80", +1189 => x"c3ee0bac", +1190 => x"120c5050", +1191 => x"5004f83d", +1192 => x"0d7a80cf", +1193 => x"e408b811", +1194 => x"08575758", +1195 => x"7481ec38", +1196 => x"a8e60bbc", +1197 => x"170c810b", +1198 => x"b8170c74", +1199 => x"84dc170c", +1200 => x"830b84e0", +1201 => x"170c84e8", +1202 => x"1684e417", +1203 => x"0c841608", +1204 => x"75710c75", +1205 => x"84120c75", +1206 => x"88120c59", +1207 => x"840b8c1a", +1208 => x"23748e1a", +1209 => x"2374901a", +1210 => x"0c74941a", +1211 => x"0c74981a", +1212 => x"0c789c1a", +1213 => x"0c80c1d5", +1214 => x"0ba01a0c", +1215 => x"80c2a10b", +1216 => x"a41a0c80", +1217 => x"c39d0ba8", +1218 => x"1a0c80c3", +1219 => x"ee0bac1a", +1220 => x"0c881608", +1221 => x"75710c75", +1222 => x"84120c75", +1223 => x"88120c57", +1224 => x"890b8c18", +1225 => x"23810b8e", +1226 => x"18237490", +1227 => x"180c7494", +1228 => x"180c7498", +1229 => x"180c769c", +1230 => x"180c80c1", +1231 => x"d50ba018", +1232 => x"0c80c2a1", +1233 => x"0ba4180c", +1234 => x"80c39d0b", +1235 => x"a8180c80", +1236 => x"c3ee0bac", +1237 => x"180c8c16", +1238 => x"0875710c", +1239 => x"7584120c", +1240 => x"7588120c", +1241 => x"548a0b8c", +1242 => x"1523820b", +1243 => x"8e152374", +1244 => x"90150c74", +1245 => x"94150c74", +1246 => x"98150c73", +1247 => x"9c150c80", +1248 => x"c1d50ba0", +1249 => x"150c80c2", +1250 => x"a10ba415", +1251 => x"0c80c39d", +1252 => x"0ba8150c", +1253 => x"80c3ee0b", +1254 => x"ac150c84", +1255 => x"dc168811", +1256 => x"08841208", +1257 => x"ff055757", +1258 => x"57807524", +1259 => x"9f388c16", +1260 => x"2270902b", +1261 => x"70902c51", +1262 => x"55597380", +1263 => x"2e80ed38", +1264 => x"80dc16ff", +1265 => x"16565674", +1266 => x"8025e338", +1267 => x"76085574", +1268 => x"802e8f38", +1269 => x"74881108", +1270 => x"841208ff", +1271 => x"05575757", +1272 => x"c83982fc", +1273 => x"5277518a", +1274 => x"df3f8008", +1275 => x"80085556", +1276 => x"8008802e", +1277 => x"a3388008", +1278 => x"8c057580", +1279 => x"080c5484", +1280 => x"0b800884", +1281 => x"050c7380", +1282 => x"0888050c", +1283 => x"82f05374", +1284 => x"52735197", +1285 => x"fd3f7554", +1286 => x"7374780c", +1287 => x"5573ffb4", +1288 => x"388c780c", +1289 => x"800b800c", +1290 => x"8a3d0d04", +1291 => x"810b8c17", +1292 => x"2373760c", +1293 => x"7388170c", +1294 => x"7384170c", +1295 => x"7390170c", +1296 => x"7394170c", +1297 => x"7398170c", +1298 => x"ff0b8e17", +1299 => x"2373b017", +1300 => x"0c73b417", +1301 => x"0c7380c4", +1302 => x"170c7380", +1303 => x"c8170c75", +1304 => x"800c8a3d", +1305 => x"0d047070", +1306 => x"a19a5273", +1307 => x"5186a63f", +1308 => x"50500470", +1309 => x"70a19a52", +1310 => x"80cfe408", +1311 => x"5186963f", +1312 => x"505004fb", +1313 => x"3d0d7770", +1314 => x"52569890", +1315 => x"3f80d7a0", +1316 => x"0b880508", +1317 => x"841108fc", +1318 => x"06707b31", +1319 => x"9fef05e0", +1320 => x"8006e080", +1321 => x"05525555", +1322 => x"a0807524", +1323 => x"94388052", +1324 => x"755197ea", +1325 => x"3f80d7a8", +1326 => x"08145372", +1327 => x"80082e8f", +1328 => x"38755197", +1329 => x"d83f8053", +1330 => x"72800c87", +1331 => x"3d0d0474", +1332 => x"30527551", +1333 => x"97c83f80", +1334 => x"08ff2ea8", +1335 => x"3880d7a0", +1336 => x"0b880508", +1337 => x"74763181", +1338 => x"0784120c", +1339 => x"5380d6e4", +1340 => x"08753180", +1341 => x"d6e40c75", +1342 => x"5197a23f", +1343 => x"810b800c", +1344 => x"873d0d04", +1345 => x"80527551", +1346 => x"97943f80", +1347 => x"d7a00b88", +1348 => x"05088008", +1349 => x"71315454", +1350 => x"8f7325ff", +1351 => x"a4388008", +1352 => x"80d79408", +1353 => x"3180d6e4", +1354 => x"0c728107", +1355 => x"84150c75", +1356 => x"5196ea3f", +1357 => x"8053ff90", +1358 => x"39f73d0d", +1359 => x"7b7d545a", +1360 => x"72802e82", +1361 => x"83387951", +1362 => x"96d23ff8", +1363 => x"13841108", +1364 => x"70fe0670", +1365 => x"13841108", +1366 => x"fc065c57", +1367 => x"58545780", +1368 => x"d7a80874", +1369 => x"2e82de38", +1370 => x"7784150c", +1371 => x"80738106", +1372 => x"56597479", +1373 => x"2e81d538", +1374 => x"77148411", +1375 => x"08810656", +1376 => x"5374a038", +1377 => x"77165678", +1378 => x"81e63888", +1379 => x"14085574", +1380 => x"80d7a82e", +1381 => x"82f9388c", +1382 => x"1408708c", +1383 => x"170c7588", +1384 => x"120c5875", +1385 => x"81078418", +1386 => x"0c751776", +1387 => x"710c5478", +1388 => x"81913883", +1389 => x"ff762781", +1390 => x"c8387589", +1391 => x"2a76832a", +1392 => x"54547380", +1393 => x"2ebf3875", +1394 => x"862ab805", +1395 => x"53847427", +1396 => x"b43880db", +1397 => x"14539474", +1398 => x"27ab3875", +1399 => x"8c2a80ee", +1400 => x"055380d4", +1401 => x"74279e38", +1402 => x"758f2a80", +1403 => x"f7055382", +1404 => x"d4742791", +1405 => x"3875922a", +1406 => x"80fc0553", +1407 => x"8ad47427", +1408 => x"843880fe", +1409 => x"53721010", +1410 => x"1080d7a0", +1411 => x"05881108", +1412 => x"55557375", +1413 => x"2e82bf38", +1414 => x"841408fc", +1415 => x"06597579", +1416 => x"278d3888", +1417 => x"14085473", +1418 => x"752e0981", +1419 => x"06ea388c", +1420 => x"1408708c", +1421 => x"190c7488", +1422 => x"190c7788", +1423 => x"120c5576", +1424 => x"8c150c79", +1425 => x"5194d63f", +1426 => x"8b3d0d04", +1427 => x"76087771", +1428 => x"31587605", +1429 => x"88180856", +1430 => x"567480d7", +1431 => x"a82e80e0", +1432 => x"388c1708", +1433 => x"708c170c", +1434 => x"7588120c", +1435 => x"53fe8939", +1436 => x"8814088c", +1437 => x"1508708c", +1438 => x"130c5988", +1439 => x"190cfea3", +1440 => x"3975832a", +1441 => x"70545480", +1442 => x"74248198", +1443 => x"3872822c", +1444 => x"81712b80", +1445 => x"d7a40807", +1446 => x"80d7a00b", +1447 => x"84050c74", +1448 => x"10101080", +1449 => x"d7a00588", +1450 => x"1108718c", +1451 => x"1b0c7088", +1452 => x"1b0c7988", +1453 => x"130c565a", +1454 => x"55768c15", +1455 => x"0cff8439", +1456 => x"8159fdb4", +1457 => x"39771673", +1458 => x"81065455", +1459 => x"72983876", +1460 => x"08777131", +1461 => x"5875058c", +1462 => x"18088819", +1463 => x"08718c12", +1464 => x"0c88120c", +1465 => x"55557481", +1466 => x"0784180c", +1467 => x"7680d7a0", +1468 => x"0b88050c", +1469 => x"80d79c08", +1470 => x"7526fec7", +1471 => x"3880d798", +1472 => x"08527951", +1473 => x"fafd3f79", +1474 => x"5193923f", +1475 => x"feba3981", +1476 => x"778c170c", +1477 => x"7788170c", +1478 => x"758c190c", +1479 => x"7588190c", +1480 => x"59fd8039", +1481 => x"83147082", +1482 => x"2c81712b", +1483 => x"80d7a408", +1484 => x"0780d7a0", +1485 => x"0b84050c", +1486 => x"75101010", +1487 => x"80d7a005", +1488 => x"88110871", +1489 => x"8c1c0c70", +1490 => x"881c0c7a", +1491 => x"88130c57", +1492 => x"5b5653fe", +1493 => x"e4398073", +1494 => x"24a33872", +1495 => x"822c8171", +1496 => x"2b80d7a4", +1497 => x"080780d7", +1498 => x"a00b8405", +1499 => x"0c58748c", +1500 => x"180c7388", +1501 => x"180c7688", +1502 => x"160cfdc3", +1503 => x"39831370", +1504 => x"822c8171", +1505 => x"2b80d7a4", +1506 => x"080780d7", +1507 => x"a00b8405", +1508 => x"0c5953da", +1509 => x"39f93d0d", +1510 => x"797b5853", +1511 => x"800b80cf", +1512 => x"e4085356", +1513 => x"72722ebc", +1514 => x"3884dc13", +1515 => x"5574762e", +1516 => x"b3388815", +1517 => x"08841608", +1518 => x"ff055454", +1519 => x"80732499", +1520 => x"388c1422", +1521 => x"70902b53", +1522 => x"587180d4", +1523 => x"3880dc14", +1524 => x"ff145454", +1525 => x"728025e9", +1526 => x"38740855", +1527 => x"74d43880", +1528 => x"cfe40852", +1529 => x"84dc1255", +1530 => x"74802ead", +1531 => x"38881508", +1532 => x"841608ff", +1533 => x"05545480", +1534 => x"73249838", +1535 => x"8c142270", +1536 => x"902b5358", +1537 => x"71ad3880", +1538 => x"dc14ff14", +1539 => x"54547280", +1540 => x"25ea3874", +1541 => x"085574d5", +1542 => x"3875800c", +1543 => x"893d0d04", +1544 => x"7351762d", +1545 => x"75800807", +1546 => x"80dc15ff", +1547 => x"15555556", +1548 => x"ffa23973", +1549 => x"51762d75", +1550 => x"80080780", +1551 => x"dc15ff15", +1552 => x"555556ca", +1553 => x"39ea3d0d", +1554 => x"688c1122", +1555 => x"700a100a", +1556 => x"81065758", +1557 => x"567480e4", +1558 => x"388e1622", +1559 => x"70902b70", +1560 => x"902c5155", +1561 => x"58807424", +1562 => x"b138983d", +1563 => x"c4055373", +1564 => x"5280cfe4", +1565 => x"08519481", +1566 => x"3f800b80", +1567 => x"08249738", +1568 => x"7983e080", +1569 => x"06547380", +1570 => x"c0802e81", +1571 => x"8f387382", +1572 => x"80802e81", +1573 => x"91388c16", +1574 => x"22577690", +1575 => x"80075473", +1576 => x"8c172388", +1577 => x"805280cf", +1578 => x"e4085181", +1579 => x"9b3f8008", +1580 => x"9d388c16", +1581 => x"22820755", +1582 => x"748c1723", +1583 => x"80c31670", +1584 => x"770c9017", +1585 => x"0c810b94", +1586 => x"170c983d", +1587 => x"0d0480cf", +1588 => x"e408a8e6", +1589 => x"0bbc120c", +1590 => x"588c1622", +1591 => x"81800754", +1592 => x"738c1723", +1593 => x"8008760c", +1594 => x"80089017", +1595 => x"0c88800b", +1596 => x"94170c74", +1597 => x"802ed338", +1598 => x"8e162270", +1599 => x"902b7090", +1600 => x"2c535654", +1601 => x"9afe3f80", +1602 => x"08802eff", +1603 => x"bd388c16", +1604 => x"22810757", +1605 => x"768c1723", +1606 => x"983d0d04", +1607 => x"810b8c17", +1608 => x"225855fe", +1609 => x"f539a816", +1610 => x"0880c39d", +1611 => x"2e098106", +1612 => x"fee4388c", +1613 => x"16228880", +1614 => x"0754738c", +1615 => x"17238880", +1616 => x"0b80cc17", +1617 => x"0cfedc39", +1618 => x"f43d0d7e", +1619 => x"608b1170", +1620 => x"f8065b55", +1621 => x"555d7296", +1622 => x"26833890", +1623 => x"58807824", +1624 => x"74792607", +1625 => x"55805474", +1626 => x"742e0981", +1627 => x"0680ca38", +1628 => x"7c518ea8", +1629 => x"3f7783f7", +1630 => x"2680c538", +1631 => x"77832a70", +1632 => x"10101080", +1633 => x"d7a0058c", +1634 => x"11085858", +1635 => x"5475772e", +1636 => x"81f03884", +1637 => x"1608fc06", +1638 => x"8c170888", +1639 => x"1808718c", +1640 => x"120c8812", +1641 => x"0c5b7605", +1642 => x"84110881", +1643 => x"0784120c", +1644 => x"537c518d", +1645 => x"e83f8816", +1646 => x"5473800c", +1647 => x"8e3d0d04", +1648 => x"77892a78", +1649 => x"832a5854", +1650 => x"73802ebf", +1651 => x"3877862a", +1652 => x"b8055784", +1653 => x"7427b438", +1654 => x"80db1457", +1655 => x"947427ab", +1656 => x"38778c2a", +1657 => x"80ee0557", +1658 => x"80d47427", +1659 => x"9e38778f", +1660 => x"2a80f705", +1661 => x"5782d474", +1662 => x"27913877", +1663 => x"922a80fc", +1664 => x"05578ad4", +1665 => x"74278438", +1666 => x"80fe5776", +1667 => x"10101080", +1668 => x"d7a0058c", +1669 => x"11085653", +1670 => x"74732ea3", +1671 => x"38841508", +1672 => x"fc067079", +1673 => x"31555673", +1674 => x"8f2488e4", +1675 => x"38738025", +1676 => x"88e6388c", +1677 => x"15085574", +1678 => x"732e0981", +1679 => x"06df3881", +1680 => x"175980d7", +1681 => x"b0085675", +1682 => x"80d7a82e", +1683 => x"82cc3884", +1684 => x"1608fc06", +1685 => x"70793155", +1686 => x"55738f24", +1687 => x"bb3880d7", +1688 => x"a80b80d7", +1689 => x"b40c80d7", +1690 => x"a80b80d7", +1691 => x"b00c8074", +1692 => x"2480db38", +1693 => x"74168411", +1694 => x"08810784", +1695 => x"120c53fe", +1696 => x"b0398816", +1697 => x"8c110857", +1698 => x"5975792e", +1699 => x"098106fe", +1700 => x"82388214", +1701 => x"59ffab39", +1702 => x"77167881", +1703 => x"0784180c", +1704 => x"7080d7b4", +1705 => x"0c7080d7", +1706 => x"b00c80d7", +1707 => x"a80b8c12", +1708 => x"0c8c1108", +1709 => x"88120c74", +1710 => x"81078412", +1711 => x"0c740574", +1712 => x"710c5b7c", +1713 => x"518bd63f", +1714 => x"881654fd", +1715 => x"ec3983ff", +1716 => x"75278391", +1717 => x"3874892a", +1718 => x"75832a54", +1719 => x"5473802e", +1720 => x"bf387486", +1721 => x"2ab80553", +1722 => x"847427b4", +1723 => x"3880db14", +1724 => x"53947427", +1725 => x"ab38748c", +1726 => x"2a80ee05", +1727 => x"5380d474", +1728 => x"279e3874", +1729 => x"8f2a80f7", +1730 => x"055382d4", +1731 => x"74279138", +1732 => x"74922a80", +1733 => x"fc05538a", +1734 => x"d4742784", +1735 => x"3880fe53", +1736 => x"72101010", +1737 => x"80d7a005", +1738 => x"88110855", +1739 => x"5773772e", +1740 => x"868b3884", +1741 => x"1408fc06", +1742 => x"5b747b27", +1743 => x"8d388814", +1744 => x"08547377", +1745 => x"2e098106", +1746 => x"ea388c14", +1747 => x"0880d7a0", +1748 => x"0b840508", +1749 => x"718c190c", +1750 => x"7588190c", +1751 => x"7788130c", +1752 => x"5c57758c", +1753 => x"150c7853", +1754 => x"80792483", +1755 => x"98387282", +1756 => x"2c81712b", +1757 => x"5656747b", +1758 => x"2680ca38", +1759 => x"7a750657", +1760 => x"7682a338", +1761 => x"78fc0684", +1762 => x"05597410", +1763 => x"707c0655", +1764 => x"55738292", +1765 => x"38841959", +1766 => x"f13980d7", +1767 => x"a00b8405", +1768 => x"0879545b", +1769 => x"788025c6", +1770 => x"3882da39", +1771 => x"74097b06", +1772 => x"7080d7a0", +1773 => x"0b84050c", +1774 => x"5b741055", +1775 => x"747b2685", +1776 => x"387485bc", +1777 => x"3880d7a0", +1778 => x"0b880508", +1779 => x"70841208", +1780 => x"fc06707b", +1781 => x"317b7226", +1782 => x"8f722507", +1783 => x"5d575c5c", +1784 => x"5578802e", +1785 => x"80d93879", +1786 => x"1580d798", +1787 => x"08199011", +1788 => x"59545680", +1789 => x"d79408ff", +1790 => x"2e8838a0", +1791 => x"8f13e080", +1792 => x"06577652", +1793 => x"7c518996", +1794 => x"3f800854", +1795 => x"8008ff2e", +1796 => x"90388008", +1797 => x"762782a7", +1798 => x"387480d7", +1799 => x"a02e829f", +1800 => x"3880d7a0", +1801 => x"0b880508", +1802 => x"55841508", +1803 => x"fc067079", +1804 => x"31797226", +1805 => x"8f722507", +1806 => x"5d555a7a", +1807 => x"83f23877", +1808 => x"81078416", +1809 => x"0c771570", +1810 => x"80d7a00b", +1811 => x"88050c74", +1812 => x"81078412", +1813 => x"0c567c51", +1814 => x"88c33f88", +1815 => x"15547380", +1816 => x"0c8e3d0d", +1817 => x"0474832a", +1818 => x"70545480", +1819 => x"7424819b", +1820 => x"3872822c", +1821 => x"81712b80", +1822 => x"d7a40807", +1823 => x"7080d7a0", +1824 => x"0b84050c", +1825 => x"75101010", +1826 => x"80d7a005", +1827 => x"88110871", +1828 => x"8c1b0c70", +1829 => x"881b0c79", +1830 => x"88130c57", +1831 => x"555c5575", +1832 => x"8c150cfd", +1833 => x"c1397879", +1834 => x"10101080", +1835 => x"d7a00570", +1836 => x"565b5c8c", +1837 => x"14085675", +1838 => x"742ea338", +1839 => x"841608fc", +1840 => x"06707931", +1841 => x"5853768f", +1842 => x"2483f138", +1843 => x"76802584", +1844 => x"af388c16", +1845 => x"08567574", +1846 => x"2e098106", +1847 => x"df388814", +1848 => x"811a7083", +1849 => x"06555a54", +1850 => x"72c9387b", +1851 => x"83065675", +1852 => x"802efdb8", +1853 => x"38ff1cf8", +1854 => x"1b5b5c88", +1855 => x"1a087a2e", +1856 => x"ea38fdb5", +1857 => x"39831953", +1858 => x"fce43983", +1859 => x"1470822c", +1860 => x"81712b80", +1861 => x"d7a40807", +1862 => x"7080d7a0", +1863 => x"0b84050c", +1864 => x"76101010", +1865 => x"80d7a005", +1866 => x"88110871", +1867 => x"8c1c0c70", +1868 => x"881c0c7a", +1869 => x"88130c58", +1870 => x"535d5653", +1871 => x"fee13980", +1872 => x"d6e40817", +1873 => x"59800876", +1874 => x"2e818b38", +1875 => x"80d79408", +1876 => x"ff2e848e", +1877 => x"38737631", +1878 => x"1980d6e4", +1879 => x"0c738706", +1880 => x"70565372", +1881 => x"802e8838", +1882 => x"88733170", +1883 => x"15555576", +1884 => x"149fff06", +1885 => x"a0807131", +1886 => x"1670547e", +1887 => x"53515386", +1888 => x"9d3f8008", +1889 => x"568008ff", +1890 => x"2e819e38", +1891 => x"80d6e408", +1892 => x"137080d6", +1893 => x"e40c7475", +1894 => x"80d7a00b", +1895 => x"88050c77", +1896 => x"76311581", +1897 => x"07555659", +1898 => x"7a80d7a0", +1899 => x"2e83c038", +1900 => x"798f2682", +1901 => x"ef38810b", +1902 => x"84150c84", +1903 => x"1508fc06", +1904 => x"70793179", +1905 => x"72268f72", +1906 => x"25075d55", +1907 => x"5a7a802e", +1908 => x"fced3880", +1909 => x"db398008", +1910 => x"9fff0655", +1911 => x"74feed38", +1912 => x"7880d6e4", +1913 => x"0c80d7a0", +1914 => x"0b880508", +1915 => x"7a188107", +1916 => x"84120c55", +1917 => x"80d79008", +1918 => x"79278638", +1919 => x"7880d790", +1920 => x"0c80d78c", +1921 => x"087927fc", +1922 => x"a0387880", +1923 => x"d78c0c84", +1924 => x"1508fc06", +1925 => x"70793179", +1926 => x"72268f72", +1927 => x"25075d55", +1928 => x"5a7a802e", +1929 => x"fc993888", +1930 => x"39807457", +1931 => x"53fedd39", +1932 => x"7c5184e9", +1933 => x"3f800b80", +1934 => x"0c8e3d0d", +1935 => x"04807324", +1936 => x"a5387282", +1937 => x"2c81712b", +1938 => x"80d7a408", +1939 => x"077080d7", +1940 => x"a00b8405", +1941 => x"0c5c5a76", +1942 => x"8c170c73", +1943 => x"88170c75", +1944 => x"88180cf9", +1945 => x"fd398313", +1946 => x"70822c81", +1947 => x"712b80d7", +1948 => x"a4080770", +1949 => x"80d7a00b", +1950 => x"84050c5d", +1951 => x"5b53d839", +1952 => x"7a75065c", +1953 => x"7bfc9f38", +1954 => x"84197510", +1955 => x"5659f139", +1956 => x"ff178105", +1957 => x"59f7ab39", +1958 => x"8c150888", +1959 => x"1608718c", +1960 => x"120c8812", +1961 => x"0c597515", +1962 => x"84110881", +1963 => x"0784120c", +1964 => x"587c5183", +1965 => x"e83f8815", +1966 => x"54fba339", +1967 => x"77167881", +1968 => x"0784180c", +1969 => x"8c170888", +1970 => x"1808718c", +1971 => x"120c8812", +1972 => x"0c5c7080", +1973 => x"d7b40c70", +1974 => x"80d7b00c", +1975 => x"80d7a80b", +1976 => x"8c120c8c", +1977 => x"11088812", +1978 => x"0c778107", +1979 => x"84120c77", +1980 => x"0577710c", +1981 => x"557c5183", +1982 => x"a43f8816", +1983 => x"54f5ba39", +1984 => x"72168411", +1985 => x"08810784", +1986 => x"120c588c", +1987 => x"16088817", +1988 => x"08718c12", +1989 => x"0c88120c", +1990 => x"577c5183", +1991 => x"803f8816", +1992 => x"54f59639", +1993 => x"7284150c", +1994 => x"f41af806", +1995 => x"70841d08", +1996 => x"81060784", +1997 => x"1d0c701c", +1998 => x"5556850b", +1999 => x"84150c85", +2000 => x"0b88150c", +2001 => x"8f7627fd", +2002 => x"ab38881b", +2003 => x"527c51eb", +2004 => x"e83f80d7", +2005 => x"a00b8805", +2006 => x"0880d6e4", +2007 => x"085a55fd", +2008 => x"93397880", +2009 => x"d6e40c73", +2010 => x"80d7940c", +2011 => x"fbef3972", +2012 => x"84150cfc", +2013 => x"ff39fb3d", +2014 => x"0d77707a", +2015 => x"7c585553", +2016 => x"568f7527", +2017 => x"80e63872", +2018 => x"76078306", +2019 => x"517080dc", +2020 => x"38757352", +2021 => x"54707084", +2022 => x"05520874", +2023 => x"70840556", +2024 => x"0c737170", +2025 => x"84055308", +2026 => x"71708405", +2027 => x"530c7170", +2028 => x"84055308", +2029 => x"71708405", +2030 => x"530c7170", +2031 => x"84055308", +2032 => x"71708405", +2033 => x"530cf016", +2034 => x"5654748f", +2035 => x"26c73883", +2036 => x"75279538", +2037 => x"70708405", +2038 => x"52087470", +2039 => x"8405560c", +2040 => x"fc155574", +2041 => x"8326ed38", +2042 => x"73715452", +2043 => x"ff155170", +2044 => x"ff2e9838", +2045 => x"72708105", +2046 => x"54337270", +2047 => x"81055434", +2048 => x"ff115170", +2049 => x"ff2e0981", +2050 => x"06ea3875", +2051 => x"800c873d", +2052 => x"0d04fb3d", +2053 => x"0d777a71", +2054 => x"028c05a3", +2055 => x"05335854", +2056 => x"54568373", +2057 => x"2780d438", +2058 => x"75830651", +2059 => x"7080cc38", +2060 => x"74882b75", +2061 => x"07707190", +2062 => x"2b075551", +2063 => x"8f7327a7", +2064 => x"38737270", +2065 => x"8405540c", +2066 => x"71747170", +2067 => x"8405530c", +2068 => x"74717084", +2069 => x"05530c74", +2070 => x"71708405", +2071 => x"530cf014", +2072 => x"5452728f", +2073 => x"26db3883", +2074 => x"73279038", +2075 => x"73727084", +2076 => x"05540cfc", +2077 => x"13537283", +2078 => x"26f238ff", +2079 => x"135170ff", +2080 => x"2e933874", +2081 => x"72708105", +2082 => x"5434ff11", +2083 => x"5170ff2e", +2084 => x"098106ef", +2085 => x"3875800c", +2086 => x"873d0d04", +2087 => x"04047070", +2088 => x"7070800b", +2089 => x"80dfe00c", +2090 => x"765184f3", +2091 => x"3f800853", +2092 => x"8008ff2e", +2093 => x"89387280", +2094 => x"0c505050", +2095 => x"500480df", +2096 => x"e0085473", +2097 => x"802eef38", +2098 => x"7574710c", +2099 => x"5272800c", +2100 => x"50505050", +2101 => x"04f93d0d", +2102 => x"797c557b", +2103 => x"548e1122", +2104 => x"70902b70", +2105 => x"902c5557", +2106 => x"80cfe408", +2107 => x"53585683", +2108 => x"f63f8008", +2109 => x"57800b80", +2110 => x"08249338", +2111 => x"80d01608", +2112 => x"80080580", +2113 => x"d0170c76", +2114 => x"800c893d", +2115 => x"0d048c16", +2116 => x"2283dfff", +2117 => x"0655748c", +2118 => x"17237680", +2119 => x"0c893d0d", +2120 => x"04fa3d0d", +2121 => x"788c1122", +2122 => x"70882a70", +2123 => x"81065157", +2124 => x"585674a9", +2125 => x"388c1622", +2126 => x"83dfff06", +2127 => x"55748c17", +2128 => x"237a5479", +2129 => x"538e1622", +2130 => x"70902b70", +2131 => x"902c5456", +2132 => x"80cfe408", +2133 => x"525681b2", +2134 => x"3f883d0d", +2135 => x"04825480", +2136 => x"538e1622", +2137 => x"70902b70", +2138 => x"902c5456", +2139 => x"80cfe408", +2140 => x"525782bb", +2141 => x"3f8c1622", +2142 => x"83dfff06", +2143 => x"55748c17", +2144 => x"237a5479", +2145 => x"538e1622", +2146 => x"70902b70", +2147 => x"902c5456", +2148 => x"80cfe408", +2149 => x"525680f2", +2150 => x"3f883d0d", +2151 => x"04f93d0d", +2152 => x"797c557b", +2153 => x"548e1122", +2154 => x"70902b70", +2155 => x"902c5557", +2156 => x"80cfe408", +2157 => x"53585681", +2158 => x"f63f8008", +2159 => x"578008ff", +2160 => x"2e99388c", +2161 => x"1622a080", +2162 => x"0755748c", +2163 => x"17238008", +2164 => x"80d0170c", +2165 => x"76800c89", +2166 => x"3d0d048c", +2167 => x"162283df", +2168 => x"ff065574", +2169 => x"8c172376", +2170 => x"800c893d", +2171 => x"0d047070", +2172 => x"70748e11", +2173 => x"2270902b", +2174 => x"70902c55", +2175 => x"51515380", +2176 => x"cfe40851", +2177 => x"bd3f5050", +2178 => x"5004fb3d", +2179 => x"0d800b80", +2180 => x"dfe00c7a", +2181 => x"53795278", +2182 => x"5182ff3f", +2183 => x"80085580", +2184 => x"08ff2e88", +2185 => x"3874800c", +2186 => x"873d0d04", +2187 => x"80dfe008", +2188 => x"5675802e", +2189 => x"f0387776", +2190 => x"710c5474", +2191 => x"800c873d", +2192 => x"0d047070", +2193 => x"7070800b", +2194 => x"80dfe00c", +2195 => x"765184cc", +2196 => x"3f800853", +2197 => x"8008ff2e", +2198 => x"89387280", +2199 => x"0c505050", +2200 => x"500480df", +2201 => x"e0085473", +2202 => x"802eef38", +2203 => x"7574710c", +2204 => x"5272800c", +2205 => x"50505050", +2206 => x"04fc3d0d", +2207 => x"800b80df", +2208 => x"e00c7852", +2209 => x"775187b3", +2210 => x"3f800854", +2211 => x"8008ff2e", +2212 => x"88387380", +2213 => x"0c863d0d", +2214 => x"0480dfe0", +2215 => x"08557480", +2216 => x"2ef03876", +2217 => x"75710c53", +2218 => x"73800c86", +2219 => x"3d0d04fb", +2220 => x"3d0d800b", +2221 => x"80dfe00c", +2222 => x"7a537952", +2223 => x"7851848e", +2224 => x"3f800855", +2225 => x"8008ff2e", +2226 => x"88387480", +2227 => x"0c873d0d", +2228 => x"0480dfe0", +2229 => x"08567580", +2230 => x"2ef03877", +2231 => x"76710c54", +2232 => x"74800c87", +2233 => x"3d0d04fb", +2234 => x"3d0d800b", +2235 => x"80dfe00c", +2236 => x"7a537952", +2237 => x"78518296", +2238 => x"3f800855", +2239 => x"8008ff2e", +2240 => x"88387480", +2241 => x"0c873d0d", +2242 => x"0480dfe0", +2243 => x"08567580", +2244 => x"2ef03877", +2245 => x"76710c54", +2246 => x"74800c87", +2247 => x"3d0d0470", +2248 => x"707080df", +2249 => x"d0088938", +2250 => x"80dfe40b", +2251 => x"80dfd00c", +2252 => x"80dfd008", +2253 => x"75115252", +2254 => x"ff537087", +2255 => x"fb808026", +2256 => x"88387080", +2257 => x"dfd00c71", +2258 => x"5372800c", +2259 => x"50505004", +2260 => x"fd3d0d80", +2261 => x"0b80cfd8", +2262 => x"08545472", +2263 => x"812e9b38", +2264 => x"7380dfd4", +2265 => x"0cc2bf3f", +2266 => x"c1963f80", +2267 => x"dfa85281", +2268 => x"51c3fd3f", +2269 => x"80085186", +2270 => x"c23f7280", +2271 => x"dfd40cc2", +2272 => x"a53fc0fc", +2273 => x"3f80dfa8", +2274 => x"528151c3", +2275 => x"e33f8008", +2276 => x"5186a83f", +2277 => x"00ff3900", +2278 => x"ff39f53d", +2279 => x"0d7e6080", +2280 => x"dfd40870", +2281 => x"5b585b5b", +2282 => x"7580c238", +2283 => x"777a25a1", +2284 => x"38771b70", +2285 => x"337081ff", +2286 => x"06585859", +2287 => x"758a2e98", +2288 => x"387681ff", +2289 => x"0651c1bd", +2290 => x"3f811858", +2291 => x"797824e1", +2292 => x"3879800c", +2293 => x"8d3d0d04", +2294 => x"8d51c1a9", +2295 => x"3f783370", +2296 => x"81ff0652", +2297 => x"57c19e3f", +2298 => x"811858e0", +2299 => x"3979557a", +2300 => x"547d5385", +2301 => x"528d3dfc", +2302 => x"0551c0c6", +2303 => x"3f800856", +2304 => x"85b23f7b", +2305 => x"80080c75", +2306 => x"800c8d3d", +2307 => x"0d04f63d", +2308 => x"0d7d7f80", +2309 => x"dfd40870", +2310 => x"5b585a5a", +2311 => x"7580c138", +2312 => x"777925b3", +2313 => x"38c0b93f", +2314 => x"800881ff", +2315 => x"06708d32", +2316 => x"7030709f", +2317 => x"2a515157", +2318 => x"57768a2e", +2319 => x"80c43875", +2320 => x"802ebf38", +2321 => x"771a5676", +2322 => x"76347651", +2323 => x"c0b73f81", +2324 => x"18587878", +2325 => x"24cf3877", +2326 => x"5675800c", +2327 => x"8c3d0d04", +2328 => x"78557954", +2329 => x"7c538452", +2330 => x"8c3dfc05", +2331 => x"51ffbfd2", +2332 => x"3f800856", +2333 => x"84be3f7a", +2334 => x"80080c75", +2335 => x"800c8c3d", +2336 => x"0d04771a", +2337 => x"598a7934", +2338 => x"8118588d", +2339 => x"51ffbff5", +2340 => x"3f8a51ff", +2341 => x"bfef3f77", +2342 => x"56ffbe39", +2343 => x"fb3d0d80", +2344 => x"dfd40870", +2345 => x"56547388", +2346 => x"3874800c", +2347 => x"873d0d04", +2348 => x"77538352", +2349 => x"873dfc05", +2350 => x"51ffbf86", +2351 => x"3f800854", +2352 => x"83f23f75", +2353 => x"80080c73", +2354 => x"800c873d", +2355 => x"0d04fa3d", +2356 => x"0d80dfd4", +2357 => x"08802ea3", +2358 => x"387a5579", +2359 => x"54785386", +2360 => x"52883dfc", +2361 => x"0551ffbe", +2362 => x"d93f8008", +2363 => x"5683c53f", +2364 => x"7680080c", +2365 => x"75800c88", +2366 => x"3d0d0483", +2367 => x"b73f9d0b", +2368 => x"80080cff", +2369 => x"0b800c88", +2370 => x"3d0d04f7", +2371 => x"3d0d7b7d", +2372 => x"5b59bc53", +2373 => x"80527951", +2374 => x"f5f83f80", +2375 => x"70565798", +2376 => x"56741970", +2377 => x"3370782b", +2378 => x"79078118", +2379 => x"f81a5a58", +2380 => x"59555884", +2381 => x"7524ea38", +2382 => x"767a2384", +2383 => x"19588070", +2384 => x"56579856", +2385 => x"74187033", +2386 => x"70782b79", +2387 => x"078118f8", +2388 => x"1a5a5859", +2389 => x"51548475", +2390 => x"24ea3876", +2391 => x"821b2388", +2392 => x"19588070", +2393 => x"56579856", +2394 => x"74187033", +2395 => x"70782b79", +2396 => x"078118f8", +2397 => x"1a5a5859", +2398 => x"51548475", +2399 => x"24ea3876", +2400 => x"841b0c8c", +2401 => x"19588070", +2402 => x"56579856", +2403 => x"74187033", +2404 => x"70782b79", +2405 => x"078118f8", +2406 => x"1a5a5859", +2407 => x"51548475", +2408 => x"24ea3876", +2409 => x"881b2390", +2410 => x"19588070", +2411 => x"56579856", +2412 => x"74187033", +2413 => x"70782b79", +2414 => x"078118f8", +2415 => x"1a5a5859", +2416 => x"51548475", +2417 => x"24ea3876", +2418 => x"8a1b2394", +2419 => x"19588070", +2420 => x"56579856", +2421 => x"74187033", +2422 => x"70782b79", +2423 => x"078118f8", +2424 => x"1a5a5859", +2425 => x"51548475", +2426 => x"24ea3876", +2427 => x"8c1b2398", +2428 => x"19588070", +2429 => x"56579856", +2430 => x"74187033", +2431 => x"70782b79", +2432 => x"078118f8", +2433 => x"1a5a5859", +2434 => x"51548475", +2435 => x"24ea3876", +2436 => x"8e1b239c", +2437 => x"19588070", +2438 => x"5657b856", +2439 => x"74187033", +2440 => x"70782b79", +2441 => x"078118f8", +2442 => x"1a5a5859", +2443 => x"5a548875", +2444 => x"24ea3876", +2445 => x"901b0c8b", +2446 => x"3d0d04e9", +2447 => x"3d0d6a80", +2448 => x"dfd40857", +2449 => x"57759338", +2450 => x"80c0800b", +2451 => x"84180c75", +2452 => x"ac180c75", +2453 => x"800c993d", +2454 => x"0d04893d", +2455 => x"70556a54", +2456 => x"558a5299", +2457 => x"3dffbc05", +2458 => x"51ffbbd6", +2459 => x"3f800877", +2460 => x"53755256", +2461 => x"fd953fbc", +2462 => x"3f778008", +2463 => x"0c75800c", +2464 => x"993d0d04", +2465 => x"fc3d0d81", +2466 => x"5480dfd4", +2467 => x"08883873", +2468 => x"800c863d", +2469 => x"0d047653", +2470 => x"97b95286", +2471 => x"3dfc0551", +2472 => x"ffbb9f3f", +2473 => x"8008548c", +2474 => x"3f748008", +2475 => x"0c73800c", +2476 => x"863d0d04", +2477 => x"80cfe408", +2478 => x"800c04f7", +2479 => x"3d0d7b80", +2480 => x"cfe40882", +2481 => x"c811085a", +2482 => x"545a7780", +2483 => x"2e80da38", +2484 => x"81881884", +2485 => x"1908ff05", +2486 => x"81712b59", +2487 => x"55598074", +2488 => x"2480ea38", +2489 => x"807424b5", +2490 => x"3873822b", +2491 => x"78118805", +2492 => x"56568180", +2493 => x"19087706", +2494 => x"5372802e", +2495 => x"b6387816", +2496 => x"70085353", +2497 => x"79517408", +2498 => x"53722dff", +2499 => x"14fc17fc", +2500 => x"1779812c", +2501 => x"5a575754", +2502 => x"738025d6", +2503 => x"38770858", +2504 => x"77ffad38", +2505 => x"80cfe408", +2506 => x"53bc1308", +2507 => x"a5387951", +2508 => x"f8e23f74", +2509 => x"0853722d", +2510 => x"ff14fc17", +2511 => x"fc177981", +2512 => x"2c5a5757", +2513 => x"54738025", +2514 => x"ffa838d1", +2515 => x"398057ff", +2516 => x"93397251", +2517 => x"bc130854", +2518 => x"732d7951", +2519 => x"f8b63f70", +2520 => x"7080dfb0", +2521 => x"0bfc0570", +2522 => x"08525270", +2523 => x"ff2e9138", +2524 => x"702dfc12", +2525 => x"70085252", +2526 => x"70ff2e09", +2527 => x"8106f138", +2528 => x"50500404", +2529 => x"ffbb8c3f", +2530 => x"04000000", +2531 => x"00000040", +2532 => x"48656c6c", +2533 => x"6f20776f", +2534 => x"726c6420", +2535 => x"310a0000", +2536 => x"48656c6c", +2537 => x"6f20776f", +2538 => x"726c6420", +2539 => x"320a0000", +2540 => x"0a000000", +2541 => x"43000000", +2542 => x"64756d6d", +2543 => x"792e6578", +2544 => x"65000000", +2545 => x"00ffffff", +2546 => x"ff00ffff", +2547 => x"ffff00ff", +2548 => x"ffffff00", +2549 => x"00000000", +2550 => x"00000000", +2551 => x"00000000", +2552 => x"00002fb8", +2553 => x"000027e8", +2554 => x"00000000", +2555 => x"00002a50", +2556 => x"00002aac", +2557 => x"00002b08", +2558 => x"00000000", +2559 => x"00000000", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"000027b4", +2568 => x"00000000", +2569 => x"00000000", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000001", +2597 => x"330eabcd", +2598 => x"1234e66d", +2599 => x"deec0005", +2600 => x"000b0000", +2601 => x"00000000", +2602 => x"00000000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00000000", +2663 => x"00000000", +2664 => x"00000000", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", +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"00000000", +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"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", +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"ffffffff", +2790 => x"00000000", +2791 => x"00020000", +2792 => x"00000000", +2793 => x"00000000", +2794 => x"00002ba0", +2795 => x"00002ba0", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", +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"000027b8", +3051 => x"ffffffff", +3052 => x"00000000", +3053 => x"ffffffff", +3054 => 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(to_integer(unsigned(memAAddr))) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(to_integer(unsigned(memAAddr))); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(to_integer(unsigned(memBAddr))) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(to_integer(unsigned(memBAddr))); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/example/interrupt.vhd b/zpu/hdl/example/interrupt.vhd index ededf85..d2bc709 100644 --- a/zpu/hdl/example/interrupt.vhd +++ b/zpu/hdl/example/interrupt.vhd @@ -1,3156 +1,3156 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(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 dualport_ram; - -architecture dualport_ram_arch of dualport_ram is - - -type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); - -shared variable ram : ram_type := -( -0 => x"0b0b0b0b", -1 => x"82700b0b", -2 => x"80cfe00c", -3 => x"3a0b0b80", -4 => x"c6e00400", -5 => x"00000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"0b8af02d", -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"0b0b80cf", -162 => x"cc738306", -163 => x"10100508", -164 => x"060b0b0b", -165 => x"88aa0400", -166 => x"00000000", -167 => x"00000000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0b8b", -171 => x"ab2d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0b8b", -179 => x"ef2d5050", -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"80cfdc0c", -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"82c53f80", -257 => x"c6e63f04", -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"fe3d0d0b", -281 => x"0b80dfc8", -282 => x"08538413", -283 => x"0870882a", -284 => x"70810651", -285 => x"52527080", -286 => x"2ef03871", -287 => x"81ff0680", -288 => x"0c843d0d", -289 => x"04ff3d0d", -290 => x"0b0b80df", -291 => x"c8085271", -292 => x"0870882a", -293 => x"81327081", -294 => x"06515151", -295 => x"70f13873", -296 => x"720c833d", -297 => x"0d0480cf", -298 => x"dc08802e", -299 => x"a43880cf", -300 => x"e008822e", -301 => x"bd388380", -302 => x"800b0b0b", -303 => x"80dfc80c", -304 => x"82a0800b", -305 => x"80dfcc0c", -306 => x"8290800b", -307 => x"80dfd00c", -308 => x"04f88080", -309 => x"80a40b0b", -310 => x"0b80dfc8", -311 => x"0cf88080", -312 => x"82800b80", -313 => x"dfcc0cf8", -314 => x"80808480", -315 => x"0b80dfd0", -316 => x"0c0480c0", -317 => x"a8808c0b", -318 => x"0b0b80df", -319 => x"c80c80c0", -320 => x"a880940b", -321 => x"80dfcc0c", -322 => x"0b0b80cf", -323 => x"980b80df", -324 => x"d00c0470", -325 => x"7080dfd4", -326 => x"335170a7", -327 => x"3880cfe8", -328 => x"08700852", -329 => x"5270802e", -330 => x"94388412", -331 => x"80cfe80c", -332 => x"702d80cf", -333 => x"e8087008", -334 => x"525270ee", -335 => x"38810b80", -336 => x"dfd43450", -337 => x"50040470", -338 => x"0b0b80df", -339 => x"c408802e", -340 => x"8e380b0b", -341 => x"0b0b800b", -342 => x"802e0981", -343 => x"06833850", -344 => x"040b0b80", -345 => x"dfc4510b", -346 => x"0b0bf594", -347 => x"3f500404", -348 => x"803d0d80", -349 => x"dfe00881", -350 => x"1180dfe0", -351 => x"0c51823d", -352 => x"0d04fe3d", -353 => x"0d80dfe0", -354 => x"085380df", -355 => x"e0085272", -356 => x"722e8f38", -357 => x"80cf9c51", -358 => x"82b03f80", -359 => x"dfe00853", -360 => x"e93980cf", -361 => x"ac5182a2", -362 => x"3fe039fb", -363 => x"3d0d7779", -364 => x"55558056", -365 => x"757524ab", -366 => x"38807424", -367 => x"9d388053", -368 => x"73527451", -369 => x"80e13f80", -370 => x"08547580", -371 => x"2e853880", -372 => x"08305473", -373 => x"800c873d", -374 => x"0d047330", -375 => x"76813257", -376 => x"54dc3974", -377 => x"30558156", -378 => x"738025d2", -379 => x"38ec39fa", -380 => x"3d0d787a", -381 => x"57558057", -382 => x"767524a4", -383 => x"38759f2c", -384 => x"54815375", -385 => x"74327431", -386 => x"5274519b", -387 => x"3f800854", -388 => x"76802e85", -389 => x"38800830", -390 => x"5473800c", -391 => x"883d0d04", -392 => x"74305581", -393 => x"57d739fc", -394 => x"3d0d7678", -395 => x"53548153", -396 => x"80747326", -397 => x"52557280", -398 => x"2e983870", -399 => x"802eab38", -400 => x"807224a6", -401 => x"38711073", -402 => x"10757226", -403 => x"53545272", -404 => x"ea387351", -405 => x"78833874", -406 => x"5170800c", -407 => x"863d0d04", -408 => x"720a100a", -409 => x"720a100a", -410 => x"53537280", -411 => x"2ee43871", -412 => x"7426ed38", -413 => x"73723175", -414 => x"7407740a", -415 => x"100a740a", -416 => x"100a5555", -417 => x"5654e339", -418 => x"f73d0d7c", -419 => x"70525380", -420 => x"fd3f7254", -421 => x"8008550b", -422 => x"0b80cfb8", -423 => x"56815780", -424 => x"0881055a", -425 => x"8b3de411", -426 => x"59538259", -427 => x"f413527b", -428 => x"88110852", -429 => x"5381b43f", -430 => x"80083070", -431 => x"8008079f", -432 => x"2c8a0780", -433 => x"0c538b3d", -434 => x"0d04f63d", -435 => x"0d7c80cf", -436 => x"ec087153", -437 => x"5553b73f", -438 => x"72558008", -439 => x"560b0b80", -440 => x"cfb85781", -441 => x"58800881", -442 => x"055b8c3d", -443 => x"e4115a53", -444 => x"825af413", -445 => x"52881408", -446 => x"5180f03f", -447 => x"80083070", -448 => x"8008079f", -449 => x"2c8a0780", -450 => x"0c548c3d", -451 => x"0d047070", -452 => x"70707570", -453 => x"71830653", -454 => x"555270b4", -455 => x"38717008", -456 => x"7009f7fb", -457 => x"fdff1206", -458 => x"f8848281", -459 => x"80065452", -460 => x"53719b38", -461 => x"84137008", -462 => x"7009f7fb", -463 => x"fdff1206", -464 => x"f8848281", -465 => x"80065452", -466 => x"5371802e", -467 => x"e7387252", -468 => x"71335372", -469 => x"802e8a38", -470 => x"81127033", -471 => x"545272f8", -472 => x"38717431", -473 => x"800c5050", -474 => x"505004f2", -475 => x"3d0d6062", -476 => x"88110870", -477 => x"58565f5a", -478 => x"73802e81", -479 => x"8c388c1a", -480 => x"2270832a", -481 => x"81328106", -482 => x"56587486", -483 => x"38901a08", -484 => x"91387951", -485 => x"90b73fff", -486 => x"55800880", -487 => x"ec388c1a", -488 => x"22587d08", -489 => x"55807883", -490 => x"ffff0670", -491 => x"0a100a81", -492 => x"06415c57", -493 => x"7e772e80", -494 => x"d7387690", -495 => x"38740884", -496 => x"16088817", -497 => x"57585676", -498 => x"802ef238", -499 => x"76548880", -500 => x"77278438", -501 => x"88805473", -502 => x"5375529c", -503 => x"1a0851a4", -504 => x"1a085877", -505 => x"2d800b80", -506 => x"082582e0", -507 => x"38800816", -508 => x"77800831", -509 => x"7f880508", -510 => x"80083170", -511 => x"6188050c", -512 => x"5b585678", -513 => x"ffb43880", -514 => x"5574800c", -515 => x"903d0d04", -516 => x"7a813281", -517 => x"06774056", -518 => x"75802e81", -519 => x"bd387690", -520 => x"38740884", -521 => x"16088817", -522 => x"57585976", -523 => x"802ef238", -524 => x"881a0878", -525 => x"83ffff06", -526 => x"70892a81", -527 => x"06565956", -528 => x"73802e82", -529 => x"f8387577", -530 => x"278b3877", -531 => x"872a8106", -532 => x"5c7b82b5", -533 => x"38767627", -534 => x"83387656", -535 => x"75537852", -536 => x"79085185", -537 => x"833f881a", -538 => x"08763188", -539 => x"1b0c7908", -540 => x"167a0c76", -541 => x"56751977", -542 => x"77317f88", -543 => x"05087831", -544 => x"70618805", -545 => x"0c415859", -546 => x"7e802efe", -547 => x"fa388c1a", -548 => x"2258ff8a", -549 => x"39787954", -550 => x"7c537b52", -551 => x"5684c93f", -552 => x"881a0879", -553 => x"31881b0c", -554 => x"7908197a", -555 => x"0c7c7631", -556 => x"5d7c8e38", -557 => x"79518ff2", -558 => x"3f800881", -559 => x"8f388008", -560 => x"5f751c77", -561 => x"77317f88", -562 => x"05087831", -563 => x"70618805", -564 => x"0c5d585c", -565 => x"7a802efe", -566 => x"ae387681", -567 => x"83387408", -568 => x"84160888", -569 => x"1757585c", -570 => x"76802ef2", -571 => x"3876538a", -572 => x"527b5182", -573 => x"d33f8008", -574 => x"7c318105", -575 => x"5d800884", -576 => x"3881175d", -577 => x"815f7c59", -578 => x"767d2783", -579 => x"38765994", -580 => x"1a08881b", -581 => x"08115758", -582 => x"807a085c", -583 => x"54901a08", -584 => x"7b278338", -585 => x"81547579", -586 => x"25843873", -587 => x"ba387779", -588 => x"24fee238", -589 => x"77537b52", -590 => x"9c1a0851", -591 => x"a41a0859", -592 => x"782d8008", -593 => x"56800880", -594 => x"24fee238", -595 => x"8c1a2280", -596 => x"c0075e7d", -597 => x"8c1b23ff", -598 => x"5574800c", -599 => x"903d0d04", -600 => x"7effa338", -601 => x"ff873975", -602 => x"537b527a", -603 => x"5182f93f", -604 => x"7908167a", -605 => x"0c79518e", -606 => x"b13f8008", -607 => x"cf387c76", -608 => x"315d7cfe", -609 => x"bc38feac", -610 => x"39901a08", -611 => x"7a087131", -612 => x"78117056", -613 => x"5a575280", -614 => x"cfec0851", -615 => x"84943f80", -616 => x"08802eff", -617 => x"a7388008", -618 => x"901b0c80", -619 => x"08167a0c", -620 => x"77941b0c", -621 => x"76881b0c", -622 => x"7656fd99", -623 => x"39790858", -624 => x"901a0878", -625 => x"27833881", -626 => x"54757727", -627 => x"843873b3", -628 => x"38941a08", -629 => x"54737726", -630 => x"80d33873", -631 => x"5378529c", -632 => x"1a0851a4", -633 => x"1a085877", -634 => x"2d800856", -635 => x"80088024", -636 => x"fd83388c", -637 => x"1a2280c0", -638 => x"075e7d8c", -639 => x"1b23ff55", -640 => x"fed73975", -641 => x"53785277", -642 => x"5181dd3f", -643 => x"7908167a", -644 => x"0c79518d", -645 => x"953f8008", -646 => x"802efcd9", -647 => x"388c1a22", -648 => x"80c0075e", -649 => x"7d8c1b23", -650 => x"ff55fead", -651 => x"39767754", -652 => x"79537852", -653 => x"5681b13f", -654 => x"881a0877", -655 => x"31881b0c", -656 => x"7908177a", -657 => x"0cfcae39", -658 => x"fa3d0d7a", -659 => x"79028805", -660 => x"a7053355", -661 => x"53548374", -662 => x"2780df38", -663 => x"71830651", -664 => x"7080d738", -665 => x"71715755", -666 => x"83517582", -667 => x"802913ff", -668 => x"12525670", -669 => x"8025f338", -670 => x"837427bc", -671 => x"38740876", -672 => x"327009f7", -673 => x"fbfdff12", -674 => x"06f88482", -675 => x"81800651", -676 => x"5170802e", -677 => x"98387451", -678 => x"80527033", -679 => x"5772772e", -680 => x"b9388111", -681 => x"81135351", -682 => x"837227ee", -683 => x"38fc1484", -684 => x"16565473", -685 => x"8326c638", -686 => x"7452ff14", -687 => x"5170ff2e", -688 => x"97387133", -689 => x"5472742e", -690 => x"98388112", -691 => x"ff125252", -692 => x"70ff2e09", -693 => x"8106eb38", -694 => x"80517080", -695 => x"0c883d0d", -696 => x"0471800c", -697 => x"883d0d04", -698 => x"fa3d0d78", -699 => x"7a7c7272", -700 => x"72595755", -701 => x"58565774", -702 => x"7727b238", -703 => x"75155176", -704 => x"7127aa38", -705 => x"707618ff", -706 => x"18535353", -707 => x"70ff2e96", -708 => x"38ff12ff", -709 => x"14545272", -710 => x"337234ff", -711 => x"115170ff", -712 => x"2e098106", -713 => x"ec387680", -714 => x"0c883d0d", -715 => x"048f7627", -716 => x"80e63874", -717 => x"77078306", -718 => x"517080dc", -719 => x"38767552", -720 => x"53707084", -721 => x"05520873", -722 => x"70840555", -723 => x"0c727170", -724 => x"84055308", -725 => x"71708405", -726 => x"530c7170", -727 => x"84055308", -728 => x"71708405", -729 => x"530c7170", -730 => x"84055308", -731 => x"71708405", -732 => x"530cf015", -733 => x"5553738f", -734 => x"26c73883", -735 => x"74279538", -736 => x"70708405", -737 => x"52087370", -738 => x"8405550c", -739 => x"fc145473", -740 => x"8326ed38", -741 => x"72715452", -742 => x"ff145170", -743 => x"ff2eff86", -744 => x"38727081", -745 => x"05543372", -746 => x"70810554", -747 => x"34ff1151", -748 => x"ea39ef3d", -749 => x"0d636567", -750 => x"405d427b", -751 => x"802e8582", -752 => x"386151a9", -753 => x"e73ff81c", -754 => x"70841208", -755 => x"70fc0670", -756 => x"628b0570", -757 => x"f8064159", -758 => x"455c5f41", -759 => x"57967427", -760 => x"82c53880", -761 => x"7b247e7c", -762 => x"26075880", -763 => x"5477742e", -764 => x"09810682", -765 => x"ab38787b", -766 => x"2581fe38", -767 => x"781780d7", -768 => x"a80b8805", -769 => x"085b5679", -770 => x"762e84c5", -771 => x"38841608", -772 => x"70fe0617", -773 => x"84110881", -774 => x"06415555", -775 => x"7e828d38", -776 => x"74fc0658", -777 => x"79762e84", -778 => x"e3387818", -779 => x"5f7e7b25", -780 => x"81ff387c", -781 => x"81065473", -782 => x"82c13876", -783 => x"77083184", -784 => x"1108fc06", -785 => x"56577580", -786 => x"2e913879", -787 => x"762e84f0", -788 => x"38741819", -789 => x"58777b25", -790 => x"84913876", -791 => x"802e829b", -792 => x"38781556", -793 => x"7a762482", -794 => x"92388c17", -795 => x"08881808", -796 => x"718c120c", -797 => x"88120c5e", -798 => x"75598817", -799 => x"61fc055b", -800 => x"5679a426", -801 => x"85ff387b", -802 => x"76595593", -803 => x"7a2780c9", -804 => x"387b7084", -805 => x"055d087c", -806 => x"56760c74", -807 => x"70840556", -808 => x"088c180c", -809 => x"9017589b", -810 => x"7a27ae38", -811 => x"74708405", -812 => x"5608780c", -813 => x"74708405", -814 => x"56089418", -815 => x"0c981758", -816 => x"a37a2795", -817 => x"38747084", -818 => x"05560878", -819 => x"0c747084", -820 => x"0556089c", -821 => x"180ca017", -822 => x"58747084", -823 => x"05560875", -824 => x"5f787084", -825 => x"055a0c77", -826 => x"7e708405", -827 => x"40087170", -828 => x"8405530c", -829 => x"7e08710c", -830 => x"5d787b31", -831 => x"56758f26", -832 => x"80c93884", -833 => x"17088106", -834 => x"79078418", -835 => x"0c781784", -836 => x"11088107", -837 => x"84120c5b", -838 => x"6151a791", -839 => x"3f881754", -840 => x"73800c93", -841 => x"3d0d0490", -842 => x"5bfdb839", -843 => x"7756fe83", -844 => x"398c1608", -845 => x"88170871", -846 => x"8c120c88", -847 => x"120c587e", -848 => x"707c3157", -849 => x"598f7627", -850 => x"ffb9387a", -851 => x"17841808", -852 => x"81067c07", -853 => x"84190c76", -854 => x"81078412", -855 => x"0c761184", -856 => x"11088107", -857 => x"84120c5b", -858 => x"88055261", -859 => x"518fda3f", -860 => x"6151a6b9", -861 => x"3f881754", -862 => x"ffa6397d", -863 => x"52615197", -864 => x"d73f8008", -865 => x"5a800880", -866 => x"2e81ab38", -867 => x"8008f805", -868 => x"60840508", -869 => x"fe066105", -870 => x"58557477", -871 => x"2e83f238", -872 => x"fc195877", -873 => x"a42681b0", -874 => x"387b8008", -875 => x"56579378", -876 => x"2780dc38", -877 => x"7b707084", -878 => x"05520880", -879 => x"08708405", -880 => x"800c0c80", -881 => x"08717084", -882 => x"0553085d", -883 => x"567b7670", -884 => x"8405580c", -885 => x"579b7827", -886 => x"b6387670", -887 => x"84055808", -888 => x"75708405", -889 => x"570c7670", -890 => x"84055808", -891 => x"75708405", -892 => x"570ca378", -893 => x"27993876", -894 => x"70840558", -895 => x"08757084", -896 => x"05570c76", -897 => x"70840558", -898 => x"08757084", -899 => x"05570c76", -900 => x"70840558", -901 => x"08775e75", -902 => x"70840557", -903 => x"0c747d70", -904 => x"84055f08", -905 => x"71708405", -906 => x"530c7d08", -907 => x"710c5f7b", -908 => x"5261518e", -909 => x"943f6151", -910 => x"a4f33f79", -911 => x"800c933d", -912 => x"0d047d52", -913 => x"61519690", -914 => x"3f800880", -915 => x"0c933d0d", -916 => x"04841608", -917 => x"55fbc939", -918 => x"77537b52", -919 => x"800851a2", -920 => x"a53f7b52", -921 => x"61518de1", -922 => x"3fcc398c", -923 => x"16088817", -924 => x"08718c12", -925 => x"0c88120c", -926 => x"5d8c1708", -927 => x"88180871", -928 => x"8c120c88", -929 => x"120c5977", -930 => x"59fbef39", -931 => x"7818901c", -932 => x"40557e75", -933 => x"24fb9c38", -934 => x"7a177080", -935 => x"d7a80b88", -936 => x"050c757c", -937 => x"31810784", -938 => x"120c5684", -939 => x"17088106", -940 => x"7b078418", -941 => x"0c6151a3", -942 => x"f43f8817", -943 => x"54fce139", -944 => x"74181990", -945 => x"1c5e5a7c", -946 => x"7a24fb8f", -947 => x"388c1708", -948 => x"88180871", -949 => x"8c120c88", -950 => x"120c5e88", -951 => x"1761fc05", -952 => x"575975a4", -953 => x"2681b638", -954 => x"7b795955", -955 => x"93762780", -956 => x"c9387b70", -957 => x"84055d08", -958 => x"7c56790c", -959 => x"74708405", -960 => x"56088c18", -961 => x"0c901758", -962 => x"9b7627ae", -963 => x"38747084", -964 => x"05560878", -965 => x"0c747084", -966 => x"05560894", -967 => x"180c9817", -968 => x"58a37627", -969 => x"95387470", -970 => x"84055608", -971 => x"780c7470", -972 => x"84055608", -973 => x"9c180ca0", -974 => x"17587470", -975 => x"84055608", -976 => x"75417870", -977 => x"84055a0c", -978 => x"77607084", -979 => x"05420871", -980 => x"70840553", -981 => x"0c600871", -982 => x"0c5e7a17", -983 => x"7080d7a8", -984 => x"0b88050c", -985 => x"7a7c3181", -986 => x"0784120c", -987 => x"58841708", -988 => x"81067b07", -989 => x"84180c61", -990 => x"51a2b23f", -991 => x"78547380", -992 => x"0c933d0d", -993 => x"0479537b", -994 => x"5275519f", -995 => x"f93ffae9", -996 => x"39841508", -997 => x"fc061960", -998 => x"5859fadd", -999 => x"3975537b", -1000 => x"5278519f", -1001 => x"e13f7a17", -1002 => x"7080d7a8", -1003 => x"0b88050c", -1004 => x"7a7c3181", -1005 => x"0784120c", -1006 => x"58841708", -1007 => x"81067b07", -1008 => x"84180c61", -1009 => x"51a1e63f", -1010 => x"7854ffb2", -1011 => x"39fa3d0d", -1012 => x"7880cfec", -1013 => x"085455b8", -1014 => x"1308802e", -1015 => x"81af388c", -1016 => x"15227083", -1017 => x"ffff0670", -1018 => x"832a8132", -1019 => x"81065555", -1020 => x"5672802e", -1021 => x"80da3873", -1022 => x"842a8132", -1023 => x"810657ff", -1024 => x"537680f2", -1025 => x"3873822a", -1026 => x"81065473", -1027 => x"802eb938", -1028 => x"b0150854", -1029 => x"73802e9c", -1030 => x"3880c015", -1031 => x"5373732e", -1032 => x"8f387352", -1033 => x"80cfec08", -1034 => x"518a9e3f", -1035 => x"8c152256", -1036 => x"76b0160c", -1037 => x"75db0657", -1038 => x"768c1623", -1039 => x"800b8416", -1040 => x"0c901508", -1041 => x"750c7656", -1042 => x"75880754", -1043 => x"738c1623", -1044 => x"90150880", -1045 => x"2ebf388c", -1046 => x"15227081", -1047 => x"06555373", -1048 => x"9c38720a", -1049 => x"100a8106", -1050 => x"56758538", -1051 => x"94150854", -1052 => x"7388160c", -1053 => x"80537280", -1054 => x"0c883d0d", -1055 => x"04800b88", -1056 => x"160c9415", -1057 => x"08309816", -1058 => x"0c8053ea", -1059 => x"39725182", -1060 => x"a63ffecb", -1061 => x"3974518f", -1062 => x"bc3f8c15", -1063 => x"22708106", -1064 => x"55537380", -1065 => x"2effbb38", -1066 => x"d439f83d", -1067 => x"0d7a5776", -1068 => x"802e8197", -1069 => x"3880cfec", -1070 => x"0854b814", -1071 => x"08802e80", -1072 => x"eb388c17", -1073 => x"2270902b", -1074 => x"70902c70", -1075 => x"832a8132", -1076 => x"81065b5b", -1077 => x"57557780", -1078 => x"cb389017", -1079 => x"08567580", -1080 => x"2e80c138", -1081 => x"76087631", -1082 => x"76780c79", -1083 => x"83065555", -1084 => x"73853894", -1085 => x"17085877", -1086 => x"88180c80", -1087 => x"7525a538", -1088 => x"74537552", -1089 => x"9c170851", -1090 => x"a4170854", -1091 => x"732d800b", -1092 => x"80082580", -1093 => x"c9388008", -1094 => x"16758008", -1095 => x"31565674", -1096 => x"8024dd38", -1097 => x"800b800c", -1098 => x"8a3d0d04", -1099 => x"73518187", -1100 => x"3f8c1722", -1101 => x"70902b70", -1102 => x"902c7083", -1103 => x"2a813281", -1104 => x"065b5b57", -1105 => x"5577dd38", -1106 => x"ff9039a1", -1107 => x"aa5280cf", -1108 => x"ec08518c", -1109 => x"d03f8008", -1110 => x"800c8a3d", -1111 => x"0d048c17", -1112 => x"2280c007", -1113 => x"58778c18", -1114 => x"23ff0b80", -1115 => x"0c8a3d0d", -1116 => x"04fa3d0d", -1117 => x"797080dc", -1118 => x"298c1154", -1119 => x"7a535657", -1120 => x"8fd63f80", -1121 => x"08800855", -1122 => x"56800880", -1123 => x"2ea23880", -1124 => x"088c0554", -1125 => x"800b8008", -1126 => x"0c768008", -1127 => x"84050c73", -1128 => x"80088805", -1129 => x"0c745380", -1130 => x"5273519c", -1131 => x"f53f7554", -1132 => x"73800c88", -1133 => x"3d0d0470", -1134 => x"707074a8", -1135 => x"f60bbc12", -1136 => x"0c53810b", -1137 => x"b8140c80", -1138 => x"0b84dc14", -1139 => x"0c830b84", -1140 => x"e0140c84", -1141 => x"e81384e4", -1142 => x"140c8413", -1143 => x"08518070", -1144 => x"720c7084", -1145 => x"130c7088", -1146 => x"130c5284", -1147 => x"0b8c1223", -1148 => x"718e1223", -1149 => x"7190120c", -1150 => x"7194120c", -1151 => x"7198120c", -1152 => x"709c120c", -1153 => x"80c1e50b", -1154 => x"a0120c80", -1155 => x"c2b10ba4", -1156 => x"120c80c3", -1157 => x"ad0ba812", -1158 => x"0c80c3fe", -1159 => x"0bac120c", -1160 => x"88130872", -1161 => x"710c7284", -1162 => x"120c7288", -1163 => x"120c5189", -1164 => x"0b8c1223", -1165 => x"810b8e12", -1166 => x"23719012", -1167 => x"0c719412", -1168 => x"0c719812", -1169 => x"0c709c12", -1170 => x"0c80c1e5", -1171 => x"0ba0120c", -1172 => x"80c2b10b", -1173 => x"a4120c80", -1174 => x"c3ad0ba8", -1175 => x"120c80c3", -1176 => x"fe0bac12", -1177 => x"0c8c1308", -1178 => x"72710c72", -1179 => x"84120c72", -1180 => x"88120c51", -1181 => x"8a0b8c12", -1182 => x"23820b8e", -1183 => x"12237190", -1184 => x"120c7194", -1185 => x"120c7198", -1186 => x"120c709c", -1187 => x"120c80c1", -1188 => x"e50ba012", -1189 => x"0c80c2b1", -1190 => x"0ba4120c", -1191 => x"80c3ad0b", -1192 => x"a8120c80", -1193 => x"c3fe0bac", -1194 => x"120c5050", -1195 => x"5004f83d", -1196 => x"0d7a80cf", -1197 => x"ec08b811", -1198 => x"08575758", -1199 => x"7481ec38", -1200 => x"a8f60bbc", -1201 => x"170c810b", -1202 => x"b8170c74", -1203 => x"84dc170c", -1204 => x"830b84e0", -1205 => x"170c84e8", -1206 => x"1684e417", -1207 => x"0c841608", -1208 => x"75710c75", -1209 => x"84120c75", -1210 => x"88120c59", -1211 => x"840b8c1a", -1212 => x"23748e1a", -1213 => x"2374901a", -1214 => x"0c74941a", -1215 => x"0c74981a", -1216 => x"0c789c1a", -1217 => x"0c80c1e5", -1218 => x"0ba01a0c", -1219 => x"80c2b10b", -1220 => x"a41a0c80", -1221 => x"c3ad0ba8", -1222 => x"1a0c80c3", -1223 => x"fe0bac1a", -1224 => x"0c881608", -1225 => x"75710c75", -1226 => x"84120c75", -1227 => x"88120c57", -1228 => x"890b8c18", -1229 => x"23810b8e", -1230 => x"18237490", -1231 => x"180c7494", -1232 => x"180c7498", -1233 => x"180c769c", -1234 => x"180c80c1", -1235 => x"e50ba018", -1236 => x"0c80c2b1", -1237 => x"0ba4180c", -1238 => x"80c3ad0b", -1239 => x"a8180c80", -1240 => x"c3fe0bac", -1241 => x"180c8c16", -1242 => x"0875710c", -1243 => x"7584120c", -1244 => x"7588120c", -1245 => x"548a0b8c", -1246 => x"1523820b", -1247 => x"8e152374", -1248 => x"90150c74", -1249 => x"94150c74", -1250 => x"98150c73", -1251 => x"9c150c80", -1252 => x"c1e50ba0", -1253 => x"150c80c2", -1254 => x"b10ba415", -1255 => x"0c80c3ad", -1256 => x"0ba8150c", -1257 => x"80c3fe0b", -1258 => x"ac150c84", -1259 => x"dc168811", -1260 => x"08841208", -1261 => x"ff055757", -1262 => x"57807524", -1263 => x"9f388c16", -1264 => x"2270902b", -1265 => x"70902c51", -1266 => x"55597380", -1267 => x"2e80ed38", -1268 => x"80dc16ff", -1269 => x"16565674", -1270 => x"8025e338", -1271 => x"76085574", -1272 => x"802e8f38", -1273 => x"74881108", -1274 => x"841208ff", -1275 => x"05575757", -1276 => x"c83982fc", -1277 => x"5277518a", -1278 => x"df3f8008", -1279 => x"80085556", -1280 => x"8008802e", -1281 => x"a3388008", -1282 => x"8c057580", -1283 => x"080c5484", -1284 => x"0b800884", -1285 => x"050c7380", -1286 => x"0888050c", -1287 => x"82f05374", -1288 => x"52735197", -1289 => x"fd3f7554", -1290 => x"7374780c", -1291 => x"5573ffb4", -1292 => x"388c780c", -1293 => x"800b800c", -1294 => x"8a3d0d04", -1295 => x"810b8c17", -1296 => x"2373760c", -1297 => x"7388170c", -1298 => x"7384170c", -1299 => x"7390170c", -1300 => x"7394170c", -1301 => x"7398170c", -1302 => x"ff0b8e17", -1303 => x"2373b017", -1304 => x"0c73b417", -1305 => x"0c7380c4", -1306 => x"170c7380", -1307 => x"c8170c75", -1308 => x"800c8a3d", -1309 => x"0d047070", -1310 => x"a1aa5273", -1311 => x"5186a63f", -1312 => x"50500470", -1313 => x"70a1aa52", -1314 => x"80cfec08", -1315 => x"5186963f", -1316 => x"505004fb", -1317 => x"3d0d7770", -1318 => x"52569890", -1319 => x"3f80d7a8", -1320 => x"0b880508", -1321 => x"841108fc", -1322 => x"06707b31", -1323 => x"9fef05e0", -1324 => x"8006e080", -1325 => x"05525555", -1326 => x"a0807524", -1327 => x"94388052", -1328 => x"755197ea", -1329 => x"3f80d7b0", -1330 => x"08145372", -1331 => x"80082e8f", -1332 => x"38755197", -1333 => x"d83f8053", -1334 => x"72800c87", -1335 => x"3d0d0474", -1336 => x"30527551", -1337 => x"97c83f80", -1338 => x"08ff2ea8", -1339 => x"3880d7a8", -1340 => x"0b880508", -1341 => x"74763181", -1342 => x"0784120c", -1343 => x"5380d6ec", -1344 => x"08753180", -1345 => x"d6ec0c75", -1346 => x"5197a23f", -1347 => x"810b800c", -1348 => x"873d0d04", -1349 => x"80527551", -1350 => x"97943f80", -1351 => x"d7a80b88", -1352 => x"05088008", -1353 => x"71315454", -1354 => x"8f7325ff", -1355 => x"a4388008", -1356 => x"80d79c08", -1357 => x"3180d6ec", -1358 => x"0c728107", -1359 => x"84150c75", -1360 => x"5196ea3f", -1361 => x"8053ff90", -1362 => x"39f73d0d", -1363 => x"7b7d545a", -1364 => x"72802e82", -1365 => x"83387951", -1366 => x"96d23ff8", -1367 => x"13841108", -1368 => x"70fe0670", -1369 => x"13841108", -1370 => x"fc065c57", -1371 => x"58545780", -1372 => x"d7b00874", -1373 => x"2e82de38", -1374 => x"7784150c", -1375 => x"80738106", -1376 => x"56597479", -1377 => x"2e81d538", -1378 => x"77148411", -1379 => x"08810656", -1380 => x"5374a038", -1381 => x"77165678", -1382 => x"81e63888", -1383 => x"14085574", -1384 => x"80d7b02e", -1385 => x"82f9388c", -1386 => x"1408708c", -1387 => x"170c7588", -1388 => x"120c5875", -1389 => x"81078418", -1390 => x"0c751776", -1391 => x"710c5478", -1392 => x"81913883", -1393 => x"ff762781", -1394 => x"c8387589", -1395 => x"2a76832a", -1396 => x"54547380", -1397 => x"2ebf3875", -1398 => x"862ab805", -1399 => x"53847427", -1400 => x"b43880db", -1401 => x"14539474", -1402 => x"27ab3875", -1403 => x"8c2a80ee", -1404 => x"055380d4", -1405 => x"74279e38", -1406 => x"758f2a80", -1407 => x"f7055382", -1408 => x"d4742791", -1409 => x"3875922a", -1410 => x"80fc0553", -1411 => x"8ad47427", -1412 => x"843880fe", -1413 => x"53721010", -1414 => x"1080d7a8", -1415 => x"05881108", -1416 => x"55557375", -1417 => x"2e82bf38", -1418 => x"841408fc", -1419 => x"06597579", -1420 => x"278d3888", -1421 => x"14085473", -1422 => x"752e0981", -1423 => x"06ea388c", -1424 => x"1408708c", -1425 => x"190c7488", -1426 => x"190c7788", -1427 => x"120c5576", -1428 => x"8c150c79", -1429 => x"5194d63f", -1430 => x"8b3d0d04", -1431 => x"76087771", -1432 => x"31587605", -1433 => x"88180856", -1434 => x"567480d7", -1435 => x"b02e80e0", -1436 => x"388c1708", -1437 => x"708c170c", -1438 => x"7588120c", -1439 => x"53fe8939", -1440 => x"8814088c", -1441 => x"1508708c", -1442 => x"130c5988", -1443 => x"190cfea3", -1444 => x"3975832a", -1445 => x"70545480", -1446 => x"74248198", -1447 => x"3872822c", -1448 => x"81712b80", -1449 => x"d7ac0807", -1450 => x"80d7a80b", -1451 => x"84050c74", -1452 => x"10101080", -1453 => x"d7a80588", -1454 => x"1108718c", -1455 => x"1b0c7088", -1456 => x"1b0c7988", -1457 => x"130c565a", -1458 => x"55768c15", -1459 => x"0cff8439", -1460 => x"8159fdb4", -1461 => x"39771673", -1462 => x"81065455", -1463 => x"72983876", -1464 => x"08777131", -1465 => x"5875058c", -1466 => x"18088819", -1467 => x"08718c12", -1468 => x"0c88120c", -1469 => x"55557481", -1470 => x"0784180c", -1471 => x"7680d7a8", -1472 => x"0b88050c", -1473 => x"80d7a408", -1474 => x"7526fec7", -1475 => x"3880d7a0", -1476 => x"08527951", -1477 => x"fafd3f79", -1478 => x"5193923f", -1479 => x"feba3981", -1480 => x"778c170c", -1481 => x"7788170c", -1482 => x"758c190c", -1483 => x"7588190c", -1484 => x"59fd8039", -1485 => x"83147082", -1486 => x"2c81712b", -1487 => x"80d7ac08", -1488 => x"0780d7a8", -1489 => x"0b84050c", -1490 => x"75101010", -1491 => x"80d7a805", -1492 => x"88110871", -1493 => x"8c1c0c70", -1494 => x"881c0c7a", -1495 => x"88130c57", -1496 => x"5b5653fe", -1497 => x"e4398073", -1498 => x"24a33872", -1499 => x"822c8171", -1500 => x"2b80d7ac", -1501 => x"080780d7", -1502 => x"a80b8405", -1503 => x"0c58748c", -1504 => x"180c7388", -1505 => x"180c7688", -1506 => x"160cfdc3", -1507 => x"39831370", -1508 => x"822c8171", -1509 => x"2b80d7ac", -1510 => x"080780d7", -1511 => x"a80b8405", -1512 => x"0c5953da", -1513 => x"39f93d0d", -1514 => x"797b5853", -1515 => x"800b80cf", -1516 => x"ec085356", -1517 => x"72722ebc", -1518 => x"3884dc13", -1519 => x"5574762e", -1520 => x"b3388815", -1521 => x"08841608", -1522 => x"ff055454", -1523 => x"80732499", -1524 => x"388c1422", -1525 => x"70902b53", -1526 => x"587180d4", -1527 => x"3880dc14", -1528 => x"ff145454", -1529 => x"728025e9", -1530 => x"38740855", -1531 => x"74d43880", -1532 => x"cfec0852", -1533 => x"84dc1255", -1534 => x"74802ead", -1535 => x"38881508", -1536 => x"841608ff", -1537 => x"05545480", -1538 => x"73249838", -1539 => x"8c142270", -1540 => x"902b5358", -1541 => x"71ad3880", -1542 => x"dc14ff14", -1543 => x"54547280", -1544 => x"25ea3874", -1545 => x"085574d5", -1546 => x"3875800c", -1547 => x"893d0d04", -1548 => x"7351762d", -1549 => x"75800807", -1550 => x"80dc15ff", -1551 => x"15555556", -1552 => x"ffa23973", -1553 => x"51762d75", -1554 => x"80080780", -1555 => x"dc15ff15", -1556 => x"555556ca", -1557 => x"39ea3d0d", -1558 => x"688c1122", -1559 => x"700a100a", -1560 => x"81065758", -1561 => x"567480e4", -1562 => x"388e1622", -1563 => x"70902b70", -1564 => x"902c5155", -1565 => x"58807424", -1566 => x"b138983d", -1567 => x"c4055373", -1568 => x"5280cfec", -1569 => x"08519481", -1570 => x"3f800b80", -1571 => x"08249738", -1572 => x"7983e080", -1573 => x"06547380", -1574 => x"c0802e81", -1575 => x"8f387382", -1576 => x"80802e81", -1577 => x"91388c16", -1578 => x"22577690", -1579 => x"80075473", -1580 => x"8c172388", -1581 => x"805280cf", -1582 => x"ec085181", -1583 => x"9b3f8008", -1584 => x"9d388c16", -1585 => x"22820755", -1586 => x"748c1723", -1587 => x"80c31670", -1588 => x"770c9017", -1589 => x"0c810b94", -1590 => x"170c983d", -1591 => x"0d0480cf", -1592 => x"ec08a8f6", -1593 => x"0bbc120c", -1594 => x"588c1622", -1595 => x"81800754", -1596 => x"738c1723", -1597 => x"8008760c", -1598 => x"80089017", -1599 => x"0c88800b", -1600 => x"94170c74", -1601 => x"802ed338", -1602 => x"8e162270", -1603 => x"902b7090", -1604 => x"2c535654", -1605 => x"9afb3f80", -1606 => x"08802eff", -1607 => x"bd388c16", -1608 => x"22810757", -1609 => x"768c1723", -1610 => x"983d0d04", -1611 => x"810b8c17", -1612 => x"225855fe", -1613 => x"f539a816", -1614 => x"0880c3ad", -1615 => x"2e098106", -1616 => x"fee4388c", -1617 => x"16228880", -1618 => x"0754738c", -1619 => x"17238880", -1620 => x"0b80cc17", -1621 => x"0cfedc39", -1622 => x"f43d0d7e", -1623 => x"608b1170", -1624 => x"f8065b55", -1625 => x"555d7296", -1626 => x"26833890", -1627 => x"58807824", -1628 => x"74792607", -1629 => x"55805474", -1630 => x"742e0981", -1631 => x"0680ca38", -1632 => x"7c518ea8", -1633 => x"3f7783f7", -1634 => x"2680c538", -1635 => x"77832a70", -1636 => x"10101080", -1637 => x"d7a8058c", -1638 => x"11085858", -1639 => x"5475772e", -1640 => x"81f03884", -1641 => x"1608fc06", -1642 => x"8c170888", -1643 => x"1808718c", -1644 => x"120c8812", -1645 => x"0c5b7605", -1646 => x"84110881", -1647 => x"0784120c", -1648 => x"537c518d", -1649 => x"e83f8816", -1650 => x"5473800c", -1651 => x"8e3d0d04", -1652 => x"77892a78", -1653 => x"832a5854", -1654 => x"73802ebf", -1655 => x"3877862a", -1656 => x"b8055784", -1657 => x"7427b438", -1658 => x"80db1457", -1659 => x"947427ab", -1660 => x"38778c2a", -1661 => x"80ee0557", -1662 => x"80d47427", -1663 => x"9e38778f", -1664 => x"2a80f705", -1665 => x"5782d474", -1666 => x"27913877", -1667 => x"922a80fc", -1668 => x"05578ad4", -1669 => x"74278438", -1670 => x"80fe5776", -1671 => x"10101080", -1672 => x"d7a8058c", -1673 => x"11085653", -1674 => x"74732ea3", -1675 => x"38841508", -1676 => x"fc067079", -1677 => x"31555673", -1678 => x"8f2488e4", -1679 => x"38738025", -1680 => x"88e6388c", -1681 => x"15085574", -1682 => x"732e0981", -1683 => x"06df3881", -1684 => x"175980d7", -1685 => x"b8085675", -1686 => x"80d7b02e", -1687 => x"82cc3884", -1688 => x"1608fc06", -1689 => x"70793155", -1690 => x"55738f24", -1691 => x"bb3880d7", -1692 => x"b00b80d7", -1693 => x"bc0c80d7", -1694 => x"b00b80d7", -1695 => x"b80c8074", -1696 => x"2480db38", -1697 => x"74168411", -1698 => x"08810784", -1699 => x"120c53fe", -1700 => x"b0398816", -1701 => x"8c110857", -1702 => x"5975792e", -1703 => x"098106fe", -1704 => x"82388214", -1705 => x"59ffab39", -1706 => x"77167881", -1707 => x"0784180c", -1708 => x"7080d7bc", -1709 => x"0c7080d7", -1710 => x"b80c80d7", -1711 => x"b00b8c12", -1712 => x"0c8c1108", -1713 => x"88120c74", -1714 => x"81078412", -1715 => x"0c740574", -1716 => x"710c5b7c", -1717 => x"518bd63f", -1718 => x"881654fd", -1719 => x"ec3983ff", -1720 => x"75278391", -1721 => x"3874892a", -1722 => x"75832a54", -1723 => x"5473802e", -1724 => x"bf387486", -1725 => x"2ab80553", -1726 => x"847427b4", -1727 => x"3880db14", -1728 => x"53947427", -1729 => x"ab38748c", -1730 => x"2a80ee05", -1731 => x"5380d474", -1732 => x"279e3874", -1733 => x"8f2a80f7", -1734 => x"055382d4", -1735 => x"74279138", -1736 => x"74922a80", -1737 => x"fc05538a", -1738 => x"d4742784", -1739 => x"3880fe53", -1740 => x"72101010", -1741 => x"80d7a805", -1742 => x"88110855", -1743 => x"5773772e", -1744 => x"868b3884", -1745 => x"1408fc06", -1746 => x"5b747b27", -1747 => x"8d388814", -1748 => x"08547377", -1749 => x"2e098106", -1750 => x"ea388c14", -1751 => x"0880d7a8", -1752 => x"0b840508", -1753 => x"718c190c", -1754 => x"7588190c", -1755 => x"7788130c", -1756 => x"5c57758c", -1757 => x"150c7853", -1758 => x"80792483", -1759 => x"98387282", -1760 => x"2c81712b", -1761 => x"5656747b", -1762 => x"2680ca38", -1763 => x"7a750657", -1764 => x"7682a338", -1765 => x"78fc0684", -1766 => x"05597410", -1767 => x"707c0655", -1768 => x"55738292", -1769 => x"38841959", -1770 => x"f13980d7", -1771 => x"a80b8405", -1772 => x"0879545b", -1773 => x"788025c6", -1774 => x"3882da39", -1775 => x"74097b06", -1776 => x"7080d7a8", -1777 => x"0b84050c", -1778 => x"5b741055", -1779 => x"747b2685", -1780 => x"387485bc", -1781 => x"3880d7a8", -1782 => x"0b880508", -1783 => x"70841208", -1784 => x"fc06707b", -1785 => x"317b7226", -1786 => x"8f722507", -1787 => x"5d575c5c", -1788 => x"5578802e", -1789 => x"80d93879", -1790 => x"1580d7a0", -1791 => x"08199011", -1792 => x"59545680", -1793 => x"d79c08ff", -1794 => x"2e8838a0", -1795 => x"8f13e080", -1796 => x"06577652", -1797 => x"7c518996", -1798 => x"3f800854", -1799 => x"8008ff2e", -1800 => x"90388008", -1801 => x"762782a7", -1802 => x"387480d7", -1803 => x"a82e829f", -1804 => x"3880d7a8", -1805 => x"0b880508", -1806 => x"55841508", -1807 => x"fc067079", -1808 => x"31797226", -1809 => x"8f722507", -1810 => x"5d555a7a", -1811 => x"83f23877", -1812 => x"81078416", -1813 => x"0c771570", -1814 => x"80d7a80b", -1815 => x"88050c74", -1816 => x"81078412", -1817 => x"0c567c51", -1818 => x"88c33f88", -1819 => x"15547380", -1820 => x"0c8e3d0d", -1821 => x"0474832a", -1822 => x"70545480", -1823 => x"7424819b", -1824 => x"3872822c", -1825 => x"81712b80", -1826 => x"d7ac0807", -1827 => x"7080d7a8", -1828 => x"0b84050c", -1829 => x"75101010", -1830 => x"80d7a805", -1831 => x"88110871", -1832 => x"8c1b0c70", -1833 => x"881b0c79", -1834 => x"88130c57", -1835 => x"555c5575", -1836 => x"8c150cfd", -1837 => x"c1397879", -1838 => x"10101080", -1839 => x"d7a80570", -1840 => x"565b5c8c", -1841 => x"14085675", -1842 => x"742ea338", -1843 => x"841608fc", -1844 => x"06707931", -1845 => x"5853768f", -1846 => x"2483f138", -1847 => x"76802584", -1848 => x"af388c16", -1849 => x"08567574", -1850 => x"2e098106", -1851 => x"df388814", -1852 => x"811a7083", -1853 => x"06555a54", -1854 => x"72c9387b", -1855 => x"83065675", -1856 => x"802efdb8", -1857 => x"38ff1cf8", -1858 => x"1b5b5c88", -1859 => x"1a087a2e", -1860 => x"ea38fdb5", -1861 => x"39831953", -1862 => x"fce43983", -1863 => x"1470822c", -1864 => x"81712b80", -1865 => x"d7ac0807", -1866 => x"7080d7a8", -1867 => x"0b84050c", -1868 => x"76101010", -1869 => x"80d7a805", -1870 => x"88110871", -1871 => x"8c1c0c70", -1872 => x"881c0c7a", -1873 => x"88130c58", -1874 => x"535d5653", -1875 => x"fee13980", -1876 => x"d6ec0817", -1877 => x"59800876", -1878 => x"2e818b38", -1879 => x"80d79c08", -1880 => x"ff2e848e", -1881 => x"38737631", -1882 => x"1980d6ec", -1883 => x"0c738706", -1884 => x"70565372", -1885 => x"802e8838", -1886 => x"88733170", -1887 => x"15555576", -1888 => x"149fff06", -1889 => x"a0807131", -1890 => x"1670547e", -1891 => x"53515386", -1892 => x"9d3f8008", -1893 => x"568008ff", -1894 => x"2e819e38", -1895 => x"80d6ec08", -1896 => x"137080d6", -1897 => x"ec0c7475", -1898 => x"80d7a80b", -1899 => x"88050c77", -1900 => x"76311581", -1901 => x"07555659", -1902 => x"7a80d7a8", -1903 => x"2e83c038", -1904 => x"798f2682", -1905 => x"ef38810b", -1906 => x"84150c84", -1907 => x"1508fc06", -1908 => x"70793179", -1909 => x"72268f72", -1910 => x"25075d55", -1911 => x"5a7a802e", -1912 => x"fced3880", -1913 => x"db398008", -1914 => x"9fff0655", -1915 => x"74feed38", -1916 => x"7880d6ec", -1917 => x"0c80d7a8", -1918 => x"0b880508", -1919 => x"7a188107", -1920 => x"84120c55", -1921 => x"80d79808", -1922 => x"79278638", -1923 => x"7880d798", -1924 => x"0c80d794", -1925 => x"087927fc", -1926 => x"a0387880", -1927 => x"d7940c84", -1928 => x"1508fc06", -1929 => x"70793179", -1930 => x"72268f72", -1931 => x"25075d55", -1932 => x"5a7a802e", -1933 => x"fc993888", -1934 => x"39807457", -1935 => x"53fedd39", -1936 => x"7c5184e9", -1937 => x"3f800b80", -1938 => x"0c8e3d0d", -1939 => x"04807324", -1940 => x"a5387282", -1941 => x"2c81712b", -1942 => x"80d7ac08", -1943 => x"077080d7", -1944 => x"a80b8405", -1945 => x"0c5c5a76", -1946 => x"8c170c73", -1947 => x"88170c75", -1948 => x"88180cf9", -1949 => x"fd398313", -1950 => x"70822c81", -1951 => x"712b80d7", -1952 => x"ac080770", -1953 => x"80d7a80b", -1954 => x"84050c5d", -1955 => x"5b53d839", -1956 => x"7a75065c", -1957 => x"7bfc9f38", -1958 => x"84197510", -1959 => x"5659f139", -1960 => x"ff178105", -1961 => x"59f7ab39", -1962 => x"8c150888", -1963 => x"1608718c", -1964 => x"120c8812", -1965 => x"0c597515", -1966 => x"84110881", -1967 => x"0784120c", -1968 => x"587c5183", -1969 => x"e83f8815", -1970 => x"54fba339", -1971 => x"77167881", -1972 => x"0784180c", -1973 => x"8c170888", -1974 => x"1808718c", -1975 => x"120c8812", -1976 => x"0c5c7080", -1977 => x"d7bc0c70", -1978 => x"80d7b80c", -1979 => x"80d7b00b", -1980 => x"8c120c8c", -1981 => x"11088812", -1982 => x"0c778107", -1983 => x"84120c77", -1984 => x"0577710c", -1985 => x"557c5183", -1986 => x"a43f8816", -1987 => x"54f5ba39", -1988 => x"72168411", -1989 => x"08810784", -1990 => x"120c588c", -1991 => x"16088817", -1992 => x"08718c12", -1993 => x"0c88120c", -1994 => x"577c5183", -1995 => x"803f8816", -1996 => x"54f59639", -1997 => x"7284150c", -1998 => x"f41af806", -1999 => x"70841d08", -2000 => x"81060784", -2001 => x"1d0c701c", -2002 => x"5556850b", -2003 => x"84150c85", -2004 => x"0b88150c", -2005 => x"8f7627fd", -2006 => x"ab38881b", -2007 => x"527c51eb", -2008 => x"e83f80d7", -2009 => x"a80b8805", -2010 => x"0880d6ec", -2011 => x"085a55fd", -2012 => x"93397880", -2013 => x"d6ec0c73", -2014 => x"80d79c0c", -2015 => x"fbef3972", -2016 => x"84150cfc", -2017 => x"ff39fb3d", -2018 => x"0d77707a", -2019 => x"7c585553", -2020 => x"568f7527", -2021 => x"80e63872", -2022 => x"76078306", -2023 => x"517080dc", -2024 => x"38757352", -2025 => x"54707084", -2026 => x"05520874", -2027 => x"70840556", -2028 => x"0c737170", -2029 => x"84055308", -2030 => x"71708405", -2031 => x"530c7170", -2032 => x"84055308", -2033 => x"71708405", -2034 => x"530c7170", -2035 => x"84055308", -2036 => x"71708405", -2037 => x"530cf016", -2038 => x"5654748f", -2039 => x"26c73883", -2040 => x"75279538", -2041 => x"70708405", -2042 => x"52087470", -2043 => x"8405560c", -2044 => x"fc155574", -2045 => x"8326ed38", -2046 => x"73715452", -2047 => x"ff155170", -2048 => x"ff2e9838", -2049 => x"72708105", -2050 => x"54337270", -2051 => x"81055434", -2052 => x"ff115170", -2053 => x"ff2e0981", -2054 => x"06ea3875", -2055 => x"800c873d", -2056 => x"0d04fb3d", -2057 => x"0d777a71", -2058 => x"028c05a3", -2059 => x"05335854", -2060 => x"54568373", -2061 => x"2780d438", -2062 => x"75830651", -2063 => x"7080cc38", -2064 => x"74882b75", -2065 => x"07707190", -2066 => x"2b075551", -2067 => x"8f7327a7", -2068 => x"38737270", -2069 => x"8405540c", -2070 => x"71747170", -2071 => x"8405530c", -2072 => x"74717084", -2073 => x"05530c74", -2074 => x"71708405", -2075 => x"530cf014", -2076 => x"5452728f", -2077 => x"26db3883", -2078 => x"73279038", -2079 => x"73727084", -2080 => x"05540cfc", -2081 => x"13537283", -2082 => x"26f238ff", -2083 => x"135170ff", -2084 => x"2e933874", -2085 => x"72708105", -2086 => x"5434ff11", -2087 => x"5170ff2e", -2088 => x"098106ef", -2089 => x"3875800c", -2090 => x"873d0d04", -2091 => x"04047070", -2092 => x"7070800b", -2093 => x"80dfe40c", -2094 => x"765184f3", -2095 => x"3f800853", -2096 => x"8008ff2e", -2097 => x"89387280", -2098 => x"0c505050", -2099 => x"500480df", -2100 => x"e4085473", -2101 => x"802eef38", -2102 => x"7574710c", -2103 => x"5272800c", -2104 => x"50505050", -2105 => x"04f93d0d", -2106 => x"797c557b", -2107 => x"548e1122", -2108 => x"70902b70", -2109 => x"902c5557", -2110 => x"80cfec08", -2111 => x"53585683", -2112 => x"f63f8008", -2113 => x"57800b80", -2114 => x"08249338", -2115 => x"80d01608", -2116 => x"80080580", -2117 => x"d0170c76", -2118 => x"800c893d", -2119 => x"0d048c16", -2120 => x"2283dfff", -2121 => x"0655748c", -2122 => x"17237680", -2123 => x"0c893d0d", -2124 => x"04fa3d0d", -2125 => x"788c1122", -2126 => x"70882a70", -2127 => x"81065157", -2128 => x"585674a9", -2129 => x"388c1622", -2130 => x"83dfff06", -2131 => x"55748c17", -2132 => x"237a5479", -2133 => x"538e1622", -2134 => x"70902b70", -2135 => x"902c5456", -2136 => x"80cfec08", -2137 => x"525681b2", -2138 => x"3f883d0d", -2139 => x"04825480", -2140 => x"538e1622", -2141 => x"70902b70", -2142 => x"902c5456", -2143 => x"80cfec08", -2144 => x"525782bb", -2145 => x"3f8c1622", -2146 => x"83dfff06", -2147 => x"55748c17", -2148 => x"237a5479", -2149 => x"538e1622", -2150 => x"70902b70", -2151 => x"902c5456", -2152 => x"80cfec08", -2153 => x"525680f2", -2154 => x"3f883d0d", -2155 => x"04f93d0d", -2156 => x"797c557b", -2157 => x"548e1122", -2158 => x"70902b70", -2159 => x"902c5557", -2160 => x"80cfec08", -2161 => x"53585681", -2162 => x"f63f8008", -2163 => x"578008ff", -2164 => x"2e99388c", -2165 => x"1622a080", -2166 => x"0755748c", -2167 => x"17238008", -2168 => x"80d0170c", -2169 => x"76800c89", -2170 => x"3d0d048c", -2171 => x"162283df", -2172 => x"ff065574", -2173 => x"8c172376", -2174 => x"800c893d", -2175 => x"0d047070", -2176 => x"70748e11", -2177 => x"2270902b", -2178 => x"70902c55", -2179 => x"51515380", -2180 => x"cfec0851", -2181 => x"bd3f5050", -2182 => x"5004fb3d", -2183 => x"0d800b80", -2184 => x"dfe40c7a", -2185 => x"53795278", -2186 => x"5182fc3f", -2187 => x"80085580", -2188 => x"08ff2e88", -2189 => x"3874800c", -2190 => x"873d0d04", -2191 => x"80dfe408", -2192 => x"5675802e", -2193 => x"f0387776", -2194 => x"710c5474", -2195 => x"800c873d", -2196 => x"0d047070", -2197 => x"7070800b", -2198 => x"80dfe40c", -2199 => x"765184c9", -2200 => x"3f800853", -2201 => x"8008ff2e", -2202 => x"89387280", -2203 => x"0c505050", -2204 => x"500480df", -2205 => x"e4085473", -2206 => x"802eef38", -2207 => x"7574710c", -2208 => x"5272800c", -2209 => x"50505050", -2210 => x"04fc3d0d", -2211 => x"800b80df", -2212 => x"e40c7852", -2213 => x"775187b0", -2214 => x"3f800854", -2215 => x"8008ff2e", -2216 => x"88387380", -2217 => x"0c863d0d", -2218 => x"0480dfe4", -2219 => x"08557480", -2220 => x"2ef03876", -2221 => x"75710c53", -2222 => x"73800c86", -2223 => x"3d0d04fb", -2224 => x"3d0d800b", -2225 => x"80dfe40c", -2226 => x"7a537952", -2227 => x"7851848b", -2228 => x"3f800855", -2229 => x"8008ff2e", -2230 => x"88387480", -2231 => x"0c873d0d", -2232 => x"0480dfe4", -2233 => x"08567580", -2234 => x"2ef03877", -2235 => x"76710c54", -2236 => x"74800c87", -2237 => x"3d0d04fb", -2238 => x"3d0d800b", -2239 => x"80dfe40c", -2240 => x"7a537952", -2241 => x"78518293", -2242 => x"3f800855", -2243 => x"8008ff2e", -2244 => x"88387480", -2245 => x"0c873d0d", -2246 => x"0480dfe4", -2247 => x"08567580", -2248 => x"2ef03877", -2249 => x"76710c54", -2250 => x"74800c87", -2251 => x"3d0d0470", -2252 => x"707080df", -2253 => x"d8088938", -2254 => x"80dfe80b", -2255 => x"80dfd80c", -2256 => x"80dfd808", -2257 => x"75115252", -2258 => x"ff537087", -2259 => x"fb808026", -2260 => x"88387080", -2261 => x"dfd80c71", -2262 => x"5372800c", -2263 => x"50505004", -2264 => x"fd3d0d80", -2265 => x"0b80cfe0", -2266 => x"08545472", -2267 => x"812e9b38", -2268 => x"7380dfdc", -2269 => x"0cc2af3f", -2270 => x"c1863f80", -2271 => x"dfb05281", -2272 => x"51c3ff3f", -2273 => x"80085186", -2274 => x"bf3f7280", -2275 => x"dfdc0cc2", -2276 => x"953fc0ec", -2277 => x"3f80dfb0", -2278 => x"528151c3", -2279 => x"e53f8008", -2280 => x"5186a53f", -2281 => x"00ff39f5", -2282 => x"3d0d7e60", -2283 => x"80dfdc08", -2284 => x"705b585b", -2285 => x"5b7580c2", -2286 => x"38777a25", -2287 => x"a138771b", -2288 => x"70337081", -2289 => x"ff065858", -2290 => x"59758a2e", -2291 => x"98387681", -2292 => x"ff0651c1", -2293 => x"b03f8118", -2294 => x"58797824", -2295 => x"e1387980", -2296 => x"0c8d3d0d", -2297 => x"048d51c1", -2298 => x"9c3f7833", -2299 => x"7081ff06", -2300 => x"5257c191", -2301 => x"3f811858", -2302 => x"e0397955", -2303 => x"7a547d53", -2304 => x"85528d3d", -2305 => x"fc0551c0", -2306 => x"b93f8008", -2307 => x"5685b23f", -2308 => x"7b80080c", -2309 => x"75800c8d", -2310 => x"3d0d04f6", -2311 => x"3d0d7d7f", -2312 => x"80dfdc08", -2313 => x"705b585a", -2314 => x"5a7580c1", -2315 => x"38777925", -2316 => x"b338c0ac", -2317 => x"3f800881", -2318 => x"ff06708d", -2319 => x"32703070", -2320 => x"9f2a5151", -2321 => x"5757768a", -2322 => x"2e80c438", -2323 => x"75802ebf", -2324 => x"38771a56", -2325 => x"76763476", -2326 => x"51c0aa3f", -2327 => x"81185878", -2328 => x"7824cf38", -2329 => x"77567580", -2330 => x"0c8c3d0d", -2331 => x"04785579", -2332 => x"547c5384", -2333 => x"528c3dfc", -2334 => x"0551ffbf", -2335 => x"c53f8008", -2336 => x"5684be3f", -2337 => x"7a80080c", -2338 => x"75800c8c", -2339 => x"3d0d0477", -2340 => x"1a598a79", -2341 => x"34811858", -2342 => x"8d51ffbf", -2343 => x"e83f8a51", -2344 => x"ffbfe23f", -2345 => x"7756ffbe", -2346 => x"39fb3d0d", -2347 => x"80dfdc08", -2348 => x"70565473", -2349 => x"88387480", -2350 => x"0c873d0d", -2351 => x"04775383", -2352 => x"52873dfc", -2353 => x"0551ffbe", -2354 => x"f93f8008", -2355 => x"5483f23f", -2356 => x"7580080c", -2357 => x"73800c87", -2358 => x"3d0d04fa", -2359 => x"3d0d80df", -2360 => x"dc08802e", -2361 => x"a3387a55", -2362 => x"79547853", -2363 => x"8652883d", -2364 => x"fc0551ff", -2365 => x"becc3f80", -2366 => x"085683c5", -2367 => x"3f768008", -2368 => x"0c75800c", -2369 => x"883d0d04", -2370 => x"83b73f9d", -2371 => x"0b80080c", -2372 => x"ff0b800c", -2373 => x"883d0d04", -2374 => x"f73d0d7b", -2375 => x"7d5b59bc", -2376 => x"53805279", -2377 => x"51f5fb3f", -2378 => x"80705657", -2379 => x"98567419", -2380 => x"70337078", -2381 => x"2b790781", -2382 => x"18f81a5a", -2383 => x"58595558", -2384 => x"847524ea", -2385 => x"38767a23", -2386 => x"84195880", -2387 => x"70565798", -2388 => x"56741870", -2389 => x"3370782b", -2390 => x"79078118", -2391 => x"f81a5a58", -2392 => x"59515484", -2393 => x"7524ea38", -2394 => x"76821b23", -2395 => x"88195880", -2396 => x"70565798", -2397 => x"56741870", -2398 => x"3370782b", -2399 => x"79078118", -2400 => x"f81a5a58", -2401 => x"59515484", -2402 => x"7524ea38", -2403 => x"76841b0c", -2404 => x"8c195880", -2405 => x"70565798", -2406 => x"56741870", -2407 => x"3370782b", -2408 => x"79078118", -2409 => x"f81a5a58", -2410 => x"59515484", -2411 => x"7524ea38", -2412 => x"76881b23", -2413 => x"90195880", -2414 => x"70565798", -2415 => x"56741870", -2416 => x"3370782b", -2417 => x"79078118", -2418 => x"f81a5a58", -2419 => x"59515484", -2420 => x"7524ea38", -2421 => x"768a1b23", -2422 => x"94195880", -2423 => x"70565798", -2424 => x"56741870", -2425 => x"3370782b", -2426 => x"79078118", -2427 => x"f81a5a58", -2428 => x"59515484", -2429 => x"7524ea38", -2430 => x"768c1b23", -2431 => x"98195880", -2432 => x"70565798", -2433 => x"56741870", -2434 => x"3370782b", -2435 => x"79078118", -2436 => x"f81a5a58", -2437 => x"59515484", -2438 => x"7524ea38", -2439 => x"768e1b23", -2440 => x"9c195880", -2441 => x"705657b8", -2442 => x"56741870", -2443 => x"3370782b", -2444 => x"79078118", -2445 => x"f81a5a58", -2446 => x"595a5488", -2447 => x"7524ea38", -2448 => x"76901b0c", -2449 => x"8b3d0d04", -2450 => x"e93d0d6a", -2451 => x"80dfdc08", -2452 => x"57577593", -2453 => x"3880c080", -2454 => x"0b84180c", -2455 => x"75ac180c", -2456 => x"75800c99", -2457 => x"3d0d0489", -2458 => x"3d70556a", -2459 => x"54558a52", -2460 => x"993dffbc", -2461 => x"0551ffbb", -2462 => x"c93f8008", -2463 => x"77537552", -2464 => x"56fd953f", -2465 => x"bc3f7780", -2466 => x"080c7580", -2467 => x"0c993d0d", -2468 => x"04fc3d0d", -2469 => x"815480df", -2470 => x"dc088838", -2471 => x"73800c86", -2472 => x"3d0d0476", -2473 => x"5397b952", -2474 => x"863dfc05", -2475 => x"51ffbb92", -2476 => x"3f800854", -2477 => x"8c3f7480", -2478 => x"080c7380", -2479 => x"0c863d0d", -2480 => x"0480cfec", -2481 => x"08800c04", -2482 => x"f73d0d7b", -2483 => x"80cfec08", -2484 => x"82c81108", -2485 => x"5a545a77", -2486 => x"802e80da", -2487 => x"38818818", -2488 => x"841908ff", -2489 => x"0581712b", -2490 => x"59555980", -2491 => x"742480ea", -2492 => x"38807424", -2493 => x"b5387382", -2494 => x"2b781188", -2495 => x"05565681", -2496 => x"80190877", -2497 => x"06537280", -2498 => x"2eb63878", -2499 => x"16700853", -2500 => x"53795174", -2501 => x"0853722d", -2502 => x"ff14fc17", -2503 => x"fc177981", -2504 => x"2c5a5757", -2505 => x"54738025", -2506 => x"d6387708", -2507 => x"5877ffad", -2508 => x"3880cfec", -2509 => x"0853bc13", -2510 => x"08a53879", -2511 => x"51f8e53f", -2512 => x"74085372", -2513 => x"2dff14fc", -2514 => x"17fc1779", -2515 => x"812c5a57", -2516 => x"57547380", -2517 => x"25ffa838", -2518 => x"d1398057", -2519 => x"ff933972", -2520 => x"51bc1308", -2521 => x"54732d79", -2522 => x"51f8b93f", -2523 => x"707080df", -2524 => x"b80bfc05", -2525 => x"70085252", -2526 => x"70ff2e91", -2527 => x"38702dfc", -2528 => x"12700852", -2529 => x"5270ff2e", -2530 => x"098106f1", -2531 => x"38505004", -2532 => x"04ffbaff", -2533 => x"3f040000", -2534 => x"00000040", -2535 => x"476f7420", -2536 => x"696e7465", -2537 => x"72727570", -2538 => x"740a0000", -2539 => x"4e6f2069", -2540 => x"6e746572", -2541 => x"72757074", -2542 => x"0a000000", -2543 => x"43000000", -2544 => x"64756d6d", -2545 => x"792e6578", -2546 => x"65000000", -2547 => x"00ffffff", -2548 => x"ff00ffff", -2549 => x"ffff00ff", -2550 => x"ffffff00", -2551 => x"00000000", -2552 => x"00000000", -2553 => x"00000000", -2554 => x"00002fc0", -2555 => x"000027f0", -2556 => x"00000000", -2557 => x"00002a58", -2558 => x"00002ab4", -2559 => x"00002b10", -2560 => x"00000000", -2561 => x"00000000", -2562 => x"00000000", -2563 => x"00000000", -2564 => x"00000000", -2565 => x"00000000", -2566 => x"00000000", -2567 => x"00000000", -2568 => x"00000000", -2569 => x"000027bc", -2570 => x"00000000", -2571 => x"00000000", -2572 => x"00000000", -2573 => x"00000000", -2574 => x"00000000", -2575 => x"00000000", -2576 => x"00000000", -2577 => x"00000000", -2578 => x"00000000", -2579 => x"00000000", -2580 => x"00000000", -2581 => x"00000000", -2582 => x"00000000", -2583 => x"00000000", -2584 => x"00000000", -2585 => x"00000000", -2586 => x"00000000", -2587 => x"00000000", -2588 => x"00000000", -2589 => x"00000000", -2590 => x"00000000", -2591 => x"00000000", -2592 => x"00000000", -2593 => x"00000000", -2594 => x"00000000", -2595 => x"00000000", -2596 => x"00000000", -2597 => x"00000000", -2598 => x"00000001", -2599 => x"330eabcd", -2600 => x"1234e66d", -2601 => x"deec0005", -2602 => x"000b0000", -2603 => x"00000000", -2604 => x"00000000", -2605 => x"00000000", -2606 => x"00000000", -2607 => x"00000000", -2608 => x"00000000", -2609 => x"00000000", -2610 => x"00000000", -2611 => x"00000000", -2612 => x"00000000", -2613 => x"00000000", -2614 => x"00000000", -2615 => x"00000000", -2616 => x"00000000", -2617 => x"00000000", -2618 => x"00000000", -2619 => x"00000000", -2620 => x"00000000", -2621 => x"00000000", -2622 => x"00000000", -2623 => x"00000000", -2624 => x"00000000", -2625 => x"00000000", -2626 => x"00000000", -2627 => x"00000000", -2628 => x"00000000", -2629 => x"00000000", -2630 => x"00000000", -2631 => x"00000000", -2632 => x"00000000", -2633 => x"00000000", -2634 => x"00000000", -2635 => x"00000000", -2636 => x"00000000", -2637 => x"00000000", -2638 => x"00000000", -2639 => x"00000000", -2640 => x"00000000", -2641 => x"00000000", -2642 => x"00000000", -2643 => x"00000000", -2644 => x"00000000", -2645 => x"00000000", -2646 => x"00000000", -2647 => x"00000000", -2648 => x"00000000", -2649 => x"00000000", -2650 => x"00000000", -2651 => x"00000000", -2652 => x"00000000", -2653 => x"00000000", -2654 => x"00000000", -2655 => x"00000000", -2656 => x"00000000", -2657 => x"00000000", -2658 => x"00000000", -2659 => x"00000000", -2660 => x"00000000", -2661 => x"00000000", -2662 => x"00000000", -2663 => x"00000000", -2664 => x"00000000", -2665 => x"00000000", -2666 => x"00000000", -2667 => x"00000000", -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"00000000", -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"00000000", -2707 => x"00000000", -2708 => x"00000000", -2709 => x"00000000", -2710 => x"00000000", -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"ffffffff", -2792 => x"00000000", -2793 => x"00020000", -2794 => x"00000000", -2795 => x"00000000", -2796 => x"00002ba8", -2797 => x"00002ba8", -2798 => x"00002bb0", -2799 => x"00002bb0", -2800 => x"00002bb8", -2801 => x"00002bb8", -2802 => x"00002bc0", -2803 => x"00002bc0", -2804 => x"00002bc8", -2805 => x"00002bc8", -2806 => x"00002bd0", -2807 => x"00002bd0", -2808 => x"00002bd8", -2809 => x"00002bd8", -2810 => x"00002be0", -2811 => x"00002be0", -2812 => x"00002be8", -2813 => x"00002be8", -2814 => x"00002bf0", -2815 => x"00002bf0", -2816 => x"00002bf8", -2817 => x"00002bf8", -2818 => x"00002c00", -2819 => x"00002c00", -2820 => x"00002c08", -2821 => x"00002c08", -2822 => x"00002c10", -2823 => x"00002c10", -2824 => x"00002c18", -2825 => x"00002c18", -2826 => x"00002c20", -2827 => x"00002c20", -2828 => x"00002c28", -2829 => x"00002c28", -2830 => x"00002c30", -2831 => x"00002c30", -2832 => x"00002c38", -2833 => x"00002c38", -2834 => x"00002c40", -2835 => x"00002c40", -2836 => x"00002c48", -2837 => x"00002c48", -2838 => x"00002c50", -2839 => x"00002c50", -2840 => x"00002c58", -2841 => x"00002c58", -2842 => x"00002c60", -2843 => x"00002c60", -2844 => x"00002c68", -2845 => x"00002c68", -2846 => x"00002c70", -2847 => x"00002c70", -2848 => x"00002c78", -2849 => x"00002c78", -2850 => x"00002c80", -2851 => x"00002c80", -2852 => x"00002c88", -2853 => x"00002c88", -2854 => x"00002c90", -2855 => x"00002c90", -2856 => x"00002c98", -2857 => x"00002c98", -2858 => x"00002ca0", -2859 => x"00002ca0", -2860 => x"00002ca8", -2861 => x"00002ca8", -2862 => x"00002cb0", -2863 => x"00002cb0", -2864 => x"00002cb8", -2865 => x"00002cb8", -2866 => x"00002cc0", -2867 => x"00002cc0", -2868 => x"00002cc8", -2869 => x"00002cc8", -2870 => x"00002cd0", -2871 => x"00002cd0", -2872 => x"00002cd8", -2873 => x"00002cd8", -2874 => x"00002ce0", -2875 => x"00002ce0", -2876 => x"00002ce8", -2877 => x"00002ce8", -2878 => x"00002cf0", -2879 => x"00002cf0", -2880 => x"00002cf8", -2881 => x"00002cf8", -2882 => x"00002d00", -2883 => x"00002d00", -2884 => x"00002d08", -2885 => x"00002d08", -2886 => x"00002d10", -2887 => x"00002d10", -2888 => x"00002d18", -2889 => x"00002d18", -2890 => x"00002d20", -2891 => x"00002d20", -2892 => x"00002d28", -2893 => x"00002d28", -2894 => x"00002d30", -2895 => x"00002d30", -2896 => x"00002d38", -2897 => x"00002d38", -2898 => x"00002d40", -2899 => x"00002d40", -2900 => x"00002d48", -2901 => x"00002d48", -2902 => x"00002d50", -2903 => x"00002d50", -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"000027c0", -3053 => x"ffffffff", -3054 => x"00000000", -3055 => x"ffffffff", -3056 => 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(to_integer(unsigned(memAAddr))) := memAWrite; - memARead <= memAWrite; - else - memARead <= ram(to_integer(unsigned(memAAddr))); - end if; - end if; -end process; - -process (clk) -begin - if (clk'event and clk = '1') then - if (memBWriteEnable = '1') then - ram(to_integer(unsigned(memBAddr))) := memBWrite; - memBRead <= memBWrite; - else - memBRead <= ram(to_integer(unsigned(memBAddr))); - end if; - end if; -end process; - - - - -end dualport_ram_arch; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(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 dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80cfe00c", +3 => x"3a0b0b80", +4 => x"c6e00400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"0b8af02d", +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"0b0b80cf", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8b", +171 => x"ab2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8b", +179 => x"ef2d5050", +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"80cfdc0c", +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"82c53f80", +257 => x"c6e63f04", +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"fe3d0d0b", +281 => x"0b80dfc8", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c8085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"dc08802e", +299 => x"a43880cf", +300 => x"e008822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc80c", +304 => x"82a0800b", +305 => x"80dfcc0c", +306 => x"8290800b", +307 => x"80dfd00c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc8", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfcc0cf8", +314 => x"80808480", +315 => x"0b80dfd0", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c80c80c0", +320 => x"a880940b", +321 => x"80dfcc0c", +322 => x"0b0b80cf", +323 => x"980b80df", +324 => x"d00c0470", +325 => x"7080dfd4", +326 => x"335170a7", +327 => x"3880cfe8", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe80c", +332 => x"702d80cf", +333 => x"e8087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfd43450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"c408802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfc4510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"803d0d80", +349 => x"dfe00881", +350 => x"1180dfe0", +351 => x"0c51823d", +352 => x"0d04fe3d", +353 => x"0d80dfe0", +354 => x"085380df", +355 => x"e0085272", +356 => x"722e8f38", +357 => x"80cf9c51", +358 => x"82b03f80", +359 => x"dfe00853", +360 => x"e93980cf", +361 => x"ac5182a2", +362 => x"3fe039fb", +363 => x"3d0d7779", +364 => x"55558056", +365 => x"757524ab", +366 => x"38807424", +367 => x"9d388053", +368 => x"73527451", +369 => x"80e13f80", +370 => x"08547580", +371 => x"2e853880", +372 => x"08305473", +373 => x"800c873d", +374 => x"0d047330", +375 => x"76813257", +376 => x"54dc3974", +377 => x"30558156", +378 => x"738025d2", +379 => x"38ec39fa", +380 => x"3d0d787a", +381 => x"57558057", +382 => x"767524a4", +383 => x"38759f2c", +384 => x"54815375", +385 => x"74327431", +386 => x"5274519b", +387 => x"3f800854", +388 => x"76802e85", +389 => x"38800830", +390 => x"5473800c", +391 => x"883d0d04", +392 => x"74305581", +393 => x"57d739fc", +394 => x"3d0d7678", +395 => x"53548153", +396 => x"80747326", +397 => x"52557280", +398 => x"2e983870", +399 => x"802eab38", +400 => x"807224a6", +401 => x"38711073", +402 => x"10757226", +403 => x"53545272", +404 => x"ea387351", +405 => x"78833874", +406 => x"5170800c", +407 => x"863d0d04", +408 => x"720a100a", +409 => x"720a100a", +410 => x"53537280", +411 => x"2ee43871", +412 => x"7426ed38", +413 => x"73723175", +414 => x"7407740a", +415 => x"100a740a", +416 => x"100a5555", +417 => x"5654e339", +418 => x"f73d0d7c", +419 => x"70525380", +420 => x"fd3f7254", +421 => x"8008550b", +422 => x"0b80cfb8", +423 => x"56815780", +424 => x"0881055a", +425 => x"8b3de411", +426 => x"59538259", +427 => x"f413527b", +428 => x"88110852", +429 => x"5381b43f", +430 => x"80083070", +431 => x"8008079f", +432 => x"2c8a0780", +433 => x"0c538b3d", +434 => x"0d04f63d", +435 => x"0d7c80cf", +436 => x"ec087153", +437 => x"5553b73f", +438 => x"72558008", +439 => x"560b0b80", +440 => x"cfb85781", +441 => x"58800881", +442 => x"055b8c3d", +443 => x"e4115a53", +444 => x"825af413", +445 => x"52881408", +446 => x"5180f03f", +447 => x"80083070", +448 => x"8008079f", +449 => x"2c8a0780", +450 => x"0c548c3d", +451 => x"0d047070", +452 => x"70707570", +453 => x"71830653", +454 => x"555270b4", +455 => x"38717008", +456 => x"7009f7fb", +457 => x"fdff1206", +458 => x"f8848281", +459 => x"80065452", +460 => x"53719b38", +461 => x"84137008", +462 => x"7009f7fb", +463 => x"fdff1206", +464 => x"f8848281", +465 => x"80065452", +466 => x"5371802e", +467 => x"e7387252", +468 => x"71335372", +469 => x"802e8a38", +470 => x"81127033", +471 => x"545272f8", +472 => x"38717431", +473 => x"800c5050", +474 => x"505004f2", +475 => x"3d0d6062", +476 => x"88110870", +477 => x"58565f5a", +478 => x"73802e81", +479 => x"8c388c1a", +480 => x"2270832a", +481 => x"81328106", +482 => x"56587486", +483 => x"38901a08", +484 => x"91387951", +485 => x"90b73fff", +486 => x"55800880", +487 => x"ec388c1a", +488 => x"22587d08", +489 => x"55807883", +490 => x"ffff0670", +491 => x"0a100a81", +492 => x"06415c57", +493 => x"7e772e80", +494 => x"d7387690", +495 => x"38740884", +496 => x"16088817", +497 => x"57585676", +498 => x"802ef238", +499 => x"76548880", +500 => x"77278438", +501 => x"88805473", +502 => x"5375529c", +503 => x"1a0851a4", +504 => x"1a085877", +505 => x"2d800b80", +506 => x"082582e0", +507 => x"38800816", +508 => x"77800831", +509 => x"7f880508", +510 => x"80083170", +511 => x"6188050c", +512 => x"5b585678", +513 => x"ffb43880", +514 => x"5574800c", +515 => x"903d0d04", +516 => x"7a813281", +517 => x"06774056", +518 => x"75802e81", +519 => x"bd387690", +520 => x"38740884", +521 => x"16088817", +522 => x"57585976", +523 => x"802ef238", +524 => x"881a0878", +525 => x"83ffff06", +526 => x"70892a81", +527 => x"06565956", +528 => x"73802e82", +529 => x"f8387577", +530 => x"278b3877", +531 => x"872a8106", +532 => x"5c7b82b5", +533 => x"38767627", +534 => x"83387656", +535 => x"75537852", +536 => x"79085185", +537 => x"833f881a", +538 => x"08763188", +539 => x"1b0c7908", +540 => x"167a0c76", +541 => x"56751977", +542 => x"77317f88", +543 => x"05087831", +544 => x"70618805", +545 => x"0c415859", +546 => x"7e802efe", +547 => x"fa388c1a", +548 => x"2258ff8a", +549 => x"39787954", +550 => x"7c537b52", +551 => x"5684c93f", +552 => x"881a0879", +553 => x"31881b0c", +554 => x"7908197a", +555 => x"0c7c7631", +556 => x"5d7c8e38", +557 => x"79518ff2", +558 => x"3f800881", +559 => x"8f388008", +560 => x"5f751c77", +561 => x"77317f88", +562 => x"05087831", +563 => x"70618805", +564 => x"0c5d585c", +565 => x"7a802efe", +566 => x"ae387681", +567 => x"83387408", +568 => x"84160888", +569 => x"1757585c", +570 => x"76802ef2", +571 => x"3876538a", +572 => x"527b5182", +573 => x"d33f8008", +574 => x"7c318105", +575 => x"5d800884", +576 => x"3881175d", +577 => x"815f7c59", +578 => x"767d2783", +579 => x"38765994", +580 => x"1a08881b", +581 => x"08115758", +582 => x"807a085c", +583 => x"54901a08", +584 => x"7b278338", +585 => x"81547579", +586 => x"25843873", +587 => x"ba387779", +588 => x"24fee238", +589 => x"77537b52", +590 => x"9c1a0851", +591 => x"a41a0859", +592 => x"782d8008", +593 => x"56800880", +594 => x"24fee238", +595 => x"8c1a2280", +596 => x"c0075e7d", +597 => x"8c1b23ff", +598 => x"5574800c", +599 => x"903d0d04", +600 => x"7effa338", +601 => x"ff873975", +602 => x"537b527a", +603 => x"5182f93f", +604 => x"7908167a", +605 => x"0c79518e", +606 => x"b13f8008", +607 => x"cf387c76", +608 => x"315d7cfe", +609 => x"bc38feac", +610 => x"39901a08", +611 => x"7a087131", +612 => x"78117056", +613 => x"5a575280", +614 => x"cfec0851", +615 => x"84943f80", +616 => x"08802eff", +617 => x"a7388008", +618 => x"901b0c80", +619 => x"08167a0c", +620 => x"77941b0c", +621 => x"76881b0c", +622 => x"7656fd99", +623 => x"39790858", +624 => x"901a0878", +625 => x"27833881", +626 => x"54757727", +627 => x"843873b3", +628 => x"38941a08", +629 => x"54737726", +630 => x"80d33873", +631 => x"5378529c", +632 => x"1a0851a4", +633 => x"1a085877", +634 => x"2d800856", +635 => x"80088024", +636 => x"fd83388c", +637 => x"1a2280c0", +638 => x"075e7d8c", +639 => x"1b23ff55", +640 => x"fed73975", +641 => x"53785277", +642 => x"5181dd3f", +643 => x"7908167a", +644 => x"0c79518d", +645 => x"953f8008", +646 => x"802efcd9", +647 => x"388c1a22", +648 => x"80c0075e", +649 => x"7d8c1b23", +650 => x"ff55fead", +651 => x"39767754", +652 => x"79537852", +653 => x"5681b13f", +654 => x"881a0877", +655 => x"31881b0c", +656 => x"7908177a", +657 => x"0cfcae39", +658 => x"fa3d0d7a", +659 => x"79028805", +660 => x"a7053355", +661 => x"53548374", +662 => x"2780df38", +663 => x"71830651", +664 => x"7080d738", +665 => x"71715755", +666 => x"83517582", +667 => x"802913ff", +668 => x"12525670", +669 => x"8025f338", +670 => x"837427bc", +671 => x"38740876", +672 => x"327009f7", +673 => x"fbfdff12", +674 => x"06f88482", +675 => x"81800651", +676 => x"5170802e", +677 => x"98387451", +678 => x"80527033", +679 => x"5772772e", +680 => x"b9388111", +681 => x"81135351", +682 => x"837227ee", +683 => x"38fc1484", +684 => x"16565473", +685 => x"8326c638", +686 => x"7452ff14", +687 => x"5170ff2e", +688 => x"97387133", +689 => x"5472742e", +690 => x"98388112", +691 => x"ff125252", +692 => x"70ff2e09", +693 => x"8106eb38", +694 => x"80517080", +695 => x"0c883d0d", +696 => x"0471800c", +697 => x"883d0d04", +698 => x"fa3d0d78", +699 => x"7a7c7272", +700 => x"72595755", +701 => x"58565774", +702 => x"7727b238", +703 => x"75155176", +704 => x"7127aa38", +705 => x"707618ff", +706 => x"18535353", +707 => x"70ff2e96", +708 => x"38ff12ff", +709 => x"14545272", +710 => x"337234ff", +711 => x"115170ff", +712 => x"2e098106", +713 => x"ec387680", +714 => x"0c883d0d", +715 => x"048f7627", +716 => x"80e63874", +717 => x"77078306", +718 => x"517080dc", +719 => x"38767552", +720 => x"53707084", +721 => x"05520873", +722 => x"70840555", +723 => x"0c727170", +724 => x"84055308", +725 => x"71708405", +726 => x"530c7170", +727 => x"84055308", +728 => x"71708405", +729 => x"530c7170", +730 => x"84055308", +731 => x"71708405", +732 => x"530cf015", +733 => x"5553738f", +734 => x"26c73883", +735 => x"74279538", +736 => x"70708405", +737 => x"52087370", +738 => x"8405550c", +739 => x"fc145473", +740 => x"8326ed38", +741 => x"72715452", +742 => x"ff145170", +743 => x"ff2eff86", +744 => x"38727081", +745 => x"05543372", +746 => x"70810554", +747 => x"34ff1151", +748 => x"ea39ef3d", +749 => x"0d636567", +750 => x"405d427b", +751 => x"802e8582", +752 => x"386151a9", +753 => x"e73ff81c", +754 => x"70841208", +755 => x"70fc0670", +756 => x"628b0570", +757 => x"f8064159", +758 => x"455c5f41", +759 => x"57967427", +760 => x"82c53880", +761 => x"7b247e7c", +762 => x"26075880", +763 => x"5477742e", +764 => x"09810682", +765 => x"ab38787b", +766 => x"2581fe38", +767 => x"781780d7", +768 => x"a80b8805", +769 => x"085b5679", +770 => x"762e84c5", +771 => x"38841608", +772 => x"70fe0617", +773 => x"84110881", +774 => x"06415555", +775 => x"7e828d38", +776 => x"74fc0658", +777 => x"79762e84", +778 => x"e3387818", +779 => x"5f7e7b25", +780 => x"81ff387c", +781 => x"81065473", +782 => x"82c13876", +783 => x"77083184", +784 => x"1108fc06", +785 => x"56577580", +786 => x"2e913879", +787 => x"762e84f0", +788 => x"38741819", +789 => x"58777b25", +790 => x"84913876", +791 => x"802e829b", +792 => x"38781556", +793 => x"7a762482", +794 => x"92388c17", +795 => x"08881808", +796 => x"718c120c", +797 => x"88120c5e", +798 => x"75598817", +799 => x"61fc055b", +800 => x"5679a426", +801 => x"85ff387b", +802 => x"76595593", +803 => x"7a2780c9", +804 => x"387b7084", +805 => x"055d087c", +806 => x"56760c74", +807 => x"70840556", +808 => x"088c180c", +809 => x"9017589b", +810 => x"7a27ae38", +811 => x"74708405", +812 => x"5608780c", +813 => x"74708405", +814 => x"56089418", +815 => x"0c981758", +816 => x"a37a2795", +817 => x"38747084", +818 => x"05560878", +819 => x"0c747084", +820 => x"0556089c", +821 => x"180ca017", +822 => x"58747084", +823 => x"05560875", +824 => x"5f787084", +825 => x"055a0c77", +826 => x"7e708405", +827 => x"40087170", +828 => x"8405530c", +829 => x"7e08710c", +830 => x"5d787b31", +831 => x"56758f26", +832 => x"80c93884", +833 => x"17088106", +834 => x"79078418", +835 => x"0c781784", +836 => x"11088107", +837 => x"84120c5b", +838 => x"6151a791", +839 => x"3f881754", +840 => x"73800c93", +841 => x"3d0d0490", +842 => x"5bfdb839", +843 => x"7756fe83", +844 => x"398c1608", +845 => x"88170871", +846 => x"8c120c88", +847 => x"120c587e", +848 => x"707c3157", +849 => x"598f7627", +850 => x"ffb9387a", +851 => x"17841808", +852 => x"81067c07", +853 => x"84190c76", +854 => x"81078412", +855 => x"0c761184", +856 => x"11088107", +857 => x"84120c5b", +858 => x"88055261", +859 => x"518fda3f", +860 => x"6151a6b9", +861 => x"3f881754", +862 => x"ffa6397d", +863 => x"52615197", +864 => x"d73f8008", +865 => x"5a800880", +866 => x"2e81ab38", +867 => x"8008f805", +868 => x"60840508", +869 => x"fe066105", +870 => x"58557477", +871 => x"2e83f238", +872 => x"fc195877", +873 => x"a42681b0", +874 => x"387b8008", +875 => x"56579378", +876 => x"2780dc38", +877 => x"7b707084", +878 => x"05520880", +879 => x"08708405", +880 => x"800c0c80", +881 => x"08717084", +882 => x"0553085d", +883 => x"567b7670", +884 => x"8405580c", +885 => x"579b7827", +886 => x"b6387670", +887 => x"84055808", +888 => x"75708405", +889 => x"570c7670", +890 => x"84055808", +891 => x"75708405", +892 => x"570ca378", +893 => x"27993876", +894 => x"70840558", +895 => x"08757084", +896 => x"05570c76", +897 => x"70840558", +898 => x"08757084", +899 => x"05570c76", +900 => x"70840558", +901 => x"08775e75", +902 => x"70840557", +903 => x"0c747d70", +904 => x"84055f08", +905 => x"71708405", +906 => x"530c7d08", +907 => x"710c5f7b", +908 => x"5261518e", +909 => x"943f6151", +910 => x"a4f33f79", +911 => x"800c933d", +912 => x"0d047d52", +913 => x"61519690", +914 => x"3f800880", +915 => x"0c933d0d", +916 => x"04841608", +917 => x"55fbc939", +918 => x"77537b52", +919 => x"800851a2", +920 => x"a53f7b52", +921 => x"61518de1", +922 => x"3fcc398c", +923 => x"16088817", +924 => x"08718c12", +925 => x"0c88120c", +926 => x"5d8c1708", +927 => x"88180871", +928 => x"8c120c88", +929 => x"120c5977", +930 => x"59fbef39", +931 => x"7818901c", +932 => x"40557e75", +933 => x"24fb9c38", +934 => x"7a177080", +935 => x"d7a80b88", +936 => x"050c757c", +937 => x"31810784", +938 => x"120c5684", +939 => x"17088106", +940 => x"7b078418", +941 => x"0c6151a3", +942 => x"f43f8817", +943 => x"54fce139", +944 => x"74181990", +945 => x"1c5e5a7c", +946 => x"7a24fb8f", +947 => x"388c1708", +948 => x"88180871", +949 => x"8c120c88", +950 => x"120c5e88", +951 => x"1761fc05", +952 => x"575975a4", +953 => x"2681b638", +954 => x"7b795955", +955 => x"93762780", +956 => x"c9387b70", +957 => x"84055d08", +958 => x"7c56790c", +959 => x"74708405", +960 => x"56088c18", +961 => x"0c901758", +962 => x"9b7627ae", +963 => x"38747084", +964 => x"05560878", +965 => x"0c747084", +966 => x"05560894", +967 => x"180c9817", +968 => x"58a37627", +969 => x"95387470", +970 => x"84055608", +971 => x"780c7470", +972 => x"84055608", +973 => x"9c180ca0", +974 => x"17587470", +975 => x"84055608", +976 => x"75417870", +977 => x"84055a0c", +978 => x"77607084", +979 => x"05420871", +980 => x"70840553", +981 => x"0c600871", +982 => x"0c5e7a17", +983 => x"7080d7a8", +984 => x"0b88050c", +985 => x"7a7c3181", +986 => x"0784120c", +987 => x"58841708", +988 => x"81067b07", +989 => x"84180c61", +990 => x"51a2b23f", +991 => x"78547380", +992 => x"0c933d0d", +993 => x"0479537b", +994 => x"5275519f", +995 => x"f93ffae9", +996 => x"39841508", +997 => x"fc061960", +998 => x"5859fadd", +999 => x"3975537b", +1000 => x"5278519f", +1001 => x"e13f7a17", +1002 => x"7080d7a8", +1003 => x"0b88050c", +1004 => x"7a7c3181", +1005 => x"0784120c", +1006 => x"58841708", +1007 => x"81067b07", +1008 => x"84180c61", +1009 => x"51a1e63f", +1010 => x"7854ffb2", +1011 => x"39fa3d0d", +1012 => x"7880cfec", +1013 => x"085455b8", +1014 => x"1308802e", +1015 => x"81af388c", +1016 => x"15227083", +1017 => x"ffff0670", +1018 => x"832a8132", +1019 => x"81065555", +1020 => x"5672802e", +1021 => x"80da3873", +1022 => x"842a8132", +1023 => x"810657ff", +1024 => x"537680f2", +1025 => x"3873822a", +1026 => x"81065473", +1027 => x"802eb938", +1028 => x"b0150854", +1029 => x"73802e9c", +1030 => x"3880c015", +1031 => x"5373732e", +1032 => x"8f387352", +1033 => x"80cfec08", +1034 => x"518a9e3f", +1035 => x"8c152256", +1036 => x"76b0160c", +1037 => x"75db0657", +1038 => x"768c1623", +1039 => x"800b8416", +1040 => x"0c901508", +1041 => x"750c7656", +1042 => x"75880754", +1043 => x"738c1623", +1044 => x"90150880", +1045 => x"2ebf388c", +1046 => x"15227081", +1047 => x"06555373", +1048 => x"9c38720a", +1049 => x"100a8106", +1050 => x"56758538", +1051 => x"94150854", +1052 => x"7388160c", +1053 => x"80537280", +1054 => x"0c883d0d", +1055 => x"04800b88", +1056 => x"160c9415", +1057 => x"08309816", +1058 => x"0c8053ea", +1059 => x"39725182", +1060 => x"a63ffecb", +1061 => x"3974518f", +1062 => x"bc3f8c15", +1063 => x"22708106", +1064 => x"55537380", +1065 => x"2effbb38", +1066 => x"d439f83d", +1067 => x"0d7a5776", +1068 => x"802e8197", +1069 => x"3880cfec", +1070 => x"0854b814", +1071 => x"08802e80", +1072 => x"eb388c17", +1073 => x"2270902b", +1074 => x"70902c70", +1075 => x"832a8132", +1076 => x"81065b5b", +1077 => x"57557780", +1078 => x"cb389017", +1079 => x"08567580", +1080 => x"2e80c138", +1081 => x"76087631", +1082 => x"76780c79", +1083 => x"83065555", +1084 => x"73853894", +1085 => x"17085877", +1086 => x"88180c80", +1087 => x"7525a538", +1088 => x"74537552", +1089 => x"9c170851", +1090 => x"a4170854", +1091 => x"732d800b", +1092 => x"80082580", +1093 => x"c9388008", +1094 => x"16758008", +1095 => x"31565674", +1096 => x"8024dd38", +1097 => x"800b800c", +1098 => x"8a3d0d04", +1099 => x"73518187", +1100 => x"3f8c1722", +1101 => x"70902b70", +1102 => x"902c7083", +1103 => x"2a813281", +1104 => x"065b5b57", +1105 => x"5577dd38", +1106 => x"ff9039a1", +1107 => x"aa5280cf", +1108 => x"ec08518c", +1109 => x"d03f8008", +1110 => x"800c8a3d", +1111 => x"0d048c17", +1112 => x"2280c007", +1113 => x"58778c18", +1114 => x"23ff0b80", +1115 => x"0c8a3d0d", +1116 => x"04fa3d0d", +1117 => x"797080dc", +1118 => x"298c1154", +1119 => x"7a535657", +1120 => x"8fd63f80", +1121 => x"08800855", +1122 => x"56800880", +1123 => x"2ea23880", +1124 => x"088c0554", +1125 => x"800b8008", +1126 => x"0c768008", +1127 => x"84050c73", +1128 => x"80088805", +1129 => x"0c745380", +1130 => x"5273519c", +1131 => x"f53f7554", +1132 => x"73800c88", +1133 => x"3d0d0470", +1134 => x"707074a8", +1135 => x"f60bbc12", +1136 => x"0c53810b", +1137 => x"b8140c80", +1138 => x"0b84dc14", +1139 => x"0c830b84", +1140 => x"e0140c84", +1141 => x"e81384e4", +1142 => x"140c8413", +1143 => x"08518070", +1144 => x"720c7084", +1145 => x"130c7088", +1146 => x"130c5284", +1147 => x"0b8c1223", +1148 => x"718e1223", +1149 => x"7190120c", +1150 => x"7194120c", +1151 => x"7198120c", +1152 => x"709c120c", +1153 => x"80c1e50b", +1154 => x"a0120c80", +1155 => x"c2b10ba4", +1156 => x"120c80c3", +1157 => x"ad0ba812", +1158 => x"0c80c3fe", +1159 => x"0bac120c", +1160 => x"88130872", +1161 => x"710c7284", +1162 => x"120c7288", +1163 => x"120c5189", +1164 => x"0b8c1223", +1165 => x"810b8e12", +1166 => x"23719012", +1167 => x"0c719412", +1168 => x"0c719812", +1169 => x"0c709c12", +1170 => x"0c80c1e5", +1171 => x"0ba0120c", +1172 => x"80c2b10b", +1173 => x"a4120c80", +1174 => x"c3ad0ba8", +1175 => x"120c80c3", +1176 => x"fe0bac12", +1177 => x"0c8c1308", +1178 => x"72710c72", +1179 => x"84120c72", +1180 => x"88120c51", +1181 => x"8a0b8c12", +1182 => x"23820b8e", +1183 => x"12237190", +1184 => x"120c7194", +1185 => x"120c7198", +1186 => x"120c709c", +1187 => x"120c80c1", +1188 => x"e50ba012", +1189 => x"0c80c2b1", +1190 => x"0ba4120c", +1191 => x"80c3ad0b", +1192 => x"a8120c80", +1193 => x"c3fe0bac", +1194 => x"120c5050", +1195 => x"5004f83d", +1196 => x"0d7a80cf", +1197 => x"ec08b811", +1198 => x"08575758", +1199 => x"7481ec38", +1200 => x"a8f60bbc", +1201 => x"170c810b", +1202 => x"b8170c74", +1203 => x"84dc170c", +1204 => x"830b84e0", +1205 => x"170c84e8", +1206 => x"1684e417", +1207 => x"0c841608", +1208 => x"75710c75", +1209 => x"84120c75", +1210 => x"88120c59", +1211 => x"840b8c1a", +1212 => x"23748e1a", +1213 => x"2374901a", +1214 => x"0c74941a", +1215 => x"0c74981a", +1216 => x"0c789c1a", +1217 => x"0c80c1e5", +1218 => x"0ba01a0c", +1219 => x"80c2b10b", +1220 => x"a41a0c80", +1221 => x"c3ad0ba8", +1222 => x"1a0c80c3", +1223 => x"fe0bac1a", +1224 => x"0c881608", +1225 => x"75710c75", +1226 => x"84120c75", +1227 => x"88120c57", +1228 => x"890b8c18", +1229 => x"23810b8e", +1230 => x"18237490", +1231 => x"180c7494", +1232 => x"180c7498", +1233 => x"180c769c", +1234 => x"180c80c1", +1235 => x"e50ba018", +1236 => x"0c80c2b1", +1237 => x"0ba4180c", +1238 => x"80c3ad0b", +1239 => x"a8180c80", +1240 => x"c3fe0bac", +1241 => x"180c8c16", +1242 => x"0875710c", +1243 => x"7584120c", +1244 => x"7588120c", +1245 => x"548a0b8c", +1246 => x"1523820b", +1247 => x"8e152374", +1248 => x"90150c74", +1249 => x"94150c74", +1250 => x"98150c73", +1251 => x"9c150c80", +1252 => x"c1e50ba0", +1253 => x"150c80c2", +1254 => x"b10ba415", +1255 => x"0c80c3ad", +1256 => x"0ba8150c", +1257 => x"80c3fe0b", +1258 => x"ac150c84", +1259 => x"dc168811", +1260 => x"08841208", +1261 => x"ff055757", +1262 => x"57807524", +1263 => x"9f388c16", +1264 => x"2270902b", +1265 => x"70902c51", +1266 => x"55597380", +1267 => x"2e80ed38", +1268 => x"80dc16ff", +1269 => x"16565674", +1270 => x"8025e338", +1271 => x"76085574", +1272 => x"802e8f38", +1273 => x"74881108", +1274 => x"841208ff", +1275 => x"05575757", +1276 => x"c83982fc", +1277 => x"5277518a", +1278 => x"df3f8008", +1279 => x"80085556", +1280 => x"8008802e", +1281 => x"a3388008", +1282 => x"8c057580", +1283 => x"080c5484", +1284 => x"0b800884", +1285 => x"050c7380", +1286 => x"0888050c", +1287 => x"82f05374", +1288 => x"52735197", +1289 => x"fd3f7554", +1290 => x"7374780c", +1291 => x"5573ffb4", +1292 => x"388c780c", +1293 => x"800b800c", +1294 => x"8a3d0d04", +1295 => x"810b8c17", +1296 => x"2373760c", +1297 => x"7388170c", +1298 => x"7384170c", +1299 => x"7390170c", +1300 => x"7394170c", +1301 => x"7398170c", +1302 => x"ff0b8e17", +1303 => x"2373b017", +1304 => x"0c73b417", +1305 => x"0c7380c4", +1306 => x"170c7380", +1307 => x"c8170c75", +1308 => x"800c8a3d", +1309 => x"0d047070", +1310 => x"a1aa5273", +1311 => x"5186a63f", +1312 => x"50500470", +1313 => x"70a1aa52", +1314 => x"80cfec08", +1315 => x"5186963f", +1316 => x"505004fb", +1317 => x"3d0d7770", +1318 => x"52569890", +1319 => x"3f80d7a8", +1320 => x"0b880508", +1321 => x"841108fc", +1322 => x"06707b31", +1323 => x"9fef05e0", +1324 => x"8006e080", +1325 => x"05525555", +1326 => x"a0807524", +1327 => x"94388052", +1328 => x"755197ea", +1329 => x"3f80d7b0", +1330 => x"08145372", +1331 => x"80082e8f", +1332 => x"38755197", +1333 => x"d83f8053", +1334 => x"72800c87", +1335 => x"3d0d0474", +1336 => x"30527551", +1337 => x"97c83f80", +1338 => x"08ff2ea8", +1339 => x"3880d7a8", +1340 => x"0b880508", +1341 => x"74763181", +1342 => x"0784120c", +1343 => x"5380d6ec", +1344 => x"08753180", +1345 => x"d6ec0c75", +1346 => x"5197a23f", +1347 => x"810b800c", +1348 => x"873d0d04", +1349 => x"80527551", +1350 => x"97943f80", +1351 => x"d7a80b88", +1352 => x"05088008", +1353 => x"71315454", +1354 => x"8f7325ff", +1355 => x"a4388008", +1356 => x"80d79c08", +1357 => x"3180d6ec", +1358 => x"0c728107", +1359 => x"84150c75", +1360 => x"5196ea3f", +1361 => x"8053ff90", +1362 => x"39f73d0d", +1363 => x"7b7d545a", +1364 => x"72802e82", +1365 => x"83387951", +1366 => x"96d23ff8", +1367 => x"13841108", +1368 => x"70fe0670", +1369 => x"13841108", +1370 => x"fc065c57", +1371 => x"58545780", +1372 => x"d7b00874", +1373 => x"2e82de38", +1374 => x"7784150c", +1375 => x"80738106", +1376 => x"56597479", +1377 => x"2e81d538", +1378 => x"77148411", +1379 => x"08810656", +1380 => x"5374a038", +1381 => x"77165678", +1382 => x"81e63888", +1383 => x"14085574", +1384 => x"80d7b02e", +1385 => x"82f9388c", +1386 => x"1408708c", +1387 => x"170c7588", +1388 => x"120c5875", +1389 => x"81078418", +1390 => x"0c751776", +1391 => x"710c5478", +1392 => x"81913883", +1393 => x"ff762781", +1394 => x"c8387589", +1395 => x"2a76832a", +1396 => x"54547380", +1397 => x"2ebf3875", +1398 => x"862ab805", +1399 => x"53847427", +1400 => x"b43880db", +1401 => x"14539474", +1402 => x"27ab3875", +1403 => x"8c2a80ee", +1404 => x"055380d4", +1405 => x"74279e38", +1406 => x"758f2a80", +1407 => x"f7055382", +1408 => x"d4742791", +1409 => x"3875922a", +1410 => x"80fc0553", +1411 => x"8ad47427", +1412 => x"843880fe", +1413 => x"53721010", +1414 => x"1080d7a8", +1415 => x"05881108", +1416 => x"55557375", +1417 => x"2e82bf38", +1418 => x"841408fc", +1419 => x"06597579", +1420 => x"278d3888", +1421 => x"14085473", +1422 => x"752e0981", +1423 => x"06ea388c", +1424 => x"1408708c", +1425 => x"190c7488", +1426 => x"190c7788", +1427 => x"120c5576", +1428 => x"8c150c79", +1429 => x"5194d63f", +1430 => x"8b3d0d04", +1431 => x"76087771", +1432 => x"31587605", +1433 => x"88180856", +1434 => x"567480d7", +1435 => x"b02e80e0", +1436 => x"388c1708", +1437 => x"708c170c", +1438 => x"7588120c", +1439 => x"53fe8939", +1440 => x"8814088c", +1441 => x"1508708c", +1442 => x"130c5988", +1443 => x"190cfea3", +1444 => x"3975832a", +1445 => x"70545480", +1446 => x"74248198", +1447 => x"3872822c", +1448 => x"81712b80", +1449 => x"d7ac0807", +1450 => x"80d7a80b", +1451 => x"84050c74", +1452 => x"10101080", +1453 => x"d7a80588", +1454 => x"1108718c", +1455 => x"1b0c7088", +1456 => x"1b0c7988", +1457 => x"130c565a", +1458 => x"55768c15", +1459 => x"0cff8439", +1460 => x"8159fdb4", +1461 => x"39771673", +1462 => x"81065455", +1463 => x"72983876", +1464 => x"08777131", +1465 => x"5875058c", +1466 => x"18088819", +1467 => x"08718c12", +1468 => x"0c88120c", +1469 => x"55557481", +1470 => x"0784180c", +1471 => x"7680d7a8", +1472 => x"0b88050c", +1473 => x"80d7a408", +1474 => x"7526fec7", +1475 => x"3880d7a0", +1476 => x"08527951", +1477 => x"fafd3f79", +1478 => x"5193923f", +1479 => x"feba3981", +1480 => x"778c170c", +1481 => x"7788170c", +1482 => x"758c190c", +1483 => x"7588190c", +1484 => x"59fd8039", +1485 => x"83147082", +1486 => x"2c81712b", +1487 => x"80d7ac08", +1488 => x"0780d7a8", +1489 => x"0b84050c", +1490 => x"75101010", +1491 => x"80d7a805", +1492 => x"88110871", +1493 => x"8c1c0c70", +1494 => x"881c0c7a", +1495 => x"88130c57", +1496 => x"5b5653fe", +1497 => x"e4398073", +1498 => x"24a33872", +1499 => x"822c8171", +1500 => x"2b80d7ac", +1501 => x"080780d7", +1502 => x"a80b8405", +1503 => x"0c58748c", +1504 => x"180c7388", +1505 => x"180c7688", +1506 => x"160cfdc3", +1507 => x"39831370", +1508 => x"822c8171", +1509 => x"2b80d7ac", +1510 => x"080780d7", +1511 => x"a80b8405", +1512 => x"0c5953da", +1513 => x"39f93d0d", +1514 => x"797b5853", +1515 => x"800b80cf", +1516 => x"ec085356", +1517 => x"72722ebc", +1518 => x"3884dc13", +1519 => x"5574762e", +1520 => x"b3388815", +1521 => x"08841608", +1522 => x"ff055454", +1523 => x"80732499", +1524 => x"388c1422", +1525 => x"70902b53", +1526 => x"587180d4", +1527 => x"3880dc14", +1528 => x"ff145454", +1529 => x"728025e9", +1530 => x"38740855", +1531 => x"74d43880", +1532 => x"cfec0852", +1533 => x"84dc1255", +1534 => x"74802ead", +1535 => x"38881508", +1536 => x"841608ff", +1537 => x"05545480", +1538 => x"73249838", +1539 => x"8c142270", +1540 => x"902b5358", +1541 => x"71ad3880", +1542 => x"dc14ff14", +1543 => x"54547280", +1544 => x"25ea3874", +1545 => x"085574d5", +1546 => x"3875800c", +1547 => x"893d0d04", +1548 => x"7351762d", +1549 => x"75800807", +1550 => x"80dc15ff", +1551 => x"15555556", +1552 => x"ffa23973", +1553 => x"51762d75", +1554 => x"80080780", +1555 => x"dc15ff15", +1556 => x"555556ca", +1557 => x"39ea3d0d", +1558 => x"688c1122", +1559 => x"700a100a", +1560 => x"81065758", +1561 => x"567480e4", +1562 => x"388e1622", +1563 => x"70902b70", +1564 => x"902c5155", +1565 => x"58807424", +1566 => x"b138983d", +1567 => x"c4055373", +1568 => x"5280cfec", +1569 => x"08519481", +1570 => x"3f800b80", +1571 => x"08249738", +1572 => x"7983e080", +1573 => x"06547380", +1574 => x"c0802e81", +1575 => x"8f387382", +1576 => x"80802e81", +1577 => x"91388c16", +1578 => x"22577690", +1579 => x"80075473", +1580 => x"8c172388", +1581 => x"805280cf", +1582 => x"ec085181", +1583 => x"9b3f8008", +1584 => x"9d388c16", +1585 => x"22820755", +1586 => x"748c1723", +1587 => x"80c31670", +1588 => x"770c9017", +1589 => x"0c810b94", +1590 => x"170c983d", +1591 => x"0d0480cf", +1592 => x"ec08a8f6", +1593 => x"0bbc120c", +1594 => x"588c1622", +1595 => x"81800754", +1596 => x"738c1723", +1597 => x"8008760c", +1598 => x"80089017", +1599 => x"0c88800b", +1600 => x"94170c74", +1601 => x"802ed338", +1602 => x"8e162270", +1603 => x"902b7090", +1604 => x"2c535654", +1605 => x"9afb3f80", +1606 => x"08802eff", +1607 => x"bd388c16", +1608 => x"22810757", +1609 => x"768c1723", +1610 => x"983d0d04", +1611 => x"810b8c17", +1612 => x"225855fe", +1613 => x"f539a816", +1614 => x"0880c3ad", +1615 => x"2e098106", +1616 => x"fee4388c", +1617 => x"16228880", +1618 => x"0754738c", +1619 => x"17238880", +1620 => x"0b80cc17", +1621 => x"0cfedc39", +1622 => x"f43d0d7e", +1623 => x"608b1170", +1624 => x"f8065b55", +1625 => x"555d7296", +1626 => x"26833890", +1627 => x"58807824", +1628 => x"74792607", +1629 => x"55805474", +1630 => x"742e0981", +1631 => x"0680ca38", +1632 => x"7c518ea8", +1633 => x"3f7783f7", +1634 => x"2680c538", +1635 => x"77832a70", +1636 => x"10101080", +1637 => x"d7a8058c", +1638 => x"11085858", +1639 => x"5475772e", +1640 => x"81f03884", +1641 => x"1608fc06", +1642 => x"8c170888", +1643 => x"1808718c", +1644 => x"120c8812", +1645 => x"0c5b7605", +1646 => x"84110881", +1647 => x"0784120c", +1648 => x"537c518d", +1649 => x"e83f8816", +1650 => x"5473800c", +1651 => x"8e3d0d04", +1652 => x"77892a78", +1653 => x"832a5854", +1654 => x"73802ebf", +1655 => x"3877862a", +1656 => x"b8055784", +1657 => x"7427b438", +1658 => x"80db1457", +1659 => x"947427ab", +1660 => x"38778c2a", +1661 => x"80ee0557", +1662 => x"80d47427", +1663 => x"9e38778f", +1664 => x"2a80f705", +1665 => x"5782d474", +1666 => x"27913877", +1667 => x"922a80fc", +1668 => x"05578ad4", +1669 => x"74278438", +1670 => x"80fe5776", +1671 => x"10101080", +1672 => x"d7a8058c", +1673 => x"11085653", +1674 => x"74732ea3", +1675 => x"38841508", +1676 => x"fc067079", +1677 => x"31555673", +1678 => x"8f2488e4", +1679 => x"38738025", +1680 => x"88e6388c", +1681 => x"15085574", +1682 => x"732e0981", +1683 => x"06df3881", +1684 => x"175980d7", +1685 => x"b8085675", +1686 => x"80d7b02e", +1687 => x"82cc3884", +1688 => x"1608fc06", +1689 => x"70793155", +1690 => x"55738f24", +1691 => x"bb3880d7", +1692 => x"b00b80d7", +1693 => x"bc0c80d7", +1694 => x"b00b80d7", +1695 => x"b80c8074", +1696 => x"2480db38", +1697 => x"74168411", +1698 => x"08810784", +1699 => x"120c53fe", +1700 => x"b0398816", +1701 => x"8c110857", +1702 => x"5975792e", +1703 => x"098106fe", +1704 => x"82388214", +1705 => x"59ffab39", +1706 => x"77167881", +1707 => x"0784180c", +1708 => x"7080d7bc", +1709 => x"0c7080d7", +1710 => x"b80c80d7", +1711 => x"b00b8c12", +1712 => x"0c8c1108", +1713 => x"88120c74", +1714 => x"81078412", +1715 => x"0c740574", +1716 => x"710c5b7c", +1717 => x"518bd63f", +1718 => x"881654fd", +1719 => x"ec3983ff", +1720 => x"75278391", +1721 => x"3874892a", +1722 => x"75832a54", +1723 => x"5473802e", +1724 => x"bf387486", +1725 => x"2ab80553", +1726 => x"847427b4", +1727 => x"3880db14", +1728 => x"53947427", +1729 => x"ab38748c", +1730 => x"2a80ee05", +1731 => x"5380d474", +1732 => x"279e3874", +1733 => x"8f2a80f7", +1734 => x"055382d4", +1735 => x"74279138", +1736 => x"74922a80", +1737 => x"fc05538a", +1738 => x"d4742784", +1739 => x"3880fe53", +1740 => x"72101010", +1741 => x"80d7a805", +1742 => x"88110855", +1743 => x"5773772e", +1744 => x"868b3884", +1745 => x"1408fc06", +1746 => x"5b747b27", +1747 => x"8d388814", +1748 => x"08547377", +1749 => x"2e098106", +1750 => x"ea388c14", +1751 => x"0880d7a8", +1752 => x"0b840508", +1753 => x"718c190c", +1754 => x"7588190c", +1755 => x"7788130c", +1756 => x"5c57758c", +1757 => x"150c7853", +1758 => x"80792483", +1759 => x"98387282", +1760 => x"2c81712b", +1761 => x"5656747b", +1762 => x"2680ca38", +1763 => x"7a750657", +1764 => x"7682a338", +1765 => x"78fc0684", +1766 => x"05597410", +1767 => x"707c0655", +1768 => x"55738292", +1769 => x"38841959", +1770 => x"f13980d7", +1771 => x"a80b8405", +1772 => x"0879545b", +1773 => x"788025c6", +1774 => x"3882da39", +1775 => x"74097b06", +1776 => x"7080d7a8", +1777 => x"0b84050c", +1778 => x"5b741055", +1779 => x"747b2685", +1780 => x"387485bc", +1781 => x"3880d7a8", +1782 => x"0b880508", +1783 => x"70841208", +1784 => x"fc06707b", +1785 => x"317b7226", +1786 => x"8f722507", +1787 => x"5d575c5c", +1788 => x"5578802e", +1789 => x"80d93879", +1790 => x"1580d7a0", +1791 => x"08199011", +1792 => x"59545680", +1793 => x"d79c08ff", +1794 => x"2e8838a0", +1795 => x"8f13e080", +1796 => x"06577652", +1797 => x"7c518996", +1798 => x"3f800854", +1799 => x"8008ff2e", +1800 => x"90388008", +1801 => x"762782a7", +1802 => x"387480d7", +1803 => x"a82e829f", +1804 => x"3880d7a8", +1805 => x"0b880508", +1806 => x"55841508", +1807 => x"fc067079", +1808 => x"31797226", +1809 => x"8f722507", +1810 => x"5d555a7a", +1811 => x"83f23877", +1812 => x"81078416", +1813 => x"0c771570", +1814 => x"80d7a80b", +1815 => x"88050c74", +1816 => x"81078412", +1817 => x"0c567c51", +1818 => x"88c33f88", +1819 => x"15547380", +1820 => x"0c8e3d0d", +1821 => x"0474832a", +1822 => x"70545480", +1823 => x"7424819b", +1824 => x"3872822c", +1825 => x"81712b80", +1826 => x"d7ac0807", +1827 => x"7080d7a8", +1828 => x"0b84050c", +1829 => x"75101010", +1830 => x"80d7a805", +1831 => x"88110871", +1832 => x"8c1b0c70", +1833 => x"881b0c79", +1834 => x"88130c57", +1835 => x"555c5575", +1836 => x"8c150cfd", +1837 => x"c1397879", +1838 => x"10101080", +1839 => x"d7a80570", +1840 => x"565b5c8c", +1841 => x"14085675", +1842 => x"742ea338", +1843 => x"841608fc", +1844 => x"06707931", +1845 => x"5853768f", +1846 => x"2483f138", +1847 => x"76802584", +1848 => x"af388c16", +1849 => x"08567574", +1850 => x"2e098106", +1851 => x"df388814", +1852 => x"811a7083", +1853 => x"06555a54", +1854 => x"72c9387b", +1855 => x"83065675", +1856 => x"802efdb8", +1857 => x"38ff1cf8", +1858 => x"1b5b5c88", +1859 => x"1a087a2e", +1860 => x"ea38fdb5", +1861 => x"39831953", +1862 => x"fce43983", +1863 => x"1470822c", +1864 => x"81712b80", +1865 => x"d7ac0807", +1866 => x"7080d7a8", +1867 => x"0b84050c", +1868 => x"76101010", +1869 => x"80d7a805", +1870 => x"88110871", +1871 => x"8c1c0c70", +1872 => x"881c0c7a", +1873 => x"88130c58", +1874 => x"535d5653", +1875 => x"fee13980", +1876 => x"d6ec0817", +1877 => x"59800876", +1878 => x"2e818b38", +1879 => x"80d79c08", +1880 => x"ff2e848e", +1881 => x"38737631", +1882 => x"1980d6ec", +1883 => x"0c738706", +1884 => x"70565372", +1885 => x"802e8838", +1886 => x"88733170", +1887 => x"15555576", +1888 => x"149fff06", +1889 => x"a0807131", +1890 => x"1670547e", +1891 => x"53515386", +1892 => x"9d3f8008", +1893 => x"568008ff", +1894 => x"2e819e38", +1895 => x"80d6ec08", +1896 => x"137080d6", +1897 => x"ec0c7475", +1898 => x"80d7a80b", +1899 => x"88050c77", +1900 => x"76311581", +1901 => x"07555659", +1902 => x"7a80d7a8", +1903 => x"2e83c038", +1904 => x"798f2682", +1905 => x"ef38810b", +1906 => x"84150c84", +1907 => x"1508fc06", +1908 => x"70793179", +1909 => x"72268f72", +1910 => x"25075d55", +1911 => x"5a7a802e", +1912 => x"fced3880", +1913 => x"db398008", +1914 => x"9fff0655", +1915 => x"74feed38", +1916 => x"7880d6ec", +1917 => x"0c80d7a8", +1918 => x"0b880508", +1919 => x"7a188107", +1920 => x"84120c55", +1921 => x"80d79808", +1922 => x"79278638", +1923 => x"7880d798", +1924 => x"0c80d794", +1925 => x"087927fc", +1926 => x"a0387880", +1927 => x"d7940c84", +1928 => x"1508fc06", +1929 => x"70793179", +1930 => x"72268f72", +1931 => x"25075d55", +1932 => x"5a7a802e", +1933 => x"fc993888", +1934 => x"39807457", +1935 => x"53fedd39", +1936 => x"7c5184e9", +1937 => x"3f800b80", +1938 => x"0c8e3d0d", +1939 => x"04807324", +1940 => x"a5387282", +1941 => x"2c81712b", +1942 => x"80d7ac08", +1943 => x"077080d7", +1944 => x"a80b8405", +1945 => x"0c5c5a76", +1946 => x"8c170c73", +1947 => x"88170c75", +1948 => x"88180cf9", +1949 => x"fd398313", +1950 => x"70822c81", +1951 => x"712b80d7", +1952 => x"ac080770", +1953 => x"80d7a80b", +1954 => x"84050c5d", +1955 => x"5b53d839", +1956 => x"7a75065c", +1957 => x"7bfc9f38", +1958 => x"84197510", +1959 => x"5659f139", +1960 => x"ff178105", +1961 => x"59f7ab39", +1962 => x"8c150888", +1963 => x"1608718c", +1964 => x"120c8812", +1965 => x"0c597515", +1966 => x"84110881", +1967 => x"0784120c", +1968 => x"587c5183", +1969 => x"e83f8815", +1970 => x"54fba339", +1971 => x"77167881", +1972 => x"0784180c", +1973 => x"8c170888", +1974 => x"1808718c", +1975 => x"120c8812", +1976 => x"0c5c7080", +1977 => x"d7bc0c70", +1978 => x"80d7b80c", +1979 => x"80d7b00b", +1980 => x"8c120c8c", +1981 => x"11088812", +1982 => x"0c778107", +1983 => x"84120c77", +1984 => x"0577710c", +1985 => x"557c5183", +1986 => x"a43f8816", +1987 => x"54f5ba39", +1988 => x"72168411", +1989 => x"08810784", +1990 => x"120c588c", +1991 => x"16088817", +1992 => x"08718c12", +1993 => x"0c88120c", +1994 => x"577c5183", +1995 => x"803f8816", +1996 => x"54f59639", +1997 => x"7284150c", +1998 => x"f41af806", +1999 => x"70841d08", +2000 => x"81060784", +2001 => x"1d0c701c", +2002 => x"5556850b", +2003 => x"84150c85", +2004 => x"0b88150c", +2005 => x"8f7627fd", +2006 => x"ab38881b", +2007 => x"527c51eb", +2008 => x"e83f80d7", +2009 => x"a80b8805", +2010 => x"0880d6ec", +2011 => x"085a55fd", +2012 => x"93397880", +2013 => x"d6ec0c73", +2014 => x"80d79c0c", +2015 => x"fbef3972", +2016 => x"84150cfc", +2017 => x"ff39fb3d", +2018 => x"0d77707a", +2019 => x"7c585553", +2020 => x"568f7527", +2021 => x"80e63872", +2022 => x"76078306", +2023 => x"517080dc", +2024 => x"38757352", +2025 => x"54707084", +2026 => x"05520874", +2027 => x"70840556", +2028 => x"0c737170", +2029 => x"84055308", +2030 => x"71708405", +2031 => x"530c7170", +2032 => x"84055308", +2033 => x"71708405", +2034 => x"530c7170", +2035 => x"84055308", +2036 => x"71708405", +2037 => x"530cf016", +2038 => x"5654748f", +2039 => x"26c73883", +2040 => x"75279538", +2041 => x"70708405", +2042 => x"52087470", +2043 => x"8405560c", +2044 => x"fc155574", +2045 => x"8326ed38", +2046 => x"73715452", +2047 => x"ff155170", +2048 => x"ff2e9838", +2049 => x"72708105", +2050 => x"54337270", +2051 => x"81055434", +2052 => x"ff115170", +2053 => x"ff2e0981", +2054 => x"06ea3875", +2055 => x"800c873d", +2056 => x"0d04fb3d", +2057 => x"0d777a71", +2058 => x"028c05a3", +2059 => x"05335854", +2060 => x"54568373", +2061 => x"2780d438", +2062 => x"75830651", +2063 => x"7080cc38", +2064 => x"74882b75", +2065 => x"07707190", +2066 => x"2b075551", +2067 => x"8f7327a7", +2068 => x"38737270", +2069 => x"8405540c", +2070 => x"71747170", +2071 => x"8405530c", +2072 => x"74717084", +2073 => x"05530c74", +2074 => x"71708405", +2075 => x"530cf014", +2076 => x"5452728f", +2077 => x"26db3883", +2078 => x"73279038", +2079 => x"73727084", +2080 => x"05540cfc", +2081 => x"13537283", +2082 => x"26f238ff", +2083 => x"135170ff", +2084 => x"2e933874", +2085 => x"72708105", +2086 => x"5434ff11", +2087 => x"5170ff2e", +2088 => x"098106ef", +2089 => x"3875800c", +2090 => x"873d0d04", +2091 => x"04047070", +2092 => x"7070800b", +2093 => x"80dfe40c", +2094 => x"765184f3", +2095 => x"3f800853", +2096 => x"8008ff2e", +2097 => x"89387280", +2098 => x"0c505050", +2099 => x"500480df", +2100 => x"e4085473", +2101 => x"802eef38", +2102 => x"7574710c", +2103 => x"5272800c", +2104 => x"50505050", +2105 => x"04f93d0d", +2106 => x"797c557b", +2107 => x"548e1122", +2108 => x"70902b70", +2109 => x"902c5557", +2110 => x"80cfec08", +2111 => x"53585683", +2112 => x"f63f8008", +2113 => x"57800b80", +2114 => x"08249338", +2115 => x"80d01608", +2116 => x"80080580", +2117 => x"d0170c76", +2118 => x"800c893d", +2119 => x"0d048c16", +2120 => x"2283dfff", +2121 => x"0655748c", +2122 => x"17237680", +2123 => x"0c893d0d", +2124 => x"04fa3d0d", +2125 => x"788c1122", +2126 => x"70882a70", +2127 => x"81065157", +2128 => x"585674a9", +2129 => x"388c1622", +2130 => x"83dfff06", +2131 => x"55748c17", +2132 => x"237a5479", +2133 => x"538e1622", +2134 => x"70902b70", +2135 => x"902c5456", +2136 => x"80cfec08", +2137 => x"525681b2", +2138 => x"3f883d0d", +2139 => x"04825480", +2140 => x"538e1622", +2141 => x"70902b70", +2142 => x"902c5456", +2143 => x"80cfec08", +2144 => x"525782bb", +2145 => x"3f8c1622", +2146 => x"83dfff06", +2147 => x"55748c17", +2148 => x"237a5479", +2149 => x"538e1622", +2150 => x"70902b70", +2151 => x"902c5456", +2152 => x"80cfec08", +2153 => x"525680f2", +2154 => x"3f883d0d", +2155 => x"04f93d0d", +2156 => x"797c557b", +2157 => x"548e1122", +2158 => x"70902b70", +2159 => x"902c5557", +2160 => x"80cfec08", +2161 => x"53585681", +2162 => x"f63f8008", +2163 => x"578008ff", +2164 => x"2e99388c", +2165 => x"1622a080", +2166 => x"0755748c", +2167 => x"17238008", +2168 => x"80d0170c", +2169 => x"76800c89", +2170 => x"3d0d048c", +2171 => x"162283df", +2172 => x"ff065574", +2173 => x"8c172376", +2174 => x"800c893d", +2175 => x"0d047070", +2176 => x"70748e11", +2177 => x"2270902b", +2178 => x"70902c55", +2179 => x"51515380", +2180 => x"cfec0851", +2181 => x"bd3f5050", +2182 => x"5004fb3d", +2183 => x"0d800b80", +2184 => x"dfe40c7a", +2185 => x"53795278", +2186 => x"5182fc3f", +2187 => x"80085580", +2188 => x"08ff2e88", +2189 => x"3874800c", +2190 => x"873d0d04", +2191 => x"80dfe408", +2192 => x"5675802e", +2193 => x"f0387776", +2194 => x"710c5474", +2195 => x"800c873d", +2196 => x"0d047070", +2197 => x"7070800b", +2198 => x"80dfe40c", +2199 => x"765184c9", +2200 => x"3f800853", +2201 => x"8008ff2e", +2202 => x"89387280", +2203 => x"0c505050", +2204 => x"500480df", +2205 => x"e4085473", +2206 => x"802eef38", +2207 => x"7574710c", +2208 => x"5272800c", +2209 => x"50505050", +2210 => x"04fc3d0d", +2211 => x"800b80df", +2212 => x"e40c7852", +2213 => x"775187b0", +2214 => x"3f800854", +2215 => x"8008ff2e", +2216 => x"88387380", +2217 => x"0c863d0d", +2218 => x"0480dfe4", +2219 => x"08557480", +2220 => x"2ef03876", +2221 => x"75710c53", +2222 => x"73800c86", +2223 => x"3d0d04fb", +2224 => x"3d0d800b", +2225 => x"80dfe40c", +2226 => x"7a537952", +2227 => x"7851848b", +2228 => x"3f800855", +2229 => x"8008ff2e", +2230 => x"88387480", +2231 => x"0c873d0d", +2232 => x"0480dfe4", +2233 => x"08567580", +2234 => x"2ef03877", +2235 => x"76710c54", +2236 => x"74800c87", +2237 => x"3d0d04fb", +2238 => x"3d0d800b", +2239 => x"80dfe40c", +2240 => x"7a537952", +2241 => x"78518293", +2242 => x"3f800855", +2243 => x"8008ff2e", +2244 => x"88387480", +2245 => x"0c873d0d", +2246 => x"0480dfe4", +2247 => x"08567580", +2248 => x"2ef03877", +2249 => x"76710c54", +2250 => x"74800c87", +2251 => x"3d0d0470", +2252 => x"707080df", +2253 => x"d8088938", +2254 => x"80dfe80b", +2255 => x"80dfd80c", +2256 => x"80dfd808", +2257 => x"75115252", +2258 => x"ff537087", +2259 => x"fb808026", +2260 => x"88387080", +2261 => x"dfd80c71", +2262 => x"5372800c", +2263 => x"50505004", +2264 => x"fd3d0d80", +2265 => x"0b80cfe0", +2266 => x"08545472", +2267 => x"812e9b38", +2268 => x"7380dfdc", +2269 => x"0cc2af3f", +2270 => x"c1863f80", +2271 => x"dfb05281", +2272 => x"51c3ff3f", +2273 => x"80085186", +2274 => x"bf3f7280", +2275 => x"dfdc0cc2", +2276 => x"953fc0ec", +2277 => x"3f80dfb0", +2278 => x"528151c3", +2279 => x"e53f8008", +2280 => x"5186a53f", +2281 => x"00ff39f5", +2282 => x"3d0d7e60", +2283 => x"80dfdc08", +2284 => x"705b585b", +2285 => x"5b7580c2", +2286 => x"38777a25", +2287 => x"a138771b", +2288 => x"70337081", +2289 => x"ff065858", +2290 => x"59758a2e", +2291 => x"98387681", +2292 => x"ff0651c1", +2293 => x"b03f8118", +2294 => x"58797824", +2295 => x"e1387980", +2296 => x"0c8d3d0d", +2297 => x"048d51c1", +2298 => x"9c3f7833", +2299 => x"7081ff06", +2300 => x"5257c191", +2301 => x"3f811858", +2302 => x"e0397955", +2303 => x"7a547d53", +2304 => x"85528d3d", +2305 => x"fc0551c0", +2306 => x"b93f8008", +2307 => x"5685b23f", +2308 => x"7b80080c", +2309 => x"75800c8d", +2310 => x"3d0d04f6", +2311 => x"3d0d7d7f", +2312 => x"80dfdc08", +2313 => x"705b585a", +2314 => x"5a7580c1", +2315 => x"38777925", +2316 => x"b338c0ac", +2317 => x"3f800881", +2318 => x"ff06708d", +2319 => x"32703070", +2320 => x"9f2a5151", +2321 => x"5757768a", +2322 => x"2e80c438", +2323 => x"75802ebf", +2324 => x"38771a56", +2325 => x"76763476", +2326 => x"51c0aa3f", +2327 => x"81185878", +2328 => x"7824cf38", +2329 => x"77567580", +2330 => x"0c8c3d0d", +2331 => x"04785579", +2332 => x"547c5384", +2333 => x"528c3dfc", +2334 => x"0551ffbf", +2335 => x"c53f8008", +2336 => x"5684be3f", +2337 => x"7a80080c", +2338 => x"75800c8c", +2339 => x"3d0d0477", +2340 => x"1a598a79", +2341 => x"34811858", +2342 => x"8d51ffbf", +2343 => x"e83f8a51", +2344 => x"ffbfe23f", +2345 => x"7756ffbe", +2346 => x"39fb3d0d", +2347 => x"80dfdc08", +2348 => x"70565473", +2349 => x"88387480", +2350 => x"0c873d0d", +2351 => x"04775383", +2352 => x"52873dfc", +2353 => x"0551ffbe", +2354 => x"f93f8008", +2355 => x"5483f23f", +2356 => x"7580080c", +2357 => x"73800c87", +2358 => x"3d0d04fa", +2359 => x"3d0d80df", +2360 => x"dc08802e", +2361 => x"a3387a55", +2362 => x"79547853", +2363 => x"8652883d", +2364 => x"fc0551ff", +2365 => x"becc3f80", +2366 => x"085683c5", +2367 => x"3f768008", +2368 => x"0c75800c", +2369 => x"883d0d04", +2370 => x"83b73f9d", +2371 => x"0b80080c", +2372 => x"ff0b800c", +2373 => x"883d0d04", +2374 => x"f73d0d7b", +2375 => x"7d5b59bc", +2376 => x"53805279", +2377 => x"51f5fb3f", +2378 => x"80705657", +2379 => x"98567419", +2380 => x"70337078", +2381 => x"2b790781", +2382 => x"18f81a5a", +2383 => x"58595558", +2384 => x"847524ea", +2385 => x"38767a23", +2386 => x"84195880", +2387 => x"70565798", +2388 => x"56741870", +2389 => x"3370782b", +2390 => x"79078118", +2391 => x"f81a5a58", +2392 => x"59515484", +2393 => x"7524ea38", +2394 => x"76821b23", +2395 => x"88195880", +2396 => x"70565798", +2397 => x"56741870", +2398 => x"3370782b", +2399 => x"79078118", +2400 => x"f81a5a58", +2401 => x"59515484", +2402 => x"7524ea38", +2403 => x"76841b0c", +2404 => x"8c195880", +2405 => x"70565798", +2406 => x"56741870", +2407 => x"3370782b", +2408 => x"79078118", +2409 => x"f81a5a58", +2410 => x"59515484", +2411 => x"7524ea38", +2412 => x"76881b23", +2413 => x"90195880", +2414 => x"70565798", +2415 => x"56741870", +2416 => x"3370782b", +2417 => x"79078118", +2418 => x"f81a5a58", +2419 => x"59515484", +2420 => x"7524ea38", +2421 => x"768a1b23", +2422 => x"94195880", +2423 => x"70565798", +2424 => x"56741870", +2425 => x"3370782b", +2426 => x"79078118", +2427 => x"f81a5a58", +2428 => x"59515484", +2429 => x"7524ea38", +2430 => x"768c1b23", +2431 => x"98195880", +2432 => x"70565798", +2433 => x"56741870", +2434 => x"3370782b", +2435 => x"79078118", +2436 => x"f81a5a58", +2437 => x"59515484", +2438 => x"7524ea38", +2439 => x"768e1b23", +2440 => x"9c195880", +2441 => x"705657b8", +2442 => x"56741870", +2443 => x"3370782b", +2444 => x"79078118", +2445 => x"f81a5a58", +2446 => x"595a5488", +2447 => x"7524ea38", +2448 => x"76901b0c", +2449 => x"8b3d0d04", +2450 => x"e93d0d6a", +2451 => x"80dfdc08", +2452 => x"57577593", +2453 => x"3880c080", +2454 => x"0b84180c", +2455 => x"75ac180c", +2456 => x"75800c99", +2457 => x"3d0d0489", +2458 => x"3d70556a", +2459 => x"54558a52", +2460 => x"993dffbc", +2461 => x"0551ffbb", +2462 => x"c93f8008", +2463 => x"77537552", +2464 => x"56fd953f", +2465 => x"bc3f7780", +2466 => x"080c7580", +2467 => x"0c993d0d", +2468 => x"04fc3d0d", +2469 => x"815480df", +2470 => x"dc088838", +2471 => x"73800c86", +2472 => x"3d0d0476", +2473 => x"5397b952", +2474 => x"863dfc05", +2475 => x"51ffbb92", +2476 => x"3f800854", +2477 => x"8c3f7480", +2478 => x"080c7380", +2479 => x"0c863d0d", +2480 => x"0480cfec", +2481 => x"08800c04", +2482 => x"f73d0d7b", +2483 => x"80cfec08", +2484 => x"82c81108", +2485 => x"5a545a77", +2486 => x"802e80da", +2487 => x"38818818", +2488 => x"841908ff", +2489 => x"0581712b", +2490 => x"59555980", +2491 => x"742480ea", +2492 => x"38807424", +2493 => x"b5387382", +2494 => x"2b781188", +2495 => x"05565681", +2496 => x"80190877", +2497 => x"06537280", +2498 => x"2eb63878", +2499 => x"16700853", +2500 => x"53795174", +2501 => x"0853722d", +2502 => x"ff14fc17", +2503 => x"fc177981", +2504 => x"2c5a5757", +2505 => x"54738025", +2506 => x"d6387708", +2507 => x"5877ffad", +2508 => x"3880cfec", +2509 => x"0853bc13", +2510 => x"08a53879", +2511 => x"51f8e53f", +2512 => x"74085372", +2513 => x"2dff14fc", +2514 => x"17fc1779", +2515 => x"812c5a57", +2516 => x"57547380", +2517 => x"25ffa838", +2518 => x"d1398057", +2519 => x"ff933972", +2520 => x"51bc1308", +2521 => x"54732d79", +2522 => x"51f8b93f", +2523 => x"707080df", +2524 => x"b80bfc05", +2525 => x"70085252", +2526 => x"70ff2e91", +2527 => x"38702dfc", +2528 => x"12700852", +2529 => x"5270ff2e", +2530 => x"098106f1", +2531 => x"38505004", +2532 => x"04ffbaff", +2533 => x"3f040000", +2534 => x"00000040", +2535 => x"476f7420", +2536 => x"696e7465", +2537 => x"72727570", +2538 => x"740a0000", +2539 => x"4e6f2069", +2540 => x"6e746572", +2541 => x"72757074", +2542 => x"0a000000", +2543 => x"43000000", +2544 => x"64756d6d", +2545 => x"792e6578", +2546 => x"65000000", +2547 => x"00ffffff", +2548 => x"ff00ffff", +2549 => x"ffff00ff", +2550 => x"ffffff00", +2551 => x"00000000", +2552 => x"00000000", +2553 => x"00000000", +2554 => x"00002fc0", +2555 => x"000027f0", +2556 => x"00000000", +2557 => x"00002a58", +2558 => x"00002ab4", +2559 => x"00002b10", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"00000000", +2568 => x"00000000", +2569 => x"000027bc", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000000", +2597 => x"00000000", +2598 => x"00000001", +2599 => x"330eabcd", +2600 => x"1234e66d", +2601 => x"deec0005", +2602 => x"000b0000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00000000", +2663 => x"00000000", +2664 => x"00000000", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", +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"00000000", +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"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", +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"ffffffff", +2792 => x"00000000", +2793 => x"00020000", +2794 => x"00000000", +2795 => x"00000000", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", +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"000027c0", +3053 => x"ffffffff", +3054 => x"00000000", +3055 => x"ffffffff", +3056 => 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(to_integer(unsigned(memAAddr))) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(to_integer(unsigned(memAAddr))); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(to_integer(unsigned(memBAddr))) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(to_integer(unsigned(memBAddr))); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/example/sim_small_fpga_top.vhd b/zpu/hdl/example/sim_small_fpga_top.vhd index f36a285..e671460 100644 --- a/zpu/hdl/example/sim_small_fpga_top.vhd +++ b/zpu/hdl/example/sim_small_fpga_top.vhd @@ -1,207 +1,207 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project.-------------------------------------------------------------------------------- - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use ieee.numeric_std.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 := '1'; - - -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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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 interruptcounter : unsigned(15 downto 0); -signal interrupt : std_logic; - - - -signal break : std_logic; - -begin - - 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 => interrupt, - break => break); - - - ioMap: zpu_io port map ( - clk => clk, - areset => areset, - busy => io_busy, - writeEnable => io_mem_writeEnable, - readEnable => io_mem_readEnable, - write => mem_write, - 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; - - - - -- 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 <= 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'; - - interruptcounter <= to_unsigned(0, 16); - interrupt <= '0'; - - elsif (clk'event and clk = '1') then - enable <= '1'; - io_reading <= io_busy or io_mem_readEnable; - dram_ready<=dram_mem_readEnable; - - -- keep interrupt signal high for 16 cycles - interruptcounter <= interruptcounter + 1; - if (interruptcounter < 16) then - report "Interrupt asserted!" severity note; - interrupt <='1'; - else - interrupt <='0'; - end if; - end if; - end process; - - -- wiggle the clock @ 100MHz - clock : PROCESS - begin - clk <= '0'; - wait for 5 ns; - clk <= '1'; - wait for 5 ns; - areset <= '0'; - end PROCESS clock; - - -end behave; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project.-------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.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 := '1'; + + +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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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 interruptcounter : unsigned(15 downto 0); +signal interrupt : std_logic; + + + +signal break : std_logic; + +begin + + 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 => interrupt, + break => break); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + 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; + + + + -- 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 <= 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'; + + interruptcounter <= to_unsigned(0, 16); + interrupt <= '0'; + + elsif (clk'event and clk = '1') then + enable <= '1'; + io_reading <= io_busy or io_mem_readEnable; + dram_ready<=dram_mem_readEnable; + + -- keep interrupt signal high for 16 cycles + interruptcounter <= interruptcounter + 1; + if (interruptcounter < 16) then + report "Interrupt asserted!" severity note; + interrupt <='1'; + else + interrupt <='0'; + end if; + end if; + end process; + + -- wiggle the clock @ 100MHz + clock : PROCESS + begin + clk <= '0'; + wait for 5 ns; + clk <= '1'; + wait for 5 ns; + areset <= '0'; + end PROCESS clock; + + +end behave; diff --git a/zpu/hdl/example/sim_small_fpga_top_noint.vhd b/zpu/hdl/example/sim_small_fpga_top_noint.vhd index b342d26..0edb8c7 100644 --- a/zpu/hdl/example/sim_small_fpga_top_noint.vhd +++ b/zpu/hdl/example/sim_small_fpga_top_noint.vhd @@ -1,193 +1,193 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use ieee.numeric_std.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 := '1'; - - -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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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 - - 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); - - - ioMap: zpu_io port map ( - clk => clk, - areset => areset, - busy => io_busy, - writeEnable => io_mem_writeEnable, - readEnable => io_mem_readEnable, - write => mem_write, - 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; - - - - -- 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 <= 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; - areset <= '0'; - end PROCESS clock; - - -end behave; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.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 := '1'; + + +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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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 + + 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); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + 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; + + + + -- 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 <= 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; + areset <= '0'; + end PROCESS clock; + + +end behave; diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd index c4c09b5..c3c60c1 100644 --- a/zpu/hdl/example/zpu_config.vhd +++ b/zpu/hdl/example/zpu_config.vhd @@ -1,56 +1,56 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; -use ieee.std_logic_arith.all; - -package zpu_config is - -- generate trace output - 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"; - -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) - constant maxAddrBitIncIO : integer := 27; - constant maxAddrBitBRAM : integer := 16; - - -- start byte address of stack. - -- point to top of RAM - 2*words - constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := - conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); -end zpu_config; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; + +package zpu_config is + -- generate trace output + 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"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 27; + constant maxAddrBitBRAM : integer := 16; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := + conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); +end zpu_config; diff --git a/zpu/hdl/example_medium/dram_dmips.vhd b/zpu/hdl/example_medium/dram_dmips.vhd index a9fd59e..0437adc 100644 --- a/zpu/hdl/example_medium/dram_dmips.vhd +++ b/zpu/hdl/example_medium/dram_dmips.vhd @@ -1,3308 +1,3308 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); - -shared variable ram : ram_type := -( -0 => x"0b0b0b0b", -1 => x"82700b0b", -2 => x"80d5f40c", -3 => x"3a0b0b80", -4 => x"c4fb0400", -5 => x"00000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80c5c22d", -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"c3040000", -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"0b0b88a6", -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"0b0b80d5", -162 => x"e0738306", -163 => x"10100508", -164 => x"060b0b0b", -165 => x"88a90400", -166 => x"00000000", -167 => x"00000000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0bad", -171 => x"aa2d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0bad", -179 => x"ee2d5050", -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"80d5f00c", -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"82fd3fbf", -257 => x"a03f0410", -258 => x"10101010", -259 => x"10101010", -260 => x"10101010", -261 => x"10101010", -262 => x"10101010", -263 => x"10101010", -264 => x"10101010", -265 => x"10105351", -266 => x"047381ff", -267 => x"06738306", -268 => x"09810583", -269 => x"05101010", -270 => x"2b0772fc", -271 => x"060c5151", -272 => x"043c0472", -273 => x"72807281", -274 => x"06ff0509", -275 => x"72060571", -276 => x"1052720a", -277 => x"100a5372", -278 => x"ed385151", -279 => x"535104ff", -280 => x"3d0d0b0b", -281 => x"80e5e408", -282 => x"52710870", -283 => x"882a8132", -284 => x"70810651", -285 => x"515170f1", -286 => x"3873720c", -287 => x"833d0d04", -288 => x"80d5f008", -289 => x"802ea438", -290 => x"80d5f408", -291 => x"822ebd38", -292 => x"8380800b", -293 => x"0b0b80e5", -294 => x"e40c82a0", -295 => x"800b80e5", -296 => x"e80c8290", -297 => x"800b80e5", -298 => x"ec0c04f8", -299 => x"808080a4", -300 => x"0b0b0b80", -301 => x"e5e40cf8", -302 => x"80808280", -303 => x"0b80e5e8", -304 => x"0cf88080", -305 => x"84800b80", -306 => x"e5ec0c04", -307 => x"80c0a880", -308 => x"8c0b0b0b", -309 => x"80e5e40c", -310 => x"80c0a880", -311 => x"940b80e5", -312 => x"e80c0b0b", -313 => x"80c7d00b", -314 => x"80e5ec0c", -315 => x"04f23d0d", -316 => x"6080e5e8", -317 => x"08565d82", -318 => x"750c8059", -319 => x"805a800b", -320 => x"8f3d5d5b", -321 => x"7a101015", -322 => x"70087108", -323 => x"719f2c7e", -324 => x"852b5855", -325 => x"557d5359", -326 => x"5799993f", -327 => x"7d7f7a72", -328 => x"077c7207", -329 => x"71716081", -330 => x"05415f5d", -331 => x"5b595755", -332 => x"817b278f", -333 => x"38767d0c", -334 => x"77841e0c", -335 => x"7c800c90", -336 => x"3d0d0480", -337 => x"e5e80855", -338 => x"ffba3970", -339 => x"7080e5f0", -340 => x"335170a7", -341 => x"3880d5fc", -342 => x"08700852", -343 => x"5270802e", -344 => x"94388412", -345 => x"80d5fc0c", -346 => x"702d80d5", -347 => x"fc087008", -348 => x"525270ee", -349 => x"38810b80", -350 => x"e5f03450", -351 => x"50040470", -352 => x"0b0b80e5", -353 => x"e008802e", -354 => x"8e380b0b", -355 => x"0b0b800b", -356 => x"802e0981", -357 => x"06833850", -358 => x"040b0b80", -359 => x"e5e0510b", -360 => x"0b0bf4dc", -361 => x"3f500404", -362 => x"ff3d0d02", -363 => x"8f053352", -364 => x"718a2e8a", -365 => x"387151fd", -366 => x"a63f833d", -367 => x"0d048d51", -368 => x"fd9d3f71", -369 => x"51fd983f", -370 => x"833d0d04", -371 => x"ce3d0db5", -372 => x"3d707084", -373 => x"0552088b", -374 => x"a85c56a5", -375 => x"3d5e5c80", -376 => x"75708105", -377 => x"5733765b", -378 => x"55587378", -379 => x"2e80c138", -380 => x"8e3d5b73", -381 => x"a52e0981", -382 => x"0680c538", -383 => x"78708105", -384 => x"5a335473", -385 => x"80e42e81", -386 => x"b6387380", -387 => x"e42480c6", -388 => x"387380e3", -389 => x"2ea13880", -390 => x"52a55179", -391 => x"2d805273", -392 => x"51792d82", -393 => x"18587870", -394 => x"81055a33", -395 => x"5473c438", -396 => x"77800cb4", -397 => x"3d0d047b", -398 => x"841d8312", -399 => x"33565d57", -400 => x"80527351", -401 => x"792d8118", -402 => x"79708105", -403 => x"5b335558", -404 => x"73ffa038", -405 => x"db397380", -406 => x"f32e0981", -407 => x"06ffb838", -408 => x"7b841d71", -409 => x"08595d56", -410 => x"80773355", -411 => x"5673762e", -412 => x"8d388116", -413 => x"70187033", -414 => x"57555674", -415 => x"f538ff16", -416 => x"55807625", -417 => x"ffa03876", -418 => x"70810558", -419 => x"33548052", -420 => x"7351792d", -421 => x"811875ff", -422 => x"17575758", -423 => x"807625ff", -424 => x"85387670", -425 => x"81055833", -426 => x"54805273", -427 => x"51792d81", -428 => x"1875ff17", -429 => x"57575875", -430 => x"8024cc38", -431 => x"fee8397b", -432 => x"841d7108", -433 => x"70719f2c", -434 => x"5953595d", -435 => x"56807524", -436 => x"81913875", -437 => x"7d7c5856", -438 => x"54805773", -439 => x"772e0981", -440 => x"06b638b0", -441 => x"7b3402b5", -442 => x"05567a76", -443 => x"2e9738ff", -444 => x"16567533", -445 => x"75708105", -446 => x"57348117", -447 => x"577a762e", -448 => x"098106eb", -449 => x"38807534", -450 => x"767dff12", -451 => x"57585675", -452 => x"8024fef3", -453 => x"38fe8f39", -454 => x"8a527351", -455 => x"9fd03f80", -456 => x"0880c7d4", -457 => x"05337670", -458 => x"81055834", -459 => x"8a527351", -460 => x"9ef83f80", -461 => x"08548008", -462 => x"802effae", -463 => x"388a5273", -464 => x"519fab3f", -465 => x"800880c7", -466 => x"d4053376", -467 => x"70810558", -468 => x"348a5273", -469 => x"519ed33f", -470 => x"80085480", -471 => x"08ffb938", -472 => x"ff883974", -473 => x"527653b4", -474 => x"3dffb805", -475 => x"51949a3f", -476 => x"a33d0856", -477 => x"fedd3980", -478 => x"3d0d80c1", -479 => x"0b81b4bc", -480 => x"34800b81", -481 => x"b6980c70", -482 => x"800c823d", -483 => x"0d04ff3d", -484 => x"0d800b81", -485 => x"b4bc3352", -486 => x"527080c1", -487 => x"2e993871", -488 => x"81b69808", -489 => x"0781b698", -490 => x"0c80c20b", -491 => x"81b4c034", -492 => x"70800c83", -493 => x"3d0d0481", -494 => x"0b81b698", -495 => x"080781b6", -496 => x"980c80c2", -497 => x"0b81b4c0", -498 => x"3470800c", -499 => x"833d0d04", -500 => x"fd3d0d75", -501 => x"70088a05", -502 => x"535381b4", -503 => x"bc335170", -504 => x"80c12e8b", -505 => x"3873f338", -506 => x"70800c85", -507 => x"3d0d04ff", -508 => x"127081b4", -509 => x"b8083174", -510 => x"0c800c85", -511 => x"3d0d04fc", -512 => x"3d0d81b4", -513 => x"c4085574", -514 => x"802e8c38", -515 => x"76750871", -516 => x"0c81b4c4", -517 => x"0856548c", -518 => x"155381b4", -519 => x"b808528a", -520 => x"518fd43f", -521 => x"73800c86", -522 => x"3d0d04fb", -523 => x"3d0d7770", -524 => x"085656b0", -525 => x"5381b4c4", -526 => x"08527451", -527 => x"ab943f85", -528 => x"0b8c170c", -529 => x"850b8c16", -530 => x"0c750875", -531 => x"0c81b4c4", -532 => x"08547380", -533 => x"2e8a3873", -534 => x"08750c81", -535 => x"b4c40854", -536 => x"8c145381", -537 => x"b4b80852", -538 => x"8a518f8b", -539 => x"3f841508", -540 => x"ad38860b", -541 => x"8c160c88", -542 => x"15528816", -543 => x"08518e97", -544 => x"3f81b4c4", -545 => x"08700876", -546 => x"0c548c15", -547 => x"7054548a", -548 => x"52730851", -549 => x"8ee13f73", -550 => x"800c873d", -551 => x"0d047508", -552 => x"54b05373", -553 => x"527551aa", -554 => x"a93f7380", -555 => x"0c873d0d", -556 => x"04d93d0d", -557 => x"b0519dcf", -558 => x"3f800881", -559 => x"b4b40cb0", -560 => x"519dc43f", -561 => x"800881b4", -562 => x"c40c81b4", -563 => x"b4088008", -564 => x"0c800b80", -565 => x"0884050c", -566 => x"820b8008", -567 => x"88050ca8", -568 => x"0b80088c", -569 => x"050c9f53", -570 => x"80c7e052", -571 => x"80089005", -572 => x"51a9df3f", -573 => x"a13d5e9f", -574 => x"5380c880", -575 => x"527d51a9", -576 => x"d13f8a0b", -577 => x"80f2f80c", -578 => x"80d2a451", -579 => x"f9be3f80", -580 => x"c8a051f9", -581 => x"b73f80d2", -582 => x"a451f9b0", -583 => x"3f80d684", -584 => x"08802e89", -585 => x"d33880c8", -586 => x"d051f9a0", -587 => x"3f80d2a4", -588 => x"51f9993f", -589 => x"80d68008", -590 => x"5280c8fc", -591 => x"51f98d3f", -592 => x"80e69451", -593 => x"b2ff3f81", -594 => x"0b9a3d5e", -595 => x"5b800b80", -596 => x"d6800825", -597 => x"82d43890", -598 => x"3d5f80c1", -599 => x"0b81b4bc", -600 => x"34810b81", -601 => x"b6980c80", -602 => x"c20b81b4", -603 => x"c0348240", -604 => x"835a9f53", -605 => x"80c9ac52", -606 => x"7c51a8d6", -607 => x"3f814180", -608 => x"7d537e52", -609 => x"568e943f", -610 => x"8008762e", -611 => x"09810683", -612 => x"38815675", -613 => x"81b6980c", -614 => x"7f705856", -615 => x"758325a2", -616 => x"38751010", -617 => x"16fd0542", -618 => x"a93dffa4", -619 => x"05538352", -620 => x"76518cc3", -621 => x"3f7f8105", -622 => x"70417058", -623 => x"56837624", -624 => x"e0386154", -625 => x"755380e6", -626 => x"9c5281b4", -627 => x"d0518cb7", -628 => x"3f81b4c4", -629 => x"08700858", -630 => x"58b05377", -631 => x"527651a7", -632 => x"f13f850b", -633 => x"8c190c85", -634 => x"0b8c180c", -635 => x"7708770c", -636 => x"81b4c408", -637 => x"5675802e", -638 => x"8a387508", -639 => x"770c81b4", -640 => x"c408568c", -641 => x"165381b4", -642 => x"b808528a", -643 => x"518be83f", -644 => x"84170887", -645 => x"ea38860b", -646 => x"8c180c88", -647 => x"17528818", -648 => x"08518af3", -649 => x"3f81b4c4", -650 => x"08700878", -651 => x"0c568c17", -652 => x"7054598a", -653 => x"52780851", -654 => x"8bbd3f80", -655 => x"c10b81b4", -656 => x"c0335757", -657 => x"767626a2", -658 => x"3880c352", -659 => x"76518ca1", -660 => x"3f800861", -661 => x"2e89e438", -662 => x"81177081", -663 => x"ff0681b4", -664 => x"c0335858", -665 => x"58757727", -666 => x"e0387960", -667 => x"29627054", -668 => x"71535b59", -669 => x"98b43f80", -670 => x"0840787a", -671 => x"31708729", -672 => x"80083180", -673 => x"088a0581", -674 => x"b4bc3381", -675 => x"b4b8085e", -676 => x"5b525a56", -677 => x"7780c12e", -678 => x"89ce387b", -679 => x"f738811b", -680 => x"5b80d680", -681 => x"087b25fd", -682 => x"b13881b4", -683 => x"ac51b095", -684 => x"3f80c9cc", -685 => x"51f6953f", -686 => x"80d2a451", -687 => x"f68e3f80", -688 => x"c9dc51f6", -689 => x"873f80d2", -690 => x"a451f680", -691 => x"3f81b4b8", -692 => x"085280ca", -693 => x"9451f5f4", -694 => x"3f855280", -695 => x"cab051f5", -696 => x"eb3f81b6", -697 => x"98085280", -698 => x"cacc51f5", -699 => x"df3f8152", -700 => x"80cab051", -701 => x"f5d63f81", -702 => x"b4bc3352", -703 => x"80cae851", -704 => x"f5ca3f80", -705 => x"c15280cb", -706 => x"8451f5c0", -707 => x"3f81b4c0", -708 => x"335280cb", -709 => x"a051f5b4", -710 => x"3f80c252", -711 => x"80cb8451", -712 => x"f5aa3f81", -713 => x"b4f00852", -714 => x"80cbbc51", -715 => x"f59e3f87", -716 => x"5280cab0", -717 => x"51f5953f", -718 => x"80f2f808", -719 => x"5280cbd8", -720 => x"51f5893f", -721 => x"80cbf451", -722 => x"f5823f80", -723 => x"cca051f4", -724 => x"fb3f81b4", -725 => x"c4087008", -726 => x"535a80cc", -727 => x"ac51f4ec", -728 => x"3f80ccc8", -729 => x"51f4e53f", -730 => x"81b4c408", -731 => x"84110853", -732 => x"5680ccfc", -733 => x"51f4d53f", -734 => x"805280ca", -735 => x"b051f4cc", -736 => x"3f81b4c4", -737 => x"08881108", -738 => x"535880cd", -739 => x"9851f4bc", -740 => x"3f825280", -741 => x"cab051f4", -742 => x"b33f81b4", -743 => x"c4088c11", -744 => x"08535780", -745 => x"cdb451f4", -746 => x"a33f9152", -747 => x"80cab051", -748 => x"f49a3f81", -749 => x"b4c40890", -750 => x"055280cd", -751 => x"d051f48c", -752 => x"3f80cdec", -753 => x"51f4853f", -754 => x"80cea451", -755 => x"f3fe3f81", -756 => x"b4b40870", -757 => x"08535f80", -758 => x"ccac51f3", -759 => x"ef3f80ce", -760 => x"b851f3e8", -761 => x"3f81b4b4", -762 => x"08841108", -763 => x"535b80cc", -764 => x"fc51f3d8", -765 => x"3f805280", -766 => x"cab051f3", -767 => x"cf3f81b4", -768 => x"b4088811", -769 => x"08535c80", -770 => x"cd9851f3", -771 => x"bf3f8152", -772 => x"80cab051", -773 => x"f3b63f81", -774 => x"b4b4088c", -775 => x"1108535a", -776 => x"80cdb451", -777 => x"f3a63f92", -778 => x"5280cab0", -779 => x"51f39d3f", -780 => x"81b4b408", -781 => x"90055280", -782 => x"cdd051f3", -783 => x"8f3f80cd", -784 => x"ec51f388", -785 => x"3f7f5280", -786 => x"cef851f2", -787 => x"ff3f8552", -788 => x"80cab051", -789 => x"f2f63f78", -790 => x"5280cf94", -791 => x"51f2ed3f", -792 => x"8d5280ca", -793 => x"b051f2e4", -794 => x"3f615280", -795 => x"cfb051f2", -796 => x"db3f8752", -797 => x"80cab051", -798 => x"f2d23f60", -799 => x"5280cfcc", -800 => x"51f2c93f", -801 => x"815280ca", -802 => x"b051f2c0", -803 => x"3f7d5280", -804 => x"cfe851f2", -805 => x"b73f80d0", -806 => x"8451f2b0", -807 => x"3f7c5280", -808 => x"d0bc51f2", -809 => x"a73f80d0", -810 => x"d851f2a0", -811 => x"3f80d2a4", -812 => x"51f2993f", -813 => x"81b4ac08", -814 => x"81b4b008", -815 => x"80e69408", -816 => x"80e69808", -817 => x"72713170", -818 => x"74267574", -819 => x"31707231", -820 => x"80e68c0c", -821 => x"444480e6", -822 => x"900c80e6", -823 => x"90085680", -824 => x"d190555c", -825 => x"595758f1", -826 => x"e33f80e6", -827 => x"8c085680", -828 => x"762582a3", -829 => x"3880d680", -830 => x"0870719f", -831 => x"2c9a3d53", -832 => x"565680e6", -833 => x"8c0880e6", -834 => x"90084153", -835 => x"7f547052", -836 => x"5a89eb3f", -837 => x"66685f80", -838 => x"e5fc0c7d", -839 => x"80e6800c", -840 => x"80d68008", -841 => x"709f2c58", -842 => x"568058bd", -843 => x"84c07855", -844 => x"55765275", -845 => x"53795187", -846 => x"d13f953d", -847 => x"80e68c08", -848 => x"80e69008", -849 => x"41557f56", -850 => x"67694053", -851 => x"7e547052", -852 => x"5c89ab3f", -853 => x"64665e80", -854 => x"e6840c7c", -855 => x"80e6880c", -856 => x"80d68008", -857 => x"709f2c40", -858 => x"58805783", -859 => x"dceb9480", -860 => x"7755557e", -861 => x"5277537b", -862 => x"51878f3f", -863 => x"64665d5b", -864 => x"805e8ddd", -865 => x"7e555580", -866 => x"e68c0880", -867 => x"e6900859", -868 => x"52775379", -869 => x"5186f33f", -870 => x"66684054", -871 => x"7e557a52", -872 => x"7b53a93d", -873 => x"ffa80551", -874 => x"88d43f62", -875 => x"645e81b4", -876 => x"c80c7c81", -877 => x"b4cc0c80", -878 => x"d1a051f0", -879 => x"8f3f80e6", -880 => x"80085280", -881 => x"d1d051f0", -882 => x"833f80d1", -883 => x"d851effc", -884 => x"3f80e688", -885 => x"085280d1", -886 => x"d051eff0", -887 => x"3f81b4cc", -888 => x"085280d2", -889 => x"8851efe4", -890 => x"3f80d2a4", -891 => x"51efdd3f", -892 => x"800b800c", -893 => x"a93d0d04", -894 => x"80d2a851", -895 => x"f6ac3977", -896 => x"0857b053", -897 => x"76527751", -898 => x"9fc83f80", -899 => x"c10b81b4", -900 => x"c0335757", -901 => x"f8ae3975", -902 => x"8a3880e6", -903 => x"90088126", -904 => x"fdd33880", -905 => x"d2d851ef", -906 => x"a33f80d3", -907 => x"9051ef9c", -908 => x"3f80d2a4", -909 => x"51ef953f", -910 => x"80d68008", -911 => x"70719f2c", -912 => x"9a3d5356", -913 => x"5680e68c", -914 => x"0880e690", -915 => x"0841537f", -916 => x"5470525a", -917 => x"87a83f66", -918 => x"685f80e5", -919 => x"fc0c7d80", -920 => x"e6800c80", -921 => x"d6800870", -922 => x"9f2c5856", -923 => x"8058bd84", -924 => x"c0785555", -925 => x"76527553", -926 => x"7951858e", -927 => x"3f953d80", -928 => x"e68c0880", -929 => x"e6900841", -930 => x"557f5667", -931 => x"6940537e", -932 => x"5470525c", -933 => x"86e83f64", -934 => x"665e80e6", -935 => x"840c7c80", -936 => x"e6880c80", -937 => x"d6800870", -938 => x"9f2c4058", -939 => x"805783dc", -940 => x"eb948077", -941 => x"55557e52", -942 => x"77537b51", -943 => x"84cc3f64", -944 => x"665d5b80", -945 => x"5e8ddd7e", -946 => x"555580e6", -947 => x"8c0880e6", -948 => x"90085952", -949 => x"77537951", -950 => x"84b03f66", -951 => x"6840547e", -952 => x"557a527b", -953 => x"53a93dff", -954 => x"a8055186", -955 => x"913f6264", -956 => x"5e81b4c8", -957 => x"0c7c81b4", -958 => x"cc0c80d1", -959 => x"a051edcc", -960 => x"3f80e680", -961 => x"085280d1", -962 => x"d051edc0", -963 => x"3f80d1d8", -964 => x"51edb93f", -965 => x"80e68808", -966 => x"5280d1d0", -967 => x"51edad3f", -968 => x"81b4cc08", -969 => x"5280d288", -970 => x"51eda13f", -971 => x"80d2a451", -972 => x"ed9a3f80", -973 => x"0b800ca9", -974 => x"3d0d04a9", -975 => x"3dffa005", -976 => x"52805180", -977 => x"d23f9f53", -978 => x"80d3b052", -979 => x"7c519d82", -980 => x"3f7a7b81", -981 => x"b4b80c81", -982 => x"187081ff", -983 => x"0681b4c0", -984 => x"33595959", -985 => x"5af5fe39", -986 => x"ff16707b", -987 => x"31600c5c", -988 => x"800b811c", -989 => x"5c5c80d6", -990 => x"80087b25", -991 => x"f3dc38f6", -992 => x"a939ff3d", -993 => x"0d738232", -994 => x"70307072", -995 => x"07802580", -996 => x"0c525283", -997 => x"3d0d04fe", -998 => x"3d0d7476", -999 => x"71535452", -1000 => x"71822e83", -1001 => x"38835171", -1002 => x"812e9a38", -1003 => x"8172269f", -1004 => x"3871822e", -1005 => x"b8387184", -1006 => x"2ea93870", -1007 => x"730c7080", -1008 => x"0c843d0d", -1009 => x"0480e40b", -1010 => x"81b4b808", -1011 => x"258b3880", -1012 => x"730c7080", -1013 => x"0c843d0d", -1014 => x"0483730c", -1015 => x"70800c84", -1016 => x"3d0d0482", -1017 => x"730c7080", -1018 => x"0c843d0d", -1019 => x"0481730c", -1020 => x"70800c84", -1021 => x"3d0d0480", -1022 => x"3d0d7474", -1023 => x"14820571", -1024 => x"0c800c82", -1025 => x"3d0d04f7", -1026 => x"3d0d7b7d", -1027 => x"7f618512", -1028 => x"70822b75", -1029 => x"11707471", -1030 => x"70840553", -1031 => x"0c5a5a5d", -1032 => x"5b760c79", -1033 => x"80f8180c", -1034 => x"79861252", -1035 => x"57585a5a", -1036 => x"76762499", -1037 => x"3876b329", -1038 => x"822b7911", -1039 => x"51537673", -1040 => x"70840555", -1041 => x"0c811454", -1042 => x"757425f2", -1043 => x"387681cc", -1044 => x"2919fc11", -1045 => x"088105fc", -1046 => x"120c7a19", -1047 => x"70089fa0", -1048 => x"130c5856", -1049 => x"850b81b4", -1050 => x"b80c7580", -1051 => x"0c8b3d0d", -1052 => x"04fe3d0d", -1053 => x"02930533", -1054 => x"51800284", -1055 => x"05970533", -1056 => x"54527073", -1057 => x"2e883871", -1058 => x"800c843d", -1059 => x"0d047081", -1060 => x"b4bc3481", -1061 => x"0b800c84", -1062 => x"3d0d04f8", -1063 => x"3d0d7a7c", -1064 => x"5956820b", -1065 => x"83195555", -1066 => x"74167033", -1067 => x"75335b51", -1068 => x"5372792e", -1069 => x"80c63880", -1070 => x"c10b8116", -1071 => x"81165656", -1072 => x"57827525", -1073 => x"e338ffa9", -1074 => x"177081ff", -1075 => x"06555973", -1076 => x"82268338", -1077 => x"87558153", -1078 => x"7680d22e", -1079 => x"98387752", -1080 => x"75519bc3", -1081 => x"3f805372", -1082 => x"80082589", -1083 => x"38871581", -1084 => x"b4b80c81", -1085 => x"5372800c", -1086 => x"8a3d0d04", -1087 => x"7281b4bc", -1088 => x"34827525", -1089 => x"ffa238ff", -1090 => x"bd39ef3d", -1091 => x"0d636567", -1092 => x"5b427943", -1093 => x"67695940", -1094 => x"77415a80", -1095 => x"5d805e61", -1096 => x"7083ffff", -1097 => x"0671902a", -1098 => x"627083ff", -1099 => x"ff067190", -1100 => x"2a747229", -1101 => x"74732975", -1102 => x"73297774", -1103 => x"2973902a", -1104 => x"05721151", -1105 => x"5856535f", -1106 => x"5a575a58", -1107 => x"55587373", -1108 => x"27863884", -1109 => x"80801656", -1110 => x"73902a16", -1111 => x"5b7883ff", -1112 => x"ff067484", -1113 => x"80802905", -1114 => x"5c7a7c5a", -1115 => x"5d785e77", -1116 => x"7f296178", -1117 => x"29057d05", -1118 => x"5d7c7e56", -1119 => x"7a0c7484", -1120 => x"1b0c7980", -1121 => x"0c933d0d", -1122 => x"04f93d0d", -1123 => x"797b7d54", -1124 => x"58725977", -1125 => x"30797030", -1126 => x"7072079f", -1127 => x"2a737131", -1128 => x"5a525977", -1129 => x"7956730c", -1130 => x"53738413", -1131 => x"0c54800c", -1132 => x"893d0d04", -1133 => x"f93d0d79", -1134 => x"7b7d7f56", -1135 => x"54525472", -1136 => x"802ea038", -1137 => x"70577158", -1138 => x"a0733152", -1139 => x"807225a1", -1140 => x"38777074", -1141 => x"2b577073", -1142 => x"2a78752b", -1143 => x"07565174", -1144 => x"76535170", -1145 => x"740c7184", -1146 => x"150c7380", -1147 => x"0c893d0d", -1148 => x"04805677", -1149 => x"72302b55", -1150 => x"74765351", -1151 => x"e639e43d", -1152 => x"0d6ea13d", -1153 => x"08a33d08", -1154 => x"59575f80", -1155 => x"764d774e", -1156 => x"a33d08a5", -1157 => x"3d08574b", -1158 => x"754c5e7d", -1159 => x"6c2486fb", -1160 => x"38806a24", -1161 => x"878f3869", -1162 => x"6b58566b", -1163 => x"6d5d467b", -1164 => x"47754476", -1165 => x"45646468", -1166 => x"685c5c56", -1167 => x"567481e7", -1168 => x"38787627", -1169 => x"82c73875", -1170 => x"81ff2683", -1171 => x"2b5583ff", -1172 => x"ff76278c", -1173 => x"389055fe", -1174 => x"800a7627", -1175 => x"83389855", -1176 => x"75752a80", -1177 => x"d3d00570", -1178 => x"33a07731", -1179 => x"71315755", -1180 => x"5774802e", -1181 => x"95387575", -1182 => x"2ba07631", -1183 => x"7a772b7c", -1184 => x"722a077c", -1185 => x"782b5d5b", -1186 => x"59567590", -1187 => x"2a7683ff", -1188 => x"ff067154", -1189 => x"7a535957", -1190 => x"88803f80", -1191 => x"085b87ea", -1192 => x"3f800880", -1193 => x"0879297c", -1194 => x"902b7c90", -1195 => x"2a075656", -1196 => x"59737527", -1197 => x"94388008", -1198 => x"ff057615", -1199 => x"55597574", -1200 => x"26873874", -1201 => x"742687b9", -1202 => x"38765273", -1203 => x"75315187", -1204 => x"c93f8008", -1205 => x"5587b33f", -1206 => x"80088008", -1207 => x"79297b83", -1208 => x"ffff0677", -1209 => x"902b0756", -1210 => x"59577378", -1211 => x"27963880", -1212 => x"08ff0576", -1213 => x"15555775", -1214 => x"74268938", -1215 => x"77742677", -1216 => x"71315856", -1217 => x"78902b77", -1218 => x"0758805b", -1219 => x"7a407741", -1220 => x"7f615654", -1221 => x"7d80d938", -1222 => x"737f0c74", -1223 => x"7f84050c", -1224 => x"7e800c9e", -1225 => x"3d0d0480", -1226 => x"705c5874", -1227 => x"7926dd38", -1228 => x"7481ff26", -1229 => x"832b5774", -1230 => x"83ffff26", -1231 => x"82a53874", -1232 => x"772a80d3", -1233 => x"d0057033", -1234 => x"a0793171", -1235 => x"31595c5d", -1236 => x"7682b338", -1237 => x"76547479", -1238 => x"27833881", -1239 => x"54797627", -1240 => x"74075981", -1241 => x"5878ffa2", -1242 => x"38765880", -1243 => x"5bff9d39", -1244 => x"73527453", -1245 => x"9e3de805", -1246 => x"51fc8e3f", -1247 => x"6769567f", -1248 => x"0c747f84", -1249 => x"050c7e80", -1250 => x"0c9e3d0d", -1251 => x"0475802e", -1252 => x"81c43875", -1253 => x"81ff2683", -1254 => x"2b5583ff", -1255 => x"ff76278c", -1256 => x"389055fe", -1257 => x"800a7627", -1258 => x"83389855", -1259 => x"75752a80", -1260 => x"d3d00570", -1261 => x"33a07731", -1262 => x"7131575e", -1263 => x"54748491", -1264 => x"38787631", -1265 => x"54817690", -1266 => x"2a7783ff", -1267 => x"ff065f5d", -1268 => x"5b7b5273", -1269 => x"5185c33f", -1270 => x"80085785", -1271 => x"ad3f8008", -1272 => x"80087e29", -1273 => x"78902b7c", -1274 => x"902a0756", -1275 => x"56597375", -1276 => x"27943880", -1277 => x"08ff0576", -1278 => x"15555975", -1279 => x"74268738", -1280 => x"74742684", -1281 => x"f3387b52", -1282 => x"73753151", -1283 => x"858c3f80", -1284 => x"085584f6", -1285 => x"3f800880", -1286 => x"087e297b", -1287 => x"83ffff06", -1288 => x"77902b07", -1289 => x"56595773", -1290 => x"78279638", -1291 => x"8008ff05", -1292 => x"76155557", -1293 => x"75742689", -1294 => x"38777426", -1295 => x"77713158", -1296 => x"5a78902b", -1297 => x"77077b41", -1298 => x"417f6156", -1299 => x"547d802e", -1300 => x"fdc638fe", -1301 => x"9b397552", -1302 => x"815184ae", -1303 => x"3f800856", -1304 => x"feb13990", -1305 => x"57fe800a", -1306 => x"7527fdd3", -1307 => x"38987571", -1308 => x"2a80d3d0", -1309 => x"057033a0", -1310 => x"73317131", -1311 => x"535d5e57", -1312 => x"76802efd", -1313 => x"cf38a077", -1314 => x"3175782b", -1315 => x"77722a07", -1316 => x"77792b7b", -1317 => x"7a2b7d74", -1318 => x"2a077d7b", -1319 => x"2b73902a", -1320 => x"7483ffff", -1321 => x"0671597f", -1322 => x"772a585e", -1323 => x"5c415f58", -1324 => x"5c5483e6", -1325 => x"3f800854", -1326 => x"83d03f80", -1327 => x"08800879", -1328 => x"2975902b", -1329 => x"7e902a07", -1330 => x"56565973", -1331 => x"75279938", -1332 => x"8008ff05", -1333 => x"7b155559", -1334 => x"7a74268c", -1335 => x"38737527", -1336 => x"8738ff19", -1337 => x"7b155559", -1338 => x"76527375", -1339 => x"315183aa", -1340 => x"3f800855", -1341 => x"83943f80", -1342 => x"08800879", -1343 => x"297d83ff", -1344 => x"ff067790", -1345 => x"2b075659", -1346 => x"57737827", -1347 => x"99388008", -1348 => x"ff057b15", -1349 => x"55577a74", -1350 => x"268c3873", -1351 => x"78278738", -1352 => x"ff177b15", -1353 => x"55577378", -1354 => x"3179902b", -1355 => x"78077083", -1356 => x"ffff0671", -1357 => x"902a7983", -1358 => x"ffff067a", -1359 => x"902a7372", -1360 => x"29737329", -1361 => x"74732976", -1362 => x"74297390", -1363 => x"2a057205", -1364 => x"5755435f", -1365 => x"5b585a57", -1366 => x"595a747c", -1367 => x"27863884", -1368 => x"80801757", -1369 => x"74902a17", -1370 => x"7983ffff", -1371 => x"06768480", -1372 => x"80290557", -1373 => x"57767a26", -1374 => x"9a38767a", -1375 => x"32703070", -1376 => x"72078025", -1377 => x"565a5b7c", -1378 => x"7627fafe", -1379 => x"3873802e", -1380 => x"faf838ff", -1381 => x"1858805b", -1382 => x"faf239ff", -1383 => x"76537754", -1384 => x"9f3de805", -1385 => x"525ef7e1", -1386 => x"3f676957", -1387 => x"4c754d69", -1388 => x"8025f8f3", -1389 => x"387d096a", -1390 => x"6c5c537a", -1391 => x"549f3de8", -1392 => x"05525ef7", -1393 => x"c43f6769", -1394 => x"714c704d", -1395 => x"5856f8db", -1396 => x"39a07531", -1397 => x"76762b7a", -1398 => x"772b7c73", -1399 => x"2a077c78", -1400 => x"2b72902a", -1401 => x"7383ffff", -1402 => x"0671587e", -1403 => x"762a5742", -1404 => x"405d5d57", -1405 => x"5881a33f", -1406 => x"80085781", -1407 => x"8d3f8008", -1408 => x"80087e29", -1409 => x"78902b7d", -1410 => x"902a0756", -1411 => x"56597375", -1412 => x"27993880", -1413 => x"08ff0576", -1414 => x"15555975", -1415 => x"74268c38", -1416 => x"73752787", -1417 => x"38ff1976", -1418 => x"1555597b", -1419 => x"52737531", -1420 => x"5180e73f", -1421 => x"80085580", -1422 => x"d13f8008", -1423 => x"80087e29", -1424 => x"7c83ffff", -1425 => x"06707890", -1426 => x"2b075156", -1427 => x"58587377", -1428 => x"27993880", -1429 => x"08ff0576", -1430 => x"15555875", -1431 => x"74268c38", -1432 => x"73772787", -1433 => x"38ff1876", -1434 => x"15555878", -1435 => x"902b7807", -1436 => x"74783155", -1437 => x"5bfada39", -1438 => x"ff197615", -1439 => x"5559fb86", -1440 => x"39ff1976", -1441 => x"155559f8", -1442 => x"c0397070", -1443 => x"70805375", -1444 => x"52745181", -1445 => x"913f5050", -1446 => x"50047070", -1447 => x"70815375", -1448 => x"52745181", -1449 => x"813f5050", -1450 => x"5004fb3d", -1451 => x"0d777955", -1452 => x"55805675", -1453 => x"7524ab38", -1454 => x"8074249d", -1455 => x"38805373", -1456 => x"52745180", -1457 => x"e13f8008", -1458 => x"5475802e", -1459 => x"85388008", -1460 => x"30547380", -1461 => x"0c873d0d", -1462 => x"04733076", -1463 => x"81325754", -1464 => x"dc397430", -1465 => x"55815673", -1466 => x"8025d238", -1467 => x"ec39fa3d", -1468 => x"0d787a57", -1469 => x"55805776", -1470 => x"7524a438", -1471 => x"759f2c54", -1472 => x"81537574", -1473 => x"32743152", -1474 => x"74519b3f", -1475 => x"80085476", -1476 => x"802e8538", -1477 => x"80083054", -1478 => x"73800c88", -1479 => x"3d0d0474", -1480 => x"30558157", -1481 => x"d739fc3d", -1482 => x"0d767853", -1483 => x"54815380", -1484 => x"74732652", -1485 => x"5572802e", -1486 => x"98387080", -1487 => x"2eab3880", -1488 => x"7224a638", -1489 => x"71107310", -1490 => x"75722653", -1491 => x"545272ea", -1492 => x"38735178", -1493 => x"83387451", -1494 => x"70800c86", -1495 => x"3d0d0472", -1496 => x"0a100a72", -1497 => x"0a100a53", -1498 => x"5372802e", -1499 => x"e4387174", -1500 => x"26ed3873", -1501 => x"72317574", -1502 => x"07740a10", -1503 => x"0a740a10", -1504 => x"0a555556", -1505 => x"54e33970", -1506 => x"70735280", -1507 => x"decc0851", -1508 => x"933f5050", -1509 => x"04707073", -1510 => x"5280decc", -1511 => x"085190ce", -1512 => x"3f505004", -1513 => x"f43d0d7e", -1514 => x"608b1170", -1515 => x"f8065b55", -1516 => x"555d7296", -1517 => x"26833890", -1518 => x"58807824", -1519 => x"74792607", -1520 => x"55805474", -1521 => x"742e0981", -1522 => x"0680ca38", -1523 => x"7c518d9e", -1524 => x"3f7783f7", -1525 => x"2680c538", -1526 => x"77832a70", -1527 => x"10101080", -1528 => x"d6c4058c", -1529 => x"11085858", -1530 => x"5475772e", -1531 => x"81f03884", -1532 => x"1608fc06", -1533 => x"8c170888", -1534 => x"1808718c", -1535 => x"120c8812", -1536 => x"0c5b7605", -1537 => x"84110881", -1538 => x"0784120c", -1539 => x"537c518c", -1540 => x"de3f8816", -1541 => x"5473800c", -1542 => x"8e3d0d04", -1543 => x"77892a78", -1544 => x"832a5854", -1545 => x"73802ebf", -1546 => x"3877862a", -1547 => x"b8055784", -1548 => x"7427b438", -1549 => x"80db1457", -1550 => x"947427ab", -1551 => x"38778c2a", -1552 => x"80ee0557", -1553 => x"80d47427", -1554 => x"9e38778f", -1555 => x"2a80f705", -1556 => x"5782d474", -1557 => x"27913877", -1558 => x"922a80fc", -1559 => x"05578ad4", -1560 => x"74278438", -1561 => x"80fe5776", -1562 => x"10101080", -1563 => x"d6c4058c", -1564 => x"11085653", -1565 => x"74732ea3", -1566 => x"38841508", -1567 => x"fc067079", -1568 => x"31555673", -1569 => x"8f2488e4", -1570 => x"38738025", -1571 => x"88e6388c", -1572 => x"15085574", -1573 => x"732e0981", -1574 => x"06df3881", -1575 => x"175980d6", -1576 => x"d4085675", -1577 => x"80d6cc2e", -1578 => x"82cc3884", -1579 => x"1608fc06", -1580 => x"70793155", -1581 => x"55738f24", -1582 => x"bb3880d6", -1583 => x"cc0b80d6", -1584 => x"d80c80d6", -1585 => x"cc0b80d6", -1586 => x"d40c8074", -1587 => x"2480db38", -1588 => x"74168411", -1589 => x"08810784", -1590 => x"120c53fe", -1591 => x"b0398816", -1592 => x"8c110857", -1593 => x"5975792e", -1594 => x"098106fe", -1595 => x"82388214", -1596 => x"59ffab39", -1597 => x"77167881", -1598 => x"0784180c", -1599 => x"7080d6d8", -1600 => x"0c7080d6", -1601 => x"d40c80d6", -1602 => x"cc0b8c12", -1603 => x"0c8c1108", -1604 => x"88120c74", -1605 => x"81078412", -1606 => x"0c740574", -1607 => x"710c5b7c", -1608 => x"518acc3f", -1609 => x"881654fd", -1610 => x"ec3983ff", -1611 => x"75278391", -1612 => x"3874892a", -1613 => x"75832a54", -1614 => x"5473802e", -1615 => x"bf387486", -1616 => x"2ab80553", -1617 => x"847427b4", -1618 => x"3880db14", -1619 => x"53947427", -1620 => x"ab38748c", -1621 => x"2a80ee05", -1622 => x"5380d474", -1623 => x"279e3874", -1624 => x"8f2a80f7", -1625 => x"055382d4", -1626 => x"74279138", -1627 => x"74922a80", -1628 => x"fc05538a", -1629 => x"d4742784", -1630 => x"3880fe53", -1631 => x"72101010", -1632 => x"80d6c405", -1633 => x"88110855", -1634 => x"5773772e", -1635 => x"868b3884", -1636 => x"1408fc06", -1637 => x"5b747b27", -1638 => x"8d388814", -1639 => x"08547377", -1640 => x"2e098106", -1641 => x"ea388c14", -1642 => x"0880d6c4", -1643 => x"0b840508", -1644 => x"718c190c", -1645 => x"7588190c", -1646 => x"7788130c", -1647 => x"5c57758c", -1648 => x"150c7853", -1649 => x"80792483", -1650 => x"98387282", -1651 => x"2c81712b", -1652 => x"5656747b", -1653 => x"2680ca38", -1654 => x"7a750657", -1655 => x"7682a338", -1656 => x"78fc0684", -1657 => x"05597410", -1658 => x"707c0655", -1659 => x"55738292", -1660 => x"38841959", -1661 => x"f13980d6", -1662 => x"c40b8405", -1663 => x"0879545b", -1664 => x"788025c6", -1665 => x"3882da39", -1666 => x"74097b06", -1667 => x"7080d6c4", -1668 => x"0b84050c", -1669 => x"5b741055", -1670 => x"747b2685", -1671 => x"387485bc", -1672 => x"3880d6c4", -1673 => x"0b880508", -1674 => x"70841208", -1675 => x"fc06707b", -1676 => x"317b7226", -1677 => x"8f722507", -1678 => x"5d575c5c", -1679 => x"5578802e", -1680 => x"80d93879", -1681 => x"1580d6bc", -1682 => x"08199011", -1683 => x"59545680", -1684 => x"d6b808ff", -1685 => x"2e8838a0", -1686 => x"8f13e080", -1687 => x"06577652", -1688 => x"7c51888c", -1689 => x"3f800854", -1690 => x"8008ff2e", -1691 => x"90388008", -1692 => x"762782a7", -1693 => x"387480d6", -1694 => x"c42e829f", -1695 => x"3880d6c4", -1696 => x"0b880508", -1697 => x"55841508", -1698 => x"fc067079", -1699 => x"31797226", -1700 => x"8f722507", -1701 => x"5d555a7a", -1702 => x"83f23877", -1703 => x"81078416", -1704 => x"0c771570", -1705 => x"80d6c40b", -1706 => x"88050c74", -1707 => x"81078412", -1708 => x"0c567c51", -1709 => x"87b93f88", -1710 => x"15547380", -1711 => x"0c8e3d0d", -1712 => x"0474832a", -1713 => x"70545480", -1714 => x"7424819b", -1715 => x"3872822c", -1716 => x"81712b80", -1717 => x"d6c80807", -1718 => x"7080d6c4", -1719 => x"0b84050c", -1720 => x"75101010", -1721 => x"80d6c405", -1722 => x"88110871", -1723 => x"8c1b0c70", -1724 => x"881b0c79", -1725 => x"88130c57", -1726 => x"555c5575", -1727 => x"8c150cfd", -1728 => x"c1397879", -1729 => x"10101080", -1730 => x"d6c40570", -1731 => x"565b5c8c", -1732 => x"14085675", -1733 => x"742ea338", -1734 => x"841608fc", -1735 => x"06707931", -1736 => x"5853768f", -1737 => x"2483f138", -1738 => x"76802584", -1739 => x"af388c16", -1740 => x"08567574", -1741 => x"2e098106", -1742 => x"df388814", -1743 => x"811a7083", -1744 => x"06555a54", -1745 => x"72c9387b", -1746 => x"83065675", -1747 => x"802efdb8", -1748 => x"38ff1cf8", -1749 => x"1b5b5c88", -1750 => x"1a087a2e", -1751 => x"ea38fdb5", -1752 => x"39831953", -1753 => x"fce43983", -1754 => x"1470822c", -1755 => x"81712b80", -1756 => x"d6c80807", -1757 => x"7080d6c4", -1758 => x"0b84050c", -1759 => x"76101010", -1760 => x"80d6c405", -1761 => x"88110871", -1762 => x"8c1c0c70", -1763 => x"881c0c7a", -1764 => x"88130c58", -1765 => x"535d5653", -1766 => x"fee13980", -1767 => x"d6880817", -1768 => x"59800876", -1769 => x"2e818b38", -1770 => x"80d6b808", -1771 => x"ff2e848e", -1772 => x"38737631", -1773 => x"1980d688", -1774 => x"0c738706", -1775 => x"70565372", -1776 => x"802e8838", -1777 => x"88733170", -1778 => x"15555576", -1779 => x"149fff06", -1780 => x"a0807131", -1781 => x"1670547e", -1782 => x"53515385", -1783 => x"933f8008", -1784 => x"568008ff", -1785 => x"2e819e38", -1786 => x"80d68808", -1787 => x"137080d6", -1788 => x"880c7475", -1789 => x"80d6c40b", -1790 => x"88050c77", -1791 => x"76311581", -1792 => x"07555659", -1793 => x"7a80d6c4", -1794 => x"2e83c038", -1795 => x"798f2682", -1796 => x"ef38810b", -1797 => x"84150c84", -1798 => x"1508fc06", -1799 => x"70793179", -1800 => x"72268f72", -1801 => x"25075d55", -1802 => x"5a7a802e", -1803 => x"fced3880", -1804 => x"db398008", -1805 => x"9fff0655", -1806 => x"74feed38", -1807 => x"7880d688", -1808 => x"0c80d6c4", -1809 => x"0b880508", -1810 => x"7a188107", -1811 => x"84120c55", -1812 => x"80d6b408", -1813 => x"79278638", -1814 => x"7880d6b4", -1815 => x"0c80d6b0", -1816 => x"087927fc", -1817 => x"a0387880", -1818 => x"d6b00c84", -1819 => x"1508fc06", -1820 => x"70793179", -1821 => x"72268f72", -1822 => x"25075d55", -1823 => x"5a7a802e", -1824 => x"fc993888", -1825 => x"39807457", -1826 => x"53fedd39", -1827 => x"7c5183df", -1828 => x"3f800b80", -1829 => x"0c8e3d0d", -1830 => x"04807324", -1831 => x"a5387282", -1832 => x"2c81712b", -1833 => x"80d6c808", -1834 => x"077080d6", -1835 => x"c40b8405", -1836 => x"0c5c5a76", -1837 => x"8c170c73", -1838 => x"88170c75", -1839 => x"88180cf9", -1840 => x"fd398313", -1841 => x"70822c81", -1842 => x"712b80d6", -1843 => x"c8080770", -1844 => x"80d6c40b", -1845 => x"84050c5d", -1846 => x"5b53d839", -1847 => x"7a75065c", -1848 => x"7bfc9f38", -1849 => x"84197510", -1850 => x"5659f139", -1851 => x"ff178105", -1852 => x"59f7ab39", -1853 => x"8c150888", -1854 => x"1608718c", -1855 => x"120c8812", -1856 => x"0c597515", -1857 => x"84110881", -1858 => x"0784120c", -1859 => x"587c5182", -1860 => x"de3f8815", -1861 => x"54fba339", -1862 => x"77167881", -1863 => x"0784180c", -1864 => x"8c170888", -1865 => x"1808718c", -1866 => x"120c8812", -1867 => x"0c5c7080", -1868 => x"d6d80c70", -1869 => x"80d6d40c", -1870 => x"80d6cc0b", -1871 => x"8c120c8c", -1872 => x"11088812", -1873 => x"0c778107", -1874 => x"84120c77", -1875 => x"0577710c", -1876 => x"557c5182", -1877 => x"9a3f8816", -1878 => x"54f5ba39", -1879 => x"72168411", -1880 => x"08810784", -1881 => x"120c588c", -1882 => x"16088817", -1883 => x"08718c12", -1884 => x"0c88120c", -1885 => x"577c5181", -1886 => x"f63f8816", -1887 => x"54f59639", -1888 => x"7284150c", -1889 => x"f41af806", -1890 => x"70841d08", -1891 => x"81060784", -1892 => x"1d0c701c", -1893 => x"5556850b", -1894 => x"84150c85", -1895 => x"0b88150c", -1896 => x"8f7627fd", -1897 => x"ab38881b", -1898 => x"527c5184", -1899 => x"c13f80d6", -1900 => x"c40b8805", -1901 => x"0880d688", -1902 => x"085a55fd", -1903 => x"93397880", -1904 => x"d6880c73", -1905 => x"80d6b80c", -1906 => x"fbef3972", -1907 => x"84150cfc", -1908 => x"ff39fb3d", -1909 => x"0d77707a", -1910 => x"7c585553", -1911 => x"568f7527", -1912 => x"80e63872", -1913 => x"76078306", -1914 => x"517080dc", -1915 => x"38757352", -1916 => x"54707084", -1917 => x"05520874", -1918 => x"70840556", -1919 => x"0c737170", -1920 => x"84055308", -1921 => x"71708405", -1922 => x"530c7170", -1923 => x"84055308", -1924 => x"71708405", -1925 => x"530c7170", -1926 => x"84055308", -1927 => x"71708405", -1928 => x"530cf016", -1929 => x"5654748f", -1930 => x"26c73883", -1931 => x"75279538", -1932 => x"70708405", -1933 => x"52087470", -1934 => x"8405560c", -1935 => x"fc155574", -1936 => x"8326ed38", -1937 => x"73715452", -1938 => x"ff155170", -1939 => x"ff2e9838", -1940 => x"72708105", -1941 => x"54337270", -1942 => x"81055434", -1943 => x"ff115170", -1944 => x"ff2e0981", -1945 => x"06ea3875", -1946 => x"800c873d", -1947 => x"0d040404", -1948 => x"70707070", -1949 => x"800b81b6", -1950 => x"9c0c7651", -1951 => x"87cc3f80", -1952 => x"08538008", -1953 => x"ff2e8938", -1954 => x"72800c50", -1955 => x"50505004", -1956 => x"81b69c08", -1957 => x"5473802e", -1958 => x"ef387574", -1959 => x"710c5272", -1960 => x"800c5050", -1961 => x"505004fb", -1962 => x"3d0d7779", -1963 => x"70720783", -1964 => x"06535452", -1965 => x"70933871", -1966 => x"73730854", -1967 => x"56547173", -1968 => x"082e80c4", -1969 => x"38737554", -1970 => x"52713370", -1971 => x"81ff0652", -1972 => x"5470802e", -1973 => x"9d387233", -1974 => x"5570752e", -1975 => x"09810695", -1976 => x"38811281", -1977 => x"14713370", -1978 => x"81ff0654", -1979 => x"56545270", -1980 => x"e5387233", -1981 => x"557381ff", -1982 => x"067581ff", -1983 => x"06717131", -1984 => x"800c5552", -1985 => x"873d0d04", -1986 => x"7109f7fb", -1987 => x"fdff1306", -1988 => x"f8848281", -1989 => x"80065271", -1990 => x"97388414", -1991 => x"84167108", -1992 => x"54565471", -1993 => x"75082ee0", -1994 => x"38737554", -1995 => x"52ff9a39", -1996 => x"800b800c", -1997 => x"873d0d04", -1998 => x"fb3d0d77", -1999 => x"705256fe", -2000 => x"ad3f80d6", -2001 => x"c40b8805", -2002 => x"08841108", -2003 => x"fc06707b", -2004 => x"319fef05", -2005 => x"e08006e0", -2006 => x"80055255", -2007 => x"55a08075", -2008 => x"24943880", -2009 => x"527551fe", -2010 => x"873f80d6", -2011 => x"cc081453", -2012 => x"7280082e", -2013 => x"8f387551", -2014 => x"fdf53f80", -2015 => x"5372800c", -2016 => x"873d0d04", -2017 => x"74305275", -2018 => x"51fde53f", -2019 => x"8008ff2e", -2020 => x"a83880d6", -2021 => x"c40b8805", -2022 => x"08747631", -2023 => x"81078412", -2024 => x"0c5380d6", -2025 => x"88087531", -2026 => x"80d6880c", -2027 => x"7551fdbf", -2028 => x"3f810b80", -2029 => x"0c873d0d", -2030 => x"04805275", -2031 => x"51fdb13f", -2032 => x"80d6c40b", -2033 => x"88050880", -2034 => x"08713154", -2035 => x"548f7325", -2036 => x"ffa43880", -2037 => x"0880d6b8", -2038 => x"083180d6", -2039 => x"880c7281", -2040 => x"0784150c", -2041 => x"7551fd87", -2042 => x"3f8053ff", -2043 => x"9039f73d", -2044 => x"0d7b7d54", -2045 => x"5a72802e", -2046 => x"82833879", -2047 => x"51fcef3f", -2048 => x"f8138411", -2049 => x"0870fe06", -2050 => x"70138411", -2051 => x"08fc065c", -2052 => x"57585457", -2053 => x"80d6cc08", -2054 => x"742e82de", -2055 => x"38778415", -2056 => x"0c807381", -2057 => x"06565974", -2058 => x"792e81d5", -2059 => x"38771484", -2060 => x"11088106", -2061 => x"565374a0", -2062 => x"38771656", -2063 => x"7881e638", -2064 => x"88140855", -2065 => x"7480d6cc", -2066 => x"2e82f938", -2067 => x"8c140870", -2068 => x"8c170c75", -2069 => x"88120c58", -2070 => x"75810784", -2071 => x"180c7517", -2072 => x"76710c54", -2073 => x"78819138", -2074 => x"83ff7627", -2075 => x"81c83875", -2076 => x"892a7683", -2077 => x"2a545473", -2078 => x"802ebf38", -2079 => x"75862ab8", -2080 => x"05538474", -2081 => x"27b43880", -2082 => x"db145394", -2083 => x"7427ab38", -2084 => x"758c2a80", -2085 => x"ee055380", -2086 => x"d474279e", -2087 => x"38758f2a", -2088 => x"80f70553", -2089 => x"82d47427", -2090 => x"91387592", -2091 => x"2a80fc05", -2092 => x"538ad474", -2093 => x"27843880", -2094 => x"fe537210", -2095 => x"101080d6", -2096 => x"c4058811", -2097 => x"08555573", -2098 => x"752e82bf", -2099 => x"38841408", -2100 => x"fc065975", -2101 => x"79278d38", -2102 => x"88140854", -2103 => x"73752e09", -2104 => x"8106ea38", -2105 => x"8c140870", -2106 => x"8c190c74", -2107 => x"88190c77", -2108 => x"88120c55", -2109 => x"768c150c", -2110 => x"7951faf3", -2111 => x"3f8b3d0d", -2112 => x"04760877", -2113 => x"71315876", -2114 => x"05881808", -2115 => x"56567480", -2116 => x"d6cc2e80", -2117 => x"e0388c17", -2118 => x"08708c17", -2119 => x"0c758812", -2120 => x"0c53fe89", -2121 => x"39881408", -2122 => x"8c150870", -2123 => x"8c130c59", -2124 => x"88190cfe", -2125 => x"a3397583", -2126 => x"2a705454", -2127 => x"80742481", -2128 => x"98387282", -2129 => x"2c81712b", -2130 => x"80d6c808", -2131 => x"0780d6c4", -2132 => x"0b84050c", -2133 => x"74101010", -2134 => x"80d6c405", -2135 => x"88110871", -2136 => x"8c1b0c70", -2137 => x"881b0c79", -2138 => x"88130c56", -2139 => x"5a55768c", -2140 => x"150cff84", -2141 => x"398159fd", -2142 => x"b4397716", -2143 => x"73810654", -2144 => x"55729838", -2145 => x"76087771", -2146 => x"31587505", -2147 => x"8c180888", -2148 => x"1908718c", -2149 => x"120c8812", -2150 => x"0c555574", -2151 => x"81078418", -2152 => x"0c7680d6", -2153 => x"c40b8805", -2154 => x"0c80d6c0", -2155 => x"087526fe", -2156 => x"c73880d6", -2157 => x"bc085279", -2158 => x"51fafd3f", -2159 => x"7951f9af", -2160 => x"3ffeba39", -2161 => x"81778c17", -2162 => x"0c778817", -2163 => x"0c758c19", -2164 => x"0c758819", -2165 => x"0c59fd80", -2166 => x"39831470", -2167 => x"822c8171", -2168 => x"2b80d6c8", -2169 => x"080780d6", -2170 => x"c40b8405", -2171 => x"0c751010", -2172 => x"1080d6c4", -2173 => x"05881108", -2174 => x"718c1c0c", -2175 => x"70881c0c", -2176 => x"7a88130c", -2177 => x"575b5653", -2178 => x"fee43980", -2179 => x"7324a338", -2180 => x"72822c81", -2181 => x"712b80d6", -2182 => x"c8080780", -2183 => x"d6c40b84", -2184 => x"050c5874", -2185 => x"8c180c73", -2186 => x"88180c76", -2187 => x"88160cfd", -2188 => x"c3398313", -2189 => x"70822c81", -2190 => x"712b80d6", -2191 => x"c8080780", -2192 => x"d6c40b84", -2193 => x"050c5953", -2194 => x"da397070", -2195 => x"7080e5f4", -2196 => x"08893881", -2197 => x"b6a00b80", -2198 => x"e5f40c80", -2199 => x"e5f40875", -2200 => x"115252ff", -2201 => x"537087fb", -2202 => x"80802688", -2203 => x"387080e5", -2204 => x"f40c7153", -2205 => x"72800c50", -2206 => x"505004fd", -2207 => x"3d0d800b", -2208 => x"80d5f408", -2209 => x"54547281", -2210 => x"2e9b3873", -2211 => x"80e5f80c", -2212 => x"c3ee3fc2", -2213 => x"eb3f80e5", -2214 => x"cc528151", -2215 => x"cc933f80", -2216 => x"085180dd", -2217 => x"3f7280e5", -2218 => x"f80cc3d4", -2219 => x"3fc2d13f", -2220 => x"80e5cc52", -2221 => x"8151cbf9", -2222 => x"3f800851", -2223 => x"80c33f00", -2224 => x"ff3900ff", -2225 => x"39f43d0d", -2226 => x"7e80e5ec", -2227 => x"08700870", -2228 => x"81ff0692", -2229 => x"3df80555", -2230 => x"515a5759", -2231 => x"c48f3f80", -2232 => x"5477557b", -2233 => x"7d585276", -2234 => x"538e3df0", -2235 => x"0551de8e", -2236 => x"3f797b58", -2237 => x"790c7684", -2238 => x"1a0c7880", -2239 => x"0c8e3d0d", -2240 => x"04f73d0d", -2241 => x"7b80decc", -2242 => x"0882c811", -2243 => x"085a545a", -2244 => x"77802e80", -2245 => x"da388188", -2246 => x"18841908", -2247 => x"ff058171", -2248 => x"2b595559", -2249 => x"80742480", -2250 => x"ea388074", -2251 => x"24b53873", -2252 => x"822b7811", -2253 => x"88055656", -2254 => x"81801908", -2255 => x"77065372", -2256 => x"802eb638", -2257 => x"78167008", -2258 => x"53537951", -2259 => x"74085372", -2260 => x"2dff14fc", -2261 => x"17fc1779", -2262 => x"812c5a57", -2263 => x"57547380", -2264 => x"25d63877", -2265 => x"085877ff", -2266 => x"ad3880de", -2267 => x"cc0853bc", -2268 => x"1308a538", -2269 => x"7951fec7", -2270 => x"3f740853", -2271 => x"722dff14", -2272 => x"fc17fc17", -2273 => x"79812c5a", -2274 => x"57575473", -2275 => x"8025ffa8", -2276 => x"38d13980", -2277 => x"57ff9339", -2278 => x"7251bc13", -2279 => x"0854732d", -2280 => x"7951fe9b", -2281 => x"3f707080", -2282 => x"e5d40bfc", -2283 => x"05700852", -2284 => x"5270ff2e", -2285 => x"9138702d", -2286 => x"fc127008", -2287 => x"525270ff", -2288 => x"2e098106", -2289 => x"f1385050", -2290 => x"0404c2ff", -2291 => x"3f040000", -2292 => x"00000040", -2293 => x"30313233", -2294 => x"34353637", -2295 => x"38390000", -2296 => x"44485259", -2297 => x"53544f4e", -2298 => x"45205052", -2299 => x"4f475241", -2300 => x"4d2c2053", -2301 => x"4f4d4520", -2302 => x"53545249", -2303 => x"4e470000", -2304 => x"44485259", -2305 => x"53544f4e", -2306 => x"45205052", -2307 => x"4f475241", -2308 => x"4d2c2031", -2309 => x"27535420", -2310 => x"53545249", -2311 => x"4e470000", -2312 => x"44687279", -2313 => x"73746f6e", -2314 => x"65204265", -2315 => x"6e63686d", -2316 => x"61726b2c", -2317 => x"20566572", -2318 => x"73696f6e", -2319 => x"20322e31", -2320 => x"20284c61", -2321 => x"6e677561", -2322 => x"67653a20", -2323 => x"43290a00", -2324 => x"50726f67", -2325 => x"72616d20", -2326 => x"636f6d70", -2327 => x"696c6564", -2328 => x"20776974", -2329 => x"68202772", -2330 => x"65676973", -2331 => x"74657227", -2332 => x"20617474", -2333 => x"72696275", -2334 => x"74650a00", -2335 => x"45786563", -2336 => x"7574696f", -2337 => x"6e207374", -2338 => x"61727473", -2339 => x"2c202564", -2340 => x"2072756e", -2341 => x"73207468", -2342 => x"726f7567", -2343 => x"68204468", -2344 => x"72797374", -2345 => x"6f6e650a", -2346 => x"00000000", -2347 => x"44485259", -2348 => x"53544f4e", -2349 => x"45205052", -2350 => x"4f475241", -2351 => x"4d2c2032", -2352 => x"274e4420", -2353 => x"53545249", -2354 => x"4e470000", -2355 => x"45786563", -2356 => x"7574696f", -2357 => x"6e20656e", -2358 => x"64730a00", -2359 => x"46696e61", -2360 => x"6c207661", -2361 => x"6c756573", -2362 => x"206f6620", -2363 => x"74686520", -2364 => x"76617269", -2365 => x"61626c65", -2366 => x"73207573", -2367 => x"65642069", -2368 => x"6e207468", -2369 => x"65206265", -2370 => x"6e63686d", -2371 => x"61726b3a", -2372 => x"0a000000", -2373 => x"496e745f", -2374 => x"476c6f62", -2375 => x"3a202020", -2376 => x"20202020", -2377 => x"20202020", -2378 => x"2025640a", -2379 => x"00000000", -2380 => x"20202020", -2381 => x"20202020", -2382 => x"73686f75", -2383 => x"6c642062", -2384 => x"653a2020", -2385 => x"2025640a", -2386 => x"00000000", -2387 => x"426f6f6c", -2388 => x"5f476c6f", -2389 => x"623a2020", -2390 => x"20202020", -2391 => x"20202020", -2392 => x"2025640a", -2393 => x"00000000", -2394 => x"43685f31", -2395 => x"5f476c6f", -2396 => x"623a2020", -2397 => x"20202020", -2398 => x"20202020", -2399 => x"2025630a", -2400 => x"00000000", -2401 => x"20202020", -2402 => x"20202020", -2403 => x"73686f75", -2404 => x"6c642062", -2405 => x"653a2020", -2406 => x"2025630a", -2407 => x"00000000", -2408 => x"43685f32", -2409 => x"5f476c6f", -2410 => x"623a2020", -2411 => x"20202020", -2412 => x"20202020", -2413 => x"2025630a", -2414 => x"00000000", -2415 => x"4172725f", -2416 => x"315f476c", -2417 => x"6f625b38", -2418 => x"5d3a2020", -2419 => x"20202020", -2420 => x"2025640a", -2421 => x"00000000", -2422 => x"4172725f", -2423 => x"325f476c", -2424 => x"6f625b38", -2425 => x"5d5b375d", -2426 => x"3a202020", -2427 => x"2025640a", -2428 => x"00000000", -2429 => x"20202020", -2430 => x"20202020", -2431 => x"73686f75", -2432 => x"6c642062", -2433 => x"653a2020", -2434 => x"204e756d", -2435 => x"6265725f", -2436 => x"4f665f52", -2437 => x"756e7320", -2438 => x"2b203130", -2439 => x"0a000000", -2440 => x"5074725f", -2441 => x"476c6f62", -2442 => x"2d3e0a00", -2443 => x"20205074", -2444 => x"725f436f", -2445 => x"6d703a20", -2446 => x"20202020", -2447 => x"20202020", -2448 => x"2025640a", -2449 => x"00000000", -2450 => x"20202020", -2451 => x"20202020", -2452 => x"73686f75", -2453 => x"6c642062", -2454 => x"653a2020", -2455 => x"2028696d", -2456 => x"706c656d", -2457 => x"656e7461", -2458 => x"74696f6e", -2459 => x"2d646570", -2460 => x"656e6465", -2461 => x"6e74290a", -2462 => x"00000000", -2463 => x"20204469", -2464 => x"7363723a", -2465 => x"20202020", -2466 => x"20202020", -2467 => x"20202020", -2468 => x"2025640a", -2469 => x"00000000", -2470 => x"2020456e", -2471 => x"756d5f43", -2472 => x"6f6d703a", -2473 => x"20202020", -2474 => x"20202020", -2475 => x"2025640a", -2476 => x"00000000", -2477 => x"2020496e", -2478 => x"745f436f", -2479 => x"6d703a20", -2480 => x"20202020", -2481 => x"20202020", -2482 => x"2025640a", -2483 => x"00000000", -2484 => x"20205374", -2485 => x"725f436f", -2486 => x"6d703a20", -2487 => x"20202020", -2488 => x"20202020", -2489 => x"2025730a", -2490 => x"00000000", -2491 => x"20202020", -2492 => x"20202020", -2493 => x"73686f75", -2494 => x"6c642062", -2495 => x"653a2020", -2496 => x"20444852", -2497 => x"5953544f", -2498 => x"4e452050", -2499 => x"524f4752", -2500 => x"414d2c20", -2501 => x"534f4d45", -2502 => x"20535452", -2503 => x"494e470a", -2504 => x"00000000", -2505 => x"4e657874", -2506 => x"5f507472", -2507 => x"5f476c6f", -2508 => x"622d3e0a", -2509 => x"00000000", -2510 => x"20202020", -2511 => x"20202020", -2512 => x"73686f75", -2513 => x"6c642062", -2514 => x"653a2020", -2515 => x"2028696d", -2516 => x"706c656d", -2517 => x"656e7461", -2518 => x"74696f6e", -2519 => x"2d646570", -2520 => x"656e6465", -2521 => x"6e74292c", -2522 => x"2073616d", -2523 => x"65206173", -2524 => x"2061626f", -2525 => x"76650a00", -2526 => x"496e745f", -2527 => x"315f4c6f", -2528 => x"633a2020", -2529 => x"20202020", -2530 => x"20202020", -2531 => x"2025640a", -2532 => x"00000000", -2533 => x"496e745f", -2534 => x"325f4c6f", -2535 => x"633a2020", -2536 => x"20202020", -2537 => x"20202020", -2538 => x"2025640a", -2539 => x"00000000", -2540 => x"496e745f", -2541 => x"335f4c6f", -2542 => x"633a2020", -2543 => x"20202020", -2544 => x"20202020", -2545 => x"2025640a", -2546 => x"00000000", -2547 => x"456e756d", -2548 => x"5f4c6f63", -2549 => x"3a202020", -2550 => x"20202020", -2551 => x"20202020", -2552 => x"2025640a", -2553 => x"00000000", -2554 => x"5374725f", -2555 => x"315f4c6f", -2556 => x"633a2020", -2557 => x"20202020", -2558 => x"20202020", -2559 => x"2025730a", -2560 => x"00000000", -2561 => x"20202020", -2562 => x"20202020", -2563 => x"73686f75", -2564 => x"6c642062", -2565 => x"653a2020", -2566 => x"20444852", -2567 => x"5953544f", -2568 => x"4e452050", -2569 => x"524f4752", -2570 => x"414d2c20", -2571 => x"31275354", -2572 => x"20535452", -2573 => x"494e470a", -2574 => x"00000000", -2575 => x"5374725f", -2576 => x"325f4c6f", -2577 => x"633a2020", -2578 => x"20202020", -2579 => x"20202020", -2580 => x"2025730a", -2581 => x"00000000", -2582 => x"20202020", -2583 => x"20202020", -2584 => x"73686f75", -2585 => x"6c642062", -2586 => x"653a2020", -2587 => x"20444852", -2588 => x"5953544f", -2589 => x"4e452050", -2590 => x"524f4752", -2591 => x"414d2c20", -2592 => x"32274e44", -2593 => x"20535452", -2594 => x"494e470a", -2595 => x"00000000", -2596 => x"55736572", -2597 => x"2074696d", -2598 => x"653a2025", -2599 => x"640a0000", -2600 => x"4d696372", -2601 => x"6f736563", -2602 => x"6f6e6473", -2603 => x"20666f72", -2604 => x"206f6e65", -2605 => x"2072756e", -2606 => x"20746872", -2607 => x"6f756768", -2608 => x"20446872", -2609 => x"7973746f", -2610 => x"6e653a20", -2611 => x"00000000", -2612 => x"2564200a", -2613 => x"00000000", -2614 => x"44687279", -2615 => x"73746f6e", -2616 => x"65732070", -2617 => x"65722053", -2618 => x"65636f6e", -2619 => x"643a2020", -2620 => x"20202020", -2621 => x"20202020", -2622 => x"20202020", -2623 => x"20202020", -2624 => x"20202020", -2625 => x"00000000", -2626 => x"56415820", -2627 => x"4d495053", -2628 => x"20726174", -2629 => x"696e6720", -2630 => x"2a203130", -2631 => x"3030203d", -2632 => x"20256420", -2633 => x"0a000000", -2634 => x"50726f67", -2635 => x"72616d20", -2636 => x"636f6d70", -2637 => x"696c6564", -2638 => x"20776974", -2639 => x"686f7574", -2640 => x"20277265", -2641 => x"67697374", -2642 => x"65722720", -2643 => x"61747472", -2644 => x"69627574", -2645 => x"650a0000", -2646 => x"4d656173", -2647 => x"75726564", -2648 => x"2074696d", -2649 => x"6520746f", -2650 => x"6f20736d", -2651 => x"616c6c20", -2652 => x"746f206f", -2653 => x"62746169", -2654 => x"6e206d65", -2655 => x"616e696e", -2656 => x"6766756c", -2657 => x"20726573", -2658 => x"756c7473", -2659 => x"0a000000", -2660 => x"506c6561", -2661 => x"73652069", -2662 => x"6e637265", -2663 => x"61736520", -2664 => x"6e756d62", -2665 => x"6572206f", -2666 => x"66207275", -2667 => x"6e730a00", -2668 => x"44485259", -2669 => x"53544f4e", -2670 => x"45205052", -2671 => x"4f475241", -2672 => x"4d2c2033", -2673 => x"27524420", -2674 => x"53545249", -2675 => x"4e470000", -2676 => x"00010202", -2677 => x"03030303", -2678 => x"04040404", -2679 => x"04040404", -2680 => x"05050505", -2681 => x"05050505", -2682 => x"05050505", -2683 => x"05050505", -2684 => x"06060606", -2685 => x"06060606", -2686 => x"06060606", -2687 => x"06060606", -2688 => x"06060606", -2689 => x"06060606", -2690 => x"06060606", -2691 => x"06060606", -2692 => x"07070707", -2693 => x"07070707", -2694 => x"07070707", -2695 => x"07070707", -2696 => x"07070707", -2697 => x"07070707", -2698 => x"07070707", -2699 => x"07070707", -2700 => x"07070707", -2701 => x"07070707", -2702 => x"07070707", -2703 => x"07070707", -2704 => x"07070707", -2705 => x"07070707", -2706 => x"07070707", -2707 => x"07070707", -2708 => x"08080808", -2709 => x"08080808", -2710 => x"08080808", -2711 => x"08080808", -2712 => x"08080808", -2713 => x"08080808", -2714 => x"08080808", -2715 => x"08080808", -2716 => x"08080808", -2717 => x"08080808", -2718 => x"08080808", -2719 => x"08080808", -2720 => x"08080808", -2721 => x"08080808", -2722 => x"08080808", -2723 => x"08080808", -2724 => x"08080808", -2725 => x"08080808", -2726 => x"08080808", -2727 => x"08080808", -2728 => x"08080808", -2729 => x"08080808", -2730 => x"08080808", -2731 => x"08080808", -2732 => x"08080808", -2733 => x"08080808", -2734 => x"08080808", -2735 => x"08080808", -2736 => x"08080808", -2737 => x"08080808", -2738 => x"08080808", -2739 => x"08080808", -2740 => x"43000000", -2741 => x"64756d6d", -2742 => x"792e6578", -2743 => x"65000000", -2744 => x"00ffffff", -2745 => x"ff00ffff", -2746 => x"ffff00ff", -2747 => x"ffffff00", -2748 => x"00000000", -2749 => x"00000000", -2750 => x"00000000", -2751 => x"000032dc", -2752 => x"0000c350", -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"ffffffff", -2767 => x"00000000", -2768 => x"00020000", -2769 => x"00000000", -2770 => x"00000000", -2771 => x"00002b44", -2772 => x"00002b44", -2773 => x"00002b4c", -2774 => x"00002b4c", -2775 => x"00002b54", -2776 => x"00002b54", -2777 => x"00002b5c", -2778 => x"00002b5c", -2779 => x"00002b64", -2780 => x"00002b64", -2781 => x"00002b6c", -2782 => x"00002b6c", -2783 => x"00002b74", -2784 => x"00002b74", -2785 => x"00002b7c", -2786 => x"00002b7c", -2787 => x"00002b84", -2788 => x"00002b84", -2789 => x"00002b8c", -2790 => x"00002b8c", -2791 => x"00002b94", -2792 => x"00002b94", -2793 => x"00002b9c", -2794 => x"00002b9c", -2795 => x"00002ba4", -2796 => x"00002ba4", -2797 => x"00002bac", -2798 => x"00002bac", -2799 => x"00002bb4", -2800 => x"00002bb4", -2801 => x"00002bbc", -2802 => x"00002bbc", -2803 => x"00002bc4", -2804 => x"00002bc4", -2805 => x"00002bcc", -2806 => x"00002bcc", -2807 => x"00002bd4", -2808 => x"00002bd4", -2809 => x"00002bdc", -2810 => x"00002bdc", -2811 => x"00002be4", -2812 => x"00002be4", -2813 => x"00002bec", -2814 => x"00002bec", -2815 => x"00002bf4", -2816 => x"00002bf4", -2817 => x"00002bfc", -2818 => x"00002bfc", -2819 => x"00002c04", -2820 => x"00002c04", -2821 => x"00002c0c", -2822 => x"00002c0c", -2823 => x"00002c14", -2824 => x"00002c14", -2825 => x"00002c1c", -2826 => x"00002c1c", -2827 => x"00002c24", -2828 => x"00002c24", -2829 => x"00002c2c", -2830 => x"00002c2c", -2831 => x"00002c34", -2832 => x"00002c34", -2833 => x"00002c3c", -2834 => x"00002c3c", -2835 => x"00002c44", -2836 => x"00002c44", -2837 => x"00002c4c", -2838 => x"00002c4c", -2839 => x"00002c54", -2840 => x"00002c54", -2841 => x"00002c5c", -2842 => x"00002c5c", -2843 => x"00002c64", -2844 => x"00002c64", -2845 => x"00002c6c", -2846 => x"00002c6c", -2847 => x"00002c74", -2848 => x"00002c74", -2849 => x"00002c7c", -2850 => x"00002c7c", -2851 => x"00002c84", -2852 => x"00002c84", -2853 => x"00002c8c", -2854 => x"00002c8c", -2855 => x"00002c94", -2856 => x"00002c94", -2857 => x"00002c9c", -2858 => x"00002c9c", -2859 => x"00002ca4", -2860 => x"00002ca4", -2861 => x"00002cac", -2862 => x"00002cac", -2863 => x"00002cb4", -2864 => x"00002cb4", -2865 => x"00002cbc", -2866 => x"00002cbc", -2867 => x"00002cc4", -2868 => x"00002cc4", -2869 => x"00002ccc", -2870 => x"00002ccc", -2871 => x"00002cd4", -2872 => x"00002cd4", -2873 => x"00002cdc", -2874 => x"00002cdc", -2875 => x"00002ce4", -2876 => x"00002ce4", -2877 => x"00002cec", -2878 => x"00002cec", -2879 => x"00002cf4", -2880 => x"00002cf4", -2881 => x"00002cfc", -2882 => x"00002cfc", -2883 => x"00002d04", -2884 => x"00002d04", -2885 => x"00002d0c", -2886 => x"00002d0c", -2887 => x"00002d14", -2888 => x"00002d14", -2889 => x"00002d1c", -2890 => x"00002d1c", -2891 => x"00002d24", -2892 => x"00002d24", -2893 => x"00002d2c", -2894 => x"00002d2c", -2895 => x"00002d34", -2896 => x"00002d34", -2897 => x"00002d3c", -2898 => x"00002d3c", -2899 => x"00002d44", -2900 => x"00002d44", -2901 => x"00002d4c", -2902 => x"00002d4c", -2903 => x"00002d54", -2904 => x"00002d54", -2905 => x"00002d5c", -2906 => x"00002d5c", -2907 => x"00002d64", -2908 => x"00002d64", -2909 => x"00002d6c", -2910 => x"00002d6c", -2911 => x"00002d74", -2912 => x"00002d74", -2913 => x"00002d7c", -2914 => x"00002d7c", -2915 => x"00002d84", -2916 => x"00002d84", -2917 => x"00002d8c", -2918 => x"00002d8c", -2919 => x"00002d94", -2920 => x"00002d94", -2921 => x"00002d9c", -2922 => x"00002d9c", -2923 => x"00002da4", -2924 => x"00002da4", -2925 => x"00002dac", -2926 => x"00002dac", -2927 => x"00002db4", -2928 => x"00002db4", -2929 => x"00002dbc", -2930 => x"00002dbc", -2931 => x"00002dc4", -2932 => x"00002dc4", -2933 => x"00002dcc", -2934 => x"00002dcc", -2935 => x"00002dd4", -2936 => x"00002dd4", -2937 => x"00002ddc", -2938 => x"00002ddc", -2939 => x"00002de4", -2940 => x"00002de4", -2941 => x"00002dec", -2942 => x"00002dec", -2943 => x"00002df4", -2944 => x"00002df4", -2945 => x"00002dfc", -2946 => x"00002dfc", -2947 => x"00002e04", -2948 => x"00002e04", -2949 => x"00002e0c", -2950 => x"00002e0c", -2951 => x"00002e14", -2952 => x"00002e14", -2953 => x"00002e1c", -2954 => x"00002e1c", -2955 => x"00002e24", -2956 => x"00002e24", -2957 => x"00002e2c", -2958 => x"00002e2c", -2959 => x"00002e34", -2960 => x"00002e34", -2961 => x"00002e3c", -2962 => x"00002e3c", -2963 => x"00002e44", -2964 => x"00002e44", -2965 => x"00002e4c", -2966 => x"00002e4c", -2967 => x"00002e54", -2968 => x"00002e54", -2969 => x"00002e5c", -2970 => x"00002e5c", -2971 => x"00002e64", -2972 => x"00002e64", -2973 => x"00002e6c", -2974 => x"00002e6c", -2975 => x"00002e74", -2976 => x"00002e74", -2977 => x"00002e7c", -2978 => x"00002e7c", -2979 => x"00002e84", -2980 => x"00002e84", -2981 => x"00002e8c", -2982 => x"00002e8c", -2983 => x"00002e94", -2984 => x"00002e94", -2985 => x"00002e9c", -2986 => x"00002e9c", -2987 => x"00002ea4", -2988 => x"00002ea4", -2989 => x"00002eac", -2990 => x"00002eac", -2991 => x"00002eb4", -2992 => x"00002eb4", -2993 => x"00002ebc", -2994 => x"00002ebc", -2995 => x"00002ec4", -2996 => x"00002ec4", -2997 => x"00002ecc", -2998 => x"00002ecc", -2999 => x"00002ed4", -3000 => x"00002ed4", -3001 => x"00002edc", -3002 => x"00002edc", -3003 => x"00002ee4", -3004 => x"00002ee4", -3005 => x"00002eec", -3006 => x"00002eec", -3007 => x"00002ef4", -3008 => x"00002ef4", -3009 => x"00002efc", -3010 => x"00002efc", -3011 => x"00002f04", -3012 => x"00002f04", -3013 => x"00002f0c", -3014 => x"00002f0c", -3015 => x"00002f14", -3016 => x"00002f14", -3017 => x"00002f1c", -3018 => x"00002f1c", -3019 => x"00002f24", -3020 => x"00002f24", -3021 => x"00002f2c", -3022 => x"00002f2c", -3023 => x"00002f34", -3024 => x"00002f34", -3025 => x"00002f3c", -3026 => x"00002f3c", -3027 => x"00002f50", -3028 => x"00000000", -3029 => x"000031b8", -3030 => x"00003214", -3031 => x"00003270", -3032 => x"00000000", -3033 => x"00000000", -3034 => x"00000000", -3035 => x"00000000", -3036 => x"00000000", -3037 => x"00000000", -3038 => x"00000000", -3039 => x"00000000", -3040 => x"00000000", -3041 => x"00002ad0", -3042 => x"00000000", -3043 => x"00000000", -3044 => x"00000000", -3045 => x"00000000", -3046 => x"00000000", -3047 => x"00000000", -3048 => x"00000000", -3049 => x"00000000", -3050 => x"00000000", -3051 => x"00000000", -3052 => x"00000000", -3053 => x"00000000", -3054 => x"00000000", -3055 => x"00000000", -3056 => x"00000000", -3057 => x"00000000", -3058 => x"00000000", -3059 => x"00000000", -3060 => x"00000000", -3061 => x"00000000", -3062 => x"00000000", -3063 => x"00000000", -3064 => x"00000000", -3065 => x"00000000", -3066 => x"00000000", -3067 => x"00000000", -3068 => x"00000000", -3069 => x"00000000", -3070 => x"00000001", -3071 => x"330eabcd", -3072 => x"1234e66d", -3073 => x"deec0005", -3074 => x"000b0000", -3075 => x"00000000", -3076 => x"00000000", -3077 => x"00000000", -3078 => x"00000000", -3079 => x"00000000", -3080 => x"00000000", -3081 => x"00000000", -3082 => x"00000000", -3083 => x"00000000", -3084 => x"00000000", -3085 => x"00000000", -3086 => x"00000000", -3087 => x"00000000", -3088 => x"00000000", -3089 => x"00000000", -3090 => x"00000000", -3091 => x"00000000", -3092 => x"00000000", -3093 => x"00000000", -3094 => x"00000000", -3095 => x"00000000", -3096 => x"00000000", -3097 => x"00000000", -3098 => x"00000000", -3099 => x"00000000", -3100 => x"00000000", -3101 => x"00000000", -3102 => x"00000000", -3103 => x"00000000", -3104 => x"00000000", -3105 => x"00000000", -3106 => x"00000000", -3107 => x"00000000", -3108 => x"00000000", -3109 => x"00000000", -3110 => x"00000000", -3111 => x"00000000", -3112 => x"00000000", -3113 => x"00000000", -3114 => x"00000000", -3115 => x"00000000", -3116 => x"00000000", -3117 => x"00000000", -3118 => x"00000000", -3119 => x"00000000", -3120 => x"00000000", -3121 => x"00000000", -3122 => x"00000000", -3123 => x"00000000", -3124 => x"00000000", -3125 => x"00000000", -3126 => x"00000000", -3127 => x"00000000", -3128 => x"00000000", -3129 => x"00000000", -3130 => x"00000000", -3131 => x"00000000", -3132 => x"00000000", -3133 => x"00000000", -3134 => x"00000000", -3135 => x"00000000", -3136 => x"00000000", -3137 => x"00000000", -3138 => x"00000000", -3139 => x"00000000", -3140 => x"00000000", -3141 => x"00000000", -3142 => x"00000000", -3143 => x"00000000", -3144 => x"00000000", -3145 => x"00000000", -3146 => x"00000000", -3147 => x"00000000", -3148 => x"00000000", -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"00000000", -3163 => x"00000000", -3164 => x"00000000", -3165 => x"00000000", -3166 => x"00000000", -3167 => x"00000000", -3168 => x"00000000", -3169 => x"00000000", -3170 => x"00000000", -3171 => x"00000000", -3172 => x"00000000", -3173 => x"00000000", -3174 => x"00000000", -3175 => x"00000000", -3176 => x"00000000", -3177 => x"00000000", -3178 => x"00000000", -3179 => x"00000000", -3180 => x"00000000", -3181 => x"00000000", -3182 => x"00000000", -3183 => x"00000000", -3184 => x"00000000", -3185 => x"00000000", -3186 => x"00000000", -3187 => x"00000000", -3188 => x"00000000", -3189 => x"00000000", -3190 => x"00000000", -3191 => x"00000000", -3192 => x"00000000", -3193 => x"00000000", -3194 => x"00000000", -3195 => x"00000000", -3196 => x"00000000", -3197 => x"00000000", -3198 => x"00000000", -3199 => x"00000000", -3200 => x"00000000", -3201 => x"00000000", -3202 => x"00000000", -3203 => x"00000000", -3204 => x"00000000", -3205 => x"00000000", -3206 => x"00000000", -3207 => x"00000000", -3208 => x"00000000", -3209 => x"00000000", -3210 => x"00000000", -3211 => x"00000000", -3212 => x"00000000", -3213 => x"00000000", -3214 => x"00000000", -3215 => x"00000000", -3216 => x"00000000", -3217 => x"00000000", -3218 => x"00000000", -3219 => x"00000000", -3220 => x"00000000", -3221 => x"00000000", -3222 => x"00000000", -3223 => x"00000000", -3224 => x"00000000", -3225 => x"00000000", -3226 => x"00000000", -3227 => x"00000000", -3228 => x"00000000", -3229 => x"00000000", -3230 => x"00000000", -3231 => x"00000000", -3232 => x"00000000", -3233 => x"00000000", -3234 => x"00000000", -3235 => x"00000000", -3236 => x"00000000", -3237 => x"00000000", -3238 => x"00000000", -3239 => x"00000000", -3240 => x"00000000", -3241 => x"00000000", -3242 => x"00000000", -3243 => x"00000000", -3244 => x"00000000", -3245 => x"00000000", -3246 => x"00000000", -3247 => x"00000000", -3248 => x"00000000", -3249 => x"00000000", -3250 => x"00000000", -3251 => x"00002ad4", -3252 => x"ffffffff", -3253 => x"00000000", -3254 => x"ffffffff", -3255 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; - end if; - if (mem_readEnable = '1') then - mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); - end if; - end if; -end process; - - - - -end dram_arch; +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80d5f40c", +3 => x"3a0b0b80", +4 => x"c4fb0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c5c22d", +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"c3040000", +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"0b0b88a6", +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"0b0b80d5", +162 => x"e0738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88a90400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0bad", +171 => x"aa2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0bad", +179 => x"ee2d5050", +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"80d5f00c", +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"82fd3fbf", +257 => x"a03f0410", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10105351", +266 => x"047381ff", +267 => x"06738306", +268 => x"09810583", +269 => x"05101010", +270 => x"2b0772fc", +271 => x"060c5151", +272 => x"043c0472", +273 => x"72807281", +274 => x"06ff0509", +275 => x"72060571", +276 => x"1052720a", +277 => x"100a5372", +278 => x"ed385151", +279 => x"535104ff", +280 => x"3d0d0b0b", +281 => x"80e5e408", +282 => x"52710870", +283 => x"882a8132", +284 => x"70810651", +285 => x"515170f1", +286 => x"3873720c", +287 => x"833d0d04", +288 => x"80d5f008", +289 => x"802ea438", +290 => x"80d5f408", +291 => x"822ebd38", +292 => x"8380800b", +293 => x"0b0b80e5", +294 => x"e40c82a0", +295 => x"800b80e5", +296 => x"e80c8290", +297 => x"800b80e5", +298 => x"ec0c04f8", +299 => x"808080a4", +300 => x"0b0b0b80", +301 => x"e5e40cf8", +302 => x"80808280", +303 => x"0b80e5e8", +304 => x"0cf88080", +305 => x"84800b80", +306 => x"e5ec0c04", +307 => x"80c0a880", +308 => x"8c0b0b0b", +309 => x"80e5e40c", +310 => x"80c0a880", +311 => x"940b80e5", +312 => x"e80c0b0b", +313 => x"80c7d00b", +314 => x"80e5ec0c", +315 => x"04f23d0d", +316 => x"6080e5e8", +317 => x"08565d82", +318 => x"750c8059", +319 => x"805a800b", +320 => x"8f3d5d5b", +321 => x"7a101015", +322 => x"70087108", +323 => x"719f2c7e", +324 => x"852b5855", +325 => x"557d5359", +326 => x"5799993f", +327 => x"7d7f7a72", +328 => x"077c7207", +329 => x"71716081", +330 => x"05415f5d", +331 => x"5b595755", +332 => x"817b278f", +333 => x"38767d0c", +334 => x"77841e0c", +335 => x"7c800c90", +336 => x"3d0d0480", +337 => x"e5e80855", +338 => x"ffba3970", +339 => x"7080e5f0", +340 => x"335170a7", +341 => x"3880d5fc", +342 => x"08700852", +343 => x"5270802e", +344 => x"94388412", +345 => x"80d5fc0c", +346 => x"702d80d5", +347 => x"fc087008", +348 => x"525270ee", +349 => x"38810b80", +350 => x"e5f03450", +351 => x"50040470", +352 => x"0b0b80e5", +353 => x"e008802e", +354 => x"8e380b0b", +355 => x"0b0b800b", +356 => x"802e0981", +357 => x"06833850", +358 => x"040b0b80", +359 => x"e5e0510b", +360 => x"0b0bf4dc", +361 => x"3f500404", +362 => x"ff3d0d02", +363 => x"8f053352", +364 => x"718a2e8a", +365 => x"387151fd", +366 => x"a63f833d", +367 => x"0d048d51", +368 => x"fd9d3f71", +369 => x"51fd983f", +370 => x"833d0d04", +371 => x"ce3d0db5", +372 => x"3d707084", +373 => x"0552088b", +374 => x"a85c56a5", +375 => x"3d5e5c80", +376 => x"75708105", +377 => x"5733765b", +378 => x"55587378", +379 => x"2e80c138", +380 => x"8e3d5b73", +381 => x"a52e0981", +382 => x"0680c538", +383 => x"78708105", +384 => x"5a335473", +385 => x"80e42e81", +386 => x"b6387380", +387 => x"e42480c6", +388 => x"387380e3", +389 => x"2ea13880", +390 => x"52a55179", +391 => x"2d805273", +392 => x"51792d82", +393 => x"18587870", +394 => x"81055a33", +395 => x"5473c438", +396 => x"77800cb4", +397 => x"3d0d047b", +398 => x"841d8312", +399 => x"33565d57", +400 => x"80527351", +401 => x"792d8118", +402 => x"79708105", +403 => x"5b335558", +404 => x"73ffa038", +405 => x"db397380", +406 => x"f32e0981", +407 => x"06ffb838", +408 => x"7b841d71", +409 => x"08595d56", +410 => x"80773355", +411 => x"5673762e", +412 => x"8d388116", +413 => x"70187033", +414 => x"57555674", +415 => x"f538ff16", +416 => x"55807625", +417 => x"ffa03876", +418 => x"70810558", +419 => x"33548052", +420 => x"7351792d", +421 => x"811875ff", +422 => x"17575758", +423 => x"807625ff", +424 => x"85387670", +425 => x"81055833", +426 => x"54805273", +427 => x"51792d81", +428 => x"1875ff17", +429 => x"57575875", +430 => x"8024cc38", +431 => x"fee8397b", +432 => x"841d7108", +433 => x"70719f2c", +434 => x"5953595d", +435 => x"56807524", +436 => x"81913875", +437 => x"7d7c5856", +438 => x"54805773", +439 => x"772e0981", +440 => x"06b638b0", +441 => x"7b3402b5", +442 => x"05567a76", +443 => x"2e9738ff", +444 => x"16567533", +445 => x"75708105", +446 => x"57348117", +447 => x"577a762e", +448 => x"098106eb", +449 => x"38807534", +450 => x"767dff12", +451 => x"57585675", +452 => x"8024fef3", +453 => x"38fe8f39", +454 => x"8a527351", +455 => x"9fd03f80", +456 => x"0880c7d4", +457 => x"05337670", +458 => x"81055834", +459 => x"8a527351", +460 => x"9ef83f80", +461 => x"08548008", +462 => x"802effae", +463 => x"388a5273", +464 => x"519fab3f", +465 => x"800880c7", +466 => x"d4053376", +467 => x"70810558", +468 => x"348a5273", +469 => x"519ed33f", +470 => x"80085480", +471 => x"08ffb938", +472 => x"ff883974", +473 => x"527653b4", +474 => x"3dffb805", +475 => x"51949a3f", +476 => x"a33d0856", +477 => x"fedd3980", +478 => x"3d0d80c1", +479 => x"0b81b4bc", +480 => x"34800b81", +481 => x"b6980c70", +482 => x"800c823d", +483 => x"0d04ff3d", +484 => x"0d800b81", +485 => x"b4bc3352", +486 => x"527080c1", +487 => x"2e993871", +488 => x"81b69808", +489 => x"0781b698", +490 => x"0c80c20b", +491 => x"81b4c034", +492 => x"70800c83", +493 => x"3d0d0481", +494 => x"0b81b698", +495 => x"080781b6", +496 => x"980c80c2", +497 => x"0b81b4c0", +498 => x"3470800c", +499 => x"833d0d04", +500 => x"fd3d0d75", +501 => x"70088a05", +502 => x"535381b4", +503 => x"bc335170", +504 => x"80c12e8b", +505 => x"3873f338", +506 => x"70800c85", +507 => x"3d0d04ff", +508 => x"127081b4", +509 => x"b8083174", +510 => x"0c800c85", +511 => x"3d0d04fc", +512 => x"3d0d81b4", +513 => x"c4085574", +514 => x"802e8c38", +515 => x"76750871", +516 => x"0c81b4c4", +517 => x"0856548c", +518 => x"155381b4", +519 => x"b808528a", +520 => x"518fd43f", +521 => x"73800c86", +522 => x"3d0d04fb", +523 => x"3d0d7770", +524 => x"085656b0", +525 => x"5381b4c4", +526 => x"08527451", +527 => x"ab943f85", +528 => x"0b8c170c", +529 => x"850b8c16", +530 => x"0c750875", +531 => x"0c81b4c4", +532 => x"08547380", +533 => x"2e8a3873", +534 => x"08750c81", +535 => x"b4c40854", +536 => x"8c145381", +537 => x"b4b80852", +538 => x"8a518f8b", +539 => x"3f841508", +540 => x"ad38860b", +541 => x"8c160c88", +542 => x"15528816", +543 => x"08518e97", +544 => x"3f81b4c4", +545 => x"08700876", +546 => x"0c548c15", +547 => x"7054548a", +548 => x"52730851", +549 => x"8ee13f73", +550 => x"800c873d", +551 => x"0d047508", +552 => x"54b05373", +553 => x"527551aa", +554 => x"a93f7380", +555 => x"0c873d0d", +556 => x"04d93d0d", +557 => x"b0519dcf", +558 => x"3f800881", +559 => x"b4b40cb0", +560 => x"519dc43f", +561 => x"800881b4", +562 => x"c40c81b4", +563 => x"b4088008", +564 => x"0c800b80", +565 => x"0884050c", +566 => x"820b8008", +567 => x"88050ca8", +568 => x"0b80088c", +569 => x"050c9f53", +570 => x"80c7e052", +571 => x"80089005", +572 => x"51a9df3f", +573 => x"a13d5e9f", +574 => x"5380c880", +575 => x"527d51a9", +576 => x"d13f8a0b", +577 => x"80f2f80c", +578 => x"80d2a451", +579 => x"f9be3f80", +580 => x"c8a051f9", +581 => x"b73f80d2", +582 => x"a451f9b0", +583 => x"3f80d684", +584 => x"08802e89", +585 => x"d33880c8", +586 => x"d051f9a0", +587 => x"3f80d2a4", +588 => x"51f9993f", +589 => x"80d68008", +590 => x"5280c8fc", +591 => x"51f98d3f", +592 => x"80e69451", +593 => x"b2ff3f81", +594 => x"0b9a3d5e", +595 => x"5b800b80", +596 => x"d6800825", +597 => x"82d43890", +598 => x"3d5f80c1", +599 => x"0b81b4bc", +600 => x"34810b81", +601 => x"b6980c80", +602 => x"c20b81b4", +603 => x"c0348240", +604 => x"835a9f53", +605 => x"80c9ac52", +606 => x"7c51a8d6", +607 => x"3f814180", +608 => x"7d537e52", +609 => x"568e943f", +610 => x"8008762e", +611 => x"09810683", +612 => x"38815675", +613 => x"81b6980c", +614 => x"7f705856", +615 => x"758325a2", +616 => x"38751010", +617 => x"16fd0542", +618 => x"a93dffa4", +619 => x"05538352", +620 => x"76518cc3", +621 => x"3f7f8105", +622 => x"70417058", +623 => x"56837624", +624 => x"e0386154", +625 => x"755380e6", +626 => x"9c5281b4", +627 => x"d0518cb7", +628 => x"3f81b4c4", +629 => x"08700858", +630 => x"58b05377", +631 => x"527651a7", +632 => x"f13f850b", +633 => x"8c190c85", +634 => x"0b8c180c", +635 => x"7708770c", +636 => x"81b4c408", +637 => x"5675802e", +638 => x"8a387508", +639 => x"770c81b4", +640 => x"c408568c", +641 => x"165381b4", +642 => x"b808528a", +643 => x"518be83f", +644 => x"84170887", +645 => x"ea38860b", +646 => x"8c180c88", +647 => x"17528818", +648 => x"08518af3", +649 => x"3f81b4c4", +650 => x"08700878", +651 => x"0c568c17", +652 => x"7054598a", +653 => x"52780851", +654 => x"8bbd3f80", +655 => x"c10b81b4", +656 => x"c0335757", +657 => x"767626a2", +658 => x"3880c352", +659 => x"76518ca1", +660 => x"3f800861", +661 => x"2e89e438", +662 => x"81177081", +663 => x"ff0681b4", +664 => x"c0335858", +665 => x"58757727", +666 => x"e0387960", +667 => x"29627054", +668 => x"71535b59", +669 => x"98b43f80", +670 => x"0840787a", +671 => x"31708729", +672 => x"80083180", +673 => x"088a0581", +674 => x"b4bc3381", +675 => x"b4b8085e", +676 => x"5b525a56", +677 => x"7780c12e", +678 => x"89ce387b", +679 => x"f738811b", +680 => x"5b80d680", +681 => x"087b25fd", +682 => x"b13881b4", +683 => x"ac51b095", +684 => x"3f80c9cc", +685 => x"51f6953f", +686 => x"80d2a451", +687 => x"f68e3f80", +688 => x"c9dc51f6", +689 => x"873f80d2", +690 => x"a451f680", +691 => x"3f81b4b8", +692 => x"085280ca", +693 => x"9451f5f4", +694 => x"3f855280", +695 => x"cab051f5", +696 => x"eb3f81b6", +697 => x"98085280", +698 => x"cacc51f5", +699 => x"df3f8152", +700 => x"80cab051", +701 => x"f5d63f81", +702 => x"b4bc3352", +703 => x"80cae851", +704 => x"f5ca3f80", +705 => x"c15280cb", +706 => x"8451f5c0", +707 => x"3f81b4c0", +708 => x"335280cb", +709 => x"a051f5b4", +710 => x"3f80c252", +711 => x"80cb8451", +712 => x"f5aa3f81", +713 => x"b4f00852", +714 => x"80cbbc51", +715 => x"f59e3f87", +716 => x"5280cab0", +717 => x"51f5953f", +718 => x"80f2f808", +719 => x"5280cbd8", +720 => x"51f5893f", +721 => x"80cbf451", +722 => x"f5823f80", +723 => x"cca051f4", +724 => x"fb3f81b4", +725 => x"c4087008", +726 => x"535a80cc", +727 => x"ac51f4ec", +728 => x"3f80ccc8", +729 => x"51f4e53f", +730 => x"81b4c408", +731 => x"84110853", +732 => x"5680ccfc", +733 => x"51f4d53f", +734 => x"805280ca", +735 => x"b051f4cc", +736 => x"3f81b4c4", +737 => x"08881108", +738 => x"535880cd", +739 => x"9851f4bc", +740 => x"3f825280", +741 => x"cab051f4", +742 => x"b33f81b4", +743 => x"c4088c11", +744 => x"08535780", +745 => x"cdb451f4", +746 => x"a33f9152", +747 => x"80cab051", +748 => x"f49a3f81", +749 => x"b4c40890", +750 => x"055280cd", +751 => x"d051f48c", +752 => x"3f80cdec", +753 => x"51f4853f", +754 => x"80cea451", +755 => x"f3fe3f81", +756 => x"b4b40870", +757 => x"08535f80", +758 => x"ccac51f3", +759 => x"ef3f80ce", +760 => x"b851f3e8", +761 => x"3f81b4b4", +762 => x"08841108", +763 => x"535b80cc", +764 => x"fc51f3d8", +765 => x"3f805280", +766 => x"cab051f3", +767 => x"cf3f81b4", +768 => x"b4088811", +769 => x"08535c80", +770 => x"cd9851f3", +771 => x"bf3f8152", +772 => x"80cab051", +773 => x"f3b63f81", +774 => x"b4b4088c", +775 => x"1108535a", +776 => x"80cdb451", +777 => x"f3a63f92", +778 => x"5280cab0", +779 => x"51f39d3f", +780 => x"81b4b408", +781 => x"90055280", +782 => x"cdd051f3", +783 => x"8f3f80cd", +784 => x"ec51f388", +785 => x"3f7f5280", +786 => x"cef851f2", +787 => x"ff3f8552", +788 => x"80cab051", +789 => x"f2f63f78", +790 => x"5280cf94", +791 => x"51f2ed3f", +792 => x"8d5280ca", +793 => x"b051f2e4", +794 => x"3f615280", +795 => x"cfb051f2", +796 => x"db3f8752", +797 => x"80cab051", +798 => x"f2d23f60", +799 => x"5280cfcc", +800 => x"51f2c93f", +801 => x"815280ca", +802 => x"b051f2c0", +803 => x"3f7d5280", +804 => x"cfe851f2", +805 => x"b73f80d0", +806 => x"8451f2b0", +807 => x"3f7c5280", +808 => x"d0bc51f2", +809 => x"a73f80d0", +810 => x"d851f2a0", +811 => x"3f80d2a4", +812 => x"51f2993f", +813 => x"81b4ac08", +814 => x"81b4b008", +815 => x"80e69408", +816 => x"80e69808", +817 => x"72713170", +818 => x"74267574", +819 => x"31707231", +820 => x"80e68c0c", +821 => x"444480e6", +822 => x"900c80e6", +823 => x"90085680", +824 => x"d190555c", +825 => x"595758f1", +826 => x"e33f80e6", +827 => x"8c085680", +828 => x"762582a3", +829 => x"3880d680", +830 => x"0870719f", +831 => x"2c9a3d53", +832 => x"565680e6", +833 => x"8c0880e6", +834 => x"90084153", +835 => x"7f547052", +836 => x"5a89eb3f", +837 => x"66685f80", +838 => x"e5fc0c7d", +839 => x"80e6800c", +840 => x"80d68008", +841 => x"709f2c58", +842 => x"568058bd", +843 => x"84c07855", +844 => x"55765275", +845 => x"53795187", +846 => x"d13f953d", +847 => x"80e68c08", +848 => x"80e69008", +849 => x"41557f56", +850 => x"67694053", +851 => x"7e547052", +852 => x"5c89ab3f", +853 => x"64665e80", +854 => x"e6840c7c", +855 => x"80e6880c", +856 => x"80d68008", +857 => x"709f2c40", +858 => x"58805783", +859 => x"dceb9480", +860 => x"7755557e", +861 => x"5277537b", +862 => x"51878f3f", +863 => x"64665d5b", +864 => x"805e8ddd", +865 => x"7e555580", +866 => x"e68c0880", +867 => x"e6900859", +868 => x"52775379", +869 => x"5186f33f", +870 => x"66684054", +871 => x"7e557a52", +872 => x"7b53a93d", +873 => x"ffa80551", +874 => x"88d43f62", +875 => x"645e81b4", +876 => x"c80c7c81", +877 => x"b4cc0c80", +878 => x"d1a051f0", +879 => x"8f3f80e6", +880 => x"80085280", +881 => x"d1d051f0", +882 => x"833f80d1", +883 => x"d851effc", +884 => x"3f80e688", +885 => x"085280d1", +886 => x"d051eff0", +887 => x"3f81b4cc", +888 => x"085280d2", +889 => x"8851efe4", +890 => x"3f80d2a4", +891 => x"51efdd3f", +892 => x"800b800c", +893 => x"a93d0d04", +894 => x"80d2a851", +895 => x"f6ac3977", +896 => x"0857b053", +897 => x"76527751", +898 => x"9fc83f80", +899 => x"c10b81b4", +900 => x"c0335757", +901 => x"f8ae3975", +902 => x"8a3880e6", +903 => x"90088126", +904 => x"fdd33880", +905 => x"d2d851ef", +906 => x"a33f80d3", +907 => x"9051ef9c", +908 => x"3f80d2a4", +909 => x"51ef953f", +910 => x"80d68008", +911 => x"70719f2c", +912 => x"9a3d5356", +913 => x"5680e68c", +914 => x"0880e690", +915 => x"0841537f", +916 => x"5470525a", +917 => x"87a83f66", +918 => x"685f80e5", +919 => x"fc0c7d80", +920 => x"e6800c80", +921 => x"d6800870", +922 => x"9f2c5856", +923 => x"8058bd84", +924 => x"c0785555", +925 => x"76527553", +926 => x"7951858e", +927 => x"3f953d80", +928 => x"e68c0880", +929 => x"e6900841", +930 => x"557f5667", +931 => x"6940537e", +932 => x"5470525c", +933 => x"86e83f64", +934 => x"665e80e6", +935 => x"840c7c80", +936 => x"e6880c80", +937 => x"d6800870", +938 => x"9f2c4058", +939 => x"805783dc", +940 => x"eb948077", +941 => x"55557e52", +942 => x"77537b51", +943 => x"84cc3f64", +944 => x"665d5b80", +945 => x"5e8ddd7e", +946 => x"555580e6", +947 => x"8c0880e6", +948 => x"90085952", +949 => x"77537951", +950 => x"84b03f66", +951 => x"6840547e", +952 => x"557a527b", +953 => x"53a93dff", +954 => x"a8055186", +955 => x"913f6264", +956 => x"5e81b4c8", +957 => x"0c7c81b4", +958 => x"cc0c80d1", +959 => x"a051edcc", +960 => x"3f80e680", +961 => x"085280d1", +962 => x"d051edc0", +963 => x"3f80d1d8", +964 => x"51edb93f", +965 => x"80e68808", +966 => x"5280d1d0", +967 => x"51edad3f", +968 => x"81b4cc08", +969 => x"5280d288", +970 => x"51eda13f", +971 => x"80d2a451", +972 => x"ed9a3f80", +973 => x"0b800ca9", +974 => x"3d0d04a9", +975 => x"3dffa005", +976 => x"52805180", +977 => x"d23f9f53", +978 => x"80d3b052", +979 => x"7c519d82", +980 => x"3f7a7b81", +981 => x"b4b80c81", +982 => x"187081ff", +983 => x"0681b4c0", +984 => x"33595959", +985 => x"5af5fe39", +986 => x"ff16707b", +987 => x"31600c5c", +988 => x"800b811c", +989 => x"5c5c80d6", +990 => x"80087b25", +991 => x"f3dc38f6", +992 => x"a939ff3d", +993 => x"0d738232", +994 => x"70307072", +995 => x"07802580", +996 => x"0c525283", +997 => x"3d0d04fe", +998 => x"3d0d7476", +999 => x"71535452", +1000 => x"71822e83", +1001 => x"38835171", +1002 => x"812e9a38", +1003 => x"8172269f", +1004 => x"3871822e", +1005 => x"b8387184", +1006 => x"2ea93870", +1007 => x"730c7080", +1008 => x"0c843d0d", +1009 => x"0480e40b", +1010 => x"81b4b808", +1011 => x"258b3880", +1012 => x"730c7080", +1013 => x"0c843d0d", +1014 => x"0483730c", +1015 => x"70800c84", +1016 => x"3d0d0482", +1017 => x"730c7080", +1018 => x"0c843d0d", +1019 => x"0481730c", +1020 => x"70800c84", +1021 => x"3d0d0480", +1022 => x"3d0d7474", +1023 => x"14820571", +1024 => x"0c800c82", +1025 => x"3d0d04f7", +1026 => x"3d0d7b7d", +1027 => x"7f618512", +1028 => x"70822b75", +1029 => x"11707471", +1030 => x"70840553", +1031 => x"0c5a5a5d", +1032 => x"5b760c79", +1033 => x"80f8180c", +1034 => x"79861252", +1035 => x"57585a5a", +1036 => x"76762499", +1037 => x"3876b329", +1038 => x"822b7911", +1039 => x"51537673", +1040 => x"70840555", +1041 => x"0c811454", +1042 => x"757425f2", +1043 => x"387681cc", +1044 => x"2919fc11", +1045 => x"088105fc", +1046 => x"120c7a19", +1047 => x"70089fa0", +1048 => x"130c5856", +1049 => x"850b81b4", +1050 => x"b80c7580", +1051 => x"0c8b3d0d", +1052 => x"04fe3d0d", +1053 => x"02930533", +1054 => x"51800284", +1055 => x"05970533", +1056 => x"54527073", +1057 => x"2e883871", +1058 => x"800c843d", +1059 => x"0d047081", +1060 => x"b4bc3481", +1061 => x"0b800c84", +1062 => x"3d0d04f8", +1063 => x"3d0d7a7c", +1064 => x"5956820b", +1065 => x"83195555", +1066 => x"74167033", +1067 => x"75335b51", +1068 => x"5372792e", +1069 => x"80c63880", +1070 => x"c10b8116", +1071 => x"81165656", +1072 => x"57827525", +1073 => x"e338ffa9", +1074 => x"177081ff", +1075 => x"06555973", +1076 => x"82268338", +1077 => x"87558153", +1078 => x"7680d22e", +1079 => x"98387752", +1080 => x"75519bc3", +1081 => x"3f805372", +1082 => x"80082589", +1083 => x"38871581", +1084 => x"b4b80c81", +1085 => x"5372800c", +1086 => x"8a3d0d04", +1087 => x"7281b4bc", +1088 => x"34827525", +1089 => x"ffa238ff", +1090 => x"bd39ef3d", +1091 => x"0d636567", +1092 => x"5b427943", +1093 => x"67695940", +1094 => x"77415a80", +1095 => x"5d805e61", +1096 => x"7083ffff", +1097 => x"0671902a", +1098 => x"627083ff", +1099 => x"ff067190", +1100 => x"2a747229", +1101 => x"74732975", +1102 => x"73297774", +1103 => x"2973902a", +1104 => x"05721151", +1105 => x"5856535f", +1106 => x"5a575a58", +1107 => x"55587373", +1108 => x"27863884", +1109 => x"80801656", +1110 => x"73902a16", +1111 => x"5b7883ff", +1112 => x"ff067484", +1113 => x"80802905", +1114 => x"5c7a7c5a", +1115 => x"5d785e77", +1116 => x"7f296178", +1117 => x"29057d05", +1118 => x"5d7c7e56", +1119 => x"7a0c7484", +1120 => x"1b0c7980", +1121 => x"0c933d0d", +1122 => x"04f93d0d", +1123 => x"797b7d54", +1124 => x"58725977", +1125 => x"30797030", +1126 => x"7072079f", +1127 => x"2a737131", +1128 => x"5a525977", +1129 => x"7956730c", +1130 => x"53738413", +1131 => x"0c54800c", +1132 => x"893d0d04", +1133 => x"f93d0d79", +1134 => x"7b7d7f56", +1135 => x"54525472", +1136 => x"802ea038", +1137 => x"70577158", +1138 => x"a0733152", +1139 => x"807225a1", +1140 => x"38777074", +1141 => x"2b577073", +1142 => x"2a78752b", +1143 => x"07565174", +1144 => x"76535170", +1145 => x"740c7184", +1146 => x"150c7380", +1147 => x"0c893d0d", +1148 => x"04805677", +1149 => x"72302b55", +1150 => x"74765351", +1151 => x"e639e43d", +1152 => x"0d6ea13d", +1153 => x"08a33d08", +1154 => x"59575f80", +1155 => x"764d774e", +1156 => x"a33d08a5", +1157 => x"3d08574b", +1158 => x"754c5e7d", +1159 => x"6c2486fb", +1160 => x"38806a24", +1161 => x"878f3869", +1162 => x"6b58566b", +1163 => x"6d5d467b", +1164 => x"47754476", +1165 => x"45646468", +1166 => x"685c5c56", +1167 => x"567481e7", +1168 => x"38787627", +1169 => x"82c73875", +1170 => x"81ff2683", +1171 => x"2b5583ff", +1172 => x"ff76278c", +1173 => x"389055fe", +1174 => x"800a7627", +1175 => x"83389855", +1176 => x"75752a80", +1177 => x"d3d00570", +1178 => x"33a07731", +1179 => x"71315755", +1180 => x"5774802e", +1181 => x"95387575", +1182 => x"2ba07631", +1183 => x"7a772b7c", +1184 => x"722a077c", +1185 => x"782b5d5b", +1186 => x"59567590", +1187 => x"2a7683ff", +1188 => x"ff067154", +1189 => x"7a535957", +1190 => x"88803f80", +1191 => x"085b87ea", +1192 => x"3f800880", +1193 => x"0879297c", +1194 => x"902b7c90", +1195 => x"2a075656", +1196 => x"59737527", +1197 => x"94388008", +1198 => x"ff057615", +1199 => x"55597574", +1200 => x"26873874", +1201 => x"742687b9", +1202 => x"38765273", +1203 => x"75315187", +1204 => x"c93f8008", +1205 => x"5587b33f", +1206 => x"80088008", +1207 => x"79297b83", +1208 => x"ffff0677", +1209 => x"902b0756", +1210 => x"59577378", +1211 => x"27963880", +1212 => x"08ff0576", +1213 => x"15555775", +1214 => x"74268938", +1215 => x"77742677", +1216 => x"71315856", +1217 => x"78902b77", +1218 => x"0758805b", +1219 => x"7a407741", +1220 => x"7f615654", +1221 => x"7d80d938", +1222 => x"737f0c74", +1223 => x"7f84050c", +1224 => x"7e800c9e", +1225 => x"3d0d0480", +1226 => x"705c5874", +1227 => x"7926dd38", +1228 => x"7481ff26", +1229 => x"832b5774", +1230 => x"83ffff26", +1231 => x"82a53874", +1232 => x"772a80d3", +1233 => x"d0057033", +1234 => x"a0793171", +1235 => x"31595c5d", +1236 => x"7682b338", +1237 => x"76547479", +1238 => x"27833881", +1239 => x"54797627", +1240 => x"74075981", +1241 => x"5878ffa2", +1242 => x"38765880", +1243 => x"5bff9d39", +1244 => x"73527453", +1245 => x"9e3de805", +1246 => x"51fc8e3f", +1247 => x"6769567f", +1248 => x"0c747f84", +1249 => x"050c7e80", +1250 => x"0c9e3d0d", +1251 => x"0475802e", +1252 => x"81c43875", +1253 => x"81ff2683", +1254 => x"2b5583ff", +1255 => x"ff76278c", +1256 => x"389055fe", +1257 => x"800a7627", +1258 => x"83389855", +1259 => x"75752a80", +1260 => x"d3d00570", +1261 => x"33a07731", +1262 => x"7131575e", +1263 => x"54748491", +1264 => x"38787631", +1265 => x"54817690", +1266 => x"2a7783ff", +1267 => x"ff065f5d", +1268 => x"5b7b5273", +1269 => x"5185c33f", +1270 => x"80085785", +1271 => x"ad3f8008", +1272 => x"80087e29", +1273 => x"78902b7c", +1274 => x"902a0756", +1275 => x"56597375", +1276 => x"27943880", +1277 => x"08ff0576", +1278 => x"15555975", +1279 => x"74268738", +1280 => x"74742684", +1281 => x"f3387b52", +1282 => x"73753151", +1283 => x"858c3f80", +1284 => x"085584f6", +1285 => x"3f800880", +1286 => x"087e297b", +1287 => x"83ffff06", +1288 => x"77902b07", +1289 => x"56595773", +1290 => x"78279638", +1291 => x"8008ff05", +1292 => x"76155557", +1293 => x"75742689", +1294 => x"38777426", +1295 => x"77713158", +1296 => x"5a78902b", +1297 => x"77077b41", +1298 => x"417f6156", +1299 => x"547d802e", +1300 => x"fdc638fe", +1301 => x"9b397552", +1302 => x"815184ae", +1303 => x"3f800856", +1304 => x"feb13990", +1305 => x"57fe800a", +1306 => x"7527fdd3", +1307 => x"38987571", +1308 => x"2a80d3d0", +1309 => x"057033a0", +1310 => x"73317131", +1311 => x"535d5e57", +1312 => x"76802efd", +1313 => x"cf38a077", +1314 => x"3175782b", +1315 => x"77722a07", +1316 => x"77792b7b", +1317 => x"7a2b7d74", +1318 => x"2a077d7b", +1319 => x"2b73902a", +1320 => x"7483ffff", +1321 => x"0671597f", +1322 => x"772a585e", +1323 => x"5c415f58", +1324 => x"5c5483e6", +1325 => x"3f800854", +1326 => x"83d03f80", +1327 => x"08800879", +1328 => x"2975902b", +1329 => x"7e902a07", +1330 => x"56565973", +1331 => x"75279938", +1332 => x"8008ff05", +1333 => x"7b155559", +1334 => x"7a74268c", +1335 => x"38737527", +1336 => x"8738ff19", +1337 => x"7b155559", +1338 => x"76527375", +1339 => x"315183aa", +1340 => x"3f800855", +1341 => x"83943f80", +1342 => x"08800879", +1343 => x"297d83ff", +1344 => x"ff067790", +1345 => x"2b075659", +1346 => x"57737827", +1347 => x"99388008", +1348 => x"ff057b15", +1349 => x"55577a74", +1350 => x"268c3873", +1351 => x"78278738", +1352 => x"ff177b15", +1353 => x"55577378", +1354 => x"3179902b", +1355 => x"78077083", +1356 => x"ffff0671", +1357 => x"902a7983", +1358 => x"ffff067a", +1359 => x"902a7372", +1360 => x"29737329", +1361 => x"74732976", +1362 => x"74297390", +1363 => x"2a057205", +1364 => x"5755435f", +1365 => x"5b585a57", +1366 => x"595a747c", +1367 => x"27863884", +1368 => x"80801757", +1369 => x"74902a17", +1370 => x"7983ffff", +1371 => x"06768480", +1372 => x"80290557", +1373 => x"57767a26", +1374 => x"9a38767a", +1375 => x"32703070", +1376 => x"72078025", +1377 => x"565a5b7c", +1378 => x"7627fafe", +1379 => x"3873802e", +1380 => x"faf838ff", +1381 => x"1858805b", +1382 => x"faf239ff", +1383 => x"76537754", +1384 => x"9f3de805", +1385 => x"525ef7e1", +1386 => x"3f676957", +1387 => x"4c754d69", +1388 => x"8025f8f3", +1389 => x"387d096a", +1390 => x"6c5c537a", +1391 => x"549f3de8", +1392 => x"05525ef7", +1393 => x"c43f6769", +1394 => x"714c704d", +1395 => x"5856f8db", +1396 => x"39a07531", +1397 => x"76762b7a", +1398 => x"772b7c73", +1399 => x"2a077c78", +1400 => x"2b72902a", +1401 => x"7383ffff", +1402 => x"0671587e", +1403 => x"762a5742", +1404 => x"405d5d57", +1405 => x"5881a33f", +1406 => x"80085781", +1407 => x"8d3f8008", +1408 => x"80087e29", +1409 => x"78902b7d", +1410 => x"902a0756", +1411 => x"56597375", +1412 => x"27993880", +1413 => x"08ff0576", +1414 => x"15555975", +1415 => x"74268c38", +1416 => x"73752787", +1417 => x"38ff1976", +1418 => x"1555597b", +1419 => x"52737531", +1420 => x"5180e73f", +1421 => x"80085580", +1422 => x"d13f8008", +1423 => x"80087e29", +1424 => x"7c83ffff", +1425 => x"06707890", +1426 => x"2b075156", +1427 => x"58587377", +1428 => x"27993880", +1429 => x"08ff0576", +1430 => x"15555875", +1431 => x"74268c38", +1432 => x"73772787", +1433 => x"38ff1876", +1434 => x"15555878", +1435 => x"902b7807", +1436 => x"74783155", +1437 => x"5bfada39", +1438 => x"ff197615", +1439 => x"5559fb86", +1440 => x"39ff1976", +1441 => x"155559f8", +1442 => x"c0397070", +1443 => x"70805375", +1444 => x"52745181", +1445 => x"913f5050", +1446 => x"50047070", +1447 => x"70815375", +1448 => x"52745181", +1449 => x"813f5050", +1450 => x"5004fb3d", +1451 => x"0d777955", +1452 => x"55805675", +1453 => x"7524ab38", +1454 => x"8074249d", +1455 => x"38805373", +1456 => x"52745180", +1457 => x"e13f8008", +1458 => x"5475802e", +1459 => x"85388008", +1460 => x"30547380", +1461 => x"0c873d0d", +1462 => x"04733076", +1463 => x"81325754", +1464 => x"dc397430", +1465 => x"55815673", +1466 => x"8025d238", +1467 => x"ec39fa3d", +1468 => x"0d787a57", +1469 => x"55805776", +1470 => x"7524a438", +1471 => x"759f2c54", +1472 => x"81537574", +1473 => x"32743152", +1474 => x"74519b3f", +1475 => x"80085476", +1476 => x"802e8538", +1477 => x"80083054", +1478 => x"73800c88", +1479 => x"3d0d0474", +1480 => x"30558157", +1481 => x"d739fc3d", +1482 => x"0d767853", +1483 => x"54815380", +1484 => x"74732652", +1485 => x"5572802e", +1486 => x"98387080", +1487 => x"2eab3880", +1488 => x"7224a638", +1489 => x"71107310", +1490 => x"75722653", +1491 => x"545272ea", +1492 => x"38735178", +1493 => x"83387451", +1494 => x"70800c86", +1495 => x"3d0d0472", +1496 => x"0a100a72", +1497 => x"0a100a53", +1498 => x"5372802e", +1499 => x"e4387174", +1500 => x"26ed3873", +1501 => x"72317574", +1502 => x"07740a10", +1503 => x"0a740a10", +1504 => x"0a555556", +1505 => x"54e33970", +1506 => x"70735280", +1507 => x"decc0851", +1508 => x"933f5050", +1509 => x"04707073", +1510 => x"5280decc", +1511 => x"085190ce", +1512 => x"3f505004", +1513 => x"f43d0d7e", +1514 => x"608b1170", +1515 => x"f8065b55", +1516 => x"555d7296", +1517 => x"26833890", +1518 => x"58807824", +1519 => x"74792607", +1520 => x"55805474", +1521 => x"742e0981", +1522 => x"0680ca38", +1523 => x"7c518d9e", +1524 => x"3f7783f7", +1525 => x"2680c538", +1526 => x"77832a70", +1527 => x"10101080", +1528 => x"d6c4058c", +1529 => x"11085858", +1530 => x"5475772e", +1531 => x"81f03884", +1532 => x"1608fc06", +1533 => x"8c170888", +1534 => x"1808718c", +1535 => x"120c8812", +1536 => x"0c5b7605", +1537 => x"84110881", +1538 => x"0784120c", +1539 => x"537c518c", +1540 => x"de3f8816", +1541 => x"5473800c", +1542 => x"8e3d0d04", +1543 => x"77892a78", +1544 => x"832a5854", +1545 => x"73802ebf", +1546 => x"3877862a", +1547 => x"b8055784", +1548 => x"7427b438", +1549 => x"80db1457", +1550 => x"947427ab", +1551 => x"38778c2a", +1552 => x"80ee0557", +1553 => x"80d47427", +1554 => x"9e38778f", +1555 => x"2a80f705", +1556 => x"5782d474", +1557 => x"27913877", +1558 => x"922a80fc", +1559 => x"05578ad4", +1560 => x"74278438", +1561 => x"80fe5776", +1562 => x"10101080", +1563 => x"d6c4058c", +1564 => x"11085653", +1565 => x"74732ea3", +1566 => x"38841508", +1567 => x"fc067079", +1568 => x"31555673", +1569 => x"8f2488e4", +1570 => x"38738025", +1571 => x"88e6388c", +1572 => x"15085574", +1573 => x"732e0981", +1574 => x"06df3881", +1575 => x"175980d6", +1576 => x"d4085675", +1577 => x"80d6cc2e", +1578 => x"82cc3884", +1579 => x"1608fc06", +1580 => x"70793155", +1581 => x"55738f24", +1582 => x"bb3880d6", +1583 => x"cc0b80d6", +1584 => x"d80c80d6", +1585 => x"cc0b80d6", +1586 => x"d40c8074", +1587 => x"2480db38", +1588 => x"74168411", +1589 => x"08810784", +1590 => x"120c53fe", +1591 => x"b0398816", +1592 => x"8c110857", +1593 => x"5975792e", +1594 => x"098106fe", +1595 => x"82388214", +1596 => x"59ffab39", +1597 => x"77167881", +1598 => x"0784180c", +1599 => x"7080d6d8", +1600 => x"0c7080d6", +1601 => x"d40c80d6", +1602 => x"cc0b8c12", +1603 => x"0c8c1108", +1604 => x"88120c74", +1605 => x"81078412", +1606 => x"0c740574", +1607 => x"710c5b7c", +1608 => x"518acc3f", +1609 => x"881654fd", +1610 => x"ec3983ff", +1611 => x"75278391", +1612 => x"3874892a", +1613 => x"75832a54", +1614 => x"5473802e", +1615 => x"bf387486", +1616 => x"2ab80553", +1617 => x"847427b4", +1618 => x"3880db14", +1619 => x"53947427", +1620 => x"ab38748c", +1621 => x"2a80ee05", +1622 => x"5380d474", +1623 => x"279e3874", +1624 => x"8f2a80f7", +1625 => x"055382d4", +1626 => x"74279138", +1627 => x"74922a80", +1628 => x"fc05538a", +1629 => x"d4742784", +1630 => x"3880fe53", +1631 => x"72101010", +1632 => x"80d6c405", +1633 => x"88110855", +1634 => x"5773772e", +1635 => x"868b3884", +1636 => x"1408fc06", +1637 => x"5b747b27", +1638 => x"8d388814", +1639 => x"08547377", +1640 => x"2e098106", +1641 => x"ea388c14", +1642 => x"0880d6c4", +1643 => x"0b840508", +1644 => x"718c190c", +1645 => x"7588190c", +1646 => x"7788130c", +1647 => x"5c57758c", +1648 => x"150c7853", +1649 => x"80792483", +1650 => x"98387282", +1651 => x"2c81712b", +1652 => x"5656747b", +1653 => x"2680ca38", +1654 => x"7a750657", +1655 => x"7682a338", +1656 => x"78fc0684", +1657 => x"05597410", +1658 => x"707c0655", +1659 => x"55738292", +1660 => x"38841959", +1661 => x"f13980d6", +1662 => x"c40b8405", +1663 => x"0879545b", +1664 => x"788025c6", +1665 => x"3882da39", +1666 => x"74097b06", +1667 => x"7080d6c4", +1668 => x"0b84050c", +1669 => x"5b741055", +1670 => x"747b2685", +1671 => x"387485bc", +1672 => x"3880d6c4", +1673 => x"0b880508", +1674 => x"70841208", +1675 => x"fc06707b", +1676 => x"317b7226", +1677 => x"8f722507", +1678 => x"5d575c5c", +1679 => x"5578802e", +1680 => x"80d93879", +1681 => x"1580d6bc", +1682 => x"08199011", +1683 => x"59545680", +1684 => x"d6b808ff", +1685 => x"2e8838a0", +1686 => x"8f13e080", +1687 => x"06577652", +1688 => x"7c51888c", +1689 => x"3f800854", +1690 => x"8008ff2e", +1691 => x"90388008", +1692 => x"762782a7", +1693 => x"387480d6", +1694 => x"c42e829f", +1695 => x"3880d6c4", +1696 => x"0b880508", +1697 => x"55841508", +1698 => x"fc067079", +1699 => x"31797226", +1700 => x"8f722507", +1701 => x"5d555a7a", +1702 => x"83f23877", +1703 => x"81078416", +1704 => x"0c771570", +1705 => x"80d6c40b", +1706 => x"88050c74", +1707 => x"81078412", +1708 => x"0c567c51", +1709 => x"87b93f88", +1710 => x"15547380", +1711 => x"0c8e3d0d", +1712 => x"0474832a", +1713 => x"70545480", +1714 => x"7424819b", +1715 => x"3872822c", +1716 => x"81712b80", +1717 => x"d6c80807", +1718 => x"7080d6c4", +1719 => x"0b84050c", +1720 => x"75101010", +1721 => x"80d6c405", +1722 => x"88110871", +1723 => x"8c1b0c70", +1724 => x"881b0c79", +1725 => x"88130c57", +1726 => x"555c5575", +1727 => x"8c150cfd", +1728 => x"c1397879", +1729 => x"10101080", +1730 => x"d6c40570", +1731 => x"565b5c8c", +1732 => x"14085675", +1733 => x"742ea338", +1734 => x"841608fc", +1735 => x"06707931", +1736 => x"5853768f", +1737 => x"2483f138", +1738 => x"76802584", +1739 => x"af388c16", +1740 => x"08567574", +1741 => x"2e098106", +1742 => x"df388814", +1743 => x"811a7083", +1744 => x"06555a54", +1745 => x"72c9387b", +1746 => x"83065675", +1747 => x"802efdb8", +1748 => x"38ff1cf8", +1749 => x"1b5b5c88", +1750 => x"1a087a2e", +1751 => x"ea38fdb5", +1752 => x"39831953", +1753 => x"fce43983", +1754 => x"1470822c", +1755 => x"81712b80", +1756 => x"d6c80807", +1757 => x"7080d6c4", +1758 => x"0b84050c", +1759 => x"76101010", +1760 => x"80d6c405", +1761 => x"88110871", +1762 => x"8c1c0c70", +1763 => x"881c0c7a", +1764 => x"88130c58", +1765 => x"535d5653", +1766 => x"fee13980", +1767 => x"d6880817", +1768 => x"59800876", +1769 => x"2e818b38", +1770 => x"80d6b808", +1771 => x"ff2e848e", +1772 => x"38737631", +1773 => x"1980d688", +1774 => x"0c738706", +1775 => x"70565372", +1776 => x"802e8838", +1777 => x"88733170", +1778 => x"15555576", +1779 => x"149fff06", +1780 => x"a0807131", +1781 => x"1670547e", +1782 => x"53515385", +1783 => x"933f8008", +1784 => x"568008ff", +1785 => x"2e819e38", +1786 => x"80d68808", +1787 => x"137080d6", +1788 => x"880c7475", +1789 => x"80d6c40b", +1790 => x"88050c77", +1791 => x"76311581", +1792 => x"07555659", +1793 => x"7a80d6c4", +1794 => x"2e83c038", +1795 => x"798f2682", +1796 => x"ef38810b", +1797 => x"84150c84", +1798 => x"1508fc06", +1799 => x"70793179", +1800 => x"72268f72", +1801 => x"25075d55", +1802 => x"5a7a802e", +1803 => x"fced3880", +1804 => x"db398008", +1805 => x"9fff0655", +1806 => x"74feed38", +1807 => x"7880d688", +1808 => x"0c80d6c4", +1809 => x"0b880508", +1810 => x"7a188107", +1811 => x"84120c55", +1812 => x"80d6b408", +1813 => x"79278638", +1814 => x"7880d6b4", +1815 => x"0c80d6b0", +1816 => x"087927fc", +1817 => x"a0387880", +1818 => x"d6b00c84", +1819 => x"1508fc06", +1820 => x"70793179", +1821 => x"72268f72", +1822 => x"25075d55", +1823 => x"5a7a802e", +1824 => x"fc993888", +1825 => x"39807457", +1826 => x"53fedd39", +1827 => x"7c5183df", +1828 => x"3f800b80", +1829 => x"0c8e3d0d", +1830 => x"04807324", +1831 => x"a5387282", +1832 => x"2c81712b", +1833 => x"80d6c808", +1834 => x"077080d6", +1835 => x"c40b8405", +1836 => x"0c5c5a76", +1837 => x"8c170c73", +1838 => x"88170c75", +1839 => x"88180cf9", +1840 => x"fd398313", +1841 => x"70822c81", +1842 => x"712b80d6", +1843 => x"c8080770", +1844 => x"80d6c40b", +1845 => x"84050c5d", +1846 => x"5b53d839", +1847 => x"7a75065c", +1848 => x"7bfc9f38", +1849 => x"84197510", +1850 => x"5659f139", +1851 => x"ff178105", +1852 => x"59f7ab39", +1853 => x"8c150888", +1854 => x"1608718c", +1855 => x"120c8812", +1856 => x"0c597515", +1857 => x"84110881", +1858 => x"0784120c", +1859 => x"587c5182", +1860 => x"de3f8815", +1861 => x"54fba339", +1862 => x"77167881", +1863 => x"0784180c", +1864 => x"8c170888", +1865 => x"1808718c", +1866 => x"120c8812", +1867 => x"0c5c7080", +1868 => x"d6d80c70", +1869 => x"80d6d40c", +1870 => x"80d6cc0b", +1871 => x"8c120c8c", +1872 => x"11088812", +1873 => x"0c778107", +1874 => x"84120c77", +1875 => x"0577710c", +1876 => x"557c5182", +1877 => x"9a3f8816", +1878 => x"54f5ba39", +1879 => x"72168411", +1880 => x"08810784", +1881 => x"120c588c", +1882 => x"16088817", +1883 => x"08718c12", +1884 => x"0c88120c", +1885 => x"577c5181", +1886 => x"f63f8816", +1887 => x"54f59639", +1888 => x"7284150c", +1889 => x"f41af806", +1890 => x"70841d08", +1891 => x"81060784", +1892 => x"1d0c701c", +1893 => x"5556850b", +1894 => x"84150c85", +1895 => x"0b88150c", +1896 => x"8f7627fd", +1897 => x"ab38881b", +1898 => x"527c5184", +1899 => x"c13f80d6", +1900 => x"c40b8805", +1901 => x"0880d688", +1902 => x"085a55fd", +1903 => x"93397880", +1904 => x"d6880c73", +1905 => x"80d6b80c", +1906 => x"fbef3972", +1907 => x"84150cfc", +1908 => x"ff39fb3d", +1909 => x"0d77707a", +1910 => x"7c585553", +1911 => x"568f7527", +1912 => x"80e63872", +1913 => x"76078306", +1914 => x"517080dc", +1915 => x"38757352", +1916 => x"54707084", +1917 => x"05520874", +1918 => x"70840556", +1919 => x"0c737170", +1920 => x"84055308", +1921 => x"71708405", +1922 => x"530c7170", +1923 => x"84055308", +1924 => x"71708405", +1925 => x"530c7170", +1926 => x"84055308", +1927 => x"71708405", +1928 => x"530cf016", +1929 => x"5654748f", +1930 => x"26c73883", +1931 => x"75279538", +1932 => x"70708405", +1933 => x"52087470", +1934 => x"8405560c", +1935 => x"fc155574", +1936 => x"8326ed38", +1937 => x"73715452", +1938 => x"ff155170", +1939 => x"ff2e9838", +1940 => x"72708105", +1941 => x"54337270", +1942 => x"81055434", +1943 => x"ff115170", +1944 => x"ff2e0981", +1945 => x"06ea3875", +1946 => x"800c873d", +1947 => x"0d040404", +1948 => x"70707070", +1949 => x"800b81b6", +1950 => x"9c0c7651", +1951 => x"87cc3f80", +1952 => x"08538008", +1953 => x"ff2e8938", +1954 => x"72800c50", +1955 => x"50505004", +1956 => x"81b69c08", +1957 => x"5473802e", +1958 => x"ef387574", +1959 => x"710c5272", +1960 => x"800c5050", +1961 => x"505004fb", +1962 => x"3d0d7779", +1963 => x"70720783", +1964 => x"06535452", +1965 => x"70933871", +1966 => x"73730854", +1967 => x"56547173", +1968 => x"082e80c4", +1969 => x"38737554", +1970 => x"52713370", +1971 => x"81ff0652", +1972 => x"5470802e", +1973 => x"9d387233", +1974 => x"5570752e", +1975 => x"09810695", +1976 => x"38811281", +1977 => x"14713370", +1978 => x"81ff0654", +1979 => x"56545270", +1980 => x"e5387233", +1981 => x"557381ff", +1982 => x"067581ff", +1983 => x"06717131", +1984 => x"800c5552", +1985 => x"873d0d04", +1986 => x"7109f7fb", +1987 => x"fdff1306", +1988 => x"f8848281", +1989 => x"80065271", +1990 => x"97388414", +1991 => x"84167108", +1992 => x"54565471", +1993 => x"75082ee0", +1994 => x"38737554", +1995 => x"52ff9a39", +1996 => x"800b800c", +1997 => x"873d0d04", +1998 => x"fb3d0d77", +1999 => x"705256fe", +2000 => x"ad3f80d6", +2001 => x"c40b8805", +2002 => x"08841108", +2003 => x"fc06707b", +2004 => x"319fef05", +2005 => x"e08006e0", +2006 => x"80055255", +2007 => x"55a08075", +2008 => x"24943880", +2009 => x"527551fe", +2010 => x"873f80d6", +2011 => x"cc081453", +2012 => x"7280082e", +2013 => x"8f387551", +2014 => x"fdf53f80", +2015 => x"5372800c", +2016 => x"873d0d04", +2017 => x"74305275", +2018 => x"51fde53f", +2019 => x"8008ff2e", +2020 => x"a83880d6", +2021 => x"c40b8805", +2022 => x"08747631", +2023 => x"81078412", +2024 => x"0c5380d6", +2025 => x"88087531", +2026 => x"80d6880c", +2027 => x"7551fdbf", +2028 => x"3f810b80", +2029 => x"0c873d0d", +2030 => x"04805275", +2031 => x"51fdb13f", +2032 => x"80d6c40b", +2033 => x"88050880", +2034 => x"08713154", +2035 => x"548f7325", +2036 => x"ffa43880", +2037 => x"0880d6b8", +2038 => x"083180d6", +2039 => x"880c7281", +2040 => x"0784150c", +2041 => x"7551fd87", +2042 => x"3f8053ff", +2043 => x"9039f73d", +2044 => x"0d7b7d54", +2045 => x"5a72802e", +2046 => x"82833879", +2047 => x"51fcef3f", +2048 => x"f8138411", +2049 => x"0870fe06", +2050 => x"70138411", +2051 => x"08fc065c", +2052 => x"57585457", +2053 => x"80d6cc08", +2054 => x"742e82de", +2055 => x"38778415", +2056 => x"0c807381", +2057 => x"06565974", +2058 => x"792e81d5", +2059 => x"38771484", +2060 => x"11088106", +2061 => x"565374a0", +2062 => x"38771656", +2063 => x"7881e638", +2064 => x"88140855", +2065 => x"7480d6cc", +2066 => x"2e82f938", +2067 => x"8c140870", +2068 => x"8c170c75", +2069 => x"88120c58", +2070 => x"75810784", +2071 => x"180c7517", +2072 => x"76710c54", +2073 => x"78819138", +2074 => x"83ff7627", +2075 => x"81c83875", +2076 => x"892a7683", +2077 => x"2a545473", +2078 => x"802ebf38", +2079 => x"75862ab8", +2080 => x"05538474", +2081 => x"27b43880", +2082 => x"db145394", +2083 => x"7427ab38", +2084 => x"758c2a80", +2085 => x"ee055380", +2086 => x"d474279e", +2087 => x"38758f2a", +2088 => x"80f70553", +2089 => x"82d47427", +2090 => x"91387592", +2091 => x"2a80fc05", +2092 => x"538ad474", +2093 => x"27843880", +2094 => x"fe537210", +2095 => x"101080d6", +2096 => x"c4058811", +2097 => x"08555573", +2098 => x"752e82bf", +2099 => x"38841408", +2100 => x"fc065975", +2101 => x"79278d38", +2102 => x"88140854", +2103 => x"73752e09", +2104 => x"8106ea38", +2105 => x"8c140870", +2106 => x"8c190c74", +2107 => x"88190c77", +2108 => x"88120c55", +2109 => x"768c150c", +2110 => x"7951faf3", +2111 => x"3f8b3d0d", +2112 => x"04760877", +2113 => x"71315876", +2114 => x"05881808", +2115 => x"56567480", +2116 => x"d6cc2e80", +2117 => x"e0388c17", +2118 => x"08708c17", +2119 => x"0c758812", +2120 => x"0c53fe89", +2121 => x"39881408", +2122 => x"8c150870", +2123 => x"8c130c59", +2124 => x"88190cfe", +2125 => x"a3397583", +2126 => x"2a705454", +2127 => x"80742481", +2128 => x"98387282", +2129 => x"2c81712b", +2130 => x"80d6c808", +2131 => x"0780d6c4", +2132 => x"0b84050c", +2133 => x"74101010", +2134 => x"80d6c405", +2135 => x"88110871", +2136 => x"8c1b0c70", +2137 => x"881b0c79", +2138 => x"88130c56", +2139 => x"5a55768c", +2140 => x"150cff84", +2141 => x"398159fd", +2142 => x"b4397716", +2143 => x"73810654", +2144 => x"55729838", +2145 => x"76087771", +2146 => x"31587505", +2147 => x"8c180888", +2148 => x"1908718c", +2149 => x"120c8812", +2150 => x"0c555574", +2151 => x"81078418", +2152 => x"0c7680d6", +2153 => x"c40b8805", +2154 => x"0c80d6c0", +2155 => x"087526fe", +2156 => x"c73880d6", +2157 => x"bc085279", +2158 => x"51fafd3f", +2159 => x"7951f9af", +2160 => x"3ffeba39", +2161 => x"81778c17", +2162 => x"0c778817", +2163 => x"0c758c19", +2164 => x"0c758819", +2165 => x"0c59fd80", +2166 => x"39831470", +2167 => x"822c8171", +2168 => x"2b80d6c8", +2169 => x"080780d6", +2170 => x"c40b8405", +2171 => x"0c751010", +2172 => x"1080d6c4", +2173 => x"05881108", +2174 => x"718c1c0c", +2175 => x"70881c0c", +2176 => x"7a88130c", +2177 => x"575b5653", +2178 => x"fee43980", +2179 => x"7324a338", +2180 => x"72822c81", +2181 => x"712b80d6", +2182 => x"c8080780", +2183 => x"d6c40b84", +2184 => x"050c5874", +2185 => x"8c180c73", +2186 => x"88180c76", +2187 => x"88160cfd", +2188 => x"c3398313", +2189 => x"70822c81", +2190 => x"712b80d6", +2191 => x"c8080780", +2192 => x"d6c40b84", +2193 => x"050c5953", +2194 => x"da397070", +2195 => x"7080e5f4", +2196 => x"08893881", +2197 => x"b6a00b80", +2198 => x"e5f40c80", +2199 => x"e5f40875", +2200 => x"115252ff", +2201 => x"537087fb", +2202 => x"80802688", +2203 => x"387080e5", +2204 => x"f40c7153", +2205 => x"72800c50", +2206 => x"505004fd", +2207 => x"3d0d800b", +2208 => x"80d5f408", +2209 => x"54547281", +2210 => x"2e9b3873", +2211 => x"80e5f80c", +2212 => x"c3ee3fc2", +2213 => x"eb3f80e5", +2214 => x"cc528151", +2215 => x"cc933f80", +2216 => x"085180dd", +2217 => x"3f7280e5", +2218 => x"f80cc3d4", +2219 => x"3fc2d13f", +2220 => x"80e5cc52", +2221 => x"8151cbf9", +2222 => x"3f800851", +2223 => x"80c33f00", +2224 => x"ff3900ff", +2225 => x"39f43d0d", +2226 => x"7e80e5ec", +2227 => x"08700870", +2228 => x"81ff0692", +2229 => x"3df80555", +2230 => x"515a5759", +2231 => x"c48f3f80", +2232 => x"5477557b", +2233 => x"7d585276", +2234 => x"538e3df0", +2235 => x"0551de8e", +2236 => x"3f797b58", +2237 => x"790c7684", +2238 => x"1a0c7880", +2239 => x"0c8e3d0d", +2240 => x"04f73d0d", +2241 => x"7b80decc", +2242 => x"0882c811", +2243 => x"085a545a", +2244 => x"77802e80", +2245 => x"da388188", +2246 => x"18841908", +2247 => x"ff058171", +2248 => x"2b595559", +2249 => x"80742480", +2250 => x"ea388074", +2251 => x"24b53873", +2252 => x"822b7811", +2253 => x"88055656", +2254 => x"81801908", +2255 => x"77065372", +2256 => x"802eb638", +2257 => x"78167008", +2258 => x"53537951", +2259 => x"74085372", +2260 => x"2dff14fc", +2261 => x"17fc1779", +2262 => x"812c5a57", +2263 => x"57547380", +2264 => x"25d63877", +2265 => x"085877ff", +2266 => x"ad3880de", +2267 => x"cc0853bc", +2268 => x"1308a538", +2269 => x"7951fec7", +2270 => x"3f740853", +2271 => x"722dff14", +2272 => x"fc17fc17", +2273 => x"79812c5a", +2274 => x"57575473", +2275 => x"8025ffa8", +2276 => x"38d13980", +2277 => x"57ff9339", +2278 => x"7251bc13", +2279 => x"0854732d", +2280 => x"7951fe9b", +2281 => x"3f707080", +2282 => x"e5d40bfc", +2283 => x"05700852", +2284 => x"5270ff2e", +2285 => x"9138702d", +2286 => x"fc127008", +2287 => x"525270ff", +2288 => x"2e098106", +2289 => x"f1385050", +2290 => x"0404c2ff", +2291 => x"3f040000", +2292 => x"00000040", +2293 => x"30313233", +2294 => x"34353637", +2295 => x"38390000", +2296 => x"44485259", +2297 => x"53544f4e", +2298 => x"45205052", +2299 => x"4f475241", +2300 => x"4d2c2053", +2301 => x"4f4d4520", +2302 => x"53545249", +2303 => x"4e470000", +2304 => x"44485259", +2305 => x"53544f4e", +2306 => x"45205052", +2307 => x"4f475241", +2308 => x"4d2c2031", +2309 => x"27535420", +2310 => x"53545249", +2311 => x"4e470000", +2312 => x"44687279", +2313 => x"73746f6e", +2314 => x"65204265", +2315 => x"6e63686d", +2316 => x"61726b2c", +2317 => x"20566572", +2318 => x"73696f6e", +2319 => x"20322e31", +2320 => x"20284c61", +2321 => x"6e677561", +2322 => x"67653a20", +2323 => x"43290a00", +2324 => x"50726f67", +2325 => x"72616d20", +2326 => x"636f6d70", +2327 => x"696c6564", +2328 => x"20776974", +2329 => x"68202772", +2330 => x"65676973", +2331 => x"74657227", +2332 => x"20617474", +2333 => x"72696275", +2334 => x"74650a00", +2335 => x"45786563", +2336 => x"7574696f", +2337 => x"6e207374", +2338 => x"61727473", +2339 => x"2c202564", +2340 => x"2072756e", +2341 => x"73207468", +2342 => x"726f7567", +2343 => x"68204468", +2344 => x"72797374", +2345 => x"6f6e650a", +2346 => x"00000000", +2347 => x"44485259", +2348 => x"53544f4e", +2349 => x"45205052", +2350 => x"4f475241", +2351 => x"4d2c2032", +2352 => x"274e4420", +2353 => x"53545249", +2354 => x"4e470000", +2355 => x"45786563", +2356 => x"7574696f", +2357 => x"6e20656e", +2358 => x"64730a00", +2359 => x"46696e61", +2360 => x"6c207661", +2361 => x"6c756573", +2362 => x"206f6620", +2363 => x"74686520", +2364 => x"76617269", +2365 => x"61626c65", +2366 => x"73207573", +2367 => x"65642069", +2368 => x"6e207468", +2369 => x"65206265", +2370 => x"6e63686d", +2371 => x"61726b3a", +2372 => x"0a000000", +2373 => x"496e745f", +2374 => x"476c6f62", +2375 => x"3a202020", +2376 => x"20202020", +2377 => x"20202020", +2378 => x"2025640a", +2379 => x"00000000", +2380 => x"20202020", +2381 => x"20202020", +2382 => x"73686f75", +2383 => x"6c642062", +2384 => x"653a2020", +2385 => x"2025640a", +2386 => x"00000000", +2387 => x"426f6f6c", +2388 => x"5f476c6f", +2389 => x"623a2020", +2390 => x"20202020", +2391 => x"20202020", +2392 => x"2025640a", +2393 => x"00000000", +2394 => x"43685f31", +2395 => x"5f476c6f", +2396 => x"623a2020", +2397 => x"20202020", +2398 => x"20202020", +2399 => x"2025630a", +2400 => x"00000000", +2401 => x"20202020", +2402 => x"20202020", +2403 => x"73686f75", +2404 => x"6c642062", +2405 => x"653a2020", +2406 => x"2025630a", +2407 => x"00000000", +2408 => x"43685f32", +2409 => x"5f476c6f", +2410 => x"623a2020", +2411 => x"20202020", +2412 => x"20202020", +2413 => x"2025630a", +2414 => x"00000000", +2415 => x"4172725f", +2416 => x"315f476c", +2417 => x"6f625b38", +2418 => x"5d3a2020", +2419 => x"20202020", +2420 => x"2025640a", +2421 => x"00000000", +2422 => x"4172725f", +2423 => x"325f476c", +2424 => x"6f625b38", +2425 => x"5d5b375d", +2426 => x"3a202020", +2427 => x"2025640a", +2428 => x"00000000", +2429 => x"20202020", +2430 => x"20202020", +2431 => x"73686f75", +2432 => x"6c642062", +2433 => x"653a2020", +2434 => x"204e756d", +2435 => x"6265725f", +2436 => x"4f665f52", +2437 => x"756e7320", +2438 => x"2b203130", +2439 => x"0a000000", +2440 => x"5074725f", +2441 => x"476c6f62", +2442 => x"2d3e0a00", +2443 => x"20205074", +2444 => x"725f436f", +2445 => x"6d703a20", +2446 => x"20202020", +2447 => x"20202020", +2448 => x"2025640a", +2449 => x"00000000", +2450 => x"20202020", +2451 => x"20202020", +2452 => x"73686f75", +2453 => x"6c642062", +2454 => x"653a2020", +2455 => x"2028696d", +2456 => x"706c656d", +2457 => x"656e7461", +2458 => x"74696f6e", +2459 => x"2d646570", +2460 => x"656e6465", +2461 => x"6e74290a", +2462 => x"00000000", +2463 => x"20204469", +2464 => x"7363723a", +2465 => x"20202020", +2466 => x"20202020", +2467 => x"20202020", +2468 => x"2025640a", +2469 => x"00000000", +2470 => x"2020456e", +2471 => x"756d5f43", +2472 => x"6f6d703a", +2473 => x"20202020", +2474 => x"20202020", +2475 => x"2025640a", +2476 => x"00000000", +2477 => x"2020496e", +2478 => x"745f436f", +2479 => x"6d703a20", +2480 => x"20202020", +2481 => x"20202020", +2482 => x"2025640a", +2483 => x"00000000", +2484 => x"20205374", +2485 => x"725f436f", +2486 => x"6d703a20", +2487 => x"20202020", +2488 => x"20202020", +2489 => x"2025730a", +2490 => x"00000000", +2491 => x"20202020", +2492 => x"20202020", +2493 => x"73686f75", +2494 => x"6c642062", +2495 => x"653a2020", +2496 => x"20444852", +2497 => x"5953544f", +2498 => x"4e452050", +2499 => x"524f4752", +2500 => x"414d2c20", +2501 => x"534f4d45", +2502 => x"20535452", +2503 => x"494e470a", +2504 => x"00000000", +2505 => x"4e657874", +2506 => x"5f507472", +2507 => x"5f476c6f", +2508 => x"622d3e0a", +2509 => x"00000000", +2510 => x"20202020", +2511 => x"20202020", +2512 => x"73686f75", +2513 => x"6c642062", +2514 => x"653a2020", +2515 => x"2028696d", +2516 => x"706c656d", +2517 => x"656e7461", +2518 => x"74696f6e", +2519 => x"2d646570", +2520 => x"656e6465", +2521 => x"6e74292c", +2522 => x"2073616d", +2523 => x"65206173", +2524 => x"2061626f", +2525 => x"76650a00", +2526 => x"496e745f", +2527 => x"315f4c6f", +2528 => x"633a2020", +2529 => x"20202020", +2530 => x"20202020", +2531 => x"2025640a", +2532 => x"00000000", +2533 => x"496e745f", +2534 => x"325f4c6f", +2535 => x"633a2020", +2536 => x"20202020", +2537 => x"20202020", +2538 => x"2025640a", +2539 => x"00000000", +2540 => x"496e745f", +2541 => x"335f4c6f", +2542 => x"633a2020", +2543 => x"20202020", +2544 => x"20202020", +2545 => x"2025640a", +2546 => x"00000000", +2547 => x"456e756d", +2548 => x"5f4c6f63", +2549 => x"3a202020", +2550 => x"20202020", +2551 => x"20202020", +2552 => x"2025640a", +2553 => x"00000000", +2554 => x"5374725f", +2555 => x"315f4c6f", +2556 => x"633a2020", +2557 => x"20202020", +2558 => x"20202020", +2559 => x"2025730a", +2560 => x"00000000", +2561 => x"20202020", +2562 => x"20202020", +2563 => x"73686f75", +2564 => x"6c642062", +2565 => x"653a2020", +2566 => x"20444852", +2567 => x"5953544f", +2568 => x"4e452050", +2569 => x"524f4752", +2570 => x"414d2c20", +2571 => x"31275354", +2572 => x"20535452", +2573 => x"494e470a", +2574 => x"00000000", +2575 => x"5374725f", +2576 => x"325f4c6f", +2577 => x"633a2020", +2578 => x"20202020", +2579 => x"20202020", +2580 => x"2025730a", +2581 => x"00000000", +2582 => x"20202020", +2583 => x"20202020", +2584 => x"73686f75", +2585 => x"6c642062", +2586 => x"653a2020", +2587 => x"20444852", +2588 => x"5953544f", +2589 => x"4e452050", +2590 => x"524f4752", +2591 => x"414d2c20", +2592 => x"32274e44", +2593 => x"20535452", +2594 => x"494e470a", +2595 => x"00000000", +2596 => x"55736572", +2597 => x"2074696d", +2598 => x"653a2025", +2599 => x"640a0000", +2600 => x"4d696372", +2601 => x"6f736563", +2602 => x"6f6e6473", +2603 => x"20666f72", +2604 => x"206f6e65", +2605 => x"2072756e", +2606 => x"20746872", +2607 => x"6f756768", +2608 => x"20446872", +2609 => x"7973746f", +2610 => x"6e653a20", +2611 => x"00000000", +2612 => x"2564200a", +2613 => x"00000000", +2614 => x"44687279", +2615 => x"73746f6e", +2616 => x"65732070", +2617 => x"65722053", +2618 => x"65636f6e", +2619 => x"643a2020", +2620 => x"20202020", +2621 => x"20202020", +2622 => x"20202020", +2623 => x"20202020", +2624 => x"20202020", +2625 => x"00000000", +2626 => x"56415820", +2627 => x"4d495053", +2628 => x"20726174", +2629 => x"696e6720", +2630 => x"2a203130", +2631 => x"3030203d", +2632 => x"20256420", +2633 => x"0a000000", +2634 => x"50726f67", +2635 => x"72616d20", +2636 => x"636f6d70", +2637 => x"696c6564", +2638 => x"20776974", +2639 => x"686f7574", +2640 => x"20277265", +2641 => x"67697374", +2642 => x"65722720", +2643 => x"61747472", +2644 => x"69627574", +2645 => x"650a0000", +2646 => x"4d656173", +2647 => x"75726564", +2648 => x"2074696d", +2649 => x"6520746f", +2650 => x"6f20736d", +2651 => x"616c6c20", +2652 => x"746f206f", +2653 => x"62746169", +2654 => x"6e206d65", +2655 => x"616e696e", +2656 => x"6766756c", +2657 => x"20726573", +2658 => x"756c7473", +2659 => x"0a000000", +2660 => x"506c6561", +2661 => x"73652069", +2662 => x"6e637265", +2663 => x"61736520", +2664 => x"6e756d62", +2665 => x"6572206f", +2666 => x"66207275", +2667 => x"6e730a00", +2668 => x"44485259", +2669 => x"53544f4e", +2670 => x"45205052", +2671 => x"4f475241", +2672 => x"4d2c2033", +2673 => x"27524420", +2674 => x"53545249", +2675 => x"4e470000", +2676 => x"00010202", +2677 => x"03030303", +2678 => x"04040404", +2679 => x"04040404", +2680 => x"05050505", +2681 => x"05050505", +2682 => x"05050505", +2683 => x"05050505", +2684 => x"06060606", +2685 => x"06060606", +2686 => x"06060606", +2687 => x"06060606", +2688 => x"06060606", +2689 => x"06060606", +2690 => x"06060606", +2691 => x"06060606", +2692 => x"07070707", +2693 => x"07070707", +2694 => x"07070707", +2695 => x"07070707", +2696 => x"07070707", +2697 => x"07070707", +2698 => x"07070707", +2699 => x"07070707", +2700 => x"07070707", +2701 => x"07070707", +2702 => x"07070707", +2703 => x"07070707", +2704 => x"07070707", +2705 => x"07070707", +2706 => x"07070707", +2707 => x"07070707", +2708 => x"08080808", +2709 => x"08080808", +2710 => x"08080808", +2711 => x"08080808", +2712 => x"08080808", +2713 => x"08080808", +2714 => x"08080808", +2715 => x"08080808", +2716 => x"08080808", +2717 => x"08080808", +2718 => x"08080808", +2719 => x"08080808", +2720 => x"08080808", +2721 => x"08080808", +2722 => x"08080808", +2723 => x"08080808", +2724 => x"08080808", +2725 => x"08080808", +2726 => x"08080808", +2727 => x"08080808", +2728 => x"08080808", +2729 => x"08080808", +2730 => x"08080808", +2731 => x"08080808", +2732 => x"08080808", +2733 => x"08080808", +2734 => x"08080808", +2735 => x"08080808", +2736 => x"08080808", +2737 => x"08080808", +2738 => x"08080808", +2739 => x"08080808", +2740 => x"43000000", +2741 => x"64756d6d", +2742 => x"792e6578", +2743 => x"65000000", +2744 => x"00ffffff", +2745 => x"ff00ffff", +2746 => x"ffff00ff", +2747 => x"ffffff00", +2748 => x"00000000", +2749 => x"00000000", +2750 => x"00000000", +2751 => x"000032dc", +2752 => x"0000c350", +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"ffffffff", +2767 => x"00000000", +2768 => x"00020000", +2769 => x"00000000", +2770 => x"00000000", +2771 => x"00002b44", +2772 => x"00002b44", +2773 => x"00002b4c", +2774 => x"00002b4c", +2775 => x"00002b54", +2776 => x"00002b54", +2777 => x"00002b5c", +2778 => x"00002b5c", +2779 => x"00002b64", +2780 => x"00002b64", +2781 => x"00002b6c", +2782 => x"00002b6c", +2783 => x"00002b74", +2784 => x"00002b74", +2785 => x"00002b7c", +2786 => x"00002b7c", +2787 => x"00002b84", +2788 => x"00002b84", +2789 => x"00002b8c", +2790 => x"00002b8c", +2791 => x"00002b94", +2792 => x"00002b94", +2793 => x"00002b9c", +2794 => x"00002b9c", +2795 => x"00002ba4", +2796 => x"00002ba4", +2797 => x"00002bac", +2798 => x"00002bac", +2799 => x"00002bb4", +2800 => x"00002bb4", +2801 => x"00002bbc", +2802 => x"00002bbc", +2803 => x"00002bc4", +2804 => x"00002bc4", +2805 => x"00002bcc", +2806 => x"00002bcc", +2807 => x"00002bd4", +2808 => x"00002bd4", +2809 => x"00002bdc", +2810 => x"00002bdc", +2811 => x"00002be4", +2812 => x"00002be4", +2813 => x"00002bec", +2814 => x"00002bec", +2815 => x"00002bf4", +2816 => x"00002bf4", +2817 => x"00002bfc", +2818 => x"00002bfc", +2819 => x"00002c04", +2820 => x"00002c04", +2821 => x"00002c0c", +2822 => x"00002c0c", +2823 => x"00002c14", +2824 => x"00002c14", +2825 => x"00002c1c", +2826 => x"00002c1c", +2827 => x"00002c24", +2828 => x"00002c24", +2829 => x"00002c2c", +2830 => x"00002c2c", +2831 => x"00002c34", +2832 => x"00002c34", +2833 => x"00002c3c", +2834 => x"00002c3c", +2835 => x"00002c44", +2836 => x"00002c44", +2837 => x"00002c4c", +2838 => x"00002c4c", +2839 => x"00002c54", +2840 => x"00002c54", +2841 => x"00002c5c", +2842 => x"00002c5c", +2843 => x"00002c64", +2844 => x"00002c64", +2845 => x"00002c6c", +2846 => x"00002c6c", +2847 => x"00002c74", +2848 => x"00002c74", +2849 => x"00002c7c", +2850 => x"00002c7c", +2851 => x"00002c84", +2852 => x"00002c84", +2853 => x"00002c8c", +2854 => x"00002c8c", +2855 => x"00002c94", +2856 => x"00002c94", +2857 => x"00002c9c", +2858 => x"00002c9c", +2859 => x"00002ca4", +2860 => x"00002ca4", +2861 => x"00002cac", +2862 => x"00002cac", +2863 => x"00002cb4", +2864 => x"00002cb4", +2865 => x"00002cbc", +2866 => x"00002cbc", +2867 => x"00002cc4", +2868 => x"00002cc4", +2869 => x"00002ccc", +2870 => x"00002ccc", +2871 => x"00002cd4", +2872 => x"00002cd4", +2873 => x"00002cdc", +2874 => x"00002cdc", +2875 => x"00002ce4", +2876 => x"00002ce4", +2877 => x"00002cec", +2878 => x"00002cec", +2879 => x"00002cf4", +2880 => x"00002cf4", +2881 => x"00002cfc", +2882 => x"00002cfc", +2883 => x"00002d04", +2884 => x"00002d04", +2885 => x"00002d0c", +2886 => x"00002d0c", +2887 => x"00002d14", +2888 => x"00002d14", +2889 => x"00002d1c", +2890 => x"00002d1c", +2891 => x"00002d24", +2892 => x"00002d24", +2893 => x"00002d2c", +2894 => x"00002d2c", +2895 => x"00002d34", +2896 => x"00002d34", +2897 => x"00002d3c", +2898 => x"00002d3c", +2899 => x"00002d44", +2900 => x"00002d44", +2901 => x"00002d4c", +2902 => x"00002d4c", +2903 => x"00002d54", +2904 => x"00002d54", +2905 => x"00002d5c", +2906 => x"00002d5c", +2907 => x"00002d64", +2908 => x"00002d64", +2909 => x"00002d6c", +2910 => x"00002d6c", +2911 => x"00002d74", +2912 => x"00002d74", +2913 => x"00002d7c", +2914 => x"00002d7c", +2915 => x"00002d84", +2916 => x"00002d84", +2917 => x"00002d8c", +2918 => x"00002d8c", +2919 => x"00002d94", +2920 => x"00002d94", +2921 => x"00002d9c", +2922 => x"00002d9c", +2923 => x"00002da4", +2924 => x"00002da4", +2925 => x"00002dac", +2926 => x"00002dac", +2927 => x"00002db4", +2928 => x"00002db4", +2929 => x"00002dbc", +2930 => x"00002dbc", +2931 => x"00002dc4", +2932 => x"00002dc4", +2933 => x"00002dcc", +2934 => x"00002dcc", +2935 => x"00002dd4", +2936 => x"00002dd4", +2937 => x"00002ddc", +2938 => x"00002ddc", +2939 => x"00002de4", +2940 => x"00002de4", +2941 => x"00002dec", +2942 => x"00002dec", +2943 => x"00002df4", +2944 => x"00002df4", +2945 => x"00002dfc", +2946 => x"00002dfc", +2947 => x"00002e04", +2948 => x"00002e04", +2949 => x"00002e0c", +2950 => x"00002e0c", +2951 => x"00002e14", +2952 => x"00002e14", +2953 => x"00002e1c", +2954 => x"00002e1c", +2955 => x"00002e24", +2956 => x"00002e24", +2957 => x"00002e2c", +2958 => x"00002e2c", +2959 => x"00002e34", +2960 => x"00002e34", +2961 => x"00002e3c", +2962 => x"00002e3c", +2963 => x"00002e44", +2964 => x"00002e44", +2965 => x"00002e4c", +2966 => x"00002e4c", +2967 => x"00002e54", +2968 => x"00002e54", +2969 => x"00002e5c", +2970 => x"00002e5c", +2971 => x"00002e64", +2972 => x"00002e64", +2973 => x"00002e6c", +2974 => x"00002e6c", +2975 => x"00002e74", +2976 => x"00002e74", +2977 => x"00002e7c", +2978 => x"00002e7c", +2979 => x"00002e84", +2980 => x"00002e84", +2981 => x"00002e8c", +2982 => x"00002e8c", +2983 => x"00002e94", +2984 => x"00002e94", +2985 => x"00002e9c", +2986 => x"00002e9c", +2987 => x"00002ea4", +2988 => x"00002ea4", +2989 => x"00002eac", +2990 => x"00002eac", +2991 => x"00002eb4", +2992 => x"00002eb4", +2993 => x"00002ebc", +2994 => x"00002ebc", +2995 => x"00002ec4", +2996 => x"00002ec4", +2997 => x"00002ecc", +2998 => x"00002ecc", +2999 => x"00002ed4", +3000 => x"00002ed4", +3001 => x"00002edc", +3002 => x"00002edc", +3003 => x"00002ee4", +3004 => x"00002ee4", +3005 => x"00002eec", +3006 => x"00002eec", +3007 => x"00002ef4", +3008 => x"00002ef4", +3009 => x"00002efc", +3010 => x"00002efc", +3011 => x"00002f04", +3012 => x"00002f04", +3013 => x"00002f0c", +3014 => x"00002f0c", +3015 => x"00002f14", +3016 => x"00002f14", +3017 => x"00002f1c", +3018 => x"00002f1c", +3019 => x"00002f24", +3020 => x"00002f24", +3021 => x"00002f2c", +3022 => x"00002f2c", +3023 => x"00002f34", +3024 => x"00002f34", +3025 => x"00002f3c", +3026 => x"00002f3c", +3027 => x"00002f50", +3028 => x"00000000", +3029 => x"000031b8", +3030 => x"00003214", +3031 => x"00003270", +3032 => x"00000000", +3033 => x"00000000", +3034 => x"00000000", +3035 => x"00000000", +3036 => x"00000000", +3037 => x"00000000", +3038 => x"00000000", +3039 => x"00000000", +3040 => x"00000000", +3041 => x"00002ad0", +3042 => x"00000000", +3043 => x"00000000", +3044 => x"00000000", +3045 => x"00000000", +3046 => x"00000000", +3047 => x"00000000", +3048 => x"00000000", +3049 => x"00000000", +3050 => x"00000000", +3051 => x"00000000", +3052 => x"00000000", +3053 => x"00000000", +3054 => x"00000000", +3055 => x"00000000", +3056 => x"00000000", +3057 => x"00000000", +3058 => x"00000000", +3059 => x"00000000", +3060 => x"00000000", +3061 => x"00000000", +3062 => x"00000000", +3063 => x"00000000", +3064 => x"00000000", +3065 => x"00000000", +3066 => x"00000000", +3067 => x"00000000", +3068 => x"00000000", +3069 => x"00000000", +3070 => x"00000001", +3071 => x"330eabcd", +3072 => x"1234e66d", +3073 => x"deec0005", +3074 => x"000b0000", +3075 => x"00000000", +3076 => x"00000000", +3077 => x"00000000", +3078 => x"00000000", +3079 => x"00000000", +3080 => x"00000000", +3081 => x"00000000", +3082 => x"00000000", +3083 => x"00000000", +3084 => x"00000000", +3085 => x"00000000", +3086 => x"00000000", +3087 => x"00000000", +3088 => x"00000000", +3089 => x"00000000", +3090 => x"00000000", +3091 => x"00000000", +3092 => x"00000000", +3093 => x"00000000", +3094 => x"00000000", +3095 => x"00000000", +3096 => x"00000000", +3097 => x"00000000", +3098 => x"00000000", +3099 => x"00000000", +3100 => x"00000000", +3101 => x"00000000", +3102 => x"00000000", +3103 => x"00000000", +3104 => x"00000000", +3105 => x"00000000", +3106 => x"00000000", +3107 => x"00000000", +3108 => x"00000000", +3109 => x"00000000", +3110 => x"00000000", +3111 => x"00000000", +3112 => x"00000000", +3113 => x"00000000", +3114 => x"00000000", +3115 => x"00000000", +3116 => x"00000000", +3117 => x"00000000", +3118 => x"00000000", +3119 => x"00000000", +3120 => x"00000000", +3121 => x"00000000", +3122 => x"00000000", +3123 => x"00000000", +3124 => x"00000000", +3125 => x"00000000", +3126 => x"00000000", +3127 => x"00000000", +3128 => x"00000000", +3129 => x"00000000", +3130 => x"00000000", +3131 => x"00000000", +3132 => x"00000000", +3133 => x"00000000", +3134 => x"00000000", +3135 => x"00000000", +3136 => x"00000000", +3137 => x"00000000", +3138 => x"00000000", +3139 => x"00000000", +3140 => x"00000000", +3141 => x"00000000", +3142 => x"00000000", +3143 => x"00000000", +3144 => x"00000000", +3145 => x"00000000", +3146 => x"00000000", +3147 => x"00000000", +3148 => x"00000000", +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"00000000", +3163 => x"00000000", +3164 => x"00000000", +3165 => x"00000000", +3166 => x"00000000", +3167 => x"00000000", +3168 => x"00000000", +3169 => x"00000000", +3170 => x"00000000", +3171 => x"00000000", +3172 => x"00000000", +3173 => x"00000000", +3174 => x"00000000", +3175 => x"00000000", +3176 => x"00000000", +3177 => x"00000000", +3178 => x"00000000", +3179 => x"00000000", +3180 => x"00000000", +3181 => x"00000000", +3182 => x"00000000", +3183 => x"00000000", +3184 => x"00000000", +3185 => x"00000000", +3186 => x"00000000", +3187 => x"00000000", +3188 => x"00000000", +3189 => x"00000000", +3190 => x"00000000", +3191 => x"00000000", +3192 => x"00000000", +3193 => x"00000000", +3194 => x"00000000", +3195 => x"00000000", +3196 => x"00000000", +3197 => x"00000000", +3198 => x"00000000", +3199 => x"00000000", +3200 => x"00000000", +3201 => x"00000000", +3202 => x"00000000", +3203 => x"00000000", +3204 => x"00000000", +3205 => x"00000000", +3206 => x"00000000", +3207 => x"00000000", +3208 => x"00000000", +3209 => x"00000000", +3210 => x"00000000", +3211 => x"00000000", +3212 => x"00000000", +3213 => x"00000000", +3214 => x"00000000", +3215 => x"00000000", +3216 => x"00000000", +3217 => x"00000000", +3218 => x"00000000", +3219 => x"00000000", +3220 => x"00000000", +3221 => x"00000000", +3222 => x"00000000", +3223 => x"00000000", +3224 => x"00000000", +3225 => x"00000000", +3226 => x"00000000", +3227 => x"00000000", +3228 => x"00000000", +3229 => x"00000000", +3230 => x"00000000", +3231 => x"00000000", +3232 => x"00000000", +3233 => x"00000000", +3234 => x"00000000", +3235 => x"00000000", +3236 => x"00000000", +3237 => x"00000000", +3238 => x"00000000", +3239 => x"00000000", +3240 => x"00000000", +3241 => x"00000000", +3242 => x"00000000", +3243 => x"00000000", +3244 => x"00000000", +3245 => x"00000000", +3246 => x"00000000", +3247 => x"00000000", +3248 => x"00000000", +3249 => x"00000000", +3250 => x"00000000", +3251 => x"00002ad4", +3252 => x"ffffffff", +3253 => x"00000000", +3254 => x"ffffffff", +3255 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; + end if; + if (mem_readEnable = '1') then + mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); + end if; + end if; +end process; + + + + +end dram_arch; diff --git a/zpu/hdl/example_medium/dram_hello.vhd b/zpu/hdl/example_medium/dram_hello.vhd index 4f02cca..aae18fd 100644 --- a/zpu/hdl/example_medium/dram_hello.vhd +++ b/zpu/hdl/example_medium/dram_hello.vhd @@ -1,3107 +1,3107 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); - -shared variable ram : ram_type := -( -0 => x"0b0b0b0b", -1 => x"82700b0b", -2 => x"80cfd80c", -3 => x"3a0b0b80", -4 => x"c6d00400", -5 => x"00000000", -6 => x"00000000", -7 => x"00000000", -8 => x"80088408", -9 => x"88080b0b", -10 => x"80c7972d", -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"0b0b80cf", -162 => x"c4738306", -163 => x"10100508", -164 => x"060b0b0b", -165 => x"88aa0400", -166 => x"00000000", -167 => x"00000000", -168 => x"80088408", -169 => x"88087575", -170 => x"0b0b0b8b", -171 => x"9f2d5050", -172 => x"80085688", -173 => x"0c840c80", -174 => x"0c510400", -175 => x"00000000", -176 => x"80088408", -177 => x"88087575", -178 => x"0b0b0b8b", -179 => x"e32d5050", -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"80cfd40c", -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"82c53f80", -257 => x"c6d93f04", -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"fe3d0d0b", -281 => x"0b80dfc0", -282 => x"08538413", -283 => x"0870882a", -284 => x"70810651", -285 => x"52527080", -286 => x"2ef03871", -287 => x"81ff0680", -288 => x"0c843d0d", -289 => x"04ff3d0d", -290 => x"0b0b80df", -291 => x"c0085271", -292 => x"0870882a", -293 => x"81327081", -294 => x"06515151", -295 => x"70f13873", -296 => x"720c833d", -297 => x"0d0480cf", -298 => x"d408802e", -299 => x"a43880cf", -300 => x"d808822e", -301 => x"bd388380", -302 => x"800b0b0b", -303 => x"80dfc00c", -304 => x"82a0800b", -305 => x"80dfc40c", -306 => x"8290800b", -307 => x"80dfc80c", -308 => x"04f88080", -309 => x"80a40b0b", -310 => x"0b80dfc0", -311 => x"0cf88080", -312 => x"82800b80", -313 => x"dfc40cf8", -314 => x"80808480", -315 => x"0b80dfc8", -316 => x"0c0480c0", -317 => x"a8808c0b", -318 => x"0b0b80df", -319 => x"c00c80c0", -320 => x"a880940b", -321 => x"80dfc40c", -322 => x"0b0b80cf", -323 => x"8c0b80df", -324 => x"c80c0470", -325 => x"7080dfcc", -326 => x"335170a7", -327 => x"3880cfe0", -328 => x"08700852", -329 => x"5270802e", -330 => x"94388412", -331 => x"80cfe00c", -332 => x"702d80cf", -333 => x"e0087008", -334 => x"525270ee", -335 => x"38810b80", -336 => x"dfcc3450", -337 => x"50040470", -338 => x"0b0b80df", -339 => x"bc08802e", -340 => x"8e380b0b", -341 => x"0b0b800b", -342 => x"802e0981", -343 => x"06833850", -344 => x"040b0b80", -345 => x"dfbc510b", -346 => x"0b0bf594", -347 => x"3f500404", -348 => x"fe3d0d89", -349 => x"5380cf90", -350 => x"5182c13f", -351 => x"80cfa051", -352 => x"82ba3f81", -353 => x"0a0b80df", -354 => x"d80cff0b", -355 => x"80dfdc0c", -356 => x"ff135372", -357 => x"8025de38", -358 => x"72800c84", -359 => x"3d0d04fb", -360 => x"3d0d7779", -361 => x"55558056", -362 => x"757524ab", -363 => x"38807424", -364 => x"9d388053", -365 => x"73527451", -366 => x"80e13f80", -367 => x"08547580", -368 => x"2e853880", -369 => x"08305473", -370 => x"800c873d", -371 => x"0d047330", -372 => x"76813257", -373 => x"54dc3974", -374 => x"30558156", -375 => x"738025d2", -376 => x"38ec39fa", -377 => x"3d0d787a", -378 => x"57558057", -379 => x"767524a4", -380 => x"38759f2c", -381 => x"54815375", -382 => x"74327431", -383 => x"5274519b", -384 => x"3f800854", -385 => x"76802e85", -386 => x"38800830", -387 => x"5473800c", -388 => x"883d0d04", -389 => x"74305581", -390 => x"57d739fc", -391 => x"3d0d7678", -392 => x"53548153", -393 => x"80747326", -394 => x"52557280", -395 => x"2e983870", -396 => x"802eab38", -397 => x"807224a6", -398 => x"38711073", -399 => x"10757226", -400 => x"53545272", -401 => x"ea387351", -402 => x"78833874", -403 => x"5170800c", -404 => x"863d0d04", -405 => x"720a100a", -406 => x"720a100a", -407 => x"53537280", -408 => x"2ee43871", -409 => x"7426ed38", -410 => x"73723175", -411 => x"7407740a", -412 => x"100a740a", -413 => x"100a5555", -414 => x"5654e339", -415 => x"f73d0d7c", -416 => x"70525380", -417 => x"f93f7254", -418 => x"80085580", -419 => x"cfb05681", -420 => x"57800881", -421 => x"055a8b3d", -422 => x"e4115953", -423 => x"8259f413", -424 => x"527b8811", -425 => x"08525381", -426 => x"b23f8008", -427 => x"30708008", -428 => x"079f2c8a", -429 => x"07800c53", -430 => x"8b3d0d04", -431 => x"f63d0d7c", -432 => x"80cfe408", -433 => x"71535553", -434 => x"b53f7255", -435 => x"80085680", -436 => x"cfb05781", -437 => x"58800881", -438 => x"055b8c3d", -439 => x"e4115a53", -440 => x"825af413", -441 => x"52881408", -442 => x"5180f03f", -443 => x"80083070", -444 => x"8008079f", -445 => x"2c8a0780", -446 => x"0c548c3d", -447 => x"0d047070", -448 => x"70707570", -449 => x"71830653", -450 => x"555270b4", -451 => x"38717008", -452 => x"7009f7fb", -453 => x"fdff1206", -454 => x"f8848281", -455 => x"80065452", -456 => x"53719b38", -457 => x"84137008", -458 => x"7009f7fb", -459 => x"fdff1206", -460 => x"f8848281", -461 => x"80065452", -462 => x"5371802e", -463 => x"e7387252", -464 => x"71335372", -465 => x"802e8a38", -466 => x"81127033", -467 => x"545272f8", -468 => x"38717431", -469 => x"800c5050", -470 => x"505004f2", -471 => x"3d0d6062", -472 => x"88110870", -473 => x"58565f5a", -474 => x"73802e81", -475 => x"8c388c1a", -476 => x"2270832a", -477 => x"81328106", -478 => x"56587486", -479 => x"38901a08", -480 => x"91387951", -481 => x"90b73fff", -482 => x"55800880", -483 => x"ec388c1a", -484 => x"22587d08", -485 => x"55807883", -486 => x"ffff0670", -487 => x"0a100a81", -488 => x"06415c57", -489 => x"7e772e80", -490 => x"d7387690", -491 => x"38740884", -492 => x"16088817", -493 => x"57585676", -494 => x"802ef238", -495 => x"76548880", -496 => x"77278438", -497 => x"88805473", -498 => x"5375529c", -499 => x"1a0851a4", -500 => x"1a085877", -501 => x"2d800b80", -502 => x"082582e0", -503 => x"38800816", -504 => x"77800831", -505 => x"7f880508", -506 => x"80083170", -507 => x"6188050c", -508 => x"5b585678", -509 => x"ffb43880", -510 => x"5574800c", -511 => x"903d0d04", -512 => x"7a813281", -513 => x"06774056", -514 => x"75802e81", -515 => x"bd387690", -516 => x"38740884", -517 => x"16088817", -518 => x"57585976", -519 => x"802ef238", -520 => x"881a0878", -521 => x"83ffff06", -522 => x"70892a81", -523 => x"06565956", -524 => x"73802e82", -525 => x"f8387577", -526 => x"278b3877", -527 => x"872a8106", -528 => x"5c7b82b5", -529 => x"38767627", -530 => x"83387656", -531 => x"75537852", -532 => x"79085185", -533 => x"833f881a", -534 => x"08763188", -535 => x"1b0c7908", -536 => x"167a0c76", -537 => x"56751977", -538 => x"77317f88", -539 => x"05087831", -540 => x"70618805", -541 => x"0c415859", -542 => x"7e802efe", -543 => x"fa388c1a", -544 => x"2258ff8a", -545 => x"39787954", -546 => x"7c537b52", -547 => x"5684c93f", -548 => x"881a0879", -549 => x"31881b0c", -550 => x"7908197a", -551 => x"0c7c7631", -552 => x"5d7c8e38", -553 => x"79518ff2", -554 => x"3f800881", -555 => x"8f388008", -556 => x"5f751c77", -557 => x"77317f88", -558 => x"05087831", -559 => x"70618805", -560 => x"0c5d585c", -561 => x"7a802efe", -562 => x"ae387681", -563 => x"83387408", -564 => x"84160888", -565 => x"1757585c", -566 => x"76802ef2", -567 => x"3876538a", -568 => x"527b5182", -569 => x"d33f8008", -570 => x"7c318105", -571 => x"5d800884", -572 => x"3881175d", -573 => x"815f7c59", -574 => x"767d2783", -575 => x"38765994", -576 => x"1a08881b", -577 => x"08115758", -578 => x"807a085c", -579 => x"54901a08", -580 => x"7b278338", -581 => x"81547579", -582 => x"25843873", -583 => x"ba387779", -584 => x"24fee238", -585 => x"77537b52", -586 => x"9c1a0851", -587 => x"a41a0859", -588 => x"782d8008", -589 => x"56800880", -590 => x"24fee238", -591 => x"8c1a2280", -592 => x"c0075e7d", -593 => x"8c1b23ff", -594 => x"5574800c", -595 => x"903d0d04", -596 => x"7effa338", -597 => x"ff873975", -598 => x"537b527a", -599 => x"5182f93f", -600 => x"7908167a", -601 => x"0c79518e", -602 => x"b13f8008", -603 => x"cf387c76", -604 => x"315d7cfe", -605 => x"bc38feac", -606 => x"39901a08", -607 => x"7a087131", -608 => x"78117056", -609 => x"5a575280", -610 => x"cfe40851", -611 => x"84943f80", -612 => x"08802eff", -613 => x"a7388008", -614 => x"901b0c80", -615 => x"08167a0c", -616 => x"77941b0c", -617 => x"76881b0c", -618 => x"7656fd99", -619 => x"39790858", -620 => x"901a0878", -621 => x"27833881", -622 => x"54757727", -623 => x"843873b3", -624 => x"38941a08", -625 => x"54737726", -626 => x"80d33873", -627 => x"5378529c", -628 => x"1a0851a4", -629 => x"1a085877", -630 => x"2d800856", -631 => x"80088024", -632 => x"fd83388c", -633 => x"1a2280c0", -634 => x"075e7d8c", -635 => x"1b23ff55", -636 => x"fed73975", -637 => x"53785277", -638 => x"5181dd3f", -639 => x"7908167a", -640 => x"0c79518d", -641 => x"953f8008", -642 => x"802efcd9", -643 => x"388c1a22", -644 => x"80c0075e", -645 => x"7d8c1b23", -646 => x"ff55fead", -647 => x"39767754", -648 => x"79537852", -649 => x"5681b13f", -650 => x"881a0877", -651 => x"31881b0c", -652 => x"7908177a", -653 => x"0cfcae39", -654 => x"fa3d0d7a", -655 => x"79028805", -656 => x"a7053355", -657 => x"53548374", -658 => x"2780df38", -659 => x"71830651", -660 => x"7080d738", -661 => x"71715755", -662 => x"83517582", -663 => x"802913ff", -664 => x"12525670", -665 => x"8025f338", -666 => x"837427bc", -667 => x"38740876", -668 => x"327009f7", -669 => x"fbfdff12", -670 => x"06f88482", -671 => x"81800651", -672 => x"5170802e", -673 => x"98387451", -674 => x"80527033", -675 => x"5772772e", -676 => x"b9388111", -677 => x"81135351", -678 => x"837227ee", -679 => x"38fc1484", -680 => x"16565473", -681 => x"8326c638", -682 => x"7452ff14", -683 => x"5170ff2e", -684 => x"97387133", -685 => x"5472742e", -686 => x"98388112", -687 => x"ff125252", -688 => x"70ff2e09", -689 => x"8106eb38", -690 => x"80517080", -691 => x"0c883d0d", -692 => x"0471800c", -693 => x"883d0d04", -694 => x"fa3d0d78", -695 => x"7a7c7272", -696 => x"72595755", -697 => x"58565774", -698 => x"7727b238", -699 => x"75155176", -700 => x"7127aa38", -701 => x"707618ff", -702 => x"18535353", -703 => x"70ff2e96", -704 => x"38ff12ff", -705 => x"14545272", -706 => x"337234ff", -707 => x"115170ff", -708 => x"2e098106", -709 => x"ec387680", -710 => x"0c883d0d", -711 => x"048f7627", -712 => x"80e63874", -713 => x"77078306", -714 => x"517080dc", -715 => x"38767552", -716 => x"53707084", -717 => x"05520873", -718 => x"70840555", -719 => x"0c727170", -720 => x"84055308", -721 => x"71708405", -722 => x"530c7170", -723 => x"84055308", -724 => x"71708405", -725 => x"530c7170", -726 => x"84055308", -727 => x"71708405", -728 => x"530cf015", -729 => x"5553738f", -730 => x"26c73883", -731 => x"74279538", -732 => x"70708405", -733 => x"52087370", -734 => x"8405550c", -735 => x"fc145473", -736 => x"8326ed38", -737 => x"72715452", -738 => x"ff145170", -739 => x"ff2eff86", -740 => x"38727081", -741 => x"05543372", -742 => x"70810554", -743 => x"34ff1151", -744 => x"ea39ef3d", -745 => x"0d636567", -746 => x"405d427b", -747 => x"802e8582", -748 => x"386151a9", -749 => x"e73ff81c", -750 => x"70841208", -751 => x"70fc0670", -752 => x"628b0570", -753 => x"f8064159", -754 => x"455c5f41", -755 => x"57967427", -756 => x"82c53880", -757 => x"7b247e7c", -758 => x"26075880", -759 => x"5477742e", -760 => x"09810682", -761 => x"ab38787b", -762 => x"2581fe38", -763 => x"781780d7", -764 => x"a00b8805", -765 => x"085b5679", -766 => x"762e84c5", -767 => x"38841608", -768 => x"70fe0617", -769 => x"84110881", -770 => x"06415555", -771 => x"7e828d38", -772 => x"74fc0658", -773 => x"79762e84", -774 => x"e3387818", -775 => x"5f7e7b25", -776 => x"81ff387c", -777 => x"81065473", -778 => x"82c13876", -779 => x"77083184", -780 => x"1108fc06", -781 => x"56577580", -782 => x"2e913879", -783 => x"762e84f0", -784 => x"38741819", -785 => x"58777b25", -786 => x"84913876", -787 => x"802e829b", -788 => x"38781556", -789 => x"7a762482", -790 => x"92388c17", -791 => x"08881808", -792 => x"718c120c", -793 => x"88120c5e", -794 => x"75598817", -795 => x"61fc055b", -796 => x"5679a426", -797 => x"85ff387b", -798 => x"76595593", -799 => x"7a2780c9", -800 => x"387b7084", -801 => x"055d087c", -802 => x"56760c74", -803 => x"70840556", -804 => x"088c180c", -805 => x"9017589b", -806 => x"7a27ae38", -807 => x"74708405", -808 => x"5608780c", -809 => x"74708405", -810 => x"56089418", -811 => x"0c981758", -812 => x"a37a2795", -813 => x"38747084", -814 => x"05560878", -815 => x"0c747084", -816 => x"0556089c", -817 => x"180ca017", -818 => x"58747084", -819 => x"05560875", -820 => x"5f787084", -821 => x"055a0c77", -822 => x"7e708405", -823 => x"40087170", -824 => x"8405530c", -825 => x"7e08710c", -826 => x"5d787b31", -827 => x"56758f26", -828 => x"80c93884", -829 => x"17088106", -830 => x"79078418", -831 => x"0c781784", -832 => x"11088107", -833 => x"84120c5b", -834 => x"6151a791", -835 => x"3f881754", -836 => x"73800c93", -837 => x"3d0d0490", -838 => x"5bfdb839", -839 => x"7756fe83", -840 => x"398c1608", -841 => x"88170871", -842 => x"8c120c88", -843 => x"120c587e", -844 => x"707c3157", -845 => x"598f7627", -846 => x"ffb9387a", -847 => x"17841808", -848 => x"81067c07", -849 => x"84190c76", -850 => x"81078412", -851 => x"0c761184", -852 => x"11088107", -853 => x"84120c5b", -854 => x"88055261", -855 => x"518fda3f", -856 => x"6151a6b9", -857 => x"3f881754", -858 => x"ffa6397d", -859 => x"52615197", -860 => x"d73f8008", -861 => x"5a800880", -862 => x"2e81ab38", -863 => x"8008f805", -864 => x"60840508", -865 => x"fe066105", -866 => x"58557477", -867 => x"2e83f238", -868 => x"fc195877", -869 => x"a42681b0", -870 => x"387b8008", -871 => x"56579378", -872 => x"2780dc38", -873 => x"7b707084", -874 => x"05520880", -875 => x"08708405", -876 => x"800c0c80", -877 => x"08717084", -878 => x"0553085d", -879 => x"567b7670", -880 => x"8405580c", -881 => x"579b7827", -882 => x"b6387670", -883 => x"84055808", -884 => x"75708405", -885 => x"570c7670", -886 => x"84055808", -887 => x"75708405", -888 => x"570ca378", -889 => x"27993876", -890 => x"70840558", -891 => x"08757084", -892 => x"05570c76", -893 => x"70840558", -894 => x"08757084", -895 => x"05570c76", -896 => x"70840558", -897 => x"08775e75", -898 => x"70840557", -899 => x"0c747d70", -900 => x"84055f08", -901 => x"71708405", -902 => x"530c7d08", -903 => x"710c5f7b", -904 => x"5261518e", -905 => x"943f6151", -906 => x"a4f33f79", -907 => x"800c933d", -908 => x"0d047d52", -909 => x"61519690", -910 => x"3f800880", -911 => x"0c933d0d", -912 => x"04841608", -913 => x"55fbc939", -914 => x"77537b52", -915 => x"800851a2", -916 => x"a53f7b52", -917 => x"61518de1", -918 => x"3fcc398c", -919 => x"16088817", -920 => x"08718c12", -921 => x"0c88120c", -922 => x"5d8c1708", -923 => x"88180871", -924 => x"8c120c88", -925 => x"120c5977", -926 => x"59fbef39", -927 => x"7818901c", -928 => x"40557e75", -929 => x"24fb9c38", -930 => x"7a177080", -931 => x"d7a00b88", -932 => x"050c757c", -933 => x"31810784", -934 => x"120c5684", -935 => x"17088106", -936 => x"7b078418", -937 => x"0c6151a3", -938 => x"f43f8817", -939 => x"54fce139", -940 => x"74181990", -941 => x"1c5e5a7c", -942 => x"7a24fb8f", -943 => x"388c1708", -944 => x"88180871", -945 => x"8c120c88", -946 => x"120c5e88", -947 => x"1761fc05", -948 => x"575975a4", -949 => x"2681b638", -950 => x"7b795955", -951 => x"93762780", -952 => x"c9387b70", -953 => x"84055d08", -954 => x"7c56790c", -955 => x"74708405", -956 => x"56088c18", -957 => x"0c901758", -958 => x"9b7627ae", -959 => x"38747084", -960 => x"05560878", -961 => x"0c747084", -962 => x"05560894", -963 => x"180c9817", -964 => x"58a37627", -965 => x"95387470", -966 => x"84055608", -967 => x"780c7470", -968 => x"84055608", -969 => x"9c180ca0", -970 => x"17587470", -971 => x"84055608", -972 => x"75417870", -973 => x"84055a0c", -974 => x"77607084", -975 => x"05420871", -976 => x"70840553", -977 => x"0c600871", -978 => x"0c5e7a17", -979 => x"7080d7a0", -980 => x"0b88050c", -981 => x"7a7c3181", -982 => x"0784120c", -983 => x"58841708", -984 => x"81067b07", -985 => x"84180c61", -986 => x"51a2b23f", -987 => x"78547380", -988 => x"0c933d0d", -989 => x"0479537b", -990 => x"5275519f", -991 => x"f93ffae9", -992 => x"39841508", -993 => x"fc061960", -994 => x"5859fadd", -995 => x"3975537b", -996 => x"5278519f", -997 => x"e13f7a17", -998 => x"7080d7a0", -999 => x"0b88050c", -1000 => x"7a7c3181", -1001 => x"0784120c", -1002 => x"58841708", -1003 => x"81067b07", -1004 => x"84180c61", -1005 => x"51a1e63f", -1006 => x"7854ffb2", -1007 => x"39fa3d0d", -1008 => x"7880cfe4", -1009 => x"085455b8", -1010 => x"1308802e", -1011 => x"81af388c", -1012 => x"15227083", -1013 => x"ffff0670", -1014 => x"832a8132", -1015 => x"81065555", -1016 => x"5672802e", -1017 => x"80da3873", -1018 => x"842a8132", -1019 => x"810657ff", -1020 => x"537680f2", -1021 => x"3873822a", -1022 => x"81065473", -1023 => x"802eb938", -1024 => x"b0150854", -1025 => x"73802e9c", -1026 => x"3880c015", -1027 => x"5373732e", -1028 => x"8f387352", -1029 => x"80cfe408", -1030 => x"518a9e3f", -1031 => x"8c152256", -1032 => x"76b0160c", -1033 => x"75db0657", -1034 => x"768c1623", -1035 => x"800b8416", -1036 => x"0c901508", -1037 => x"750c7656", -1038 => x"75880754", -1039 => x"738c1623", -1040 => x"90150880", -1041 => x"2ebf388c", -1042 => x"15227081", -1043 => x"06555373", -1044 => x"9c38720a", -1045 => x"100a8106", -1046 => x"56758538", -1047 => x"94150854", -1048 => x"7388160c", -1049 => x"80537280", -1050 => x"0c883d0d", -1051 => x"04800b88", -1052 => x"160c9415", -1053 => x"08309816", -1054 => x"0c8053ea", -1055 => x"39725182", -1056 => x"a63ffecb", -1057 => x"3974518f", -1058 => x"bc3f8c15", -1059 => x"22708106", -1060 => x"55537380", -1061 => x"2effbb38", -1062 => x"d439f83d", -1063 => x"0d7a5776", -1064 => x"802e8197", -1065 => x"3880cfe4", -1066 => x"0854b814", -1067 => x"08802e80", -1068 => x"eb388c17", -1069 => x"2270902b", -1070 => x"70902c70", -1071 => x"832a8132", -1072 => x"81065b5b", -1073 => x"57557780", -1074 => x"cb389017", -1075 => x"08567580", -1076 => x"2e80c138", -1077 => x"76087631", -1078 => x"76780c79", -1079 => x"83065555", -1080 => x"73853894", -1081 => x"17085877", -1082 => x"88180c80", -1083 => x"7525a538", -1084 => x"74537552", -1085 => x"9c170851", -1086 => x"a4170854", -1087 => x"732d800b", -1088 => x"80082580", -1089 => x"c9388008", -1090 => x"16758008", -1091 => x"31565674", -1092 => x"8024dd38", -1093 => x"800b800c", -1094 => x"8a3d0d04", -1095 => x"73518187", -1096 => x"3f8c1722", -1097 => x"70902b70", -1098 => x"902c7083", -1099 => x"2a813281", -1100 => x"065b5b57", -1101 => x"5577dd38", -1102 => x"ff9039a1", -1103 => x"9a5280cf", -1104 => x"e408518c", -1105 => x"d03f8008", -1106 => x"800c8a3d", -1107 => x"0d048c17", -1108 => x"2280c007", -1109 => x"58778c18", -1110 => x"23ff0b80", -1111 => x"0c8a3d0d", -1112 => x"04fa3d0d", -1113 => x"797080dc", -1114 => x"298c1154", -1115 => x"7a535657", -1116 => x"8fd63f80", -1117 => x"08800855", -1118 => x"56800880", -1119 => x"2ea23880", -1120 => x"088c0554", -1121 => x"800b8008", -1122 => x"0c768008", -1123 => x"84050c73", -1124 => x"80088805", -1125 => x"0c745380", -1126 => x"5273519c", -1127 => x"f53f7554", -1128 => x"73800c88", -1129 => x"3d0d0470", -1130 => x"707074a8", -1131 => x"e60bbc12", -1132 => x"0c53810b", -1133 => x"b8140c80", -1134 => x"0b84dc14", -1135 => x"0c830b84", -1136 => x"e0140c84", -1137 => x"e81384e4", -1138 => x"140c8413", -1139 => x"08518070", -1140 => x"720c7084", -1141 => x"130c7088", -1142 => x"130c5284", -1143 => x"0b8c1223", -1144 => x"718e1223", -1145 => x"7190120c", -1146 => x"7194120c", -1147 => x"7198120c", -1148 => x"709c120c", -1149 => x"80c1d50b", -1150 => x"a0120c80", -1151 => x"c2a10ba4", -1152 => x"120c80c3", -1153 => x"9d0ba812", -1154 => x"0c80c3ee", -1155 => x"0bac120c", -1156 => x"88130872", -1157 => x"710c7284", -1158 => x"120c7288", -1159 => x"120c5189", -1160 => x"0b8c1223", -1161 => x"810b8e12", -1162 => x"23719012", -1163 => x"0c719412", -1164 => x"0c719812", -1165 => x"0c709c12", -1166 => x"0c80c1d5", -1167 => x"0ba0120c", -1168 => x"80c2a10b", -1169 => x"a4120c80", -1170 => x"c39d0ba8", -1171 => x"120c80c3", -1172 => x"ee0bac12", -1173 => x"0c8c1308", -1174 => x"72710c72", -1175 => x"84120c72", -1176 => x"88120c51", -1177 => x"8a0b8c12", -1178 => x"23820b8e", -1179 => x"12237190", -1180 => x"120c7194", -1181 => x"120c7198", -1182 => x"120c709c", -1183 => x"120c80c1", -1184 => x"d50ba012", -1185 => x"0c80c2a1", -1186 => x"0ba4120c", -1187 => x"80c39d0b", -1188 => x"a8120c80", -1189 => x"c3ee0bac", -1190 => x"120c5050", -1191 => x"5004f83d", -1192 => x"0d7a80cf", -1193 => x"e408b811", -1194 => x"08575758", -1195 => x"7481ec38", -1196 => x"a8e60bbc", -1197 => x"170c810b", -1198 => x"b8170c74", -1199 => x"84dc170c", -1200 => x"830b84e0", -1201 => x"170c84e8", -1202 => x"1684e417", -1203 => x"0c841608", -1204 => x"75710c75", -1205 => x"84120c75", -1206 => x"88120c59", -1207 => x"840b8c1a", -1208 => x"23748e1a", -1209 => x"2374901a", -1210 => x"0c74941a", -1211 => x"0c74981a", -1212 => x"0c789c1a", -1213 => x"0c80c1d5", -1214 => x"0ba01a0c", -1215 => x"80c2a10b", -1216 => x"a41a0c80", -1217 => x"c39d0ba8", -1218 => x"1a0c80c3", -1219 => x"ee0bac1a", -1220 => x"0c881608", -1221 => x"75710c75", -1222 => x"84120c75", -1223 => x"88120c57", -1224 => x"890b8c18", -1225 => x"23810b8e", -1226 => x"18237490", -1227 => x"180c7494", -1228 => x"180c7498", -1229 => x"180c769c", -1230 => x"180c80c1", -1231 => x"d50ba018", -1232 => x"0c80c2a1", -1233 => x"0ba4180c", -1234 => x"80c39d0b", -1235 => x"a8180c80", -1236 => x"c3ee0bac", -1237 => x"180c8c16", -1238 => x"0875710c", -1239 => x"7584120c", -1240 => x"7588120c", -1241 => x"548a0b8c", -1242 => x"1523820b", -1243 => x"8e152374", -1244 => x"90150c74", -1245 => x"94150c74", -1246 => x"98150c73", -1247 => x"9c150c80", -1248 => x"c1d50ba0", -1249 => x"150c80c2", -1250 => x"a10ba415", -1251 => x"0c80c39d", -1252 => x"0ba8150c", -1253 => x"80c3ee0b", -1254 => x"ac150c84", -1255 => x"dc168811", -1256 => x"08841208", -1257 => x"ff055757", -1258 => x"57807524", -1259 => x"9f388c16", -1260 => x"2270902b", -1261 => x"70902c51", -1262 => x"55597380", -1263 => x"2e80ed38", -1264 => x"80dc16ff", -1265 => x"16565674", -1266 => x"8025e338", -1267 => x"76085574", -1268 => x"802e8f38", -1269 => x"74881108", -1270 => x"841208ff", -1271 => x"05575757", -1272 => x"c83982fc", -1273 => x"5277518a", -1274 => x"df3f8008", -1275 => x"80085556", -1276 => x"8008802e", -1277 => x"a3388008", -1278 => x"8c057580", -1279 => x"080c5484", -1280 => x"0b800884", -1281 => x"050c7380", -1282 => x"0888050c", -1283 => x"82f05374", -1284 => x"52735197", -1285 => x"fd3f7554", -1286 => x"7374780c", -1287 => x"5573ffb4", -1288 => x"388c780c", -1289 => x"800b800c", -1290 => x"8a3d0d04", -1291 => x"810b8c17", -1292 => x"2373760c", -1293 => x"7388170c", -1294 => x"7384170c", -1295 => x"7390170c", -1296 => x"7394170c", -1297 => x"7398170c", -1298 => x"ff0b8e17", -1299 => x"2373b017", -1300 => x"0c73b417", -1301 => x"0c7380c4", -1302 => x"170c7380", -1303 => x"c8170c75", -1304 => x"800c8a3d", -1305 => x"0d047070", -1306 => x"a19a5273", -1307 => x"5186a63f", -1308 => x"50500470", -1309 => x"70a19a52", -1310 => x"80cfe408", -1311 => x"5186963f", -1312 => x"505004fb", -1313 => x"3d0d7770", -1314 => x"52569890", -1315 => x"3f80d7a0", -1316 => x"0b880508", -1317 => x"841108fc", -1318 => x"06707b31", -1319 => x"9fef05e0", -1320 => x"8006e080", -1321 => x"05525555", -1322 => x"a0807524", -1323 => x"94388052", -1324 => x"755197ea", -1325 => x"3f80d7a8", -1326 => x"08145372", -1327 => x"80082e8f", -1328 => x"38755197", -1329 => x"d83f8053", -1330 => x"72800c87", -1331 => x"3d0d0474", -1332 => x"30527551", -1333 => x"97c83f80", -1334 => x"08ff2ea8", -1335 => x"3880d7a0", -1336 => x"0b880508", -1337 => x"74763181", -1338 => x"0784120c", -1339 => x"5380d6e4", -1340 => x"08753180", -1341 => x"d6e40c75", -1342 => x"5197a23f", -1343 => x"810b800c", -1344 => x"873d0d04", -1345 => x"80527551", -1346 => x"97943f80", -1347 => x"d7a00b88", -1348 => x"05088008", -1349 => x"71315454", -1350 => x"8f7325ff", -1351 => x"a4388008", -1352 => x"80d79408", -1353 => x"3180d6e4", -1354 => x"0c728107", -1355 => x"84150c75", -1356 => x"5196ea3f", -1357 => x"8053ff90", -1358 => x"39f73d0d", -1359 => x"7b7d545a", -1360 => x"72802e82", -1361 => x"83387951", -1362 => x"96d23ff8", -1363 => x"13841108", -1364 => x"70fe0670", -1365 => x"13841108", -1366 => x"fc065c57", -1367 => x"58545780", -1368 => x"d7a80874", -1369 => x"2e82de38", -1370 => x"7784150c", -1371 => x"80738106", -1372 => x"56597479", -1373 => x"2e81d538", -1374 => x"77148411", -1375 => x"08810656", -1376 => x"5374a038", -1377 => x"77165678", -1378 => x"81e63888", -1379 => x"14085574", -1380 => x"80d7a82e", -1381 => x"82f9388c", -1382 => x"1408708c", -1383 => x"170c7588", -1384 => x"120c5875", -1385 => x"81078418", -1386 => x"0c751776", -1387 => x"710c5478", -1388 => x"81913883", -1389 => x"ff762781", -1390 => x"c8387589", -1391 => x"2a76832a", -1392 => x"54547380", -1393 => x"2ebf3875", -1394 => x"862ab805", -1395 => x"53847427", -1396 => x"b43880db", -1397 => x"14539474", -1398 => x"27ab3875", -1399 => x"8c2a80ee", -1400 => x"055380d4", -1401 => x"74279e38", -1402 => x"758f2a80", -1403 => x"f7055382", -1404 => x"d4742791", -1405 => x"3875922a", -1406 => x"80fc0553", -1407 => x"8ad47427", -1408 => x"843880fe", -1409 => x"53721010", -1410 => x"1080d7a0", -1411 => x"05881108", -1412 => x"55557375", -1413 => x"2e82bf38", -1414 => x"841408fc", -1415 => x"06597579", -1416 => x"278d3888", -1417 => x"14085473", -1418 => x"752e0981", -1419 => x"06ea388c", -1420 => x"1408708c", -1421 => x"190c7488", -1422 => x"190c7788", -1423 => x"120c5576", -1424 => x"8c150c79", -1425 => x"5194d63f", -1426 => x"8b3d0d04", -1427 => x"76087771", -1428 => x"31587605", -1429 => x"88180856", -1430 => x"567480d7", -1431 => x"a82e80e0", -1432 => x"388c1708", -1433 => x"708c170c", -1434 => x"7588120c", -1435 => x"53fe8939", -1436 => x"8814088c", -1437 => x"1508708c", -1438 => x"130c5988", -1439 => x"190cfea3", -1440 => x"3975832a", -1441 => x"70545480", -1442 => x"74248198", -1443 => x"3872822c", -1444 => x"81712b80", -1445 => x"d7a40807", -1446 => x"80d7a00b", -1447 => x"84050c74", -1448 => x"10101080", -1449 => x"d7a00588", -1450 => x"1108718c", -1451 => x"1b0c7088", -1452 => x"1b0c7988", -1453 => x"130c565a", -1454 => x"55768c15", -1455 => x"0cff8439", -1456 => x"8159fdb4", -1457 => x"39771673", -1458 => x"81065455", -1459 => x"72983876", -1460 => x"08777131", -1461 => x"5875058c", -1462 => x"18088819", -1463 => x"08718c12", -1464 => x"0c88120c", -1465 => x"55557481", -1466 => x"0784180c", -1467 => x"7680d7a0", -1468 => x"0b88050c", -1469 => x"80d79c08", -1470 => x"7526fec7", -1471 => x"3880d798", -1472 => x"08527951", -1473 => x"fafd3f79", -1474 => x"5193923f", -1475 => x"feba3981", -1476 => x"778c170c", -1477 => x"7788170c", -1478 => x"758c190c", -1479 => x"7588190c", -1480 => x"59fd8039", -1481 => x"83147082", -1482 => x"2c81712b", -1483 => x"80d7a408", -1484 => x"0780d7a0", -1485 => x"0b84050c", -1486 => x"75101010", -1487 => x"80d7a005", -1488 => x"88110871", -1489 => x"8c1c0c70", -1490 => x"881c0c7a", -1491 => x"88130c57", -1492 => x"5b5653fe", -1493 => x"e4398073", -1494 => x"24a33872", -1495 => x"822c8171", -1496 => x"2b80d7a4", -1497 => x"080780d7", -1498 => x"a00b8405", -1499 => x"0c58748c", -1500 => x"180c7388", -1501 => x"180c7688", -1502 => x"160cfdc3", -1503 => x"39831370", -1504 => x"822c8171", -1505 => x"2b80d7a4", -1506 => x"080780d7", -1507 => x"a00b8405", -1508 => x"0c5953da", -1509 => x"39f93d0d", -1510 => x"797b5853", -1511 => x"800b80cf", -1512 => x"e4085356", -1513 => x"72722ebc", -1514 => x"3884dc13", -1515 => x"5574762e", -1516 => x"b3388815", -1517 => x"08841608", -1518 => x"ff055454", -1519 => x"80732499", -1520 => x"388c1422", -1521 => x"70902b53", -1522 => x"587180d4", -1523 => x"3880dc14", -1524 => x"ff145454", -1525 => x"728025e9", -1526 => x"38740855", -1527 => x"74d43880", -1528 => x"cfe40852", -1529 => x"84dc1255", -1530 => x"74802ead", -1531 => x"38881508", -1532 => x"841608ff", -1533 => x"05545480", -1534 => x"73249838", -1535 => x"8c142270", -1536 => x"902b5358", -1537 => x"71ad3880", -1538 => x"dc14ff14", -1539 => x"54547280", -1540 => x"25ea3874", -1541 => x"085574d5", -1542 => x"3875800c", -1543 => x"893d0d04", -1544 => x"7351762d", -1545 => x"75800807", -1546 => x"80dc15ff", -1547 => x"15555556", -1548 => x"ffa23973", -1549 => x"51762d75", -1550 => x"80080780", -1551 => x"dc15ff15", -1552 => x"555556ca", -1553 => x"39ea3d0d", -1554 => x"688c1122", -1555 => x"700a100a", -1556 => x"81065758", -1557 => x"567480e4", -1558 => x"388e1622", -1559 => x"70902b70", -1560 => x"902c5155", -1561 => x"58807424", -1562 => x"b138983d", -1563 => x"c4055373", -1564 => x"5280cfe4", -1565 => x"08519481", -1566 => x"3f800b80", -1567 => x"08249738", -1568 => x"7983e080", -1569 => x"06547380", -1570 => x"c0802e81", -1571 => x"8f387382", -1572 => x"80802e81", -1573 => x"91388c16", -1574 => x"22577690", -1575 => x"80075473", -1576 => x"8c172388", -1577 => x"805280cf", -1578 => x"e4085181", -1579 => x"9b3f8008", -1580 => x"9d388c16", -1581 => x"22820755", -1582 => x"748c1723", -1583 => x"80c31670", -1584 => x"770c9017", -1585 => x"0c810b94", -1586 => x"170c983d", -1587 => x"0d0480cf", -1588 => x"e408a8e6", -1589 => x"0bbc120c", -1590 => x"588c1622", -1591 => x"81800754", -1592 => x"738c1723", -1593 => x"8008760c", -1594 => x"80089017", -1595 => x"0c88800b", -1596 => x"94170c74", -1597 => x"802ed338", -1598 => x"8e162270", -1599 => x"902b7090", -1600 => x"2c535654", -1601 => x"9afe3f80", -1602 => x"08802eff", -1603 => x"bd388c16", -1604 => x"22810757", -1605 => x"768c1723", -1606 => x"983d0d04", -1607 => x"810b8c17", -1608 => x"225855fe", -1609 => x"f539a816", -1610 => x"0880c39d", -1611 => x"2e098106", -1612 => x"fee4388c", -1613 => x"16228880", -1614 => x"0754738c", -1615 => x"17238880", -1616 => x"0b80cc17", -1617 => x"0cfedc39", -1618 => x"f43d0d7e", -1619 => x"608b1170", -1620 => x"f8065b55", -1621 => x"555d7296", -1622 => x"26833890", -1623 => x"58807824", -1624 => x"74792607", -1625 => x"55805474", -1626 => x"742e0981", -1627 => x"0680ca38", -1628 => x"7c518ea8", -1629 => x"3f7783f7", -1630 => x"2680c538", -1631 => x"77832a70", -1632 => x"10101080", -1633 => x"d7a0058c", -1634 => x"11085858", -1635 => x"5475772e", -1636 => x"81f03884", -1637 => x"1608fc06", -1638 => x"8c170888", -1639 => x"1808718c", -1640 => x"120c8812", -1641 => x"0c5b7605", -1642 => x"84110881", -1643 => x"0784120c", -1644 => x"537c518d", -1645 => x"e83f8816", -1646 => x"5473800c", -1647 => x"8e3d0d04", -1648 => x"77892a78", -1649 => x"832a5854", -1650 => x"73802ebf", -1651 => x"3877862a", -1652 => x"b8055784", -1653 => x"7427b438", -1654 => x"80db1457", -1655 => x"947427ab", -1656 => x"38778c2a", -1657 => x"80ee0557", -1658 => x"80d47427", -1659 => x"9e38778f", -1660 => x"2a80f705", -1661 => x"5782d474", -1662 => x"27913877", -1663 => x"922a80fc", -1664 => x"05578ad4", -1665 => x"74278438", -1666 => x"80fe5776", -1667 => x"10101080", -1668 => x"d7a0058c", -1669 => x"11085653", -1670 => x"74732ea3", -1671 => x"38841508", -1672 => x"fc067079", -1673 => x"31555673", -1674 => x"8f2488e4", -1675 => x"38738025", -1676 => x"88e6388c", -1677 => x"15085574", -1678 => x"732e0981", -1679 => x"06df3881", -1680 => x"175980d7", -1681 => x"b0085675", -1682 => x"80d7a82e", -1683 => x"82cc3884", -1684 => x"1608fc06", -1685 => x"70793155", -1686 => x"55738f24", -1687 => x"bb3880d7", -1688 => x"a80b80d7", -1689 => x"b40c80d7", -1690 => x"a80b80d7", -1691 => x"b00c8074", -1692 => x"2480db38", -1693 => x"74168411", -1694 => x"08810784", -1695 => x"120c53fe", -1696 => x"b0398816", -1697 => x"8c110857", -1698 => x"5975792e", -1699 => x"098106fe", -1700 => x"82388214", -1701 => x"59ffab39", -1702 => x"77167881", -1703 => x"0784180c", -1704 => x"7080d7b4", -1705 => x"0c7080d7", -1706 => x"b00c80d7", -1707 => x"a80b8c12", -1708 => x"0c8c1108", -1709 => x"88120c74", -1710 => x"81078412", -1711 => x"0c740574", -1712 => x"710c5b7c", -1713 => x"518bd63f", -1714 => x"881654fd", -1715 => x"ec3983ff", -1716 => x"75278391", -1717 => x"3874892a", -1718 => x"75832a54", -1719 => x"5473802e", -1720 => x"bf387486", -1721 => x"2ab80553", -1722 => x"847427b4", -1723 => x"3880db14", -1724 => x"53947427", -1725 => x"ab38748c", -1726 => x"2a80ee05", -1727 => x"5380d474", -1728 => x"279e3874", -1729 => x"8f2a80f7", -1730 => x"055382d4", -1731 => x"74279138", -1732 => x"74922a80", -1733 => x"fc05538a", -1734 => x"d4742784", -1735 => x"3880fe53", -1736 => x"72101010", -1737 => x"80d7a005", -1738 => x"88110855", -1739 => x"5773772e", -1740 => x"868b3884", -1741 => x"1408fc06", -1742 => x"5b747b27", -1743 => x"8d388814", -1744 => x"08547377", -1745 => x"2e098106", -1746 => x"ea388c14", -1747 => x"0880d7a0", -1748 => x"0b840508", -1749 => x"718c190c", -1750 => x"7588190c", -1751 => x"7788130c", -1752 => x"5c57758c", -1753 => x"150c7853", -1754 => x"80792483", -1755 => x"98387282", -1756 => x"2c81712b", -1757 => x"5656747b", -1758 => x"2680ca38", -1759 => x"7a750657", -1760 => x"7682a338", -1761 => x"78fc0684", -1762 => x"05597410", -1763 => x"707c0655", -1764 => x"55738292", -1765 => x"38841959", -1766 => x"f13980d7", -1767 => x"a00b8405", -1768 => x"0879545b", -1769 => x"788025c6", -1770 => x"3882da39", -1771 => x"74097b06", -1772 => x"7080d7a0", -1773 => x"0b84050c", -1774 => x"5b741055", -1775 => x"747b2685", -1776 => x"387485bc", -1777 => x"3880d7a0", -1778 => x"0b880508", -1779 => x"70841208", -1780 => x"fc06707b", -1781 => x"317b7226", -1782 => x"8f722507", -1783 => x"5d575c5c", -1784 => x"5578802e", -1785 => x"80d93879", -1786 => x"1580d798", -1787 => x"08199011", -1788 => x"59545680", -1789 => x"d79408ff", -1790 => x"2e8838a0", -1791 => x"8f13e080", -1792 => x"06577652", -1793 => x"7c518996", -1794 => x"3f800854", -1795 => x"8008ff2e", -1796 => x"90388008", -1797 => x"762782a7", -1798 => x"387480d7", -1799 => x"a02e829f", -1800 => x"3880d7a0", -1801 => x"0b880508", -1802 => x"55841508", -1803 => x"fc067079", -1804 => x"31797226", -1805 => x"8f722507", -1806 => x"5d555a7a", -1807 => x"83f23877", -1808 => x"81078416", -1809 => x"0c771570", -1810 => x"80d7a00b", -1811 => x"88050c74", -1812 => x"81078412", -1813 => x"0c567c51", -1814 => x"88c33f88", -1815 => x"15547380", -1816 => x"0c8e3d0d", -1817 => x"0474832a", -1818 => x"70545480", -1819 => x"7424819b", -1820 => x"3872822c", -1821 => x"81712b80", -1822 => x"d7a40807", -1823 => x"7080d7a0", -1824 => x"0b84050c", -1825 => x"75101010", -1826 => x"80d7a005", -1827 => x"88110871", -1828 => x"8c1b0c70", -1829 => x"881b0c79", -1830 => x"88130c57", -1831 => x"555c5575", -1832 => x"8c150cfd", -1833 => x"c1397879", -1834 => x"10101080", -1835 => x"d7a00570", -1836 => x"565b5c8c", -1837 => x"14085675", -1838 => x"742ea338", -1839 => x"841608fc", -1840 => x"06707931", -1841 => x"5853768f", -1842 => x"2483f138", -1843 => x"76802584", -1844 => x"af388c16", -1845 => x"08567574", -1846 => x"2e098106", -1847 => x"df388814", -1848 => x"811a7083", -1849 => x"06555a54", -1850 => x"72c9387b", -1851 => x"83065675", -1852 => x"802efdb8", -1853 => x"38ff1cf8", -1854 => x"1b5b5c88", -1855 => x"1a087a2e", -1856 => x"ea38fdb5", -1857 => x"39831953", -1858 => x"fce43983", -1859 => x"1470822c", -1860 => x"81712b80", -1861 => x"d7a40807", -1862 => x"7080d7a0", -1863 => x"0b84050c", -1864 => x"76101010", -1865 => x"80d7a005", -1866 => x"88110871", -1867 => x"8c1c0c70", -1868 => x"881c0c7a", -1869 => x"88130c58", -1870 => x"535d5653", -1871 => x"fee13980", -1872 => x"d6e40817", -1873 => x"59800876", -1874 => x"2e818b38", -1875 => x"80d79408", -1876 => x"ff2e848e", -1877 => x"38737631", -1878 => x"1980d6e4", -1879 => x"0c738706", -1880 => x"70565372", -1881 => x"802e8838", -1882 => x"88733170", -1883 => x"15555576", -1884 => x"149fff06", -1885 => x"a0807131", -1886 => x"1670547e", -1887 => x"53515386", -1888 => x"9d3f8008", -1889 => x"568008ff", -1890 => x"2e819e38", -1891 => x"80d6e408", -1892 => x"137080d6", -1893 => x"e40c7475", -1894 => x"80d7a00b", -1895 => x"88050c77", -1896 => x"76311581", -1897 => x"07555659", -1898 => x"7a80d7a0", -1899 => x"2e83c038", -1900 => x"798f2682", -1901 => x"ef38810b", -1902 => x"84150c84", -1903 => x"1508fc06", -1904 => x"70793179", -1905 => x"72268f72", -1906 => x"25075d55", -1907 => x"5a7a802e", -1908 => x"fced3880", -1909 => x"db398008", -1910 => x"9fff0655", -1911 => x"74feed38", -1912 => x"7880d6e4", -1913 => x"0c80d7a0", -1914 => x"0b880508", -1915 => x"7a188107", -1916 => x"84120c55", -1917 => x"80d79008", -1918 => x"79278638", -1919 => x"7880d790", -1920 => x"0c80d78c", -1921 => x"087927fc", -1922 => x"a0387880", -1923 => x"d78c0c84", -1924 => x"1508fc06", -1925 => x"70793179", -1926 => x"72268f72", -1927 => x"25075d55", -1928 => x"5a7a802e", -1929 => x"fc993888", -1930 => x"39807457", -1931 => x"53fedd39", -1932 => x"7c5184e9", -1933 => x"3f800b80", -1934 => x"0c8e3d0d", -1935 => x"04807324", -1936 => x"a5387282", -1937 => x"2c81712b", -1938 => x"80d7a408", -1939 => x"077080d7", -1940 => x"a00b8405", -1941 => x"0c5c5a76", -1942 => x"8c170c73", -1943 => x"88170c75", -1944 => x"88180cf9", -1945 => x"fd398313", -1946 => x"70822c81", -1947 => x"712b80d7", -1948 => x"a4080770", -1949 => x"80d7a00b", -1950 => x"84050c5d", -1951 => x"5b53d839", -1952 => x"7a75065c", -1953 => x"7bfc9f38", -1954 => x"84197510", -1955 => x"5659f139", -1956 => x"ff178105", -1957 => x"59f7ab39", -1958 => x"8c150888", -1959 => x"1608718c", -1960 => x"120c8812", -1961 => x"0c597515", -1962 => x"84110881", -1963 => x"0784120c", -1964 => x"587c5183", -1965 => x"e83f8815", -1966 => x"54fba339", -1967 => x"77167881", -1968 => x"0784180c", -1969 => x"8c170888", -1970 => x"1808718c", -1971 => x"120c8812", -1972 => x"0c5c7080", -1973 => x"d7b40c70", -1974 => x"80d7b00c", -1975 => x"80d7a80b", -1976 => x"8c120c8c", -1977 => x"11088812", -1978 => x"0c778107", -1979 => x"84120c77", -1980 => x"0577710c", -1981 => x"557c5183", -1982 => x"a43f8816", -1983 => x"54f5ba39", -1984 => x"72168411", -1985 => x"08810784", -1986 => x"120c588c", -1987 => x"16088817", -1988 => x"08718c12", -1989 => x"0c88120c", -1990 => x"577c5183", -1991 => x"803f8816", -1992 => x"54f59639", -1993 => x"7284150c", -1994 => x"f41af806", -1995 => x"70841d08", -1996 => x"81060784", -1997 => x"1d0c701c", -1998 => x"5556850b", -1999 => x"84150c85", -2000 => x"0b88150c", -2001 => x"8f7627fd", -2002 => x"ab38881b", -2003 => x"527c51eb", -2004 => x"e83f80d7", -2005 => x"a00b8805", -2006 => x"0880d6e4", -2007 => x"085a55fd", -2008 => x"93397880", -2009 => x"d6e40c73", -2010 => x"80d7940c", -2011 => x"fbef3972", -2012 => x"84150cfc", -2013 => x"ff39fb3d", -2014 => x"0d77707a", -2015 => x"7c585553", -2016 => x"568f7527", -2017 => x"80e63872", -2018 => x"76078306", -2019 => x"517080dc", -2020 => x"38757352", -2021 => x"54707084", -2022 => x"05520874", -2023 => x"70840556", -2024 => x"0c737170", -2025 => x"84055308", -2026 => x"71708405", -2027 => x"530c7170", -2028 => x"84055308", -2029 => x"71708405", -2030 => x"530c7170", -2031 => x"84055308", -2032 => x"71708405", -2033 => x"530cf016", -2034 => x"5654748f", -2035 => x"26c73883", -2036 => x"75279538", -2037 => x"70708405", -2038 => x"52087470", -2039 => x"8405560c", -2040 => x"fc155574", -2041 => x"8326ed38", -2042 => x"73715452", -2043 => x"ff155170", -2044 => x"ff2e9838", -2045 => x"72708105", -2046 => x"54337270", -2047 => x"81055434", -2048 => x"ff115170", -2049 => x"ff2e0981", -2050 => x"06ea3875", -2051 => x"800c873d", -2052 => x"0d04fb3d", -2053 => x"0d777a71", -2054 => x"028c05a3", -2055 => x"05335854", -2056 => x"54568373", -2057 => x"2780d438", -2058 => x"75830651", -2059 => x"7080cc38", -2060 => x"74882b75", -2061 => x"07707190", -2062 => x"2b075551", -2063 => x"8f7327a7", -2064 => x"38737270", -2065 => x"8405540c", -2066 => x"71747170", -2067 => x"8405530c", -2068 => x"74717084", -2069 => x"05530c74", -2070 => x"71708405", -2071 => x"530cf014", -2072 => x"5452728f", -2073 => x"26db3883", -2074 => x"73279038", -2075 => x"73727084", -2076 => x"05540cfc", -2077 => x"13537283", -2078 => x"26f238ff", -2079 => x"135170ff", -2080 => x"2e933874", -2081 => x"72708105", -2082 => x"5434ff11", -2083 => x"5170ff2e", -2084 => x"098106ef", -2085 => x"3875800c", -2086 => x"873d0d04", -2087 => x"04047070", -2088 => x"7070800b", -2089 => x"80dfe00c", -2090 => x"765184f3", -2091 => x"3f800853", -2092 => x"8008ff2e", -2093 => x"89387280", -2094 => x"0c505050", -2095 => x"500480df", -2096 => x"e0085473", -2097 => x"802eef38", -2098 => x"7574710c", -2099 => x"5272800c", -2100 => x"50505050", -2101 => x"04f93d0d", -2102 => x"797c557b", -2103 => x"548e1122", -2104 => x"70902b70", -2105 => x"902c5557", -2106 => x"80cfe408", -2107 => x"53585683", -2108 => x"f63f8008", -2109 => x"57800b80", -2110 => x"08249338", -2111 => x"80d01608", -2112 => x"80080580", -2113 => x"d0170c76", -2114 => x"800c893d", -2115 => x"0d048c16", -2116 => x"2283dfff", -2117 => x"0655748c", -2118 => x"17237680", -2119 => x"0c893d0d", -2120 => x"04fa3d0d", -2121 => x"788c1122", -2122 => x"70882a70", -2123 => x"81065157", -2124 => x"585674a9", -2125 => x"388c1622", -2126 => x"83dfff06", -2127 => x"55748c17", -2128 => x"237a5479", -2129 => x"538e1622", -2130 => x"70902b70", -2131 => x"902c5456", -2132 => x"80cfe408", -2133 => x"525681b2", -2134 => x"3f883d0d", -2135 => x"04825480", -2136 => x"538e1622", -2137 => x"70902b70", -2138 => x"902c5456", -2139 => x"80cfe408", -2140 => x"525782bb", -2141 => x"3f8c1622", -2142 => x"83dfff06", -2143 => x"55748c17", -2144 => x"237a5479", -2145 => x"538e1622", -2146 => x"70902b70", -2147 => x"902c5456", -2148 => x"80cfe408", -2149 => x"525680f2", -2150 => x"3f883d0d", -2151 => x"04f93d0d", -2152 => x"797c557b", -2153 => x"548e1122", -2154 => x"70902b70", -2155 => x"902c5557", -2156 => x"80cfe408", -2157 => x"53585681", -2158 => x"f63f8008", -2159 => x"578008ff", -2160 => x"2e99388c", -2161 => x"1622a080", -2162 => x"0755748c", -2163 => x"17238008", -2164 => x"80d0170c", -2165 => x"76800c89", -2166 => x"3d0d048c", -2167 => x"162283df", -2168 => x"ff065574", -2169 => x"8c172376", -2170 => x"800c893d", -2171 => x"0d047070", -2172 => x"70748e11", -2173 => x"2270902b", -2174 => x"70902c55", -2175 => x"51515380", -2176 => x"cfe40851", -2177 => x"bd3f5050", -2178 => x"5004fb3d", -2179 => x"0d800b80", -2180 => x"dfe00c7a", -2181 => x"53795278", -2182 => x"5182ff3f", -2183 => x"80085580", -2184 => x"08ff2e88", -2185 => x"3874800c", -2186 => x"873d0d04", -2187 => x"80dfe008", -2188 => x"5675802e", -2189 => x"f0387776", -2190 => x"710c5474", -2191 => x"800c873d", -2192 => x"0d047070", -2193 => x"7070800b", -2194 => x"80dfe00c", -2195 => x"765184cc", -2196 => x"3f800853", -2197 => x"8008ff2e", -2198 => x"89387280", -2199 => x"0c505050", -2200 => x"500480df", -2201 => x"e0085473", -2202 => x"802eef38", -2203 => x"7574710c", -2204 => x"5272800c", -2205 => x"50505050", -2206 => x"04fc3d0d", -2207 => x"800b80df", -2208 => x"e00c7852", -2209 => x"775187b3", -2210 => x"3f800854", -2211 => x"8008ff2e", -2212 => x"88387380", -2213 => x"0c863d0d", -2214 => x"0480dfe0", -2215 => x"08557480", -2216 => x"2ef03876", -2217 => x"75710c53", -2218 => x"73800c86", -2219 => x"3d0d04fb", -2220 => x"3d0d800b", -2221 => x"80dfe00c", -2222 => x"7a537952", -2223 => x"7851848e", -2224 => x"3f800855", -2225 => x"8008ff2e", -2226 => x"88387480", -2227 => x"0c873d0d", -2228 => x"0480dfe0", -2229 => x"08567580", -2230 => x"2ef03877", -2231 => x"76710c54", -2232 => x"74800c87", -2233 => x"3d0d04fb", -2234 => x"3d0d800b", -2235 => x"80dfe00c", -2236 => x"7a537952", -2237 => x"78518296", -2238 => x"3f800855", -2239 => x"8008ff2e", -2240 => x"88387480", -2241 => x"0c873d0d", -2242 => x"0480dfe0", -2243 => x"08567580", -2244 => x"2ef03877", -2245 => x"76710c54", -2246 => x"74800c87", -2247 => x"3d0d0470", -2248 => x"707080df", -2249 => x"d0088938", -2250 => x"80dfe40b", -2251 => x"80dfd00c", -2252 => x"80dfd008", -2253 => x"75115252", -2254 => x"ff537087", -2255 => x"fb808026", -2256 => x"88387080", -2257 => x"dfd00c71", -2258 => x"5372800c", -2259 => x"50505004", -2260 => x"fd3d0d80", -2261 => x"0b80cfd8", -2262 => x"08545472", -2263 => x"812e9b38", -2264 => x"7380dfd4", -2265 => x"0cc2bf3f", -2266 => x"c1963f80", -2267 => x"dfa85281", -2268 => x"51c3fd3f", -2269 => x"80085186", -2270 => x"c23f7280", -2271 => x"dfd40cc2", -2272 => x"a53fc0fc", -2273 => x"3f80dfa8", -2274 => x"528151c3", -2275 => x"e33f8008", -2276 => x"5186a83f", -2277 => x"00ff3900", -2278 => x"ff39f53d", -2279 => x"0d7e6080", -2280 => x"dfd40870", -2281 => x"5b585b5b", -2282 => x"7580c238", -2283 => x"777a25a1", -2284 => x"38771b70", -2285 => x"337081ff", -2286 => x"06585859", -2287 => x"758a2e98", -2288 => x"387681ff", -2289 => x"0651c1bd", -2290 => x"3f811858", -2291 => x"797824e1", -2292 => x"3879800c", -2293 => x"8d3d0d04", -2294 => x"8d51c1a9", -2295 => x"3f783370", -2296 => x"81ff0652", -2297 => x"57c19e3f", -2298 => x"811858e0", -2299 => x"3979557a", -2300 => x"547d5385", -2301 => x"528d3dfc", -2302 => x"0551c0c6", -2303 => x"3f800856", -2304 => x"85b23f7b", -2305 => x"80080c75", -2306 => x"800c8d3d", -2307 => x"0d04f63d", -2308 => x"0d7d7f80", -2309 => x"dfd40870", -2310 => x"5b585a5a", -2311 => x"7580c138", -2312 => x"777925b3", -2313 => x"38c0b93f", -2314 => x"800881ff", -2315 => x"06708d32", -2316 => x"7030709f", -2317 => x"2a515157", -2318 => x"57768a2e", -2319 => x"80c43875", -2320 => x"802ebf38", -2321 => x"771a5676", -2322 => x"76347651", -2323 => x"c0b73f81", -2324 => x"18587878", -2325 => x"24cf3877", -2326 => x"5675800c", -2327 => x"8c3d0d04", -2328 => x"78557954", -2329 => x"7c538452", -2330 => x"8c3dfc05", -2331 => x"51ffbfd2", -2332 => x"3f800856", -2333 => x"84be3f7a", -2334 => x"80080c75", -2335 => x"800c8c3d", -2336 => x"0d04771a", -2337 => x"598a7934", -2338 => x"8118588d", -2339 => x"51ffbff5", -2340 => x"3f8a51ff", -2341 => x"bfef3f77", -2342 => x"56ffbe39", -2343 => x"fb3d0d80", -2344 => x"dfd40870", -2345 => x"56547388", -2346 => x"3874800c", -2347 => x"873d0d04", -2348 => x"77538352", -2349 => x"873dfc05", -2350 => x"51ffbf86", -2351 => x"3f800854", -2352 => x"83f23f75", -2353 => x"80080c73", -2354 => x"800c873d", -2355 => x"0d04fa3d", -2356 => x"0d80dfd4", -2357 => x"08802ea3", -2358 => x"387a5579", -2359 => x"54785386", -2360 => x"52883dfc", -2361 => x"0551ffbe", -2362 => x"d93f8008", -2363 => x"5683c53f", -2364 => x"7680080c", -2365 => x"75800c88", -2366 => x"3d0d0483", -2367 => x"b73f9d0b", -2368 => x"80080cff", -2369 => x"0b800c88", -2370 => x"3d0d04f7", -2371 => x"3d0d7b7d", -2372 => x"5b59bc53", -2373 => x"80527951", -2374 => x"f5f83f80", -2375 => x"70565798", -2376 => x"56741970", -2377 => x"3370782b", -2378 => x"79078118", -2379 => x"f81a5a58", -2380 => x"59555884", -2381 => x"7524ea38", -2382 => x"767a2384", -2383 => x"19588070", -2384 => x"56579856", -2385 => x"74187033", -2386 => x"70782b79", -2387 => x"078118f8", -2388 => x"1a5a5859", -2389 => x"51548475", -2390 => x"24ea3876", -2391 => x"821b2388", -2392 => x"19588070", -2393 => x"56579856", -2394 => x"74187033", -2395 => x"70782b79", -2396 => x"078118f8", -2397 => x"1a5a5859", -2398 => x"51548475", -2399 => x"24ea3876", -2400 => x"841b0c8c", -2401 => x"19588070", -2402 => x"56579856", -2403 => x"74187033", -2404 => x"70782b79", -2405 => x"078118f8", -2406 => x"1a5a5859", -2407 => x"51548475", -2408 => x"24ea3876", -2409 => x"881b2390", -2410 => x"19588070", -2411 => x"56579856", -2412 => x"74187033", -2413 => x"70782b79", -2414 => x"078118f8", -2415 => x"1a5a5859", -2416 => x"51548475", -2417 => x"24ea3876", -2418 => x"8a1b2394", -2419 => x"19588070", -2420 => x"56579856", -2421 => x"74187033", -2422 => x"70782b79", -2423 => x"078118f8", -2424 => x"1a5a5859", -2425 => x"51548475", -2426 => x"24ea3876", -2427 => x"8c1b2398", -2428 => x"19588070", -2429 => x"56579856", -2430 => x"74187033", -2431 => x"70782b79", -2432 => x"078118f8", -2433 => x"1a5a5859", -2434 => x"51548475", -2435 => x"24ea3876", -2436 => x"8e1b239c", -2437 => x"19588070", -2438 => x"5657b856", -2439 => x"74187033", -2440 => x"70782b79", -2441 => x"078118f8", -2442 => x"1a5a5859", -2443 => x"5a548875", -2444 => x"24ea3876", -2445 => x"901b0c8b", -2446 => x"3d0d04e9", -2447 => x"3d0d6a80", -2448 => x"dfd40857", -2449 => x"57759338", -2450 => x"80c0800b", -2451 => x"84180c75", -2452 => x"ac180c75", -2453 => x"800c993d", -2454 => x"0d04893d", -2455 => x"70556a54", -2456 => x"558a5299", -2457 => x"3dffbc05", -2458 => x"51ffbbd6", -2459 => x"3f800877", -2460 => x"53755256", -2461 => x"fd953fbc", -2462 => x"3f778008", -2463 => x"0c75800c", -2464 => x"993d0d04", -2465 => x"fc3d0d81", -2466 => x"5480dfd4", -2467 => x"08883873", -2468 => x"800c863d", -2469 => x"0d047653", -2470 => x"97b95286", -2471 => x"3dfc0551", -2472 => x"ffbb9f3f", -2473 => x"8008548c", -2474 => x"3f748008", -2475 => x"0c73800c", -2476 => x"863d0d04", -2477 => x"80cfe408", -2478 => x"800c04f7", -2479 => x"3d0d7b80", -2480 => x"cfe40882", -2481 => x"c811085a", -2482 => x"545a7780", -2483 => x"2e80da38", -2484 => x"81881884", -2485 => x"1908ff05", -2486 => x"81712b59", -2487 => x"55598074", -2488 => x"2480ea38", -2489 => x"807424b5", -2490 => x"3873822b", -2491 => x"78118805", -2492 => x"56568180", -2493 => x"19087706", -2494 => x"5372802e", -2495 => x"b6387816", -2496 => x"70085353", -2497 => x"79517408", -2498 => x"53722dff", -2499 => x"14fc17fc", -2500 => x"1779812c", -2501 => x"5a575754", -2502 => x"738025d6", -2503 => x"38770858", -2504 => x"77ffad38", -2505 => x"80cfe408", -2506 => x"53bc1308", -2507 => x"a5387951", -2508 => x"f8e23f74", -2509 => x"0853722d", -2510 => x"ff14fc17", -2511 => x"fc177981", -2512 => x"2c5a5757", -2513 => x"54738025", -2514 => x"ffa838d1", -2515 => x"398057ff", -2516 => x"93397251", -2517 => x"bc130854", -2518 => x"732d7951", -2519 => x"f8b63f70", -2520 => x"7080dfb0", -2521 => x"0bfc0570", -2522 => x"08525270", -2523 => x"ff2e9138", -2524 => x"702dfc12", -2525 => x"70085252", -2526 => x"70ff2e09", -2527 => x"8106f138", -2528 => x"50500404", -2529 => x"ffbb8c3f", -2530 => x"04000000", -2531 => x"00000040", -2532 => x"48656c6c", -2533 => x"6f20776f", -2534 => x"726c6420", -2535 => x"310a0000", -2536 => x"48656c6c", -2537 => x"6f20776f", -2538 => x"726c6420", -2539 => x"320a0000", -2540 => x"0a000000", -2541 => x"43000000", -2542 => x"64756d6d", -2543 => x"792e6578", -2544 => x"65000000", -2545 => x"00ffffff", -2546 => x"ff00ffff", -2547 => x"ffff00ff", -2548 => x"ffffff00", -2549 => x"00000000", -2550 => x"00000000", -2551 => x"00000000", -2552 => x"00002fb8", -2553 => x"000027e8", -2554 => x"00000000", -2555 => x"00002a50", -2556 => x"00002aac", -2557 => x"00002b08", -2558 => x"00000000", -2559 => x"00000000", -2560 => x"00000000", -2561 => x"00000000", -2562 => x"00000000", -2563 => x"00000000", -2564 => x"00000000", -2565 => x"00000000", -2566 => x"00000000", -2567 => x"000027b4", -2568 => x"00000000", -2569 => x"00000000", -2570 => x"00000000", -2571 => x"00000000", -2572 => x"00000000", -2573 => x"00000000", -2574 => x"00000000", -2575 => x"00000000", -2576 => x"00000000", -2577 => x"00000000", -2578 => x"00000000", -2579 => x"00000000", -2580 => x"00000000", -2581 => x"00000000", -2582 => x"00000000", -2583 => x"00000000", -2584 => x"00000000", -2585 => x"00000000", -2586 => x"00000000", -2587 => x"00000000", -2588 => x"00000000", -2589 => x"00000000", -2590 => x"00000000", -2591 => x"00000000", -2592 => x"00000000", -2593 => x"00000000", -2594 => x"00000000", -2595 => x"00000000", -2596 => x"00000001", -2597 => x"330eabcd", -2598 => x"1234e66d", -2599 => x"deec0005", -2600 => x"000b0000", -2601 => x"00000000", -2602 => x"00000000", -2603 => x"00000000", -2604 => x"00000000", -2605 => x"00000000", -2606 => x"00000000", -2607 => x"00000000", -2608 => x"00000000", -2609 => x"00000000", -2610 => x"00000000", -2611 => x"00000000", -2612 => x"00000000", -2613 => x"00000000", -2614 => x"00000000", -2615 => x"00000000", -2616 => x"00000000", -2617 => x"00000000", -2618 => x"00000000", -2619 => x"00000000", -2620 => x"00000000", -2621 => x"00000000", -2622 => x"00000000", -2623 => x"00000000", -2624 => x"00000000", -2625 => x"00000000", -2626 => x"00000000", -2627 => x"00000000", -2628 => x"00000000", -2629 => x"00000000", -2630 => x"00000000", -2631 => x"00000000", -2632 => x"00000000", -2633 => x"00000000", -2634 => x"00000000", -2635 => x"00000000", -2636 => x"00000000", -2637 => x"00000000", -2638 => x"00000000", -2639 => x"00000000", -2640 => x"00000000", -2641 => x"00000000", -2642 => x"00000000", -2643 => x"00000000", -2644 => x"00000000", -2645 => x"00000000", -2646 => x"00000000", -2647 => x"00000000", -2648 => x"00000000", -2649 => x"00000000", -2650 => x"00000000", -2651 => x"00000000", -2652 => x"00000000", -2653 => x"00000000", -2654 => x"00000000", -2655 => x"00000000", -2656 => x"00000000", -2657 => x"00000000", -2658 => x"00000000", -2659 => x"00000000", -2660 => x"00000000", -2661 => x"00000000", -2662 => x"00000000", -2663 => x"00000000", -2664 => x"00000000", -2665 => x"00000000", -2666 => x"00000000", -2667 => x"00000000", -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"00000000", -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"00000000", -2707 => x"00000000", -2708 => x"00000000", -2709 => x"00000000", -2710 => x"00000000", -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"ffffffff", -2790 => x"00000000", -2791 => x"00020000", -2792 => x"00000000", -2793 => x"00000000", -2794 => x"00002ba0", -2795 => x"00002ba0", -2796 => x"00002ba8", -2797 => x"00002ba8", -2798 => x"00002bb0", -2799 => x"00002bb0", -2800 => x"00002bb8", -2801 => x"00002bb8", -2802 => x"00002bc0", -2803 => x"00002bc0", -2804 => x"00002bc8", -2805 => x"00002bc8", -2806 => x"00002bd0", -2807 => x"00002bd0", -2808 => x"00002bd8", -2809 => x"00002bd8", -2810 => x"00002be0", -2811 => x"00002be0", -2812 => x"00002be8", -2813 => x"00002be8", -2814 => x"00002bf0", -2815 => x"00002bf0", -2816 => x"00002bf8", -2817 => x"00002bf8", -2818 => x"00002c00", -2819 => x"00002c00", -2820 => x"00002c08", -2821 => x"00002c08", -2822 => x"00002c10", -2823 => x"00002c10", -2824 => x"00002c18", -2825 => x"00002c18", -2826 => x"00002c20", -2827 => x"00002c20", -2828 => x"00002c28", -2829 => x"00002c28", -2830 => x"00002c30", -2831 => x"00002c30", -2832 => x"00002c38", -2833 => x"00002c38", -2834 => x"00002c40", -2835 => x"00002c40", -2836 => x"00002c48", -2837 => x"00002c48", -2838 => x"00002c50", -2839 => x"00002c50", -2840 => x"00002c58", -2841 => x"00002c58", -2842 => x"00002c60", -2843 => x"00002c60", -2844 => x"00002c68", -2845 => x"00002c68", -2846 => x"00002c70", -2847 => x"00002c70", -2848 => x"00002c78", -2849 => x"00002c78", -2850 => x"00002c80", -2851 => x"00002c80", -2852 => x"00002c88", -2853 => x"00002c88", -2854 => x"00002c90", -2855 => x"00002c90", -2856 => x"00002c98", -2857 => x"00002c98", -2858 => x"00002ca0", -2859 => x"00002ca0", -2860 => x"00002ca8", -2861 => x"00002ca8", -2862 => x"00002cb0", -2863 => x"00002cb0", -2864 => x"00002cb8", -2865 => x"00002cb8", -2866 => x"00002cc0", -2867 => x"00002cc0", -2868 => x"00002cc8", -2869 => x"00002cc8", -2870 => x"00002cd0", -2871 => x"00002cd0", -2872 => x"00002cd8", -2873 => x"00002cd8", -2874 => x"00002ce0", -2875 => x"00002ce0", -2876 => x"00002ce8", -2877 => x"00002ce8", -2878 => x"00002cf0", -2879 => x"00002cf0", -2880 => x"00002cf8", -2881 => x"00002cf8", -2882 => x"00002d00", -2883 => x"00002d00", -2884 => x"00002d08", -2885 => x"00002d08", -2886 => x"00002d10", -2887 => x"00002d10", -2888 => x"00002d18", -2889 => x"00002d18", -2890 => x"00002d20", -2891 => x"00002d20", -2892 => x"00002d28", -2893 => x"00002d28", -2894 => x"00002d30", -2895 => x"00002d30", -2896 => x"00002d38", -2897 => x"00002d38", -2898 => x"00002d40", -2899 => x"00002d40", -2900 => x"00002d48", -2901 => x"00002d48", -2902 => x"00002d50", -2903 => x"00002d50", -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"000027b8", -3051 => x"ffffffff", -3052 => x"00000000", -3053 => x"ffffffff", -3054 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; - end if; - if (mem_readEnable = '1') then - mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); - end if; - end if; -end process; - - - - -end dram_arch; +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"80cfd80c", +3 => x"3a0b0b80", +4 => x"c6d00400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c7972d", +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"0b0b80cf", +162 => x"c4738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8b", +171 => x"9f2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8b", +179 => x"e32d5050", +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"80cfd40c", +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"82c53f80", +257 => x"c6d93f04", +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"fe3d0d0b", +281 => x"0b80dfc0", +282 => x"08538413", +283 => x"0870882a", +284 => x"70810651", +285 => x"52527080", +286 => x"2ef03871", +287 => x"81ff0680", +288 => x"0c843d0d", +289 => x"04ff3d0d", +290 => x"0b0b80df", +291 => x"c0085271", +292 => x"0870882a", +293 => x"81327081", +294 => x"06515151", +295 => x"70f13873", +296 => x"720c833d", +297 => x"0d0480cf", +298 => x"d408802e", +299 => x"a43880cf", +300 => x"d808822e", +301 => x"bd388380", +302 => x"800b0b0b", +303 => x"80dfc00c", +304 => x"82a0800b", +305 => x"80dfc40c", +306 => x"8290800b", +307 => x"80dfc80c", +308 => x"04f88080", +309 => x"80a40b0b", +310 => x"0b80dfc0", +311 => x"0cf88080", +312 => x"82800b80", +313 => x"dfc40cf8", +314 => x"80808480", +315 => x"0b80dfc8", +316 => x"0c0480c0", +317 => x"a8808c0b", +318 => x"0b0b80df", +319 => x"c00c80c0", +320 => x"a880940b", +321 => x"80dfc40c", +322 => x"0b0b80cf", +323 => x"8c0b80df", +324 => x"c80c0470", +325 => x"7080dfcc", +326 => x"335170a7", +327 => x"3880cfe0", +328 => x"08700852", +329 => x"5270802e", +330 => x"94388412", +331 => x"80cfe00c", +332 => x"702d80cf", +333 => x"e0087008", +334 => x"525270ee", +335 => x"38810b80", +336 => x"dfcc3450", +337 => x"50040470", +338 => x"0b0b80df", +339 => x"bc08802e", +340 => x"8e380b0b", +341 => x"0b0b800b", +342 => x"802e0981", +343 => x"06833850", +344 => x"040b0b80", +345 => x"dfbc510b", +346 => x"0b0bf594", +347 => x"3f500404", +348 => x"fe3d0d89", +349 => x"5380cf90", +350 => x"5182c13f", +351 => x"80cfa051", +352 => x"82ba3f81", +353 => x"0a0b80df", +354 => x"d80cff0b", +355 => x"80dfdc0c", +356 => x"ff135372", +357 => x"8025de38", +358 => x"72800c84", +359 => x"3d0d04fb", +360 => x"3d0d7779", +361 => x"55558056", +362 => x"757524ab", +363 => x"38807424", +364 => x"9d388053", +365 => x"73527451", +366 => x"80e13f80", +367 => x"08547580", +368 => x"2e853880", +369 => x"08305473", +370 => x"800c873d", +371 => x"0d047330", +372 => x"76813257", +373 => x"54dc3974", +374 => x"30558156", +375 => x"738025d2", +376 => x"38ec39fa", +377 => x"3d0d787a", +378 => x"57558057", +379 => x"767524a4", +380 => x"38759f2c", +381 => x"54815375", +382 => x"74327431", +383 => x"5274519b", +384 => x"3f800854", +385 => x"76802e85", +386 => x"38800830", +387 => x"5473800c", +388 => x"883d0d04", +389 => x"74305581", +390 => x"57d739fc", +391 => x"3d0d7678", +392 => x"53548153", +393 => x"80747326", +394 => x"52557280", +395 => x"2e983870", +396 => x"802eab38", +397 => x"807224a6", +398 => x"38711073", +399 => x"10757226", +400 => x"53545272", +401 => x"ea387351", +402 => x"78833874", +403 => x"5170800c", +404 => x"863d0d04", +405 => x"720a100a", +406 => x"720a100a", +407 => x"53537280", +408 => x"2ee43871", +409 => x"7426ed38", +410 => x"73723175", +411 => x"7407740a", +412 => x"100a740a", +413 => x"100a5555", +414 => x"5654e339", +415 => x"f73d0d7c", +416 => x"70525380", +417 => x"f93f7254", +418 => x"80085580", +419 => x"cfb05681", +420 => x"57800881", +421 => x"055a8b3d", +422 => x"e4115953", +423 => x"8259f413", +424 => x"527b8811", +425 => x"08525381", +426 => x"b23f8008", +427 => x"30708008", +428 => x"079f2c8a", +429 => x"07800c53", +430 => x"8b3d0d04", +431 => x"f63d0d7c", +432 => x"80cfe408", +433 => x"71535553", +434 => x"b53f7255", +435 => x"80085680", +436 => x"cfb05781", +437 => x"58800881", +438 => x"055b8c3d", +439 => x"e4115a53", +440 => x"825af413", +441 => x"52881408", +442 => x"5180f03f", +443 => x"80083070", +444 => x"8008079f", +445 => x"2c8a0780", +446 => x"0c548c3d", +447 => x"0d047070", +448 => x"70707570", +449 => x"71830653", +450 => x"555270b4", +451 => x"38717008", +452 => x"7009f7fb", +453 => x"fdff1206", +454 => x"f8848281", +455 => x"80065452", +456 => x"53719b38", +457 => x"84137008", +458 => x"7009f7fb", +459 => x"fdff1206", +460 => x"f8848281", +461 => x"80065452", +462 => x"5371802e", +463 => x"e7387252", +464 => x"71335372", +465 => x"802e8a38", +466 => x"81127033", +467 => x"545272f8", +468 => x"38717431", +469 => x"800c5050", +470 => x"505004f2", +471 => x"3d0d6062", +472 => x"88110870", +473 => x"58565f5a", +474 => x"73802e81", +475 => x"8c388c1a", +476 => x"2270832a", +477 => x"81328106", +478 => x"56587486", +479 => x"38901a08", +480 => x"91387951", +481 => x"90b73fff", +482 => x"55800880", +483 => x"ec388c1a", +484 => x"22587d08", +485 => x"55807883", +486 => x"ffff0670", +487 => x"0a100a81", +488 => x"06415c57", +489 => x"7e772e80", +490 => x"d7387690", +491 => x"38740884", +492 => x"16088817", +493 => x"57585676", +494 => x"802ef238", +495 => x"76548880", +496 => x"77278438", +497 => x"88805473", +498 => x"5375529c", +499 => x"1a0851a4", +500 => x"1a085877", +501 => x"2d800b80", +502 => x"082582e0", +503 => x"38800816", +504 => x"77800831", +505 => x"7f880508", +506 => x"80083170", +507 => x"6188050c", +508 => x"5b585678", +509 => x"ffb43880", +510 => x"5574800c", +511 => x"903d0d04", +512 => x"7a813281", +513 => x"06774056", +514 => x"75802e81", +515 => x"bd387690", +516 => x"38740884", +517 => x"16088817", +518 => x"57585976", +519 => x"802ef238", +520 => x"881a0878", +521 => x"83ffff06", +522 => x"70892a81", +523 => x"06565956", +524 => x"73802e82", +525 => x"f8387577", +526 => x"278b3877", +527 => x"872a8106", +528 => x"5c7b82b5", +529 => x"38767627", +530 => x"83387656", +531 => x"75537852", +532 => x"79085185", +533 => x"833f881a", +534 => x"08763188", +535 => x"1b0c7908", +536 => x"167a0c76", +537 => x"56751977", +538 => x"77317f88", +539 => x"05087831", +540 => x"70618805", +541 => x"0c415859", +542 => x"7e802efe", +543 => x"fa388c1a", +544 => x"2258ff8a", +545 => x"39787954", +546 => x"7c537b52", +547 => x"5684c93f", +548 => x"881a0879", +549 => x"31881b0c", +550 => x"7908197a", +551 => x"0c7c7631", +552 => x"5d7c8e38", +553 => x"79518ff2", +554 => x"3f800881", +555 => x"8f388008", +556 => x"5f751c77", +557 => x"77317f88", +558 => x"05087831", +559 => x"70618805", +560 => x"0c5d585c", +561 => x"7a802efe", +562 => x"ae387681", +563 => x"83387408", +564 => x"84160888", +565 => x"1757585c", +566 => x"76802ef2", +567 => x"3876538a", +568 => x"527b5182", +569 => x"d33f8008", +570 => x"7c318105", +571 => x"5d800884", +572 => x"3881175d", +573 => x"815f7c59", +574 => x"767d2783", +575 => x"38765994", +576 => x"1a08881b", +577 => x"08115758", +578 => x"807a085c", +579 => x"54901a08", +580 => x"7b278338", +581 => x"81547579", +582 => x"25843873", +583 => x"ba387779", +584 => x"24fee238", +585 => x"77537b52", +586 => x"9c1a0851", +587 => x"a41a0859", +588 => x"782d8008", +589 => x"56800880", +590 => x"24fee238", +591 => x"8c1a2280", +592 => x"c0075e7d", +593 => x"8c1b23ff", +594 => x"5574800c", +595 => x"903d0d04", +596 => x"7effa338", +597 => x"ff873975", +598 => x"537b527a", +599 => x"5182f93f", +600 => x"7908167a", +601 => x"0c79518e", +602 => x"b13f8008", +603 => x"cf387c76", +604 => x"315d7cfe", +605 => x"bc38feac", +606 => x"39901a08", +607 => x"7a087131", +608 => x"78117056", +609 => x"5a575280", +610 => x"cfe40851", +611 => x"84943f80", +612 => x"08802eff", +613 => x"a7388008", +614 => x"901b0c80", +615 => x"08167a0c", +616 => x"77941b0c", +617 => x"76881b0c", +618 => x"7656fd99", +619 => x"39790858", +620 => x"901a0878", +621 => x"27833881", +622 => x"54757727", +623 => x"843873b3", +624 => x"38941a08", +625 => x"54737726", +626 => x"80d33873", +627 => x"5378529c", +628 => x"1a0851a4", +629 => x"1a085877", +630 => x"2d800856", +631 => x"80088024", +632 => x"fd83388c", +633 => x"1a2280c0", +634 => x"075e7d8c", +635 => x"1b23ff55", +636 => x"fed73975", +637 => x"53785277", +638 => x"5181dd3f", +639 => x"7908167a", +640 => x"0c79518d", +641 => x"953f8008", +642 => x"802efcd9", +643 => x"388c1a22", +644 => x"80c0075e", +645 => x"7d8c1b23", +646 => x"ff55fead", +647 => x"39767754", +648 => x"79537852", +649 => x"5681b13f", +650 => x"881a0877", +651 => x"31881b0c", +652 => x"7908177a", +653 => x"0cfcae39", +654 => x"fa3d0d7a", +655 => x"79028805", +656 => x"a7053355", +657 => x"53548374", +658 => x"2780df38", +659 => x"71830651", +660 => x"7080d738", +661 => x"71715755", +662 => x"83517582", +663 => x"802913ff", +664 => x"12525670", +665 => x"8025f338", +666 => x"837427bc", +667 => x"38740876", +668 => x"327009f7", +669 => x"fbfdff12", +670 => x"06f88482", +671 => x"81800651", +672 => x"5170802e", +673 => x"98387451", +674 => x"80527033", +675 => x"5772772e", +676 => x"b9388111", +677 => x"81135351", +678 => x"837227ee", +679 => x"38fc1484", +680 => x"16565473", +681 => x"8326c638", +682 => x"7452ff14", +683 => x"5170ff2e", +684 => x"97387133", +685 => x"5472742e", +686 => x"98388112", +687 => x"ff125252", +688 => x"70ff2e09", +689 => x"8106eb38", +690 => x"80517080", +691 => x"0c883d0d", +692 => x"0471800c", +693 => x"883d0d04", +694 => x"fa3d0d78", +695 => x"7a7c7272", +696 => x"72595755", +697 => x"58565774", +698 => x"7727b238", +699 => x"75155176", +700 => x"7127aa38", +701 => x"707618ff", +702 => x"18535353", +703 => x"70ff2e96", +704 => x"38ff12ff", +705 => x"14545272", +706 => x"337234ff", +707 => x"115170ff", +708 => x"2e098106", +709 => x"ec387680", +710 => x"0c883d0d", +711 => x"048f7627", +712 => x"80e63874", +713 => x"77078306", +714 => x"517080dc", +715 => x"38767552", +716 => x"53707084", +717 => x"05520873", +718 => x"70840555", +719 => x"0c727170", +720 => x"84055308", +721 => x"71708405", +722 => x"530c7170", +723 => x"84055308", +724 => x"71708405", +725 => x"530c7170", +726 => x"84055308", +727 => x"71708405", +728 => x"530cf015", +729 => x"5553738f", +730 => x"26c73883", +731 => x"74279538", +732 => x"70708405", +733 => x"52087370", +734 => x"8405550c", +735 => x"fc145473", +736 => x"8326ed38", +737 => x"72715452", +738 => x"ff145170", +739 => x"ff2eff86", +740 => x"38727081", +741 => x"05543372", +742 => x"70810554", +743 => x"34ff1151", +744 => x"ea39ef3d", +745 => x"0d636567", +746 => x"405d427b", +747 => x"802e8582", +748 => x"386151a9", +749 => x"e73ff81c", +750 => x"70841208", +751 => x"70fc0670", +752 => x"628b0570", +753 => x"f8064159", +754 => x"455c5f41", +755 => x"57967427", +756 => x"82c53880", +757 => x"7b247e7c", +758 => x"26075880", +759 => x"5477742e", +760 => x"09810682", +761 => x"ab38787b", +762 => x"2581fe38", +763 => x"781780d7", +764 => x"a00b8805", +765 => x"085b5679", +766 => x"762e84c5", +767 => x"38841608", +768 => x"70fe0617", +769 => x"84110881", +770 => x"06415555", +771 => x"7e828d38", +772 => x"74fc0658", +773 => x"79762e84", +774 => x"e3387818", +775 => x"5f7e7b25", +776 => x"81ff387c", +777 => x"81065473", +778 => x"82c13876", +779 => x"77083184", +780 => x"1108fc06", +781 => x"56577580", +782 => x"2e913879", +783 => x"762e84f0", +784 => x"38741819", +785 => x"58777b25", +786 => x"84913876", +787 => x"802e829b", +788 => x"38781556", +789 => x"7a762482", +790 => x"92388c17", +791 => x"08881808", +792 => x"718c120c", +793 => x"88120c5e", +794 => x"75598817", +795 => x"61fc055b", +796 => x"5679a426", +797 => x"85ff387b", +798 => x"76595593", +799 => x"7a2780c9", +800 => x"387b7084", +801 => x"055d087c", +802 => x"56760c74", +803 => x"70840556", +804 => x"088c180c", +805 => x"9017589b", +806 => x"7a27ae38", +807 => x"74708405", +808 => x"5608780c", +809 => x"74708405", +810 => x"56089418", +811 => x"0c981758", +812 => x"a37a2795", +813 => x"38747084", +814 => x"05560878", +815 => x"0c747084", +816 => x"0556089c", +817 => x"180ca017", +818 => x"58747084", +819 => x"05560875", +820 => x"5f787084", +821 => x"055a0c77", +822 => x"7e708405", +823 => x"40087170", +824 => x"8405530c", +825 => x"7e08710c", +826 => x"5d787b31", +827 => x"56758f26", +828 => x"80c93884", +829 => x"17088106", +830 => x"79078418", +831 => x"0c781784", +832 => x"11088107", +833 => x"84120c5b", +834 => x"6151a791", +835 => x"3f881754", +836 => x"73800c93", +837 => x"3d0d0490", +838 => x"5bfdb839", +839 => x"7756fe83", +840 => x"398c1608", +841 => x"88170871", +842 => x"8c120c88", +843 => x"120c587e", +844 => x"707c3157", +845 => x"598f7627", +846 => x"ffb9387a", +847 => x"17841808", +848 => x"81067c07", +849 => x"84190c76", +850 => x"81078412", +851 => x"0c761184", +852 => x"11088107", +853 => x"84120c5b", +854 => x"88055261", +855 => x"518fda3f", +856 => x"6151a6b9", +857 => x"3f881754", +858 => x"ffa6397d", +859 => x"52615197", +860 => x"d73f8008", +861 => x"5a800880", +862 => x"2e81ab38", +863 => x"8008f805", +864 => x"60840508", +865 => x"fe066105", +866 => x"58557477", +867 => x"2e83f238", +868 => x"fc195877", +869 => x"a42681b0", +870 => x"387b8008", +871 => x"56579378", +872 => x"2780dc38", +873 => x"7b707084", +874 => x"05520880", +875 => x"08708405", +876 => x"800c0c80", +877 => x"08717084", +878 => x"0553085d", +879 => x"567b7670", +880 => x"8405580c", +881 => x"579b7827", +882 => x"b6387670", +883 => x"84055808", +884 => x"75708405", +885 => x"570c7670", +886 => x"84055808", +887 => x"75708405", +888 => x"570ca378", +889 => x"27993876", +890 => x"70840558", +891 => x"08757084", +892 => x"05570c76", +893 => x"70840558", +894 => x"08757084", +895 => x"05570c76", +896 => x"70840558", +897 => x"08775e75", +898 => x"70840557", +899 => x"0c747d70", +900 => x"84055f08", +901 => x"71708405", +902 => x"530c7d08", +903 => x"710c5f7b", +904 => x"5261518e", +905 => x"943f6151", +906 => x"a4f33f79", +907 => x"800c933d", +908 => x"0d047d52", +909 => x"61519690", +910 => x"3f800880", +911 => x"0c933d0d", +912 => x"04841608", +913 => x"55fbc939", +914 => x"77537b52", +915 => x"800851a2", +916 => x"a53f7b52", +917 => x"61518de1", +918 => x"3fcc398c", +919 => x"16088817", +920 => x"08718c12", +921 => x"0c88120c", +922 => x"5d8c1708", +923 => x"88180871", +924 => x"8c120c88", +925 => x"120c5977", +926 => x"59fbef39", +927 => x"7818901c", +928 => x"40557e75", +929 => x"24fb9c38", +930 => x"7a177080", +931 => x"d7a00b88", +932 => x"050c757c", +933 => x"31810784", +934 => x"120c5684", +935 => x"17088106", +936 => x"7b078418", +937 => x"0c6151a3", +938 => x"f43f8817", +939 => x"54fce139", +940 => x"74181990", +941 => x"1c5e5a7c", +942 => x"7a24fb8f", +943 => x"388c1708", +944 => x"88180871", +945 => x"8c120c88", +946 => x"120c5e88", +947 => x"1761fc05", +948 => x"575975a4", +949 => x"2681b638", +950 => x"7b795955", +951 => x"93762780", +952 => x"c9387b70", +953 => x"84055d08", +954 => x"7c56790c", +955 => x"74708405", +956 => x"56088c18", +957 => x"0c901758", +958 => x"9b7627ae", +959 => x"38747084", +960 => x"05560878", +961 => x"0c747084", +962 => x"05560894", +963 => x"180c9817", +964 => x"58a37627", +965 => x"95387470", +966 => x"84055608", +967 => x"780c7470", +968 => x"84055608", +969 => x"9c180ca0", +970 => x"17587470", +971 => x"84055608", +972 => x"75417870", +973 => x"84055a0c", +974 => x"77607084", +975 => x"05420871", +976 => x"70840553", +977 => x"0c600871", +978 => x"0c5e7a17", +979 => x"7080d7a0", +980 => x"0b88050c", +981 => x"7a7c3181", +982 => x"0784120c", +983 => x"58841708", +984 => x"81067b07", +985 => x"84180c61", +986 => x"51a2b23f", +987 => x"78547380", +988 => x"0c933d0d", +989 => x"0479537b", +990 => x"5275519f", +991 => x"f93ffae9", +992 => x"39841508", +993 => x"fc061960", +994 => x"5859fadd", +995 => x"3975537b", +996 => x"5278519f", +997 => x"e13f7a17", +998 => x"7080d7a0", +999 => x"0b88050c", +1000 => x"7a7c3181", +1001 => x"0784120c", +1002 => x"58841708", +1003 => x"81067b07", +1004 => x"84180c61", +1005 => x"51a1e63f", +1006 => x"7854ffb2", +1007 => x"39fa3d0d", +1008 => x"7880cfe4", +1009 => x"085455b8", +1010 => x"1308802e", +1011 => x"81af388c", +1012 => x"15227083", +1013 => x"ffff0670", +1014 => x"832a8132", +1015 => x"81065555", +1016 => x"5672802e", +1017 => x"80da3873", +1018 => x"842a8132", +1019 => x"810657ff", +1020 => x"537680f2", +1021 => x"3873822a", +1022 => x"81065473", +1023 => x"802eb938", +1024 => x"b0150854", +1025 => x"73802e9c", +1026 => x"3880c015", +1027 => x"5373732e", +1028 => x"8f387352", +1029 => x"80cfe408", +1030 => x"518a9e3f", +1031 => x"8c152256", +1032 => x"76b0160c", +1033 => x"75db0657", +1034 => x"768c1623", +1035 => x"800b8416", +1036 => x"0c901508", +1037 => x"750c7656", +1038 => x"75880754", +1039 => x"738c1623", +1040 => x"90150880", +1041 => x"2ebf388c", +1042 => x"15227081", +1043 => x"06555373", +1044 => x"9c38720a", +1045 => x"100a8106", +1046 => x"56758538", +1047 => x"94150854", +1048 => x"7388160c", +1049 => x"80537280", +1050 => x"0c883d0d", +1051 => x"04800b88", +1052 => x"160c9415", +1053 => x"08309816", +1054 => x"0c8053ea", +1055 => x"39725182", +1056 => x"a63ffecb", +1057 => x"3974518f", +1058 => x"bc3f8c15", +1059 => x"22708106", +1060 => x"55537380", +1061 => x"2effbb38", +1062 => x"d439f83d", +1063 => x"0d7a5776", +1064 => x"802e8197", +1065 => x"3880cfe4", +1066 => x"0854b814", +1067 => x"08802e80", +1068 => x"eb388c17", +1069 => x"2270902b", +1070 => x"70902c70", +1071 => x"832a8132", +1072 => x"81065b5b", +1073 => x"57557780", +1074 => x"cb389017", +1075 => x"08567580", +1076 => x"2e80c138", +1077 => x"76087631", +1078 => x"76780c79", +1079 => x"83065555", +1080 => x"73853894", +1081 => x"17085877", +1082 => x"88180c80", +1083 => x"7525a538", +1084 => x"74537552", +1085 => x"9c170851", +1086 => x"a4170854", +1087 => x"732d800b", +1088 => x"80082580", +1089 => x"c9388008", +1090 => x"16758008", +1091 => x"31565674", +1092 => x"8024dd38", +1093 => x"800b800c", +1094 => x"8a3d0d04", +1095 => x"73518187", +1096 => x"3f8c1722", +1097 => x"70902b70", +1098 => x"902c7083", +1099 => x"2a813281", +1100 => x"065b5b57", +1101 => x"5577dd38", +1102 => x"ff9039a1", +1103 => x"9a5280cf", +1104 => x"e408518c", +1105 => x"d03f8008", +1106 => x"800c8a3d", +1107 => x"0d048c17", +1108 => x"2280c007", +1109 => x"58778c18", +1110 => x"23ff0b80", +1111 => x"0c8a3d0d", +1112 => x"04fa3d0d", +1113 => x"797080dc", +1114 => x"298c1154", +1115 => x"7a535657", +1116 => x"8fd63f80", +1117 => x"08800855", +1118 => x"56800880", +1119 => x"2ea23880", +1120 => x"088c0554", +1121 => x"800b8008", +1122 => x"0c768008", +1123 => x"84050c73", +1124 => x"80088805", +1125 => x"0c745380", +1126 => x"5273519c", +1127 => x"f53f7554", +1128 => x"73800c88", +1129 => x"3d0d0470", +1130 => x"707074a8", +1131 => x"e60bbc12", +1132 => x"0c53810b", +1133 => x"b8140c80", +1134 => x"0b84dc14", +1135 => x"0c830b84", +1136 => x"e0140c84", +1137 => x"e81384e4", +1138 => x"140c8413", +1139 => x"08518070", +1140 => x"720c7084", +1141 => x"130c7088", +1142 => x"130c5284", +1143 => x"0b8c1223", +1144 => x"718e1223", +1145 => x"7190120c", +1146 => x"7194120c", +1147 => x"7198120c", +1148 => x"709c120c", +1149 => x"80c1d50b", +1150 => x"a0120c80", +1151 => x"c2a10ba4", +1152 => x"120c80c3", +1153 => x"9d0ba812", +1154 => x"0c80c3ee", +1155 => x"0bac120c", +1156 => x"88130872", +1157 => x"710c7284", +1158 => x"120c7288", +1159 => x"120c5189", +1160 => x"0b8c1223", +1161 => x"810b8e12", +1162 => x"23719012", +1163 => x"0c719412", +1164 => x"0c719812", +1165 => x"0c709c12", +1166 => x"0c80c1d5", +1167 => x"0ba0120c", +1168 => x"80c2a10b", +1169 => x"a4120c80", +1170 => x"c39d0ba8", +1171 => x"120c80c3", +1172 => x"ee0bac12", +1173 => x"0c8c1308", +1174 => x"72710c72", +1175 => x"84120c72", +1176 => x"88120c51", +1177 => x"8a0b8c12", +1178 => x"23820b8e", +1179 => x"12237190", +1180 => x"120c7194", +1181 => x"120c7198", +1182 => x"120c709c", +1183 => x"120c80c1", +1184 => x"d50ba012", +1185 => x"0c80c2a1", +1186 => x"0ba4120c", +1187 => x"80c39d0b", +1188 => x"a8120c80", +1189 => x"c3ee0bac", +1190 => x"120c5050", +1191 => x"5004f83d", +1192 => x"0d7a80cf", +1193 => x"e408b811", +1194 => x"08575758", +1195 => x"7481ec38", +1196 => x"a8e60bbc", +1197 => x"170c810b", +1198 => x"b8170c74", +1199 => x"84dc170c", +1200 => x"830b84e0", +1201 => x"170c84e8", +1202 => x"1684e417", +1203 => x"0c841608", +1204 => x"75710c75", +1205 => x"84120c75", +1206 => x"88120c59", +1207 => x"840b8c1a", +1208 => x"23748e1a", +1209 => x"2374901a", +1210 => x"0c74941a", +1211 => x"0c74981a", +1212 => x"0c789c1a", +1213 => x"0c80c1d5", +1214 => x"0ba01a0c", +1215 => x"80c2a10b", +1216 => x"a41a0c80", +1217 => x"c39d0ba8", +1218 => x"1a0c80c3", +1219 => x"ee0bac1a", +1220 => x"0c881608", +1221 => x"75710c75", +1222 => x"84120c75", +1223 => x"88120c57", +1224 => x"890b8c18", +1225 => x"23810b8e", +1226 => x"18237490", +1227 => x"180c7494", +1228 => x"180c7498", +1229 => x"180c769c", +1230 => x"180c80c1", +1231 => x"d50ba018", +1232 => x"0c80c2a1", +1233 => x"0ba4180c", +1234 => x"80c39d0b", +1235 => x"a8180c80", +1236 => x"c3ee0bac", +1237 => x"180c8c16", +1238 => x"0875710c", +1239 => x"7584120c", +1240 => x"7588120c", +1241 => x"548a0b8c", +1242 => x"1523820b", +1243 => x"8e152374", +1244 => x"90150c74", +1245 => x"94150c74", +1246 => x"98150c73", +1247 => x"9c150c80", +1248 => x"c1d50ba0", +1249 => x"150c80c2", +1250 => x"a10ba415", +1251 => x"0c80c39d", +1252 => x"0ba8150c", +1253 => x"80c3ee0b", +1254 => x"ac150c84", +1255 => x"dc168811", +1256 => x"08841208", +1257 => x"ff055757", +1258 => x"57807524", +1259 => x"9f388c16", +1260 => x"2270902b", +1261 => x"70902c51", +1262 => x"55597380", +1263 => x"2e80ed38", +1264 => x"80dc16ff", +1265 => x"16565674", +1266 => x"8025e338", +1267 => x"76085574", +1268 => x"802e8f38", +1269 => x"74881108", +1270 => x"841208ff", +1271 => x"05575757", +1272 => x"c83982fc", +1273 => x"5277518a", +1274 => x"df3f8008", +1275 => x"80085556", +1276 => x"8008802e", +1277 => x"a3388008", +1278 => x"8c057580", +1279 => x"080c5484", +1280 => x"0b800884", +1281 => x"050c7380", +1282 => x"0888050c", +1283 => x"82f05374", +1284 => x"52735197", +1285 => x"fd3f7554", +1286 => x"7374780c", +1287 => x"5573ffb4", +1288 => x"388c780c", +1289 => x"800b800c", +1290 => x"8a3d0d04", +1291 => x"810b8c17", +1292 => x"2373760c", +1293 => x"7388170c", +1294 => x"7384170c", +1295 => x"7390170c", +1296 => x"7394170c", +1297 => x"7398170c", +1298 => x"ff0b8e17", +1299 => x"2373b017", +1300 => x"0c73b417", +1301 => x"0c7380c4", +1302 => x"170c7380", +1303 => x"c8170c75", +1304 => x"800c8a3d", +1305 => x"0d047070", +1306 => x"a19a5273", +1307 => x"5186a63f", +1308 => x"50500470", +1309 => x"70a19a52", +1310 => x"80cfe408", +1311 => x"5186963f", +1312 => x"505004fb", +1313 => x"3d0d7770", +1314 => x"52569890", +1315 => x"3f80d7a0", +1316 => x"0b880508", +1317 => x"841108fc", +1318 => x"06707b31", +1319 => x"9fef05e0", +1320 => x"8006e080", +1321 => x"05525555", +1322 => x"a0807524", +1323 => x"94388052", +1324 => x"755197ea", +1325 => x"3f80d7a8", +1326 => x"08145372", +1327 => x"80082e8f", +1328 => x"38755197", +1329 => x"d83f8053", +1330 => x"72800c87", +1331 => x"3d0d0474", +1332 => x"30527551", +1333 => x"97c83f80", +1334 => x"08ff2ea8", +1335 => x"3880d7a0", +1336 => x"0b880508", +1337 => x"74763181", +1338 => x"0784120c", +1339 => x"5380d6e4", +1340 => x"08753180", +1341 => x"d6e40c75", +1342 => x"5197a23f", +1343 => x"810b800c", +1344 => x"873d0d04", +1345 => x"80527551", +1346 => x"97943f80", +1347 => x"d7a00b88", +1348 => x"05088008", +1349 => x"71315454", +1350 => x"8f7325ff", +1351 => x"a4388008", +1352 => x"80d79408", +1353 => x"3180d6e4", +1354 => x"0c728107", +1355 => x"84150c75", +1356 => x"5196ea3f", +1357 => x"8053ff90", +1358 => x"39f73d0d", +1359 => x"7b7d545a", +1360 => x"72802e82", +1361 => x"83387951", +1362 => x"96d23ff8", +1363 => x"13841108", +1364 => x"70fe0670", +1365 => x"13841108", +1366 => x"fc065c57", +1367 => x"58545780", +1368 => x"d7a80874", +1369 => x"2e82de38", +1370 => x"7784150c", +1371 => x"80738106", +1372 => x"56597479", +1373 => x"2e81d538", +1374 => x"77148411", +1375 => x"08810656", +1376 => x"5374a038", +1377 => x"77165678", +1378 => x"81e63888", +1379 => x"14085574", +1380 => x"80d7a82e", +1381 => x"82f9388c", +1382 => x"1408708c", +1383 => x"170c7588", +1384 => x"120c5875", +1385 => x"81078418", +1386 => x"0c751776", +1387 => x"710c5478", +1388 => x"81913883", +1389 => x"ff762781", +1390 => x"c8387589", +1391 => x"2a76832a", +1392 => x"54547380", +1393 => x"2ebf3875", +1394 => x"862ab805", +1395 => x"53847427", +1396 => x"b43880db", +1397 => x"14539474", +1398 => x"27ab3875", +1399 => x"8c2a80ee", +1400 => x"055380d4", +1401 => x"74279e38", +1402 => x"758f2a80", +1403 => x"f7055382", +1404 => x"d4742791", +1405 => x"3875922a", +1406 => x"80fc0553", +1407 => x"8ad47427", +1408 => x"843880fe", +1409 => x"53721010", +1410 => x"1080d7a0", +1411 => x"05881108", +1412 => x"55557375", +1413 => x"2e82bf38", +1414 => x"841408fc", +1415 => x"06597579", +1416 => x"278d3888", +1417 => x"14085473", +1418 => x"752e0981", +1419 => x"06ea388c", +1420 => x"1408708c", +1421 => x"190c7488", +1422 => x"190c7788", +1423 => x"120c5576", +1424 => x"8c150c79", +1425 => x"5194d63f", +1426 => x"8b3d0d04", +1427 => x"76087771", +1428 => x"31587605", +1429 => x"88180856", +1430 => x"567480d7", +1431 => x"a82e80e0", +1432 => x"388c1708", +1433 => x"708c170c", +1434 => x"7588120c", +1435 => x"53fe8939", +1436 => x"8814088c", +1437 => x"1508708c", +1438 => x"130c5988", +1439 => x"190cfea3", +1440 => x"3975832a", +1441 => x"70545480", +1442 => x"74248198", +1443 => x"3872822c", +1444 => x"81712b80", +1445 => x"d7a40807", +1446 => x"80d7a00b", +1447 => x"84050c74", +1448 => x"10101080", +1449 => x"d7a00588", +1450 => x"1108718c", +1451 => x"1b0c7088", +1452 => x"1b0c7988", +1453 => x"130c565a", +1454 => x"55768c15", +1455 => x"0cff8439", +1456 => x"8159fdb4", +1457 => x"39771673", +1458 => x"81065455", +1459 => x"72983876", +1460 => x"08777131", +1461 => x"5875058c", +1462 => x"18088819", +1463 => x"08718c12", +1464 => x"0c88120c", +1465 => x"55557481", +1466 => x"0784180c", +1467 => x"7680d7a0", +1468 => x"0b88050c", +1469 => x"80d79c08", +1470 => x"7526fec7", +1471 => x"3880d798", +1472 => x"08527951", +1473 => x"fafd3f79", +1474 => x"5193923f", +1475 => x"feba3981", +1476 => x"778c170c", +1477 => x"7788170c", +1478 => x"758c190c", +1479 => x"7588190c", +1480 => x"59fd8039", +1481 => x"83147082", +1482 => x"2c81712b", +1483 => x"80d7a408", +1484 => x"0780d7a0", +1485 => x"0b84050c", +1486 => x"75101010", +1487 => x"80d7a005", +1488 => x"88110871", +1489 => x"8c1c0c70", +1490 => x"881c0c7a", +1491 => x"88130c57", +1492 => x"5b5653fe", +1493 => x"e4398073", +1494 => x"24a33872", +1495 => x"822c8171", +1496 => x"2b80d7a4", +1497 => x"080780d7", +1498 => x"a00b8405", +1499 => x"0c58748c", +1500 => x"180c7388", +1501 => x"180c7688", +1502 => x"160cfdc3", +1503 => x"39831370", +1504 => x"822c8171", +1505 => x"2b80d7a4", +1506 => x"080780d7", +1507 => x"a00b8405", +1508 => x"0c5953da", +1509 => x"39f93d0d", +1510 => x"797b5853", +1511 => x"800b80cf", +1512 => x"e4085356", +1513 => x"72722ebc", +1514 => x"3884dc13", +1515 => x"5574762e", +1516 => x"b3388815", +1517 => x"08841608", +1518 => x"ff055454", +1519 => x"80732499", +1520 => x"388c1422", +1521 => x"70902b53", +1522 => x"587180d4", +1523 => x"3880dc14", +1524 => x"ff145454", +1525 => x"728025e9", +1526 => x"38740855", +1527 => x"74d43880", +1528 => x"cfe40852", +1529 => x"84dc1255", +1530 => x"74802ead", +1531 => x"38881508", +1532 => x"841608ff", +1533 => x"05545480", +1534 => x"73249838", +1535 => x"8c142270", +1536 => x"902b5358", +1537 => x"71ad3880", +1538 => x"dc14ff14", +1539 => x"54547280", +1540 => x"25ea3874", +1541 => x"085574d5", +1542 => x"3875800c", +1543 => x"893d0d04", +1544 => x"7351762d", +1545 => x"75800807", +1546 => x"80dc15ff", +1547 => x"15555556", +1548 => x"ffa23973", +1549 => x"51762d75", +1550 => x"80080780", +1551 => x"dc15ff15", +1552 => x"555556ca", +1553 => x"39ea3d0d", +1554 => x"688c1122", +1555 => x"700a100a", +1556 => x"81065758", +1557 => x"567480e4", +1558 => x"388e1622", +1559 => x"70902b70", +1560 => x"902c5155", +1561 => x"58807424", +1562 => x"b138983d", +1563 => x"c4055373", +1564 => x"5280cfe4", +1565 => x"08519481", +1566 => x"3f800b80", +1567 => x"08249738", +1568 => x"7983e080", +1569 => x"06547380", +1570 => x"c0802e81", +1571 => x"8f387382", +1572 => x"80802e81", +1573 => x"91388c16", +1574 => x"22577690", +1575 => x"80075473", +1576 => x"8c172388", +1577 => x"805280cf", +1578 => x"e4085181", +1579 => x"9b3f8008", +1580 => x"9d388c16", +1581 => x"22820755", +1582 => x"748c1723", +1583 => x"80c31670", +1584 => x"770c9017", +1585 => x"0c810b94", +1586 => x"170c983d", +1587 => x"0d0480cf", +1588 => x"e408a8e6", +1589 => x"0bbc120c", +1590 => x"588c1622", +1591 => x"81800754", +1592 => x"738c1723", +1593 => x"8008760c", +1594 => x"80089017", +1595 => x"0c88800b", +1596 => x"94170c74", +1597 => x"802ed338", +1598 => x"8e162270", +1599 => x"902b7090", +1600 => x"2c535654", +1601 => x"9afe3f80", +1602 => x"08802eff", +1603 => x"bd388c16", +1604 => x"22810757", +1605 => x"768c1723", +1606 => x"983d0d04", +1607 => x"810b8c17", +1608 => x"225855fe", +1609 => x"f539a816", +1610 => x"0880c39d", +1611 => x"2e098106", +1612 => x"fee4388c", +1613 => x"16228880", +1614 => x"0754738c", +1615 => x"17238880", +1616 => x"0b80cc17", +1617 => x"0cfedc39", +1618 => x"f43d0d7e", +1619 => x"608b1170", +1620 => x"f8065b55", +1621 => x"555d7296", +1622 => x"26833890", +1623 => x"58807824", +1624 => x"74792607", +1625 => x"55805474", +1626 => x"742e0981", +1627 => x"0680ca38", +1628 => x"7c518ea8", +1629 => x"3f7783f7", +1630 => x"2680c538", +1631 => x"77832a70", +1632 => x"10101080", +1633 => x"d7a0058c", +1634 => x"11085858", +1635 => x"5475772e", +1636 => x"81f03884", +1637 => x"1608fc06", +1638 => x"8c170888", +1639 => x"1808718c", +1640 => x"120c8812", +1641 => x"0c5b7605", +1642 => x"84110881", +1643 => x"0784120c", +1644 => x"537c518d", +1645 => x"e83f8816", +1646 => x"5473800c", +1647 => x"8e3d0d04", +1648 => x"77892a78", +1649 => x"832a5854", +1650 => x"73802ebf", +1651 => x"3877862a", +1652 => x"b8055784", +1653 => x"7427b438", +1654 => x"80db1457", +1655 => x"947427ab", +1656 => x"38778c2a", +1657 => x"80ee0557", +1658 => x"80d47427", +1659 => x"9e38778f", +1660 => x"2a80f705", +1661 => x"5782d474", +1662 => x"27913877", +1663 => x"922a80fc", +1664 => x"05578ad4", +1665 => x"74278438", +1666 => x"80fe5776", +1667 => x"10101080", +1668 => x"d7a0058c", +1669 => x"11085653", +1670 => x"74732ea3", +1671 => x"38841508", +1672 => x"fc067079", +1673 => x"31555673", +1674 => x"8f2488e4", +1675 => x"38738025", +1676 => x"88e6388c", +1677 => x"15085574", +1678 => x"732e0981", +1679 => x"06df3881", +1680 => x"175980d7", +1681 => x"b0085675", +1682 => x"80d7a82e", +1683 => x"82cc3884", +1684 => x"1608fc06", +1685 => x"70793155", +1686 => x"55738f24", +1687 => x"bb3880d7", +1688 => x"a80b80d7", +1689 => x"b40c80d7", +1690 => x"a80b80d7", +1691 => x"b00c8074", +1692 => x"2480db38", +1693 => x"74168411", +1694 => x"08810784", +1695 => x"120c53fe", +1696 => x"b0398816", +1697 => x"8c110857", +1698 => x"5975792e", +1699 => x"098106fe", +1700 => x"82388214", +1701 => x"59ffab39", +1702 => x"77167881", +1703 => x"0784180c", +1704 => x"7080d7b4", +1705 => x"0c7080d7", +1706 => x"b00c80d7", +1707 => x"a80b8c12", +1708 => x"0c8c1108", +1709 => x"88120c74", +1710 => x"81078412", +1711 => x"0c740574", +1712 => x"710c5b7c", +1713 => x"518bd63f", +1714 => x"881654fd", +1715 => x"ec3983ff", +1716 => x"75278391", +1717 => x"3874892a", +1718 => x"75832a54", +1719 => x"5473802e", +1720 => x"bf387486", +1721 => x"2ab80553", +1722 => x"847427b4", +1723 => x"3880db14", +1724 => x"53947427", +1725 => x"ab38748c", +1726 => x"2a80ee05", +1727 => x"5380d474", +1728 => x"279e3874", +1729 => x"8f2a80f7", +1730 => x"055382d4", +1731 => x"74279138", +1732 => x"74922a80", +1733 => x"fc05538a", +1734 => x"d4742784", +1735 => x"3880fe53", +1736 => x"72101010", +1737 => x"80d7a005", +1738 => x"88110855", +1739 => x"5773772e", +1740 => x"868b3884", +1741 => x"1408fc06", +1742 => x"5b747b27", +1743 => x"8d388814", +1744 => x"08547377", +1745 => x"2e098106", +1746 => x"ea388c14", +1747 => x"0880d7a0", +1748 => x"0b840508", +1749 => x"718c190c", +1750 => x"7588190c", +1751 => x"7788130c", +1752 => x"5c57758c", +1753 => x"150c7853", +1754 => x"80792483", +1755 => x"98387282", +1756 => x"2c81712b", +1757 => x"5656747b", +1758 => x"2680ca38", +1759 => x"7a750657", +1760 => x"7682a338", +1761 => x"78fc0684", +1762 => x"05597410", +1763 => x"707c0655", +1764 => x"55738292", +1765 => x"38841959", +1766 => x"f13980d7", +1767 => x"a00b8405", +1768 => x"0879545b", +1769 => x"788025c6", +1770 => x"3882da39", +1771 => x"74097b06", +1772 => x"7080d7a0", +1773 => x"0b84050c", +1774 => x"5b741055", +1775 => x"747b2685", +1776 => x"387485bc", +1777 => x"3880d7a0", +1778 => x"0b880508", +1779 => x"70841208", +1780 => x"fc06707b", +1781 => x"317b7226", +1782 => x"8f722507", +1783 => x"5d575c5c", +1784 => x"5578802e", +1785 => x"80d93879", +1786 => x"1580d798", +1787 => x"08199011", +1788 => x"59545680", +1789 => x"d79408ff", +1790 => x"2e8838a0", +1791 => x"8f13e080", +1792 => x"06577652", +1793 => x"7c518996", +1794 => x"3f800854", +1795 => x"8008ff2e", +1796 => x"90388008", +1797 => x"762782a7", +1798 => x"387480d7", +1799 => x"a02e829f", +1800 => x"3880d7a0", +1801 => x"0b880508", +1802 => x"55841508", +1803 => x"fc067079", +1804 => x"31797226", +1805 => x"8f722507", +1806 => x"5d555a7a", +1807 => x"83f23877", +1808 => x"81078416", +1809 => x"0c771570", +1810 => x"80d7a00b", +1811 => x"88050c74", +1812 => x"81078412", +1813 => x"0c567c51", +1814 => x"88c33f88", +1815 => x"15547380", +1816 => x"0c8e3d0d", +1817 => x"0474832a", +1818 => x"70545480", +1819 => x"7424819b", +1820 => x"3872822c", +1821 => x"81712b80", +1822 => x"d7a40807", +1823 => x"7080d7a0", +1824 => x"0b84050c", +1825 => x"75101010", +1826 => x"80d7a005", +1827 => x"88110871", +1828 => x"8c1b0c70", +1829 => x"881b0c79", +1830 => x"88130c57", +1831 => x"555c5575", +1832 => x"8c150cfd", +1833 => x"c1397879", +1834 => x"10101080", +1835 => x"d7a00570", +1836 => x"565b5c8c", +1837 => x"14085675", +1838 => x"742ea338", +1839 => x"841608fc", +1840 => x"06707931", +1841 => x"5853768f", +1842 => x"2483f138", +1843 => x"76802584", +1844 => x"af388c16", +1845 => x"08567574", +1846 => x"2e098106", +1847 => x"df388814", +1848 => x"811a7083", +1849 => x"06555a54", +1850 => x"72c9387b", +1851 => x"83065675", +1852 => x"802efdb8", +1853 => x"38ff1cf8", +1854 => x"1b5b5c88", +1855 => x"1a087a2e", +1856 => x"ea38fdb5", +1857 => x"39831953", +1858 => x"fce43983", +1859 => x"1470822c", +1860 => x"81712b80", +1861 => x"d7a40807", +1862 => x"7080d7a0", +1863 => x"0b84050c", +1864 => x"76101010", +1865 => x"80d7a005", +1866 => x"88110871", +1867 => x"8c1c0c70", +1868 => x"881c0c7a", +1869 => x"88130c58", +1870 => x"535d5653", +1871 => x"fee13980", +1872 => x"d6e40817", +1873 => x"59800876", +1874 => x"2e818b38", +1875 => x"80d79408", +1876 => x"ff2e848e", +1877 => x"38737631", +1878 => x"1980d6e4", +1879 => x"0c738706", +1880 => x"70565372", +1881 => x"802e8838", +1882 => x"88733170", +1883 => x"15555576", +1884 => x"149fff06", +1885 => x"a0807131", +1886 => x"1670547e", +1887 => x"53515386", +1888 => x"9d3f8008", +1889 => x"568008ff", +1890 => x"2e819e38", +1891 => x"80d6e408", +1892 => x"137080d6", +1893 => x"e40c7475", +1894 => x"80d7a00b", +1895 => x"88050c77", +1896 => x"76311581", +1897 => x"07555659", +1898 => x"7a80d7a0", +1899 => x"2e83c038", +1900 => x"798f2682", +1901 => x"ef38810b", +1902 => x"84150c84", +1903 => x"1508fc06", +1904 => x"70793179", +1905 => x"72268f72", +1906 => x"25075d55", +1907 => x"5a7a802e", +1908 => x"fced3880", +1909 => x"db398008", +1910 => x"9fff0655", +1911 => x"74feed38", +1912 => x"7880d6e4", +1913 => x"0c80d7a0", +1914 => x"0b880508", +1915 => x"7a188107", +1916 => x"84120c55", +1917 => x"80d79008", +1918 => x"79278638", +1919 => x"7880d790", +1920 => x"0c80d78c", +1921 => x"087927fc", +1922 => x"a0387880", +1923 => x"d78c0c84", +1924 => x"1508fc06", +1925 => x"70793179", +1926 => x"72268f72", +1927 => x"25075d55", +1928 => x"5a7a802e", +1929 => x"fc993888", +1930 => x"39807457", +1931 => x"53fedd39", +1932 => x"7c5184e9", +1933 => x"3f800b80", +1934 => x"0c8e3d0d", +1935 => x"04807324", +1936 => x"a5387282", +1937 => x"2c81712b", +1938 => x"80d7a408", +1939 => x"077080d7", +1940 => x"a00b8405", +1941 => x"0c5c5a76", +1942 => x"8c170c73", +1943 => x"88170c75", +1944 => x"88180cf9", +1945 => x"fd398313", +1946 => x"70822c81", +1947 => x"712b80d7", +1948 => x"a4080770", +1949 => x"80d7a00b", +1950 => x"84050c5d", +1951 => x"5b53d839", +1952 => x"7a75065c", +1953 => x"7bfc9f38", +1954 => x"84197510", +1955 => x"5659f139", +1956 => x"ff178105", +1957 => x"59f7ab39", +1958 => x"8c150888", +1959 => x"1608718c", +1960 => x"120c8812", +1961 => x"0c597515", +1962 => x"84110881", +1963 => x"0784120c", +1964 => x"587c5183", +1965 => x"e83f8815", +1966 => x"54fba339", +1967 => x"77167881", +1968 => x"0784180c", +1969 => x"8c170888", +1970 => x"1808718c", +1971 => x"120c8812", +1972 => x"0c5c7080", +1973 => x"d7b40c70", +1974 => x"80d7b00c", +1975 => x"80d7a80b", +1976 => x"8c120c8c", +1977 => x"11088812", +1978 => x"0c778107", +1979 => x"84120c77", +1980 => x"0577710c", +1981 => x"557c5183", +1982 => x"a43f8816", +1983 => x"54f5ba39", +1984 => x"72168411", +1985 => x"08810784", +1986 => x"120c588c", +1987 => x"16088817", +1988 => x"08718c12", +1989 => x"0c88120c", +1990 => x"577c5183", +1991 => x"803f8816", +1992 => x"54f59639", +1993 => x"7284150c", +1994 => x"f41af806", +1995 => x"70841d08", +1996 => x"81060784", +1997 => x"1d0c701c", +1998 => x"5556850b", +1999 => x"84150c85", +2000 => x"0b88150c", +2001 => x"8f7627fd", +2002 => x"ab38881b", +2003 => x"527c51eb", +2004 => x"e83f80d7", +2005 => x"a00b8805", +2006 => x"0880d6e4", +2007 => x"085a55fd", +2008 => x"93397880", +2009 => x"d6e40c73", +2010 => x"80d7940c", +2011 => x"fbef3972", +2012 => x"84150cfc", +2013 => x"ff39fb3d", +2014 => x"0d77707a", +2015 => x"7c585553", +2016 => x"568f7527", +2017 => x"80e63872", +2018 => x"76078306", +2019 => x"517080dc", +2020 => x"38757352", +2021 => x"54707084", +2022 => x"05520874", +2023 => x"70840556", +2024 => x"0c737170", +2025 => x"84055308", +2026 => x"71708405", +2027 => x"530c7170", +2028 => x"84055308", +2029 => x"71708405", +2030 => x"530c7170", +2031 => x"84055308", +2032 => x"71708405", +2033 => x"530cf016", +2034 => x"5654748f", +2035 => x"26c73883", +2036 => x"75279538", +2037 => x"70708405", +2038 => x"52087470", +2039 => x"8405560c", +2040 => x"fc155574", +2041 => x"8326ed38", +2042 => x"73715452", +2043 => x"ff155170", +2044 => x"ff2e9838", +2045 => x"72708105", +2046 => x"54337270", +2047 => x"81055434", +2048 => x"ff115170", +2049 => x"ff2e0981", +2050 => x"06ea3875", +2051 => x"800c873d", +2052 => x"0d04fb3d", +2053 => x"0d777a71", +2054 => x"028c05a3", +2055 => x"05335854", +2056 => x"54568373", +2057 => x"2780d438", +2058 => x"75830651", +2059 => x"7080cc38", +2060 => x"74882b75", +2061 => x"07707190", +2062 => x"2b075551", +2063 => x"8f7327a7", +2064 => x"38737270", +2065 => x"8405540c", +2066 => x"71747170", +2067 => x"8405530c", +2068 => x"74717084", +2069 => x"05530c74", +2070 => x"71708405", +2071 => x"530cf014", +2072 => x"5452728f", +2073 => x"26db3883", +2074 => x"73279038", +2075 => x"73727084", +2076 => x"05540cfc", +2077 => x"13537283", +2078 => x"26f238ff", +2079 => x"135170ff", +2080 => x"2e933874", +2081 => x"72708105", +2082 => x"5434ff11", +2083 => x"5170ff2e", +2084 => x"098106ef", +2085 => x"3875800c", +2086 => x"873d0d04", +2087 => x"04047070", +2088 => x"7070800b", +2089 => x"80dfe00c", +2090 => x"765184f3", +2091 => x"3f800853", +2092 => x"8008ff2e", +2093 => x"89387280", +2094 => x"0c505050", +2095 => x"500480df", +2096 => x"e0085473", +2097 => x"802eef38", +2098 => x"7574710c", +2099 => x"5272800c", +2100 => x"50505050", +2101 => x"04f93d0d", +2102 => x"797c557b", +2103 => x"548e1122", +2104 => x"70902b70", +2105 => x"902c5557", +2106 => x"80cfe408", +2107 => x"53585683", +2108 => x"f63f8008", +2109 => x"57800b80", +2110 => x"08249338", +2111 => x"80d01608", +2112 => x"80080580", +2113 => x"d0170c76", +2114 => x"800c893d", +2115 => x"0d048c16", +2116 => x"2283dfff", +2117 => x"0655748c", +2118 => x"17237680", +2119 => x"0c893d0d", +2120 => x"04fa3d0d", +2121 => x"788c1122", +2122 => x"70882a70", +2123 => x"81065157", +2124 => x"585674a9", +2125 => x"388c1622", +2126 => x"83dfff06", +2127 => x"55748c17", +2128 => x"237a5479", +2129 => x"538e1622", +2130 => x"70902b70", +2131 => x"902c5456", +2132 => x"80cfe408", +2133 => x"525681b2", +2134 => x"3f883d0d", +2135 => x"04825480", +2136 => x"538e1622", +2137 => x"70902b70", +2138 => x"902c5456", +2139 => x"80cfe408", +2140 => x"525782bb", +2141 => x"3f8c1622", +2142 => x"83dfff06", +2143 => x"55748c17", +2144 => x"237a5479", +2145 => x"538e1622", +2146 => x"70902b70", +2147 => x"902c5456", +2148 => x"80cfe408", +2149 => x"525680f2", +2150 => x"3f883d0d", +2151 => x"04f93d0d", +2152 => x"797c557b", +2153 => x"548e1122", +2154 => x"70902b70", +2155 => x"902c5557", +2156 => x"80cfe408", +2157 => x"53585681", +2158 => x"f63f8008", +2159 => x"578008ff", +2160 => x"2e99388c", +2161 => x"1622a080", +2162 => x"0755748c", +2163 => x"17238008", +2164 => x"80d0170c", +2165 => x"76800c89", +2166 => x"3d0d048c", +2167 => x"162283df", +2168 => x"ff065574", +2169 => x"8c172376", +2170 => x"800c893d", +2171 => x"0d047070", +2172 => x"70748e11", +2173 => x"2270902b", +2174 => x"70902c55", +2175 => x"51515380", +2176 => x"cfe40851", +2177 => x"bd3f5050", +2178 => x"5004fb3d", +2179 => x"0d800b80", +2180 => x"dfe00c7a", +2181 => x"53795278", +2182 => x"5182ff3f", +2183 => x"80085580", +2184 => x"08ff2e88", +2185 => x"3874800c", +2186 => x"873d0d04", +2187 => x"80dfe008", +2188 => x"5675802e", +2189 => x"f0387776", +2190 => x"710c5474", +2191 => x"800c873d", +2192 => x"0d047070", +2193 => x"7070800b", +2194 => x"80dfe00c", +2195 => x"765184cc", +2196 => x"3f800853", +2197 => x"8008ff2e", +2198 => x"89387280", +2199 => x"0c505050", +2200 => x"500480df", +2201 => x"e0085473", +2202 => x"802eef38", +2203 => x"7574710c", +2204 => x"5272800c", +2205 => x"50505050", +2206 => x"04fc3d0d", +2207 => x"800b80df", +2208 => x"e00c7852", +2209 => x"775187b3", +2210 => x"3f800854", +2211 => x"8008ff2e", +2212 => x"88387380", +2213 => x"0c863d0d", +2214 => x"0480dfe0", +2215 => x"08557480", +2216 => x"2ef03876", +2217 => x"75710c53", +2218 => x"73800c86", +2219 => x"3d0d04fb", +2220 => x"3d0d800b", +2221 => x"80dfe00c", +2222 => x"7a537952", +2223 => x"7851848e", +2224 => x"3f800855", +2225 => x"8008ff2e", +2226 => x"88387480", +2227 => x"0c873d0d", +2228 => x"0480dfe0", +2229 => x"08567580", +2230 => x"2ef03877", +2231 => x"76710c54", +2232 => x"74800c87", +2233 => x"3d0d04fb", +2234 => x"3d0d800b", +2235 => x"80dfe00c", +2236 => x"7a537952", +2237 => x"78518296", +2238 => x"3f800855", +2239 => x"8008ff2e", +2240 => x"88387480", +2241 => x"0c873d0d", +2242 => x"0480dfe0", +2243 => x"08567580", +2244 => x"2ef03877", +2245 => x"76710c54", +2246 => x"74800c87", +2247 => x"3d0d0470", +2248 => x"707080df", +2249 => x"d0088938", +2250 => x"80dfe40b", +2251 => x"80dfd00c", +2252 => x"80dfd008", +2253 => x"75115252", +2254 => x"ff537087", +2255 => x"fb808026", +2256 => x"88387080", +2257 => x"dfd00c71", +2258 => x"5372800c", +2259 => x"50505004", +2260 => x"fd3d0d80", +2261 => x"0b80cfd8", +2262 => x"08545472", +2263 => x"812e9b38", +2264 => x"7380dfd4", +2265 => x"0cc2bf3f", +2266 => x"c1963f80", +2267 => x"dfa85281", +2268 => x"51c3fd3f", +2269 => x"80085186", +2270 => x"c23f7280", +2271 => x"dfd40cc2", +2272 => x"a53fc0fc", +2273 => x"3f80dfa8", +2274 => x"528151c3", +2275 => x"e33f8008", +2276 => x"5186a83f", +2277 => x"00ff3900", +2278 => x"ff39f53d", +2279 => x"0d7e6080", +2280 => x"dfd40870", +2281 => x"5b585b5b", +2282 => x"7580c238", +2283 => x"777a25a1", +2284 => x"38771b70", +2285 => x"337081ff", +2286 => x"06585859", +2287 => x"758a2e98", +2288 => x"387681ff", +2289 => x"0651c1bd", +2290 => x"3f811858", +2291 => x"797824e1", +2292 => x"3879800c", +2293 => x"8d3d0d04", +2294 => x"8d51c1a9", +2295 => x"3f783370", +2296 => x"81ff0652", +2297 => x"57c19e3f", +2298 => x"811858e0", +2299 => x"3979557a", +2300 => x"547d5385", +2301 => x"528d3dfc", +2302 => x"0551c0c6", +2303 => x"3f800856", +2304 => x"85b23f7b", +2305 => x"80080c75", +2306 => x"800c8d3d", +2307 => x"0d04f63d", +2308 => x"0d7d7f80", +2309 => x"dfd40870", +2310 => x"5b585a5a", +2311 => x"7580c138", +2312 => x"777925b3", +2313 => x"38c0b93f", +2314 => x"800881ff", +2315 => x"06708d32", +2316 => x"7030709f", +2317 => x"2a515157", +2318 => x"57768a2e", +2319 => x"80c43875", +2320 => x"802ebf38", +2321 => x"771a5676", +2322 => x"76347651", +2323 => x"c0b73f81", +2324 => x"18587878", +2325 => x"24cf3877", +2326 => x"5675800c", +2327 => x"8c3d0d04", +2328 => x"78557954", +2329 => x"7c538452", +2330 => x"8c3dfc05", +2331 => x"51ffbfd2", +2332 => x"3f800856", +2333 => x"84be3f7a", +2334 => x"80080c75", +2335 => x"800c8c3d", +2336 => x"0d04771a", +2337 => x"598a7934", +2338 => x"8118588d", +2339 => x"51ffbff5", +2340 => x"3f8a51ff", +2341 => x"bfef3f77", +2342 => x"56ffbe39", +2343 => x"fb3d0d80", +2344 => x"dfd40870", +2345 => x"56547388", +2346 => x"3874800c", +2347 => x"873d0d04", +2348 => x"77538352", +2349 => x"873dfc05", +2350 => x"51ffbf86", +2351 => x"3f800854", +2352 => x"83f23f75", +2353 => x"80080c73", +2354 => x"800c873d", +2355 => x"0d04fa3d", +2356 => x"0d80dfd4", +2357 => x"08802ea3", +2358 => x"387a5579", +2359 => x"54785386", +2360 => x"52883dfc", +2361 => x"0551ffbe", +2362 => x"d93f8008", +2363 => x"5683c53f", +2364 => x"7680080c", +2365 => x"75800c88", +2366 => x"3d0d0483", +2367 => x"b73f9d0b", +2368 => x"80080cff", +2369 => x"0b800c88", +2370 => x"3d0d04f7", +2371 => x"3d0d7b7d", +2372 => x"5b59bc53", +2373 => x"80527951", +2374 => x"f5f83f80", +2375 => x"70565798", +2376 => x"56741970", +2377 => x"3370782b", +2378 => x"79078118", +2379 => x"f81a5a58", +2380 => x"59555884", +2381 => x"7524ea38", +2382 => x"767a2384", +2383 => x"19588070", +2384 => x"56579856", +2385 => x"74187033", +2386 => x"70782b79", +2387 => x"078118f8", +2388 => x"1a5a5859", +2389 => x"51548475", +2390 => x"24ea3876", +2391 => x"821b2388", +2392 => x"19588070", +2393 => x"56579856", +2394 => x"74187033", +2395 => x"70782b79", +2396 => x"078118f8", +2397 => x"1a5a5859", +2398 => x"51548475", +2399 => x"24ea3876", +2400 => x"841b0c8c", +2401 => x"19588070", +2402 => x"56579856", +2403 => x"74187033", +2404 => x"70782b79", +2405 => x"078118f8", +2406 => x"1a5a5859", +2407 => x"51548475", +2408 => x"24ea3876", +2409 => x"881b2390", +2410 => x"19588070", +2411 => x"56579856", +2412 => x"74187033", +2413 => x"70782b79", +2414 => x"078118f8", +2415 => x"1a5a5859", +2416 => x"51548475", +2417 => x"24ea3876", +2418 => x"8a1b2394", +2419 => x"19588070", +2420 => x"56579856", +2421 => x"74187033", +2422 => x"70782b79", +2423 => x"078118f8", +2424 => x"1a5a5859", +2425 => x"51548475", +2426 => x"24ea3876", +2427 => x"8c1b2398", +2428 => x"19588070", +2429 => x"56579856", +2430 => x"74187033", +2431 => x"70782b79", +2432 => x"078118f8", +2433 => x"1a5a5859", +2434 => x"51548475", +2435 => x"24ea3876", +2436 => x"8e1b239c", +2437 => x"19588070", +2438 => x"5657b856", +2439 => x"74187033", +2440 => x"70782b79", +2441 => x"078118f8", +2442 => x"1a5a5859", +2443 => x"5a548875", +2444 => x"24ea3876", +2445 => x"901b0c8b", +2446 => x"3d0d04e9", +2447 => x"3d0d6a80", +2448 => x"dfd40857", +2449 => x"57759338", +2450 => x"80c0800b", +2451 => x"84180c75", +2452 => x"ac180c75", +2453 => x"800c993d", +2454 => x"0d04893d", +2455 => x"70556a54", +2456 => x"558a5299", +2457 => x"3dffbc05", +2458 => x"51ffbbd6", +2459 => x"3f800877", +2460 => x"53755256", +2461 => x"fd953fbc", +2462 => x"3f778008", +2463 => x"0c75800c", +2464 => x"993d0d04", +2465 => x"fc3d0d81", +2466 => x"5480dfd4", +2467 => x"08883873", +2468 => x"800c863d", +2469 => x"0d047653", +2470 => x"97b95286", +2471 => x"3dfc0551", +2472 => x"ffbb9f3f", +2473 => x"8008548c", +2474 => x"3f748008", +2475 => x"0c73800c", +2476 => x"863d0d04", +2477 => x"80cfe408", +2478 => x"800c04f7", +2479 => x"3d0d7b80", +2480 => x"cfe40882", +2481 => x"c811085a", +2482 => x"545a7780", +2483 => x"2e80da38", +2484 => x"81881884", +2485 => x"1908ff05", +2486 => x"81712b59", +2487 => x"55598074", +2488 => x"2480ea38", +2489 => x"807424b5", +2490 => x"3873822b", +2491 => x"78118805", +2492 => x"56568180", +2493 => x"19087706", +2494 => x"5372802e", +2495 => x"b6387816", +2496 => x"70085353", +2497 => x"79517408", +2498 => x"53722dff", +2499 => x"14fc17fc", +2500 => x"1779812c", +2501 => x"5a575754", +2502 => x"738025d6", +2503 => x"38770858", +2504 => x"77ffad38", +2505 => x"80cfe408", +2506 => x"53bc1308", +2507 => x"a5387951", +2508 => x"f8e23f74", +2509 => x"0853722d", +2510 => x"ff14fc17", +2511 => x"fc177981", +2512 => x"2c5a5757", +2513 => x"54738025", +2514 => x"ffa838d1", +2515 => x"398057ff", +2516 => x"93397251", +2517 => x"bc130854", +2518 => x"732d7951", +2519 => x"f8b63f70", +2520 => x"7080dfb0", +2521 => x"0bfc0570", +2522 => x"08525270", +2523 => x"ff2e9138", +2524 => x"702dfc12", +2525 => x"70085252", +2526 => x"70ff2e09", +2527 => x"8106f138", +2528 => x"50500404", +2529 => x"ffbb8c3f", +2530 => x"04000000", +2531 => x"00000040", +2532 => x"48656c6c", +2533 => x"6f20776f", +2534 => x"726c6420", +2535 => x"310a0000", +2536 => x"48656c6c", +2537 => x"6f20776f", +2538 => x"726c6420", +2539 => x"320a0000", +2540 => x"0a000000", +2541 => x"43000000", +2542 => x"64756d6d", +2543 => x"792e6578", +2544 => x"65000000", +2545 => x"00ffffff", +2546 => x"ff00ffff", +2547 => x"ffff00ff", +2548 => x"ffffff00", +2549 => x"00000000", +2550 => x"00000000", +2551 => x"00000000", +2552 => x"00002fb8", +2553 => x"000027e8", +2554 => x"00000000", +2555 => x"00002a50", +2556 => x"00002aac", +2557 => x"00002b08", +2558 => x"00000000", +2559 => x"00000000", +2560 => x"00000000", +2561 => x"00000000", +2562 => x"00000000", +2563 => x"00000000", +2564 => x"00000000", +2565 => x"00000000", +2566 => x"00000000", +2567 => x"000027b4", +2568 => x"00000000", +2569 => x"00000000", +2570 => x"00000000", +2571 => x"00000000", +2572 => x"00000000", +2573 => x"00000000", +2574 => x"00000000", +2575 => x"00000000", +2576 => x"00000000", +2577 => x"00000000", +2578 => x"00000000", +2579 => x"00000000", +2580 => x"00000000", +2581 => x"00000000", +2582 => x"00000000", +2583 => x"00000000", +2584 => x"00000000", +2585 => x"00000000", +2586 => x"00000000", +2587 => x"00000000", +2588 => x"00000000", +2589 => x"00000000", +2590 => x"00000000", +2591 => x"00000000", +2592 => x"00000000", +2593 => x"00000000", +2594 => x"00000000", +2595 => x"00000000", +2596 => x"00000001", +2597 => x"330eabcd", +2598 => x"1234e66d", +2599 => x"deec0005", +2600 => x"000b0000", +2601 => x"00000000", +2602 => x"00000000", +2603 => x"00000000", +2604 => x"00000000", +2605 => x"00000000", +2606 => x"00000000", +2607 => x"00000000", +2608 => x"00000000", +2609 => x"00000000", +2610 => x"00000000", +2611 => x"00000000", +2612 => x"00000000", +2613 => x"00000000", +2614 => x"00000000", +2615 => x"00000000", +2616 => x"00000000", +2617 => x"00000000", +2618 => x"00000000", +2619 => x"00000000", +2620 => x"00000000", +2621 => x"00000000", +2622 => x"00000000", +2623 => x"00000000", +2624 => x"00000000", +2625 => x"00000000", +2626 => x"00000000", +2627 => x"00000000", +2628 => x"00000000", +2629 => x"00000000", +2630 => x"00000000", +2631 => x"00000000", +2632 => x"00000000", +2633 => x"00000000", +2634 => x"00000000", +2635 => x"00000000", +2636 => x"00000000", +2637 => x"00000000", +2638 => x"00000000", +2639 => x"00000000", +2640 => x"00000000", +2641 => x"00000000", +2642 => x"00000000", +2643 => x"00000000", +2644 => x"00000000", +2645 => x"00000000", +2646 => x"00000000", +2647 => x"00000000", +2648 => x"00000000", +2649 => x"00000000", +2650 => x"00000000", +2651 => x"00000000", +2652 => x"00000000", +2653 => x"00000000", +2654 => x"00000000", +2655 => x"00000000", +2656 => x"00000000", +2657 => x"00000000", +2658 => x"00000000", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00000000", +2663 => x"00000000", +2664 => x"00000000", +2665 => x"00000000", +2666 => x"00000000", +2667 => x"00000000", +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"00000000", +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"00000000", +2707 => x"00000000", +2708 => x"00000000", +2709 => x"00000000", +2710 => x"00000000", +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"ffffffff", +2790 => x"00000000", +2791 => x"00020000", +2792 => x"00000000", +2793 => x"00000000", +2794 => x"00002ba0", +2795 => x"00002ba0", +2796 => x"00002ba8", +2797 => x"00002ba8", +2798 => x"00002bb0", +2799 => x"00002bb0", +2800 => x"00002bb8", +2801 => x"00002bb8", +2802 => x"00002bc0", +2803 => x"00002bc0", +2804 => x"00002bc8", +2805 => x"00002bc8", +2806 => x"00002bd0", +2807 => x"00002bd0", +2808 => x"00002bd8", +2809 => x"00002bd8", +2810 => x"00002be0", +2811 => x"00002be0", +2812 => x"00002be8", +2813 => x"00002be8", +2814 => x"00002bf0", +2815 => x"00002bf0", +2816 => x"00002bf8", +2817 => x"00002bf8", +2818 => x"00002c00", +2819 => x"00002c00", +2820 => x"00002c08", +2821 => x"00002c08", +2822 => x"00002c10", +2823 => x"00002c10", +2824 => x"00002c18", +2825 => x"00002c18", +2826 => x"00002c20", +2827 => x"00002c20", +2828 => x"00002c28", +2829 => x"00002c28", +2830 => x"00002c30", +2831 => x"00002c30", +2832 => x"00002c38", +2833 => x"00002c38", +2834 => x"00002c40", +2835 => x"00002c40", +2836 => x"00002c48", +2837 => x"00002c48", +2838 => x"00002c50", +2839 => x"00002c50", +2840 => x"00002c58", +2841 => x"00002c58", +2842 => x"00002c60", +2843 => x"00002c60", +2844 => x"00002c68", +2845 => x"00002c68", +2846 => x"00002c70", +2847 => x"00002c70", +2848 => x"00002c78", +2849 => x"00002c78", +2850 => x"00002c80", +2851 => x"00002c80", +2852 => x"00002c88", +2853 => x"00002c88", +2854 => x"00002c90", +2855 => x"00002c90", +2856 => x"00002c98", +2857 => x"00002c98", +2858 => x"00002ca0", +2859 => x"00002ca0", +2860 => x"00002ca8", +2861 => x"00002ca8", +2862 => x"00002cb0", +2863 => x"00002cb0", +2864 => x"00002cb8", +2865 => x"00002cb8", +2866 => x"00002cc0", +2867 => x"00002cc0", +2868 => x"00002cc8", +2869 => x"00002cc8", +2870 => x"00002cd0", +2871 => x"00002cd0", +2872 => x"00002cd8", +2873 => x"00002cd8", +2874 => x"00002ce0", +2875 => x"00002ce0", +2876 => x"00002ce8", +2877 => x"00002ce8", +2878 => x"00002cf0", +2879 => x"00002cf0", +2880 => x"00002cf8", +2881 => x"00002cf8", +2882 => x"00002d00", +2883 => x"00002d00", +2884 => x"00002d08", +2885 => x"00002d08", +2886 => x"00002d10", +2887 => x"00002d10", +2888 => x"00002d18", +2889 => x"00002d18", +2890 => x"00002d20", +2891 => x"00002d20", +2892 => x"00002d28", +2893 => x"00002d28", +2894 => x"00002d30", +2895 => x"00002d30", +2896 => x"00002d38", +2897 => x"00002d38", +2898 => x"00002d40", +2899 => x"00002d40", +2900 => x"00002d48", +2901 => x"00002d48", +2902 => x"00002d50", +2903 => x"00002d50", +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"000027b8", +3051 => x"ffffffff", +3052 => x"00000000", +3053 => x"ffffffff", +3054 => 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(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write; + end if; + if (mem_readEnable = '1') then + mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))); + end if; + end if; +end process; + + + + +end dram_arch; diff --git a/zpu/hdl/example_medium/sim_fpga_top.vhd b/zpu/hdl/example_medium/sim_fpga_top.vhd index 2191889..a10da37 100644 --- a/zpu/hdl/example_medium/sim_fpga_top.vhd +++ b/zpu/hdl/example_medium/sim_fpga_top.vhd @@ -1,185 +1,185 @@ --------------------------------------------------------------------------------- --- 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; - ----- 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; - -entity fpga_top is -end fpga_top; - -use work.zpupkg.all; - -architecture behave of fpga_top is - - -signal clk : std_logic; - -signal areset : std_logic := '1'; - - -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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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(wordSize-1 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 - 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(wordSize-1 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 <= 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; - areset <= '0'; - end PROCESS clock; - - -end behave; +-------------------------------------------------------------------------------- +-- 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; + +---- 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; + +entity fpga_top is +end fpga_top; + +use work.zpupkg.all; + +architecture behave of fpga_top is + + +signal clk : std_logic; + +signal areset : std_logic := '1'; + + +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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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(wordSize-1 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 + 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(wordSize-1 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 <= 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; + areset <= '0'; + end PROCESS clock; + + +end behave; diff --git a/zpu/hdl/example_medium/zpu_config_trace.vhd b/zpu/hdl/example_medium/zpu_config_trace.vhd index d765d9a..a5b9192 100644 --- a/zpu/hdl/example_medium/zpu_config_trace.vhd +++ b/zpu/hdl/example_medium/zpu_config_trace.vhd @@ -1,17 +1,17 @@ -library ieee; -use ieee.std_logic_1164.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 := 27; - constant maxAddrBitDRAM : integer := 16; - constant maxAddrBitBRAM : integer := 16; - constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8"; - -end zpu_config; +library ieee; +use ieee.std_logic_1164.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 := 27; + constant maxAddrBitDRAM : integer := 16; + constant maxAddrBitBRAM : integer := 16; + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8"; + +end zpu_config; diff --git a/zpu/hdl/wishbone/wishbone_pkg.vhd b/zpu/hdl/wishbone/wishbone_pkg.vhd index 97240de..b6d30ee 100644 --- a/zpu/hdl/wishbone/wishbone_pkg.vhd +++ b/zpu/hdl/wishbone/wishbone_pkg.vhd @@ -1,86 +1,86 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -package wishbone_pkg is - - type wishbone_bus_in is record - adr : std_logic_vector(31 downto 0); - sel : std_logic_vector(3 downto 0); - we : std_logic; - dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we' - cyc : std_logic; - stb : std_logic; - end record; - - type wishbone_bus_out is record - dat : std_logic_vector(31 downto 0); - ack : std_logic; - end record; - - type wishbone_bus is record - insig : wishbone_bus_in; - outsig : wishbone_bus_out; - end record; - - component atomic32_access is - port ( cpu_clk : in std_logic; - areset : in std_logic; - - -- Wishbone from CPU interface - wb_16_i : in wishbone_bus_in; - wb_16_o : out wishbone_bus_out; - -- Wishbone to FPGA registers and ethernet core - wb_32_i : in wishbone_bus_out; - wb_32_o : out wishbone_bus_in); - end component; - - component eth_access_corr is - port ( cpu_clk : in std_logic; - areset : in std_logic; - - -- Wishbone from Wishbone MUX - eth_raw_o : out wishbone_bus_out; - eth_raw_i : in wishbone_bus_in; - - -- Wishbone ethernet core - eth_slave_i : in wishbone_bus_out; - eth_slave_o : out wishbone_bus_in); - end component; - - -end wishbone_pkg; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package wishbone_pkg is + + type wishbone_bus_in is record + adr : std_logic_vector(31 downto 0); + sel : std_logic_vector(3 downto 0); + we : std_logic; + dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we' + cyc : std_logic; + stb : std_logic; + end record; + + type wishbone_bus_out is record + dat : std_logic_vector(31 downto 0); + ack : std_logic; + end record; + + type wishbone_bus is record + insig : wishbone_bus_in; + outsig : wishbone_bus_out; + end record; + + component atomic32_access is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from CPU interface + wb_16_i : in wishbone_bus_in; + wb_16_o : out wishbone_bus_out; + -- Wishbone to FPGA registers and ethernet core + wb_32_i : in wishbone_bus_out; + wb_32_o : out wishbone_bus_in); + end component; + + component eth_access_corr is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from Wishbone MUX + eth_raw_o : out wishbone_bus_out; + eth_raw_i : in wishbone_bus_in; + + -- Wishbone ethernet core + eth_slave_i : in wishbone_bus_out; + eth_slave_o : out wishbone_bus_in); + end component; + + +end wishbone_pkg; diff --git a/zpu/hdl/wishbone/zpu_system.vhd b/zpu/hdl/wishbone/zpu_system.vhd index 5b95a80..07c5bdc 100644 --- a/zpu/hdl/wishbone/zpu_system.vhd +++ b/zpu/hdl/wishbone/zpu_system.vhd @@ -1,104 +1,104 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library IEEE; -use IEEE.STD_LOGIC_1164.all; -use IEEE.STD_LOGIC_UNSIGNED.all; - -library work; -use work.wishbone_pkg.all; -use work.zpupkg.all; -use work.zpu_config.all; - -entity zpu_system is - generic( - simulate : boolean := false); - port ( areset : in std_logic; - cpu_clk : in std_logic; - - -- ZPU Control signals - enable : in std_logic; - interrupt : in std_logic; - - zpu_status : out std_logic_vector(63 downto 0); - - -- wishbone interfaces - zpu_wb_i : in wishbone_bus_out; - zpu_wb_o : out wishbone_bus_in); -end zpu_system; - -architecture behave of zpu_system is - -signal mem_req : std_logic; -signal mem_we : std_logic; -signal mem_ack : std_logic; -signal mem_read : std_logic_vector(wordSize-1 downto 0); -signal mem_write : std_logic_vector(wordSize-1 downto 0); -signal out_mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); -signal mem_writeMask : std_logic_vector(wordBytes-1 downto 0); - - -begin - - my_zpu_core: - zpu_core port map ( - clk => cpu_clk, - areset => areset, - enable => enable, - mem_req => mem_req, - mem_we => mem_we, - mem_ack => mem_ack, - mem_read => mem_read, - mem_write => mem_write, - out_mem_addr => out_mem_addr, - mem_writeMask => mem_writeMask, - interrupt => interrupt, - zpu_status => zpu_status, - break => open); - - my_zpu_wb_bridge: - zpu_wb_bridge port map ( - clk => cpu_clk, - areset => areset, - mem_req => mem_req, - mem_we => mem_we, - mem_ack => mem_ack, - mem_read => mem_read, - mem_write => mem_write, - out_mem_addr => out_mem_addr, - mem_writeMask => mem_writeMask, - zpu_wb_i => zpu_wb_i, - zpu_wb_o => zpu_wb_o); - -end behave; +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.all; + +library work; +use work.wishbone_pkg.all; +use work.zpupkg.all; +use work.zpu_config.all; + +entity zpu_system is + generic( + simulate : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + + -- ZPU Control signals + enable : in std_logic; + interrupt : in std_logic; + + zpu_status : out std_logic_vector(63 downto 0); + + -- wishbone interfaces + zpu_wb_i : in wishbone_bus_out; + zpu_wb_o : out wishbone_bus_in); +end zpu_system; + +architecture behave of zpu_system is + +signal mem_req : std_logic; +signal mem_we : std_logic; +signal mem_ack : std_logic; +signal mem_read : std_logic_vector(wordSize-1 downto 0); +signal mem_write : std_logic_vector(wordSize-1 downto 0); +signal out_mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); +signal mem_writeMask : std_logic_vector(wordBytes-1 downto 0); + + +begin + + my_zpu_core: + zpu_core port map ( + clk => cpu_clk, + areset => areset, + enable => enable, + mem_req => mem_req, + mem_we => mem_we, + mem_ack => mem_ack, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => out_mem_addr, + mem_writeMask => mem_writeMask, + interrupt => interrupt, + zpu_status => zpu_status, + break => open); + + my_zpu_wb_bridge: + zpu_wb_bridge port map ( + clk => cpu_clk, + areset => areset, + mem_req => mem_req, + mem_we => mem_we, + mem_ack => mem_ack, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => out_mem_addr, + mem_writeMask => mem_writeMask, + zpu_wb_i => zpu_wb_i, + zpu_wb_o => zpu_wb_o); + +end behave; diff --git a/zpu/hdl/wishbone/zpu_wb_bridge.vhd b/zpu/hdl/wishbone/zpu_wb_bridge.vhd index 226d839..086ae11 100644 --- a/zpu/hdl/wishbone/zpu_wb_bridge.vhd +++ b/zpu/hdl/wishbone/zpu_wb_bridge.vhd @@ -1,83 +1,83 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; - -library work; -use work.phi_config.all; -use work.wishbone_pkg.all; -use work.zpupkg.all; -use work.zpu_config.all; - -entity zpu_wb_bridge is - port ( -- Native ZPU interface - clk : in std_logic; - areset : in std_logic; - - mem_req : in std_logic; - mem_we : in std_logic; - mem_ack : out std_logic; - mem_read : out std_logic_vector(wordSize-1 downto 0); - mem_write : in std_logic_vector(wordSize-1 downto 0); - out_mem_addr : in std_logic_vector(maxAddrBitIncIO downto 0); - mem_writeMask : in std_logic_vector(wordBytes-1 downto 0); - - -- Wishbone from ZPU - zpu_wb_i : in wishbone_bus_out; - zpu_wb_o : out wishbone_bus_in); - -end zpu_wb_bridge; - -architecture behave of zpu_wb_bridge is - -begin - - mem_read <= zpu_wb_i.dat; - mem_ack <= zpu_wb_i.ack; - - zpu_wb_o.adr <= "000000" & out_mem_addr(27) & out_mem_addr(24 downto 0); - zpu_wb_o.dat <= mem_write; - zpu_wb_o.sel <= mem_writeMask; - zpu_wb_o.stb <= mem_req; - zpu_wb_o.cyc <= mem_req; - zpu_wb_o.we <= mem_we; - -end behave; - - - - - +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +use work.phi_config.all; +use work.wishbone_pkg.all; +use work.zpupkg.all; +use work.zpu_config.all; + +entity zpu_wb_bridge is + port ( -- Native ZPU interface + clk : in std_logic; + areset : in std_logic; + + mem_req : in std_logic; + mem_we : in std_logic; + mem_ack : out std_logic; + mem_read : out std_logic_vector(wordSize-1 downto 0); + mem_write : in std_logic_vector(wordSize-1 downto 0); + out_mem_addr : in std_logic_vector(maxAddrBitIncIO downto 0); + mem_writeMask : in std_logic_vector(wordBytes-1 downto 0); + + -- Wishbone from ZPU + zpu_wb_i : in wishbone_bus_out; + zpu_wb_o : out wishbone_bus_in); + +end zpu_wb_bridge; + +architecture behave of zpu_wb_bridge is + +begin + + mem_read <= zpu_wb_i.dat; + mem_ack <= zpu_wb_i.ack; + + zpu_wb_o.adr <= "000000" & out_mem_addr(27) & out_mem_addr(24 downto 0); + zpu_wb_o.dat <= mem_write; + zpu_wb_o.sel <= mem_writeMask; + zpu_wb_o.stb <= mem_req; + zpu_wb_o.cyc <= mem_req; + zpu_wb_o.we <= mem_we; + +end behave; + + + + + diff --git a/zpu/hdl/zpu4/core/zpu_config.vhd b/zpu/hdl/zpu4/core/zpu_config.vhd index 112dd01..5b3110c 100644 --- a/zpu/hdl/zpu4/core/zpu_config.vhd +++ b/zpu/hdl/zpu4/core/zpu_config.vhd @@ -1,44 +1,44 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - - -library ieee; -use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; -use ieee.std_logic_arith.all; - -package zpu_config is +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; + +package zpu_config is -- generate trace output or not. constant Generate_Trace : boolean := false; @@ -56,4 +56,4 @@ package zpu_config is constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); -end zpu_config; +end zpu_config; diff --git a/zpu/hdl/zpu4/core/zpu_core.vhd b/zpu/hdl/zpu4/core/zpu_core.vhd index ff9449f..e2e4781 100644 --- a/zpu/hdl/zpu4/core/zpu_core.vhd +++ b/zpu/hdl/zpu4/core/zpu_core.vhd @@ -1,68 +1,68 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- Copyright 2008 alvieboy - Álvaro Lopes - alvieboy@alvie.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- Copyright 2008 alvieboy - Álvaro Lopes - alvieboy@alvie.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; -use ieee.numeric_std.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 +use ieee.numeric_std.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; @@ -77,10 +77,10 @@ entity zpu_core is interrupt : in std_logic; break : out std_logic ); -end zpu_core; - -architecture behave of zpu_core is - +end zpu_core; + +architecture behave of zpu_core is + type InsnType is ( State_AddTop, State_Dup, @@ -196,12 +196,12 @@ architecture behave of zpu_core is 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 - - + +-- state machine. + +begin + + traceFileGenerate : if Generate_Trace generate trace_file : trace port map ( @@ -1009,7 +1009,7 @@ begin end case; -- state end if; -- clk'event end process; - - - -end behave; + + + +end behave; diff --git a/zpu/hdl/zpu4/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd index 1df9546..757d056 100644 --- a/zpu/hdl/zpu4/core/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd @@ -1,47 +1,47 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - -library work; -use work.zpu_config.all; -use work.zpupkg.all; - - -entity zpu_core is +use ieee.numeric_std.all; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + + +entity zpu_core is port ( clk : in std_logic; -- asynchronous reset signal @@ -67,12 +67,12 @@ entity zpu_core is -- in simulation to stop simulation break : out std_logic ); -end zpu_core; - - - +end zpu_core; + + + architecture behave of zpu_core is - + signal memAWriteEnable : std_logic; signal memAAddr : unsigned(maxAddrBit downto minAddrBit); signal memAWrite : unsigned(wordSize-1 downto 0); @@ -171,11 +171,11 @@ architecture behave of zpu_core is signal tOpcode_sel : index; -- signal inInterrupt : std_logic; - - - -begin - + + + +begin + -- generate a trace file. -- -- This is only used in simulation to see what instructions are @@ -596,7 +596,7 @@ begin end if; -- reset, enable end process; - - - -end behave; + + + +end behave; diff --git a/zpu/hdl/zpu4/core/zpupkg.vhd b/zpu/hdl/zpu4/core/zpupkg.vhd index f6823f5..a6e749d 100644 --- a/zpu/hdl/zpu4/core/zpupkg.vhd +++ b/zpu/hdl/zpu4/core/zpupkg.vhd @@ -1,47 +1,47 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + library ieee; use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - -library work; -use work.zpu_config.all; - - -package zpupkg is - +use ieee.numeric_std.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 @@ -215,4 +215,4 @@ package zpupkg is -end zpupkg; +end zpupkg; diff --git a/zpu/hdl/zpu4/src/clocks.vhd b/zpu/hdl/zpu4/src/clocks.vhd index a352b3c..704d790 100644 --- a/zpu/hdl/zpu4/src/clocks.vhd +++ b/zpu/hdl/zpu4/src/clocks.vhd @@ -1,246 +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); - +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/io.vhd b/zpu/hdl/zpu4/src/io.vhd index a0e494a..159df6f 100644 --- a/zpu/hdl/zpu4/src/io.vhd +++ b/zpu/hdl/zpu4/src/io.vhd @@ -1,112 +1,112 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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(wordSize-1 downto 0); - read : out std_logic_vector(wordSize-1 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; -constant lowAddrBits: std_logic_vector(minAddrBit-1 downto 0) := (others=>'0'); -constant tx_full: std_logic := '0'; -constant rx_empty: std_logic := '1'; - -begin - - - timerinst: timer port map ( - clk => clk, - areset => areset, - we => timer_we, - din => write(7 downto 0), - adr => addr(4 downto 2), - dout => timer_read); - - busy <= writeEnable or readEnable; - timer_we <= writeEnable and addr(12); - - process(areset, clk) - variable taddr : std_logic_vector(maxAddrBit downto 0); - begin - taddr := (others => '0'); - taddr(maxAddrBit downto minAddrBit) := addr; - - if (areset = '1') then --- timer_we <= '0'; - elsif (clk'event and clk = '1') then --- timer_we <= '0'; - if writeEnable = '1' then - -- external interface (fixed address) - -- extend compare to avoid waring messages - if ("1" & addr & lowAddrBits)=x"80a000c" then - report "Write to UART[0]" & " :0x" & hstr(write); - -- Write to UART - -- report "" & character'image(conv_integer(memBint)) severity note; - print(l_file, character'val(to_integer(unsigned(write)))); - elsif addr(12)='1' then - report "Write to TIMER" & " :0x" & hstr(write); --- report "xxx" severity failure; --- timer_we <= '1'; - else - print(l_file, character'val(to_integer(unsigned(write)))); - report "Illegal IO write @" & "0x" & hstr(taddr) severity warning; - end if; - - end if; - read <= (others => '0'); - if (readEnable = '1') then - -- extend compare to avoid waring messages - if ("1" & addr & lowAddrBits)=x"80a000c" then - report "Read UART[0]"; - read(8) <= not tx_full; -- output fifo not full - read(9) <= not rx_empty; -- receiver not empty - elsif ("1" & addr & lowAddrBits)=x"80a0010" then - report "Read UART[1]"; - read(8) <= not rx_empty; -- receiver not empty - read(7 downto 0) <= (others => '0'); - elsif addr(12)='1' then - report "Read TIMER"; - read(7 downto 0) <= timer_read; - elsif addr(11)='1' then - report "Read ZPU Freq"; - read(7 downto 0) <= ZPU_Frequency; - else - report "Illegal IO read @" & "0x" & hstr(taddr) severity warning; - end if; - end if; - end if; - end process; - - -end behave; - +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 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; +constant lowAddrBits: std_logic_vector(minAddrBit-1 downto 0) := (others=>'0'); +constant tx_full: std_logic := '0'; +constant rx_empty: std_logic := '1'; + +begin + + + timerinst: timer port map ( + clk => clk, + areset => areset, + we => timer_we, + din => write(7 downto 0), + adr => addr(4 downto 2), + dout => timer_read); + + busy <= writeEnable or readEnable; + timer_we <= writeEnable and addr(12); + + process(areset, clk) + variable taddr : std_logic_vector(maxAddrBit downto 0); + begin + taddr := (others => '0'); + taddr(maxAddrBit downto minAddrBit) := addr; + + if (areset = '1') then +-- timer_we <= '0'; + elsif (clk'event and clk = '1') then +-- timer_we <= '0'; + if writeEnable = '1' then + -- external interface (fixed address) + -- extend compare to avoid waring messages + if ("1" & addr & lowAddrBits)=x"80a000c" then + report "Write to UART[0]" & " :0x" & hstr(write); + -- Write to UART + -- report "" & character'image(conv_integer(memBint)) severity note; + print(l_file, character'val(to_integer(unsigned(write)))); + elsif addr(12)='1' then + report "Write to TIMER" & " :0x" & hstr(write); +-- report "xxx" severity failure; +-- timer_we <= '1'; + else + print(l_file, character'val(to_integer(unsigned(write)))); + report "Illegal IO write @" & "0x" & hstr(taddr) severity warning; + end if; + + end if; + read <= (others => '0'); + if (readEnable = '1') then + -- extend compare to avoid waring messages + if ("1" & addr & lowAddrBits)=x"80a000c" then + report "Read UART[0]"; + read(8) <= not tx_full; -- output fifo not full + read(9) <= not rx_empty; -- receiver not empty + elsif ("1" & addr & lowAddrBits)=x"80a0010" then + report "Read UART[1]"; + read(8) <= not rx_empty; -- receiver not empty + read(7 downto 0) <= (others => '0'); + elsif addr(12)='1' then + report "Read TIMER"; + read(7 downto 0) <= timer_read; + elsif addr(11)='1' then + report "Read ZPU Freq"; + read(7 downto 0) <= ZPU_Frequency; + else + report "Illegal IO read @" & "0x" & hstr(taddr) severity warning; + end if; + end if; + end if; + end process; + + +end behave; + diff --git a/zpu/hdl/zpu4/src/timer.vhd b/zpu/hdl/zpu4/src/timer.vhd index be1dbb8..c60c172 100644 --- a/zpu/hdl/zpu4/src/timer.vhd +++ b/zpu/hdl/zpu4/src/timer.vhd @@ -1,61 +1,61 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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 : unsigned(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 <= std_logic_vector(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; - +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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 : unsigned(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 <= std_logic_vector(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 index 2413970..00ac3a8 100644 --- a/zpu/hdl/zpu4/src/trace.vhd +++ b/zpu/hdl/zpu4/src/trace.vhd @@ -1,117 +1,117 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.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 : unsigned(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(std_logic_vector(counter))); - end if; - - wait until clk = '0'; - - end loop; - - end process receive_data; - - - -end behave; - +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.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 : unsigned(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(std_logic_vector(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 index 3d5297a..6432294 100644 --- a/zpu/hdl/zpu4/src/txt_util.vhd +++ b/zpu/hdl/zpu4/src/txt_util.vhd @@ -1,621 +1,621 @@ --- ZPU --- --- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com --- --- The FreeBSD license --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions --- are met: --- --- 1. Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- 2. Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following --- disclaimer in the documentation and/or other materials --- provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY --- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, --- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, --- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES --- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS --- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) --- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, --- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF --- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- --- The views and conclusions contained in the software and documentation --- are those of the authors and should not be interpreted as representing --- official policies, either expressed or implied, of the ZPU Project. - -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; - - - - +-- ZPU +-- +-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com +-- +-- The FreeBSD license +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions +-- are met: +-- +-- 1. Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- 2. Redistributions in binary form must reproduce the above +-- copyright notice, this list of conditions and the following +-- disclaimer in the documentation and/or other materials +-- provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY +-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +-- +-- The views and conclusions contained in the software and documentation +-- are those of the authors and should not be interpreted as representing +-- official policies, either expressed or implied, of the ZPU Project. + +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/zpuio.vhd b/zpu/hdl/zpu4/src/zpuio.vhd index 09a1ddd..2c7fd41 100644 --- a/zpu/hdl/zpu4/src/zpuio.vhd +++ b/zpu/hdl/zpu4/src/zpuio.vhd @@ -1,232 +1,232 @@ -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); - - - - 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"2028003" 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"2028003" 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; +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); + + + + 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"2028003" 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"2028003" 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/zy2000/timer.vhd b/zpu/hdl/zy2000/timer.vhd index bff82f2..735d55c 100644 --- a/zpu/hdl/zy2000/timer.vhd +++ b/zpu/hdl/zy2000/timer.vhd @@ -1,137 +1,137 @@ -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; - sample : in std_logic; - reset : in std_logic; - counter : out std_logic_vector(63 downto 0)); -end timer; - - -architecture behave of timer is - -signal c : std_logic_vector(1 to 7); - -signal cnt : std_logic_vector(63 downto 0); -signal cnt_smp : std_logic_vector(63 downto 0); - -begin - - counter <= cnt_smp; - - process(clk, areset) -- Carry generation - begin - if areset = '1' then - c <= "0000000"; - elsif (clk'event and clk = '1') then - if reset = '1' then - c <= "0000000"; - else - if cnt(7 downto 0) = "11111110" then - c(1) <= '1'; - else - c(1) <= '0'; - end if; - if cnt(15 downto 8) = "11111111" then - c(2) <= '1'; - else - c(2) <= '0'; - end if; - if cnt(23 downto 16) = "11111111" and c(2) = '1' then - c(3) <= '1'; - else - c(3) <= '0'; - end if; - if cnt(31 downto 24) = "11111111" and c(3) = '1' then - c(4) <= '1'; - else - c(4) <= '0'; - end if; - if cnt(39 downto 32) = "11111111" and c(4) = '1' then - c(5) <= '1'; - else - c(5) <= '0'; - end if; - if cnt(47 downto 40) = "11111111" and c(5) = '1' then - c(6) <= '1'; - else - c(6) <= '0'; - end if; - if cnt(55 downto 48) = "11111111" and c(6) = '1' then - c(7) <= '1'; - else - c(7) <= '0'; - end if; - end if; - end if; - end process; - - process(clk, areset) - begin - if areset = '1' then - cnt <= (others=>'0'); - elsif (clk'event and clk = '1') then - if reset = '1' then - cnt <= (others=>'0'); - else - cnt(7 downto 0) <= cnt(7 downto 0) + '1'; - if c(1) = '1' then - cnt(15 downto 8) <= cnt(15 downto 8) + '1'; - else - cnt(15 downto 8) <= cnt(15 downto 8); - end if; - if c(2) = '1' and c(1) = '1' then - cnt(23 downto 16) <= cnt(23 downto 16) + '1'; - else - cnt(23 downto 16) <= cnt(23 downto 16); - end if; - if c(3) = '1' and c(1) = '1' then - cnt(31 downto 24) <= cnt(31 downto 24) + '1'; - else - cnt(31 downto 24) <= cnt(31 downto 24); - end if; - if c(4) = '1' and c(1) = '1' then - cnt(39 downto 32) <= cnt(39 downto 32) + '1'; - else - cnt(39 downto 32) <= cnt(39 downto 32); - end if; - if c(5) = '1' and c(1) = '1' then - cnt(47 downto 40) <= cnt(47 downto 40) + '1'; - else - cnt(47 downto 40) <= cnt(47 downto 40); - end if; - if c(6) = '1' and c(1) = '1' then - cnt(55 downto 48) <= cnt(55 downto 48) + '1'; - else - cnt(55 downto 48) <= cnt(55 downto 48); - end if; - if c(7) = '1' and c(1) = '1' then - cnt(63 downto 56) <= cnt(63 downto 56) + '1'; - else - cnt(63 downto 56) <= cnt(63 downto 56); - end if; - end if; - end if; - end process; - - process(clk, areset) - begin - if areset = '1' then - cnt_smp <= (others=>'0'); - elsif (clk'event and clk = '1') then - if reset = '1' then - cnt_smp <= (others=>'0'); - elsif sample = '1' then - cnt_smp <= cnt; - else - cnt_smp <= cnt_smp; - end if; - end if; - end process; - -end behave; - +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; + sample : in std_logic; + reset : in std_logic; + counter : out std_logic_vector(63 downto 0)); +end timer; + + +architecture behave of timer is + +signal c : std_logic_vector(1 to 7); + +signal cnt : std_logic_vector(63 downto 0); +signal cnt_smp : std_logic_vector(63 downto 0); + +begin + + counter <= cnt_smp; + + process(clk, areset) -- Carry generation + begin + if areset = '1' then + c <= "0000000"; + elsif (clk'event and clk = '1') then + if reset = '1' then + c <= "0000000"; + else + if cnt(7 downto 0) = "11111110" then + c(1) <= '1'; + else + c(1) <= '0'; + end if; + if cnt(15 downto 8) = "11111111" then + c(2) <= '1'; + else + c(2) <= '0'; + end if; + if cnt(23 downto 16) = "11111111" and c(2) = '1' then + c(3) <= '1'; + else + c(3) <= '0'; + end if; + if cnt(31 downto 24) = "11111111" and c(3) = '1' then + c(4) <= '1'; + else + c(4) <= '0'; + end if; + if cnt(39 downto 32) = "11111111" and c(4) = '1' then + c(5) <= '1'; + else + c(5) <= '0'; + end if; + if cnt(47 downto 40) = "11111111" and c(5) = '1' then + c(6) <= '1'; + else + c(6) <= '0'; + end if; + if cnt(55 downto 48) = "11111111" and c(6) = '1' then + c(7) <= '1'; + else + c(7) <= '0'; + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt <= (others=>'0'); + else + cnt(7 downto 0) <= cnt(7 downto 0) + '1'; + if c(1) = '1' then + cnt(15 downto 8) <= cnt(15 downto 8) + '1'; + else + cnt(15 downto 8) <= cnt(15 downto 8); + end if; + if c(2) = '1' and c(1) = '1' then + cnt(23 downto 16) <= cnt(23 downto 16) + '1'; + else + cnt(23 downto 16) <= cnt(23 downto 16); + end if; + if c(3) = '1' and c(1) = '1' then + cnt(31 downto 24) <= cnt(31 downto 24) + '1'; + else + cnt(31 downto 24) <= cnt(31 downto 24); + end if; + if c(4) = '1' and c(1) = '1' then + cnt(39 downto 32) <= cnt(39 downto 32) + '1'; + else + cnt(39 downto 32) <= cnt(39 downto 32); + end if; + if c(5) = '1' and c(1) = '1' then + cnt(47 downto 40) <= cnt(47 downto 40) + '1'; + else + cnt(47 downto 40) <= cnt(47 downto 40); + end if; + if c(6) = '1' and c(1) = '1' then + cnt(55 downto 48) <= cnt(55 downto 48) + '1'; + else + cnt(55 downto 48) <= cnt(55 downto 48); + end if; + if c(7) = '1' and c(1) = '1' then + cnt(63 downto 56) <= cnt(63 downto 56) + '1'; + else + cnt(63 downto 56) <= cnt(63 downto 56); + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt_smp <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt_smp <= (others=>'0'); + elsif sample = '1' then + cnt_smp <= cnt; + else + cnt_smp <= cnt_smp; + end if; + end if; + end process; + +end behave; + diff --git a/zpu/hdl/zy2000/trace.vhd b/zpu/hdl/zy2000/trace.vhd index bc5279f..ec6be57 100644 --- a/zpu/hdl/zy2000/trace.vhd +++ b/zpu/hdl/zy2000/trace.vhd @@ -1,84 +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; - +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/zy2000/txt_util.vhd b/zpu/hdl/zy2000/txt_util.vhd index d3bf01a..40d39b9 100644 --- a/zpu/hdl/zy2000/txt_util.vhd +++ b/zpu/hdl/zy2000/txt_util.vhd @@ -1,587 +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; - - - - +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/zy2000/zpu_config.vhd b/zpu/hdl/zy2000/zpu_config.vhd index 61949c5..c0df294 100644 --- a/zpu/hdl/zy2000/zpu_config.vhd +++ b/zpu/hdl/zy2000/zpu_config.vhd @@ -1,20 +1,20 @@ -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 := '0'; - -- Clock frequency in MHz. - constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40"; - -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) - constant maxAddrBitIncIO : integer := 27; - - -- start byte address of stack. - -- point to top of RAM - 2*words - constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; - -end zpu_config; +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 := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 27; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; + +end zpu_config; diff --git a/zpu/hdl/zy2000/zpu_config_fast.vhd b/zpu/hdl/zy2000/zpu_config_fast.vhd index 61949c5..c0df294 100644 --- a/zpu/hdl/zy2000/zpu_config_fast.vhd +++ b/zpu/hdl/zy2000/zpu_config_fast.vhd @@ -1,20 +1,20 @@ -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 := '0'; - -- Clock frequency in MHz. - constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40"; - -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) - constant maxAddrBitIncIO : integer := 27; - - -- start byte address of stack. - -- point to top of RAM - 2*words - constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; - -end zpu_config; +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 := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 27; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; + +end zpu_config; diff --git a/zpu/hdl/zy2000/zpupkg.vhd b/zpu/hdl/zy2000/zpupkg.vhd index 1a01563..a7e6cf1 100644 --- a/zpu/hdl/zy2000/zpupkg.vhd +++ b/zpu/hdl/zy2000/zpupkg.vhd @@ -1,168 +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(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 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; - mem_req : out std_logic; - mem_we : out std_logic; - mem_ack : 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); - mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); - interrupt : in std_logic; - break : out std_logic; - zpu_status : out std_logic_vector(63 downto 0)); - end component; - - - - component timer is - port( - clk : in std_logic; - areset : in std_logic; - sample : in std_logic; - reset : in std_logic; - counter : out std_logic_vector(63 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; +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(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 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; + mem_req : out std_logic; + mem_we : out std_logic; + mem_ack : 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); + mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); + interrupt : in std_logic; + break : out std_logic; + zpu_status : out std_logic_vector(63 downto 0)); + end component; + + + + component timer is + port( + clk : in std_logic; + areset : in std_logic; + sample : in std_logic; + reset : in std_logic; + counter : out std_logic_vector(63 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; -- cgit v1.1 From f54a7949bc551f4a4ecc20728453cfe09ae65aed Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Fri, 4 Mar 2011 10:40:56 +0100 Subject: change: switch to ieee.numeric_std.all library Signed-off-by: Bert Lange --- zpu/hdl/example/zpu_config.vhd | 5 ++--- zpu/hdl/zpu4/core/zpu_config.vhd | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd index c3c60c1..cd4163d 100644 --- a/zpu/hdl/example/zpu_config.vhd +++ b/zpu/hdl/example/zpu_config.vhd @@ -34,8 +34,7 @@ library ieee; use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; -use ieee.std_logic_arith.all; +use ieee.numeric_std.all; package zpu_config is -- generate trace output @@ -52,5 +51,5 @@ package zpu_config is -- start byte address of stack. -- point to top of RAM - 2*words constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := - conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); + std_logic_vector(to_unsigned((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1)); end zpu_config; diff --git a/zpu/hdl/zpu4/core/zpu_config.vhd b/zpu/hdl/zpu4/core/zpu_config.vhd index 5b3110c..b29c561 100644 --- a/zpu/hdl/zpu4/core/zpu_config.vhd +++ b/zpu/hdl/zpu4/core/zpu_config.vhd @@ -35,8 +35,7 @@ library ieee; use ieee.std_logic_1164.all; -use ieee.std_logic_unsigned.all; -use ieee.std_logic_arith.all; +use ieee.numeric_std.all; package zpu_config is @@ -54,6 +53,6 @@ package zpu_config is -- start byte address of stack. -- point to top of RAM - 2*words constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := - conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1); + std_logic_vector(to_unsigned((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1)); end zpu_config; -- cgit v1.1 From 509095f846aa8b2393ab7bf974eb2932846b950f Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Thu, 9 Jun 2011 17:54:03 +0200 Subject: fix: missing comment --- zpu/hdl/zpu4/core/zpu_core_small.vhd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zpu/hdl/zpu4/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd index 757d056..b975977 100644 --- a/zpu/hdl/zpu4/core/zpu_core_small.vhd +++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd @@ -308,7 +308,7 @@ begin when others => sampledDecodedOpcode <= Decoded_Nop; end case; -- tOpcode(3 downto 0) - end if; tOpcode + end if; -- tOpcode end process; -- cgit v1.1 From e6d9de6465aecf64a53b941bf80830280e95c040 Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Tue, 2 Aug 2011 09:53:37 +0200 Subject: fix: remove note on not existing JTAG/hardware debugger --- zpu/docs/zpu_arch.html | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 8aaa132..448d86c 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -56,7 +56,6 @@ Several of the links will only work if you have checked out the zpu/zpu tree fro
      40. Miscellaneous
      41.  
        -560 LUT
        -388 REG
        +561 LUT
        +391 REG
           0 MULT18x18
           8 BRAM (RAMB36)
        -140 fmax
        +175 fmax
         
         
        @@ -1159,7 +1159,7 @@ maxAddrBit=16
         
         
        -1292 LUT
        +1299 LUT
          490 REG
            3 MULT (DSP48E)
            8 BRAM (RAMB36)
        -- 
        cgit v1.1
        
        
        From 105f8b40509ea2657e36e13af76b7580029fd2e5 Mon Sep 17 00:00:00 2001
        From: Bert Lange 
        Date: Tue, 25 Oct 2011 22:03:02 +0200
        Subject: fix: zealot/zpu_small - load, see patch from Alvaro
        
        ---
         zpu/hdl/zealot/zpu_small.vhdl | 1 +
         1 file changed, 1 insertion(+)
        
        diff --git a/zpu/hdl/zealot/zpu_small.vhdl b/zpu/hdl/zealot/zpu_small.vhdl
        index 7e022d4..2e5f464 100644
        --- a/zpu/hdl/zealot/zpu_small.vhdl
        +++ b/zpu/hdl/zealot/zpu_small.vhdl
        @@ -391,6 +391,7 @@ begin
                                         null;
                               end case;
                          when st_read_io =>
        +                      a_addr_r <= sp_r;
                               -- Wait until memory I/O isn't busy
                               if mem_busy_i='0' then
                                  state  <= st_fetch;
        -- 
        cgit v1.1
        
        
        From c883cd4a4e4fa1974e5d7d72a79240de88bd26da Mon Sep 17 00:00:00 2001
        From: Bert Lange 
        Date: Tue, 25 Oct 2011 23:26:36 +0200
        Subject: add: GPIO module to zealot SoC
        
        ---
         zpu/hdl/zealot/devices/gpio.vhdl                   |  107 ++
         zpu/hdl/zealot/devices/phi_io.vhdl                 |   71 +-
         .../zealot/fpga/avnet-eval-xc5vfx30t/simulation.sh |    1 +
         .../avnet-eval-xc5vfx30t/simulation_config/wave.do |   56 +-
         .../synthesis_config/avnet-eval-xc5vfx30t.ucf      |   13 +
         .../avnet-eval-xc5vfx30t/synthesis_config/top.prj  |    1 +
         zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd   |   58 +-
         .../zealot/fpga/avnet-eval-xc5vfx30t/top_tb.vhd    |    3 +
         .../fpga/digilent-starter-xc3s500e/simulation.sh   |    1 +
         .../simulation_config/run.do                       |    6 +-
         .../simulation_config/wave.do                      |   30 +
         .../synthesis_config/top.prj                       |   37 +-
         .../synthesis_config/top.ut                        |   44 +-
         .../synthesis_config/top.xst                       |  112 +-
         .../zealot/fpga/digilent-starter-xc3s500e/top.vhd  |  866 ++++++++--------
         .../fpga/digilent-starter-xc3s500e/top_tb.vhd      |  559 +++++-----
         zpu/hdl/zealot/fpga/dmips_med1.vhdl                |    8 +-
         zpu/hdl/zealot/fpga/dmips_small1.vhdl              |    8 +-
         zpu/hdl/zealot/fpga/hello_med1.vhdl                |    8 +-
         zpu/hdl/zealot/fpga/hello_small1.vhdl              |    8 +-
         .../fpga/xilinx-sp601-xc6slx16/simulation.sh       |    1 +
         .../xilinx-sp601-xc6slx16/simulation_config/run.do |    4 +-
         .../xilinx-sp601-xc6slx16/synthesis_config/top.prj |   37 +-
         .../xilinx-sp601-xc6slx16/synthesis_config/top.ut  |   60 +-
         .../xilinx-sp601-xc6slx16/synthesis_config/top.xst |  106 +-
         .../synthesis_config/xilinx-sp601-xc6slx16.ucf     |  606 +++++------
         zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd  | 1096 ++++++++++----------
         .../zealot/fpga/xilinx-sp601-xc6slx16/top_tb.vhd   |  800 +++++++-------
         zpu/hdl/zealot/helpers/zpu_med1.vhdl               |   29 +-
         zpu/hdl/zealot/helpers/zpu_small1.vhdl             |   29 +-
         zpu/hdl/zealot/testbenches/dmips_med1_tb.vhdl      |    9 +-
         zpu/hdl/zealot/testbenches/small1_tb.vhdl          |    9 +-
         zpu/hdl/zealot/zpu_pkg.vhdl                        |   27 +-
         33 files changed, 2590 insertions(+), 2220 deletions(-)
         create mode 100644 zpu/hdl/zealot/devices/gpio.vhdl
         create mode 100644 zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/wave.do
        
        diff --git a/zpu/hdl/zealot/devices/gpio.vhdl b/zpu/hdl/zealot/devices/gpio.vhdl
        new file mode 100644
        index 0000000..fc66bde
        --- /dev/null
        +++ b/zpu/hdl/zealot/devices/gpio.vhdl
        @@ -0,0 +1,107 @@
        +--
        +-- this module desribes a simple GPIO interface
        +--
        +-- data on port_in is synhronized to clk_i and can be read at
        +-- address 0
        +--
        +-- any write to address 0 is mapped to port_out
        +--
        +-- at address 1 is a direction register (port_dir)
        +-- initialized with '1's, what mean direction = in
        +-- this register is useful for bidirectional pins, e.g. headers
        +--
        +--
        +-- some examples:
        +--
        +-- to connect 4 buttons:
        +-- port_in( 3 downto  0) <= gpio_button;
        +--
        +--
        +-- to connect 8 LEDs:
        +-- gpio_led <= port_out(7 downto 0); 
        +--
        +--
        +-- to connect 2 bidirectional header pins:
        +-- port_in(8)  <= gpio_pin(0);
        +-- gpio_pin(0) <= port_out(8) when port_dir(8) = '0' else 'Z';
        +--
        +-- port_in(9)  <= gpio_pin(1);
        +-- gpio_pin(1) <= port_out(9) when port_dir(9) = '0' else 'Z';
        +--
        +
        +library ieee;
        +use ieee.std_logic_1164.all;
        +use ieee.numeric_std.all;
        +
        +
        +entity gpio is
        +    port(
        +        clk_i    : in  std_logic;
        +        reset_i  : in  std_logic;
        +        --
        +        we_i     : in  std_logic;
        +        data_i   : in  unsigned(31 downto 0);
        +        addr_i   : in  unsigned( 0 downto 0);
        +        data_o   : out unsigned(31 downto 0);
        +        --
        +        port_in  : in  std_logic_vector(31 downto 0);
        +        port_out : out std_logic_vector(31 downto 0);
        +        port_dir : out std_logic_vector(31 downto 0)
        +    );
        +end entity gpio;
        +
        +
        +architecture rtl of gpio is
        +
        +    signal port_in_reg  : std_logic_vector(31 downto 0);
        +    signal port_in_sync : std_logic_vector(31 downto 0);
        +    --
        +    signal direction    : std_logic_vector(31 downto 0) := (others => '1');
        +
        +begin
        +
        +    process
        +    begin
        +        wait until rising_edge( clk_i);
        +        
        +        -- synchronize all inputs with two registers
        +        -- to avoid metastability
        +        port_in_reg  <= port_in;
        +        port_in_sync <= port_in_reg;
        +
        +        -- write access to gpio
        +        if we_i = '1' then
        +            -- data
        +            if addr_i = "0" then
        +                port_out  <= std_logic_vector( data_i);
        +            end if;
        +            -- direction
        +            if addr_i = "1" then
        +                direction <= std_logic_vector( data_i);
        +            end if;
        +        end if;
        +
        +        -- read access to gpio
        +        -- data
        +        if addr_i = "0" then
        +            data_o <= unsigned( port_in_sync);
        +        end if;
        +        -- direction
        +        if addr_i = "1" then
        +            data_o <= unsigned( direction);
        +        end if;
        +
        +        -- outputs
        +        port_dir <= direction;
        +
        +        -- sync reset
        +        if reset_i = '1' then
        +            direction    <= (others => '1');
        +            port_in_reg  <= (others => '0');
        +            port_in_sync <= (others => '0');
        +        end if;
        +
        +    end process;
        +
        +
        +end architecture rtl;
        diff --git a/zpu/hdl/zealot/devices/phi_io.vhdl b/zpu/hdl/zealot/devices/phi_io.vhdl
        index 99e0f8f..71e881c 100644
        --- a/zpu/hdl/zealot/devices/phi_io.vhdl
        +++ b/zpu/hdl/zealot/devices/phi_io.vhdl
        @@ -56,7 +56,8 @@ use IEEE.numeric_std.all;
         use std.textio.all;
         
         library zpu;
        -use zpu.zpupkg.all;
        +use zpu.zpupkg.timer;
        +use zpu.zpupkg.gpio;
         use zpu.UART.all;
         use zpu.txt_util.all;
          
        @@ -73,25 +74,31 @@ entity ZPUPhiIO is
               re_i       : in  std_logic; -- Read Enable
               data_i     : in  unsigned(31 downto 0);
               data_o     : out unsigned(31 downto 0);
        -      addr_i     : in  unsigned(2 downto 0); -- Address bits 4-2
        +      addr_i     : in  unsigned(2  downto 0); -- Address bits 4-2
        +      --
               rs232_rx_i : in  std_logic;  -- UART Rx input
               rs232_tx_o : out std_logic;  -- UART Tx output
        -      br_clk_i   : in  std_logic); -- UART base clock (enable)
        +      br_clk_i   : in  std_logic;  -- UART base clock (enable)
        +      --
        +      gpio_in    : in  std_logic_vector(31 downto 0);
        +      gpio_out   : out std_logic_vector(31 downto 0);
        +      gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +      );
         end entity ZPUPhiIO;
            
            
         architecture Behave of ZPUPhiIO is
        -   constant LOW_BITS : unsigned(1 downto 0):=(others=>'0');
        -   constant TX_FULL  : std_logic:='0';
        -   constant RX_EMPTY : std_logic:='1';
        +   constant LOW_BITS  : unsigned(1 downto 0):=(others=>'0');
        +   constant TX_FULL   : std_logic:='0';
        +   constant RX_EMPTY  : std_logic:='1';
         
            -- "000" 0x00 is CPU enable ... useful?
        -   -- "001" 0x04 Unused
        -   -- "010" 0x08 Unused
        -   constant UART_TX  : unsigned(2 downto 0):="011"; -- 0x0C
        -   constant UART_RX  : unsigned(2 downto 0):="100"; -- 0x10
        -   constant CNT_1    : unsigned(2 downto 0):="101"; -- 0x14
        -   constant CNT_2    : unsigned(2 downto 0):="110"; -- 0x18
        +   constant IO_DATA   : unsigned(2 downto 0):="001"; -- 0x04
        +   constant IO_DIR    : unsigned(2 downto 0):="010"; -- 0x08
        +   constant UART_TX   : unsigned(2 downto 0):="011"; -- 0x0C
        +   constant UART_RX   : unsigned(2 downto 0):="100"; -- 0x10
        +   constant CNT_1     : unsigned(2 downto 0):="101"; -- 0x14
        +   constant CNT_2     : unsigned(2 downto 0):="110"; -- 0x18
            -- "111" 0x1C Unused
            -- Unimplemented: Interrupt control and timer (not counter ...?)
         
        @@ -110,7 +117,13 @@ architecture Behave of ZPUPhiIO is
            signal uart_write : std_logic; -- ZPU is writing
            signal tx_busy    : std_logic; -- Tx can't get a new value
         
        +   -- GPIO
        +   signal gpio_we    : std_logic;
        +   signal is_gpio    : std_logic;
        +   signal gpio_read  : unsigned(31 downto 0);
        +
            file l_file       : text open write_mode is LOG_FILE;
        +
         begin
            -----------
            -- Timer --
        @@ -155,6 +168,27 @@ begin
               generic map(COUNT => 4)  
               port map(
                  clk_i => clk_i, reset_i => reset_i, ce_i => rx_br, o_o => tx_br);
        +   
        +   ----------
        +   -- GPIO --
        +   ----------
        +   gpio_i0: gpio
        +      port map(
        +          clk_i    => clk_i,              -- : in  std_logic;
        +          reset_i  => reset_i,            -- : in  std_logic;
        +          --                              
        +          we_i     => gpio_we,            -- : in  std_logic;
        +          data_i   => data_i,             -- : in  unsigned(31 downto 0);
        +          addr_i   => addr_i(1 downto 1), -- : in  unsigned( 0 downto 0);
        +          data_o   => gpio_read,          -- : out unsigned(31 downto 0);
        +          --                              
        +          port_in  => gpio_in,            -- : std_logic_vector(31 downto 0);
        +          port_out => gpio_out,           -- : std_logic_vector(31 downto 0);
        +          port_dir => gpio_dir            -- : std_logic_vector(31 downto 0);
        +          );
        +   is_gpio <= '1' when addr_i = IO_DATA or addr_i = IO_DIR else '0'; -- 0x80A0004/8
        +   gpio_we <= we_i and is_gpio;
        +
         
            do_io:
            process(clk_i)
        @@ -177,8 +211,10 @@ begin
                             else
                                 std.textio.write(line_out, char);
                             end if;
        +               elsif is_gpio = '1' and ENA_LOG then
        +                  print("- Write GPIO: 0x" & hstr(data_i));
                        elsif is_timer='1' and ENA_LOG then
        -                  print("- Write to TIMER: 0x"&hstr(data_i));
        +                  print("- Write to TIMER: 0x" & hstr(data_i));
                        else
                           --print(l_file,character'val(to_integer(data_i)));
                           report "Illegal IO data_i=0x"&hstr(data_i)&" @0x"&
        @@ -188,7 +224,12 @@ begin
                     --synopsys translate on
                     data_o <= (others => '0');
                     if re_i='1' then
        -               if addr_i=UART_TX then
        +               if is_gpio = '1' then
        +                  if ENA_LOG then
        +                     print("- Read  GPIO: 0x" & hstr(gpio_read));
        +                  end if;
        +                  data_o <= gpio_read;
        +               elsif addr_i=UART_TX then
                           if ENA_LOG then
                              print("- Read UART Tx");
                           end if;
        @@ -201,7 +242,7 @@ begin
                           data_o(7 downto 0) <= unsigned(rx_data);
                        elsif is_timer='1' then
                           if ENA_LOG then
        -                     print("- Read TIMER: 0x"&hstr(timer_read));
        +                     print("- Read TIMER: 0x" & hstr(timer_read));
                           end if;
                           data_o <= timer_read;
                        else
        diff --git a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation.sh b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation.sh
        index febf588..d525737 100755
        --- a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation.sh
        +++ b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation.sh
        @@ -28,6 +28,7 @@ vcom -work zpu ../../helpers/zpu_med1.vhdl
         vcom -work zpu ../../devices/txt_util.vhdl
         vcom -work zpu ../../devices/phi_io.vhdl
         vcom -work zpu ../../devices/timer.vhdl
        +vcom -work zpu ../../devices/gpio.vhdl
         vcom -work zpu ../../devices/rx_unit.vhdl
         vcom -work zpu ../../devices/tx_unit.vhdl
         vcom -work zpu ../../devices/br_gen.vhdl
        diff --git a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation_config/wave.do b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation_config/wave.do
        index 20e68e0..d572a06 100644
        --- a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation_config/wave.do
        +++ b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/simulation_config/wave.do
        @@ -1,26 +1,30 @@
        -onerror {resume}
        -quietly WaveActivateNextPane {} 0
        -add wave -noupdate /top_tb/tb_gpio_button(0)
        -add wave -noupdate /top_tb/tb_clk_100mhz
        -add wave -noupdate -divider 
        -add wave -noupdate /top_tb/tb_rs232_rx
        -add wave -noupdate /top_tb/tb_rs232_tx
        -add wave -noupdate /top_tb/tb_rs232_rts
        -add wave -noupdate /top_tb/tb_rs232_cts
        -TreeUpdate [SetDefaultTree]
        -WaveRestoreCursors {{Cursor 1} {0 ps} 0}
        -configure wave -namecolwidth 150
        -configure wave -valuecolwidth 100
        -configure wave -justifyvalue left
        -configure wave -signalnamewidth 2
        -configure wave -snapdistance 10
        -configure wave -datasetprefix 0
        -configure wave -rowmargin 4
        -configure wave -childrowmargin 2
        -configure wave -gridoffset 0
        -configure wave -gridperiod 1
        -configure wave -griddelta 40
        -configure wave -timeline 0
        -configure wave -timelineunits ns
        -update
        -WaveRestoreZoom {0 ps} {1188293312 ps}
        +onerror {resume}
        +quietly WaveActivateNextPane {} 0
        +add wave -noupdate /top_tb/tb_gpio_button(0)
        +add wave -noupdate /top_tb/tb_clk_100MHz
        +add wave -noupdate -divider 
        +add wave -noupdate /top_tb/tb_rs232_rx
        +add wave -noupdate /top_tb/tb_rs232_tx
        +add wave -noupdate /top_tb/tb_rs232_rts
        +add wave -noupdate /top_tb/tb_rs232_cts
        +add wave -noupdate -divider Buttons
        +add wave -noupdate /top_tb/tb_gpio_button
        +add wave -noupdate -divider LEDs
        +add wave -noupdate /top_tb/tb_gpio_led_n
        +TreeUpdate [SetDefaultTree]
        +WaveRestoreCursors {{Cursor 1} {0 ps} 0}
        +configure wave -namecolwidth 150
        +configure wave -valuecolwidth 100
        +configure wave -justifyvalue left
        +configure wave -signalnamewidth 2
        +configure wave -snapdistance 10
        +configure wave -datasetprefix 0
        +configure wave -rowmargin 4
        +configure wave -childrowmargin 2
        +configure wave -gridoffset 0
        +configure wave -gridperiod 1
        +configure wave -griddelta 40
        +configure wave -timeline 0
        +configure wave -timelineunits ns
        +update
        +WaveRestoreZoom {0 ps} {126912555 ps}
        diff --git a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/avnet-eval-xc5vfx30t.ucf b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/avnet-eval-xc5vfx30t.ucf
        index 30b3982..8494af3 100644
        --- a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/avnet-eval-xc5vfx30t.ucf
        +++ b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/avnet-eval-xc5vfx30t.ucf
        @@ -29,6 +29,19 @@ TIMESPEC "TS_clk_100" = PERIOD "clk_100" 100 MHz;
         
         
         ############################################################
        +## design placement constraints
        +############################################################
        +#
        +# the following constraint are need if you want to synthesize
        +# zpu_medium with 125 MHz
        +#
        +INST "zpu_i0_medium.zpu_i0/zpu/*" AREA_GROUP = "zpu_block";
        +AREA_GROUP "zpu_block" RANGE=SLICE_X18Y0:SLICE_X55Y41;
        +AREA_GROUP "zpu_block" RANGE=DSP48_X0Y0:DSP48_X0Y15;
        +AREA_GROUP "zpu_block" RANGE=RAMB36_X1Y0:RAMB36_X3Y7;
        +
        +
        +############################################################
         ## pin placement constraints
         ############################################################
         
        diff --git a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/top.prj b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/top.prj
        index 81d56ef..24120d5 100644
        --- a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/top.prj
        +++ b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/synthesis_config/top.prj
        @@ -12,6 +12,7 @@ vhdl zpu ../../../helpers/zpu_med1.vhdl
         vhdl zpu ../../../devices/txt_util.vhdl
         vhdl zpu ../../../devices/phi_io.vhdl
         vhdl zpu ../../../devices/timer.vhdl
        +vhdl zpu ../../../devices/gpio.vhdl
         vhdl zpu ../../../devices/rx_unit.vhdl
         vhdl zpu ../../../devices/tx_unit.vhdl
         vhdl zpu ../../../devices/br_gen.vhdl
        diff --git a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd
        index 1e2fa97..53383cc 100644
        --- a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd
        +++ b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd
        @@ -22,7 +22,7 @@ use unisim.vcomponents.dcm_base;
         entity top is
             port (
                 -- pragma translate_off 
        -        stop_simulation : out   std_logic;
        +        stop_simulation     : out   std_logic;
                 -- pragma translate_on 
                 clk_100MHz          : in    std_logic;  -- 100 MHz clock
                 clk_socket          : in    std_logic;  -- user clock
        @@ -169,7 +169,10 @@ architecture rtl of top is
                     break_o    : out std_logic;        -- Break executed
                     dbg_o      : out zpu_dbgo_t;       -- Debug info
                     rs232_tx_o : out std_logic;        -- UART Tx
        -            rs232_rx_i : in  std_logic         -- UART Rx
        +            rs232_rx_i : in  std_logic;        -- UART Rx
        +            gpio_in    : in  std_logic_vector(31 downto 0);
        +            gpio_out   : out std_logic_vector(31 downto 0);
        +            gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
                     );
             end component zpu_small1;
         
        @@ -188,7 +191,10 @@ architecture rtl of top is
                     break_o    : out std_logic;        -- Break executed
                     dbg_o      : out zpu_dbgo_t;       -- Debug info
                     rs232_tx_o : out std_logic;        -- UART Tx
        -            rs232_rx_i : in  std_logic         -- UART Rx
        +            rs232_rx_i : in  std_logic;        -- UART Rx
        +            gpio_in    : in  std_logic_vector(31 downto 0);
        +            gpio_out   : out std_logic_vector(31 downto 0);
        +            gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
                     );
             end component zpu_med1;
         
        @@ -210,7 +216,11 @@ architecture rtl of top is
             --
             signal ibufds_i0_o       : std_ulogic;
             signal ibufds_i1_o       : std_ulogic;
        -
        +    --
        +    signal gpio_in           : std_logic_vector(31 downto 0) := (others => '0');
        +    signal zpu_i0_gpio_out   : std_logic_vector(31 downto 0);
        +    signal zpu_i0_gpio_dir   : std_logic_vector(31 downto 0);
        +    
         begin
           
             -- default output drivers
        @@ -348,12 +358,15 @@ begin
                         clk_freq  => clk_frequency * clk_multiply / clk_divide
                         )
                     port map (
        -                clk_i      => clk,           -- : in  std_logic;   - CPU clock
        -                rst_i      => reset_sync,    -- : in  std_logic;   - Reset
        -                break_o    => zpu_i0_break,  -- : out std_logic;   - Break executed
        -                dbg_o      => zpu_i0_dbg,    -- : out zpu_dbgo_t;  - Debug info
        -                rs232_tx_o => rs232_tx,      -- : out std_logic;   - UART Tx
        -                rs232_rx_i => rs232_rx       -- : in  std_logic    - UART Rx
        +                clk_i      => clk,             -- : in  std_logic;   - CPU clock
        +                rst_i      => reset_sync,      -- : in  std_logic;   - Reset
        +                break_o    => zpu_i0_break,    -- : out std_logic;   - Break executed
        +                dbg_o      => zpu_i0_dbg,      -- : out zpu_dbgo_t;  - Debug info
        +                rs232_tx_o => rs232_tx,        -- : out std_logic;   - UART Tx
        +                rs232_rx_i => rs232_rx,        -- : in  std_logic    - UART Rx
        +                gpio_in    => gpio_in,         -- : in  std_logic_vector(31 downto 0);
        +                gpio_out   => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0);
        +                gpio_dir   => zpu_i0_gpio_dir  -- : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
                         );
             end generate zpu_i0_small;
         
        @@ -365,12 +378,15 @@ begin
                         clk_freq  => clk_frequency * clk_multiply / clk_divide
                         )
                     port map (
        -                clk_i      => clk,           -- : in  std_logic;   - CPU clock
        -                rst_i      => reset_sync,    -- : in  std_logic;   - Reset
        -                break_o    => zpu_i0_break,  -- : out std_logic;   - Break executed
        -                dbg_o      => zpu_i0_dbg,    -- : out zpu_dbgo_t;  - Debug info
        -                rs232_tx_o => rs232_tx,      -- : out std_logic;   - UART Tx
        -                rs232_rx_i => rs232_rx       -- : in  std_logic    - UART Rx
        +                clk_i      => clk,             -- : in  std_logic;   - CPU clock
        +                rst_i      => reset_sync,      -- : in  std_logic;   - Reset
        +                break_o    => zpu_i0_break,    -- : out std_logic;   - Break executed
        +                dbg_o      => zpu_i0_dbg,      -- : out zpu_dbgo_t;  - Debug info
        +                rs232_tx_o => rs232_tx,        -- : out std_logic;   - UART Tx
        +                rs232_rx_i => rs232_rx,        -- : in  std_logic    - UART Rx
        +                gpio_in    => gpio_in,         -- : in  std_logic_vector(31 downto 0);
        +                gpio_out   => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0);
        +                gpio_dir   => zpu_i0_gpio_dir  -- : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
                         );
             end generate zpu_i0_medium;
         
        @@ -392,17 +408,21 @@ begin
                     );
             -- pragma translate_on
         
        +    -- assign GPIOs
        +    -- no bidirectional pins (e.g. headers), so
        +    -- gpio_dir is unused
        +    gpio_in(15 downto 8) <= gpio_dipswitch;
        +    gpio_in( 3 downto 0) <= gpio_button;
        +
         
             -- switch on all LEDs in case of break
             process
             begin
                 wait until rising_edge(clk);
        +        gpio_led_n <= not zpu_i0_gpio_out(7 downto 0);
                 if zpu_i0_break = '1' then
                     gpio_led_n <= (others => '0');
                 end if;
        -        if reset_sync = '1' then
        -            gpio_led_n <= (others => '1');
        -        end if;
             end process;
         
         
        diff --git a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top_tb.vhd b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top_tb.vhd
        index 0d173e2..751ce22 100644
        --- a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top_tb.vhd
        +++ b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top_tb.vhd
        @@ -144,6 +144,9 @@ begin
             tb_gpio_button(0) <= '1', '0' after 6.66 * clk_100MHz_period;
         
         
        +    -- simulate keypress
        +    tb_gpio_button(2) <= '0', '1' after 55 us, '0' after 56 us;
        +
             -- dut
             top_i0 : entity work.top
                 port map (
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation.sh b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation.sh
        index febf588..d525737 100755
        --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation.sh
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation.sh
        @@ -28,6 +28,7 @@ vcom -work zpu ../../helpers/zpu_med1.vhdl
         vcom -work zpu ../../devices/txt_util.vhdl
         vcom -work zpu ../../devices/phi_io.vhdl
         vcom -work zpu ../../devices/timer.vhdl
        +vcom -work zpu ../../devices/gpio.vhdl
         vcom -work zpu ../../devices/rx_unit.vhdl
         vcom -work zpu ../../devices/tx_unit.vhdl
         vcom -work zpu ../../devices/br_gen.vhdl
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/run.do b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/run.do
        index 7c5e18f..0d29e0a 100644
        --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/run.do
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/run.do
        @@ -1,4 +1,2 @@
        -add wave tb_rot_center
        -add wave tb_clk_50mhz
        -add wave tb_rs232_dce*
        -run -all
        +do wave.do
        +run -all
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/wave.do b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/wave.do
        new file mode 100644
        index 0000000..12582ce
        --- /dev/null
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/simulation_config/wave.do
        @@ -0,0 +1,30 @@
        +onerror {resume}
        +quietly WaveActivateNextPane {} 0
        +add wave -noupdate /top_tb/tb_rot_center
        +add wave -noupdate /top_tb/tb_clk_50mhz
        +add wave -noupdate /top_tb/tb_rs232_dce_rxd
        +add wave -noupdate /top_tb/tb_rs232_dce_txd
        +add wave -noupdate -divider Buttons
        +add wave -noupdate /top_tb/tb_btn_east
        +add wave -noupdate /top_tb/tb_btn_north
        +add wave -noupdate /top_tb/tb_btn_south
        +add wave -noupdate /top_tb/tb_btn_west
        +add wave -noupdate -divider LEDs
        +add wave -noupdate /top_tb/top_i0/led
        +TreeUpdate [SetDefaultTree]
        +WaveRestoreCursors {{Cursor 1} {56714893 ps} 0}
        +configure wave -namecolwidth 150
        +configure wave -valuecolwidth 100
        +configure wave -justifyvalue left
        +configure wave -signalnamewidth 2
        +configure wave -snapdistance 10
        +configure wave -datasetprefix 0
        +configure wave -rowmargin 4
        +configure wave -childrowmargin 2
        +configure wave -gridoffset 0
        +configure wave -gridperiod 1
        +configure wave -griddelta 40
        +configure wave -timeline 0
        +configure wave -timelineunits ns
        +update
        +WaveRestoreZoom {0 ps} {151772250 ps}
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.prj b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.prj
        index 81d56ef..965ae4c 100644
        --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.prj
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.prj
        @@ -1,18 +1,19 @@
        -vhdl work ../top.vhd
        -vhdl zpu ../../../zpu_pkg.vhdl
        -vhdl zpu ../../../zpu_small.vhdl
        -vhdl zpu ../../../zpu_medium.vhdl
        -vhdl zpu ../../../roms/rom_pkg.vhdl
        -#vhdl zpu ../../../roms/hello_dbram.vhdl
        -#vhdl zpu ../../../roms/hello_bram.vhdl
        -vhdl zpu ../../../roms/dmips_dbram.vhdl
        -vhdl zpu ../../../roms/dmips_bram.vhdl
        -vhdl zpu ../../../helpers/zpu_small1.vhdl
        -vhdl zpu ../../../helpers/zpu_med1.vhdl
        -vhdl zpu ../../../devices/txt_util.vhdl
        -vhdl zpu ../../../devices/phi_io.vhdl
        -vhdl zpu ../../../devices/timer.vhdl
        -vhdl zpu ../../../devices/rx_unit.vhdl
        -vhdl zpu ../../../devices/tx_unit.vhdl
        -vhdl zpu ../../../devices/br_gen.vhdl
        -vhdl zpu ../../../devices/trace.vhdl
        +vhdl work ../top.vhd
        +vhdl zpu ../../../zpu_pkg.vhdl
        +vhdl zpu ../../../zpu_small.vhdl
        +vhdl zpu ../../../zpu_medium.vhdl
        +vhdl zpu ../../../roms/rom_pkg.vhdl
        +#vhdl zpu ../../../roms/hello_dbram.vhdl
        +#vhdl zpu ../../../roms/hello_bram.vhdl
        +vhdl zpu ../../../roms/dmips_dbram.vhdl
        +vhdl zpu ../../../roms/dmips_bram.vhdl
        +vhdl zpu ../../../helpers/zpu_small1.vhdl
        +vhdl zpu ../../../helpers/zpu_med1.vhdl
        +vhdl zpu ../../../devices/txt_util.vhdl
        +vhdl zpu ../../../devices/phi_io.vhdl
        +vhdl zpu ../../../devices/timer.vhdl
        +vhdl zpu ../../../devices/gpio.vhdl
        +vhdl zpu ../../../devices/rx_unit.vhdl
        +vhdl zpu ../../../devices/tx_unit.vhdl
        +vhdl zpu ../../../devices/br_gen.vhdl
        +vhdl zpu ../../../devices/trace.vhdl
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.ut b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.ut
        index 06de8d5..4bf13c6 100644
        --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.ut
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.ut
        @@ -1,22 +1,22 @@
        --w
        --g DebugBitstream:No
        --g Binary:no
        --g CRC:Enable
        --g ConfigRate:1
        --g ProgPin:PullUp
        --g DonePin:PullUp
        --g TckPin:PullUp
        --g TdiPin:PullUp
        --g TdoPin:PullUp
        --g TmsPin:PullUp
        --g UnusedPin:PullDown
        --g UserID:0xFFFFFFFF
        --g DCMShutdown:Disable
        --g StartUpClk:CClk
        --g DONE_cycle:4
        --g GTS_cycle:5
        --g GWE_cycle:6
        --g LCK_cycle:NoWait
        --g Security:None
        --g DonePipe:No
        --g DriveDone:No
        +-w
        +-g DebugBitstream:No
        +-g Binary:no
        +-g CRC:Enable
        +-g ConfigRate:1
        +-g ProgPin:PullUp
        +-g DonePin:PullUp
        +-g TckPin:PullUp
        +-g TdiPin:PullUp
        +-g TdoPin:PullUp
        +-g TmsPin:PullUp
        +-g UnusedPin:PullDown
        +-g UserID:0xFFFFFFFF
        +-g DCMShutdown:Disable
        +-g StartUpClk:CClk
        +-g DONE_cycle:4
        +-g GTS_cycle:5
        +-g GWE_cycle:6
        +-g LCK_cycle:NoWait
        +-g Security:None
        +-g DonePipe:No
        +-g DriveDone:No
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.xst b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.xst
        index fc7cc1d..d357860 100644
        --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.xst
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/synthesis_config/top.xst
        @@ -1,56 +1,56 @@
        -set -tmpdir "tmp"
        -set -xsthdpdir "xst"
        -run
        --ifn ../synthesis_config/top.prj
        --ifmt mixed
        --ofn top
        --ofmt NGC
        --p xc3s500e-4-fg320
        --top top
        --opt_mode Speed
        --opt_level 1
        --iuc NO
        --keep_hierarchy No
        --netlist_hierarchy As_Optimized
        --rtlview Yes
        --glob_opt AllClockNets
        --read_cores YES
        --write_timing_constraints NO
        --cross_clock_analysis NO
        --hierarchy_separator /
        --bus_delimiter <>
        --case Maintain
        --slice_utilization_ratio 100
        --bram_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
        --mux_style Auto
        --decoder_extract YES
        --priority_extract Yes
        --shreg_extract YES
        --shift_extract YES
        --xor_collapse YES
        --rom_style Auto
        --auto_bram_packing NO
        --mux_extract Yes
        --resource_sharing YES
        --async_to_sync NO
        --mult_style Auto
        --iobuf YES
        --max_fanout 500
        --bufg 24
        --register_duplication YES
        --register_balancing No
        --slice_packing YES
        --optimize_primitives NO
        --use_clock_enable Yes
        --use_sync_set Yes
        --use_sync_reset Yes
        --iob Auto
        --equivalent_register_removal YES
        --slice_utilization_ratio_maxmargin 5
        +set -tmpdir "tmp"
        +set -xsthdpdir "xst"
        +run
        +-ifn ../synthesis_config/top.prj
        +-ifmt mixed
        +-ofn top
        +-ofmt NGC
        +-p xc3s500e-4-fg320
        +-top top
        +-opt_mode Speed
        +-opt_level 1
        +-iuc NO
        +-keep_hierarchy No
        +-netlist_hierarchy As_Optimized
        +-rtlview Yes
        +-glob_opt AllClockNets
        +-read_cores YES
        +-write_timing_constraints NO
        +-cross_clock_analysis NO
        +-hierarchy_separator /
        +-bus_delimiter <>
        +-case Maintain
        +-slice_utilization_ratio 100
        +-bram_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
        +-mux_style Auto
        +-decoder_extract YES
        +-priority_extract Yes
        +-shreg_extract YES
        +-shift_extract YES
        +-xor_collapse YES
        +-rom_style Auto
        +-auto_bram_packing NO
        +-mux_extract Yes
        +-resource_sharing YES
        +-async_to_sync NO
        +-mult_style Auto
        +-iobuf YES
        +-max_fanout 500
        +-bufg 24
        +-register_duplication YES
        +-register_balancing No
        +-slice_packing YES
        +-optimize_primitives NO
        +-use_clock_enable Yes
        +-use_sync_set Yes
        +-use_sync_reset Yes
        +-iob Auto
        +-equivalent_register_removal YES
        +-slice_utilization_ratio_maxmargin 5
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd
        index 127f6a8..79668e5 100644
        --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd
        @@ -1,419 +1,447 @@
        --- top module of
        --- Spartan-3E Starter Kit Board
        ---
        --- using following external connections:
        --- rotary pushbutton as reset
        --- LEDs   for output
        --- RS232 (DCE, the left one)
        ---
        -
        -
        -library ieee;
        -use ieee.std_logic_1164.all;
        -
        -library zpu;
        -use zpu.zpupkg.all;                     -- zpu_dbgo_t
        -
        -library unisim;
        -use unisim.vcomponents.dcm_sp;
        -
        -
        -entity top is
        -    port (
        -        -- pragma translate_off 
        -        stop_simulation : out   std_logic;
        -        -- pragma translate_on 
        -        --
        -        -- Analog-to-Digital Converter (ADC)
        -        ad_conv         : out   std_logic;
        -        -- Programmable Gain Amplifier (AMP)
        -        amp_cs          : out   std_logic;  -- active low chip select
        -        amp_dout        : in    std_logic;
        -        amp_shdn        : out   std_logic;  -- active high shutdown, reset
        -        -- Pushbuttons (BTN)
        -        btn_east        : in    std_logic;
        -        btn_north       : in    std_logic;
        -        btn_south       : in    std_logic;
        -        btn_west        : in    std_logic;
        -        -- Clock inputs (CLK)
        -        clk_50mhz       : in    std_logic;
        -        clk_aux         : in    std_logic;
        -        clk_sma         : in    std_logic;
        -        -- Digital-to-Analog Converter (DAC)
        -        dac_clr         : out   std_logic;  -- async, active low reset input
        -        dac_cs          : out   std_logic;  -- active low chip select, conv start with rising edge
        -        -- 1-Wire Secure EEPROM (DS)
        -        ds_wire         : inout std_logic;
        -        -- Ethernet PHY (E)
        -        e_col           : in    std_logic;  -- MII collision detect
        -        e_crs           : in    std_logic;  -- carrier sense
        -        e_mdc           : out   std_logic;  -- management clock
        -        e_mdio          : inout std_logic;  -- management data io
        -        e_rx_clk        : in    std_logic;  -- receive clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        -        e_rx_dv         : in    std_logic;  -- receive data valid
        -        e_rxd           : in    std_logic_vector(3 downto 0);
        -        e_rx_er         : in    std_logic;
        -        e_tx_clk        : in    std_logic;  -- transmit clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        -        e_tx_en         : out   std_logic;  -- transmit enable
        -        e_txd           : out   std_logic_vector(3 downto 0);
        -        e_tx_er         : out   std_logic;
        -        -- FPGA Configuration Mode, INIT_B Pins (FPGA)
        -        fpga_m0         : inout std_logic;
        -        fpga_m1         : inout std_logic;
        -        fpga_m2         : inout std_logic;
        -        fpga_init_b     : inout std_logic;
        -        fpga_rdwr_b     : in    std_logic;
        -        fpga_hswap      : in    std_logic;
        -        -- FX2 Connector (FX2)
        -        fx2_clkin       : inout std_logic;
        -        fx2_clkio       : inout std_logic;
        -        fx2_clkout      : inout std_logic;
        -        fx2_io          : inout std_logic_vector(40 downto 1);
        -        -- These are shared connections with the FX2 connector
        -        --j1              : inout std_logic_vector(3 downto 0);
        -        --j2              : inout std_logic_vector(3 downto 0);
        -        --j4              : inout std_logic_vector(3 downto 0);
        -        --led             : out   std_logic_vector(7 downto 0);
        -        -- Character LCD (LCD)
        -        lcd_e           : out   std_logic;
        -        lcd_rs          : out   std_logic;
        -        lcd_rw          : out   std_logic;
        -        -- LCD data connections are shared with StrataFlash connections SF_D<11:8>
        -        --sf_d          : inout std_ulogic_vector(11 downto 8);
        -        -- PS/2 Mouse/Keyboard Port (PS2)
        -        ps2_clk         : inout std_logic;
        -        ps2_data        : inout std_logic;
        -        -- Rotary Pushbutton Switch (ROT)
        -        rot_a           : in    std_logic;
        -        rot_b           : in    std_logic;
        -        rot_center      : in    std_logic;
        -        -- RS-232 Serial Ports (RS232)
        -        rs232_dce_rxd   : in    std_logic;
        -        rs232_dce_txd   : out   std_logic;
        -        rs232_dte_rxd   : in    std_logic;
        -        rs232_dte_txd   : out   std_logic;
        -        -- DDR SDRAM (SD) (I/O Bank 3, VCCO=2.5V)
        -        sd_a            : out   std_logic_vector(12 downto 0);  -- address inputs
        -        sd_dq           : inout std_logic_vector(15 downto 0);  -- data io
        -        sd_ba           : out   std_logic_vector(1 downto 0);   -- bank address inputs
        -        sd_ras          : out   std_logic;                      -- command output
        -        sd_cas          : out   std_logic;                      -- command output
        -        sd_we           : out   std_logic;                      -- command output 
        -        sd_udm          : out   std_logic;                      -- data mask
        -        sd_ldm          : out   std_logic;                      -- data mask
        -        sd_udqs         : inout std_logic;                      -- data strobe
        -        sd_ldqs         : inout std_logic;                      -- data strobe
        -        sd_cs           : out   std_logic;                      -- active low chip select
        -        sd_cke          : out   std_logic;                      -- active high clock enable
        -        sd_ck_n         : out   std_logic;                      -- differential clock
        -        sd_ck_p         : out   std_logic;                      -- differential clock
        -        -- Path to allow connection to top DCM connection
        -        sd_ck_fb        : in    std_logic;
        -        -- Intel StrataFlash Parallel NOR Flash (SF)
        -        sf_a            : out   std_logic_vector(23 downto 0);  -- sf_a<24> = fx_io32
        -        sf_byte         : out   std_logic;
        -        sf_ce0          : out   std_logic;
        -        sf_d            : inout std_logic_vector(15 downto 1);
        -        sf_oe           : out   std_logic;
        -        sf_sts          : in    std_logic;
        -        sf_we           : out   std_logic;
        -        -- STMicro SPI serial Flash (SPI)
        -        spi_mosi        : out   std_logic;  -- master out slave in
        -        spi_miso        : in    std_logic;  -- master in  slave out
        -        spi_sck         : out   std_logic;  -- clock
        -        spi_ss_b        : out   std_logic;  -- active low slave select
        -        spi_alt_cs_jp11 : out   std_logic;
        -        -- Slide Switches (SW)
        -        sw              : in    std_logic_vector(3 downto 0);
        -        -- VGA Port (VGA)
        -        vga_blue        : out   std_logic;
        -        vga_green       : out   std_logic;
        -        vga_hsync       : out   std_logic;
        -        vga_red         : out   std_logic;
        -        vga_vsync       : out   std_logic;
        -        -- Xilinx CPLD (XC)
        -        xc_cmd          : out   std_logic_vector(1 downto 0);
        -        xc_cpld_en      : out   std_logic;
        -        xc_d            : inout std_logic_vector(2 downto 0);
        -        xc_trig         : in    std_logic;
        -        xc_gck0         : inout std_logic;
        -        gclk10          : inout std_logic
        -        );
        -end entity top;
        -
        -
        -architecture rtl of top is
        -
        -    ---------------------------
        -    -- type declarations
        -    type zpu_type is (zpu_small, zpu_medium);
        -
        -    ---------------------------
        -    -- constant declarations
        -    constant zpu_flavour : zpu_type := zpu_medium;  -- choose your flavour HERE
        -    --  modify frequency here
        -    constant clk_multiply : positive := 3;  -- 2 for small, 3 for medium
        -    constant clk_divide   : positive := 2;  -- 1 for small, 2 for medium
        -    --
        -    constant word_size_c  : natural  := 32; -- 32 bits data path
        -    constant addr_w_c     : natural  := 18; -- 18 bits address space=256 kB, 128 kB I/O
        -
        -
        -    constant spi_ss_b_disable    : std_ulogic := '1';  -- 1 = disable SPI serial flash
        -    constant dac_cs_disable      : std_ulogic := '1';  -- 1 = disable DAC 
        -    constant amp_cs_disable      : std_ulogic := '1';  -- 1 = disable programmable pre-amplifier
        -    constant ad_conv_disable     : std_ulogic := '0';  -- 0 = disable ADC
        -    constant sf_ce0_disable      : std_ulogic := '1';
        -    constant fpga_init_b_disable : std_ulogic := '1';  -- 1 = disable pflatform flash PROM
        -    --
        -    -- connect ldc to fpga
        -    constant sf_ce0_lcd_to_fpga  : std_ulogic := '1';
        -    --
        -    constant clk_frequency       : positive   := 50;   -- input frequency for correct calculation
        -
        -
        -    ---------------------------
        -    -- component declarations
        -    component zpu_small1 is
        -        generic (
        -            word_size  : natural   := 32;      -- 32 bits data path
        -            d_care_val : std_logic := '0';     -- Fill value
        -            clk_freq   : positive  := 50;      -- 50 MHz clock
        -            brate      : positive  := 115200;  -- RS232 baudrate
        -            addr_w     : natural   := 16;      -- 16 bits address space=64 kB, 32 kB I/O
        -            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        -            );
        -        port (
        -            clk_i      : in  std_logic;        -- CPU clock
        -            rst_i      : in  std_logic;        -- Reset
        -            break_o    : out std_logic;        -- Break executed
        -            dbg_o      : out zpu_dbgo_t;       -- Debug info
        -            rs232_tx_o : out std_logic;        -- UART Tx
        -            rs232_rx_i : in  std_logic         -- UART Rx
        -            );
        -    end component zpu_small1;
        -
        -    component zpu_med1 is
        -        generic(
        -            word_size  : natural   := 32;      -- 32 bits data path
        -            d_care_val : std_logic := '0';     -- Fill value
        -            clk_freq   : positive  := 50;      -- 50 MHz clock
        -            brate      : positive  := 115200;  -- RS232 baudrate
        -            addr_w     : natural   := 18;      -- 18 bits address space=256 kB, 128 kB I/O
        -            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        -            );
        -        port(
        -            clk_i      : in  std_logic;        -- CPU clock
        -            rst_i      : in  std_logic;        -- Reset
        -            break_o    : out std_logic;        -- Break executed
        -            dbg_o      : out zpu_dbgo_t;       -- Debug info
        -            rs232_tx_o : out std_logic;        -- UART Tx
        -            rs232_rx_i : in  std_logic         -- UART Rx
        -            );
        -    end component zpu_med1;
        -
        -
        -    ---------------------------
        -    -- signal declarations
        -    signal dcm_sp_i0_clk0  : std_ulogic;
        -    signal dcm_sp_i0_clkfx : std_ulogic;
        -    signal clk_fb          : std_ulogic;
        -    signal clk             : std_ulogic;
        -    --
        -    signal reset_shift_reg : std_ulogic_vector(3 downto 0);
        -    signal reset_sync      : std_ulogic;
        -    --
        -    signal zpu_i0_dbg      : zpu_dbgo_t;  -- Debug info
        -    signal zpu_i0_break    : std_logic;
        -
        -    ---------------------------
        -    -- alias declarations
        -    alias led : std_logic_vector(7 downto 0) is fx2_io(20 downto 13);
        -
        -
        -begin
        -
        -    -- default output drivers
        -    -- to pass bitgen DRC 
        -    -- outputs used by design are commented
        -    --
        -    ad_conv           <= ad_conv_disable;
        -    amp_cs            <= amp_cs_disable;
        -    amp_shdn          <= '1';
        -    --
        -    dac_clr           <= '0';
        -    dac_cs            <= dac_cs_disable;
        -    --
        -    ds_wire           <= 'Z';
        -    --
        -    e_txd(3 downto 0) <= (others => '1');
        -    e_tx_en           <= '0';
        -    e_tx_er           <= '0';
        -    e_mdc             <= '1';
        -    e_mdio            <= 'Z';
        -    --
        -    fpga_m0           <= 'Z';
        -    fpga_m1           <= 'Z';
        -    fpga_m2           <= 'Z';
        -    fpga_init_b       <= fpga_init_b_disable;
        -    --
        -    fx2_clkin         <= 'Z';
        -    fx2_clkio         <= 'Z';
        -    fx2_clkout        <= 'Z';
        -    fx2_io            <= (others => 'Z');
        -    --
        -    lcd_e             <= '0';
        -    lcd_rs            <= '0';
        -    lcd_rw            <= '0';
        -    --
        -    ps2_clk           <= 'Z';
        -    ps2_data          <= 'Z';
        -    --
        -    --rs232_dce_txd     <= '1';
        -    rs232_dte_txd     <= '1';
        -    --
        -    sd_a              <= (others => '1');
        -    sd_dq             <= (others => 'Z');
        -    sd_ba             <= (others => '1');
        -    sd_ras            <= '0';
        -    sd_cas            <= '0';
        -    sd_we             <= '0';
        -    sd_udm            <= '1';
        -    sd_ldm            <= '1';
        -    sd_udqs           <= '1';
        -    sd_ldqs           <= '1';
        -    sd_cs             <= '1';
        -    sd_cke            <= '1';
        -    sd_ck_n           <= '0';
        -    sd_ck_p           <= '1';
        -    --
        -    sf_a              <= (others => '0');
        -    sf_byte           <= '0';
        -    sf_ce0            <= sf_ce0_lcd_to_fpga;
        -    sf_d              <= (others => 'Z');
        -    sf_oe             <= '1';
        -    sf_we             <= '0';
        -    --
        -    spi_mosi          <= '0';
        -    spi_sck           <= '0';
        -    spi_ss_b          <= spi_ss_b_disable;
        -    spi_alt_cs_jp11   <= spi_ss_b_disable;
        -    --
        -    vga_red           <= '0';
        -    vga_green         <= '0';
        -    vga_blue          <= '0';
        -    vga_hsync         <= '0';
        -    vga_vsync         <= '0';
        -    --
        -    xc_cmd            <= "00";
        -    xc_d              <= (others => 'Z');
        -    xc_cpld_en        <= '0';
        -    xc_gck0           <= 'Z';
        -    gclk10            <= 'Z';
        -    -- led out
        -    --fx2_io(20 downto 13) <= (others => '0');
        -
        -
        -    -- digital clock manager (DCM)
        -    -- to generate higher/other system clock frequencys
        -    dcm_sp_i0 : dcm_sp
        -        generic map (
        -            startup_wait   => true,     -- wait with DONE till locked
        -            clkfx_multiply => clk_multiply,
        -            clkfx_divide   => clk_divide, 
        -            clk_feedback   => "1X"
        -            )
        -        port map (
        -            clkin => clk_50mhz,
        -            clk0  => dcm_sp_i0_clk0,
        -            clkfx => dcm_sp_i0_clkfx,
        -            clkfb => clk_fb
        -            );
        -
        -    clk_fb <= dcm_sp_i0_clk0;
        -    clk    <= dcm_sp_i0_clkfx;
        -
        -
        -    -- reset synchronizer
        -    -- generate synchronous reset
        -    reset_synchronizer : process(clk, rot_center)
        -    begin
        -        if rot_center = '1' then
        -            reset_shift_reg <= (others => '1');
        -        elsif rising_edge(clk) then
        -            reset_shift_reg <= reset_shift_reg(reset_shift_reg'high-1 downto 0) & '0';
        -        end if;
        -    end process;
        -    reset_sync <= reset_shift_reg(reset_shift_reg'high);
        -
        -
        -    -- select instance of zpu
        -    zpu_i0_small : if zpu_flavour = zpu_small generate
        -        zpu_i0 : zpu_small1
        -            generic map (
        -                addr_w    => addr_w_c,
        -                word_size => word_size_c,
        -                clk_freq  => clk_frequency * clk_multiply / clk_divide
        -                )
        -            port map (
        -                clk_i      => clk,           -- : in  std_logic;   -- CPU clock
        -                rst_i      => reset_sync,    -- : in  std_logic;   -- Reset
        -                break_o    => zpu_i0_break,  -- : out std_logic;   -- Break executed
        -                dbg_o      => zpu_i0_dbg,    -- : out zpu_dbgo_t;  -- Debug info
        -                rs232_tx_o => rs232_dce_txd, -- : out std_logic;   -- UART Tx
        -                rs232_rx_i => rs232_dce_rxd  -- : in  std_logic    -- UART Rx
        -                );
        -    end generate zpu_i0_small;
        -
        -    zpu_i0_medium : if zpu_flavour = zpu_medium generate
        -        zpu_i0 : zpu_med1
        -            generic map (
        -                addr_w    => addr_w_c,
        -                word_size => word_size_c,
        -                clk_freq  => clk_frequency * clk_multiply / clk_divide
        -                )
        -            port map (
        -                clk_i      => clk,            -- : in  std_logic;   -- CPU clock
        -                rst_i      => reset_sync,     -- : in  std_logic;   -- Reset
        -                break_o    => zpu_i0_break,   -- : out std_logic;   -- Break executed
        -                dbg_o      => zpu_i0_dbg,     -- : out zpu_dbgo_t;  -- Debug info
        -                rs232_tx_o => rs232_dce_txd,  -- : out std_logic;   -- UART Tx
        -                rs232_rx_i => rs232_dce_rxd   -- : in  std_logic    -- UART Rx
        -                );
        -    end generate zpu_i0_medium;
        -
        -
        -    -- pragma translate_off 
        -    stop_simulation <= zpu_i0_break;
        -
        -
        -    trace_mod : trace
        -        generic map (
        -            addr_w    => addr_w_c,
        -            word_size => word_size_c,
        -            log_file  => "zpu_trace.log"
        -            )
        -        port map (
        -            clk_i  => clk,
        -            dbg_i  => zpu_i0_dbg,
        -            stop_i => zpu_i0_break,
        -            busy_i => '0'
        -            );
        -    -- pragma translate_on
        -
        -
        -    -- switch on all LEDs in case of break
        -    process
        -    begin
        -        wait until rising_edge(clk);
        -        if zpu_i0_break = '1' then
        -            led <= (others => '1');
        -        end if;
        -        if reset_sync = '1' then
        -            led <= (others => '0');
        -        end if;
        -    end process;
        -
        -    
        -
        -end architecture rtl;
        +-- top module of
        +-- Spartan-3E Starter Kit Board
        +--
        +-- using following external connections:
        +-- rotary pushbutton as reset
        +-- LEDs   for output
        +-- RS232 (DCE, the left one)
        +--
        +
        +
        +library ieee;
        +use ieee.std_logic_1164.all;
        +
        +library zpu;
        +use zpu.zpupkg.all;                     -- zpu_dbgo_t
        +
        +library unisim;
        +use unisim.vcomponents.dcm_sp;
        +
        +
        +entity top is
        +    port (
        +        -- pragma translate_off 
        +        stop_simulation : out   std_logic;
        +        -- pragma translate_on 
        +        --
        +        -- Analog-to-Digital Converter (ADC)
        +        ad_conv         : out   std_logic;
        +        -- Programmable Gain Amplifier (AMP)
        +        amp_cs          : out   std_logic;  -- active low chip select
        +        amp_dout        : in    std_logic;
        +        amp_shdn        : out   std_logic;  -- active high shutdown, reset
        +        -- Pushbuttons (BTN)
        +        btn_east        : in    std_logic;
        +        btn_north       : in    std_logic;
        +        btn_south       : in    std_logic;
        +        btn_west        : in    std_logic;
        +        -- Clock inputs (CLK)
        +        clk_50mhz       : in    std_logic;
        +        clk_aux         : in    std_logic;
        +        clk_sma         : in    std_logic;
        +        -- Digital-to-Analog Converter (DAC)
        +        dac_clr         : out   std_logic;  -- async, active low reset input
        +        dac_cs          : out   std_logic;  -- active low chip select, conv start with rising edge
        +        -- 1-Wire Secure EEPROM (DS)
        +        ds_wire         : inout std_logic;
        +        -- Ethernet PHY (E)
        +        e_col           : in    std_logic;  -- MII collision detect
        +        e_crs           : in    std_logic;  -- carrier sense
        +        e_mdc           : out   std_logic;  -- management clock
        +        e_mdio          : inout std_logic;  -- management data io
        +        e_rx_clk        : in    std_logic;  -- receive clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        +        e_rx_dv         : in    std_logic;  -- receive data valid
        +        e_rxd           : in    std_logic_vector(3 downto 0);
        +        e_rx_er         : in    std_logic;
        +        e_tx_clk        : in    std_logic;  -- transmit clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        +        e_tx_en         : out   std_logic;  -- transmit enable
        +        e_txd           : out   std_logic_vector(3 downto 0);
        +        e_tx_er         : out   std_logic;
        +        -- FPGA Configuration Mode, INIT_B Pins (FPGA)
        +        fpga_m0         : inout std_logic;
        +        fpga_m1         : inout std_logic;
        +        fpga_m2         : inout std_logic;
        +        fpga_init_b     : inout std_logic;
        +        fpga_rdwr_b     : in    std_logic;
        +        fpga_hswap      : in    std_logic;
        +        -- FX2 Connector (FX2)
        +        fx2_clkin       : inout std_logic;
        +        fx2_clkio       : inout std_logic;
        +        fx2_clkout      : inout std_logic;
        +        fx2_io          : inout std_logic_vector(40 downto 1);
        +        -- These are shared connections with the FX2 connector
        +        --j1              : inout std_logic_vector(3 downto 0);
        +        --j2              : inout std_logic_vector(3 downto 0);
        +        --j4              : inout std_logic_vector(3 downto 0);
        +        --led             : out   std_logic_vector(7 downto 0);
        +        -- Character LCD (LCD)
        +        lcd_e           : out   std_logic;
        +        lcd_rs          : out   std_logic;
        +        lcd_rw          : out   std_logic;
        +        -- LCD data connections are shared with StrataFlash connections SF_D<11:8>
        +        --sf_d          : inout std_ulogic_vector(11 downto 8);
        +        -- PS/2 Mouse/Keyboard Port (PS2)
        +        ps2_clk         : inout std_logic;
        +        ps2_data        : inout std_logic;
        +        -- Rotary Pushbutton Switch (ROT)
        +        rot_a           : in    std_logic;
        +        rot_b           : in    std_logic;
        +        rot_center      : in    std_logic;
        +        -- RS-232 Serial Ports (RS232)
        +        rs232_dce_rxd   : in    std_logic;
        +        rs232_dce_txd   : out   std_logic;
        +        rs232_dte_rxd   : in    std_logic;
        +        rs232_dte_txd   : out   std_logic;
        +        -- DDR SDRAM (SD) (I/O Bank 3, VCCO=2.5V)
        +        sd_a            : out   std_logic_vector(12 downto 0);  -- address inputs
        +        sd_dq           : inout std_logic_vector(15 downto 0);  -- data io
        +        sd_ba           : out   std_logic_vector(1 downto 0);   -- bank address inputs
        +        sd_ras          : out   std_logic;                      -- command output
        +        sd_cas          : out   std_logic;                      -- command output
        +        sd_we           : out   std_logic;                      -- command output 
        +        sd_udm          : out   std_logic;                      -- data mask
        +        sd_ldm          : out   std_logic;                      -- data mask
        +        sd_udqs         : inout std_logic;                      -- data strobe
        +        sd_ldqs         : inout std_logic;                      -- data strobe
        +        sd_cs           : out   std_logic;                      -- active low chip select
        +        sd_cke          : out   std_logic;                      -- active high clock enable
        +        sd_ck_n         : out   std_logic;                      -- differential clock
        +        sd_ck_p         : out   std_logic;                      -- differential clock
        +        -- Path to allow connection to top DCM connection
        +        sd_ck_fb        : in    std_logic;
        +        -- Intel StrataFlash Parallel NOR Flash (SF)
        +        sf_a            : out   std_logic_vector(23 downto 0);  -- sf_a<24> = fx_io32
        +        sf_byte         : out   std_logic;
        +        sf_ce0          : out   std_logic;
        +        sf_d            : inout std_logic_vector(15 downto 1);
        +        sf_oe           : out   std_logic;
        +        sf_sts          : in    std_logic;
        +        sf_we           : out   std_logic;
        +        -- STMicro SPI serial Flash (SPI)
        +        spi_mosi        : out   std_logic;  -- master out slave in
        +        spi_miso        : in    std_logic;  -- master in  slave out
        +        spi_sck         : out   std_logic;  -- clock
        +        spi_ss_b        : out   std_logic;  -- active low slave select
        +        spi_alt_cs_jp11 : out   std_logic;
        +        -- Slide Switches (SW)
        +        sw              : in    std_logic_vector(3 downto 0);
        +        -- VGA Port (VGA)
        +        vga_blue        : out   std_logic;
        +        vga_green       : out   std_logic;
        +        vga_hsync       : out   std_logic;
        +        vga_red         : out   std_logic;
        +        vga_vsync       : out   std_logic;
        +        -- Xilinx CPLD (XC)
        +        xc_cmd          : out   std_logic_vector(1 downto 0);
        +        xc_cpld_en      : out   std_logic;
        +        xc_d            : inout std_logic_vector(2 downto 0);
        +        xc_trig         : in    std_logic;
        +        xc_gck0         : inout std_logic;
        +        gclk10          : inout std_logic
        +        );
        +end entity top;
        +
        +
        +architecture rtl of top is
        +
        +    ---------------------------
        +    -- type declarations
        +    type zpu_type is (zpu_small, zpu_medium);
        +
        +    ---------------------------
        +    -- constant declarations
        +    constant zpu_flavour : zpu_type := zpu_medium;  -- choose your flavour HERE
        +    --  modify frequency here
        +    constant clk_multiply : positive := 3;  -- 2 for small, 3 for medium
        +    constant clk_divide   : positive := 2;  -- 1 for small, 2 for medium
        +    --
        +    constant word_size_c  : natural  := 32; -- 32 bits data path
        +    constant addr_w_c     : natural  := 18; -- 18 bits address space=256 kB, 128 kB I/O
        +
        +
        +    constant spi_ss_b_disable    : std_ulogic := '1';  -- 1 = disable SPI serial flash
        +    constant dac_cs_disable      : std_ulogic := '1';  -- 1 = disable DAC 
        +    constant amp_cs_disable      : std_ulogic := '1';  -- 1 = disable programmable pre-amplifier
        +    constant ad_conv_disable     : std_ulogic := '0';  -- 0 = disable ADC
        +    constant sf_ce0_disable      : std_ulogic := '1';
        +    constant fpga_init_b_disable : std_ulogic := '1';  -- 1 = disable pflatform flash PROM
        +    --
        +    -- connect ldc to fpga
        +    constant sf_ce0_lcd_to_fpga  : std_ulogic := '1';
        +    --
        +    constant clk_frequency       : positive   := 50;   -- input frequency for correct calculation
        +
        +
        +    ---------------------------
        +    -- component declarations
        +    component zpu_small1 is
        +        generic (
        +            word_size  : natural   := 32;      -- 32 bits data path
        +            d_care_val : std_logic := '0';     -- Fill value
        +            clk_freq   : positive  := 50;      -- 50 MHz clock
        +            brate      : positive  := 115200;  -- RS232 baudrate
        +            addr_w     : natural   := 16;      -- 16 bits address space=64 kB, 32 kB I/O
        +            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        +            );
        +        port (
        +            clk_i      : in  std_logic;        -- CPU clock
        +            rst_i      : in  std_logic;        -- Reset
        +            break_o    : out std_logic;        -- Break executed
        +            dbg_o      : out zpu_dbgo_t;       -- Debug info
        +            rs232_tx_o : out std_logic;        -- UART Tx
        +            rs232_rx_i : in  std_logic;        -- UART Rx
        +            gpio_in    : in  std_logic_vector(31 downto 0);
        +            gpio_out   : out std_logic_vector(31 downto 0);
        +            gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +            );
        +    end component zpu_small1;
        +
        +    component zpu_med1 is
        +        generic(
        +            word_size  : natural   := 32;      -- 32 bits data path
        +            d_care_val : std_logic := '0';     -- Fill value
        +            clk_freq   : positive  := 50;      -- 50 MHz clock
        +            brate      : positive  := 115200;  -- RS232 baudrate
        +            addr_w     : natural   := 18;      -- 18 bits address space=256 kB, 128 kB I/O
        +            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        +            );
        +        port(
        +            clk_i      : in  std_logic;        -- CPU clock
        +            rst_i      : in  std_logic;        -- Reset
        +            break_o    : out std_logic;        -- Break executed
        +            dbg_o      : out zpu_dbgo_t;       -- Debug info
        +            rs232_tx_o : out std_logic;        -- UART Tx
        +            rs232_rx_i : in  std_logic;        -- UART Rx
        +            gpio_in    : in  std_logic_vector(31 downto 0);
        +            gpio_out   : out std_logic_vector(31 downto 0);
        +            gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +            );
        +    end component zpu_med1;
        +
        +
        +    ---------------------------
        +    -- signal declarations
        +    signal dcm_sp_i0_clk0  : std_ulogic;
        +    signal dcm_sp_i0_clkfx : std_ulogic;
        +    signal clk_fb          : std_ulogic;
        +    signal clk             : std_ulogic;
        +    --
        +    signal reset_shift_reg : std_ulogic_vector(3 downto 0);
        +    signal reset_sync      : std_ulogic;
        +    --
        +    signal zpu_i0_dbg      : zpu_dbgo_t;  -- Debug info
        +    signal zpu_i0_break    : std_logic;
        +    --
        +    signal gpio_in         : std_logic_vector(31 downto 0);
        +    signal zpu_i0_gpio_out : std_logic_vector(31 downto 0);
        +    signal zpu_i0_gpio_dir : std_logic_vector(31 downto 0);
        +    
        +    ---------------------------
        +    -- alias declarations
        +    alias led : std_logic_vector(7 downto 0) is fx2_io(20 downto 13);
        +
        +
        +begin
        +
        +    -- default output drivers
        +    -- to pass bitgen DRC 
        +    -- outputs used by design are commented
        +    --
        +    ad_conv           <= ad_conv_disable;
        +    amp_cs            <= amp_cs_disable;
        +    amp_shdn          <= '1';
        +    --
        +    dac_clr           <= '0';
        +    dac_cs            <= dac_cs_disable;
        +    --
        +    ds_wire           <= 'Z';
        +    --
        +    e_txd(3 downto 0) <= (others => '1');
        +    e_tx_en           <= '0';
        +    e_tx_er           <= '0';
        +    e_mdc             <= '1';
        +    e_mdio            <= 'Z';
        +    --
        +    fpga_m0           <= 'Z';
        +    fpga_m1           <= 'Z';
        +    fpga_m2           <= 'Z';
        +    fpga_init_b       <= fpga_init_b_disable;
        +    --
        +    fx2_clkin         <= 'Z';
        +    fx2_clkio         <= 'Z';
        +    fx2_clkout        <= 'Z';
        +    fx2_io            <= (others => 'Z');
        +    --
        +    lcd_e             <= '0';
        +    lcd_rs            <= '0';
        +    lcd_rw            <= '0';
        +    --
        +    ps2_clk           <= 'Z';
        +    ps2_data          <= 'Z';
        +    --
        +    --rs232_dce_txd     <= '1';
        +    rs232_dte_txd     <= '1';
        +    --
        +    sd_a              <= (others => '1');
        +    sd_dq             <= (others => 'Z');
        +    sd_ba             <= (others => '1');
        +    sd_ras            <= '0';
        +    sd_cas            <= '0';
        +    sd_we             <= '0';
        +    sd_udm            <= '1';
        +    sd_ldm            <= '1';
        +    sd_udqs           <= '1';
        +    sd_ldqs           <= '1';
        +    sd_cs             <= '1';
        +    sd_cke            <= '1';
        +    sd_ck_n           <= '0';
        +    sd_ck_p           <= '1';
        +    --
        +    sf_a              <= (others => '0');
        +    sf_byte           <= '0';
        +    sf_ce0            <= sf_ce0_lcd_to_fpga;
        +    sf_d              <= (others => 'Z');
        +    sf_oe             <= '1';
        +    sf_we             <= '0';
        +    --
        +    spi_mosi          <= '0';
        +    spi_sck           <= '0';
        +    spi_ss_b          <= spi_ss_b_disable;
        +    spi_alt_cs_jp11   <= spi_ss_b_disable;
        +    --
        +    vga_red           <= '0';
        +    vga_green         <= '0';
        +    vga_blue          <= '0';
        +    vga_hsync         <= '0';
        +    vga_vsync         <= '0';
        +    --
        +    xc_cmd            <= "00";
        +    xc_d              <= (others => 'Z');
        +    xc_cpld_en        <= '0';
        +    xc_gck0           <= 'Z';
        +    gclk10            <= 'Z';
        +    -- led out
        +    --fx2_io(20 downto 13) <= (others => '0');
        +
        +
        +    -- digital clock manager (DCM)
        +    -- to generate higher/other system clock frequencys
        +    dcm_sp_i0 : dcm_sp
        +        generic map (
        +            startup_wait   => true,     -- wait with DONE till locked
        +            clkfx_multiply => clk_multiply,
        +            clkfx_divide   => clk_divide, 
        +            clk_feedback   => "1X"
        +            )
        +        port map (
        +            clkin => clk_50mhz,
        +            clk0  => dcm_sp_i0_clk0,
        +            clkfx => dcm_sp_i0_clkfx,
        +            clkfb => clk_fb
        +            );
        +
        +    clk_fb <= dcm_sp_i0_clk0;
        +    clk    <= dcm_sp_i0_clkfx;
        +
        +
        +    -- reset synchronizer
        +    -- generate synchronous reset
        +    reset_synchronizer : process(clk, rot_center)
        +    begin
        +        if rot_center = '1' then
        +            reset_shift_reg <= (others => '1');
        +        elsif rising_edge(clk) then
        +            reset_shift_reg <= reset_shift_reg(reset_shift_reg'high-1 downto 0) & '0';
        +        end if;
        +    end process;
        +    reset_sync <= reset_shift_reg(reset_shift_reg'high);
        +
        +
        +    -- select instance of zpu
        +    zpu_i0_small : if zpu_flavour = zpu_small generate
        +        zpu_i0 : zpu_small1
        +            generic map (
        +                addr_w    => addr_w_c,
        +                word_size => word_size_c,
        +                clk_freq  => clk_frequency * clk_multiply / clk_divide
        +                )
        +            port map (
        +                clk_i      => clk,             -- : in  std_logic;   -- CPU clock
        +                rst_i      => reset_sync,      -- : in  std_logic;   -- Reset
        +                break_o    => zpu_i0_break,    -- : out std_logic;   -- Break executed
        +                dbg_o      => zpu_i0_dbg,      -- : out zpu_dbgo_t;  -- Debug info
        +                rs232_tx_o => rs232_dce_txd,   -- : out std_logic;   -- UART Tx
        +                rs232_rx_i => rs232_dce_rxd,   -- : in  std_logic    -- UART Rx
        +                gpio_in    => gpio_in,         -- : in  std_logic_vector(31 downto 0);
        +                gpio_out   => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0);
        +                gpio_dir   => zpu_i0_gpio_dir  -- : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +                );
        +    end generate zpu_i0_small;
        +
        +    zpu_i0_medium : if zpu_flavour = zpu_medium generate
        +        zpu_i0 : zpu_med1
        +            generic map (
        +                addr_w    => addr_w_c,
        +                word_size => word_size_c,
        +                clk_freq  => clk_frequency * clk_multiply / clk_divide
        +                )
        +            port map (
        +                clk_i      => clk,             -- : in  std_logic;   -- CPU clock
        +                rst_i      => reset_sync,      -- : in  std_logic;   -- Reset
        +                break_o    => zpu_i0_break,    -- : out std_logic;   -- Break executed
        +                dbg_o      => zpu_i0_dbg,      -- : out zpu_dbgo_t;  -- Debug info
        +                rs232_tx_o => rs232_dce_txd,   -- : out std_logic;   -- UART Tx
        +                rs232_rx_i => rs232_dce_rxd,   -- : in  std_logic    -- UART Rx
        +                gpio_in    => gpio_in,         -- : in  std_logic_vector(31 downto 0);
        +                gpio_out   => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0);
        +                gpio_dir   => zpu_i0_gpio_dir  -- : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +                );
        +    end generate zpu_i0_medium;
        +
        +
        +    -- pragma translate_off 
        +    stop_simulation <= zpu_i0_break;
        +
        +
        +    trace_mod : trace
        +        generic map (
        +            addr_w    => addr_w_c,
        +            word_size => word_size_c,
        +            log_file  => "zpu_trace.log"
        +            )
        +        port map (
        +            clk_i  => clk,
        +            dbg_i  => zpu_i0_dbg,
        +            stop_i => zpu_i0_break,
        +            busy_i => '0'
        +            );
        +    -- pragma translate_on
        +
        +
        +    -- assign GPIOs
        +    -- no bidirectional pins (e.g. headers), so
        +    -- gpio_dir is unused
        +    gpio_in <= ((6) => rot_a,
        +                (5) => rot_b,
        +                (4) => rot_center,
        +                --
        +                (3) => btn_east,
        +                (2) => btn_north,
        +                (1) => btn_south,
        +                (0) => btn_west,
        +                others => '0');
        +
        +
        +    -- switch on all LEDs in case of break
        +    process
        +    begin
        +        wait until rising_edge(clk);
        +        led <= zpu_i0_gpio_out(7 downto 0);
        +        if zpu_i0_break = '1' then
        +            led <= (others => '1');
        +        end if;
        +    end process;
        +
        +    
        +
        +end architecture rtl;
        diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top_tb.vhd b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top_tb.vhd
        index c774e89..d62bed9 100644
        --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top_tb.vhd
        +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top_tb.vhd
        @@ -1,278 +1,281 @@
        --- testbench for Digilent Spartan 3E Starter Board
        ---
        --- includes "model" for clock generation
        --- simulate press on Rotary Pushbutton Switch as reset
        ---
        --- place models for external components (PHY, SDRAM) in this file
        ---
        -
        -
        -library ieee;
        -use ieee.std_logic_1164.all;
        -
        -
        -entity top_tb is
        -end entity top_tb;
        -
        -architecture testbench of top_tb is
        -
        -    ---------------------------
        -    -- constant declarations
        -    constant clk_50mhz_period : time := 1 sec / 50_000_000;  -- 50 MHz
        -
        -
        -    ---------------------------
        -    -- signal declarations
        -    signal simulation_run     : boolean                      := true;
        -    signal tb_stop_simulation : std_logic;
        -    --
        -    -- Analog-to-Digital Converter (ADC)
        -    signal tb_ad_conv         : std_logic;
        -    -- Programmable Gain Amplifier (AMP)
        -    signal tb_amp_cs          : std_logic;  -- active low chip select
        -    signal tb_amp_dout        : std_logic                    := '1';
        -    signal tb_amp_shdn        : std_logic;  -- active high shutdown, reset
        -    -- Pushbuttons (BTN)
        -    signal tb_btn_east        : std_logic                    := '0';
        -    signal tb_btn_north       : std_logic                    := '0';
        -    signal tb_btn_south       : std_logic                    := '0';
        -    signal tb_btn_west        : std_logic                    := '0';
        -    -- Clock inputs (CLK)
        -    signal tb_clk_50mhz       : std_logic                    := '0';
        -    signal tb_clk_aux         : std_logic                    := '0';
        -    signal tb_clk_sma         : std_logic                    := '0';
        -    -- Digital-to-Analog Converter (DAC)
        -    signal tb_dac_clr         : std_logic;  -- async, active low reset input
        -    signal tb_dac_cs          : std_logic;  -- active low chip select, conv start with rising edge
        -    -- 1-Wire Secure EEPROM (DS)
        -    signal tb_ds_wire         : std_logic;
        -    -- Ethernet PHY (E)
        -    signal tb_e_col           : std_logic                    := '0';  -- MII collision detect
        -    signal tb_e_crs           : std_logic                    := '0';  -- carrier sense
        -    signal tb_e_mdc           : std_logic;  -- management clock
        -    signal tb_e_mdio          : std_logic;  -- management data io
        -    signal tb_e_rx_clk        : std_logic                    := '0';  -- receive clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        -    signal tb_e_rx_dv         : std_logic                    := '0';  -- receive data valid
        -    signal tb_e_rxd           : std_logic_vector(3 downto 0) := (others => '0');
        -    signal tb_e_rx_er         : std_logic                    := '0';
        -    signal tb_e_tx_clk        : std_logic                    := '0';  -- transmit clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        -    signal tb_e_tx_en         : std_logic;  -- transmit enable
        -    signal tb_e_txd           : std_logic_vector(3 downto 0);
        -    signal tb_e_tx_er         : std_logic;
        -    -- FPGA Configuration Mode, INIT_B Pins (FPGA)
        -    signal tb_fpga_m0         : std_logic;
        -    signal tb_fpga_m1         : std_logic;
        -    signal tb_fpga_m2         : std_logic;
        -    signal tb_fpga_init_b     : std_logic;
        -    signal tb_fpga_rdwr_b     : std_logic                    := '0';
        -    signal tb_fpga_hswap      : std_logic                    := '0';
        -    -- FX2 Connector (FX2)
        -    signal tb_fx2_clkin       : std_logic;
        -    signal tb_fx2_clkio       : std_logic;
        -    signal tb_fx2_clkout      : std_logic;
        -    signal tb_fx2_io          : std_logic_vector(40 downto 1);
        -    -- Character LCD (LCD)
        -    signal tb_lcd_e           : std_logic;
        -    signal tb_lcd_rs          : std_logic;
        -    signal tb_lcd_rw          : std_logic;
        -    -- LCD data connections are shared with StrataFlash connections SF_D<11:8>
        -    -- PS/2 Mouse/Keyboard Port (PS2)
        -    signal tb_ps2_clk         : std_logic;
        -    signal tb_ps2_data        : std_logic;
        -    -- Rotary Pushbutton Switch (ROT)
        -    signal tb_rot_a           : std_logic                    := '0';
        -    signal tb_rot_b           : std_logic                    := '0';
        -    signal tb_rot_center      : std_logic;  -- use as reset
        -    -- RS-232 Serial Ports (RS232)
        -    signal tb_rs232_dce_rxd   : std_logic                    := '1';
        -    signal tb_rs232_dce_txd   : std_logic;
        -    signal tb_rs232_dte_rxd   : std_logic                    := '1';
        -    signal tb_rs232_dte_txd   : std_logic;
        -    -- DDR SDRAM (SD) (I/O Bank 3, VCCO=2.5V)
        -    signal tb_sd_a            : std_logic_vector(12 downto 0);  -- address inputs
        -    signal tb_sd_dq           : std_logic_vector(15 downto 0);  -- data io
        -    signal tb_sd_ba           : std_logic_vector(1 downto 0);  -- bank address inputs
        -    signal tb_sd_ras          : std_logic;  -- command output
        -    signal tb_sd_cas          : std_logic;  -- command output
        -    signal tb_sd_we           : std_logic;  -- command output 
        -    signal tb_sd_udm          : std_logic;  -- data mask
        -    signal tb_sd_ldm          : std_logic;  -- data mask
        -    signal tb_sd_udqs         : std_logic;  -- data strobe
        -    signal tb_sd_ldqs         : std_logic;  -- data strobe
        -    signal tb_sd_cs           : std_logic;  -- active low chip select
        -    signal tb_sd_cke          : std_logic;  -- active high clock enable
        -    signal tb_sd_ck_n         : std_logic;  -- differential clock
        -    signal tb_sd_ck_p         : std_logic;  -- differential clock
        -    -- Path to allow connection to top DCM connection
        -    signal tb_sd_ck_fb        : std_logic;
        -    -- Intel StrataFlash Parallel NOR Flash (SF)
        -    signal tb_sf_a            : std_logic_vector(23 downto 0);  -- sf_a<24> = fx_io32 :-(
        -    signal tb_sf_byte         : std_logic;
        -    signal tb_sf_ce0          : std_logic;
        -    signal tb_sf_d            : std_logic_vector(15 downto 1);
        -    signal tb_sf_oe           : std_logic;
        -    signal tb_sf_sts          : std_logic                    := '0';
        -    signal tb_sf_we           : std_logic;
        -    -- STMicro SPI serial Flash (SPI)
        -    signal tb_spi_mosi        : std_logic;  -- master out slave in
        -    signal tb_spi_miso        : std_logic                    := '0';  -- master in  slave out
        -    signal tb_spi_sck         : std_logic;  -- clock
        -    signal tb_spi_ss_b        : std_logic;  -- active low slave select
        -    signal tb_spi_alt_cs_jp11 : std_logic;
        -    -- Slide Switches (SW)
        -    signal tb_sw              : std_logic_vector(3 downto 0) := (others => '0');
        -    -- VGA Port (VGA)
        -    signal tb_vga_blue        : std_logic;
        -    signal tb_vga_green       : std_logic;
        -    signal tb_vga_hsync       : std_logic;
        -    signal tb_vga_red         : std_logic;
        -    signal tb_vga_vsync       : std_logic;
        -    -- Xilinx CPLD (XC)
        -    signal tb_xc_cmd          : std_logic_vector(1 downto 0);
        -    signal tb_xc_cpld_en      : std_logic;
        -    signal tb_xc_d            : std_logic_vector(2 downto 0);
        -    signal tb_xc_trig         : std_logic                    := '0';
        -    signal tb_xc_gck0         : std_logic;
        -    signal tb_gclk10          : std_logic;
        -
        -
        -begin
        -
        -
        -    -- generate clock
        -    tb_clk_50mhz <= not tb_clk_50mhz after clk_50mhz_period / 2 when simulation_run;
        -
        -    -- generate reset
        -    tb_rot_center <= '1', '0' after 6.66 * clk_50mhz_period;
        -
        -
        -    -- clock feedback for SD-RAM (on board)
        -    tb_sd_ck_fb <= tb_sd_ck_p;
        -
        -
        -    -- dut
        -    top_i0 : entity work.top
        -        port map (
        -            stop_simulation => tb_stop_simulation,  -- : out   std_logic;
        -            -- Analog-to-Digital Converter (ADC)
        -            ad_conv         => tb_ad_conv,          -- : out   std_logic;
        -            -- Programmable Gain Amplifier (AMP)
        -            amp_cs          => tb_amp_cs,           -- : out   std_logic;
        -            amp_dout        => tb_amp_dout,         -- : in    std_logic;
        -            amp_shdn        => tb_amp_shdn,         -- : out   std_logic;
        -            -- Pushbuttons (BTN)
        -            btn_east        => tb_btn_east,         -- : in    std_logic;
        -            btn_north       => tb_btn_north,        -- : in    std_logic;
        -            btn_south       => tb_btn_south,        -- : in    std_logic;
        -            btn_west        => tb_btn_west,         -- : in    std_logic;
        -            -- Clock inputs (CLK)
        -            clk_50mhz       => tb_clk_50mhz,        -- : in    std_logic;
        -            clk_aux         => tb_clk_aux,          -- : in    std_logic;
        -            clk_sma         => tb_clk_sma,          -- : in    std_logic;
        -            -- Digital-to-Analog Converter (DAC)
        -            dac_clr         => tb_dac_clr,          -- : out   std_logic;
        -            dac_cs          => tb_dac_cs,           -- : out   std_logic;
        -            -- 1-Wire Secure EEPROM (DS)
        -            ds_wire         => tb_ds_wire,          -- : inout std_logic;
        -            -- Ethernet PHY (E)
        -            e_col           => tb_e_col,            -- : in    std_logic;
        -            e_crs           => tb_e_crs,            -- : in    std_logic;
        -            e_mdc           => tb_e_mdc,            -- : out   std_logic;
        -            e_mdio          => tb_e_mdio,           -- : inout std_logic;
        -            e_rx_clk        => tb_e_rx_clk,         -- : in    std_logic;
        -            e_rx_dv         => tb_e_rx_dv,          -- : in    std_logic;
        -            e_rxd           => tb_e_rxd,            -- : in    std_logic_vector(3 downto 0);
        -            e_rx_er         => tb_e_rx_er,          -- : in    std_logic;
        -            e_tx_clk        => tb_e_tx_clk,         -- : in    std_logic;
        -            e_tx_en         => tb_e_tx_en,          -- : out   std_logic;
        -            e_txd           => tb_e_txd,            -- : out   std_logic_vector(3 downto 0);
        -            e_tx_er         => tb_e_tx_er,          -- : out   std_logic;
        -            -- FPGA Configuration Mode, INIT_B Pins (FPGA)
        -            fpga_m0         => tb_fpga_m0,          -- : inout std_logic;
        -            fpga_m1         => tb_fpga_m1,          -- : inout std_logic;
        -            fpga_m2         => tb_fpga_m2,          -- : inout std_logic;
        -            fpga_init_b     => tb_fpga_init_b,      -- : inout std_logic;
        -            fpga_rdwr_b     => tb_fpga_rdwr_b,      -- : in    std_logic;
        -            fpga_hswap      => tb_fpga_hswap,       -- : in    std_logic;
        -            -- FX2 Connector (FX2)
        -            fx2_clkin       => tb_fx2_clkin,        -- : inout std_logic;
        -            fx2_clkio       => tb_fx2_clkio,        -- : inout std_logic;
        -            fx2_clkout      => tb_fx2_clkout,       -- : inout std_logic;
        -            fx2_io          => tb_fx2_io,           -- : inout std_logic_vector(40 downto 1);
        -            -- Character LCD (LCD)
        -            lcd_e           => tb_lcd_e,            -- : out   std_logic;
        -            lcd_rs          => tb_lcd_rs,           -- : out   std_logic;
        -            lcd_rw          => tb_lcd_rw,           -- : out   std_logic;
        -            -- LCD data connections are shared with StrataFlash connections SF_D<11:8>
        -            -- PS/2 Mouse/Keyboard Port (PS2)
        -            ps2_clk         => tb_ps2_clk,          -- : inout std_logic;
        -            ps2_data        => tb_ps2_data,         -- : inout std_logic;
        -            -- Rotary Pushbutton Switch (ROT)
        -            rot_a           => tb_rot_a,            -- : in    std_logic;
        -            rot_b           => tb_rot_b,            -- : in    std_logic;
        -            rot_center      => tb_rot_center,       -- : in    std_logic;
        -            -- RS-232 Serial Ports (RS232)
        -            rs232_dce_rxd   => tb_rs232_dce_rxd,    -- : in    std_logic;
        -            rs232_dce_txd   => tb_rs232_dce_txd,    -- : out   std_logic;
        -            rs232_dte_rxd   => tb_rs232_dte_rxd,    -- : in    std_logic;
        -            rs232_dte_txd   => tb_rs232_dte_txd,    -- : out   std_logic;
        -            -- DDR SDRAM (SD) (I/O Bank 3, VCCO=2.5V)
        -            sd_a            => tb_sd_a,             -- : out   std_logic_vector(12 downto 0);
        -            sd_dq           => tb_sd_dq,            -- : inout std_logic_vector(15 downto 0);
        -            sd_ba           => tb_sd_ba,            -- : out   std_logic_vector(1 downto 0);
        -            sd_ras          => tb_sd_ras,           -- : out   std_logic;
        -            sd_cas          => tb_sd_cas,           -- : out   std_logic;
        -            sd_we           => tb_sd_we,            -- : out   std_logic;
        -            sd_udm          => tb_sd_udm,           -- : out   std_logic;
        -            sd_ldm          => tb_sd_ldm,           -- : out   std_logic;
        -            sd_udqs         => tb_sd_udqs,          -- : inout std_logic;
        -            sd_ldqs         => tb_sd_ldqs,          -- : inout std_logic;
        -            sd_cs           => tb_sd_cs,            -- : out   std_logic;
        -            sd_cke          => tb_sd_cke,           -- : out   std_logic;
        -            sd_ck_n         => tb_sd_ck_n,          -- : out   std_logic;
        -            sd_ck_p         => tb_sd_ck_p,          -- : out   std_logic;
        -            -- Path to allow connection to top DCM connection
        -            sd_ck_fb        => tb_sd_ck_fb,         -- : in    std_logic;
        -            -- Intel StrataFlash Parallel NOR Flash (SF)
        -            sf_a            => tb_sf_a,             -- : out   std_logic_vector(23 downto 0);
        -            sf_byte         => tb_sf_byte,          -- : out   std_logic;
        -            sf_ce0          => tb_sf_ce0,           -- : out   std_logic;
        -            sf_d            => tb_sf_d,             -- : inout std_logic_vector(15 downto 1);
        -            sf_oe           => tb_sf_oe,            -- : out   std_logic;
        -            sf_sts          => tb_sf_sts,           -- : in    std_logic;
        -            sf_we           => tb_sf_we,            -- : out   std_logic;
        -            -- STMicro SPI serial Flash (SPI)
        -            spi_mosi        => tb_spi_mosi,         -- : out   std_logic;
        -            spi_miso        => tb_spi_miso,         -- : in    std_logic;
        -            spi_sck         => tb_spi_sck,          -- : out   std_logic;
        -            spi_ss_b        => tb_spi_ss_b,         -- : out   std_logic;
        -            spi_alt_cs_jp11 => tb_spi_alt_cs_jp11,  -- : out   std_logic;
        -            -- Slide Switches (SW)
        -            sw              => tb_sw,               -- : in    std_logic_vector(3 downto 0);
        -            -- VGA Port (VGA)
        -            vga_blue        => tb_vga_blue,         -- : out   std_logic;
        -            vga_green       => tb_vga_green,        -- : out   std_logic;
        -            vga_hsync       => tb_vga_hsync,        -- : out   std_logic;
        -            vga_red         => tb_vga_red,          -- : out   std_logic;
        -            vga_vsync       => tb_vga_vsync,        -- : out   std_logic;
        -            -- Xilinx CPLD (XC)
        -            xc_cmd          => tb_xc_cmd,           -- : out   std_logic_vector(1 downto 0);
        -            xc_cpld_en      => tb_xc_cpld_en,       -- : out   std_logic;
        -            xc_d            => tb_xc_d,             -- : inout std_logic_vector(2 downto 0);
        -            xc_trig         => tb_xc_trig,          -- : in    std_logic;
        -            xc_gck0         => tb_xc_gck0,          -- : inout std_logic;
        -            gclk10          => tb_gclk10            -- : inout std_logic
        -            );
        -
        -
        -    -- check for simulation stopping
        -    process (tb_stop_simulation)
        -    begin
        -        if tb_stop_simulation = '1' then
        -            report "Simulation end." severity note;
        -            simulation_run <= false;
        -        end if;
        -    end process;
        -
        -
        -end architecture testbench;
        +-- testbench for
        +-- Digilent Spartan 3E Starter Board
        +--
        +-- includes "model" for clock generation
        +-- simulate press on Rotary Pushbutton Switch as reset
        +--
        +-- place models for external components (PHY, SDRAM) in this file
        +--
        +
        +
        +library ieee;
        +use ieee.std_logic_1164.all;
        +
        +
        +entity top_tb is
        +end entity top_tb;
        +
        +architecture testbench of top_tb is
        +
        +    ---------------------------
        +    -- constant declarations
        +    constant clk_50mhz_period : time := 1 sec / 50_000_000;  -- 50 MHz
        +
        +
        +    ---------------------------
        +    -- signal declarations
        +    signal simulation_run     : boolean                      := true;
        +    signal tb_stop_simulation : std_logic;
        +    --
        +    -- Analog-to-Digital Converter (ADC)
        +    signal tb_ad_conv         : std_logic;
        +    -- Programmable Gain Amplifier (AMP)
        +    signal tb_amp_cs          : std_logic;  -- active low chip select
        +    signal tb_amp_dout        : std_logic                    := '1';
        +    signal tb_amp_shdn        : std_logic;  -- active high shutdown, reset
        +    -- Pushbuttons (BTN)
        +    signal tb_btn_east        : std_logic                    := '0';
        +    signal tb_btn_north       : std_logic                    := '0';
        +    signal tb_btn_south       : std_logic                    := '0';
        +    signal tb_btn_west        : std_logic                    := '0';
        +    -- Clock inputs (CLK)
        +    signal tb_clk_50mhz       : std_logic                    := '0';
        +    signal tb_clk_aux         : std_logic                    := '0';
        +    signal tb_clk_sma         : std_logic                    := '0';
        +    -- Digital-to-Analog Converter (DAC)
        +    signal tb_dac_clr         : std_logic;  -- async, active low reset input
        +    signal tb_dac_cs          : std_logic;  -- active low chip select, conv start with rising edge
        +    -- 1-Wire Secure EEPROM (DS)
        +    signal tb_ds_wire         : std_logic;
        +    -- Ethernet PHY (E)
        +    signal tb_e_col           : std_logic                    := '0';  -- MII collision detect
        +    signal tb_e_crs           : std_logic                    := '0';  -- carrier sense
        +    signal tb_e_mdc           : std_logic;  -- management clock
        +    signal tb_e_mdio          : std_logic;  -- management data io
        +    signal tb_e_rx_clk        : std_logic                    := '0';  -- receive clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        +    signal tb_e_rx_dv         : std_logic                    := '0';  -- receive data valid
        +    signal tb_e_rxd           : std_logic_vector(3 downto 0) := (others => '0');
        +    signal tb_e_rx_er         : std_logic                    := '0';
        +    signal tb_e_tx_clk        : std_logic                    := '0';  -- transmit clock 25MHz@100BaseTx or 2.5MHz@10Base-T
        +    signal tb_e_tx_en         : std_logic;  -- transmit enable
        +    signal tb_e_txd           : std_logic_vector(3 downto 0);
        +    signal tb_e_tx_er         : std_logic;
        +    -- FPGA Configuration Mode, INIT_B Pins (FPGA)
        +    signal tb_fpga_m0         : std_logic;
        +    signal tb_fpga_m1         : std_logic;
        +    signal tb_fpga_m2         : std_logic;
        +    signal tb_fpga_init_b     : std_logic;
        +    signal tb_fpga_rdwr_b     : std_logic                    := '0';
        +    signal tb_fpga_hswap      : std_logic                    := '0';
        +    -- FX2 Connector (FX2)
        +    signal tb_fx2_clkin       : std_logic;
        +    signal tb_fx2_clkio       : std_logic;
        +    signal tb_fx2_clkout      : std_logic;
        +    signal tb_fx2_io          : std_logic_vector(40 downto 1);
        +    -- Character LCD (LCD)
        +    signal tb_lcd_e           : std_logic;
        +    signal tb_lcd_rs          : std_logic;
        +    signal tb_lcd_rw          : std_logic;
        +    -- LCD data connections are shared with StrataFlash connections SF_D<11:8>
        +    -- PS/2 Mouse/Keyboard Port (PS2)
        +    signal tb_ps2_clk         : std_logic;
        +    signal tb_ps2_data        : std_logic;
        +    -- Rotary Pushbutton Switch (ROT)
        +    signal tb_rot_a           : std_logic                    := '0';
        +    signal tb_rot_b           : std_logic                    := '0';
        +    signal tb_rot_center      : std_logic;  -- use as reset
        +    -- RS-232 Serial Ports (RS232)
        +    signal tb_rs232_dce_rxd   : std_logic                    := '1';
        +    signal tb_rs232_dce_txd   : std_logic;
        +    signal tb_rs232_dte_rxd   : std_logic                    := '1';
        +    signal tb_rs232_dte_txd   : std_logic;
        +    -- DDR SDRAM (SD) (I/O Bank 3, VCCO=2.5V)
        +    signal tb_sd_a            : std_logic_vector(12 downto 0);  -- address inputs
        +    signal tb_sd_dq           : std_logic_vector(15 downto 0);  -- data io
        +    signal tb_sd_ba           : std_logic_vector(1 downto 0);  -- bank address inputs
        +    signal tb_sd_ras          : std_logic;  -- command output
        +    signal tb_sd_cas          : std_logic;  -- command output
        +    signal tb_sd_we           : std_logic;  -- command output 
        +    signal tb_sd_udm          : std_logic;  -- data mask
        +    signal tb_sd_ldm          : std_logic;  -- data mask
        +    signal tb_sd_udqs         : std_logic;  -- data strobe
        +    signal tb_sd_ldqs         : std_logic;  -- data strobe
        +    signal tb_sd_cs           : std_logic;  -- active low chip select
        +    signal tb_sd_cke          : std_logic;  -- active high clock enable
        +    signal tb_sd_ck_n         : std_logic;  -- differential clock
        +    signal tb_sd_ck_p         : std_logic;  -- differential clock
        +    -- Path to allow connection to top DCM connection
        +    signal tb_sd_ck_fb        : std_logic;
        +    -- Intel StrataFlash Parallel NOR Flash (SF)
        +    signal tb_sf_a            : std_logic_vector(23 downto 0);  -- sf_a<24> = fx_io32 :-(
        +    signal tb_sf_byte         : std_logic;
        +    signal tb_sf_ce0          : std_logic;
        +    signal tb_sf_d            : std_logic_vector(15 downto 1);
        +    signal tb_sf_oe           : std_logic;
        +    signal tb_sf_sts          : std_logic                    := '0';
        +    signal tb_sf_we           : std_logic;
        +    -- STMicro SPI serial Flash (SPI)
        +    signal tb_spi_mosi        : std_logic;  -- master out slave in
        +    signal tb_spi_miso        : std_logic                    := '0';  -- master in  slave out
        +    signal tb_spi_sck         : std_logic;  -- clock
        +    signal tb_spi_ss_b        : std_logic;  -- active low slave select
        +    signal tb_spi_alt_cs_jp11 : std_logic;
        +    -- Slide Switches (SW)
        +    signal tb_sw              : std_logic_vector(3 downto 0) := (others => '0');
        +    -- VGA Port (VGA)
        +    signal tb_vga_blue        : std_logic;
        +    signal tb_vga_green       : std_logic;
        +    signal tb_vga_hsync       : std_logic;
        +    signal tb_vga_red         : std_logic;
        +    signal tb_vga_vsync       : std_logic;
        +    -- Xilinx CPLD (XC)
        +    signal tb_xc_cmd          : std_logic_vector(1 downto 0);
        +    signal tb_xc_cpld_en      : std_logic;
        +    signal tb_xc_d            : std_logic_vector(2 downto 0);
        +    signal tb_xc_trig         : std_logic                    := '0';
        +    signal tb_xc_gck0         : std_logic;
        +    signal tb_gclk10          : std_logic;
        +
        +
        +begin
        +
        +
        +    -- generate clock
        +    tb_clk_50mhz <= not tb_clk_50mhz after clk_50mhz_period / 2 when simulation_run;
        +
        +    -- generate reset
        +    tb_rot_center <= '1', '0' after 6.66 * clk_50mhz_period;
        +
        +
        +    -- clock feedback for SD-RAM (on board)
        +    tb_sd_ck_fb <= tb_sd_ck_p;
        +
        +    -- simulate keypress
        +    tb_btn_north <= '0', '1' after 55 us, '0' after 56 us;
        +
        +    -- dut
        +    top_i0 : entity work.top
        +        port map (
        +            stop_simulation => tb_stop_simulation,  -- : out   std_logic;
        +            -- Analog-to-Digital Converter (ADC)
        +            ad_conv         => tb_ad_conv,          -- : out   std_logic;
        +            -- Programmable Gain Amplifier (AMP)
        +            amp_cs          => tb_amp_cs,           -- : out   std_logic;
        +            amp_dout        => tb_amp_dout,         -- : in    std_logic;
        +            amp_shdn        => tb_amp_shdn,         -- : out   std_logic;
        +            -- Pushbuttons (BTN)
        +            btn_east        => tb_btn_east,         -- : in    std_logic;
        +            btn_north       => tb_btn_north,        -- : in    std_logic;
        +            btn_south       => tb_btn_south,        -- : in    std_logic;
        +            btn_west        => tb_btn_west,         -- : in    std_logic;
        +            -- Clock inputs (CLK)
        +            clk_50mhz       => tb_clk_50mhz,        -- : in    std_logic;
        +            clk_aux         => tb_clk_aux,          -- : in    std_logic;
        +            clk_sma         => tb_clk_sma,          -- : in    std_logic;
        +            -- Digital-to-Analog Converter (DAC)
        +            dac_clr         => tb_dac_clr,          -- : out   std_logic;
        +            dac_cs          => tb_dac_cs,           -- : out   std_logic;
        +            -- 1-Wire Secure EEPROM (DS)
        +            ds_wire         => tb_ds_wire,          -- : inout std_logic;
        +            -- Ethernet PHY (E)
        +            e_col           => tb_e_col,            -- : in    std_logic;
        +            e_crs           => tb_e_crs,            -- : in    std_logic;
        +            e_mdc           => tb_e_mdc,            -- : out   std_logic;
        +            e_mdio          => tb_e_mdio,           -- : inout std_logic;
        +            e_rx_clk        => tb_e_rx_clk,         -- : in    std_logic;
        +            e_rx_dv         => tb_e_rx_dv,          -- : in    std_logic;
        +            e_rxd           => tb_e_rxd,            -- : in    std_logic_vector(3 downto 0);
        +            e_rx_er         => tb_e_rx_er,          -- : in    std_logic;
        +            e_tx_clk        => tb_e_tx_clk,         -- : in    std_logic;
        +            e_tx_en         => tb_e_tx_en,          -- : out   std_logic;
        +            e_txd           => tb_e_txd,            -- : out   std_logic_vector(3 downto 0);
        +            e_tx_er         => tb_e_tx_er,          -- : out   std_logic;
        +            -- FPGA Configuration Mode, INIT_B Pins (FPGA)
        +            fpga_m0         => tb_fpga_m0,          -- : inout std_logic;
        +            fpga_m1         => tb_fpga_m1,          -- : inout std_logic;
        +            fpga_m2         => tb_fpga_m2,          -- : inout std_logic;
        +            fpga_init_b     => tb_fpga_init_b,      -- : inout std_logic;
        +            fpga_rdwr_b     => tb_fpga_rdwr_b,      -- : in    std_logic;
        +            fpga_hswap      => tb_fpga_hswap,       -- : in    std_logic;
        +            -- FX2 Connector (FX2)
        +            fx2_clkin       => tb_fx2_clkin,        -- : inout std_logic;
        +            fx2_clkio       => tb_fx2_clkio,        -- : inout std_logic;
        +            fx2_clkout      => tb_fx2_clkout,       -- : inout std_logic;
        +            fx2_io          => tb_fx2_io,           -- : inout std_logic_vector(40 downto 1);
        +            -- Character LCD (LCD)
        +            lcd_e           => tb_lcd_e,            -- : out   std_logic;
        +            lcd_rs          => tb_lcd_rs,           -- : out   std_logic;
        +            lcd_rw          => tb_lcd_rw,           -- : out   std_logic;
        +            -- LCD data connections are shared with StrataFlash connections SF_D<11:8>
        +            -- PS/2 Mouse/Keyboard Port (PS2)
        +            ps2_clk         => tb_ps2_clk,          -- : inout std_logic;
        +            ps2_data        => tb_ps2_data,         -- : inout std_logic;
        +            -- Rotary Pushbutton Switch (ROT)
        +            rot_a           => tb_rot_a,            -- : in    std_logic;
        +            rot_b           => tb_rot_b,            -- : in    std_logic;
        +            rot_center      => tb_rot_center,       -- : in    std_logic;
        +            -- RS-232 Serial Ports (RS232)
        +            rs232_dce_rxd   => tb_rs232_dce_rxd,    -- : in    std_logic;
        +            rs232_dce_txd   => tb_rs232_dce_txd,    -- : out   std_logic;
        +            rs232_dte_rxd   => tb_rs232_dte_rxd,    -- : in    std_logic;
        +            rs232_dte_txd   => tb_rs232_dte_txd,    -- : out   std_logic;
        +            -- DDR SDRAM (SD) (I/O Bank 3, VCCO=2.5V)
        +            sd_a            => tb_sd_a,             -- : out   std_logic_vector(12 downto 0);
        +            sd_dq           => tb_sd_dq,            -- : inout std_logic_vector(15 downto 0);
        +            sd_ba           => tb_sd_ba,            -- : out   std_logic_vector(1 downto 0);
        +            sd_ras          => tb_sd_ras,           -- : out   std_logic;
        +            sd_cas          => tb_sd_cas,           -- : out   std_logic;
        +            sd_we           => tb_sd_we,            -- : out   std_logic;
        +            sd_udm          => tb_sd_udm,           -- : out   std_logic;
        +            sd_ldm          => tb_sd_ldm,           -- : out   std_logic;
        +            sd_udqs         => tb_sd_udqs,          -- : inout std_logic;
        +            sd_ldqs         => tb_sd_ldqs,          -- : inout std_logic;
        +            sd_cs           => tb_sd_cs,            -- : out   std_logic;
        +            sd_cke          => tb_sd_cke,           -- : out   std_logic;
        +            sd_ck_n         => tb_sd_ck_n,          -- : out   std_logic;
        +            sd_ck_p         => tb_sd_ck_p,          -- : out   std_logic;
        +            -- Path to allow connection to top DCM connection
        +            sd_ck_fb        => tb_sd_ck_fb,         -- : in    std_logic;
        +            -- Intel StrataFlash Parallel NOR Flash (SF)
        +            sf_a            => tb_sf_a,             -- : out   std_logic_vector(23 downto 0);
        +            sf_byte         => tb_sf_byte,          -- : out   std_logic;
        +            sf_ce0          => tb_sf_ce0,           -- : out   std_logic;
        +            sf_d            => tb_sf_d,             -- : inout std_logic_vector(15 downto 1);
        +            sf_oe           => tb_sf_oe,            -- : out   std_logic;
        +            sf_sts          => tb_sf_sts,           -- : in    std_logic;
        +            sf_we           => tb_sf_we,            -- : out   std_logic;
        +            -- STMicro SPI serial Flash (SPI)
        +            spi_mosi        => tb_spi_mosi,         -- : out   std_logic;
        +            spi_miso        => tb_spi_miso,         -- : in    std_logic;
        +            spi_sck         => tb_spi_sck,          -- : out   std_logic;
        +            spi_ss_b        => tb_spi_ss_b,         -- : out   std_logic;
        +            spi_alt_cs_jp11 => tb_spi_alt_cs_jp11,  -- : out   std_logic;
        +            -- Slide Switches (SW)
        +            sw              => tb_sw,               -- : in    std_logic_vector(3 downto 0);
        +            -- VGA Port (VGA)
        +            vga_blue        => tb_vga_blue,         -- : out   std_logic;
        +            vga_green       => tb_vga_green,        -- : out   std_logic;
        +            vga_hsync       => tb_vga_hsync,        -- : out   std_logic;
        +            vga_red         => tb_vga_red,          -- : out   std_logic;
        +            vga_vsync       => tb_vga_vsync,        -- : out   std_logic;
        +            -- Xilinx CPLD (XC)
        +            xc_cmd          => tb_xc_cmd,           -- : out   std_logic_vector(1 downto 0);
        +            xc_cpld_en      => tb_xc_cpld_en,       -- : out   std_logic;
        +            xc_d            => tb_xc_d,             -- : inout std_logic_vector(2 downto 0);
        +            xc_trig         => tb_xc_trig,          -- : in    std_logic;
        +            xc_gck0         => tb_xc_gck0,          -- : inout std_logic;
        +            gclk10          => tb_gclk10            -- : inout std_logic
        +            );
        +
        +
        +    -- check for simulation stopping
        +    process (tb_stop_simulation)
        +    begin
        +        if tb_stop_simulation = '1' then
        +            report "Simulation end." severity note;
        +            simulation_run <= false;
        +        end if;
        +    end process;
        +
        +
        +end architecture testbench;
        diff --git a/zpu/hdl/zealot/fpga/dmips_med1.vhdl b/zpu/hdl/zealot/fpga/dmips_med1.vhdl
        index 9920c2c..b95016c 100644
        --- a/zpu/hdl/zealot/fpga/dmips_med1.vhdl
        +++ b/zpu/hdl/zealot/fpga/dmips_med1.vhdl
        @@ -100,7 +100,11 @@ architecture FPGA of DMIPS_Med1 is
                  break_o    : out std_logic;  -- Break executed
                  dbg_o      : out zpu_dbgo_t; -- Debug info
                  rs232_tx_o : out std_logic;  -- UART Tx
        -         rs232_rx_i : in  std_logic); -- UART Rx
        +         rs232_rx_i : in  std_logic;  -- UART Rx
        +         gpio_in    : in  std_logic_vector(31 downto 0);
        +         gpio_out   : out std_logic_vector(31 downto 0);
        +         gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +         );
            end component ZPU_Med1;
         begin
            zpu : ZPU_Med1
        @@ -110,6 +114,6 @@ begin
                  BRAM_W => BRAM_W)
               port map(
                  clk_i => clk_i, rst_i => rst_i, rs232_tx_o => rs232_tx_o,
        -         rs232_rx_i => rs232_rx_i, dbg_o => open);
        +         rs232_rx_i => rs232_rx_i, dbg_o => open, gpio_in => (others => '0'));
         end architecture FPGA; -- Entity: DMIPS_Med1
         
        diff --git a/zpu/hdl/zealot/fpga/dmips_small1.vhdl b/zpu/hdl/zealot/fpga/dmips_small1.vhdl
        index 018ab2d..6edec00 100644
        --- a/zpu/hdl/zealot/fpga/dmips_small1.vhdl
        +++ b/zpu/hdl/zealot/fpga/dmips_small1.vhdl
        @@ -101,7 +101,11 @@ architecture FPGA of DMIPS_Small1 is
                  break_o    : out std_logic;  -- Break executed
                  dbg_o      : out zpu_dbgo_t; -- Debug info
                  rs232_tx_o : out std_logic;  -- UART Tx
        -         rs232_rx_i : in  std_logic); -- UART Rx
        +         rs232_rx_i : in  std_logic;  -- UART Rx
        +         gpio_in    : in  std_logic_vector(31 downto 0);
        +         gpio_out   : out std_logic_vector(31 downto 0);
        +         gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +         );
            end component ZPU_Small1;
         begin
            zpu : ZPU_Small1
        @@ -111,6 +115,6 @@ begin
                  BRAM_W => BRAM_W)
               port map(
                  clk_i => clk_i, rst_i => rst_i, rs232_tx_o => rs232_tx_o,
        -         rs232_rx_i => rs232_rx_i, dbg_o => open);
        +         rs232_rx_i => rs232_rx_i, dbg_o => open, gpio_in => (others => '0'));
         end architecture FPGA; -- Entity: DMIPS_Small1
         
        diff --git a/zpu/hdl/zealot/fpga/hello_med1.vhdl b/zpu/hdl/zealot/fpga/hello_med1.vhdl
        index 7356c72..5ffea1f 100644
        --- a/zpu/hdl/zealot/fpga/hello_med1.vhdl
        +++ b/zpu/hdl/zealot/fpga/hello_med1.vhdl
        @@ -100,7 +100,11 @@ architecture FPGA of Hello_Med1 is
                  break_o    : out std_logic;  -- Break executed
                  dbg_o      : out zpu_dbgo_t; -- Debug info
                  rs232_tx_o : out std_logic;  -- UART Tx
        -         rs232_rx_i : in  std_logic); -- UART Rx
        +         rs232_rx_i : in  std_logic;  -- UART Rx
        +         gpio_in    : in  std_logic_vector(31 downto 0);
        +         gpio_out   : out std_logic_vector(31 downto 0);
        +         gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +         );
            end component ZPU_Med1;
         begin
            zpu : ZPU_Med1
        @@ -110,6 +114,6 @@ begin
                  BRAM_W => BRAM_W)
               port map(
                  clk_i => clk_i, rst_i => rst_i, rs232_tx_o => rs232_tx_o,
        -         rs232_rx_i => rs232_rx_i, dbg_o => open);
        +         rs232_rx_i => rs232_rx_i, dbg_o => open, gpio_in => (others => '0'));
         end architecture FPGA; -- Entity: Hello_Med1
         
        diff --git a/zpu/hdl/zealot/fpga/hello_small1.vhdl b/zpu/hdl/zealot/fpga/hello_small1.vhdl
        index ccd87c5..a7e2c21 100644
        --- a/zpu/hdl/zealot/fpga/hello_small1.vhdl
        +++ b/zpu/hdl/zealot/fpga/hello_small1.vhdl
        @@ -101,7 +101,11 @@ architecture FPGA of Hello_Small1 is
                  break_o    : out std_logic;  -- Break executed
                  dbg_o      : out zpu_dbgo_t; -- Debug info
                  rs232_tx_o : out std_logic;  -- UART Tx
        -         rs232_rx_i : in  std_logic); -- UART Rx
        +         rs232_rx_i : in  std_logic;  -- UART Rx
        +         gpio_in    : in  std_logic_vector(31 downto 0);
        +         gpio_out   : out std_logic_vector(31 downto 0);
        +         gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +         );
            end component ZPU_Small1;
         begin
            zpu : ZPU_Small1
        @@ -111,6 +115,6 @@ begin
                  BRAM_W => BRAM_W)
               port map(
                  clk_i => clk_i, rst_i => rst_i, rs232_tx_o => rs232_tx_o,
        -         rs232_rx_i => rs232_rx_i, dbg_o => open);
        +         rs232_rx_i => rs232_rx_i, dbg_o => open, gpio_in => (others => '0'));
         end architecture FPGA; -- Entity: Hello_Small1
         
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation.sh b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation.sh
        index febf588..d525737 100755
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation.sh
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation.sh
        @@ -28,6 +28,7 @@ vcom -work zpu ../../helpers/zpu_med1.vhdl
         vcom -work zpu ../../devices/txt_util.vhdl
         vcom -work zpu ../../devices/phi_io.vhdl
         vcom -work zpu ../../devices/timer.vhdl
        +vcom -work zpu ../../devices/gpio.vhdl
         vcom -work zpu ../../devices/rx_unit.vhdl
         vcom -work zpu ../../devices/tx_unit.vhdl
         vcom -work zpu ../../devices/br_gen.vhdl
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation_config/run.do b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation_config/run.do
        index acc1710..0d29e0a 100644
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation_config/run.do
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/simulation_config/run.do
        @@ -1,2 +1,2 @@
        -do wave.do
        -run -all
        +do wave.do
        +run -all
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.prj b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.prj
        index 81d56ef..965ae4c 100644
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.prj
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.prj
        @@ -1,18 +1,19 @@
        -vhdl work ../top.vhd
        -vhdl zpu ../../../zpu_pkg.vhdl
        -vhdl zpu ../../../zpu_small.vhdl
        -vhdl zpu ../../../zpu_medium.vhdl
        -vhdl zpu ../../../roms/rom_pkg.vhdl
        -#vhdl zpu ../../../roms/hello_dbram.vhdl
        -#vhdl zpu ../../../roms/hello_bram.vhdl
        -vhdl zpu ../../../roms/dmips_dbram.vhdl
        -vhdl zpu ../../../roms/dmips_bram.vhdl
        -vhdl zpu ../../../helpers/zpu_small1.vhdl
        -vhdl zpu ../../../helpers/zpu_med1.vhdl
        -vhdl zpu ../../../devices/txt_util.vhdl
        -vhdl zpu ../../../devices/phi_io.vhdl
        -vhdl zpu ../../../devices/timer.vhdl
        -vhdl zpu ../../../devices/rx_unit.vhdl
        -vhdl zpu ../../../devices/tx_unit.vhdl
        -vhdl zpu ../../../devices/br_gen.vhdl
        -vhdl zpu ../../../devices/trace.vhdl
        +vhdl work ../top.vhd
        +vhdl zpu ../../../zpu_pkg.vhdl
        +vhdl zpu ../../../zpu_small.vhdl
        +vhdl zpu ../../../zpu_medium.vhdl
        +vhdl zpu ../../../roms/rom_pkg.vhdl
        +#vhdl zpu ../../../roms/hello_dbram.vhdl
        +#vhdl zpu ../../../roms/hello_bram.vhdl
        +vhdl zpu ../../../roms/dmips_dbram.vhdl
        +vhdl zpu ../../../roms/dmips_bram.vhdl
        +vhdl zpu ../../../helpers/zpu_small1.vhdl
        +vhdl zpu ../../../helpers/zpu_med1.vhdl
        +vhdl zpu ../../../devices/txt_util.vhdl
        +vhdl zpu ../../../devices/phi_io.vhdl
        +vhdl zpu ../../../devices/timer.vhdl
        +vhdl zpu ../../../devices/gpio.vhdl
        +vhdl zpu ../../../devices/rx_unit.vhdl
        +vhdl zpu ../../../devices/tx_unit.vhdl
        +vhdl zpu ../../../devices/br_gen.vhdl
        +vhdl zpu ../../../devices/trace.vhdl
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.ut b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.ut
        index ea9319f..be56902 100644
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.ut
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.ut
        @@ -1,30 +1,30 @@
        --w
        --g DebugBitstream:No
        --g Binary:no
        --g CRC:Enable
        --g Reset_on_err:No
        --g ConfigRate:2
        --g ProgPin:PullUp
        --g TckPin:PullUp
        --g TdiPin:PullUp
        --g TdoPin:PullUp
        --g TmsPin:PullUp
        --g UnusedPin:PullDown
        --g UserID:0xFFFFFFFF
        --g ExtMasterCclk_en:No
        --g SPI_buswidth:1
        --g TIMER_CFG:0xFFFF
        --g multipin_wakeup:No
        --g StartUpClk:CClk
        --g DONE_cycle:4
        --g GTS_cycle:5
        --g GWE_cycle:6
        --g LCK_cycle:NoWait
        --g Security:None
        --g DonePipe:No
        --g DriveDone:No
        --g en_sw_gsr:No
        --g drive_awake:No
        --g sw_clk:Startupclk
        --g sw_gwe_cycle:5
        --g sw_gts_cycle:4
        +-w
        +-g DebugBitstream:No
        +-g Binary:no
        +-g CRC:Enable
        +-g Reset_on_err:No
        +-g ConfigRate:2
        +-g ProgPin:PullUp
        +-g TckPin:PullUp
        +-g TdiPin:PullUp
        +-g TdoPin:PullUp
        +-g TmsPin:PullUp
        +-g UnusedPin:PullDown
        +-g UserID:0xFFFFFFFF
        +-g ExtMasterCclk_en:No
        +-g SPI_buswidth:1
        +-g TIMER_CFG:0xFFFF
        +-g multipin_wakeup:No
        +-g StartUpClk:CClk
        +-g DONE_cycle:4
        +-g GTS_cycle:5
        +-g GWE_cycle:6
        +-g LCK_cycle:NoWait
        +-g Security:None
        +-g DonePipe:No
        +-g DriveDone:No
        +-g en_sw_gsr:No
        +-g drive_awake:No
        +-g sw_clk:Startupclk
        +-g sw_gwe_cycle:5
        +-g sw_gts_cycle:4
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.xst b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.xst
        index 8952afe..ddddddd 100644
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.xst
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/top.xst
        @@ -1,53 +1,53 @@
        -set -tmpdir "tmp"
        -set -xsthdpdir "xst"
        -run
        --ifn ../synthesis_config/top.prj
        --ifmt mixed
        --ofn top
        --ofmt NGC
        --p xc6slx16-2-csg324
        --top top
        --opt_mode Speed
        --opt_level 1
        --power NO
        --iuc NO
        --keep_hierarchy No
        --netlist_hierarchy As_Optimized
        --rtlview Yes
        --glob_opt AllClockNets
        --read_cores YES
        --write_timing_constraints NO
        --cross_clock_analysis NO
        --hierarchy_separator /
        --bus_delimiter <>
        --case Maintain
        --slice_utilization_ratio 100
        --bram_utilization_ratio 100
        --dsp_utilization_ratio 100
        --lc Auto
        --reduce_control_sets Auto
        --fsm_extract YES -fsm_encoding Auto
        --safe_implementation No
        --fsm_style LUT
        --ram_extract Yes
        --ram_style Auto
        --rom_extract Yes
        --shreg_extract YES
        --rom_style Auto
        --auto_bram_packing NO
        --resource_sharing YES
        --async_to_sync NO
        --shreg_min_size 2
        --use_dsp48 Auto
        --iobuf YES
        --max_fanout 100000
        --bufg 16
        --register_duplication YES
        --register_balancing No
        --optimize_primitives NO
        --use_clock_enable Auto
        --use_sync_set Auto
        --use_sync_reset Auto
        --iob Auto
        --equivalent_register_removal YES
        --slice_utilization_ratio_maxmargin 5
        +set -tmpdir "tmp"
        +set -xsthdpdir "xst"
        +run
        +-ifn ../synthesis_config/top.prj
        +-ifmt mixed
        +-ofn top
        +-ofmt NGC
        +-p xc6slx16-2-csg324
        +-top top
        +-opt_mode Speed
        +-opt_level 1
        +-power NO
        +-iuc NO
        +-keep_hierarchy No
        +-netlist_hierarchy As_Optimized
        +-rtlview Yes
        +-glob_opt AllClockNets
        +-read_cores YES
        +-write_timing_constraints NO
        +-cross_clock_analysis NO
        +-hierarchy_separator /
        +-bus_delimiter <>
        +-case Maintain
        +-slice_utilization_ratio 100
        +-bram_utilization_ratio 100
        +-dsp_utilization_ratio 100
        +-lc Auto
        +-reduce_control_sets Auto
        +-fsm_extract YES -fsm_encoding Auto
        +-safe_implementation No
        +-fsm_style LUT
        +-ram_extract Yes
        +-ram_style Auto
        +-rom_extract Yes
        +-shreg_extract YES
        +-rom_style Auto
        +-auto_bram_packing NO
        +-resource_sharing YES
        +-async_to_sync NO
        +-shreg_min_size 2
        +-use_dsp48 Auto
        +-iobuf YES
        +-max_fanout 100000
        +-bufg 16
        +-register_duplication YES
        +-register_balancing No
        +-optimize_primitives NO
        +-use_clock_enable Auto
        +-use_sync_set Auto
        +-use_sync_reset Auto
        +-iob Auto
        +-equivalent_register_removal YES
        +-slice_utilization_ratio_maxmargin 5
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/xilinx-sp601-xc6slx16.ucf b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/xilinx-sp601-xc6slx16.ucf
        index c54705a..a0c60e7 100644
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/xilinx-sp601-xc6slx16.ucf
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/synthesis_config/xilinx-sp601-xc6slx16.ucf
        @@ -1,303 +1,303 @@
        -############################################################
        -# SPARTAN-6 SP601 Board Constraints File
        -#
        -# Family:  Spartan6
        -# Device:  XC6SLX16
        -# Package: CSG324
        -# Speed:   -2
        -#
        -#
        -# Bank Voltage
        -# Bank 0: 2.5 V
        -# Bank 1: 2.5 V
        -# Bank 2: 2.5 V
        -# Bank 3: 1.8 V
        -# VCCAUX: 2.5 V
        -
        -# following pins are connected to VCC1V8/2:
        -# N3, M5, C1
        -
        -
        -############################################################
        -## clock/timing constraints
        -############################################################
        -
        -TIMESPEC "TS_SYSCLK"         = PERIOD "SYSCLK" 200 MHz HIGH 50 %;
        -TIMESPEC "TS_USER_SMA_CLOCK" = PERIOD "USER_SMA_CLOCK" 50 MHz HIGH 50 %;
        -NET "USER_CLOCK"               PERIOD = 27 MHz HIGH 40%;
        -
        -
        -############################################################
        -## pin placement constraints
        -############################################################
        -
        -NET "CPU_RESET"        LOC = "N4";
        -
        -## 128 MB DDR2 Component Memory
        -NET "DDR2_A<12>"       LOC ="G6"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<11>"       LOC ="D3"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<10>"       LOC ="F4"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<9>"        LOC ="D1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<8>"        LOC ="D2"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<7>"        LOC ="H6"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<6>"        LOC ="H3"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<5>"        LOC ="H4"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<4>"        LOC ="F3"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<3>"        LOC ="L7"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<2>"        LOC ="H5"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<1>"        LOC ="J6"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_A<0>"        LOC ="J7"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<15>"      LOC ="U1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<14>"      LOC ="U2"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<13>"      LOC ="T1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<12>"      LOC ="T2"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<11>"      LOC ="N1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<10>"      LOC ="N2"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<9>"       LOC ="M1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<8>"       LOC ="M3"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<7>"       LOC ="J1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<6>"       LOC ="J3"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<5>"       LOC ="H1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<4>"       LOC ="H2"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<3>"       LOC ="K1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<2>"       LOC ="K2"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<1>"       LOC ="L1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_DQ<0>"       LOC ="L2"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_WE_B"        LOC ="E3"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_UDQS_P"      LOC ="P2"; # | IOSTANDARD = DIFF_SSTL18_II;
        -NET "DDR2_UDQS_N"      LOC ="P1"; # | IOSTANDARD = DIFF_SSTL18_II;
        -NET "DDR2_UDM"         LOC ="K4"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_RAS_B"       LOC ="L5"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_ODT"         LOC ="K6"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_LDQS_P"      LOC ="L4"; # | IOSTANDARD = DIFF_SSTL18_II;
        -NET "DDR2_LDQS_N"      LOC ="L3"; # | IOSTANDARD = DIFF_SSTL18_II;
        -NET "DDR2_LDM"         LOC ="K3"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_CLK_P"       LOC ="G3"; # | IOSTANDARD = DIFF_SSTL18_II;
        -NET "DDR2_CLK_N"       LOC ="G1"; # | IOSTANDARD = DIFF_SSTL18_II;
        -NET "DDR2_CKE"         LOC ="H7"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_CAS_B"       LOC ="K5"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_BA<2>"       LOC ="E1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_BA<1>"       LOC ="F1"; # | IOSTANDARD = SSTL18_II ;
        -NET "DDR2_BA<0>"       LOC ="F2"; # | IOSTANDARD = SSTL18_II ;
        -
        -## Flash Memory
        -NET "FLASH_A<0>"       LOC = "K18";
        -NET "FLASH_A<1>"       LOC = "K17";
        -NET "FLASH_A<2>"       LOC = "J18";
        -NET "FLASH_A<3>"       LOC = "J16";
        -NET "FLASH_A<4>"       LOC = "G18";
        -NET "FLASH_A<5>"       LOC = "G16";
        -NET "FLASH_A<6>"       LOC = "H16";
        -NET "FLASH_A<7>"       LOC = "H15";
        -NET "FLASH_A<8>"       LOC = "H14";
        -NET "FLASH_A<9>"       LOC = "H13";
        -NET "FLASH_A<10>"      LOC = "F18";
        -NET "FLASH_A<11>"      LOC = "F17";
        -NET "FLASH_A<12>"      LOC = "K13";
        -NET "FLASH_A<13>"      LOC = "K12";
        -NET "FLASH_A<14>"      LOC = "E18";
        -NET "FLASH_A<15>"      LOC = "E16";
        -NET "FLASH_A<16>"      LOC = "G13";
        -NET "FLASH_A<17>"      LOC = "H12";
        -NET "FLASH_A<18>"      LOC = "D18";
        -NET "FLASH_A<19>"      LOC = "D17";
        -NET "FLASH_A<20>"      LOC = "G14";
        -NET "FLASH_A<21>"      LOC = "F14";
        -NET "FLASH_A<22>"      LOC = "C18";
        -NET "FLASH_A<23>"      LOC = "C17";
        -NET "FLASH_A<24>"      LOC = "F16";
        -#NET "FLASH_D<0>"       LOC = "R13" | SLEW = "SLOW" | DRIVE = 2;
        -#NET "FLASH_D<1>"       LOC = "T14" | SLEW = "SLOW" | DRIVE = 2;
        -#NET "FLASH_D<2>"       LOC = "V14" | SLEW = "SLOW" | DRIVE = 2;
        -NET "FLASH_D<3>"       LOC = "U5"  | SLEW = "SLOW" | DRIVE = 2;
        -NET "FLASH_D<4>"       LOC = "V5"  | SLEW = "SLOW" | DRIVE = 2;
        -NET "FLASH_D<5>"       LOC = "R3"  | SLEW = "SLOW" | DRIVE = 2;
        -NET "FLASH_D<6>"       LOC = "T3"  | SLEW = "SLOW" | DRIVE = 2;
        -NET "FLASH_D<7>"       LOC = "R5"  | SLEW = "SLOW" | DRIVE = 2;
        -NET "FLASH_OE_B"       LOC = "L18";
        -NET "FLASH_WE_B"       LOC = "M16";
        -NET "FLASH_CE_B"       LOC = "L17";
        -
        -# FMC-Connector, Bank 0,2 (M2C = Mezzanine to Carrier, C2M = Carrier to Mezzanine)
        -NET "FMC_CLK0_M2C_N"            LOC = "A10";
        -NET "FMC_CLK0_M2C_P"            LOC = "C10";
        -NET "FMC_CLK1_M2C_N"            LOC = "V9" ;
        -NET "FMC_CLK1_M2C_P"            LOC = "T9" ;
        -NET "FMC_LA00_CC_N"             LOC = "C9" ;
        -NET "FMC_LA00_CC_P"             LOC = "D9" ;
        -NET "FMC_LA01_CC_N"             LOC = "C11";
        -NET "FMC_LA01_CC_P"             LOC = "D11";
        -NET "FMC_LA02_N"                LOC = "A15";
        -NET "FMC_LA02_P"                LOC = "C15";
        -NET "FMC_LA03_N"                LOC = "A13";
        -NET "FMC_LA03_P"                LOC = "C13";
        -NET "FMC_LA04_N"                LOC = "A16";
        -NET "FMC_LA04_P"                LOC = "B16";
        -NET "FMC_LA05_N"                LOC = "A14";
        -NET "FMC_LA05_P"                LOC = "B14";
        -NET "FMC_LA06_N"                LOC = "C12";
        -NET "FMC_LA06_P"                LOC = "D12";
        -NET "FMC_LA07_N"                LOC = "E8" ;
        -NET "FMC_LA07_P"                LOC = "E7" ;
        -NET "FMC_LA08_N"                LOC = "E11";
        -NET "FMC_LA08_P"                LOC = "F11";
        -NET "FMC_LA09_N"                LOC = "F10";
        -NET "FMC_LA09_P"                LOC = "G11";
        -NET "FMC_LA10_N"                LOC = "C8" ;
        -NET "FMC_LA10_P"                LOC = "D8" ;
        -NET "FMC_LA11_N"                LOC = "A12";
        -NET "FMC_LA11_P"                LOC = "B12";
        -NET "FMC_LA12_N"                LOC = "C6" ;
        -NET "FMC_LA12_P"                LOC = "D6" ;
        -NET "FMC_LA13_N"                LOC = "A11";
        -NET "FMC_LA13_P"                LOC = "B11";
        -NET "FMC_LA14_N"                LOC = "A2" ;
        -NET "FMC_LA14_P"                LOC = "B2" ;
        -NET "FMC_LA15_N"                LOC = "F9" ;
        -NET "FMC_LA15_P"                LOC = "G9" ;
        -NET "FMC_LA16_N"                LOC = "A7" ;
        -NET "FMC_LA16_P"                LOC = "C7" ;
        -NET "FMC_LA17_CC_N"             LOC = "T8" ;
        -NET "FMC_LA17_CC_P"             LOC = "R8" ;
        -NET "FMC_LA18_CC_N"             LOC = "T10";
        -NET "FMC_LA18_CC_P"             LOC = "R10";
        -NET "FMC_LA19_N"                LOC = "P7" ;
        -NET "FMC_LA19_P"                LOC = "N6" ;
        -NET "FMC_LA20_N"                LOC = "P8" ;
        -NET "FMC_LA20_P"                LOC = "N7" ;
        -NET "FMC_LA21_N"                LOC = "V4" ;
        -NET "FMC_LA21_P"                LOC = "T4" ;
        -NET "FMC_LA22_N"                LOC = "T7" ;
        -NET "FMC_LA22_P"                LOC = "R7" ;
        -NET "FMC_LA23_N"                LOC = "P6" ;
        -NET "FMC_LA23_P"                LOC = "N5" ;
        -NET "FMC_LA24_N"                LOC = "V8" ;
        -NET "FMC_LA24_P"                LOC = "U8" ;
        -NET "FMC_LA25_N"                LOC = "N11";
        -NET "FMC_LA25_P"                LOC = "M11";
        -NET "FMC_LA26_N"                LOC = "V7" ;
        -NET "FMC_LA26_P"                LOC = "U7" ;
        -NET "FMC_LA27_N"                LOC = "T11";
        -NET "FMC_LA27_P"                LOC = "R11";
        -NET "FMC_LA28_N"                LOC = "V11";
        -NET "FMC_LA28_P"                LOC = "U11";
        -NET "FMC_LA29_N"                LOC = "N8" ;
        -NET "FMC_LA29_P"                LOC = "M8" ;
        -NET "FMC_LA30_N"                LOC = "V12";
        -NET "FMC_LA30_P"                LOC = "T12";
        -NET "FMC_LA31_N"                LOC = "V6" ;
        -NET "FMC_LA31_P"                LOC = "T6" ;
        -NET "FMC_LA32_N"                LOC = "V15";
        -NET "FMC_LA32_P"                LOC = "U15";
        -NET "FMC_LA33_N"                LOC = "N9" ;
        -NET "FMC_LA33_P"                LOC = "M10";
        -NET "FMC_PRSNT_M2C_L"           LOC = "U13";
        -NET "FMC_PWR_GOOD_FLASH_RST_B"  LOC = "B3";
        -
        -# special FPGA pins
        -NET "FPGA_AWAKE"                LOC = "P15"| SLEW = SLOW | DRIVE = 2;
        -NET "FPGA_CCLK"                 LOC = "R15";
        -NET "FPGA_CMP_CLK"              LOC = "U16";
        -NET "FPGA_CMP_MOSI"             LOC = "V16";
        -NET "FPGA_D0_DIN_MISO_MISO1"    LOC = "R13" | DRIVE = 4; ## 8 on U17 (thru series R187 100 ohm), 33 on U10, 6 on J12
        -NET "FPGA_D1_MISO2"             LOC = "T14" | DRIVE = 4; ## 9 on U17 (thru series R186 100 ohm), 35 on U10, 3 on J12
        -NET "FPGA_D2_MISO3"             LOC = "V14" | DRIVE = 4; ## 1 on U17, 38 on U10, 2 on J12
        -NET "FPGA_HSWAPEN"              LOC = "D4";
        -NET "FPGA_INIT_B"               LOC = "U3" | SLEW = SLOW | DRIVE = 4;
        -NET "FPGA_M0_CMP_MISO"          LOC = "T15";
        -NET "FPGA_M1"                   LOC = "N12";
        -NET "FPGA_MOSI_CSI_B_MISO0"     LOC = "T13" | DRIVE = 4;
        -NET "FPGA_ONCHIP_TERM1"         LOC = "L6";
        -NET "FPGA_ONCHIP_TERM2"         LOC = "C2";
        -NET "FPGA_VTEMP"                LOC = "P3";
        -
        -## Pushbuttons, Bank 3, external Pulldown
        -NET "GPIO_BUTTON<0>"            LOC = "P4" ;
        -NET "GPIO_BUTTON<1>"            LOC = "F6" ;
        -NET "GPIO_BUTTON<2>"            LOC = "E4" ;
        -NET "GPIO_BUTTON<3>"            LOC = "F5" ;
        -NET "GPIO_BUTTON*"              TIG;
        -
        -## 8 Pin GPIO Header J13, Bank 0,1,2
        -NET "GPIO_HEADER_LS<0>"         LOC = "N17"| SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_HEADER_LS<1>"         LOC = "M18"| SLEW = SLOW | DRIVE = 4 ; 
        -NET "GPIO_HEADER_LS<2>"         LOC = "A3" | SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_HEADER_LS<3>"         LOC = "L15"| SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_HEADER_LS<4>"         LOC = "F15"| SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_HEADER_LS<5>"         LOC = "B4" | SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_HEADER_LS<6>"         LOC = "F13"| SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_HEADER_LS<7>"         LOC = "P12"| SLEW = SLOW | DRIVE = 4 ;
        -
        -## 4 GPIO LEDs, Bank 0
        -NET "GPIO_LED<0>"               LOC = "E13"| SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_LED<1>"               LOC = "C14"| SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_LED<2>"               LOC = "C4" | SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_LED<3>"               LOC = "A4" | SLEW = SLOW | DRIVE = 4 ;
        -NET "GPIO_LED*"                 TIG;
        -
        -## GPIO Dip Switches, Bank 0,2, external Pulldown
        -NET "GPIO_SWITCH<0>"            LOC = "D14";
        -NET "GPIO_SWITCH<1>"            LOC = "E12";
        -NET "GPIO_SWITCH<2>"            LOC = "F12";
        -NET "GPIO_SWITCH<3>"            LOC = "V13";
        -NET "GPIO_SWITCH*"              TIG;
        -
        -## IIC Bus
        -NET "IIC_SCL_MAIN"              LOC = "P11";
        -NET "IIC_SDA_MAIN"              LOC = "N10";
        -
        -## 10/100/1000 Tri-Speed Ethernet PHY
        -NET "PHY_COL"                   LOC = "L14";
        -NET "PHY_CRS"                   LOC = "M13";
        -NET "PHY_INT"                   LOC = "J13";
        -NET "PHY_MDC"                   LOC = "N14" | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_MDIO"                  LOC = "P16" | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_RESET"                 LOC = "L13";
        -NET "PHY_RXCLK"                 LOC = "L16";
        -NET "PHY_RXCTL_RXDV"            LOC = "N18";
        -NET "PHY_RXD<0>"                LOC = "M14";
        -NET "PHY_RXD<1>"                LOC = "U18";
        -NET "PHY_RXD<2>"                LOC = "U17";
        -NET "PHY_RXD<3>"                LOC = "T18";
        -NET "PHY_RXD<4>"                LOC = "T17";
        -NET "PHY_RXD<5>"                LOC = "N16";
        -NET "PHY_RXD<6>"                LOC = "N15";
        -NET "PHY_RXD<7>"                LOC = "P18";
        -NET "PHY_RXER"                  LOC = "P17";
        -NET "PHY_TXCLK"                 LOC = "B9" ;
        -NET "PHY_TXCTL_TXEN"            LOC = "B8"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXC_GTXCLK"            LOC = "A9" ;
        -NET "PHY_TXD<0>"                LOC = "F8"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXD<1>"                LOC = "G8"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXD<2>"                LOC = "A6"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXD<3>"                LOC = "B6"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXD<4>"                LOC = "E6"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXD<5>"                LOC = "F7"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXD<6>"                LOC = "A5"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXD<7>"                LOC = "C5"  | SLEW = SLOW | DRIVE = 4;
        -NET "PHY_TXER"                  LOC = "A8"  | SLEW = SLOW | DRIVE = 4;
        -
        -## SPI x4 Flash
        -NET "SPI_CS_B"                  LOC = "V3";
        -
        -## 200 MHz oscillator (differential)
        -NET "SYSCLK_N"                  LOC = "K16"| IOSTANDARD = LVDS_33 | TNM_NET = "SYSCLK";
        -NET "SYSCLK_P"                  LOC = "K15"| IOSTANDARD = LVDS_33 | TNM_NET = "SYSCLK";
        -
        -## USB-UART
        -## this names are real net names
        -NET "USB_1_CTS"                 LOC = "U10"| DRIVE = 4 | SLEW = SLOW;   # RTS output
        -NET "USB_1_RTS"                 LOC = "T5" ;                            # CTS input
        -NET "USB_1_RX"                  LOC = "L12"| DRIVE = 4 | SLEW = SLOW;   # TX data out
        -NET "USB_1_TX"                  LOC = "K14";                            # RX data in
        -
        -## 27 MHz
        -NET "USER_CLOCK"                LOC = "V10"| IOSTANDARD = LVCMOS33 ;
        -##
        -NET "USER_SMA_CLOCK_N"          LOC = "H18"| TNM_NET = "USER_SMA_CLOCK";
        -NET "USER_SMA_CLOCK_P"          LOC = "H17"| TNM_NET = "USER_SMA_CLOCK";
        -
        -# pins used for voltage termination
        -CONFIG PROHIBIT = C1;
        -CONFIG PROHIBIT = M5;
        -CONFIG PROHIBIT = N3;
        +############################################################
        +# SPARTAN-6 SP601 Board Constraints File
        +#
        +# Family:  Spartan6
        +# Device:  XC6SLX16
        +# Package: CSG324
        +# Speed:   -2
        +#
        +#
        +# Bank Voltage
        +# Bank 0: 2.5 V
        +# Bank 1: 2.5 V
        +# Bank 2: 2.5 V
        +# Bank 3: 1.8 V
        +# VCCAUX: 2.5 V
        +
        +# following pins are connected to VCC1V8/2:
        +# N3, M5, C1
        +
        +
        +############################################################
        +## clock/timing constraints
        +############################################################
        +
        +TIMESPEC "TS_SYSCLK"         = PERIOD "SYSCLK" 200 MHz HIGH 50 %;
        +TIMESPEC "TS_USER_SMA_CLOCK" = PERIOD "USER_SMA_CLOCK" 50 MHz HIGH 50 %;
        +NET "USER_CLOCK"               PERIOD = 27 MHz HIGH 40%;
        +
        +
        +############################################################
        +## pin placement constraints
        +############################################################
        +
        +NET "CPU_RESET"        LOC = "N4";
        +
        +## 128 MB DDR2 Component Memory
        +NET "DDR2_A<12>"       LOC ="G6"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<11>"       LOC ="D3"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<10>"       LOC ="F4"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<9>"        LOC ="D1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<8>"        LOC ="D2"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<7>"        LOC ="H6"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<6>"        LOC ="H3"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<5>"        LOC ="H4"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<4>"        LOC ="F3"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<3>"        LOC ="L7"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<2>"        LOC ="H5"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<1>"        LOC ="J6"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_A<0>"        LOC ="J7"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<15>"      LOC ="U1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<14>"      LOC ="U2"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<13>"      LOC ="T1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<12>"      LOC ="T2"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<11>"      LOC ="N1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<10>"      LOC ="N2"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<9>"       LOC ="M1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<8>"       LOC ="M3"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<7>"       LOC ="J1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<6>"       LOC ="J3"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<5>"       LOC ="H1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<4>"       LOC ="H2"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<3>"       LOC ="K1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<2>"       LOC ="K2"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<1>"       LOC ="L1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_DQ<0>"       LOC ="L2"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_WE_B"        LOC ="E3"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_UDQS_P"      LOC ="P2"; # | IOSTANDARD = DIFF_SSTL18_II;
        +NET "DDR2_UDQS_N"      LOC ="P1"; # | IOSTANDARD = DIFF_SSTL18_II;
        +NET "DDR2_UDM"         LOC ="K4"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_RAS_B"       LOC ="L5"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_ODT"         LOC ="K6"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_LDQS_P"      LOC ="L4"; # | IOSTANDARD = DIFF_SSTL18_II;
        +NET "DDR2_LDQS_N"      LOC ="L3"; # | IOSTANDARD = DIFF_SSTL18_II;
        +NET "DDR2_LDM"         LOC ="K3"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_CLK_P"       LOC ="G3"; # | IOSTANDARD = DIFF_SSTL18_II;
        +NET "DDR2_CLK_N"       LOC ="G1"; # | IOSTANDARD = DIFF_SSTL18_II;
        +NET "DDR2_CKE"         LOC ="H7"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_CAS_B"       LOC ="K5"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_BA<2>"       LOC ="E1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_BA<1>"       LOC ="F1"; # | IOSTANDARD = SSTL18_II ;
        +NET "DDR2_BA<0>"       LOC ="F2"; # | IOSTANDARD = SSTL18_II ;
        +
        +## Flash Memory
        +NET "FLASH_A<0>"       LOC = "K18";
        +NET "FLASH_A<1>"       LOC = "K17";
        +NET "FLASH_A<2>"       LOC = "J18";
        +NET "FLASH_A<3>"       LOC = "J16";
        +NET "FLASH_A<4>"       LOC = "G18";
        +NET "FLASH_A<5>"       LOC = "G16";
        +NET "FLASH_A<6>"       LOC = "H16";
        +NET "FLASH_A<7>"       LOC = "H15";
        +NET "FLASH_A<8>"       LOC = "H14";
        +NET "FLASH_A<9>"       LOC = "H13";
        +NET "FLASH_A<10>"      LOC = "F18";
        +NET "FLASH_A<11>"      LOC = "F17";
        +NET "FLASH_A<12>"      LOC = "K13";
        +NET "FLASH_A<13>"      LOC = "K12";
        +NET "FLASH_A<14>"      LOC = "E18";
        +NET "FLASH_A<15>"      LOC = "E16";
        +NET "FLASH_A<16>"      LOC = "G13";
        +NET "FLASH_A<17>"      LOC = "H12";
        +NET "FLASH_A<18>"      LOC = "D18";
        +NET "FLASH_A<19>"      LOC = "D17";
        +NET "FLASH_A<20>"      LOC = "G14";
        +NET "FLASH_A<21>"      LOC = "F14";
        +NET "FLASH_A<22>"      LOC = "C18";
        +NET "FLASH_A<23>"      LOC = "C17";
        +NET "FLASH_A<24>"      LOC = "F16";
        +#NET "FLASH_D<0>"       LOC = "R13" | SLEW = "SLOW" | DRIVE = 2;
        +#NET "FLASH_D<1>"       LOC = "T14" | SLEW = "SLOW" | DRIVE = 2;
        +#NET "FLASH_D<2>"       LOC = "V14" | SLEW = "SLOW" | DRIVE = 2;
        +NET "FLASH_D<3>"       LOC = "U5"  | SLEW = "SLOW" | DRIVE = 2;
        +NET "FLASH_D<4>"       LOC = "V5"  | SLEW = "SLOW" | DRIVE = 2;
        +NET "FLASH_D<5>"       LOC = "R3"  | SLEW = "SLOW" | DRIVE = 2;
        +NET "FLASH_D<6>"       LOC = "T3"  | SLEW = "SLOW" | DRIVE = 2;
        +NET "FLASH_D<7>"       LOC = "R5"  | SLEW = "SLOW" | DRIVE = 2;
        +NET "FLASH_OE_B"       LOC = "L18";
        +NET "FLASH_WE_B"       LOC = "M16";
        +NET "FLASH_CE_B"       LOC = "L17";
        +
        +# FMC-Connector, Bank 0,2 (M2C = Mezzanine to Carrier, C2M = Carrier to Mezzanine)
        +NET "FMC_CLK0_M2C_N"            LOC = "A10";
        +NET "FMC_CLK0_M2C_P"            LOC = "C10";
        +NET "FMC_CLK1_M2C_N"            LOC = "V9" ;
        +NET "FMC_CLK1_M2C_P"            LOC = "T9" ;
        +NET "FMC_LA00_CC_N"             LOC = "C9" ;
        +NET "FMC_LA00_CC_P"             LOC = "D9" ;
        +NET "FMC_LA01_CC_N"             LOC = "C11";
        +NET "FMC_LA01_CC_P"             LOC = "D11";
        +NET "FMC_LA02_N"                LOC = "A15";
        +NET "FMC_LA02_P"                LOC = "C15";
        +NET "FMC_LA03_N"                LOC = "A13";
        +NET "FMC_LA03_P"                LOC = "C13";
        +NET "FMC_LA04_N"                LOC = "A16";
        +NET "FMC_LA04_P"                LOC = "B16";
        +NET "FMC_LA05_N"                LOC = "A14";
        +NET "FMC_LA05_P"                LOC = "B14";
        +NET "FMC_LA06_N"                LOC = "C12";
        +NET "FMC_LA06_P"                LOC = "D12";
        +NET "FMC_LA07_N"                LOC = "E8" ;
        +NET "FMC_LA07_P"                LOC = "E7" ;
        +NET "FMC_LA08_N"                LOC = "E11";
        +NET "FMC_LA08_P"                LOC = "F11";
        +NET "FMC_LA09_N"                LOC = "F10";
        +NET "FMC_LA09_P"                LOC = "G11";
        +NET "FMC_LA10_N"                LOC = "C8" ;
        +NET "FMC_LA10_P"                LOC = "D8" ;
        +NET "FMC_LA11_N"                LOC = "A12";
        +NET "FMC_LA11_P"                LOC = "B12";
        +NET "FMC_LA12_N"                LOC = "C6" ;
        +NET "FMC_LA12_P"                LOC = "D6" ;
        +NET "FMC_LA13_N"                LOC = "A11";
        +NET "FMC_LA13_P"                LOC = "B11";
        +NET "FMC_LA14_N"                LOC = "A2" ;
        +NET "FMC_LA14_P"                LOC = "B2" ;
        +NET "FMC_LA15_N"                LOC = "F9" ;
        +NET "FMC_LA15_P"                LOC = "G9" ;
        +NET "FMC_LA16_N"                LOC = "A7" ;
        +NET "FMC_LA16_P"                LOC = "C7" ;
        +NET "FMC_LA17_CC_N"             LOC = "T8" ;
        +NET "FMC_LA17_CC_P"             LOC = "R8" ;
        +NET "FMC_LA18_CC_N"             LOC = "T10";
        +NET "FMC_LA18_CC_P"             LOC = "R10";
        +NET "FMC_LA19_N"                LOC = "P7" ;
        +NET "FMC_LA19_P"                LOC = "N6" ;
        +NET "FMC_LA20_N"                LOC = "P8" ;
        +NET "FMC_LA20_P"                LOC = "N7" ;
        +NET "FMC_LA21_N"                LOC = "V4" ;
        +NET "FMC_LA21_P"                LOC = "T4" ;
        +NET "FMC_LA22_N"                LOC = "T7" ;
        +NET "FMC_LA22_P"                LOC = "R7" ;
        +NET "FMC_LA23_N"                LOC = "P6" ;
        +NET "FMC_LA23_P"                LOC = "N5" ;
        +NET "FMC_LA24_N"                LOC = "V8" ;
        +NET "FMC_LA24_P"                LOC = "U8" ;
        +NET "FMC_LA25_N"                LOC = "N11";
        +NET "FMC_LA25_P"                LOC = "M11";
        +NET "FMC_LA26_N"                LOC = "V7" ;
        +NET "FMC_LA26_P"                LOC = "U7" ;
        +NET "FMC_LA27_N"                LOC = "T11";
        +NET "FMC_LA27_P"                LOC = "R11";
        +NET "FMC_LA28_N"                LOC = "V11";
        +NET "FMC_LA28_P"                LOC = "U11";
        +NET "FMC_LA29_N"                LOC = "N8" ;
        +NET "FMC_LA29_P"                LOC = "M8" ;
        +NET "FMC_LA30_N"                LOC = "V12";
        +NET "FMC_LA30_P"                LOC = "T12";
        +NET "FMC_LA31_N"                LOC = "V6" ;
        +NET "FMC_LA31_P"                LOC = "T6" ;
        +NET "FMC_LA32_N"                LOC = "V15";
        +NET "FMC_LA32_P"                LOC = "U15";
        +NET "FMC_LA33_N"                LOC = "N9" ;
        +NET "FMC_LA33_P"                LOC = "M10";
        +NET "FMC_PRSNT_M2C_L"           LOC = "U13";
        +NET "FMC_PWR_GOOD_FLASH_RST_B"  LOC = "B3";
        +
        +# special FPGA pins
        +NET "FPGA_AWAKE"                LOC = "P15"| SLEW = SLOW | DRIVE = 2;
        +NET "FPGA_CCLK"                 LOC = "R15";
        +NET "FPGA_CMP_CLK"              LOC = "U16";
        +NET "FPGA_CMP_MOSI"             LOC = "V16";
        +NET "FPGA_D0_DIN_MISO_MISO1"    LOC = "R13" | DRIVE = 4; ## 8 on U17 (thru series R187 100 ohm), 33 on U10, 6 on J12
        +NET "FPGA_D1_MISO2"             LOC = "T14" | DRIVE = 4; ## 9 on U17 (thru series R186 100 ohm), 35 on U10, 3 on J12
        +NET "FPGA_D2_MISO3"             LOC = "V14" | DRIVE = 4; ## 1 on U17, 38 on U10, 2 on J12
        +NET "FPGA_HSWAPEN"              LOC = "D4";
        +NET "FPGA_INIT_B"               LOC = "U3" | SLEW = SLOW | DRIVE = 4;
        +NET "FPGA_M0_CMP_MISO"          LOC = "T15";
        +NET "FPGA_M1"                   LOC = "N12";
        +NET "FPGA_MOSI_CSI_B_MISO0"     LOC = "T13" | DRIVE = 4;
        +NET "FPGA_ONCHIP_TERM1"         LOC = "L6";
        +NET "FPGA_ONCHIP_TERM2"         LOC = "C2";
        +NET "FPGA_VTEMP"                LOC = "P3";
        +
        +## Pushbuttons, Bank 3, external Pulldown
        +NET "GPIO_BUTTON<0>"            LOC = "P4" ;
        +NET "GPIO_BUTTON<1>"            LOC = "F6" ;
        +NET "GPIO_BUTTON<2>"            LOC = "E4" ;
        +NET "GPIO_BUTTON<3>"            LOC = "F5" ;
        +NET "GPIO_BUTTON*"              TIG;
        +
        +## 8 Pin GPIO Header J13, Bank 0,1,2
        +NET "GPIO_HEADER_LS<0>"         LOC = "N17"| SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_HEADER_LS<1>"         LOC = "M18"| SLEW = SLOW | DRIVE = 4 ; 
        +NET "GPIO_HEADER_LS<2>"         LOC = "A3" | SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_HEADER_LS<3>"         LOC = "L15"| SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_HEADER_LS<4>"         LOC = "F15"| SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_HEADER_LS<5>"         LOC = "B4" | SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_HEADER_LS<6>"         LOC = "F13"| SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_HEADER_LS<7>"         LOC = "P12"| SLEW = SLOW | DRIVE = 4 ;
        +
        +## 4 GPIO LEDs, Bank 0
        +NET "GPIO_LED<0>"               LOC = "E13"| SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_LED<1>"               LOC = "C14"| SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_LED<2>"               LOC = "C4" | SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_LED<3>"               LOC = "A4" | SLEW = SLOW | DRIVE = 4 ;
        +NET "GPIO_LED*"                 TIG;
        +
        +## GPIO Dip Switches, Bank 0,2, external Pulldown
        +NET "GPIO_SWITCH<0>"            LOC = "D14";
        +NET "GPIO_SWITCH<1>"            LOC = "E12";
        +NET "GPIO_SWITCH<2>"            LOC = "F12";
        +NET "GPIO_SWITCH<3>"            LOC = "V13";
        +NET "GPIO_SWITCH*"              TIG;
        +
        +## IIC Bus
        +NET "IIC_SCL_MAIN"              LOC = "P11";
        +NET "IIC_SDA_MAIN"              LOC = "N10";
        +
        +## 10/100/1000 Tri-Speed Ethernet PHY
        +NET "PHY_COL"                   LOC = "L14";
        +NET "PHY_CRS"                   LOC = "M13";
        +NET "PHY_INT"                   LOC = "J13";
        +NET "PHY_MDC"                   LOC = "N14" | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_MDIO"                  LOC = "P16" | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_RESET"                 LOC = "L13";
        +NET "PHY_RXCLK"                 LOC = "L16";
        +NET "PHY_RXCTL_RXDV"            LOC = "N18";
        +NET "PHY_RXD<0>"                LOC = "M14";
        +NET "PHY_RXD<1>"                LOC = "U18";
        +NET "PHY_RXD<2>"                LOC = "U17";
        +NET "PHY_RXD<3>"                LOC = "T18";
        +NET "PHY_RXD<4>"                LOC = "T17";
        +NET "PHY_RXD<5>"                LOC = "N16";
        +NET "PHY_RXD<6>"                LOC = "N15";
        +NET "PHY_RXD<7>"                LOC = "P18";
        +NET "PHY_RXER"                  LOC = "P17";
        +NET "PHY_TXCLK"                 LOC = "B9" ;
        +NET "PHY_TXCTL_TXEN"            LOC = "B8"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXC_GTXCLK"            LOC = "A9" ;
        +NET "PHY_TXD<0>"                LOC = "F8"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXD<1>"                LOC = "G8"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXD<2>"                LOC = "A6"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXD<3>"                LOC = "B6"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXD<4>"                LOC = "E6"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXD<5>"                LOC = "F7"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXD<6>"                LOC = "A5"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXD<7>"                LOC = "C5"  | SLEW = SLOW | DRIVE = 4;
        +NET "PHY_TXER"                  LOC = "A8"  | SLEW = SLOW | DRIVE = 4;
        +
        +## SPI x4 Flash
        +NET "SPI_CS_B"                  LOC = "V3";
        +
        +## 200 MHz oscillator (differential)
        +NET "SYSCLK_N"                  LOC = "K16"| IOSTANDARD = LVDS_33 | TNM_NET = "SYSCLK";
        +NET "SYSCLK_P"                  LOC = "K15"| IOSTANDARD = LVDS_33 | TNM_NET = "SYSCLK";
        +
        +## USB-UART
        +## this names are real net names
        +NET "USB_1_CTS"                 LOC = "U10"| DRIVE = 4 | SLEW = SLOW;   # RTS output
        +NET "USB_1_RTS"                 LOC = "T5" ;                            # CTS input
        +NET "USB_1_RX"                  LOC = "L12"| DRIVE = 4 | SLEW = SLOW;   # TX data out
        +NET "USB_1_TX"                  LOC = "K14";                            # RX data in
        +
        +## 27 MHz
        +NET "USER_CLOCK"                LOC = "V10"| IOSTANDARD = LVCMOS33 ;
        +##
        +NET "USER_SMA_CLOCK_N"          LOC = "H18"| TNM_NET = "USER_SMA_CLOCK";
        +NET "USER_SMA_CLOCK_P"          LOC = "H17"| TNM_NET = "USER_SMA_CLOCK";
        +
        +# pins used for voltage termination
        +CONFIG PROHIBIT = C1;
        +CONFIG PROHIBIT = M5;
        +CONFIG PROHIBIT = N3;
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd
        index 120b1cf..bbeb0a2 100644
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd
        @@ -1,533 +1,563 @@
        --- top module of
        --- SP601 evaluation board
        ---
        --- using following external connections:
        ---
        --- cpu_reset (SW9)      reset
        --- LEDs                 output
        --- USB_UART             communication 
        ---
        -
        -
        -library ieee;
        -use ieee.std_logic_1164.all;
        -
        -library zpu;
        -use zpu.zpupkg.all;                     -- zpu_dbgo_t
        -
        -library unisim;
        -use unisim.vcomponents.ibufgds;
        -use unisim.vcomponents.dcm_sp;
        -
        -
        -entity top is
        -    port (
        -        -- pragma translate_off 
        -        stop_simulation : out   std_logic;
        -        -- pragma translate_on 
        -        --
        -        cpu_reset                : in    std_logic;  -- SW9 pushbutton (active-high)
        -        --
        -        -- DDR2 memory 128 MB
        -        ddr2_a                   : out   std_logic_vector(12 downto 0);
        -        ddr2_ba                  : out   std_logic_vector(2 downto 0);
        -        ddr2_cas_b               : out   std_logic;
        -        ddr2_ras_b               : out   std_logic;
        -        ddr2_we_b                : out   std_logic;
        -        ddr2_cke                 : out   std_logic;
        -        ddr2_clk_n               : out   std_logic;
        -        ddr2_clk_p               : out   std_logic;
        -        ddr2_dq                  : inout std_logic_vector(15 downto 0);
        -        ddr2_ldm                 : out   std_logic;
        -        ddr2_udm                 : out   std_logic;
        -        ddr2_ldqs_n              : inout std_logic;
        -        ddr2_ldqs_p              : inout std_logic;
        -        ddr2_udqs_n              : inout std_logic;
        -        ddr2_udqs_p              : inout std_logic;
        -        ddr2_odt                 : out   std_logic;
        -        --                                
        -        -- flash memory                        
        -        flash_a                  : out   std_logic_vector(24 downto 0);
        -        flash_d                  : inout std_logic_vector(7 downto 3);
        -        --
        -        fpga_d0_din_miso_miso1   : inout std_logic;  -- dual use
        -        fpga_d1_miso2            : inout std_logic;  -- dual use
        -        fpga_d2_miso3            : inout std_logic;  -- dual use
        -        flash_we_b               : out   std_logic;
        -        flash_oe_b               : out   std_logic;
        -        flash_ce_b               : out   std_logic;
        -        --
        -        -- FMC connector
        -        -- M2C   Mezzanine to Carrier
        -        -- C2M   Carrier to Mezzanine
        -        fmc_clk0_m2c_n           : in    std_logic;
        -        fmc_clk0_m2c_p           : in    std_logic;
        -        fmc_clk1_m2c_n           : in    std_logic;
        -        fmc_clk1_m2c_p           : in    std_logic;
        -        -- IIC addresses:
        -        -- M24C08:                 1010100..1010111
        -        -- 2kb EEPROM on FMC card: 1010010
        -        iic_scl_main             : inout std_logic;
        -        iic_sda_main             : inout std_logic;
        -        fmc_la00_cc_n            : inout std_logic;
        -        fmc_la00_cc_p            : inout std_logic;
        -        fmc_la01_cc_n            : inout std_logic;
        -        fmc_la01_cc_p            : inout std_logic;
        -        fmc_la02_n               : inout std_logic;
        -        fmc_la02_p               : inout std_logic;
        -        fmc_la03_n               : inout std_logic;
        -        fmc_la03_p               : inout std_logic;
        -        fmc_la04_n               : inout std_logic;
        -        fmc_la04_p               : inout std_logic;
        -        fmc_la05_n               : inout std_logic;
        -        fmc_la05_p               : inout std_logic;
        -        fmc_la06_n               : inout std_logic;
        -        fmc_la06_p               : inout std_logic;
        -        fmc_la07_n               : inout std_logic;
        -        fmc_la07_p               : inout std_logic;
        -        fmc_la08_n               : inout std_logic;
        -        fmc_la08_p               : inout std_logic;
        -        fmc_la09_n               : inout std_logic;
        -        fmc_la09_p               : inout std_logic;
        -        fmc_la10_n               : inout std_logic;
        -        fmc_la10_p               : inout std_logic;
        -        fmc_la11_n               : inout std_logic;
        -        fmc_la11_p               : inout std_logic;
        -        fmc_la12_n               : inout std_logic;
        -        fmc_la12_p               : inout std_logic;
        -        fmc_la13_n               : inout std_logic;
        -        fmc_la13_p               : inout std_logic;
        -        fmc_la14_n               : inout std_logic;
        -        fmc_la14_p               : inout std_logic;
        -        fmc_la15_n               : inout std_logic;
        -        fmc_la15_p               : inout std_logic;
        -        fmc_la16_n               : inout std_logic;
        -        fmc_la16_p               : inout std_logic;
        -        fmc_la17_cc_n            : inout std_logic;
        -        fmc_la17_cc_p            : inout std_logic;
        -        fmc_la18_cc_n            : inout std_logic;
        -        fmc_la18_cc_p            : inout std_logic;
        -        fmc_la19_n               : inout std_logic;
        -        fmc_la19_p               : inout std_logic;
        -        fmc_la20_n               : inout std_logic;
        -        fmc_la20_p               : inout std_logic;
        -        fmc_la21_n               : inout std_logic;
        -        fmc_la21_p               : inout std_logic;
        -        fmc_la22_n               : inout std_logic;
        -        fmc_la22_p               : inout std_logic;
        -        fmc_la23_n               : inout std_logic;
        -        fmc_la23_p               : inout std_logic;
        -        fmc_la24_n               : inout std_logic;
        -        fmc_la24_p               : inout std_logic;
        -        fmc_la25_n               : inout std_logic;
        -        fmc_la25_p               : inout std_logic;
        -        fmc_la26_n               : inout std_logic;
        -        fmc_la26_p               : inout std_logic;
        -        fmc_la27_n               : inout std_logic;
        -        fmc_la27_p               : inout std_logic;
        -        fmc_la28_n               : inout std_logic;
        -        fmc_la28_p               : inout std_logic;
        -        fmc_la29_n               : inout std_logic;
        -        fmc_la29_p               : inout std_logic;
        -        fmc_la30_n               : inout std_logic;
        -        fmc_la30_p               : inout std_logic;
        -        fmc_la31_n               : inout std_logic;
        -        fmc_la31_p               : inout std_logic;
        -        fmc_la32_n               : inout std_logic;
        -        fmc_la32_p               : inout std_logic;
        -        fmc_la33_n               : inout std_logic;
        -        fmc_la33_p               : inout std_logic;
        -        fmc_prsnt_m2c_l          : in    std_logic;
        -        fmc_pwr_good_flash_rst_b : out   std_logic;  -- multiple destinations: 1 of Q2 (LED DS1 driver), U1 AB2 FPGA_PROG (through series R260 DNP), 44 of U25
        -        --
        -        fpga_awake               : out   std_logic;
        -        fpga_cclk                : out   std_logic;
        -        fpga_cmp_clk             : in    std_logic;
        -        fpga_cmp_mosi            : in    std_logic;
        -        --
        -        fpga_hswapen             : in    std_logic;
        -        fpga_init_b              : out   std_logic;  -- low active
        -        fpga_m0_cmp_miso         : in    std_logic;  -- mode DIP switch SW1 active high
        -        fpga_m1                  : in    std_logic;  -- mode DIP switch SW1 active high
        -        fpga_mosi_csi_b_miso0    : inout std_logic;
        -        fpga_onchip_term1        : inout std_logic;
        -        fpga_onchip_term2        : inout std_logic;
        -        fpga_vtemp               : in    std_logic;
        -        --
        -        -- GPIOs
        -        gpio_button              : in    std_logic_vector(3 downto 0);  -- active high
        -        gpio_header_ls           : inout std_logic_vector(7 downto 0);
        -        gpio_led                 : out   std_logic_vector(3 downto 0);
        -        gpio_switch              : in    std_logic_vector(3 downto 0);  -- active high
        -        --
        -        -- Ethernet Gigabit PHY, 
        -        -- default settings:
        -        -- phy address    = 0b00111
        -        -- ANEG[3..0]     = "1111"
        -        -- ENA_XC         = 1
        -        -- DIS_125        = 1
        -        -- HWCFG_MD[3..0] = "1111"
        -        -- DIS_FC         = 1
        -        -- DIS_SLEEP      = 1
        -        -- SEL_BDT        = 0
        -        -- INT_POL        = 1
        -        -- 75/50Ohm       = 0
        -        phy_col                  : in    std_logic;
        -        phy_crs                  : in    std_logic;
        -        phy_int                  : in    std_logic;
        -        phy_mdc                  : out   std_logic;
        -        phy_mdio                 : inout std_logic;
        -        phy_reset                : out   std_logic;
        -        phy_rxclk                : in    std_logic;
        -        phy_rxctl_rxdv           : in    std_logic;
        -        phy_rxd                  : in    std_logic_vector(7 downto 0);
        -        phy_rxer                 : in    std_logic;
        -        phy_txclk                : in    std_logic;
        -        phy_txctl_txen           : out   std_logic;
        -        phy_txc_gtxclk           : out   std_logic;
        -        phy_txd                  : out   std_logic_vector(7 downto 0);
        -        phy_txer                 : out   std_logic;
        -        --
        -        --
        -        spi_cs_b                 : out   std_logic;
        -        --
        -        -- 200 MHz oscillator, jitter 50 ppm
        -        sysclk_n                 : in    std_logic;
        -        sysclk_p                 : in    std_logic;
        -        --
        -        -- RS232 via USB
        -        usb_1_cts                : out   std_logic;  -- function: RTS output
        -        usb_1_rts                : in    std_logic;  -- function: CTS input
        -        usb_1_rx                 : out   std_logic;  -- function: TX data out
        -        usb_1_tx                 : in    std_logic;  -- function: RX data in
        -        --
        -        --  27 MHz, oscillator socket
        -        user_clock               : in    std_logic;
        -        --
        -        -- user clock provided per SMA
        -        user_sma_clock_p         : in    std_logic;
        -        user_sma_clock_n         : in    std_logic
        -        );
        -end entity top;
        -
        -
        -architecture rtl of top is
        -
        -    ---------------------------
        -    -- type declarations
        -    type zpu_type is (zpu_small, zpu_medium);
        -
        -    ---------------------------
        -    -- constant declarations
        -    constant zpu_flavour   : zpu_type := zpu_medium;  -- choose your flavour HERE
        -    --  modify frequency here
        -    constant clk_multiply  : positive := 2;  -- 2 for small, 2 for medium
        -    constant clk_divide    : positive := 5;  -- 4 for small, 5 for medium
        -    --                     
        -    --                     
        -    constant word_size_c   : natural  := 32;  -- 32 bits data path
        -    constant addr_w_c      : natural  := 18;  -- 18 bits address space=256 kB, 128 kB I/O
        -    --
        -    constant clk_frequency : positive := 200; -- input frequency for correct calculation
        -
        -
        -    ---------------------------
        -    -- component declarations
        -    component zpu_small1 is
        -        generic (
        -            word_size  : natural   := 32;      -- 32 bits data path
        -            d_care_val : std_logic := '0';     -- Fill value
        -            clk_freq   : positive  := 50;      -- 50 MHz clock
        -            brate      : positive  := 115200;  -- RS232 baudrate
        -            addr_w     : natural   := 16;      -- 16 bits address space=64 kB, 32 kB I/O
        -            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        -            );
        -        port (
        -            clk_i      : in  std_logic;        -- CPU clock
        -            rst_i      : in  std_logic;        -- Reset
        -            break_o    : out std_logic;        -- Break executed
        -            dbg_o      : out zpu_dbgo_t;       -- Debug info
        -            rs232_tx_o : out std_logic;        -- UART Tx
        -            rs232_rx_i : in  std_logic         -- UART Rx
        -            );
        -    end component zpu_small1;
        -
        -    component zpu_med1 is
        -        generic(
        -            word_size  : natural   := 32;      -- 32 bits data path
        -            d_care_val : std_logic := '0';     -- Fill value
        -            clk_freq   : positive  := 50;      -- 50 MHz clock
        -            brate      : positive  := 115200;  -- RS232 baudrate
        -            addr_w     : natural   := 18;      -- 18 bits address space=256 kB, 128 kB I/O
        -            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        -            );
        -        port(
        -            clk_i      : in  std_logic;        -- CPU clock
        -            rst_i      : in  std_logic;        -- Reset
        -            break_o    : out std_logic;        -- Break executed
        -            dbg_o      : out zpu_dbgo_t;       -- Debug info
        -            rs232_tx_o : out std_logic;        -- UART Tx
        -            rs232_rx_i : in  std_logic         -- UART Rx
        -            );
        -    end component zpu_med1;
        -
        -
        -    ---------------------------
        -    -- signal declarations
        -    signal sys_clk         : std_ulogic;
        -    signal dcm_sp_i0_clk0  : std_ulogic;
        -    signal dcm_sp_i0_clkfx : std_ulogic;
        -    signal clk_fb          : std_ulogic;
        -    signal clk             : std_ulogic;
        -    --
        -    signal reset_shift_reg : std_ulogic_vector(3 downto 0);
        -    signal reset_sync      : std_ulogic;
        -    --
        -    signal zpu_i0_dbg      : zpu_dbgo_t;  -- Debug info
        -    signal zpu_i0_break    : std_logic;
        -
        -
        -begin
        -
        -    -- default output drivers
        -    -- to pass bitgen DRC 
        -    -- outputs used by design are commented
        -    --
        -    ddr2_a                   <= (others => '1');
        -    ddr2_ba                  <= (others => '1');
        -    ddr2_cas_b               <= '1';
        -    ddr2_ras_b               <= '1';
        -    ddr2_we_b                <= '1';
        -    ddr2_cke                 <= '0';
        -    ddr2_clk_n               <= '0';
        -    ddr2_clk_p               <= '1';
        -    ddr2_dq                  <= (others => 'Z');
        -    ddr2_ldm                 <= '0';
        -    ddr2_udm                 <= '0';
        -    ddr2_ldqs_n              <= 'Z';
        -    ddr2_ldqs_p              <= 'Z';
        -    ddr2_udqs_n              <= 'Z';
        -    ddr2_udqs_p              <= 'Z';
        -    ddr2_odt                 <= '1';
        -    --
        -    flash_a                  <= (others => '1');
        -    flash_d                  <= (others => 'Z');
        -    flash_we_b               <= '1';
        -    flash_oe_b               <= '1';
        -    flash_ce_b               <= '1';
        -    --
        -    fpga_d0_din_miso_miso1   <= 'Z';
        -    fpga_d1_miso2            <= 'Z';
        -    fpga_d2_miso3            <= 'Z';
        -    --
        -    iic_scl_main             <= 'Z';
        -    iic_sda_main             <= 'Z';
        -    fmc_la00_cc_n            <= 'Z';
        -    fmc_la00_cc_p            <= 'Z';
        -    fmc_la01_cc_n            <= 'Z';
        -    fmc_la01_cc_p            <= 'Z';
        -    fmc_la02_n               <= 'Z';
        -    fmc_la02_p               <= 'Z';
        -    fmc_la03_n               <= 'Z';
        -    fmc_la03_p               <= 'Z';
        -    fmc_la04_n               <= 'Z';
        -    fmc_la04_p               <= 'Z';
        -    fmc_la05_n               <= 'Z';
        -    fmc_la05_p               <= 'Z';
        -    fmc_la06_n               <= 'Z';
        -    fmc_la06_p               <= 'Z';
        -    fmc_la07_n               <= 'Z';
        -    fmc_la07_p               <= 'Z';
        -    fmc_la08_n               <= 'Z';
        -    fmc_la08_p               <= 'Z';
        -    fmc_la09_n               <= 'Z';
        -    fmc_la09_p               <= 'Z';
        -    fmc_la10_n               <= 'Z';
        -    fmc_la10_p               <= 'Z';
        -    fmc_la11_n               <= 'Z';
        -    fmc_la11_p               <= 'Z';
        -    fmc_la12_n               <= 'Z';
        -    fmc_la12_p               <= 'Z';
        -    fmc_la13_n               <= 'Z';
        -    fmc_la13_p               <= 'Z';
        -    fmc_la14_n               <= 'Z';
        -    fmc_la14_p               <= 'Z';
        -    fmc_la15_n               <= 'Z';
        -    fmc_la15_p               <= 'Z';
        -    fmc_la16_n               <= 'Z';
        -    fmc_la16_p               <= 'Z';
        -    fmc_la17_cc_n            <= 'Z';
        -    fmc_la17_cc_p            <= 'Z';
        -    fmc_la18_cc_n            <= 'Z';
        -    fmc_la18_cc_p            <= 'Z';
        -    fmc_la19_n               <= 'Z';
        -    fmc_la19_p               <= 'Z';
        -    fmc_la20_n               <= 'Z';
        -    fmc_la20_p               <= 'Z';
        -    fmc_la21_n               <= 'Z';
        -    fmc_la21_p               <= 'Z';
        -    fmc_la22_n               <= 'Z';
        -    fmc_la22_p               <= 'Z';
        -    fmc_la23_n               <= 'Z';
        -    fmc_la23_p               <= 'Z';
        -    fmc_la24_n               <= 'Z';
        -    fmc_la24_p               <= 'Z';
        -    fmc_la25_n               <= 'Z';
        -    fmc_la25_p               <= 'Z';
        -    fmc_la26_n               <= 'Z';
        -    fmc_la26_p               <= 'Z';
        -    fmc_la27_n               <= 'Z';
        -    fmc_la27_p               <= 'Z';
        -    fmc_la28_n               <= 'Z';
        -    fmc_la28_p               <= 'Z';
        -    fmc_la29_n               <= 'Z';
        -    fmc_la29_p               <= 'Z';
        -    fmc_la30_n               <= 'Z';
        -    fmc_la30_p               <= 'Z';
        -    fmc_la31_n               <= 'Z';
        -    fmc_la31_p               <= 'Z';
        -    fmc_la32_n               <= 'Z';
        -    fmc_la32_p               <= 'Z';
        -    fmc_la33_n               <= 'Z';
        -    fmc_la33_p               <= 'Z';
        -    fmc_pwr_good_flash_rst_b <= '1';
        -    --
        -    fpga_awake               <= '1';
        -    fpga_cclk                <= '1';    -- SPI clk
        -    fpga_init_b              <= '1';
        -    fpga_mosi_csi_b_miso0    <= 'Z';
        -    fpga_onchip_term1        <= 'Z';
        -    fpga_onchip_term2        <= 'Z';
        -    --
        -    --gpio_led               <= (others => '0'); 
        -    gpio_header_ls           <= (others => 'Z');
        -    --
        -    phy_mdc                  <= '0';
        -    phy_mdio                 <= 'Z';
        -    phy_reset                <= '0';
        -    phy_txc_gtxclk           <= '0';
        -    phy_txctl_txen           <= '0';
        -    phy_txd                  <= (others => '1');
        -    phy_txer                 <= '0';
        -    --
        -    spi_cs_b                 <= '1';
        -    --
        -    --usb_1_rx               <= '1';    -- function: TX data out
        -    usb_1_cts                <= '1';    -- function: RTS
        -
        -
        -    -- global differential input buffer 
        -    ibufgds_i0 : ibufgds
        -        generic map (
        -            diff_term => true
        -            )
        -        port map (
        -            i  => sysclk_p,
        -            ib => sysclk_n,
        -            o  => sys_clk
        -            );
        -
        -    -- digital clock manager (DCM)
        -    -- to generate higher/other system clock frequencys
        -    dcm_sp_i0 : dcm_sp
        -        generic map (
        -            startup_wait   => true,     -- wait with DONE till locked
        -            clkfx_multiply => clk_multiply,        
        -            clkfx_divide   => clk_divide,        
        -            clk_feedback   => "1X"
        -            )
        -        port map (
        -            clkin => sys_clk,
        -            clk0  => dcm_sp_i0_clk0,
        -            clkfx => dcm_sp_i0_clkfx,
        -            clkfb => clk_fb
        -            );
        -
        -    clk_fb <= dcm_sp_i0_clk0;
        -    clk    <= dcm_sp_i0_clkfx;
        -
        -
        -    -- reset synchronizer
        -    -- generate synchronous reset
        -    reset_synchronizer : process(clk, cpu_reset)
        -    begin
        -        if cpu_reset = '1' then
        -            reset_shift_reg <= (others => '1');
        -        elsif rising_edge(clk) then
        -            reset_shift_reg <= reset_shift_reg(reset_shift_reg'high-1 downto 0) & '0';
        -        end if;
        -    end process;
        -    reset_sync <= reset_shift_reg(reset_shift_reg'high);
        -
        -
        -
        -    -- select instance of zpu
        -    zpu_i0_small : if zpu_flavour = zpu_small generate
        -        zpu_i0 : zpu_small1
        -            generic map (
        -                addr_w    => addr_w_c,
        -                word_size => word_size_c,
        -                clk_freq  => clk_frequency * clk_multiply / clk_divide
        -                )
        -            port map (
        -                clk_i      => clk,           -- : in  std_logic;   -- CPU clock
        -                rst_i      => reset_sync,    -- : in  std_logic;   -- Reset
        -                break_o    => zpu_i0_break,  -- : out std_logic;   -- Break executed
        -                dbg_o      => zpu_i0_dbg,    -- : out zpu_dbgo_t;  -- Debug info
        -                rs232_tx_o => usb_1_rx,      -- : out std_logic;   -- UART Tx
        -                rs232_rx_i => usb_1_tx       -- : in  std_logic    -- UART Rx
        -                );
        -    end generate zpu_i0_small;
        -
        -    zpu_i0_medium : if zpu_flavour = zpu_medium generate
        -        zpu_i0 : zpu_med1
        -            generic map (
        -                addr_w    => addr_w_c,
        -                word_size => word_size_c,
        -                clk_freq  => clk_frequency * clk_multiply / clk_divide
        -                )
        -            port map (
        -                clk_i      => clk,           -- : in  std_logic;   -- CPU clock
        -                rst_i      => reset_sync,    -- : in  std_logic;   -- Reset
        -                break_o    => zpu_i0_break,  -- : out std_logic;   -- Break executed
        -                dbg_o      => zpu_i0_dbg,    -- : out zpu_dbgo_t;  -- Debug info
        -                rs232_tx_o => usb_1_rx,      -- : out std_logic;   -- UART Tx
        -                rs232_rx_i => usb_1_tx       -- : in  std_logic    -- UART Rx
        -                );
        -    end generate zpu_i0_medium;
        -
        -
        -    -- pragma translate_off 
        -    stop_simulation <= zpu_i0_break;
        - 
        -
        -    trace_mod : trace
        -        generic map (
        -            addr_w    => addr_w_c,
        -            word_size => word_size_c,
        -            log_file  => "zpu_trace.log"
        -            )
        -        port map (
        -            clk_i  => clk,
        -            dbg_i  => zpu_i0_dbg,
        -            stop_i => zpu_i0_break,
        -            busy_i => '0'
        -            );
        -    -- pragma translate_on
        -
        -
        -    -- switch on all LEDs in case of break
        -    process
        -    begin
        -        wait until rising_edge(clk);
        -        if zpu_i0_break = '1' then
        -            gpio_led <= (others => '1');
        -        end if;
        -        if reset_sync = '1' then
        -            gpio_led <= (others => '0');
        -        end if;
        -    end process;
        -
        -    
        -
        -end architecture rtl;
        +-- top module of
        +-- SP601 evaluation board
        +--
        +-- using following external connections:
        +--
        +-- cpu_reset (SW9)      reset
        +-- LEDs                 output
        +-- USB_UART             communication 
        +--
        +
        +
        +library ieee;
        +use ieee.std_logic_1164.all;
        +
        +library zpu;
        +use zpu.zpupkg.all;                     -- zpu_dbgo_t
        +
        +library unisim;
        +use unisim.vcomponents.ibufgds;
        +use unisim.vcomponents.dcm_sp;
        +
        +
        +entity top is
        +    port (
        +        -- pragma translate_off 
        +        stop_simulation          : out   std_logic;
        +        -- pragma translate_on 
        +        --
        +        cpu_reset                : in    std_logic;  -- SW9 pushbutton (active-high)
        +        --
        +        -- DDR2 memory 128 MB
        +        ddr2_a                   : out   std_logic_vector(12 downto 0);
        +        ddr2_ba                  : out   std_logic_vector(2 downto 0);
        +        ddr2_cas_b               : out   std_logic;
        +        ddr2_ras_b               : out   std_logic;
        +        ddr2_we_b                : out   std_logic;
        +        ddr2_cke                 : out   std_logic;
        +        ddr2_clk_n               : out   std_logic;
        +        ddr2_clk_p               : out   std_logic;
        +        ddr2_dq                  : inout std_logic_vector(15 downto 0);
        +        ddr2_ldm                 : out   std_logic;
        +        ddr2_udm                 : out   std_logic;
        +        ddr2_ldqs_n              : inout std_logic;
        +        ddr2_ldqs_p              : inout std_logic;
        +        ddr2_udqs_n              : inout std_logic;
        +        ddr2_udqs_p              : inout std_logic;
        +        ddr2_odt                 : out   std_logic;
        +        --                                
        +        -- flash memory                        
        +        flash_a                  : out   std_logic_vector(24 downto 0);
        +        flash_d                  : inout std_logic_vector(7 downto 3);
        +        --
        +        fpga_d0_din_miso_miso1   : inout std_logic;  -- dual use
        +        fpga_d1_miso2            : inout std_logic;  -- dual use
        +        fpga_d2_miso3            : inout std_logic;  -- dual use
        +        flash_we_b               : out   std_logic;
        +        flash_oe_b               : out   std_logic;
        +        flash_ce_b               : out   std_logic;
        +        --
        +        -- FMC connector
        +        -- M2C   Mezzanine to Carrier
        +        -- C2M   Carrier to Mezzanine
        +        fmc_clk0_m2c_n           : in    std_logic;
        +        fmc_clk0_m2c_p           : in    std_logic;
        +        fmc_clk1_m2c_n           : in    std_logic;
        +        fmc_clk1_m2c_p           : in    std_logic;
        +        -- IIC addresses:
        +        -- M24C08:                 1010100..1010111
        +        -- 2kb EEPROM on FMC card: 1010010
        +        iic_scl_main             : inout std_logic;
        +        iic_sda_main             : inout std_logic;
        +        fmc_la00_cc_n            : inout std_logic;
        +        fmc_la00_cc_p            : inout std_logic;
        +        fmc_la01_cc_n            : inout std_logic;
        +        fmc_la01_cc_p            : inout std_logic;
        +        fmc_la02_n               : inout std_logic;
        +        fmc_la02_p               : inout std_logic;
        +        fmc_la03_n               : inout std_logic;
        +        fmc_la03_p               : inout std_logic;
        +        fmc_la04_n               : inout std_logic;
        +        fmc_la04_p               : inout std_logic;
        +        fmc_la05_n               : inout std_logic;
        +        fmc_la05_p               : inout std_logic;
        +        fmc_la06_n               : inout std_logic;
        +        fmc_la06_p               : inout std_logic;
        +        fmc_la07_n               : inout std_logic;
        +        fmc_la07_p               : inout std_logic;
        +        fmc_la08_n               : inout std_logic;
        +        fmc_la08_p               : inout std_logic;
        +        fmc_la09_n               : inout std_logic;
        +        fmc_la09_p               : inout std_logic;
        +        fmc_la10_n               : inout std_logic;
        +        fmc_la10_p               : inout std_logic;
        +        fmc_la11_n               : inout std_logic;
        +        fmc_la11_p               : inout std_logic;
        +        fmc_la12_n               : inout std_logic;
        +        fmc_la12_p               : inout std_logic;
        +        fmc_la13_n               : inout std_logic;
        +        fmc_la13_p               : inout std_logic;
        +        fmc_la14_n               : inout std_logic;
        +        fmc_la14_p               : inout std_logic;
        +        fmc_la15_n               : inout std_logic;
        +        fmc_la15_p               : inout std_logic;
        +        fmc_la16_n               : inout std_logic;
        +        fmc_la16_p               : inout std_logic;
        +        fmc_la17_cc_n            : inout std_logic;
        +        fmc_la17_cc_p            : inout std_logic;
        +        fmc_la18_cc_n            : inout std_logic;
        +        fmc_la18_cc_p            : inout std_logic;
        +        fmc_la19_n               : inout std_logic;
        +        fmc_la19_p               : inout std_logic;
        +        fmc_la20_n               : inout std_logic;
        +        fmc_la20_p               : inout std_logic;
        +        fmc_la21_n               : inout std_logic;
        +        fmc_la21_p               : inout std_logic;
        +        fmc_la22_n               : inout std_logic;
        +        fmc_la22_p               : inout std_logic;
        +        fmc_la23_n               : inout std_logic;
        +        fmc_la23_p               : inout std_logic;
        +        fmc_la24_n               : inout std_logic;
        +        fmc_la24_p               : inout std_logic;
        +        fmc_la25_n               : inout std_logic;
        +        fmc_la25_p               : inout std_logic;
        +        fmc_la26_n               : inout std_logic;
        +        fmc_la26_p               : inout std_logic;
        +        fmc_la27_n               : inout std_logic;
        +        fmc_la27_p               : inout std_logic;
        +        fmc_la28_n               : inout std_logic;
        +        fmc_la28_p               : inout std_logic;
        +        fmc_la29_n               : inout std_logic;
        +        fmc_la29_p               : inout std_logic;
        +        fmc_la30_n               : inout std_logic;
        +        fmc_la30_p               : inout std_logic;
        +        fmc_la31_n               : inout std_logic;
        +        fmc_la31_p               : inout std_logic;
        +        fmc_la32_n               : inout std_logic;
        +        fmc_la32_p               : inout std_logic;
        +        fmc_la33_n               : inout std_logic;
        +        fmc_la33_p               : inout std_logic;
        +        fmc_prsnt_m2c_l          : in    std_logic;
        +        fmc_pwr_good_flash_rst_b : out   std_logic;  -- multiple destinations: 1 of Q2 (LED DS1 driver), U1 AB2 FPGA_PROG (through series R260 DNP), 44 of U25
        +        --
        +        fpga_awake               : out   std_logic;
        +        fpga_cclk                : out   std_logic;
        +        fpga_cmp_clk             : in    std_logic;
        +        fpga_cmp_mosi            : in    std_logic;
        +        --
        +        fpga_hswapen             : in    std_logic;
        +        fpga_init_b              : out   std_logic;  -- low active
        +        fpga_m0_cmp_miso         : in    std_logic;  -- mode DIP switch SW1 active high
        +        fpga_m1                  : in    std_logic;  -- mode DIP switch SW1 active high
        +        fpga_mosi_csi_b_miso0    : inout std_logic;
        +        fpga_onchip_term1        : inout std_logic;
        +        fpga_onchip_term2        : inout std_logic;
        +        fpga_vtemp               : in    std_logic;
        +        --
        +        -- GPIOs
        +        gpio_button              : in    std_logic_vector(3 downto 0);  -- active high
        +        gpio_header_ls           : inout std_logic_vector(7 downto 0);
        +        gpio_led                 : out   std_logic_vector(3 downto 0);
        +        gpio_switch              : in    std_logic_vector(3 downto 0);  -- active high
        +        --
        +        -- Ethernet Gigabit PHY, 
        +        -- default settings:
        +        -- phy address    = 0b00111
        +        -- ANEG[3..0]     = "1111"
        +        -- ENA_XC         = 1
        +        -- DIS_125        = 1
        +        -- HWCFG_MD[3..0] = "1111"
        +        -- DIS_FC         = 1
        +        -- DIS_SLEEP      = 1
        +        -- SEL_BDT        = 0
        +        -- INT_POL        = 1
        +        -- 75/50Ohm       = 0
        +        phy_col                  : in    std_logic;
        +        phy_crs                  : in    std_logic;
        +        phy_int                  : in    std_logic;
        +        phy_mdc                  : out   std_logic;
        +        phy_mdio                 : inout std_logic;
        +        phy_reset                : out   std_logic;
        +        phy_rxclk                : in    std_logic;
        +        phy_rxctl_rxdv           : in    std_logic;
        +        phy_rxd                  : in    std_logic_vector(7 downto 0);
        +        phy_rxer                 : in    std_logic;
        +        phy_txclk                : in    std_logic;
        +        phy_txctl_txen           : out   std_logic;
        +        phy_txc_gtxclk           : out   std_logic;
        +        phy_txd                  : out   std_logic_vector(7 downto 0);
        +        phy_txer                 : out   std_logic;
        +        --
        +        --
        +        spi_cs_b                 : out   std_logic;
        +        --
        +        -- 200 MHz oscillator, jitter 50 ppm
        +        sysclk_n                 : in    std_logic;
        +        sysclk_p                 : in    std_logic;
        +        --
        +        -- RS232 via USB
        +        usb_1_cts                : out   std_logic;  -- function: RTS output
        +        usb_1_rts                : in    std_logic;  -- function: CTS input
        +        usb_1_rx                 : out   std_logic;  -- function: TX data out
        +        usb_1_tx                 : in    std_logic;  -- function: RX data in
        +        --
        +        --  27 MHz, oscillator socket
        +        user_clock               : in    std_logic;
        +        --
        +        -- user clock provided per SMA
        +        user_sma_clock_p         : in    std_logic;
        +        user_sma_clock_n         : in    std_logic
        +        );
        +end entity top;
        +
        +
        +architecture rtl of top is
        +
        +    ---------------------------
        +    -- type declarations
        +    type zpu_type is (zpu_small, zpu_medium);
        +
        +    ---------------------------
        +    -- constant declarations
        +    constant zpu_flavour   : zpu_type := zpu_medium;  -- choose your flavour HERE
        +    --  modify frequency here
        +    constant clk_multiply  : positive := 2;  -- 2 for small, 2 for medium
        +    constant clk_divide    : positive := 5;  -- 4 for small, 5 for medium
        +    --
        +    --
        +    constant word_size_c   : natural  := 32;  -- 32 bits data path
        +    constant addr_w_c      : natural  := 18;  -- 18 bits address space=256 kB, 128 kB I/O
        +    --
        +    constant clk_frequency : positive := 200; -- input frequency for correct calculation
        +
        +
        +    ---------------------------
        +    -- component declarations
        +    component zpu_small1 is
        +        generic (
        +            word_size  : natural   := 32;      -- 32 bits data path
        +            d_care_val : std_logic := '0';     -- Fill value
        +            clk_freq   : positive  := 50;      -- 50 MHz clock
        +            brate      : positive  := 115200;  -- RS232 baudrate
        +            addr_w     : natural   := 16;      -- 16 bits address space=64 kB, 32 kB I/O
        +            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        +            );
        +        port (
        +            clk_i      : in  std_logic;        -- CPU clock
        +            rst_i      : in  std_logic;        -- Reset
        +            break_o    : out std_logic;        -- Break executed
        +            dbg_o      : out zpu_dbgo_t;       -- Debug info
        +            rs232_tx_o : out std_logic;        -- UART Tx
        +            rs232_rx_i : in  std_logic;        -- UART Rx
        +            gpio_in    : in  std_logic_vector(31 downto 0);
        +            gpio_out   : out std_logic_vector(31 downto 0);
        +            gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +            );
        +    end component zpu_small1;
        +
        +    component zpu_med1 is
        +        generic(
        +            word_size  : natural   := 32;      -- 32 bits data path
        +            d_care_val : std_logic := '0';     -- Fill value
        +            clk_freq   : positive  := 50;      -- 50 MHz clock
        +            brate      : positive  := 115200;  -- RS232 baudrate
        +            addr_w     : natural   := 18;      -- 18 bits address space=256 kB, 128 kB I/O
        +            bram_w     : natural   := 15       -- 15 bits RAM space=32 kB
        +            );
        +        port(
        +            clk_i      : in  std_logic;        -- CPU clock
        +            rst_i      : in  std_logic;        -- Reset
        +            break_o    : out std_logic;        -- Break executed
        +            dbg_o      : out zpu_dbgo_t;       -- Debug info
        +            rs232_tx_o : out std_logic;        -- UART Tx
        +            rs232_rx_i : in  std_logic;        -- UART Rx
        +            gpio_in    : in  std_logic_vector(31 downto 0);
        +            gpio_out   : out std_logic_vector(31 downto 0);
        +            gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +            );
        +    end component zpu_med1;
        +
        +
        +
        +    ---------------------------
        +    -- signal declarations
        +    signal sys_clk           : std_ulogic;
        +    signal dcm_sp_i0_clk0    : std_ulogic;
        +    signal dcm_sp_i0_clkfx   : std_ulogic;
        +    signal clk_fb            : std_ulogic;
        +    signal clk               : std_ulogic;
        +    --
        +    signal reset_shift_reg   : std_ulogic_vector(3 downto 0);
        +    signal reset_sync        : std_ulogic;
        +    --
        +    signal zpu_i0_dbg        : zpu_dbgo_t;  -- Debug info
        +    signal zpu_i0_break      : std_logic;
        +    --
        +    signal gpio_in           : std_logic_vector(31 downto 0) := (others => '0');
        +    signal zpu_i0_gpio_out   : std_logic_vector(31 downto 0);
        +    signal zpu_i0_gpio_dir   : std_logic_vector(31 downto 0);
        +
        +
        +begin
        +
        +    -- default output drivers
        +    -- to pass bitgen DRC 
        +    -- outputs used by design are commented
        +    --
        +    ddr2_a                   <= (others => '1');
        +    ddr2_ba                  <= (others => '1');
        +    ddr2_cas_b               <= '1';
        +    ddr2_ras_b               <= '1';
        +    ddr2_we_b                <= '1';
        +    ddr2_cke                 <= '0';
        +    ddr2_clk_n               <= '0';
        +    ddr2_clk_p               <= '1';
        +    ddr2_dq                  <= (others => 'Z');
        +    ddr2_ldm                 <= '0';
        +    ddr2_udm                 <= '0';
        +    ddr2_ldqs_n              <= 'Z';
        +    ddr2_ldqs_p              <= 'Z';
        +    ddr2_udqs_n              <= 'Z';
        +    ddr2_udqs_p              <= 'Z';
        +    ddr2_odt                 <= '1';
        +    --
        +    flash_a                  <= (others => '1');
        +    flash_d                  <= (others => 'Z');
        +    flash_we_b               <= '1';
        +    flash_oe_b               <= '1';
        +    flash_ce_b               <= '1';
        +    --
        +    fpga_d0_din_miso_miso1   <= 'Z';
        +    fpga_d1_miso2            <= 'Z';
        +    fpga_d2_miso3            <= 'Z';
        +    --
        +    iic_scl_main             <= 'Z';
        +    iic_sda_main             <= 'Z';
        +    fmc_la00_cc_n            <= 'Z';
        +    fmc_la00_cc_p            <= 'Z';
        +    fmc_la01_cc_n            <= 'Z';
        +    fmc_la01_cc_p            <= 'Z';
        +    fmc_la02_n               <= 'Z';
        +    fmc_la02_p               <= 'Z';
        +    fmc_la03_n               <= 'Z';
        +    fmc_la03_p               <= 'Z';
        +    fmc_la04_n               <= 'Z';
        +    fmc_la04_p               <= 'Z';
        +    fmc_la05_n               <= 'Z';
        +    fmc_la05_p               <= 'Z';
        +    fmc_la06_n               <= 'Z';
        +    fmc_la06_p               <= 'Z';
        +    fmc_la07_n               <= 'Z';
        +    fmc_la07_p               <= 'Z';
        +    fmc_la08_n               <= 'Z';
        +    fmc_la08_p               <= 'Z';
        +    fmc_la09_n               <= 'Z';
        +    fmc_la09_p               <= 'Z';
        +    fmc_la10_n               <= 'Z';
        +    fmc_la10_p               <= 'Z';
        +    fmc_la11_n               <= 'Z';
        +    fmc_la11_p               <= 'Z';
        +    fmc_la12_n               <= 'Z';
        +    fmc_la12_p               <= 'Z';
        +    fmc_la13_n               <= 'Z';
        +    fmc_la13_p               <= 'Z';
        +    fmc_la14_n               <= 'Z';
        +    fmc_la14_p               <= 'Z';
        +    fmc_la15_n               <= 'Z';
        +    fmc_la15_p               <= 'Z';
        +    fmc_la16_n               <= 'Z';
        +    fmc_la16_p               <= 'Z';
        +    fmc_la17_cc_n            <= 'Z';
        +    fmc_la17_cc_p            <= 'Z';
        +    fmc_la18_cc_n            <= 'Z';
        +    fmc_la18_cc_p            <= 'Z';
        +    fmc_la19_n               <= 'Z';
        +    fmc_la19_p               <= 'Z';
        +    fmc_la20_n               <= 'Z';
        +    fmc_la20_p               <= 'Z';
        +    fmc_la21_n               <= 'Z';
        +    fmc_la21_p               <= 'Z';
        +    fmc_la22_n               <= 'Z';
        +    fmc_la22_p               <= 'Z';
        +    fmc_la23_n               <= 'Z';
        +    fmc_la23_p               <= 'Z';
        +    fmc_la24_n               <= 'Z';
        +    fmc_la24_p               <= 'Z';
        +    fmc_la25_n               <= 'Z';
        +    fmc_la25_p               <= 'Z';
        +    fmc_la26_n               <= 'Z';
        +    fmc_la26_p               <= 'Z';
        +    fmc_la27_n               <= 'Z';
        +    fmc_la27_p               <= 'Z';
        +    fmc_la28_n               <= 'Z';
        +    fmc_la28_p               <= 'Z';
        +    fmc_la29_n               <= 'Z';
        +    fmc_la29_p               <= 'Z';
        +    fmc_la30_n               <= 'Z';
        +    fmc_la30_p               <= 'Z';
        +    fmc_la31_n               <= 'Z';
        +    fmc_la31_p               <= 'Z';
        +    fmc_la32_n               <= 'Z';
        +    fmc_la32_p               <= 'Z';
        +    fmc_la33_n               <= 'Z';
        +    fmc_la33_p               <= 'Z';
        +    fmc_pwr_good_flash_rst_b <= '1';
        +    --
        +    fpga_awake               <= '1';
        +    fpga_cclk                <= '1';    -- SPI clk
        +    fpga_init_b              <= '1';
        +    fpga_mosi_csi_b_miso0    <= 'Z';
        +    fpga_onchip_term1        <= 'Z';
        +    fpga_onchip_term2        <= 'Z';
        +    --
        +    --gpio_led               <= (others => '0'); 
        +    --gpio_header_ls         <= (others => 'Z');
        +    --
        +    phy_mdc                  <= '0';
        +    phy_mdio                 <= 'Z';
        +    phy_reset                <= '0';
        +    phy_txc_gtxclk           <= '0';
        +    phy_txctl_txen           <= '0';
        +    phy_txd                  <= (others => '1');
        +    phy_txer                 <= '0';
        +    --
        +    spi_cs_b                 <= '1';
        +    --
        +    --usb_1_rx               <= '1';    -- function: TX data out
        +    usb_1_cts                <= '1';    -- function: RTS
        +
        +
        +    -- global differential input buffer 
        +    ibufgds_i0 : ibufgds
        +        generic map (
        +            diff_term => true
        +            )
        +        port map (
        +            i  => sysclk_p,
        +            ib => sysclk_n,
        +            o  => sys_clk
        +            );
        +
        +    -- digital clock manager (DCM)
        +    -- to generate higher/other system clock frequencys
        +    dcm_sp_i0 : dcm_sp
        +        generic map (
        +            startup_wait   => true,     -- wait with DONE till locked
        +            clkfx_multiply => clk_multiply,        
        +            clkfx_divide   => clk_divide,        
        +            clk_feedback   => "1X"
        +            )
        +        port map (
        +            clkin => sys_clk,
        +            clk0  => dcm_sp_i0_clk0,
        +            clkfx => dcm_sp_i0_clkfx,
        +            clkfb => clk_fb
        +            );
        +
        +    clk_fb <= dcm_sp_i0_clk0;
        +    clk    <= dcm_sp_i0_clkfx;
        +
        +
        +    -- reset synchronizer
        +    -- generate synchronous reset
        +    reset_synchronizer : process(clk, cpu_reset)
        +    begin
        +        if cpu_reset = '1' then
        +            reset_shift_reg <= (others => '1');
        +        elsif rising_edge(clk) then
        +            reset_shift_reg <= reset_shift_reg(reset_shift_reg'high-1 downto 0) & '0';
        +        end if;
        +    end process;
        +    reset_sync <= reset_shift_reg(reset_shift_reg'high);
        +
        +
        +
        +    -- select instance of zpu
        +    zpu_i0_small: if zpu_flavour = zpu_small generate
        +        zpu_i0 : zpu_small1
        +            generic map (
        +                addr_w    => addr_w_c,
        +                word_size => word_size_c,
        +                clk_freq  => clk_frequency * clk_multiply / clk_divide
        +                )
        +            port map (
        +                clk_i      => clk,             -- : in  std_logic;   -- CPU clock
        +                rst_i      => reset_sync,      -- : in  std_logic;   -- Reset
        +                break_o    => zpu_i0_break,    -- : out std_logic;   -- Break executed
        +                dbg_o      => zpu_i0_dbg,      -- : out zpu_dbgo_t;  -- Debug info
        +                rs232_tx_o => usb_1_rx,        -- : out std_logic;   -- UART Tx
        +                rs232_rx_i => usb_1_tx,        -- : in  std_logic    -- UART Rx
        +                gpio_in    => gpio_in,         -- : in  std_logic_vector(31 downto 0);
        +                gpio_out   => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0);
        +                gpio_dir   => zpu_i0_gpio_dir  -- : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +                );
        +    end generate zpu_i0_small;
        +
        +    zpu_i0_medium: if zpu_flavour = zpu_medium generate
        +        zpu_i0 : zpu_med1
        +            generic map (
        +                addr_w    => addr_w_c,
        +                word_size => word_size_c,
        +                clk_freq  => clk_frequency * clk_multiply / clk_divide
        +                )
        +            port map (
        +                clk_i      => clk,             -- : in  std_logic;   -- CPU clock
        +                rst_i      => reset_sync,      -- : in  std_logic;   -- Reset
        +                break_o    => zpu_i0_break,    -- : out std_logic;   -- Break executed
        +                dbg_o      => zpu_i0_dbg,      -- : out zpu_dbgo_t;  -- Debug info
        +                rs232_tx_o => usb_1_rx,        -- : out std_logic;   -- UART Tx
        +                rs232_rx_i => usb_1_tx,        -- : in  std_logic    -- UART Rx
        +                gpio_in    => gpio_in,         -- : in  std_logic_vector(31 downto 0);
        +                gpio_out   => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0);
        +                gpio_dir   => zpu_i0_gpio_dir  -- : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +                );
        +    end generate zpu_i0_medium;
        +
        +
        +    -- pragma translate_off 
        +    stop_simulation <= zpu_i0_break; -- abort() causes to stop the simulation
        +
        + 
        +
        +    trace_mod : trace
        +        generic map (
        +            addr_w    => addr_w_c,
        +            word_size => word_size_c,
        +            log_file  => "zpu_trace.log"
        +            )
        +        port map (
        +            clk_i  => clk,
        +            dbg_i  => zpu_i0_dbg,
        +            stop_i => zpu_i0_break,
        +            busy_i => '0'
        +            );
        +    -- pragma translate_on
        +
        +    -- assign GPIOs
        +    gpio_in(23 downto 16) <= gpio_header_ls;
        +    gpio_in(11 downto  8) <= gpio_switch;
        +    gpio_in( 3 downto  0) <= gpio_button;
        +
        +    -- 3-state buffers for header_ls
        +    gpio_header_ls(7) <= zpu_i0_gpio_out(23) when zpu_i0_gpio_dir(23) = '0' else 'Z';
        +    gpio_header_ls(6) <= zpu_i0_gpio_out(22) when zpu_i0_gpio_dir(22) = '0' else 'Z';
        +    gpio_header_ls(5) <= zpu_i0_gpio_out(21) when zpu_i0_gpio_dir(21) = '0' else 'Z';
        +    gpio_header_ls(4) <= zpu_i0_gpio_out(20) when zpu_i0_gpio_dir(20) = '0' else 'Z';
        +    gpio_header_ls(3) <= zpu_i0_gpio_out(19) when zpu_i0_gpio_dir(19) = '0' else 'Z';
        +    gpio_header_ls(2) <= zpu_i0_gpio_out(18) when zpu_i0_gpio_dir(18) = '0' else 'Z';
        +    gpio_header_ls(1) <= zpu_i0_gpio_out(17) when zpu_i0_gpio_dir(17) = '0' else 'Z';
        +    gpio_header_ls(0) <= zpu_i0_gpio_out(16) when zpu_i0_gpio_dir(16) = '0' else 'Z';
        +
        +    -- switch on all LEDs in case of break
        +    process
        +    begin
        +        wait until rising_edge(clk);
        +        gpio_led <= zpu_i0_gpio_out(3 downto 0); 
        +        if zpu_i0_break = '1' then
        +            gpio_led <= (others => '1');
        +        end if;
        +    end process;
        +
        +
        +
        +end architecture rtl;
        diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top_tb.vhd b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top_tb.vhd
        index b09b144..f089f29 100644
        --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top_tb.vhd
        +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top_tb.vhd
        @@ -1,398 +1,402 @@
        --- testbench for 
        --- SP601 evaluation board
        ---
        --- includes "model" for clock generation
        --- simulate press on cpu_reset as reset
        ---
        --- place models for external components (PHY, DDR2) in this file
        ---
        -
        -
        -library ieee;
        -use ieee.std_logic_1164.all;
        -
        -
        -entity top_tb is
        -end entity top_tb;
        -
        -architecture testbench of top_tb is
        -
        -    ---------------------------
        -    -- constant declarations
        -    constant sys_clk_period  : time := 1 sec / 200_000_000;  -- 200 MHz
        -    constant user_clk_period : time := 1 sec / 27_000_000;   -- 27 MHz
        -
        -
        -    ---------------------------
        -    -- signal declarations
        -    signal simulation_run              : boolean                      := true;
        -    signal tb_stop_simulation          : std_logic;
        -    --
        -    signal tb_cpu_reset                : std_logic;  -- SW9 pushbutton (active-high)
        -    --
        -    -- DDR2 memory 128 MB
        -    signal tb_ddr2_a                   : std_logic_vector(12 downto 0);
        -    signal tb_ddr2_ba                  : std_logic_vector(2 downto 0);
        -    signal tb_ddr2_cas_b               : std_logic;
        -    signal tb_ddr2_ras_b               : std_logic;
        -    signal tb_ddr2_we_b                : std_logic;
        -    signal tb_ddr2_cke                 : std_logic;
        -    signal tb_ddr2_clk_n               : std_logic;
        -    signal tb_ddr2_clk_p               : std_logic;
        -    signal tb_ddr2_dq                  : std_logic_vector(15 downto 0);
        -    signal tb_ddr2_ldm                 : std_logic;
        -    signal tb_ddr2_udm                 : std_logic;
        -    signal tb_ddr2_ldqs_n              : std_logic;
        -    signal tb_ddr2_ldqs_p              : std_logic;
        -    signal tb_ddr2_udqs_n              : std_logic;
        -    signal tb_ddr2_udqs_p              : std_logic;
        -    signal tb_ddr2_odt                 : std_logic;
        -    --                                
        -    -- flash memory                        
        -    signal tb_flash_a                  : std_logic_vector(24 downto 0);
        -    signal tb_flash_d                  : std_logic_vector(7 downto 3);
        -    signal tb_fpga_d0_din_miso_miso1   : std_logic;  -- dual use
        -    signal tb_fpga_d1_miso2            : std_logic;  -- dual use
        -    signal tb_fpga_d2_miso3            : std_logic;  -- dual use
        -    signal tb_flash_we_b               : std_logic;
        -    signal tb_flash_oe_b               : std_logic;
        -    signal tb_flash_ce_b               : std_logic;
        -    --
        -    -- FMC connector
        -    -- M2C   Mezzanine to Carrier
        -    -- C2M   Carrier to Mezzanine
        -    signal tb_fmc_clk0_m2c_n           : std_logic                    := '1';
        -    signal tb_fmc_clk0_m2c_p           : std_logic                    := '0';
        -    signal tb_fmc_clk1_m2c_n           : std_logic                    := '1';
        -    signal tb_fmc_clk1_m2c_p           : std_logic                    := '0';
        -    -- IIC addresses:
        -    -- M24C08:                 1010100..1010111
        -    -- 2kb EEPROM on FMC card: 1010010
        -    signal tb_iic_scl_main             : std_logic;
        -    signal tb_iic_sda_main             : std_logic;
        -    signal tb_fmc_la00_cc_n            : std_logic;
        -    signal tb_fmc_la00_cc_p            : std_logic;
        -    signal tb_fmc_la01_cc_n            : std_logic;
        -    signal tb_fmc_la01_cc_p            : std_logic;
        -    signal tb_fmc_la02_n               : std_logic;
        -    signal tb_fmc_la02_p               : std_logic;
        -    signal tb_fmc_la03_n               : std_logic;
        -    signal tb_fmc_la03_p               : std_logic;
        -    signal tb_fmc_la04_n               : std_logic;
        -    signal tb_fmc_la04_p               : std_logic;
        -    signal tb_fmc_la05_n               : std_logic;
        -    signal tb_fmc_la05_p               : std_logic;
        -    signal tb_fmc_la06_n               : std_logic;
        -    signal tb_fmc_la06_p               : std_logic;
        -    signal tb_fmc_la07_n               : std_logic;
        -    signal tb_fmc_la07_p               : std_logic;
        -    signal tb_fmc_la08_n               : std_logic;
        -    signal tb_fmc_la08_p               : std_logic;
        -    signal tb_fmc_la09_n               : std_logic;
        -    signal tb_fmc_la09_p               : std_logic;
        -    signal tb_fmc_la10_n               : std_logic;
        -    signal tb_fmc_la10_p               : std_logic;
        -    signal tb_fmc_la11_n               : std_logic;
        -    signal tb_fmc_la11_p               : std_logic;
        -    signal tb_fmc_la12_n               : std_logic;
        -    signal tb_fmc_la12_p               : std_logic;
        -    signal tb_fmc_la13_n               : std_logic;
        -    signal tb_fmc_la13_p               : std_logic;
        -    signal tb_fmc_la14_n               : std_logic;
        -    signal tb_fmc_la14_p               : std_logic;
        -    signal tb_fmc_la15_n               : std_logic;
        -    signal tb_fmc_la15_p               : std_logic;
        -    signal tb_fmc_la16_n               : std_logic;
        -    signal tb_fmc_la16_p               : std_logic;
        -    signal tb_fmc_la17_cc_n            : std_logic;
        -    signal tb_fmc_la17_cc_p            : std_logic;
        -    signal tb_fmc_la18_cc_n            : std_logic;
        -    signal tb_fmc_la18_cc_p            : std_logic;
        -    signal tb_fmc_la19_n               : std_logic;
        -    signal tb_fmc_la19_p               : std_logic;
        -    signal tb_fmc_la20_n               : std_logic;
        -    signal tb_fmc_la20_p               : std_logic;
        -    signal tb_fmc_la21_n               : std_logic;
        -    signal tb_fmc_la21_p               : std_logic;
        -    signal tb_fmc_la22_n               : std_logic;
        -    signal tb_fmc_la22_p               : std_logic;
        -    signal tb_fmc_la23_n               : std_logic;
        -    signal tb_fmc_la23_p               : std_logic;
        -    signal tb_fmc_la24_n               : std_logic;
        -    signal tb_fmc_la24_p               : std_logic;
        -    signal tb_fmc_la25_n               : std_logic;
        -    signal tb_fmc_la25_p               : std_logic;
        -    signal tb_fmc_la26_n               : std_logic;
        -    signal tb_fmc_la26_p               : std_logic;
        -    signal tb_fmc_la27_n               : std_logic;
        -    signal tb_fmc_la27_p               : std_logic;
        -    signal tb_fmc_la28_n               : std_logic;
        -    signal tb_fmc_la28_p               : std_logic;
        -    signal tb_fmc_la29_n               : std_logic;
        -    signal tb_fmc_la29_p               : std_logic;
        -    signal tb_fmc_la30_n               : std_logic;
        -    signal tb_fmc_la30_p               : std_logic;
        -    signal tb_fmc_la31_n               : std_logic;
        -    signal tb_fmc_la31_p               : std_logic;
        -    signal tb_fmc_la32_n               : std_logic;
        -    signal tb_fmc_la32_p               : std_logic;
        -    signal tb_fmc_la33_n               : std_logic;
        -    signal tb_fmc_la33_p               : std_logic;
        -    signal tb_fmc_prsnt_m2c_l          : std_logic                    := '0';
        -    signal tb_fmc_pwr_good_flash_rst_b : std_logic;  -- multiple destinations: 1 of Q2 (LED DS1 driver), U1 AB2 FPGA_PROG (through series R260 DNP), 44 of U25
        -    --
        -    signal tb_fpga_awake               : std_logic;
        -    signal tb_fpga_cclk                : std_logic;
        -    signal tb_fpga_cmp_clk             : std_logic                    := '0';
        -    signal tb_fpga_cmp_mosi            : std_logic                    := '0';
        -    signal tb_fpga_hswapen             : std_logic                    := '0';
        -    signal tb_fpga_init_b              : std_logic;  -- low active
        -    signal tb_fpga_m0_cmp_miso         : std_logic                    := '0';  -- mode DIP switch SW1 active high
        -    signal tb_fpga_m1                  : std_logic                    := '0';  -- mode DIP switch SW1 active high
        -    signal tb_fpga_mosi_csi_b_miso0    : std_logic;
        -    signal tb_fpga_onchip_term1        : std_logic;
        -    signal tb_fpga_onchip_term2        : std_logic;
        -    signal tb_fpga_vtemp               : std_logic                    := '0';
        -    --
        -    -- GPIOs
        -    signal tb_gpio_button              : std_logic_vector(3 downto 0) := (others => '0');  -- active high
        -    signal tb_gpio_header_ls           : std_logic_vector(7 downto 0);  -- 
        -    signal tb_gpio_led                 : std_logic_vector(3 downto 0);
        -    signal tb_gpio_switch              : std_logic_vector(3 downto 0) := (others => '0');  -- active high
        -    --
        -    -- Ethernet Gigabit PHY 
        -    signal tb_phy_col                  : std_logic                    := '0';
        -    signal tb_phy_crs                  : std_logic                    := '0';
        -    signal tb_phy_int                  : std_logic                    := '0';
        -    signal tb_phy_mdc                  : std_logic;
        -    signal tb_phy_mdio                 : std_logic;
        -    signal tb_phy_reset                : std_logic;
        -    signal tb_phy_rxclk                : std_logic                    := '0';
        -    signal tb_phy_rxctl_rxdv           : std_logic                    := '0';
        -    signal tb_phy_rxd                  : std_logic_vector(7 downto 0);
        -    signal tb_phy_rxer                 : std_logic                    := '0';
        -    signal tb_phy_txclk                : std_logic                    := '0';
        -    signal tb_phy_txctl_txen           : std_logic;
        -    signal tb_phy_txc_gtxclk           : std_logic;
        -    signal tb_phy_txd                  : std_logic_vector(7 downto 0);
        -    signal tb_phy_txer                 : std_logic;
        -    --
        -    --
        -    signal tb_spi_cs_b                 : std_logic;
        -    --
        -    -- 200 MHz oscillator, jitter 50 ppm
        -    signal tb_sysclk_n                 : std_logic                    := '1';
        -    signal tb_sysclk_p                 : std_logic                    := '0';
        -    --
        -    -- RS232 via USB
        -    signal tb_usb_1_cts                : std_logic;  -- function: RTS output
        -    signal tb_usb_1_rts                : std_logic                    := '0';  -- function: CTS input
        -    signal tb_usb_1_rx                 : std_logic;  -- function: TX data out
        -    signal tb_usb_1_tx                 : std_logic                    := '0';  -- function: RX data in
        -    --
        -    --  27 MHz, oscillator socket
        -    signal tb_user_clock               : std_logic                    := '0';
        -    --
        -    -- user clock provided per SMA
        -    signal tb_user_sma_clock_p         : std_logic                    := '0';
        -    signal tb_user_sma_clock_n         : std_logic                    := '0';
        -
        -
        -
        -begin
        -
        -    -- generate clocks
        -    tb_sysclk_p   <= not tb_sysclk_p   after sys_clk_period / 2  when simulation_run;
        -    tb_sysclk_n   <= not tb_sysclk_n   after sys_clk_period / 2  when simulation_run;
        -    tb_user_clock <= not tb_user_clock after user_clk_period / 2 when simulation_run;
        -
        -    -- generate reset
        -    tb_cpu_reset <= '1', '0' after 6.66 * sys_clk_period;
        -
        -    -- dut
        -    top_i0 : entity work.top
        -        port map (
        -            stop_simulation          => tb_stop_simulation,        -- : out   std_logic;
        -            --
        -            cpu_reset                => tb_cpu_reset,              -- : in    std_logic;
        -            --                                                     
        -            -- DDR2 memory 128 MB                                  
        -            ddr2_a                   => tb_ddr2_a,                 -- : out   std_logic_vector(12 downto 0);
        -            ddr2_ba                  => tb_ddr2_ba,                -- : out   std_logic_vector(2 downto 0);
        -            ddr2_cas_b               => tb_ddr2_cas_b,             -- : out   std_logic;
        -            ddr2_ras_b               => tb_ddr2_ras_b,             -- : out   std_logic;
        -            ddr2_we_b                => tb_ddr2_we_b,              -- : out   std_logic;
        -            ddr2_cke                 => tb_ddr2_cke,               -- : out   std_logic;
        -            ddr2_clk_n               => tb_ddr2_clk_n,             -- : out   std_logic; 
        -            ddr2_clk_p               => tb_ddr2_clk_p,             -- : out   std_logic; 
        -            ddr2_dq                  => tb_ddr2_dq,                -- : inout std_logic_vector(15 downto 0);
        -            ddr2_ldm                 => tb_ddr2_ldm,               -- : out   std_logic;
        -            ddr2_udm                 => tb_ddr2_udm,               -- : out   std_logic;
        -            ddr2_ldqs_n              => tb_ddr2_ldqs_n,            -- : inout std_logic;
        -            ddr2_ldqs_p              => tb_ddr2_ldqs_p,            -- : inout std_logic;
        -            ddr2_udqs_n              => tb_ddr2_udqs_n,            -- : inout std_logic;
        -            ddr2_udqs_p              => tb_ddr2_udqs_p,            -- : inout std_logic;
        -            ddr2_odt                 => tb_ddr2_odt,               -- : out   std_logic;
        -            --                                                     
        -            -- flash memory                                        
        -            flash_a                  => tb_flash_a,                -- : out   std_logic_vector(24 downto 0);
        -            flash_d                  => tb_flash_d,                -- : inout std_logic_vector(7  downto 3);
        -            --                              --
        -            fpga_d0_din_miso_miso1   => tb_fpga_d0_din_miso_miso1, -- : inout std_logic;
        -            fpga_d1_miso2            => tb_fpga_d1_miso2,          -- : inout std_logic;
        -            fpga_d2_miso3            => tb_fpga_d2_miso3,          -- : inout std_logic;
        -            flash_we_b               => tb_flash_we_b,             -- : out   std_logic;
        -            flash_oe_b               => tb_flash_oe_b,             -- : out   std_logic;
        -            flash_ce_b               => tb_flash_ce_b,             -- : out   std_logic;
        -            --
        -            -- FMC connector
        -            -- M2C   Mezzanine to Carrier
        -            -- C2M   Carrier to Mezzanine
        -            fmc_clk0_m2c_n           => tb_fmc_clk0_m2c_n,         -- : in    std_logic;
        -            fmc_clk0_m2c_p           => tb_fmc_clk0_m2c_p,         -- : in    std_logic;
        -            fmc_clk1_m2c_n           => tb_fmc_clk1_m2c_n,         -- : in    std_logic;
        -            fmc_clk1_m2c_p           => tb_fmc_clk1_m2c_p,         -- : in    std_logic;
        -            iic_scl_main             => tb_iic_scl_main,           -- : inout std_logic;
        -            iic_sda_main             => tb_iic_sda_main,           -- : inout std_logic;
        -            fmc_la00_cc_n            => tb_fmc_la00_cc_n,          -- : inout std_logic;
        -            fmc_la00_cc_p            => tb_fmc_la00_cc_p,          -- : inout std_logic;
        -            fmc_la01_cc_n            => tb_fmc_la01_cc_n,          -- : inout std_logic;
        -            fmc_la01_cc_p            => tb_fmc_la01_cc_p,          -- : inout std_logic;
        -            fmc_la02_n               => tb_fmc_la02_n,             -- : inout std_logic;
        -            fmc_la02_p               => tb_fmc_la02_p,             -- : inout std_logic;
        -            fmc_la03_n               => tb_fmc_la03_n,             -- : inout std_logic;
        -            fmc_la03_p               => tb_fmc_la03_p,             -- : inout std_logic;
        -            fmc_la04_n               => tb_fmc_la04_n,             -- : inout std_logic;
        -            fmc_la04_p               => tb_fmc_la04_p,             -- : inout std_logic;
        -            fmc_la05_n               => tb_fmc_la05_n,             -- : inout std_logic;
        -            fmc_la05_p               => tb_fmc_la05_p,             -- : inout std_logic;
        -            fmc_la06_n               => tb_fmc_la06_n,             -- : inout std_logic;
        -            fmc_la06_p               => tb_fmc_la06_p,             -- : inout std_logic;
        -            fmc_la07_n               => tb_fmc_la07_n,             -- : inout std_logic;
        -            fmc_la07_p               => tb_fmc_la07_p,             -- : inout std_logic;
        -            fmc_la08_n               => tb_fmc_la08_n,             -- : inout std_logic;
        -            fmc_la08_p               => tb_fmc_la08_p,             -- : inout std_logic;
        -            fmc_la09_n               => tb_fmc_la09_n,             -- : inout std_logic;
        -            fmc_la09_p               => tb_fmc_la09_p,             -- : inout std_logic;
        -            fmc_la10_n               => tb_fmc_la10_n,             -- : inout std_logic;
        -            fmc_la10_p               => tb_fmc_la10_p,             -- : inout std_logic;
        -            fmc_la11_n               => tb_fmc_la11_n,             -- : inout std_logic;
        -            fmc_la11_p               => tb_fmc_la11_p,             -- : inout std_logic;
        -            fmc_la12_n               => tb_fmc_la12_n,             -- : inout std_logic;
        -            fmc_la12_p               => tb_fmc_la12_p,             -- : inout std_logic;
        -            fmc_la13_n               => tb_fmc_la13_n,             -- : inout std_logic;
        -            fmc_la13_p               => tb_fmc_la13_p,             -- : inout std_logic;
        -            fmc_la14_n               => tb_fmc_la14_n,             -- : inout std_logic;
        -            fmc_la14_p               => tb_fmc_la14_p,             -- : inout std_logic;
        -            fmc_la15_n               => tb_fmc_la15_n,             -- : inout std_logic;
        -            fmc_la15_p               => tb_fmc_la15_p,             -- : inout std_logic;
        -            fmc_la16_n               => tb_fmc_la16_n,             -- : inout std_logic;
        -            fmc_la16_p               => tb_fmc_la16_p,             -- : inout std_logic;
        -            fmc_la17_cc_n            => tb_fmc_la17_cc_n,          -- : inout std_logic;
        -            fmc_la17_cc_p            => tb_fmc_la17_cc_p,          -- : inout std_logic;
        -            fmc_la18_cc_n            => tb_fmc_la18_cc_n,          -- : inout std_logic;
        -            fmc_la18_cc_p            => tb_fmc_la18_cc_p,          -- : inout std_logic;
        -            fmc_la19_n               => tb_fmc_la19_n,             -- : inout std_logic;
        -            fmc_la19_p               => tb_fmc_la19_p,             -- : inout std_logic;
        -            fmc_la20_n               => tb_fmc_la20_n,             -- : inout std_logic;
        -            fmc_la20_p               => tb_fmc_la20_p,             -- : inout std_logic;
        -            fmc_la21_n               => tb_fmc_la21_n,             -- : inout std_logic;
        -            fmc_la21_p               => tb_fmc_la21_p,             -- : inout std_logic;
        -            fmc_la22_n               => tb_fmc_la22_n,             -- : inout std_logic;
        -            fmc_la22_p               => tb_fmc_la22_p,             -- : inout std_logic;
        -            fmc_la23_n               => tb_fmc_la23_n,             -- : inout std_logic;
        -            fmc_la23_p               => tb_fmc_la23_p,             -- : inout std_logic;
        -            fmc_la24_n               => tb_fmc_la24_n,             -- : inout std_logic;
        -            fmc_la24_p               => tb_fmc_la24_p,             -- : inout std_logic;
        -            fmc_la25_n               => tb_fmc_la25_n,             -- : inout std_logic;
        -            fmc_la25_p               => tb_fmc_la25_p,             -- : inout std_logic;
        -            fmc_la26_n               => tb_fmc_la26_n,             -- : inout std_logic;
        -            fmc_la26_p               => tb_fmc_la26_p,             -- : inout std_logic;
        -            fmc_la27_n               => tb_fmc_la27_n,             -- : inout std_logic;
        -            fmc_la27_p               => tb_fmc_la27_p,             -- : inout std_logic;
        -            fmc_la28_n               => tb_fmc_la28_n,             -- : inout std_logic;
        -            fmc_la28_p               => tb_fmc_la28_p,             -- : inout std_logic;
        -            fmc_la29_n               => tb_fmc_la29_n,             -- : inout std_logic;
        -            fmc_la29_p               => tb_fmc_la29_p,             -- : inout std_logic;
        -            fmc_la30_n               => tb_fmc_la30_n,             -- : inout std_logic;
        -            fmc_la30_p               => tb_fmc_la30_p,             -- : inout std_logic;
        -            fmc_la31_n               => tb_fmc_la31_n,             -- : inout std_logic;
        -            fmc_la31_p               => tb_fmc_la31_p,             -- : inout std_logic;
        -            fmc_la32_n               => tb_fmc_la32_n,             -- : inout std_logic;
        -            fmc_la32_p               => tb_fmc_la32_p,             -- : inout std_logic;
        -            fmc_la33_n               => tb_fmc_la33_n,             -- : inout std_logic;
        -            fmc_la33_p               => tb_fmc_la33_p,             -- : inout std_logic;
        -            fmc_prsnt_m2c_l          => tb_fmc_prsnt_m2c_l,        -- : in    std_logic;
        -            fmc_pwr_good_flash_rst_b => tb_fmc_pwr_good_flash_rst_b,  -- : out   std_logic;
        -            --
        -            fpga_awake               => tb_fpga_awake,             -- : out   std_logic;
        -            fpga_cclk                => tb_fpga_cclk,              -- : out   std_logic;
        -            fpga_cmp_clk             => tb_fpga_cmp_clk,           -- : in    std_logic;
        -            fpga_cmp_mosi            => tb_fpga_cmp_mosi,          -- : in    std_logic;
        -            --                              --
        -            fpga_hswapen             => tb_fpga_hswapen,           -- : in    std_logic;
        -            fpga_init_b              => tb_fpga_init_b,            -- : out   std_logic;
        -            fpga_m0_cmp_miso         => tb_fpga_m0_cmp_miso,       -- : in    std_logic;
        -            fpga_m1                  => tb_fpga_m1,                -- : in    std_logic;
        -            fpga_mosi_csi_b_miso0    => tb_fpga_mosi_csi_b_miso0,  -- : inout std_logic;
        -            fpga_onchip_term1        => tb_fpga_onchip_term1,      -- : inout std_logic;
        -            fpga_onchip_term2        => tb_fpga_onchip_term2,      -- : inout std_logic;
        -            fpga_vtemp               => tb_fpga_vtemp,             -- : in    std_logic;
        -            --
        -            -- GPIOs
        -            gpio_button              => tb_gpio_button,            -- : in    std_logic_vector(3 downto 0);
        -            gpio_header_ls           => tb_gpio_header_ls,         -- : inout std_logic_vector(7 downto 0);
        -            gpio_led                 => tb_gpio_led,               -- : out   std_logic_vector(3 downto 0);
        -            gpio_switch              => tb_gpio_switch,            -- : in    std_logic_vector(3 downto 0);
        -            --
        -            -- Ethernet Gigabit PHY 
        -            phy_col                  => tb_phy_col,                -- : in    std_logic;
        -            phy_crs                  => tb_phy_crs,                -- : in    std_logic;
        -            phy_int                  => tb_phy_int,                -- : in    std_logic;
        -            phy_mdc                  => tb_phy_mdc,                -- : out   std_logic;
        -            phy_mdio                 => tb_phy_mdio,               -- : inout std_logic;
        -            phy_reset                => tb_phy_reset,              -- : out   std_logic;
        -            phy_rxclk                => tb_phy_rxclk,              -- : in    std_logic;
        -            phy_rxctl_rxdv           => tb_phy_rxctl_rxdv,         -- : in    std_logic;
        -            phy_rxd                  => tb_phy_rxd,                -- : in    std_logic_vector(7 downto 0);
        -            phy_rxer                 => tb_phy_rxer,               -- : in    std_logic;
        -            phy_txclk                => tb_phy_txclk,              -- : in    std_logic;
        -            phy_txctl_txen           => tb_phy_txctl_txen,         -- : out   std_logic;
        -            phy_txc_gtxclk           => tb_phy_txc_gtxclk,         -- : out   std_logic;
        -            phy_txd                  => tb_phy_txd,                -- : out   std_logic_vector(7 downto 0);
        -            phy_txer                 => tb_phy_txer,               -- : out   std_logic;
        -            --
        -            --
        -            spi_cs_b                 => tb_spi_cs_b,               -- : out   std_logic;
        -            --                                                     
        -            -- 200 MHz oscillator, jitter 50 ppm                   
        -            sysclk_n                 => tb_sysclk_n,               -- : in    std_logic;
        -            sysclk_p                 => tb_sysclk_p,               -- : in    std_logic;
        -            --
        -            -- RS232 via USB
        -            usb_1_cts                => tb_usb_1_cts,              -- : out   std_logic;
        -            usb_1_rts                => tb_usb_1_rts,              -- : in    std_logic;
        -            usb_1_rx                 => tb_usb_1_rx,               -- : out   std_logic;
        -            usb_1_tx                 => tb_usb_1_tx,               -- : in    std_logic;
        -            --
        -            --  27 MHz, oscillator socket
        -            user_clock               => tb_user_clock,             -- : in    std_logic;
        -            --
        -            -- user clock provided per SMA
        -            user_sma_clock_p         => tb_user_sma_clock_p,       -- : in    std_logic;
        -            user_sma_clock_n         => tb_user_sma_clock_n        -- : in    std_logic
        -            );
        -
        -
        -    -- check for simulation stopping
        -    process (tb_stop_simulation)
        -    begin
        -        if tb_stop_simulation = '1' then
        -            report "Simulation end." severity note;
        -            simulation_run <= false;
        -        end if;
        -    end process;
        -
        -
        -end architecture testbench;
        -
        +-- testbench for
        +-- SP601 evaluation board
        +--
        +-- includes "model" for clock generation
        +-- simulate press on cpu_reset as reset
        +--
        +-- place models for external components (PHY, DDR2) in this file
        +--
        +
        +
        +library ieee;
        +use ieee.std_logic_1164.all;
        +
        +
        +entity top_tb is
        +end entity top_tb;
        +
        +architecture testbench of top_tb is
        +
        +    ---------------------------
        +    -- constant declarations
        +    constant sys_clk_period  : time := 1 sec / 200_000_000;  -- 200 MHz
        +    constant user_clk_period : time := 1 sec / 27_000_000;   -- 27 MHz
        +
        +
        +    ---------------------------
        +    -- signal declarations
        +    signal simulation_run              : boolean                      := true;
        +    signal tb_stop_simulation          : std_logic;
        +    --
        +    signal tb_cpu_reset                : std_logic;  -- SW9 pushbutton (active-high)
        +    --
        +    -- DDR2 memory 128 MB
        +    signal tb_ddr2_a                   : std_logic_vector(12 downto 0);
        +    signal tb_ddr2_ba                  : std_logic_vector(2 downto 0);
        +    signal tb_ddr2_cas_b               : std_logic;
        +    signal tb_ddr2_ras_b               : std_logic;
        +    signal tb_ddr2_we_b                : std_logic;
        +    signal tb_ddr2_cke                 : std_logic;
        +    signal tb_ddr2_clk_n               : std_logic;
        +    signal tb_ddr2_clk_p               : std_logic;
        +    signal tb_ddr2_dq                  : std_logic_vector(15 downto 0);
        +    signal tb_ddr2_ldm                 : std_logic;
        +    signal tb_ddr2_udm                 : std_logic;
        +    signal tb_ddr2_ldqs_n              : std_logic;
        +    signal tb_ddr2_ldqs_p              : std_logic;
        +    signal tb_ddr2_udqs_n              : std_logic;
        +    signal tb_ddr2_udqs_p              : std_logic;
        +    signal tb_ddr2_odt                 : std_logic;
        +    --                                
        +    -- flash memory                        
        +    signal tb_flash_a                  : std_logic_vector(24 downto 0);
        +    signal tb_flash_d                  : std_logic_vector(7 downto 3);
        +    signal tb_fpga_d0_din_miso_miso1   : std_logic;  -- dual use
        +    signal tb_fpga_d1_miso2            : std_logic;  -- dual use
        +    signal tb_fpga_d2_miso3            : std_logic;  -- dual use
        +    signal tb_flash_we_b               : std_logic;
        +    signal tb_flash_oe_b               : std_logic;
        +    signal tb_flash_ce_b               : std_logic;
        +    --
        +    -- FMC connector
        +    -- M2C   Mezzanine to Carrier
        +    -- C2M   Carrier to Mezzanine
        +    signal tb_fmc_clk0_m2c_n           : std_logic                    := '1';
        +    signal tb_fmc_clk0_m2c_p           : std_logic                    := '0';
        +    signal tb_fmc_clk1_m2c_n           : std_logic                    := '1';
        +    signal tb_fmc_clk1_m2c_p           : std_logic                    := '0';
        +    -- IIC addresses:
        +    -- M24C08:                 1010100..1010111
        +    -- 2kb EEPROM on FMC card: 1010010
        +    signal tb_iic_scl_main             : std_logic;
        +    signal tb_iic_sda_main             : std_logic;
        +    signal tb_fmc_la00_cc_n            : std_logic;
        +    signal tb_fmc_la00_cc_p            : std_logic;
        +    signal tb_fmc_la01_cc_n            : std_logic;
        +    signal tb_fmc_la01_cc_p            : std_logic;
        +    signal tb_fmc_la02_n               : std_logic;
        +    signal tb_fmc_la02_p               : std_logic;
        +    signal tb_fmc_la03_n               : std_logic;
        +    signal tb_fmc_la03_p               : std_logic;
        +    signal tb_fmc_la04_n               : std_logic;
        +    signal tb_fmc_la04_p               : std_logic;
        +    signal tb_fmc_la05_n               : std_logic;
        +    signal tb_fmc_la05_p               : std_logic;
        +    signal tb_fmc_la06_n               : std_logic;
        +    signal tb_fmc_la06_p               : std_logic;
        +    signal tb_fmc_la07_n               : std_logic;
        +    signal tb_fmc_la07_p               : std_logic;
        +    signal tb_fmc_la08_n               : std_logic;
        +    signal tb_fmc_la08_p               : std_logic;
        +    signal tb_fmc_la09_n               : std_logic;
        +    signal tb_fmc_la09_p               : std_logic;
        +    signal tb_fmc_la10_n               : std_logic;
        +    signal tb_fmc_la10_p               : std_logic;
        +    signal tb_fmc_la11_n               : std_logic;
        +    signal tb_fmc_la11_p               : std_logic;
        +    signal tb_fmc_la12_n               : std_logic;
        +    signal tb_fmc_la12_p               : std_logic;
        +    signal tb_fmc_la13_n               : std_logic;
        +    signal tb_fmc_la13_p               : std_logic;
        +    signal tb_fmc_la14_n               : std_logic;
        +    signal tb_fmc_la14_p               : std_logic;
        +    signal tb_fmc_la15_n               : std_logic;
        +    signal tb_fmc_la15_p               : std_logic;
        +    signal tb_fmc_la16_n               : std_logic;
        +    signal tb_fmc_la16_p               : std_logic;
        +    signal tb_fmc_la17_cc_n            : std_logic;
        +    signal tb_fmc_la17_cc_p            : std_logic;
        +    signal tb_fmc_la18_cc_n            : std_logic;
        +    signal tb_fmc_la18_cc_p            : std_logic;
        +    signal tb_fmc_la19_n               : std_logic;
        +    signal tb_fmc_la19_p               : std_logic;
        +    signal tb_fmc_la20_n               : std_logic;
        +    signal tb_fmc_la20_p               : std_logic;
        +    signal tb_fmc_la21_n               : std_logic;
        +    signal tb_fmc_la21_p               : std_logic;
        +    signal tb_fmc_la22_n               : std_logic;
        +    signal tb_fmc_la22_p               : std_logic;
        +    signal tb_fmc_la23_n               : std_logic;
        +    signal tb_fmc_la23_p               : std_logic;
        +    signal tb_fmc_la24_n               : std_logic;
        +    signal tb_fmc_la24_p               : std_logic;
        +    signal tb_fmc_la25_n               : std_logic;
        +    signal tb_fmc_la25_p               : std_logic;
        +    signal tb_fmc_la26_n               : std_logic;
        +    signal tb_fmc_la26_p               : std_logic;
        +    signal tb_fmc_la27_n               : std_logic;
        +    signal tb_fmc_la27_p               : std_logic;
        +    signal tb_fmc_la28_n               : std_logic;
        +    signal tb_fmc_la28_p               : std_logic;
        +    signal tb_fmc_la29_n               : std_logic;
        +    signal tb_fmc_la29_p               : std_logic;
        +    signal tb_fmc_la30_n               : std_logic;
        +    signal tb_fmc_la30_p               : std_logic;
        +    signal tb_fmc_la31_n               : std_logic;
        +    signal tb_fmc_la31_p               : std_logic;
        +    signal tb_fmc_la32_n               : std_logic;
        +    signal tb_fmc_la32_p               : std_logic;
        +    signal tb_fmc_la33_n               : std_logic;
        +    signal tb_fmc_la33_p               : std_logic;
        +    signal tb_fmc_prsnt_m2c_l          : std_logic                    := '0';
        +    signal tb_fmc_pwr_good_flash_rst_b : std_logic;  -- multiple destinations: 1 of Q2 (LED DS1 driver), U1 AB2 FPGA_PROG (through series R260 DNP), 44 of U25
        +    --
        +    signal tb_fpga_awake               : std_logic;
        +    signal tb_fpga_cclk                : std_logic;
        +    signal tb_fpga_cmp_clk             : std_logic                    := '0';
        +    signal tb_fpga_cmp_mosi            : std_logic                    := '0';
        +    signal tb_fpga_hswapen             : std_logic                    := '0';
        +    signal tb_fpga_init_b              : std_logic;  -- low active
        +    signal tb_fpga_m0_cmp_miso         : std_logic                    := '0';  -- mode DIP switch SW1 active high
        +    signal tb_fpga_m1                  : std_logic                    := '0';  -- mode DIP switch SW1 active high
        +    signal tb_fpga_mosi_csi_b_miso0    : std_logic;
        +    signal tb_fpga_onchip_term1        : std_logic;
        +    signal tb_fpga_onchip_term2        : std_logic;
        +    signal tb_fpga_vtemp               : std_logic                    := '0';
        +    --
        +    -- GPIOs
        +    signal tb_gpio_button              : std_logic_vector(3 downto 0) := (others => '0');  -- active high
        +    signal tb_gpio_header_ls           : std_logic_vector(7 downto 0);  -- 
        +    signal tb_gpio_led                 : std_logic_vector(3 downto 0);
        +    signal tb_gpio_switch              : std_logic_vector(3 downto 0) := (others => '0');  -- active high
        +    --
        +    -- Ethernet Gigabit PHY 
        +    signal tb_phy_col                  : std_logic                    := '0';
        +    signal tb_phy_crs                  : std_logic                    := '0';
        +    signal tb_phy_int                  : std_logic                    := '0';
        +    signal tb_phy_mdc                  : std_logic;
        +    signal tb_phy_mdio                 : std_logic;
        +    signal tb_phy_reset                : std_logic;
        +    signal tb_phy_rxclk                : std_logic                    := '0';
        +    signal tb_phy_rxctl_rxdv           : std_logic                    := '0';
        +    signal tb_phy_rxd                  : std_logic_vector(7 downto 0);
        +    signal tb_phy_rxer                 : std_logic                    := '0';
        +    signal tb_phy_txclk                : std_logic                    := '0';
        +    signal tb_phy_txctl_txen           : std_logic;
        +    signal tb_phy_txc_gtxclk           : std_logic;
        +    signal tb_phy_txd                  : std_logic_vector(7 downto 0);
        +    signal tb_phy_txer                 : std_logic;
        +    --
        +    --
        +    signal tb_spi_cs_b                 : std_logic;
        +    --
        +    -- 200 MHz oscillator, jitter 50 ppm
        +    signal tb_sysclk_n                 : std_logic                    := '1';
        +    signal tb_sysclk_p                 : std_logic                    := '0';
        +    --
        +    -- RS232 via USB
        +    signal tb_usb_1_cts                : std_logic;  -- function: RTS output
        +    signal tb_usb_1_rts                : std_logic                    := '0';  -- function: CTS input
        +    signal tb_usb_1_rx                 : std_logic;  -- function: TX data out
        +    signal tb_usb_1_tx                 : std_logic                    := '0';  -- function: RX data in
        +    --
        +    --  27 MHz, oscillator socket
        +    signal tb_user_clock               : std_logic                    := '0';
        +    --
        +    -- user clock provided per SMA
        +    signal tb_user_sma_clock_p         : std_logic                    := '0';
        +    signal tb_user_sma_clock_n         : std_logic                    := '0';
        +
        +
        +
        +begin
        +
        +    -- generate clocks
        +    tb_sysclk_p   <= not tb_sysclk_p   after sys_clk_period / 2  when simulation_run;
        +    tb_sysclk_n   <= not tb_sysclk_n   after sys_clk_period / 2  when simulation_run;
        +    tb_user_clock <= not tb_user_clock after user_clk_period / 2 when simulation_run;
        +
        +    -- generate reset
        +    tb_cpu_reset <= '1', '0' after 6.66 * sys_clk_period;
        +
        +
        +    -- simulate keypress
        +    tb_gpio_button(2) <= '0', '1' after 50 us, '0' after 52 us;
        +
        +    -- dut
        +    top_i0 : entity work.top
        +        port map (
        +            stop_simulation          => tb_stop_simulation,        -- : out   std_logic;
        +            --
        +            cpu_reset                => tb_cpu_reset,              -- : in    std_logic;
        +            --                                                     
        +            -- DDR2 memory 128 MB                                  
        +            ddr2_a                   => tb_ddr2_a,                 -- : out   std_logic_vector(12 downto 0);
        +            ddr2_ba                  => tb_ddr2_ba,                -- : out   std_logic_vector(2 downto 0);
        +            ddr2_cas_b               => tb_ddr2_cas_b,             -- : out   std_logic;
        +            ddr2_ras_b               => tb_ddr2_ras_b,             -- : out   std_logic;
        +            ddr2_we_b                => tb_ddr2_we_b,              -- : out   std_logic;
        +            ddr2_cke                 => tb_ddr2_cke,               -- : out   std_logic;
        +            ddr2_clk_n               => tb_ddr2_clk_n,             -- : out   std_logic; 
        +            ddr2_clk_p               => tb_ddr2_clk_p,             -- : out   std_logic; 
        +            ddr2_dq                  => tb_ddr2_dq,                -- : inout std_logic_vector(15 downto 0);
        +            ddr2_ldm                 => tb_ddr2_ldm,               -- : out   std_logic;
        +            ddr2_udm                 => tb_ddr2_udm,               -- : out   std_logic;
        +            ddr2_ldqs_n              => tb_ddr2_ldqs_n,            -- : inout std_logic;
        +            ddr2_ldqs_p              => tb_ddr2_ldqs_p,            -- : inout std_logic;
        +            ddr2_udqs_n              => tb_ddr2_udqs_n,            -- : inout std_logic;
        +            ddr2_udqs_p              => tb_ddr2_udqs_p,            -- : inout std_logic;
        +            ddr2_odt                 => tb_ddr2_odt,               -- : out   std_logic;
        +            --                                                     
        +            -- flash memory                                        
        +            flash_a                  => tb_flash_a,                -- : out   std_logic_vector(24 downto 0);
        +            flash_d                  => tb_flash_d,                -- : inout std_logic_vector(7  downto 3);
        +            --                              --
        +            fpga_d0_din_miso_miso1   => tb_fpga_d0_din_miso_miso1, -- : inout std_logic;
        +            fpga_d1_miso2            => tb_fpga_d1_miso2,          -- : inout std_logic;
        +            fpga_d2_miso3            => tb_fpga_d2_miso3,          -- : inout std_logic;
        +            flash_we_b               => tb_flash_we_b,             -- : out   std_logic;
        +            flash_oe_b               => tb_flash_oe_b,             -- : out   std_logic;
        +            flash_ce_b               => tb_flash_ce_b,             -- : out   std_logic;
        +            --
        +            -- FMC connector
        +            -- M2C   Mezzanine to Carrier
        +            -- C2M   Carrier to Mezzanine
        +            fmc_clk0_m2c_n           => tb_fmc_clk0_m2c_n,         -- : in    std_logic;
        +            fmc_clk0_m2c_p           => tb_fmc_clk0_m2c_p,         -- : in    std_logic;
        +            fmc_clk1_m2c_n           => tb_fmc_clk1_m2c_n,         -- : in    std_logic;
        +            fmc_clk1_m2c_p           => tb_fmc_clk1_m2c_p,         -- : in    std_logic;
        +            iic_scl_main             => tb_iic_scl_main,           -- : inout std_logic;
        +            iic_sda_main             => tb_iic_sda_main,           -- : inout std_logic;
        +            fmc_la00_cc_n            => tb_fmc_la00_cc_n,          -- : inout std_logic;
        +            fmc_la00_cc_p            => tb_fmc_la00_cc_p,          -- : inout std_logic;
        +            fmc_la01_cc_n            => tb_fmc_la01_cc_n,          -- : inout std_logic;
        +            fmc_la01_cc_p            => tb_fmc_la01_cc_p,          -- : inout std_logic;
        +            fmc_la02_n               => tb_fmc_la02_n,             -- : inout std_logic;
        +            fmc_la02_p               => tb_fmc_la02_p,             -- : inout std_logic;
        +            fmc_la03_n               => tb_fmc_la03_n,             -- : inout std_logic;
        +            fmc_la03_p               => tb_fmc_la03_p,             -- : inout std_logic;
        +            fmc_la04_n               => tb_fmc_la04_n,             -- : inout std_logic;
        +            fmc_la04_p               => tb_fmc_la04_p,             -- : inout std_logic;
        +            fmc_la05_n               => tb_fmc_la05_n,             -- : inout std_logic;
        +            fmc_la05_p               => tb_fmc_la05_p,             -- : inout std_logic;
        +            fmc_la06_n               => tb_fmc_la06_n,             -- : inout std_logic;
        +            fmc_la06_p               => tb_fmc_la06_p,             -- : inout std_logic;
        +            fmc_la07_n               => tb_fmc_la07_n,             -- : inout std_logic;
        +            fmc_la07_p               => tb_fmc_la07_p,             -- : inout std_logic;
        +            fmc_la08_n               => tb_fmc_la08_n,             -- : inout std_logic;
        +            fmc_la08_p               => tb_fmc_la08_p,             -- : inout std_logic;
        +            fmc_la09_n               => tb_fmc_la09_n,             -- : inout std_logic;
        +            fmc_la09_p               => tb_fmc_la09_p,             -- : inout std_logic;
        +            fmc_la10_n               => tb_fmc_la10_n,             -- : inout std_logic;
        +            fmc_la10_p               => tb_fmc_la10_p,             -- : inout std_logic;
        +            fmc_la11_n               => tb_fmc_la11_n,             -- : inout std_logic;
        +            fmc_la11_p               => tb_fmc_la11_p,             -- : inout std_logic;
        +            fmc_la12_n               => tb_fmc_la12_n,             -- : inout std_logic;
        +            fmc_la12_p               => tb_fmc_la12_p,             -- : inout std_logic;
        +            fmc_la13_n               => tb_fmc_la13_n,             -- : inout std_logic;
        +            fmc_la13_p               => tb_fmc_la13_p,             -- : inout std_logic;
        +            fmc_la14_n               => tb_fmc_la14_n,             -- : inout std_logic;
        +            fmc_la14_p               => tb_fmc_la14_p,             -- : inout std_logic;
        +            fmc_la15_n               => tb_fmc_la15_n,             -- : inout std_logic;
        +            fmc_la15_p               => tb_fmc_la15_p,             -- : inout std_logic;
        +            fmc_la16_n               => tb_fmc_la16_n,             -- : inout std_logic;
        +            fmc_la16_p               => tb_fmc_la16_p,             -- : inout std_logic;
        +            fmc_la17_cc_n            => tb_fmc_la17_cc_n,          -- : inout std_logic;
        +            fmc_la17_cc_p            => tb_fmc_la17_cc_p,          -- : inout std_logic;
        +            fmc_la18_cc_n            => tb_fmc_la18_cc_n,          -- : inout std_logic;
        +            fmc_la18_cc_p            => tb_fmc_la18_cc_p,          -- : inout std_logic;
        +            fmc_la19_n               => tb_fmc_la19_n,             -- : inout std_logic;
        +            fmc_la19_p               => tb_fmc_la19_p,             -- : inout std_logic;
        +            fmc_la20_n               => tb_fmc_la20_n,             -- : inout std_logic;
        +            fmc_la20_p               => tb_fmc_la20_p,             -- : inout std_logic;
        +            fmc_la21_n               => tb_fmc_la21_n,             -- : inout std_logic;
        +            fmc_la21_p               => tb_fmc_la21_p,             -- : inout std_logic;
        +            fmc_la22_n               => tb_fmc_la22_n,             -- : inout std_logic;
        +            fmc_la22_p               => tb_fmc_la22_p,             -- : inout std_logic;
        +            fmc_la23_n               => tb_fmc_la23_n,             -- : inout std_logic;
        +            fmc_la23_p               => tb_fmc_la23_p,             -- : inout std_logic;
        +            fmc_la24_n               => tb_fmc_la24_n,             -- : inout std_logic;
        +            fmc_la24_p               => tb_fmc_la24_p,             -- : inout std_logic;
        +            fmc_la25_n               => tb_fmc_la25_n,             -- : inout std_logic;
        +            fmc_la25_p               => tb_fmc_la25_p,             -- : inout std_logic;
        +            fmc_la26_n               => tb_fmc_la26_n,             -- : inout std_logic;
        +            fmc_la26_p               => tb_fmc_la26_p,             -- : inout std_logic;
        +            fmc_la27_n               => tb_fmc_la27_n,             -- : inout std_logic;
        +            fmc_la27_p               => tb_fmc_la27_p,             -- : inout std_logic;
        +            fmc_la28_n               => tb_fmc_la28_n,             -- : inout std_logic;
        +            fmc_la28_p               => tb_fmc_la28_p,             -- : inout std_logic;
        +            fmc_la29_n               => tb_fmc_la29_n,             -- : inout std_logic;
        +            fmc_la29_p               => tb_fmc_la29_p,             -- : inout std_logic;
        +            fmc_la30_n               => tb_fmc_la30_n,             -- : inout std_logic;
        +            fmc_la30_p               => tb_fmc_la30_p,             -- : inout std_logic;
        +            fmc_la31_n               => tb_fmc_la31_n,             -- : inout std_logic;
        +            fmc_la31_p               => tb_fmc_la31_p,             -- : inout std_logic;
        +            fmc_la32_n               => tb_fmc_la32_n,             -- : inout std_logic;
        +            fmc_la32_p               => tb_fmc_la32_p,             -- : inout std_logic;
        +            fmc_la33_n               => tb_fmc_la33_n,             -- : inout std_logic;
        +            fmc_la33_p               => tb_fmc_la33_p,             -- : inout std_logic;
        +            fmc_prsnt_m2c_l          => tb_fmc_prsnt_m2c_l,        -- : in    std_logic;
        +            fmc_pwr_good_flash_rst_b => tb_fmc_pwr_good_flash_rst_b,  -- : out   std_logic;
        +            --
        +            fpga_awake               => tb_fpga_awake,             -- : out   std_logic;
        +            fpga_cclk                => tb_fpga_cclk,              -- : out   std_logic;
        +            fpga_cmp_clk             => tb_fpga_cmp_clk,           -- : in    std_logic;
        +            fpga_cmp_mosi            => tb_fpga_cmp_mosi,          -- : in    std_logic;
        +            --                              --
        +            fpga_hswapen             => tb_fpga_hswapen,           -- : in    std_logic;
        +            fpga_init_b              => tb_fpga_init_b,            -- : out   std_logic;
        +            fpga_m0_cmp_miso         => tb_fpga_m0_cmp_miso,       -- : in    std_logic;
        +            fpga_m1                  => tb_fpga_m1,                -- : in    std_logic;
        +            fpga_mosi_csi_b_miso0    => tb_fpga_mosi_csi_b_miso0,  -- : inout std_logic;
        +            fpga_onchip_term1        => tb_fpga_onchip_term1,      -- : inout std_logic;
        +            fpga_onchip_term2        => tb_fpga_onchip_term2,      -- : inout std_logic;
        +            fpga_vtemp               => tb_fpga_vtemp,             -- : in    std_logic;
        +            --
        +            -- GPIOs
        +            gpio_button              => tb_gpio_button,            -- : in    std_logic_vector(3 downto 0);
        +            gpio_header_ls           => tb_gpio_header_ls,         -- : inout std_logic_vector(7 downto 0);
        +            gpio_led                 => tb_gpio_led,               -- : out   std_logic_vector(3 downto 0);
        +            gpio_switch              => tb_gpio_switch,            -- : in    std_logic_vector(3 downto 0);
        +            --
        +            -- Ethernet Gigabit PHY 
        +            phy_col                  => tb_phy_col,                -- : in    std_logic;
        +            phy_crs                  => tb_phy_crs,                -- : in    std_logic;
        +            phy_int                  => tb_phy_int,                -- : in    std_logic;
        +            phy_mdc                  => tb_phy_mdc,                -- : out   std_logic;
        +            phy_mdio                 => tb_phy_mdio,               -- : inout std_logic;
        +            phy_reset                => tb_phy_reset,              -- : out   std_logic;
        +            phy_rxclk                => tb_phy_rxclk,              -- : in    std_logic;
        +            phy_rxctl_rxdv           => tb_phy_rxctl_rxdv,         -- : in    std_logic;
        +            phy_rxd                  => tb_phy_rxd,                -- : in    std_logic_vector(7 downto 0);
        +            phy_rxer                 => tb_phy_rxer,               -- : in    std_logic;
        +            phy_txclk                => tb_phy_txclk,              -- : in    std_logic;
        +            phy_txctl_txen           => tb_phy_txctl_txen,         -- : out   std_logic;
        +            phy_txc_gtxclk           => tb_phy_txc_gtxclk,         -- : out   std_logic;
        +            phy_txd                  => tb_phy_txd,                -- : out   std_logic_vector(7 downto 0);
        +            phy_txer                 => tb_phy_txer,               -- : out   std_logic;
        +            --
        +            --
        +            spi_cs_b                 => tb_spi_cs_b,               -- : out   std_logic;
        +            --                                                     
        +            -- 200 MHz oscillator, jitter 50 ppm                   
        +            sysclk_n                 => tb_sysclk_n,               -- : in    std_logic;
        +            sysclk_p                 => tb_sysclk_p,               -- : in    std_logic;
        +            --
        +            -- RS232 via USB
        +            usb_1_cts                => tb_usb_1_cts,              -- : out   std_logic;
        +            usb_1_rts                => tb_usb_1_rts,              -- : in    std_logic;
        +            usb_1_rx                 => tb_usb_1_rx,               -- : out   std_logic;
        +            usb_1_tx                 => tb_usb_1_tx,               -- : in    std_logic;
        +            --
        +            --  27 MHz, oscillator socket
        +            user_clock               => tb_user_clock,             -- : in    std_logic;
        +            --
        +            -- user clock provided per SMA
        +            user_sma_clock_p         => tb_user_sma_clock_p,       -- : in    std_logic;
        +            user_sma_clock_n         => tb_user_sma_clock_n        -- : in    std_logic
        +            );
        +
        +
        +    -- check for simulation stopping
        +    process (tb_stop_simulation)
        +    begin
        +        if tb_stop_simulation = '1' then
        +            report "Simulation end." severity note;
        +            simulation_run <= false;
        +        end if;
        +    end process;
        +
        +
        +end architecture testbench;
        +
        diff --git a/zpu/hdl/zealot/helpers/zpu_med1.vhdl b/zpu/hdl/zealot/helpers/zpu_med1.vhdl
        index fb19e0c..a0cbcb2 100644
        --- a/zpu/hdl/zealot/helpers/zpu_med1.vhdl
        +++ b/zpu/hdl/zealot/helpers/zpu_med1.vhdl
        @@ -67,7 +67,11 @@ entity ZPU_Med1 is
               break_o    : out std_logic;  -- Break executed
               dbg_o      : out zpu_dbgo_t; -- Debug info
               rs232_tx_o : out std_logic;  -- UART Tx
        -      rs232_rx_i : in  std_logic); -- UART Rx
        +      rs232_rx_i : in  std_logic;  -- UART Rx
        +      gpio_in    : in  std_logic_vector(31 downto 0);
        +      gpio_out   : out std_logic_vector(31 downto 0);
        +      gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +      );
         end entity ZPU_Med1;
         
         architecture Structural of ZPU_Med1 is
        @@ -114,12 +118,25 @@ begin
            -- I/O: Phi layout
            io_map: ZPUPhiIO
               generic map(
        -         BRDIVISOR => BRDIVISOR, LOG_FILE => "zpu_med1_io.log")
        +         BRDIVISOR => BRDIVISOR, 
        +         LOG_FILE  => "zpu_med1_io.log"
        +         )
               port map(
        -         clk_i => clk_i, reset_i => rst_i, busy_o => io_busy, we_i => io_we,
        -         re_i => io_re, data_i => mem_write, data_o => io_read,
        -         addr_i => io_addr, rs232_rx_i => rs232_rx_i, rs232_tx_o => rs232_tx_o,
        -         br_clk_i => '1');
        +         clk_i      => clk_i, 
        +         reset_i    => rst_i, 
        +         busy_o     => io_busy, 
        +         we_i       => io_we,
        +         re_i       => io_re, 
        +         data_i     => mem_write, 
        +         data_o     => io_read,
        +         addr_i     => io_addr, 
        +         rs232_rx_i => rs232_rx_i, 
        +         rs232_tx_o => rs232_tx_o,
        +         br_clk_i   => '1',
        +         gpio_in    => gpio_in,
        +         gpio_out   => gpio_out,
        +         gpio_dir   => gpio_dir
        +         );
            io_addr  <= mem_addr(4 downto 2);
            -- Here we decode 0x8xxxx as I/O and not just 0x80A00xx
            -- Note: We define the address space as 256 kB, so writing to 0x80A00xx
        diff --git a/zpu/hdl/zealot/helpers/zpu_small1.vhdl b/zpu/hdl/zealot/helpers/zpu_small1.vhdl
        index 13dd485..52006e4 100644
        --- a/zpu/hdl/zealot/helpers/zpu_small1.vhdl
        +++ b/zpu/hdl/zealot/helpers/zpu_small1.vhdl
        @@ -67,7 +67,11 @@ entity ZPU_Small1 is
               break_o    : out std_logic;  -- Break executed
               dbg_o      : out zpu_dbgo_t; -- Debug info
               rs232_tx_o : out std_logic;  -- UART Tx
        -      rs232_rx_i : in  std_logic); -- UART Rx
        +      rs232_rx_i : in  std_logic;  -- UART Rx
        +      gpio_in    : in  std_logic_vector(31 downto 0);
        +      gpio_out   : out std_logic_vector(31 downto 0);
        +      gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +      );
         end entity ZPU_Small1;
         
         architecture Structural of ZPU_Small1 is
        @@ -111,12 +115,25 @@ begin
            -- I/O: Phi layout
            io_map: ZPUPhiIO
               generic map(
        -         BRDIVISOR => BRDIVISOR, LOG_FILE => "zpu_small1_io.log")
        +         BRDIVISOR => BRDIVISOR, 
        +         LOG_FILE  => "zpu_small1_io.log"
        +         )
               port map(
        -         clk_i => clk_i, reset_i => rst_i, busy_o => io_busy, we_i => io_we,
        -         re_i => io_re, data_i => io_write, data_o => io_read,
        -         addr_i => phi_addr, rs232_rx_i => rs232_rx_i, rs232_tx_o => rs232_tx_o,
        -         br_clk_i => '1');
        +         clk_i      => clk_i, 
        +         reset_i    => rst_i, 
        +         busy_o     => io_busy, 
        +         we_i       => io_we,
        +         re_i       => io_re, 
        +         data_i     => io_write, 
        +         data_o     => io_read,
        +         addr_i     => phi_addr, 
        +         rs232_rx_i => rs232_rx_i, 
        +         rs232_tx_o => rs232_tx_o,
        +         br_clk_i   => '1',
        +         gpio_in    => gpio_in,
        +         gpio_out   => gpio_out,
        +         gpio_dir   => gpio_dir
        +         );
            phi_addr <= io_addr(4 downto 2);
         
            zpu : ZPUSmallCore
        diff --git a/zpu/hdl/zealot/testbenches/dmips_med1_tb.vhdl b/zpu/hdl/zealot/testbenches/dmips_med1_tb.vhdl
        index 4361b9c..8bdcdd3 100644
        --- a/zpu/hdl/zealot/testbenches/dmips_med1_tb.vhdl
        +++ b/zpu/hdl/zealot/testbenches/dmips_med1_tb.vhdl
        @@ -80,7 +80,11 @@ architecture Behave of DMIPS_Med1_TB is
                  break_o    : out std_logic;  -- Break executed
                  dbg_o      : out zpu_dbgo_t; -- Debug info
                  rs232_tx_o : out std_logic;  -- UART Tx
        -         rs232_rx_i : in  std_logic); -- UART Rx
        +         rs232_rx_i : in  std_logic;  -- UART Rx
        +         gpio_in    : in  std_logic_vector(31 downto 0);
        +         gpio_out   : out std_logic_vector(31 downto 0);
        +         gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +         );
            end component ZPU_Med1;
         
            signal clk          : std_logic;
        @@ -98,7 +102,8 @@ begin
                  BRAM_W => BRAM_W)
               port map(
                  clk_i => clk, rst_i => reset, rs232_tx_o => rs232_tx,
        -         rs232_rx_i => rs232_rx, break_o => break, dbg_o => dbg);
        +         rs232_rx_i => rs232_rx, break_o => break, dbg_o => dbg,
        +         gpio_in => (others => '0'));
         
            trace_mod : Trace
               generic map(
        diff --git a/zpu/hdl/zealot/testbenches/small1_tb.vhdl b/zpu/hdl/zealot/testbenches/small1_tb.vhdl
        index bada24b..a77e5bc 100644
        --- a/zpu/hdl/zealot/testbenches/small1_tb.vhdl
        +++ b/zpu/hdl/zealot/testbenches/small1_tb.vhdl
        @@ -80,7 +80,11 @@ architecture Behave of Small1_TB is
                  break_o    : out std_logic;  -- Break executed
                  dbg_o      : out zpu_dbgo_t; -- Debug info
                  rs232_tx_o : out std_logic;  -- UART Tx
        -         rs232_rx_i : in  std_logic); -- UART Rx
        +         rs232_rx_i : in  std_logic;  -- UART Rx
        +         gpio_in    : in  std_logic_vector(31 downto 0);
        +         gpio_out   : out std_logic_vector(31 downto 0);
        +         gpio_dir   : out std_logic_vector(31 downto 0)  -- 1 = in, 0 = out
        +         );
            end component ZPU_Small1;
         
            signal clk          : std_logic;
        @@ -98,7 +102,8 @@ begin
                  BRAM_W => BRAM_W)
               port map(
                  clk_i => clk, rst_i => reset, rs232_tx_o => rs232_tx,
        -         rs232_rx_i => rs232_rx, break_o => break, dbg_o => dbg);
        +         rs232_rx_i => rs232_rx, break_o => break, dbg_o => dbg,
        +         gpio_in => (others => '0'));
         
            trace_mod : Trace
               generic map(
        diff --git a/zpu/hdl/zealot/zpu_pkg.vhdl b/zpu/hdl/zealot/zpu_pkg.vhdl
        index 2a15880..915f352 100644
        --- a/zpu/hdl/zealot/zpu_pkg.vhdl
        +++ b/zpu/hdl/zealot/zpu_pkg.vhdl
        @@ -140,6 +140,23 @@ package zpupkg is
                  data_o   : out unsigned(31 downto 0));
            end component Timer;
         
        +   component gpio is
        +      port(
        +         clk_i    : in  std_logic;
        +         reset_i  : in  std_logic;
        +         --
        +         we_i     : in  std_logic;
        +         data_i   : in  unsigned(31 downto 0);
        +         addr_i   : in  unsigned( 0 downto 0);
        +         data_o   : out unsigned(31 downto 0);
        +         --
        +         port_in  : in  std_logic_vector(31 downto 0);
        +         port_out : out std_logic_vector(31 downto 0);
        +         port_dir : out std_logic_vector(31 downto 0)
        +         );
        +   end component gpio;
        +
        +
            component ZPUPhiIO is
               generic(
                  BRDIVISOR : positive:=1;   -- Baud rate divisor i.e. br_clk/9600/4
        @@ -153,10 +170,16 @@ package zpupkg is
                  re_i       : in  std_logic; -- Read Enable
                  data_i     : in  unsigned(31 downto 0);
                  data_o     : out unsigned(31 downto 0);
        -         addr_i     : in  unsigned(2 downto 0); -- Address bits 4-2
        +         addr_i     : in  unsigned(2  downto 0); -- Address bits 4-2
        +         --
                  rs232_rx_i : in  std_logic;  -- UART Rx input
                  rs232_tx_o : out std_logic;  -- UART Tx output
        -         br_clk_i   : in  std_logic); -- UART base clock (enable)
        +         br_clk_i   : in  std_logic;  -- UART base clock (enable)
        +         --
        +         gpio_in    : in  std_logic_vector(31 downto 0);
        +         gpio_out   : out std_logic_vector(31 downto 0);
        +         gpio_dir   : out std_logic_vector(31 downto 0)
        +         );
            end component ZPUPhiIO;
         
            -- Opcode decode constants
        -- 
        cgit v1.1
        
        
        From e0735185b998f1e0bf61831bb15d802fada4e4ae Mon Sep 17 00:00:00 2001
        From: Bert Lange 
        Date: Tue, 25 Oct 2011 23:28:58 +0200
        Subject: add: software test for gpio module
        
        ---
         zpu/hdl/zpu4/test/gpiotest/build.sh   |  4 ++
         zpu/hdl/zpu4/test/gpiotest/gpiotest.c | 72 +++++++++++++++++++++++++++++++++++
         2 files changed, 76 insertions(+)
         create mode 100755 zpu/hdl/zpu4/test/gpiotest/build.sh
         create mode 100644 zpu/hdl/zpu4/test/gpiotest/gpiotest.c
        
        diff --git a/zpu/hdl/zpu4/test/gpiotest/build.sh b/zpu/hdl/zpu4/test/gpiotest/build.sh
        new file mode 100755
        index 0000000..c0385ad
        --- /dev/null
        +++ b/zpu/hdl/zpu4/test/gpiotest/build.sh
        @@ -0,0 +1,4 @@
        +zpu-elf-gcc -O3 -phi `pwd`/gpiotest.c -o gpiotest.elf -Wl,--relax -Wl,--gc-sections  -g
        +zpu-elf-objdump --disassemble-all >gpiotest.dis gpiotest.elf
        +zpu-elf-objcopy -O binary gpiotest.elf gpiotest.bin
        +java -classpath ../../../../sw/simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam gpiotest.bin >gpiotest.ram
        diff --git a/zpu/hdl/zpu4/test/gpiotest/gpiotest.c b/zpu/hdl/zpu4/test/gpiotest/gpiotest.c
        new file mode 100644
        index 0000000..393ab9f
        --- /dev/null
        +++ b/zpu/hdl/zpu4/test/gpiotest/gpiotest.c
        @@ -0,0 +1,72 @@
        +/*
        + * Small test program to check GPIOs 
        + * 
        + * LED chaser until keypress
        + *
        + */
        +
        +// addresses refer to Phi memory layout
        +#define GPIO_DATA   *((volatile unsigned int *) 0x080a0004)
        +#define GPIO_DIR    *((volatile unsigned int *) 0x080a0008)
        +
        +
        +#define BUTTON_EAST  (3)
        +#define BUTTON_NORTH (2)
        +#define BUTTON_SOUTH (1)
        +#define BUTTON_WEST  (0)
        +
        +
        +#define bit_is_set(var, bit)              ((var) & (1 << (bit)))
        +#define bit_is_clear(var, bit)            ((!(var)) & (1 << (bit)))
        +#define loop_until_bit_is_set(var, bit)   do { } while (bit_is_clear(var, bit))
        +#define loop_until_bit_is_clear(var, bit) do { } while (bit_is_set(var, bit))
        +
        +
        +void led_test( void)
        +{
        +    unsigned char runs;
        +    unsigned char leds;
        +
        +    runs = 1;
        +    leds = 0x01;
        +
        +    while( runs)
        +    {
        +        // output
        +        GPIO_DATA = leds;
        +
        +        // read button status
        +        if bit_is_set(GPIO_DATA, BUTTON_NORTH) 
        +        {
        +            runs = 0;
        +        }
        +
        +        // LED chaser
        +        leds = leds << 1;
        +        if (leds == 0)
        +        { 
        +            leds = 0x01;
        +        }
        +    }
        +}
        +
        +
        +void header_test( void)
        +{
        +    // this test is special for the SP601 header connector
        +    // check the output in simulation
        +    GPIO_DATA = 0x00550000;
        +    GPIO_DIR  = 0xff00ffff;
        +    GPIO_DATA = 0x00aa0000;
        +    GPIO_DIR  = 0xffffffff;
        +}
        +
        +
        +int main(int argc, char **argv)
        +{
        +
        +    led_test();
        +    header_test();
        +
        +    abort();
        +}
        -- 
        cgit v1.1
        
        
        From 5d41e2b45c7ccf2cb48a20aa77127e4ba1fa3eda Mon Sep 17 00:00:00 2001
        From: Bert Lange 
        Date: Tue, 25 Oct 2011 23:30:29 +0200
        Subject: minor fix: permission of build-scripts
        
        ---
         zpu/hdl/zpu4/test/dmips/build.sh     | 0
         zpu/hdl/zpu4/test/hello/build.sh     | 0
         zpu/hdl/zpu4/test/interrupt/build.sh | 0
         3 files changed, 0 insertions(+), 0 deletions(-)
         mode change 100644 => 100755 zpu/hdl/zpu4/test/dmips/build.sh
         mode change 100644 => 100755 zpu/hdl/zpu4/test/hello/build.sh
         mode change 100644 => 100755 zpu/hdl/zpu4/test/interrupt/build.sh
        
        diff --git a/zpu/hdl/zpu4/test/dmips/build.sh b/zpu/hdl/zpu4/test/dmips/build.sh
        old mode 100644
        new mode 100755
        diff --git a/zpu/hdl/zpu4/test/hello/build.sh b/zpu/hdl/zpu4/test/hello/build.sh
        old mode 100644
        new mode 100755
        diff --git a/zpu/hdl/zpu4/test/interrupt/build.sh b/zpu/hdl/zpu4/test/interrupt/build.sh
        old mode 100644
        new mode 100755
        -- 
        cgit v1.1
        
        
        From 236b344634cef79b294b33ef0141462351c13639 Mon Sep 17 00:00:00 2001
        From: Bert Lange 
        Date: Tue, 25 Oct 2011 23:32:05 +0200
        Subject: update: documentation
        
        ---
         zpu/docs/zpu_arch.html | 56 +++++++++++++++++++++++++++++++++++++++-----------
         1 file changed, 44 insertions(+), 12 deletions(-)
        
        diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html
        index ea48154..32a3ca2 100644
        --- a/zpu/docs/zpu_arch.html
        +++ b/zpu/docs/zpu_arch.html
        @@ -9,7 +9,6 @@ Several of the links will only work if you have checked out the zpu/zpu tree fro
         
      42. Introduction
        • License -
        • Survey
        • Features
        • Status
        • Download @@ -119,12 +118,6 @@ as such, then they need to be contributed back. is free to decide that the ZPU shall have a BSD license for HDL + GPL for the rest.

          - -

          Survey

          -

          Please take the time to fill in this short survey so we can gather -information about where the ZPU can be the most useful:

          -

          http://www.zylin.com/zpusurvey.html

          -

          Features

            @@ -155,7 +148,7 @@ Once www.opencores.org grows a GIT hosting service, the plan is to replicate the GIT repository there.

            -The GCC ZPU toolchain is available from "git://www.ecosforge.net:8100/zpu/toolchain.git". The ZPU GCC toolchain is BIG(over 100mBytes), otherwise it would have been hosted at repo.or.cz too. +The GCC ZPU toolchain is available from http://repo.or.cz/w/zpugcc.git. The ZPU GCC toolchain is BIG (over 100 MBytes).

            GIT

            For more advanced use of GIT, you will need to hit the books and read up @@ -1002,7 +995,7 @@ rather uncommon operations. These 32 registers are mapped to memory locations 0x value of these memory locations onto the stack, call _zpu_interrupt and restore them.

            -See zpu/hdl/zpu4/test/interrupt/ for C code and zpu/hdl/example/simzpu_interrupt.do +See zpu/hdl/zpu4/test/interrupt/ for C code and zpu/hdl/example/simzpu_interrupt.do for simulation example. @@ -1068,7 +1061,7 @@ For now if you are starting a design, zpu4 or zealot are probably the safest. z

            Performance Summary

            -TODO fill in performance table for Altera and Lattice. +TODO fill in performance table for Altera and Lattice.

            Tests are done with the Zealot SoC-System and Xilinx ISE 12.2 with standard settings. @@ -1229,7 +1222,7 @@ The key features are:

            • Includes a very basic PHI I/O synthesizable core. -It implements the 64 bits clocks counter (timer) and the UART. This is enough +It implements the 64 bits clocks counter (timer), GPIO and the UART. This is enough to run the DMIPS benchmark and a hello world application. I tested the UART @ 9600 bps and @ 115200 bps.
            • The ZPU can be customized using generics. It allows the use of more @@ -1247,6 +1240,7 @@ execution.
            • Includes ready to use memory images for a hello world program and the DMIPS benchmark.
            • Memory and trace blocks outside ZPU. This provides better modularity.
            • +
            • Much better documented code than the original version.
            Simulation and implementation files are provided. You need 16 kB of BRAMs @@ -1913,6 +1907,7 @@ while developing the ZPU.

            Description

            +

            0x080A0000

            @@ -1935,6 +1930,43 @@ while developing the ZPU. running

            + + + + +

            0x080A0004

            + + +

            Read/

            +

            Write

            + + +

            GPIO data

            + + +

            Bit [31:0] input data 31:0

            +

            Bit [31:0] output data 31:0

            + + + + + +

            0x080A0008

            + + +

            Read/

            +

            Write

            + + +

            GPIO direction

            + + +

            Bit [31:0] data direction 31:0

            +

            0 output

            +

            1 input (default)

            + + +

            0x080A000C

            @@ -2277,7 +2309,7 @@ while developing the ZPU.
          • fix the TODO in this doc that are just doc fixes
          • organize the TODO list by priority and assign responsibility... if there are takers.
          • converge on a single IO for core implementations. -
          • fill in performance table. +
          • fill in performance table for Altera and Lattice.
          • re-org CVS to make it easy to keep appropriate SW, RTL(verilog and VHDL) , scripts, verification stuff together. separation of tools, core, common, and ref design
          • provide FPGA scripts.
          • provide HDL regression environment. -- cgit v1.1 From 41c1038aa9d14583510b68165e907da3b896422b Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Fri, 28 Oct 2011 10:17:38 +0200 Subject: beautify: break long comment lines --- zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd | 13 +++++++++ .../zealot/fpga/digilent-starter-xc3s500e/top.vhd | 31 +++++++++++++++++----- zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd | 11 ++++++++ 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd index 53383cc..560e685 100644 --- a/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd +++ b/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top.vhd @@ -411,6 +411,19 @@ begin -- assign GPIOs -- no bidirectional pins (e.g. headers), so -- gpio_dir is unused + -- + -- bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + -- + -- in -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- out -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- + -- + -- bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + -- + -- in gpio_dipswitch(7.....0) -- -- -- -- buttons3.0 + -- out -- -- -- -- -- -- -- -- led(7................0) + -- + gpio_in(15 downto 8) <= gpio_dipswitch; gpio_in( 3 downto 0) <= gpio_button; diff --git a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd index 79668e5..4adc18b 100644 --- a/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd +++ b/zpu/hdl/zealot/fpga/digilent-starter-xc3s500e/top.vhd @@ -421,14 +421,31 @@ begin -- assign GPIOs -- no bidirectional pins (e.g. headers), so -- gpio_dir is unused - gpio_in <= ((6) => rot_a, - (5) => rot_b, - (4) => rot_center, + -- + -- bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + -- + -- in -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- out -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- + -- + -- bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + -- + -- in -- -- -- -- sw(3.....0) -- ra rb rc be bn bs bw + -- out -- -- -- -- -- -- -- -- led(7................0) + + gpio_in <= ((11) => sw(3), + (10) => sw(2), + ( 9) => sw(1), + ( 8) => sw(0), + -- + ( 6) => rot_a, + ( 5) => rot_b, + ( 4) => rot_center, -- - (3) => btn_east, - (2) => btn_north, - (1) => btn_south, - (0) => btn_west, + ( 3) => btn_east, + ( 2) => btn_north, + ( 1) => btn_south, + ( 0) => btn_west, others => '0'); diff --git a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd index bbeb0a2..27d158f 100644 --- a/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd +++ b/zpu/hdl/zealot/fpga/xilinx-sp601-xc6slx16/top.vhd @@ -534,6 +534,17 @@ begin -- pragma translate_on -- assign GPIOs + -- + -- bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + -- + -- in -- -- -- -- -- -- -- -- gpio_header_ls(7.....0) + -- out -- -- -- -- -- -- -- -- gpio_header_ls(7.....0) + -- + -- bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + -- + -- in -- -- -- -- switch(3.0) -- -- -- -- button(3.0) + -- out -- -- -- -- -- -- -- -- gpio_led(7...........0) + -- gpio_in(23 downto 16) <= gpio_header_ls; gpio_in(11 downto 8) <= gpio_switch; gpio_in( 3 downto 0) <= gpio_button; -- cgit v1.1 From 662a6952bc04419ac063cf3eb2b5917978eec0a1 Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Fri, 28 Oct 2011 10:59:45 +0200 Subject: add: Spartan3 reference design for zealot --- .../fpga/altium-livedesign-xc3s1000/clean_up.sh | 16 + .../fpga/altium-livedesign-xc3s1000/simulation.sh | 49 +++ .../simulation_config/run.do | 2 + .../simulation_config/wave.do | 30 ++ .../fpga/altium-livedesign-xc3s1000/synthesis.sh | 36 ++ .../altium-livedesign-xc3s1000.ucf | 397 +++++++++++++++++++++ .../synthesis_config/top.prj | 19 + .../synthesis_config/top.ut | 29 ++ .../synthesis_config/top.xst | 56 +++ .../zealot/fpga/altium-livedesign-xc3s1000/top.vhd | 372 +++++++++++++++++++ .../fpga/altium-livedesign-xc3s1000/top_tb.vhd | 194 ++++++++++ 11 files changed, 1200 insertions(+) create mode 100755 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/clean_up.sh create mode 100755 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation.sh create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/run.do create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/wave.do create mode 100755 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis.sh create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/altium-livedesign-xc3s1000.ucf create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.prj create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.ut create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.xst create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd create mode 100644 zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top_tb.vhd diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/clean_up.sh b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/clean_up.sh new file mode 100755 index 0000000..3855f16 --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/clean_up.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# ise build stuff +rm -rf build +rm -f top.bit + +# modelsim compile stuff +rm -rf work +rm -rf zpu + +# modelsim simulation stuff +rm -f vsim.wlf +rm -f transcript +rm -f zpu_trace.log +rm -f zpu_med1_io.log +rm -f zpu_small1_io.log diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation.sh b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation.sh new file mode 100755 index 0000000..d525737 --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# need project files: +# run.do +# wave.do + +# need ModelSim tools: +# vlib +# vcom +# vsim + + +echo "###############" +echo "compile zpu lib" +echo "###############" +vlib zpu +vcom -work zpu ../../roms/hello_dbram.vhdl +vcom -work zpu ../../roms/hello_bram.vhdl +#vcom -work zpu ../../roms/dmips_dbram.vhdl +#vcom -work zpu ../../roms/dmips_bram.vhdl + +vcom -work zpu ../../roms/rom_pkg.vhdl +vcom -work zpu ../../zpu_pkg.vhdl +vcom -work zpu ../../zpu_small.vhdl +vcom -work zpu ../../zpu_medium.vhdl +vcom -work zpu ../../helpers/zpu_small1.vhdl +vcom -work zpu ../../helpers/zpu_med1.vhdl +vcom -work zpu ../../devices/txt_util.vhdl +vcom -work zpu ../../devices/phi_io.vhdl +vcom -work zpu ../../devices/timer.vhdl +vcom -work zpu ../../devices/gpio.vhdl +vcom -work zpu ../../devices/rx_unit.vhdl +vcom -work zpu ../../devices/tx_unit.vhdl +vcom -work zpu ../../devices/br_gen.vhdl +vcom -work zpu ../../devices/trace.vhdl + + +echo "################" +echo "compile work lib" +echo "################" +vlib work +vcom top.vhd +vcom top_tb.vhd + + +echo "###################" +echo "start simulator gui" +echo "###################" +vsim -gui top_tb -do simulation_config/run.do diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/run.do b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/run.do new file mode 100644 index 0000000..acc1710 --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/run.do @@ -0,0 +1,2 @@ +do wave.do +run -all diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/wave.do b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/wave.do new file mode 100644 index 0000000..3f5d4fe --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/simulation_config/wave.do @@ -0,0 +1,30 @@ +onerror {resume} +quietly WaveActivateNextPane {} 0 +add wave -noupdate /top_tb/tb_reset_n +add wave -noupdate /top_tb/tb_clk +add wave -noupdate -divider +add wave -noupdate /top_tb/tb_rs232_rx +add wave -noupdate /top_tb/tb_rs232_tx +add wave -noupdate /top_tb/tb_rs232_rts +add wave -noupdate /top_tb/tb_rs232_cts +add wave -noupdate -divider Buttons +add wave -noupdate /top_tb/tb_button_n +add wave -noupdate -divider LEDs +add wave -noupdate /top_tb/tb_led +TreeUpdate [SetDefaultTree] +WaveRestoreCursors {{Cursor 1} {0 ps} 0} +configure wave -namecolwidth 150 +configure wave -valuecolwidth 100 +configure wave -justifyvalue left +configure wave -signalnamewidth 2 +configure wave -snapdistance 10 +configure wave -datasetprefix 0 +configure wave -rowmargin 4 +configure wave -childrowmargin 2 +configure wave -gridoffset 0 +configure wave -gridperiod 1 +configure wave -griddelta 40 +configure wave -timeline 0 +configure wave -timelineunits ns +update +WaveRestoreZoom {1294218073 ps} {1421130628 ps} diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis.sh b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis.sh new file mode 100755 index 0000000..a7180fc --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +# need project files: +# top.xst +# top.prj +# top.ut + +# need Xilinx tools: +# xst +# ngdbuild +# map +# par +# trce +# bitgen + +echo "########################" +echo "generate build directory" +echo "########################" +mkdir build +cd build +mkdir tmp + +echo "###############" +echo "start processes" +echo "###############" +xst -ifn "../synthesis_config/top.xst" -ofn "top.syr" +ngdbuild -dd _ngo -nt timestamp -uc ../synthesis_config/altium-livedesign-xc3s1000.ucf -p xc3s1000-fg456-4 top.ngc top.ngd +map -p xc3s1000-fg456-4 -cm area -ir off -pr off -c 100 -o top_map.ncd top.ngd top.pcf +par -w -ol high -t 1 top_map.ncd top.ncd top.pcf +trce -v 3 -s 4 -n 3 -fastpaths -xml top.twx top.ncd -o top.twr top.pcf +bitgen -f ../synthesis_config/top.ut top.ncd + +echo "###########" +echo "get bitfile" +echo "###########" +cp top.bit .. diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/altium-livedesign-xc3s1000.ucf b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/altium-livedesign-xc3s1000.ucf new file mode 100644 index 0000000..ba22ee9 --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/altium-livedesign-xc3s1000.ucf @@ -0,0 +1,397 @@ +############################################################ +# Altium Livedesign Evaluation Board constraints file +# +# Familiy: Spartan-3 +# Device: XC3S1000 +# Package: FG456C +# Speed: -4 +# +# all banks are powered with 3.3V +# +# config pins (M2, M1, M0): 101 + +############################################################ +## clock/timing constraints +############################################################ + +NET "clk_50" period = 50 MHz ; + + +############################################################ +## pin placement constraints +############################################################ + +NET "clk_50" LOC = AA12 | IOSTANDARD = LVCMOS33; +NET "reset_n" LOC = Y17 | IOSTANDARD = LVCMOS33; # low active + +# Soft JTAG +NET "soft_tdo" LOC = D22 | IOSTANDARD = LVCMOS33; +NET "soft_tms" LOC = E21 | IOSTANDARD = LVCMOS33; +NET "soft_tdi" LOC = E22 | IOSTANDARD = LVCMOS33; +NET "soft_tck" LOC = F21 | IOSTANDARD = LVCMOS33; + +# SRAM 0 +NET "sram0_a<0>" LOC = L6 | IOSTANDARD = LVCMOS33; +NET "sram0_a<1>" LOC = K4 | IOSTANDARD = LVCMOS33; +NET "sram0_a<2>" LOC = H5 | IOSTANDARD = LVCMOS33; +NET "sram0_a<3>" LOC = G6 | IOSTANDARD = LVCMOS33; +NET "sram0_a<4>" LOC = F3 | IOSTANDARD = LVCMOS33; +NET "sram0_a<5>" LOC = G1 | IOSTANDARD = LVCMOS33; +NET "sram0_a<6>" LOC = G2 | IOSTANDARD = LVCMOS33; +NET "sram0_a<7>" LOC = K3 | IOSTANDARD = LVCMOS33; +NET "sram0_a<8>" LOC = T2 | IOSTANDARD = LVCMOS33; +NET "sram0_a<9>" LOC = T1 | IOSTANDARD = LVCMOS33; +NET "sram0_a<10>" LOC = U2 | IOSTANDARD = LVCMOS33; +NET "sram0_a<11>" LOC = V3 | IOSTANDARD = LVCMOS33; +NET "sram0_a<12>" LOC = V1 | IOSTANDARD = LVCMOS33; +NET "sram0_a<13>" LOC = W1 | IOSTANDARD = LVCMOS33; +NET "sram0_a<14>" LOC = V2 | IOSTANDARD = LVCMOS33; +NET "sram0_a<15>" LOC = V5 | IOSTANDARD = LVCMOS33; +NET "sram0_a<16>" LOC = V4 | IOSTANDARD = LVCMOS33; +NET "sram0_a<17>" LOC = U5 | IOSTANDARD = LVCMOS33; +NET "sram0_a<18>" LOC = U6 | IOSTANDARD = LVCMOS33; # n.c. +NET "sram0_d<0>" LOC = L4 | IOSTANDARD = LVCMOS33; +NET "sram0_d<1>" LOC = L3 | IOSTANDARD = LVCMOS33; +NET "sram0_d<2>" LOC = M5 | IOSTANDARD = LVCMOS33; +NET "sram0_d<3>" LOC = M4 | IOSTANDARD = LVCMOS33; +NET "sram0_d<4>" LOC = M3 | IOSTANDARD = LVCMOS33; +NET "sram0_d<5>" LOC = N4 | IOSTANDARD = LVCMOS33; +NET "sram0_d<6>" LOC = N3 | IOSTANDARD = LVCMOS33; +NET "sram0_d<7>" LOC = T5 | IOSTANDARD = LVCMOS33; +NET "sram0_d<8>" LOC = T4 | IOSTANDARD = LVCMOS33; +NET "sram0_d<9>" LOC = T6 | IOSTANDARD = LVCMOS33; +NET "sram0_d<10>" LOC = M6 | IOSTANDARD = LVCMOS33; +NET "sram0_d<11>" LOC = N2 | IOSTANDARD = LVCMOS33; +NET "sram0_d<12>" LOC = N1 | IOSTANDARD = LVCMOS33; +NET "sram0_d<13>" LOC = M2 | IOSTANDARD = LVCMOS33; +NET "sram0_d<14>" LOC = M1 | IOSTANDARD = LVCMOS33; +NET "sram0_d<15>" LOC = L2 | IOSTANDARD = LVCMOS33; +NET "sram0_cs_n" LOC = L5 | IOSTANDARD = LVCMOS33; +NET "sram0_lb_n" LOC = L1 | IOSTANDARD = LVCMOS33; +NET "sram0_ub_n" LOC = K2 | IOSTANDARD = LVCMOS33; +NET "sram0_we_n" LOC = U4 | IOSTANDARD = LVCMOS33; +NET "sram0_oe_n" LOC = K1 | IOSTANDARD = LVCMOS33; + +# SRAM 1 +NET "sram1_a<0>" LOC = K21 | IOSTANDARD = LVCMOS33; +NET "sram1_a<1>" LOC = K22 | IOSTANDARD = LVCMOS33; +NET "sram1_a<2>" LOC = K20 | IOSTANDARD = LVCMOS33; +NET "sram1_a<3>" LOC = G21 | IOSTANDARD = LVCMOS33; +NET "sram1_a<4>" LOC = G22 | IOSTANDARD = LVCMOS33; +NET "sram1_a<5>" LOC = M17 | IOSTANDARD = LVCMOS33; +NET "sram1_a<6>" LOC = L18 | IOSTANDARD = LVCMOS33; +NET "sram1_a<7>" LOC = K19 | IOSTANDARD = LVCMOS33; +NET "sram1_a<8>" LOC = V19 | IOSTANDARD = LVCMOS33; +NET "sram1_a<9>" LOC = W20 | IOSTANDARD = LVCMOS33; +NET "sram1_a<10>" LOC = W19 | IOSTANDARD = LVCMOS33; +NET "sram1_a<11>" LOC = Y20 | IOSTANDARD = LVCMOS33; +NET "sram1_a<12>" LOC = Y21 | IOSTANDARD = LVCMOS33; +NET "sram1_a<13>" LOC = Y22 | IOSTANDARD = LVCMOS33; +NET "sram1_a<14>" LOC = W21 | IOSTANDARD = LVCMOS33; +NET "sram1_a<15>" LOC = W22 | IOSTANDARD = LVCMOS33; +NET "sram1_a<16>" LOC = V21 | IOSTANDARD = LVCMOS33; +NET "sram1_a<17>" LOC = V22 | IOSTANDARD = LVCMOS33; +NET "sram1_a<18>" LOC = V20 | IOSTANDARD = LVCMOS33; # n.c. +NET "sram1_d<0>" LOC = L21 | IOSTANDARD = LVCMOS33; +NET "sram1_d<1>" LOC = M22 | IOSTANDARD = LVCMOS33; +NET "sram1_d<2>" LOC = M21 | IOSTANDARD = LVCMOS33; +NET "sram1_d<3>" LOC = N22 | IOSTANDARD = LVCMOS33; +NET "sram1_d<4>" LOC = N21 | IOSTANDARD = LVCMOS33; +NET "sram1_d<5>" LOC = U20 | IOSTANDARD = LVCMOS33; +NET "sram1_d<6>" LOC = T22 | IOSTANDARD = LVCMOS33; +NET "sram1_d<7>" LOC = T21 | IOSTANDARD = LVCMOS33; +NET "sram1_d<8>" LOC = V18 | IOSTANDARD = LVCMOS33; +NET "sram1_d<9>" LOC = U19 | IOSTANDARD = LVCMOS33; +NET "sram1_d<10>" LOC = U18 | IOSTANDARD = LVCMOS33; +NET "sram1_d<11>" LOC = T18 | IOSTANDARD = LVCMOS33; +NET "sram1_d<12>" LOC = R18 | IOSTANDARD = LVCMOS33; +NET "sram1_d<13>" LOC = T17 | IOSTANDARD = LVCMOS33; +NET "sram1_d<14>" LOC = M18 | IOSTANDARD = LVCMOS33; +NET "sram1_d<15>" LOC = M20 | IOSTANDARD = LVCMOS33; +NET "sram1_cs_n" LOC = L22 | IOSTANDARD = LVCMOS33; +NET "sram1_lb_n" LOC = M19 | IOSTANDARD = LVCMOS33; +NET "sram1_ub_n" LOC = L20 | IOSTANDARD = LVCMOS33; +NET "sram1_we_n" LOC = U21 | IOSTANDARD = LVCMOS33; +NET "sram1_oe_n" LOC = L19 | IOSTANDARD = LVCMOS33; + +# RS232 +NET "rs232_rx" LOC = A5 | IOSTANDARD = LVCMOS33; +NET "rs232_tx" LOC = F7 | IOSTANDARD = LVCMOS33; +NET "rs232_cts" LOC = F2 | IOSTANDARD = LVCMOS33; +NET "rs232_rts" LOC = E1 | IOSTANDARD = LVCMOS33; + +# 2x PS2 connectors +NET "mouse_clk" LOC = L17 | IOSTANDARD = LVCMOS33; +NET "mouse_data" LOC = G18 | IOSTANDARD = LVCMOS33; +NET "kbd_clk" LOC = F20 | IOSTANDARD = LVCMOS33; +NET "kbd_data" LOC = G19 | IOSTANDARD = LVCMOS33; + + +# VGA output (2**9 = 512 colors) +NET "vga_blue<7>" LOC = E14 | IOSTANDARD = LVCMOS33; +NET "vga_blue<6>" LOC = A13 | IOSTANDARD = LVCMOS33; +NET "vga_blue<5>" LOC = C13 | IOSTANDARD = LVCMOS33; +NET "vga_green<7>" LOC = E11 | IOSTANDARD = LVCMOS33; +NET "vga_green<6>" LOC = C11 | IOSTANDARD = LVCMOS33; +NET "vga_green<5>" LOC = D10 | IOSTANDARD = LVCMOS33; +NET "vga_red<7>" LOC = D6 | IOSTANDARD = LVCMOS33; +NET "vga_red<6>" LOC = D7 | IOSTANDARD = LVCMOS33; +NET "vga_red<5>" LOC = D9 | IOSTANDARD = LVCMOS33; +NET "vga_hsync" LOC = A8 | IOSTANDARD = LVCMOS33; +NET "vga_vsync" LOC = B14 | IOSTANDARD = LVCMOS33; + + +# Stereo Audio out +NET "audio_r" LOC = U3 | IOSTANDARD = LVCMOS33; +NET "audio_l" LOC = W3 | IOSTANDARD = LVCMOS33; + + +# GPIO DIP switches 7..0 left..right, low active +NET "switch_n<0>" LOC = Y6 | IOSTANDARD = LVCMOS33; +NET "switch_n<1>" LOC = V6 | IOSTANDARD = LVCMOS33; +NET "switch_n<2>" LOC = U7 | IOSTANDARD = LVCMOS33; +NET "switch_n<3>" LOC = AA4 | IOSTANDARD = LVCMOS33; +NET "switch_n<4>" LOC = AB4 | IOSTANDARD = LVCMOS33; +NET "switch_n<5>" LOC = AA5 | IOSTANDARD = LVCMOS33; +NET "switch_n<6>" LOC = AB5 | IOSTANDARD = LVCMOS33; +NET "switch_n<7>" LOC = AA6 | IOSTANDARD = LVCMOS33; + +# GPIO push buttons, low active +NET "button_n<5>" LOC = C21 | IOSTANDARD = LVCMOS33; +NET "button_n<4>" LOC = B20 | IOSTANDARD = LVCMOS33; +NET "button_n<3>" LOC = A15 | IOSTANDARD = LVCMOS33; +NET "button_n<2>" LOC = B6 | IOSTANDARD = LVCMOS33; +NET "button_n<1>" LOC = C1 | IOSTANDARD = LVCMOS33; +NET "button_n<0>" LOC = D1 | IOSTANDARD = LVCMOS33; + +# GPIO LEDs +NET "led<7>" LOC = W6 | IOSTANDARD = LVCMOS33; +NET "led<6>" LOC = Y5 | IOSTANDARD = LVCMOS33; +NET "led<5>" LOC = W5 | IOSTANDARD = LVCMOS33; +NET "led<4>" LOC = W4 | IOSTANDARD = LVCMOS33; +NET "led<3>" LOC = Y3 | IOSTANDARD = LVCMOS33; +NET "led<2>" LOC = Y2 | IOSTANDARD = LVCMOS33; +NET "led<1>" LOC = Y1 | IOSTANDARD = LVCMOS33; +NET "led<0>" LOC = W2 | IOSTANDARD = LVCMOS33; + +# seven segment display (5=left 0=right) +# +# segment assignment: +# .ABCDEFG +# 76543210 +NET "dig0_seg<7>" LOC = E20 | IOSTANDARD = LVCMOS33; +NET "dig0_seg<6>" LOC = C22 | IOSTANDARD = LVCMOS33; +NET "dig0_seg<5>" LOC = E18 | IOSTANDARD = LVCMOS33; +NET "dig0_seg<4>" LOC = D20 | IOSTANDARD = LVCMOS33; +NET "dig0_seg<3>" LOC = D21 | IOSTANDARD = LVCMOS33; +NET "dig0_seg<2>" LOC = E19 | IOSTANDARD = LVCMOS33; +NET "dig0_seg<1>" LOC = G17 | IOSTANDARD = LVCMOS33; +NET "dig0_seg<0>" LOC = F19 | IOSTANDARD = LVCMOS33; + +NET "dig1_seg<7>" LOC = F17 | IOSTANDARD = LVCMOS33; +NET "dig1_seg<6>" LOC = D18 | IOSTANDARD = LVCMOS33; +NET "dig1_seg<5>" LOC = B19 | IOSTANDARD = LVCMOS33; +NET "dig1_seg<4>" LOC = C18 | IOSTANDARD = LVCMOS33; +NET "dig1_seg<3>" LOC = C19 | IOSTANDARD = LVCMOS33; +NET "dig1_seg<2>" LOC = C20 | IOSTANDARD = LVCMOS33; +NET "dig1_seg<1>" LOC = F18 | IOSTANDARD = LVCMOS33; +NET "dig1_seg<0>" LOC = D19 | IOSTANDARD = LVCMOS33; + +NET "dig2_seg<7>" LOC = A19 | IOSTANDARD = LVCMOS33; +NET "dig2_seg<6>" LOC = E17 | IOSTANDARD = LVCMOS33; +NET "dig2_seg<5>" LOC = C17 | IOSTANDARD = LVCMOS33; +NET "dig2_seg<4>" LOC = D17 | IOSTANDARD = LVCMOS33; +NET "dig2_seg<3>" LOC = B15 | IOSTANDARD = LVCMOS33; +NET "dig2_seg<2>" LOC = A18 | IOSTANDARD = LVCMOS33; +NET "dig2_seg<1>" LOC = B18 | IOSTANDARD = LVCMOS33; +NET "dig2_seg<0>" LOC = B17 | IOSTANDARD = LVCMOS33; + +NET "dig3_seg<7>" LOC = D15 | IOSTANDARD = LVCMOS33; +NET "dig3_seg<6>" LOC = E13 | IOSTANDARD = LVCMOS33; +NET "dig3_seg<5>" LOC = B13 | IOSTANDARD = LVCMOS33; +NET "dig3_seg<4>" LOC = D13 | IOSTANDARD = LVCMOS33; +NET "dig3_seg<3>" LOC = D14 | IOSTANDARD = LVCMOS33; +NET "dig3_seg<2>" LOC = A14 | IOSTANDARD = LVCMOS33; +NET "dig3_seg<1>" LOC = E16 | IOSTANDARD = LVCMOS33; +NET "dig3_seg<0>" LOC = E15 | IOSTANDARD = LVCMOS33; + +NET "dig4_seg<7>" LOC = D11 | IOSTANDARD = LVCMOS33; +NET "dig4_seg<6>" LOC = E9 | IOSTANDARD = LVCMOS33; +NET "dig4_seg<5>" LOC = A10 | IOSTANDARD = LVCMOS33; +NET "dig4_seg<4>" LOC = B9 | IOSTANDARD = LVCMOS33; +NET "dig4_seg<3>" LOC = A9 | IOSTANDARD = LVCMOS33; +NET "dig4_seg<2>" LOC = C10 | IOSTANDARD = LVCMOS33; +NET "dig4_seg<1>" LOC = A12 | IOSTANDARD = LVCMOS33; +NET "dig4_seg<0>" LOC = B10 | IOSTANDARD = LVCMOS33; + +NET "dig5_seg<7>" LOC = C7 | IOSTANDARD = LVCMOS33; +NET "dig5_seg<6>" LOC = A4 | IOSTANDARD = LVCMOS33; +NET "dig5_seg<5>" LOC = B5 | IOSTANDARD = LVCMOS33; +NET "dig5_seg<4>" LOC = E6 | IOSTANDARD = LVCMOS33; +NET "dig5_seg<3>" LOC = C5 | IOSTANDARD = LVCMOS33; +NET "dig5_seg<2>" LOC = E7 | IOSTANDARD = LVCMOS33; +NET "dig5_seg<1>" LOC = B8 | IOSTANDARD = LVCMOS33; +NET "dig5_seg<0>" LOC = C6 | IOSTANDARD = LVCMOS33; + + +# Header A (left) +NET "header_a<2>" LOC = V7 | IOSTANDARD = LVCMOS33; +NET "header_a<3>" LOC = AA8 | IOSTANDARD = LVCMOS33; +NET "header_a<4>" LOC = AB8 | IOSTANDARD = LVCMOS33; +NET "header_a<5>" LOC = V8 | IOSTANDARD = LVCMOS33; +NET "header_a<6>" LOC = Y10 | IOSTANDARD = LVCMOS33; +NET "header_a<7>" LOC = V9 | IOSTANDARD = LVCMOS33; +NET "header_a<8>" LOC = W9 | IOSTANDARD = LVCMOS33; +NET "header_a<9>" LOC = AA10 | IOSTANDARD = LVCMOS33; +NET "header_a<10>" LOC = AB10 | IOSTANDARD = LVCMOS33; +NET "header_a<11>" LOC = W10 | IOSTANDARD = LVCMOS33; +NET "header_a<12>" LOC = AB11 | IOSTANDARD = LVCMOS33; +NET "header_a<13>" LOC = U11 | IOSTANDARD = LVCMOS33; +NET "header_a<14>" LOC = AB13 | IOSTANDARD = LVCMOS33; +NET "header_a<15>" LOC = AA13 | IOSTANDARD = LVCMOS33; +NET "header_a<16>" LOC = V10 | IOSTANDARD = LVCMOS33; +NET "header_a<17>" LOC = U10 | IOSTANDARD = LVCMOS33; +NET "header_a<18>" LOC = W13 | IOSTANDARD = LVCMOS33; +NET "header_a<19>" LOC = Y13 | IOSTANDARD = LVCMOS33; + +# Header B (right) +NET "header_b<2>" LOC = V14 | IOSTANDARD = LVCMOS33; +NET "header_b<3>" LOC = V13 | IOSTANDARD = LVCMOS33; +NET "header_b<4>" LOC = AA15 | IOSTANDARD = LVCMOS33; +NET "header_b<5>" LOC = W14 | IOSTANDARD = LVCMOS33; +NET "header_b<6>" LOC = AB15 | IOSTANDARD = LVCMOS33; +NET "header_b<7>" LOC = Y16 | IOSTANDARD = LVCMOS33; +NET "header_b<8>" LOC = AA17 | IOSTANDARD = LVCMOS33; +NET "header_b<9>" LOC = AA18 | IOSTANDARD = LVCMOS33; +NET "header_b<10>" LOC = AB18 | IOSTANDARD = LVCMOS33; +NET "header_b<11>" LOC = Y18 | IOSTANDARD = LVCMOS33; +NET "header_b<12>" LOC = Y19 | IOSTANDARD = LVCMOS33; +NET "header_b<13>" LOC = AB20 | IOSTANDARD = LVCMOS33; +NET "header_b<14>" LOC = AA20 | IOSTANDARD = LVCMOS33; +NET "header_b<15>" LOC = U16 | IOSTANDARD = LVCMOS33; +NET "header_b<16>" LOC = V16 | IOSTANDARD = LVCMOS33; +NET "header_b<17>" LOC = V17 | IOSTANDARD = LVCMOS33; +NET "header_b<18>" LOC = W16 | IOSTANDARD = LVCMOS33; +NET "header_b<19>" LOC = W17 | IOSTANDARD = LVCMOS33; + +# usused pins +CONFIG PROHIBIT = A3; +CONFIG PROHIBIT = A7; +CONFIG PROHIBIT = A11; +CONFIG PROHIBIT = A16; +CONFIG PROHIBIT = AA3; +CONFIG PROHIBIT = AA7; +CONFIG PROHIBIT = AA9; +CONFIG PROHIBIT = AA11; +CONFIG PROHIBIT = AA14; +CONFIG PROHIBIT = AA16; +CONFIG PROHIBIT = AA19; +CONFIG PROHIBIT = AB7; +CONFIG PROHIBIT = AB9; +CONFIG PROHIBIT = AB12; +CONFIG PROHIBIT = AB14; +CONFIG PROHIBIT = AB16; +CONFIG PROHIBIT = AB19; +CONFIG PROHIBIT = B4; +CONFIG PROHIBIT = B7; +CONFIG PROHIBIT = B12; +CONFIG PROHIBIT = B11; +CONFIG PROHIBIT = B16; +CONFIG PROHIBIT = C2; +CONFIG PROHIBIT = C3; +CONFIG PROHIBIT = C4; +CONFIG PROHIBIT = C12; +CONFIG PROHIBIT = C16; +CONFIG PROHIBIT = D2; +CONFIG PROHIBIT = D3; +CONFIG PROHIBIT = D4; +CONFIG PROHIBIT = D5; +CONFIG PROHIBIT = D8; +CONFIG PROHIBIT = D12; +CONFIG PROHIBIT = D16; +CONFIG PROHIBIT = E2; +CONFIG PROHIBIT = E3; +CONFIG PROHIBIT = E8; +CONFIG PROHIBIT = E4; +CONFIG PROHIBIT = E5; +CONFIG PROHIBIT = F4; +CONFIG PROHIBIT = E10; +CONFIG PROHIBIT = E12; +CONFIG PROHIBIT = F12; +CONFIG PROHIBIT = F5; +CONFIG PROHIBIT = F13; +CONFIG PROHIBIT = F6; +CONFIG PROHIBIT = F9; +CONFIG PROHIBIT = F10; +CONFIG PROHIBIT = F16; +CONFIG PROHIBIT = F11; +CONFIG PROHIBIT = F14; +CONFIG PROHIBIT = G3; +CONFIG PROHIBIT = G4; +CONFIG PROHIBIT = G5; +CONFIG PROHIBIT = G20; +CONFIG PROHIBIT = H1; +CONFIG PROHIBIT = H2; +CONFIG PROHIBIT = H4; +CONFIG PROHIBIT = H18; +CONFIG PROHIBIT = H19; +CONFIG PROHIBIT = H21; +CONFIG PROHIBIT = H22; +CONFIG PROHIBIT = J1; +CONFIG PROHIBIT = J2; +CONFIG PROHIBIT = J4; +CONFIG PROHIBIT = J5; +CONFIG PROHIBIT = J6; +CONFIG PROHIBIT = J17; +CONFIG PROHIBIT = J18; +CONFIG PROHIBIT = J19; +CONFIG PROHIBIT = J21; +CONFIG PROHIBIT = J22; +CONFIG PROHIBIT = K5; +CONFIG PROHIBIT = K6; +CONFIG PROHIBIT = K17; +CONFIG PROHIBIT = K18; +CONFIG PROHIBIT = N5; +CONFIG PROHIBIT = N6; +CONFIG PROHIBIT = N17; +CONFIG PROHIBIT = N18; +CONFIG PROHIBIT = N19; +CONFIG PROHIBIT = N20; +CONFIG PROHIBIT = P1; +CONFIG PROHIBIT = P2; +CONFIG PROHIBIT = P4; +CONFIG PROHIBIT = P5; +CONFIG PROHIBIT = P6; +CONFIG PROHIBIT = P17; +CONFIG PROHIBIT = P18; +CONFIG PROHIBIT = P19; +CONFIG PROHIBIT = P21; +CONFIG PROHIBIT = P22; +CONFIG PROHIBIT = R1; +CONFIG PROHIBIT = R2; +CONFIG PROHIBIT = R4; +CONFIG PROHIBIT = R5; +CONFIG PROHIBIT = R19; +CONFIG PROHIBIT = R21; +CONFIG PROHIBIT = R22; +CONFIG PROHIBIT = T3; +CONFIG PROHIBIT = T19; +CONFIG PROHIBIT = T20; +CONFIG PROHIBIT = U9; +CONFIG PROHIBIT = U12; +CONFIG PROHIBIT = U13; +CONFIG PROHIBIT = U14; +CONFIG PROHIBIT = U17; +CONFIG PROHIBIT = V11; +CONFIG PROHIBIT = V12; +CONFIG PROHIBIT = V15; +CONFIG PROHIBIT = W7; +CONFIG PROHIBIT = W8; +CONFIG PROHIBIT = W11; +CONFIG PROHIBIT = W12; +CONFIG PROHIBIT = W15; +CONFIG PROHIBIT = W18; +CONFIG PROHIBIT = Y4; +CONFIG PROHIBIT = Y7; +CONFIG PROHIBIT = Y11; +CONFIG PROHIBIT = Y12; diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.prj b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.prj new file mode 100644 index 0000000..24120d5 --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.prj @@ -0,0 +1,19 @@ +vhdl work ../top.vhd +vhdl zpu ../../../zpu_pkg.vhdl +vhdl zpu ../../../zpu_small.vhdl +vhdl zpu ../../../zpu_medium.vhdl +vhdl zpu ../../../roms/rom_pkg.vhdl +#vhdl zpu ../../../roms/hello_dbram.vhdl +#vhdl zpu ../../../roms/hello_bram.vhdl +vhdl zpu ../../../roms/dmips_dbram.vhdl +vhdl zpu ../../../roms/dmips_bram.vhdl +vhdl zpu ../../../helpers/zpu_small1.vhdl +vhdl zpu ../../../helpers/zpu_med1.vhdl +vhdl zpu ../../../devices/txt_util.vhdl +vhdl zpu ../../../devices/phi_io.vhdl +vhdl zpu ../../../devices/timer.vhdl +vhdl zpu ../../../devices/gpio.vhdl +vhdl zpu ../../../devices/rx_unit.vhdl +vhdl zpu ../../../devices/tx_unit.vhdl +vhdl zpu ../../../devices/br_gen.vhdl +vhdl zpu ../../../devices/trace.vhdl diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.ut b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.ut new file mode 100644 index 0000000..765a6f3 --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.ut @@ -0,0 +1,29 @@ +-w +-g DebugBitstream:No +-g Binary:no +-g CRC:Enable +-g ConfigRate:6 +-g CclkPin:PullUp +-g M0Pin:PullUp +-g M1Pin:PullUp +-g M2Pin:PullUp +-g ProgPin:PullUp +-g DonePin:PullUp +-g HswapenPin:PullUp +-g TckPin:PullUp +-g TdiPin:PullUp +-g TdoPin:PullUp +-g TmsPin:PullUp +-g UnusedPin:PullDown +-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 Match_cycle:Auto +-g Security:None +-g DonePipe:No +-g DriveDone:No diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.xst b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.xst new file mode 100644 index 0000000..14873ea --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/synthesis_config/top.xst @@ -0,0 +1,56 @@ +set -tmpdir "tmp" +set -xsthdpdir "xst" +run +-ifn ../synthesis_config/top.prj +-ifmt mixed +-ofn top +-ofmt NGC +-p xc3s1000-4-fg456 +-top top +-opt_mode Speed +-opt_level 1 +-iuc NO +-keep_hierarchy No +-netlist_hierarchy As_Optimized +-rtlview Yes +-glob_opt AllClockNets +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case Maintain +-slice_utilization_ratio 100 +-bram_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 +-mux_style Auto +-decoder_extract YES +-priority_extract Yes +-shreg_extract YES +-shift_extract YES +-xor_collapse YES +-rom_style Auto +-auto_bram_packing NO +-mux_extract Yes +-resource_sharing YES +-async_to_sync NO +-mult_style Auto +-iobuf YES +-max_fanout 500 +-bufg 8 +-register_duplication YES +-register_balancing No +-slice_packing YES +-optimize_primitives NO +-use_clock_enable Yes +-use_sync_set Yes +-use_sync_reset Yes +-iob Auto +-equivalent_register_removal YES +-slice_utilization_ratio_maxmargin 5 diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd new file mode 100644 index 0000000..fbca62b --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd @@ -0,0 +1,372 @@ +-- top module of +-- Altium LiveDesign Board +-- +-- using following external connections: +-- test button as reset +-- LEDs and 7 segment for output +-- RS232 +-- + + +library ieee; +use ieee.std_logic_1164.all; + +library zpu; +use zpu.zpupkg.all; -- zpu_dbgo_t + +library unisim; +use unisim.vcomponents.dcm; + + +entity top is + port ( + -- pragma translate_off + stop_simulation : out std_logic; + -- pragma translate_on + clk_50 : in std_logic; + reset_n : in std_logic; + -- + -- soft JTAG + soft_tdo : out std_logic; + soft_tms : in std_logic; + soft_tdi : in std_logic; + soft_tck : in std_logic; + -- + -- SRAM 0 (256k x 16) pin connections + sram0_a : out std_logic_vector(18 downto 0); + sram0_d : inout std_logic_vector(15 downto 0); + sram0_lb_n : out std_logic; + sram0_ub_n : out std_logic; + sram0_cs_n : out std_logic; -- chip select + sram0_we_n : out std_logic; -- write-enable + sram0_oe_n : out std_logic; -- output enable + -- + -- SRAM 1 (256k x 16) pin connections + sram1_a : out std_logic_vector(18 downto 0); + sram1_d : inout std_logic_vector(15 downto 0); + sram1_lb_n : out std_logic; + sram1_ub_n : out std_logic; + sram1_cs_n : out std_logic; -- chip select + sram1_we_n : out std_logic; -- write-enable + sram1_oe_n : out std_logic; -- output enable + -- + -- RS232 + rs232_rx : in std_logic; + rs232_tx : out std_logic; + rs232_cts : in std_logic; + rs232_rts : out std_logic; + -- + -- PS2 connectors + mouse_clk : inout std_logic; + mouse_data : inout std_logic; + kbd_clk : inout std_logic; + kbd_data : inout std_logic; + -- + -- vga output + vga_red : out std_logic_vector(7 downto 5); + vga_green : out std_logic_vector(7 downto 5); + vga_blue : out std_logic_vector(7 downto 5); + vga_hsync : out std_logic; + vga_vsync : out std_logic; + -- + -- Audio out + audio_r : out std_logic; + audio_l : out std_logic; + -- + -- GPIOs + switch_n : in std_logic_vector(7 downto 0); + button_n : in std_logic_vector(5 downto 0); + led : out std_logic_vector(7 downto 0); + -- + -- seven segment display + dig0_seg : out std_logic_vector(7 downto 0); + dig1_seg : out std_logic_vector(7 downto 0); + dig2_seg : out std_logic_vector(7 downto 0); + dig3_seg : out std_logic_vector(7 downto 0); + dig4_seg : out std_logic_vector(7 downto 0); + dig5_seg : out std_logic_vector(7 downto 0); + -- + -- User Header + header_a : inout std_logic_vector(19 downto 2); + header_b : inout std_logic_vector(19 downto 2) + ); +end entity top; + + +architecture rtl of top is + + + --------------------------- + -- type declarations + type zpu_type is (zpu_small, zpu_medium); + + --------------------------- + -- constant declarations + constant zpu_flavour : zpu_type := zpu_small; -- choose your flavour HERE + -- modify frequency here + constant clk_multiply : positive := 3; -- 9 for small, 3 for medium + constant clk_divide : positive := 2; -- 5 for small, 2 for medium + -- + constant word_size_c : natural := 32; -- 32 bits data path + constant addr_w_c : natural := 18; -- 18 bits address space=256 kB, 128 kB I/O + + constant clk_frequency : positive := 50; -- input frequency for correct calculation + + + --------------------------- + -- component declarations + component zpu_small1 is + generic ( + word_size : natural := 32; -- 32 bits data path + d_care_val : std_logic := '0'; -- Fill value + clk_freq : positive := 50; -- 50 MHz clock + brate : positive := 115200; -- RS232 baudrate + addr_w : natural := 16; -- 16 bits address space=64 kB, 32 kB I/O + bram_w : natural := 15 -- 15 bits RAM space=32 kB + ); + port ( + clk_i : in std_logic; -- CPU clock + rst_i : in std_logic; -- Reset + break_o : out std_logic; -- Break executed + dbg_o : out zpu_dbgo_t; -- Debug info + rs232_tx_o : out std_logic; -- UART Tx + rs232_rx_i : in std_logic; -- UART Rx + gpio_in : in std_logic_vector(31 downto 0); + gpio_out : out std_logic_vector(31 downto 0); + gpio_dir : out std_logic_vector(31 downto 0) -- 1 = in, 0 = out + ); + end component zpu_small1; + + component zpu_med1 is + generic( + word_size : natural := 32; -- 32 bits data path + d_care_val : std_logic := '0'; -- Fill value + clk_freq : positive := 50; -- 50 MHz clock + brate : positive := 115200; -- RS232 baudrate + addr_w : natural := 18; -- 18 bits address space=256 kB, 128 kB I/O + bram_w : natural := 15 -- 15 bits RAM space=32 kB + ); + port( + clk_i : in std_logic; -- CPU clock + rst_i : in std_logic; -- Reset + break_o : out std_logic; -- Break executed + dbg_o : out zpu_dbgo_t; -- Debug info + rs232_tx_o : out std_logic; -- UART Tx + rs232_rx_i : in std_logic; -- UART Rx + gpio_in : in std_logic_vector(31 downto 0); + gpio_out : out std_logic_vector(31 downto 0); + gpio_dir : out std_logic_vector(31 downto 0) -- 1 = in, 0 = out + ); + end component zpu_med1; + + + --------------------------- + -- signal declarations + signal dcm_i0_clk0 : std_ulogic; + signal dcm_i0_clkfx : std_ulogic; + signal clk_fb : std_ulogic; + signal clk : std_ulogic; + -- + signal reset_shift_reg : std_ulogic_vector(3 downto 0); + signal reset_sync : std_ulogic; + -- + signal zpu_i0_dbg : zpu_dbgo_t; -- Debug info + signal zpu_i0_break : std_logic; + -- + signal gpio_in : std_logic_vector(31 downto 0) := (others => '0'); + signal zpu_i0_gpio_out : std_logic_vector(31 downto 0); + signal zpu_i0_gpio_dir : std_logic_vector(31 downto 0); + + +begin + + -- default output drivers + -- to pass bitgen DRC + -- outputs used by design are commented + soft_tdo <= '1'; + -- + sram0_a <= (others => '1'); + sram0_d <= (others => 'Z'); + sram0_lb_n <= '1'; + sram0_ub_n <= '1'; + sram0_cs_n <= '1'; + sram0_we_n <= '1'; + sram0_oe_n <= '1'; + -- + sram1_a <= (others => '1'); + sram1_d <= (others => 'Z'); + sram1_lb_n <= '1'; + sram1_ub_n <= '1'; + sram1_cs_n <= '1'; + sram1_we_n <= '1'; + sram1_oe_n <= '1'; + -- + --rs232_tx <= '1'; + rs232_rts <= '1'; + -- + mouse_clk <= 'Z'; + mouse_data <= 'Z'; + kbd_clk <= 'Z'; + kbd_data <= 'Z'; + -- + vga_red <= (others => '1'); + vga_green <= (others => '1'); + vga_blue <= (others => '1'); + vga_hsync <= '1'; + vga_vsync <= '1'; + -- + audio_r <= '0'; + audio_l <= '0'; + -- + --led <= (others => '0'); + -- + --dig0_seg <= (others => '0'); + --dig1_seg <= (others => '0'); + dig2_seg <= (others => '0'); + dig3_seg <= (others => '0'); + dig4_seg <= (others => '0'); + dig5_seg <= (others => '0'); + -- + header_a <= (others => 'Z'); + header_b <= (others => 'Z'); + + + -- digital clock manager (DCM) + -- to generate higher/other system clock frequencys + dcm_i0 : dcm + generic map ( + startup_wait => true, -- wait with DONE till locked + clkfx_multiply => clk_multiply, + clkfx_divide => clk_divide, + clk_feedback => "1X" + ) + port map ( + clkin => clk_50, + clk0 => dcm_i0_clk0, + clkfx => dcm_i0_clkfx, + clkfb => clk_fb + ); + + clk_fb <= dcm_i0_clk0; + clk <= dcm_i0_clkfx; + + + -- reset synchronizer + -- generate synchronous reset + reset_synchronizer : process(clk, reset_n) + begin + if reset_n = '0' then + reset_shift_reg <= (others => '1'); + elsif rising_edge(clk) then + reset_shift_reg <= reset_shift_reg(reset_shift_reg'high-1 downto 0) & '0'; + end if; + end process; + reset_sync <= reset_shift_reg(reset_shift_reg'high); + + + -- select instance of zpu + zpu_i0_small : if zpu_flavour = zpu_small generate + zpu_i0 : zpu_small1 + generic map ( + addr_w => addr_w_c, + word_size => word_size_c, + clk_freq => clk_frequency * clk_multiply / clk_divide + ) + port map ( + clk_i => clk, -- : in std_logic; -- CPU clock + rst_i => reset_sync, -- : in std_logic; -- Reset + break_o => zpu_i0_break, -- : out std_logic; -- Break executed + dbg_o => zpu_i0_dbg, -- : out zpu_dbgo_t; -- Debug info + rs232_tx_o => rs232_tx, -- : out std_logic; -- UART Tx + rs232_rx_i => rs232_rx, -- : in std_logic -- UART Rx + gpio_in => gpio_in, -- : in std_logic_vector(31 downto 0); + gpio_out => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0); + gpio_dir => zpu_i0_gpio_dir -- : out std_logic_vector(31 downto 0) -- 1 = in, 0 = out + ); + end generate zpu_i0_small; + + zpu_i0_medium : if zpu_flavour = zpu_medium generate + zpu_i0 : zpu_med1 + generic map ( + addr_w => addr_w_c, + word_size => word_size_c, + clk_freq => clk_frequency * clk_multiply / clk_divide + ) + port map ( + clk_i => clk, -- : in std_logic; -- CPU clock + rst_i => reset_sync, -- : in std_logic; -- Reset + break_o => zpu_i0_break, -- : out std_logic; -- Break executed + dbg_o => zpu_i0_dbg, -- : out zpu_dbgo_t; -- Debug info + rs232_tx_o => rs232_tx, -- : out std_logic; -- UART Tx + rs232_rx_i => rs232_rx, -- : in std_logic -- UART Rx + gpio_in => gpio_in, -- : in std_logic_vector(31 downto 0); + gpio_out => zpu_i0_gpio_out, -- : out std_logic_vector(31 downto 0); + gpio_dir => zpu_i0_gpio_dir -- : out std_logic_vector(31 downto 0) -- 1 = in, 0 = out + ); + end generate zpu_i0_medium; + + + -- pragma translate_off + stop_simulation <= zpu_i0_break; + + + trace_mod : trace + generic map ( + addr_w => addr_w_c, + word_size => word_size_c, + log_file => "zpu_trace.log" + ) + port map ( + clk_i => clk, + dbg_i => zpu_i0_dbg, + stop_i => zpu_i0_break, + busy_i => '0' + ); + -- pragma translate_on + + + -- assign GPIOs + -- + -- bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + -- + -- in header_a(19.........12) -- -- -- -- -- -- -- -- + -- out header_a(19.........12) dig1_seg(7...........0) + -- + -- + -- bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + -- + -- in switch_n(7...........0) -- -- button_n(5....0) + -- out dig0_seg(7...........0) led(7................0) + -- + + gpio_in(31 downto 24) <= header_a(19 downto 12); + gpio_in(15 downto 8) <= switch_n; + gpio_in( 5 downto 0) <= button_n; + + -- 3-state buffers for some headers + header_a(19) <= zpu_i0_gpio_out(31) when zpu_i0_gpio_dir(31) = '0' else 'Z'; + header_a(18) <= zpu_i0_gpio_out(30) when zpu_i0_gpio_dir(30) = '0' else 'Z'; + header_a(17) <= zpu_i0_gpio_out(29) when zpu_i0_gpio_dir(29) = '0' else 'Z'; + header_a(16) <= zpu_i0_gpio_out(28) when zpu_i0_gpio_dir(28) = '0' else 'Z'; + header_a(15) <= zpu_i0_gpio_out(27) when zpu_i0_gpio_dir(27) = '0' else 'Z'; + header_a(14) <= zpu_i0_gpio_out(26) when zpu_i0_gpio_dir(26) = '0' else 'Z'; + header_a(13) <= zpu_i0_gpio_out(25) when zpu_i0_gpio_dir(25) = '0' else 'Z'; + header_a(12) <= zpu_i0_gpio_out(24) when zpu_i0_gpio_dir(24) = '0' else 'Z'; + + -- outputs + dig1_seg <= zpu_i0_gpio_out(23 downto 16); + dig0_seg <= zpu_i0_gpio_out(15 downto 8); + + -- switch on all LEDs in case of break + process + begin + wait until rising_edge(clk); + led <= zpu_i0_gpio_out(7 downto 0); + if zpu_i0_break = '1' then + led <= (others => '1'); + end if; + end process; + + +end architecture rtl; + diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top_tb.vhd b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top_tb.vhd new file mode 100644 index 0000000..e42fc20 --- /dev/null +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top_tb.vhd @@ -0,0 +1,194 @@ +-- testbench for +-- Altium LiveDesign Board +-- +-- includes "model" for clock generation +-- simulate press on test/reset as reset +-- +-- place models for external components (SRAM, PS2) in this file +-- + + +library ieee; +use ieee.std_logic_1164.all; + + +entity top_tb is +end entity top_tb; + +architecture testbench of top_tb is + + --------------------------- + -- constant declarations + constant clk_period : time := 1 sec / 50_000_000; -- 50 MHz + + + --------------------------- + -- signal declarations + signal simulation_run : boolean := true; + signal tb_stop_simulation : std_logic; + -- + signal tb_clk : std_logic := '0'; + signal tb_reset_n : std_logic; + -- + -- soft JTAG + signal tb_soft_tdo : std_logic; + signal tb_soft_tms : std_logic := '1'; + signal tb_soft_tdi : std_logic := '1'; + signal tb_soft_tck : std_logic := '1'; + -- + -- SRAM 0 (256k x 16) pin connections + signal tb_sram0_a : std_logic_vector(18 downto 0); + signal tb_sram0_d : std_logic_vector(15 downto 0) := (others => 'Z'); + signal tb_sram0_lb_n : std_logic; + signal tb_sram0_ub_n : std_logic; + signal tb_sram0_cs_n : std_logic; -- chip select + signal tb_sram0_we_n : std_logic; -- write-enable + signal tb_sram0_oe_n : std_logic; -- output enable + -- + -- SRAM 1 (256k x 16) pin connections + signal tb_sram1_a : std_logic_vector(18 downto 0); + signal tb_sram1_d : std_logic_vector(15 downto 0) := (others => 'Z'); + signal tb_sram1_lb_n : std_logic; + signal tb_sram1_ub_n : std_logic; + signal tb_sram1_cs_n : std_logic; -- chip select + signal tb_sram1_we_n : std_logic; -- write-enable + signal tb_sram1_oe_n : std_logic; -- output enable + -- + -- RS232 + signal tb_rs232_rx : std_logic := '1'; + signal tb_rs232_tx : std_logic; + signal tb_rs232_cts : std_logic := '1'; + signal tb_rs232_rts : std_logic; + -- + -- PS2 connectors + signal tb_mouse_clk : std_logic := 'Z'; + signal tb_mouse_data : std_logic := 'Z'; + signal tb_kbd_clk : std_logic := 'Z'; + signal tb_kbd_data : std_logic := 'Z'; + -- + -- vga output + signal tb_vga_red : std_logic_vector(7 downto 5); + signal tb_vga_green : std_logic_vector(7 downto 5); + signal tb_vga_blue : std_logic_vector(7 downto 5); + signal tb_vga_hsync : std_logic; + signal tb_vga_vsync : std_logic; + -- + -- Audio out + signal tb_audio_r : std_logic; + signal tb_audio_l : std_logic; + -- + -- GPIOs + signal tb_switch_n : std_logic_vector(7 downto 0) := (others => '1'); + signal tb_button_n : std_logic_vector(5 downto 0) := (others => '1'); + signal tb_led : std_logic_vector(7 downto 0); + -- + -- seven segment display + signal tb_dig0_seg : std_logic_vector(7 downto 0); + signal tb_dig1_seg : std_logic_vector(7 downto 0); + signal tb_dig2_seg : std_logic_vector(7 downto 0); + signal tb_dig3_seg : std_logic_vector(7 downto 0); + signal tb_dig4_seg : std_logic_vector(7 downto 0); + signal tb_dig5_seg : std_logic_vector(7 downto 0); + -- + -- User Header A + signal tb_header_a : std_logic_vector(19 downto 2) := (others => 'Z'); + signal tb_header_b : std_logic_vector(19 downto 2) := (others => 'Z'); + +begin + + -- generate clock + tb_clk <= not tb_clk after clk_period / 2 when simulation_run; + + -- generate reset + tb_reset_n <= '0', '1' after 6.66 * clk_period; + + + -- simulate keypress + tb_button_n(2) <= '1', '0' after 50 us, '1' after 52 us; + + -- dut + top_i0 : entity work.top + port map ( + stop_simulation => tb_stop_simulation, -- : out std_logic; + -- + clk_50 => tb_clk, -- : in std_logic; + reset_n => tb_reset_n, -- : in std_logic; + -- + -- soft JTAG + soft_tdo => tb_soft_tdo, -- : out std_logic; + soft_tms => tb_soft_tms, -- : in std_logic; + soft_tdi => tb_soft_tdi, -- : in std_logic; + soft_tck => tb_soft_tck, -- : in std_logic; + -- + -- SRAM 0 (256k x 16) pin connections + sram0_a => tb_sram0_a, -- : out std_logic_vector(18 downto 0); + sram0_d => tb_sram0_d, -- : inout std_logic_vector(15 downto 0); + sram0_lb_n => tb_sram0_lb_n, -- : out std_logic; + sram0_ub_n => tb_sram0_ub_n, -- : out std_logic; + sram0_cs_n => tb_sram0_cs_n, -- : out std_logic; -- chip select + sram0_we_n => tb_sram0_we_n, -- : out std_logic; -- write-enable + sram0_oe_n => tb_sram0_oe_n, -- : out std_logic; -- output enable + -- + -- SRAM 1 (256k x 16) pin connections + sram1_a => tb_sram1_a, -- : out std_logic_vector(18 downto 0); + sram1_d => tb_sram1_d, -- : inout std_logic_vector(15 downto 0); + sram1_lb_n => tb_sram1_lb_n, -- : out std_logic; + sram1_ub_n => tb_sram1_ub_n, -- : out std_logic; + sram1_cs_n => tb_sram1_cs_n, -- : out std_logic; -- chip select + sram1_we_n => tb_sram1_we_n, -- : out std_logic; -- write-enable + sram1_oe_n => tb_sram1_oe_n, -- : out std_logic; -- output enable + -- + -- RS232 + rs232_rx => tb_rs232_rx, -- : in std_logic; + rs232_tx => tb_rs232_tx, -- : out std_logic; + rs232_cts => tb_rs232_cts, -- : in std_logic; + rs232_rts => tb_rs232_rts, -- : out std_logic; + -- + -- PS2 connectors + mouse_clk => tb_mouse_clk, -- : inout std_logic; + mouse_data => tb_mouse_data, -- : inout std_logic; + kbd_clk => tb_kbd_clk, -- : inout std_logic; + kbd_data => tb_kbd_data, -- : inout std_logic; + -- + -- vga output + vga_red => tb_vga_red, -- : out std_logic_vector(7 downto 5); + vga_green => tb_vga_green, -- : out std_logic_vector(7 downto 5); + vga_blue => tb_vga_blue, -- : out std_logic_vector(7 downto 5); + vga_hsync => tb_vga_hsync, -- : out std_logic; + vga_vsync => tb_vga_vsync, -- : out std_logic; + -- + -- Audio out + audio_r => tb_audio_r, -- : out std_logic; + audio_l => tb_audio_l, -- : out std_logic; + -- + -- GPIOs + switch_n => tb_switch_n, -- : in std_logic_vector(7 downto 0); + button_n => tb_button_n, -- : in std_logic_vector(5 downto 0); + led => tb_led, -- : out std_logic_vector(7 downto 0); + -- + -- seven segment display + dig0_seg => tb_dig0_seg, -- : out std_logic_vector(7 downto 0); + dig1_seg => tb_dig1_seg, -- : out std_logic_vector(7 downto 0); + dig2_seg => tb_dig2_seg, -- : out std_logic_vector(7 downto 0); + dig3_seg => tb_dig3_seg, -- : out std_logic_vector(7 downto 0); + dig4_seg => tb_dig4_seg, -- : out std_logic_vector(7 downto 0); + dig5_seg => tb_dig5_seg, -- : out std_logic_vector(7 downto 0); + -- + -- User Header + header_a => tb_header_a, -- : inout std_logic_vector(19 downto 2); + header_b => tb_header_b -- : inout std_logic_vector(19 downto 2) + ); + + + -- check for simulation stopping + process (tb_stop_simulation) + begin + if tb_stop_simulation = '1' then + report "Simulation end." severity note; + simulation_run <= false; + end if; + end process; + + +end architecture testbench; + -- cgit v1.1 From 221eb9f6525789d20f2895b2de775bf345cf97cb Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Fri, 28 Oct 2011 11:25:31 +0200 Subject: minor fix: reduce simulation warnings at 0 ps --- zpu/hdl/zealot/devices/phi_io.vhdl | 4 ++-- zpu/hdl/zealot/devices/timer.vhdl | 2 +- zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd | 2 +- zpu/hdl/zealot/zpu_small.vhdl | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/zpu/hdl/zealot/devices/phi_io.vhdl b/zpu/hdl/zealot/devices/phi_io.vhdl index 71e881c..6e40d1d 100644 --- a/zpu/hdl/zealot/devices/phi_io.vhdl +++ b/zpu/hdl/zealot/devices/phi_io.vhdl @@ -135,7 +135,7 @@ begin data_o => timer_read); busy_o <= we_i or re_i; - is_timer <= '1' when addr_i=CNT_1 or addr_i=CNT_2 else '0'; -- 0x80A0014/8 + is_timer <= '1' when to_01(addr_i)=CNT_1 or to_01(addr_i)=CNT_2 else '0'; -- 0x80A0014/8 timer_we <= we_i and is_timer; ---------- @@ -186,7 +186,7 @@ begin port_out => gpio_out, -- : std_logic_vector(31 downto 0); port_dir => gpio_dir -- : std_logic_vector(31 downto 0); ); - is_gpio <= '1' when addr_i = IO_DATA or addr_i = IO_DIR else '0'; -- 0x80A0004/8 + is_gpio <= '1' when to_01(addr_i) = IO_DATA or to_01(addr_i) = IO_DIR else '0'; -- 0x80A0004/8 gpio_we <= we_i and is_gpio; diff --git a/zpu/hdl/zealot/devices/timer.vhdl b/zpu/hdl/zealot/devices/timer.vhdl index f485e4d..389868c 100644 --- a/zpu/hdl/zealot/devices/timer.vhdl +++ b/zpu/hdl/zealot/devices/timer.vhdl @@ -85,7 +85,7 @@ begin end if; -- rising_edge(clk_i) end process do_timer; - data_o <= cnt_smp(31 downto 0) when addr_i="0" else + data_o <= cnt_smp(31 downto 0) when to_01(addr_i)="0" else cnt_smp(63 downto 32); end architecture Behave; -- Entity: Timer diff --git a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd index fbca62b..4a93c4f 100644 --- a/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd +++ b/zpu/hdl/zealot/fpga/altium-livedesign-xc3s1000/top.vhd @@ -102,7 +102,7 @@ architecture rtl of top is --------------------------- -- constant declarations - constant zpu_flavour : zpu_type := zpu_small; -- choose your flavour HERE + constant zpu_flavour : zpu_type := zpu_medium; -- choose your flavour HERE -- modify frequency here constant clk_multiply : positive := 3; -- 9 for small, 3 for medium constant clk_divide : positive := 2; -- 5 for small, 2 for medium diff --git a/zpu/hdl/zealot/zpu_small.vhdl b/zpu/hdl/zealot/zpu_small.vhdl index 2e5f464..056b924 100644 --- a/zpu/hdl/zealot/zpu_small.vhdl +++ b/zpu/hdl/zealot/zpu_small.vhdl @@ -148,13 +148,13 @@ begin -- Select the addressed byte inside the fetched word case (to_integer(pc_r(BYTE_BITS-1 downto 0))) is when 0 => - topcode:=b_i(31 downto 24); + topcode := to_01( b_i(31 downto 24)); when 1 => - topcode:=b_i(23 downto 16); + topcode := to_01( b_i(23 downto 16)); when 2 => - topcode:=b_i(15 downto 8); + topcode := to_01( b_i(15 downto 8)); when others => -- 3 - topcode:=b_i(7 downto 0); + topcode := to_01( b_i(7 downto 0)); end case; opcode <= topcode; -- cgit v1.1 From 6f2e0ea6433ae0042e75bf668c5f10b77e6e2bf7 Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Fri, 30 Mar 2012 08:59:26 +0200 Subject: change: rename 'State' to 'Insn' --- zpu/hdl/zpu4/core/zpu_core.vhd | 243 ++++++++++++++++++++--------------------- 1 file changed, 121 insertions(+), 122 deletions(-) diff --git a/zpu/hdl/zpu4/core/zpu_core.vhd b/zpu/hdl/zpu4/core/zpu_core.vhd index 1b95444..f423f80 100644 --- a/zpu/hdl/zpu4/core/zpu_core.vhd +++ b/zpu/hdl/zpu4/core/zpu_core.vhd @@ -79,48 +79,48 @@ entity zpu_core is ); 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 + Insn_AddTop, + Insn_Dup, + Insn_DupStackB, + Insn_Pop, + Insn_PopDown, + Insn_Add, + Insn_Or, + Insn_And, + Insn_Store, + Insn_AddSP, + Insn_Shift, + Insn_Nop, + Insn_Im, + Insn_LoadSP, + Insn_StoreSP, + Insn_Emulate, + Insn_Load, + Insn_PushSP, + Insn_PopPC, + Insn_PopPCrel, + Insn_Not, + Insn_Flip, + Insn_PopSP, + Insn_Neqbranch, + Insn_Eq, + Insn_Loadb, + Insn_Mult, + Insn_Lessthan, + Insn_Lessthanorequal, + Insn_Ulessthanorequal, + Insn_Ulessthan, + Insn_PushSPadd, + Insn_Call, + Insn_CallPCrel, + Insn_Sub, + Insn_Break, + Insn_Storeb, + Insn_InsnFetch ); type StateType is ( @@ -189,7 +189,6 @@ architecture behave of zpu_core is - signal begin_inst : std_logic; signal trace_opcode : std_logic_vector(7 downto 0); signal trace_pc : std_logic_vector(maxAddrBitIncIO downto 0); @@ -235,7 +234,7 @@ begin variable spOffset : unsigned(4 downto 0); variable tSpOffset : unsigned(4 downto 0); variable nextPC : unsigned(maxAddrBitIncIO downto 0); - variable tNextState : InsnType; + variable tNextInsn : InsnType; variable tDecodedOpcode : InsnArray; variable tMultResult : unsigned(wordSize*2-1 downto 0); begin @@ -253,7 +252,7 @@ begin multA <= (others => '0'); multB <= (others => '0'); mem_writeMask <= (others => '1'); - elsif (clk'event and clk = '1') then + elsif rising_edge(clk) then -- we must multiply unconditionally to get pipelined multiplication tMultResult := multA * multB; multResult3 <= multResult2; @@ -366,99 +365,99 @@ begin opcode(i) <= tOpcode; if (tOpcode(7 downto 7) = OpCode_Im) then - tNextState := State_Im; + tNextInsn := Insn_Im; elsif (tOpcode(7 downto 5) = OpCode_StoreSP) then if tSpOffset = 0 then - tNextState := State_Pop; + tNextInsn := Insn_Pop; elsif tSpOffset = 1 then - tNextState := State_PopDown; + tNextInsn := Insn_PopDown; else - tNextState := State_StoreSP; + tNextInsn := Insn_StoreSP; end if; elsif (tOpcode(7 downto 5) = OpCode_LoadSP) then if tSpOffset = 0 then - tNextState := State_Dup; + tNextInsn := Insn_Dup; elsif tSpOffset = 1 then - tNextState := State_DupStackB; + tNextInsn := Insn_DupStackB; else - tNextState := State_LoadSP; + tNextInsn := Insn_LoadSP; end if; elsif (tOpcode(7 downto 5) = OpCode_Emulate) then - tNextState := State_Emulate; + tNextInsn := Insn_Emulate; if tOpcode(5 downto 0) = OpCode_Neqbranch then - tNextState := State_Neqbranch; + tNextInsn := Insn_Neqbranch; elsif tOpcode(5 downto 0) = OpCode_Eq then - tNextState := State_Eq; + tNextInsn := Insn_Eq; elsif tOpcode(5 downto 0) = OpCode_Lessthan then - tNextState := State_Lessthan; + tNextInsn := Insn_Lessthan; elsif tOpcode(5 downto 0) = OpCode_Lessthanorequal then - --tNextState :=State_Lessthanorequal; + --tNextInsn :=Insn_Lessthanorequal; elsif tOpcode(5 downto 0) = OpCode_Ulessthan then - tNextState := State_Ulessthan; + tNextInsn := Insn_Ulessthan; elsif tOpcode(5 downto 0) = OpCode_Ulessthanorequal then - --tNextState :=State_Ulessthanorequal; + --tNextInsn :=Insn_Ulessthanorequal; elsif tOpcode(5 downto 0) = OpCode_Loadb then - tNextState := State_Loadb; + tNextInsn := Insn_Loadb; elsif tOpcode(5 downto 0) = OpCode_Mult then - tNextState := State_Mult; + tNextInsn := Insn_Mult; elsif tOpcode(5 downto 0) = OpCode_Storeb then - tNextState := State_Storeb; + tNextInsn := Insn_Storeb; elsif tOpcode(5 downto 0) = OpCode_Pushspadd then - tNextState := State_Pushspadd; + tNextInsn := Insn_PushSPadd; elsif tOpcode(5 downto 0) = OpCode_Callpcrel then - tNextState := State_Callpcrel; + tNextInsn := Insn_CallPCrel; elsif tOpcode(5 downto 0) = OpCode_Call then - --tNextState :=State_Call; + --tNextInsn :=Insn_Call; elsif tOpcode(5 downto 0) = OpCode_Sub then - tNextState := State_Sub; + tNextInsn := Insn_Sub; elsif tOpcode(5 downto 0) = OpCode_PopPCRel then - --tNextState :=State_PopPCRel; + --tNextInsn :=Insn_PopPCrel; end if; elsif (tOpcode(7 downto 4) = OpCode_AddSP) then if tSpOffset = 0 then - tNextState := State_Shift; + tNextInsn := Insn_Shift; elsif tSpOffset = 1 then - tNextState := State_AddTop; + tNextInsn := Insn_AddTop; else - tNextState := State_AddSP; + tNextInsn := Insn_AddSP; end if; else case tOpcode(3 downto 0) is when OpCode_Nop => - tNextState := State_Nop; + tNextInsn := Insn_Nop; when OpCode_PushSP => - tNextState := State_PushSP; + tNextInsn := Insn_PushSP; when OpCode_PopPC => - tNextState := State_PopPC; + tNextInsn := Insn_PopPC; when OpCode_Add => - tNextState := State_Add; + tNextInsn := Insn_Add; when OpCode_Or => - tNextState := State_Or; + tNextInsn := Insn_Or; when OpCode_And => - tNextState := State_And; + tNextInsn := Insn_And; when OpCode_Load => - tNextState := State_Load; + tNextInsn := Insn_Load; when OpCode_Not => - tNextState := State_Not; + tNextInsn := Insn_Not; when OpCode_Flip => - tNextState := State_Flip; + tNextInsn := Insn_Flip; when OpCode_Store => - tNextState := State_Store; + tNextInsn := Insn_Store; when OpCode_PopSP => - tNextState := State_PopSP; + tNextInsn := Insn_PopSP; when others => - tNextState := State_Break; + tNextInsn := Insn_Break; end case; -- tOpcode(3 downto 0) end if; -- tOpcode - tDecodedOpcode(i) := tNextState; + tDecodedOpcode(i) := tNextInsn; end loop; -- 0 to wordBytes-1 insn <= tDecodedOpcode(to_integer(pc(byteBits-1 downto 0))); -- once we wrap, we need to fetch - tDecodedOpcode(0) := State_InsnFetch; + tDecodedOpcode(0) := Insn_InsnFetch; decodedOpcode <= tDecodedOpcode; state <= State_Execute; @@ -468,7 +467,7 @@ begin -- Each instruction must: -- -- 1. set idim_flag - -- 2. increase pc if applicable + -- 2. increase PC if applicable -- 3. set next state if appliable -- 4. do it's operation @@ -477,10 +476,10 @@ begin case insn is - when State_InsnFetch => + when Insn_InsnFetch => state <= State_Fetch; - when State_Im => + when Insn_Im => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '1'; @@ -502,7 +501,7 @@ begin end if; -- idim_flag end if; -- in_mem_busy - when State_StoreSP => + when Insn_StoreSP => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -516,7 +515,7 @@ begin end if; - when State_LoadSP => + when Insn_LoadSP => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -528,7 +527,7 @@ begin mem_write <= std_logic_vector(stackB); end if; - when State_Emulate => + when Insn_Emulate => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -548,7 +547,7 @@ begin state <= State_Fetch; end if; -- in_mem_busy - when State_Callpcrel => + when Insn_CallPCrel => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -559,7 +558,7 @@ begin state <= State_Fetch; end if; - when State_Call => + when Insn_Call => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -569,7 +568,7 @@ begin state <= State_Fetch; end if; - when State_AddSP => + when Insn_AddSP => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -579,7 +578,7 @@ begin mem_addr <= std_logic_vector(sp+spOffset); end if; - when State_PushSP => + when Insn_PushSP => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -594,7 +593,7 @@ begin mem_write <= std_logic_vector(stackB); end if; - when State_PopPC => + when Insn_PopPC => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -607,7 +606,7 @@ begin state <= State_Resync; end if; - when State_PopPCRel => + when Insn_PopPCrel => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -620,7 +619,7 @@ begin state <= State_Resync; end if; - when State_Add => + when Insn_Add => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -632,7 +631,7 @@ begin state <= State_Popped; end if; - when State_Sub => + when Insn_Sub => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -640,7 +639,7 @@ begin state <= State_BinaryOpResult; end if; - when State_Pop => + when Insn_Pop => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -651,7 +650,7 @@ begin state <= State_Popped; end if; - when State_PopDown => + when Insn_PopDown => if in_mem_busy = '0' then -- PopDown leaves top of stack unchanged begin_inst <= '1'; @@ -662,7 +661,7 @@ begin state <= State_Popped; end if; - when State_Or => + when Insn_Or => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -673,7 +672,7 @@ begin state <= State_Popped; end if; - when State_And => + when Insn_And => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -685,7 +684,7 @@ begin state <= State_Popped; end if; - when State_Eq => + when Insn_Eq => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -697,7 +696,7 @@ begin state <= State_BinaryOpResult; end if; - when State_Ulessthan => + when Insn_Ulessthan => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -709,7 +708,7 @@ begin state <= State_BinaryOpResult; end if; - when State_Ulessthanorequal => + when Insn_Ulessthanorequal => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -721,7 +720,7 @@ begin state <= State_BinaryOpResult; end if; - when State_Lessthan => + when Insn_Lessthan => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -733,7 +732,7 @@ begin state <= State_BinaryOpResult; end if; - when State_Lessthanorequal => + when Insn_Lessthanorequal => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -745,7 +744,7 @@ begin state <= State_BinaryOpResult; end if; - when State_Load => + when Insn_Load => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -755,7 +754,7 @@ begin mem_readEnable <= '1'; end if; - when State_Dup => + when Insn_Dup => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -768,7 +767,7 @@ begin mem_writeEnable <= '1'; end if; - when State_DupStackB => + when Insn_DupStackB => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -782,7 +781,7 @@ begin mem_writeEnable <= '1'; end if; - when State_Store => + when Insn_Store => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -794,7 +793,7 @@ begin state <= State_Resync; end if; - when State_PopSP => + when Insn_PopSP => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -807,19 +806,19 @@ begin state <= State_Resync; end if; - when State_Nop => + when Insn_Nop => begin_inst <= '1'; idim_flag <= '0'; pc <= pc + 1; - when State_Not => + when Insn_Not => begin_inst <= '1'; idim_flag <= '0'; pc <= pc + 1; - stackA <= not stackA; + stackA <= not stackA; - when State_Flip => + when Insn_Flip => begin_inst <= '1'; idim_flag <= '0'; pc <= pc + 1; @@ -828,14 +827,14 @@ begin stackA(i) <= stackA(wordSize-1-i); end loop; - when State_AddTop => + when Insn_AddTop => begin_inst <= '1'; idim_flag <= '0'; pc <= pc + 1; - stackA <= stackA + stackB; + stackA <= stackA + stackB; - when State_Shift => + when Insn_Shift => begin_inst <= '1'; idim_flag <= '0'; pc <= pc + 1; @@ -843,7 +842,7 @@ begin stackA(wordSize-1 downto 1) <= stackA(wordSize-2 downto 0); stackA(0) <= '0'; - when State_Pushspadd => + when Insn_PushSPadd => begin_inst <= '1'; idim_flag <= '0'; pc <= pc + 1; @@ -851,7 +850,7 @@ begin stackA <= (others => '0'); stackA(maxAddrBitIncIO downto minAddrBit) <= stackA(maxAddrBitIncIO-minAddrBit downto 0)+sp; - when State_Neqbranch => + when Insn_Neqbranch => -- branches are almost always taken as they form loops begin_inst <= '1'; idim_flag <= '0'; @@ -864,7 +863,7 @@ begin -- need to fetch stack again. state <= State_Resync; - when State_Mult => + when Insn_Mult => begin_inst <= '1'; idim_flag <= '0'; @@ -872,11 +871,11 @@ begin multB <= stackB; state <= State_Mult2; - when State_Break => + when Insn_Break => report "Break instruction encountered" severity failure; break <= '1'; - when State_Loadb => + when Insn_Loadb => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; @@ -886,7 +885,7 @@ begin mem_readEnable <= '1'; end if; - when State_Storeb => + when Insn_Storeb => if in_mem_busy = '0' then begin_inst <= '1'; idim_flag <= '0'; -- cgit v1.1 From b1bba840534b2e9a6f79564b006843b0e268e475 Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Thu, 16 May 2013 09:16:33 +0200 Subject: fix: opcode numbering --- zpu/docs/zpu_arch.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 32a3ca2..15b9ccf 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -948,7 +948,7 @@ int address = pop();
            NEQ - 48 + 47 pushIntStack((popIntStack() != popIntStack()) ? 1 : 0); @@ -960,7 +960,7 @@ int address = pop();
            NEG - 47 + 48 pushIntStack(-popIntStack()); -- cgit v1.1 From 8679e4f91dcae05aef40f96629f33f0f4161f14a Mon Sep 17 00:00:00 2001 From: Bert Lange Date: Fri, 11 Jul 2014 14:13:10 +0200 Subject: add: performance values for Lattice MachXO2 --- zpu/docs/zpu_arch.html | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/zpu/docs/zpu_arch.html b/zpu/docs/zpu_arch.html index 15b9ccf..62acdfa 100644 --- a/zpu/docs/zpu_arch.html +++ b/zpu/docs/zpu_arch.html @@ -1061,10 +1061,11 @@ For now if you are starting a design, zpu4 or zealot are probably the safest. z

            Performance Summary

            -
            TODO fill in performance table for Altera and Lattice. +TODO fill in performance table for Altera.

            Tests are done with the Zealot SoC-System and Xilinx ISE 12.2 with standard settings. + For the MachXO2 device Lattice Diamond 3.1 with Synplify Pro I-2013.09L was used.

            @@ -1073,7 +1074,7 @@ Tests are done with the Zealot - + @@ -1115,12 +1116,12 @@ maxAddrBit=16 175 fmax @@ -1159,12 +1160,12 @@ maxAddrBit=16 125 fmax -- cgit v1.1

            Spartan-3E

            Spartan-6

            Virtex-5

            Cyclone-3

            MachXO2

            DMIPS

            -
            -? LUT
            -? REG
            -? MULT18x18
            -? M4K
            -? fmax
            +
            +886 LUT4
            +459 REG
            +
            +4   EBR
            +75  fmax
             

            0.5

            -
            -? LUT
            -? REG
            -? MULT18x18
            -? M4K
            -? fmax
            +
            +2429 LUT4
            +755  REG
            +
            +4    EBR
            +65   fmax
             

            2.6