From 1ddbacb67fdfc1c143f6754542f5cbf8587b9b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Hor=C3=A1k?= Date: Fri, 28 Aug 2020 14:24:07 +0200 Subject: [PATCH 1/2] syscon: Implement a register for storing git hash info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It also stores the dirty status so that's known. This does some Makefile tricks so that we only rebuild when the git hash changes. This avoids rebuilding the world every time we run make. Also adds fusesoc generator, so that should continue to work as before. Signed-off-by: Dan Horák Signed-off-by: Michael Neuling --- .github/workflows/test.yml | 1 + .gitignore | 1 + Makefile | 8 +++++- git.vhdl.in | 9 +++++++ include/microwatt_soc.h | 2 ++ microwatt.core | 30 +++++++++++++++++------ scripts/make_version.sh | 43 +++++++++++++++++++++++++++++++++ scripts/make_version_fusesoc.py | 15 ++++++++++++ syscon.vhdl | 15 ++++++++++++ 9 files changed, 116 insertions(+), 8 deletions(-) create mode 100644 git.vhdl.in create mode 100755 scripts/make_version.sh create mode 100755 scripts/make_version_fusesoc.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b8c14d..cf22066 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -63,6 +63,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - run: make git.vhdl - uses: docker://ghdl/vunit:llvm with: args: python3 ./run.py -p10 diff --git a/.gitignore b/.gitignore index 0bb079e..d6da201 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ litesdcard/build/* obj_dir/* /scripts/mw_debug/urjtag /scripts/mw_debug/mw_debug +git.vhdl diff --git a/Makefile b/Makefile index 794cbc1..6ab9efc 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,11 @@ all = core_tb icache_tb dcache_tb dmi_dtm_tb \ all: $(all) +# This updates git.vhdl only when needed. Make runs this before doing +# dependancy checks hence make will only rebuild dependancies if the +# git status has actually changed. +$(shell scripts/make_version.sh git.vhdl) + core_files = decode_types.vhdl common.vhdl wishbone_types.vhdl fetch1.vhdl \ utils.vhdl plru.vhdl cache_ram.vhdl icache.vhdl predecode.vhdl \ decode1.vhdl helpers.vhdl insn_helpers.vhdl \ @@ -66,7 +71,7 @@ core_files = decode_types.vhdl common.vhdl wishbone_types.vhdl fetch1.vhdl \ soc_files = wishbone_arbiter.vhdl wishbone_bram_wrapper.vhdl sync_fifo.vhdl \ wishbone_debug_master.vhdl xics.vhdl syscon.vhdl gpio.vhdl soc.vhdl \ - spi_rxtx.vhdl spi_flash_ctrl.vhdl + spi_rxtx.vhdl spi_flash_ctrl.vhdl git.vhdl uart_files = $(wildcard uart16550/*.v) @@ -324,6 +329,7 @@ _clean: rm -f scripts/mw_debug/mw_debug rm -f microwatt.bin microwatt.json microwatt.svf microwatt_out.config rm -f microwatt.v microwatt-verilator + rm -f git.vhdl rm -rf obj_dir/ clean: _clean diff --git a/git.vhdl.in b/git.vhdl.in new file mode 100644 index 0000000..1130bb1 --- /dev/null +++ b/git.vhdl.in @@ -0,0 +1,9 @@ +library ieee; +use ieee.std_logic_1164.all; + +library work; + +package git is + constant GIT_HASH : std_ulogic_vector(55 downto 0) := x"@hash@"; + constant GIT_DIRTY : std_ulogic := '@dirty@'; +end git; diff --git a/include/microwatt_soc.h b/include/microwatt_soc.h index b138be1..ab55287 100644 --- a/include/microwatt_soc.h +++ b/include/microwatt_soc.h @@ -58,6 +58,8 @@ #define SYS_REG_UART0_INFO 0x40 #define SYS_REG_UART1_INFO 0x48 #define SYS_REG_UART_IS_16550 (1ull << 32) +#define SYS_REG_GIT_INFO 0x50 +#define SYS_REG_GIT_IS_DIRTY (1ull << 63) /* diff --git a/microwatt.core b/microwatt.core index 07085b1..5e603f1 100644 --- a/microwatt.core +++ b/microwatt.core @@ -51,6 +51,7 @@ filesets: - sync_fifo.vhdl - spi_rxtx.vhdl - spi_flash_ctrl.vhdl + - git.vhdl file_type : vhdlSource-2008 fpga: @@ -136,6 +137,7 @@ targets: nexys_a7: default_tool: vivado filesets: [core, nexys_a7, soc, fpga, debug_xilinx, uart16550, xilinx_specific] + generate: [git_hash] parameters : - memory_size - ram_init_file @@ -153,6 +155,7 @@ targets: acorn-cle-215-nodram: default_tool: vivado filesets: [core, acorn_cle_215, soc, fpga, debug_xilinx, uart16550, xilinx_specific] + generate: [git_hash] parameters : - memory_size - ram_init_file @@ -179,6 +182,7 @@ targets: - spi_flash_offset=10485760 - log_length=2048 - uart_is_16550=false + generate: [git_hash] tools: vivado: {part : xc7k325tffg900-2} toplevel : toplevel @@ -195,7 +199,7 @@ targets: - spi_flash_offset=10485760 - log_length=2048 - uart_is_16550 - generate: [litedram_acorn_cle_215] + generate: [litedram_acorn_cle_215, git_hash] tools: vivado: {part : xc7a200tsbg484-2} toplevel : toplevel @@ -212,7 +216,7 @@ targets: - spi_flash_offset=10485760 - log_length=2048 - uart_is_16550=false - generate: [litedram_genesys2] + generate: [litedram_genesys2, git_hash] tools: vivado: {part : xc7k325tffg900-2} toplevel : toplevel @@ -231,6 +235,7 @@ targets: - uart_is_16550 - has_fpu - has_btc + generate: [git_hash] tools: vivado: {part : xc7a200tsbg484-1} toplevel : toplevel @@ -251,7 +256,7 @@ targets: - uart_is_16550 - has_fpu - has_btc - generate: [litedram_nexys_video, liteeth_nexys_video, litesdcard_nexys_video] + generate: [litedram_nexys_video, liteeth_nexys_video, litesdcard_nexys_video, git_hash] tools: vivado: {part : xc7a200tsbg484-1} toplevel : toplevel @@ -272,6 +277,7 @@ targets: - has_fpu=false - has_btc=false - use_litesdcard + generate: [git_hash] tools: vivado: {part : xc7a35ticsg324-1L} toplevel : toplevel @@ -293,7 +299,7 @@ targets: - has_uart1 - has_fpu=false - has_btc=false - generate: [litedram_arty, liteeth_arty, litesdcard_arty] + generate: [litedram_arty, liteeth_arty, litesdcard_arty, git_hash] tools: vivado: {part : xc7a35ticsg324-1L} toplevel : toplevel @@ -314,6 +320,7 @@ targets: - has_fpu - has_btc - use_litesdcard + generate: [git_hash] tools: vivado: {part : xc7a100ticsg324-1L} toplevel : toplevel @@ -335,7 +342,7 @@ targets: - has_uart1 - has_fpu - has_btc - generate: [litedram_arty, liteeth_arty, litesdcard_arty] + generate: [litedram_arty, liteeth_arty, litesdcard_arty, git_hash] tools: vivado: {part : xc7a100ticsg324-1L} toplevel : toplevel @@ -356,7 +363,7 @@ targets: - uart_is_16550 - has_fpu - has_btc - generate: [litesdcard_wukong-v2] + generate: [litesdcard_wukong-v2, git_hash] tools: vivado: {part : xc7a100tfgg676-1} toplevel : toplevel @@ -377,7 +384,7 @@ targets: - uart_is_16550 - has_fpu - has_btc - generate: [litedram_wukong-v2, liteeth_wukong-v2, litesdcard_wukong-v2] + generate: [litedram_wukong-v2, liteeth_wukong-v2, litesdcard_wukong-v2, git_hash] tools: vivado: {part : xc7a100tfgg676-1} toplevel : toplevel @@ -396,17 +403,26 @@ targets: - uart_is_16550 - has_fpu=false - has_btc=false + generate: [git_hash] tools: vivado: {part : xc7a35tcpg236-1} toplevel : toplevel synth: filesets: [core, soc, xilinx_specific] + generate: [git_hash] tools: vivado: {pnr : none} toplevel: core +generators: + git_hash_gen: + command: scripts/make_version_fusesoc.py + generate: + git_hash: + generator : git_hash_gen + litedram_arty: generator: litedram_gen parameters: {board : arty} diff --git a/scripts/make_version.sh b/scripts/make_version.sh new file mode 100755 index 0000000..9725a5a --- /dev/null +++ b/scripts/make_version.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# This script builds a git.vhdl which contains info on the SHA1 and +# dirty status of your git tree. It always builds but only replaces +# the file if it's changed. This way we can use Makefile $(shell ..) +# to build it which happens before make does it's dependancy checks. +# + +dirty="0" +version="00000000000000" + +usage() { + echo "$0 " + echo -e "\tSubstitute @hash@ and @dirty@ in with gathered values." +} + +src=$1 + +if test -e .git || git rev-parse --is-inside-work-tree > /dev/null 2>&1; +then + version=$(git describe --exact-match 2>/dev/null) + if [ -z "$version" ]; + then + version=$(git describe 2>/dev/null) + fi + if [ -z "$version" ]; + then + version=$(git rev-parse --verify --short=14 HEAD 2>/dev/null) + fi + if git diff-index --name-only HEAD |grep -qv '.git'; + then + dirty="1" + fi +# echo "hash=$version dirty=$dirty" +fi + +# Put it in a temp file and only update if it's change. This helps Make +sed -e "s/@hash@/$version/" -e "s/@dirty@/$dirty/" ${src}.in > ${src}.tmp +if diff -q ${src}.tmp ${src} >/dev/null 2>&1; then + rm ${src}.tmp +else + mv ${src}.tmp ${src} +fi diff --git a/scripts/make_version_fusesoc.py b/scripts/make_version_fusesoc.py new file mode 100755 index 0000000..d00bf40 --- /dev/null +++ b/scripts/make_version_fusesoc.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# +# Simple wrapper around make_version.sh that fusesoc needs +# Just pulls out the files_root from yaml so we know where to run. +# + +import yaml +import sys +import os + +with open(sys.argv[1], 'r') as stream: + data = yaml.safe_load(stream) + +# Run make version in source dir so we can get the git version +os.system("cd %s; scripts/make_version.sh git.vhdl" % data["files_root"]) diff --git a/syscon.vhdl b/syscon.vhdl index 5e6cb00..727f4e7 100644 --- a/syscon.vhdl +++ b/syscon.vhdl @@ -4,6 +4,7 @@ use ieee.std_logic_1164.all; use ieee.numeric_std.all; library work; +use work.git.all; use work.wishbone_types.all; entity syscon is @@ -53,6 +54,7 @@ architecture behaviour of syscon is constant SYS_REG_SPIFLASHINFO : std_ulogic_vector(SYS_REG_BITS-1 downto 0) := "000111"; constant SYS_REG_UART0_INFO : std_ulogic_vector(SYS_REG_BITS-1 downto 0) := "001000"; constant SYS_REG_UART1_INFO : std_ulogic_vector(SYS_REG_BITS-1 downto 0) := "001001"; + constant SYS_REG_GIT_INFO : std_ulogic_vector(SYS_REG_BITS-1 downto 0) := "001010"; -- Muxed reg read signal signal reg_out : std_ulogic_vector(63 downto 0); @@ -91,6 +93,12 @@ architecture behaviour of syscon is -- 32 : UART is 16550 (otherwise pp) -- + -- GIT info register bits + -- + -- 0 ..55 : git hash (14 chars = 56 bits) + -- 63 : dirty flag + -- + -- Ctrl register signal reg_ctrl : std_ulogic_vector(SYS_REG_CTRL_BITS-1 downto 0); signal reg_ctrl_out : std_ulogic_vector(63 downto 0); @@ -104,6 +112,7 @@ architecture behaviour of syscon is signal reg_spiinfo : std_ulogic_vector(63 downto 0); signal reg_uart0info : std_ulogic_vector(63 downto 0); signal reg_uart1info : std_ulogic_vector(63 downto 0); + signal reg_gitinfo : std_ulogic_vector(63 downto 0); signal info_has_dram : std_ulogic; signal info_has_bram : std_ulogic; signal info_has_uart : std_ulogic; @@ -169,6 +178,11 @@ begin 31 downto 0 => uinfo_freq, others => '0'); + -- GIT info register composition + reg_gitinfo <= (63 => GIT_DIRTY, + 55 downto 0 => GIT_HASH, + others => '0'); + -- Wishbone response wb_rsp.ack <= wishbone_in.cyc and wishbone_in.stb; with wishbone_in.adr(SYS_REG_BITS downto 1) select reg_out <= @@ -182,6 +196,7 @@ begin reg_spiinfo when SYS_REG_SPIFLASHINFO, reg_uart0info when SYS_REG_UART0_INFO, reg_uart1info when SYS_REG_UART1_INFO, + reg_gitinfo when SYS_REG_GIT_INFO, (others => '0') when others; wb_rsp.dat <= reg_out(63 downto 32) when wishbone_in.adr(0) = '1' else reg_out(31 downto 0); From bd5e4bafba29b30b9cf8058740a1486d651b3c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Hor=C3=A1k?= Date: Tue, 1 Sep 2020 22:43:50 +0200 Subject: [PATCH 2/2] hello_world: Debug print the gitinfo syscon register MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit .oOOo. ." ". ; .mw. ; Microwatt, it works. . ' ' . \ || / HDL Git SHA1: 211d23c4ad4fb5-dirty ;..; ;..; `ww' Signed-off-by: Dan Horák Signed-off-by: Michael Neuling --- hello_world/Makefile | 3 +- hello_world/hello_world.bin | Bin 6280 -> 6300 bytes hello_world/hello_world.c | 32 +++- hello_world/hello_world.elf | Bin 83688 -> 85120 bytes hello_world/hello_world.hex | 301 ++++++++++++++++++------------------ 5 files changed, 181 insertions(+), 155 deletions(-) diff --git a/hello_world/Makefile b/hello_world/Makefile index dd51bd3..159cb86 100644 --- a/hello_world/Makefile +++ b/hello_world/Makefile @@ -25,7 +25,8 @@ hello_world.bin: hello_world.elf $(OBJCOPY) -O binary $^ $@ hello_world.hex: hello_world.bin - ../scripts/bin2hex.py $^ > $@ + ../scripts/bin2hex.py $^ > hello_world.hex.tmp + mv -f hello_world.hex.tmp hello_world.hex clean: @rm -f *.o hello_world.elf hello_world.bin hello_world.hex diff --git a/hello_world/hello_world.bin b/hello_world/hello_world.bin index a4eb88c26f7c7742bc5d42c1d9c571302a03b69f..4c1a8007721d03fa15f5e54b9f0ea953151dfeb9 100755 GIT binary patch delta 846 zcmYLGUr1A76hGfK^=|0A*Sl(wtj`SF=!#nqUCrganzby4XrXSV(Bw+8+!= zdRTtG1f}*C(nFvR_BQDyh@jph7WN=f5cFa!{W{;hiw+#lIlptx?|1HZ=ORxduZm=C zk=!AVhg@q;r@JBB?t<7RZ`pxTxn~G?f&x!XIv@rBapB?Ixc-sY^-C9|zwMQ?UMQU| zH}0nB&8?IhoWV5YjZsMG>vf6r*EXIySe@tm^Qlj~U;sol9~4Z^$GgMngr2YVk>48! z6i8NqD=Z?bC*FfC*8qpLGOl|duD`BgA2`1lMyWZBxGs$3ob0w7AUabNm95C0{djqP zd|O<*8i=RQ)Fwv6Wo$zZsCG+22J2(6{g(Yu{A^cN*(2H4NFkK`&I=~;BFPcfp&YLf zSueY;^c)LlG8Bw3wCLE@DL#`20$M#{4OmCCe(Aa*d(SSW1I510^F0 zwV@da1`r>x@oPo~^Q6_IHf|svSo*!c0gO(OOZna>&4BwjvoIX8xct?5&O@D+#wbOu z+#r-7YJ@-6nCroJN&?gWx2qtI(TSPDJaeiwp>3io`@Vi*t d-&R8@^>`RRa6_iCvzO@k$tgMtp!D_Q|?jH4E-F*c7LJcvu^2Wgy!r9fz-ej-5bYt->fXhMp1Y}7?qH#q)*xJFl{ zVWQImsgK0zDb_Z}rV92d zD(kr}S$VipP4L@U5j5mllfO~(SZ^y(O!2w(-%My|S-1l8x&yN+;+~kruW?|{_t* yLT}~ak@6qLIN`xhyQnY7bnc14*&*uUFJteksjf>Ot&v(q5$J^SuA; #include "console.h" +#include "io.h" +#include "microwatt_soc.h" -static char mw_logo[] = - +static char mw_logo1[] = "\n" " .oOOo. \n" " .\" \". \n" " ; .mw. ; Microwatt, it works.\n" " . ' ' . \n" -" \\ || / \n" +" \\ || / HDL Git SHA1: "; + +static char mw_logo2[] = +"\n" " ;..; \n" " ;..; \n" -" `ww' \n"; +" `ww' \n\n"; int main(void) { + uint64_t gitinfo; + uint8_t c; + bool dirty; + console_init(); - puts(mw_logo); + puts(mw_logo1); + + gitinfo = readq(SYSCON_BASE + SYS_REG_GIT_INFO); + dirty = gitinfo >> 63; + for (int i = 0; i < 14; i++) { + c = (gitinfo >> 52) & 0xf; + if (c >= 10) + putchar(0x61 + c - 10); // a-f + else + putchar(0x30 + c); // 0-9 + gitinfo <<= 4; + } + if (dirty) + puts("-dirty"); + puts(mw_logo2); while (1) { unsigned char c = getchar(); diff --git a/hello_world/hello_world.elf b/hello_world/hello_world.elf index 3dc0cc1c1cb753a5fe02cfa05c9860ff01c29675..90747e606c1e5a37f6efd3b6f37a6a9a3cc78751 100755 GIT binary patch literal 85120 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 Ak^lez literal 83688 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 Z6)z@k!y&)NvL9ZlHUGgVhWB#&{|2${*E0YB diff --git a/hello_world/hello_world.hex b/hello_world/hello_world.hex index c0161ad..3bc5166 100644 --- a/hello_world/hello_world.hex +++ b/hello_world/hello_world.hex @@ -48,11 +48,11 @@ a64b5a7d14004a39 782107c660210000 6021398064210000 f801ffe138000000 -3d8000007c1243a6 -798c07c6618c0000 -618c1000658c0000 -4e8004217d8903a6 -4800000000000200 +618c00003d800000 +658c0000798c07c6 +7d8903a6618c1000 +000002004e800421 +0000000048000000 0000000000000000 0000000000000000 0000000000000000 @@ -511,172 +511,172 @@ f801ffe138000000 0000000000000000 0000000000000000 384298003c400001 -fbe1fff87c0802a6 -f821ffd1f8010010 -60000000480001ed +4800042d7c0802a6 +3fe0c000f821ffc1 +7bff002063ff0050 +6000000048000269 +3862803060000000 +60000000480001d1 +7fe0feea7c0004ac +7bfd0fe03bc0000e +280300097be36720 +386300574081007c +7bff26e47c6307b4 +6000000048000119 +4082ffdc37deffff +418200142c3d0000 +38637c303c62ffff +6000000048000181 3862800060000000 -6000000048000155 -6000000048000049 +6000000048000171 +6000000048000051 5463063e7c7f1b78 -480000b957ff063e +480000cd57ff063e 2c1f000d60000000 3860000a4082ffe0 -60000000480000a5 -000000004bffffd0 -0000018001000000 +60000000480000b9 +386300304bffffd0 +000000004bffff88 +0000038001000000 384298003c400001 8922810860000000 3942810060000000 -418200302c090000 +418200382c090000 39290014e92a0000 7d204eaa7c0004ac 4182ffec71290001 -7c0004ace86a0000 -5463063e7c601eaa +e862810060000000 +7c601eaa7c0004ac +7c6307b45463063e e92a00004e800020 7c0004ac39290010 712900017d204eea -e86a00004082ffec -7c0004ac38630008 -4bffffd07c601eea -0000000000000000 -3c40000100000000 -6000000038429800 -6000000089228108 -2c09000039428100 -e92a00004182002c -7c0004ac39290014 -712900207d204eaa -e92a00004182ffec +600000004082ffec +38630008e8628100 +7c601eea7c0004ac +000000004bffffc8 +0000000000000000 +384298003c400001 +8922810860000000 +3942810060000000 +418200302c090000 +39290014e92a0000 +7d204eaa7c0004ac +4182ffec71290020 +e922810060000000 7c604faa7c0004ac e92a00004e800020 7c0004ac39290010 712900087d204eea 5469063e4082ffec -7c0004ace94a0000 -4e8000207d2057ea -0000000000000000 -3c40000100000000 -7c0802a638429800 -fbc1fff0fbe1fff8 -f80100103be3ffff -8fdf0001f821ffd1 -408200102c3e0000 -3860000038210030 -281e000a480001e8 -3860000d4082000c -7fc3f3784bffff45 -4bffffd04bffff3d -0100000000000000 -7c691b7800000280 -7d4918ae38600000 -4d8200202c0a0000 -4bfffff038630001 -0000000000000000 -3c40000100000000 -3d40c00038429800 -794a0020614a0020 -7d4056ea7c0004ac -794a06003d20c000 -7929002061290008 -7d204eea7c0004ac -4182001871290020 -612900403d20c000 +e942810060000000 +7d2057ea7c0004ac +000000004e800020 +0000000000000000 +384298003c400001 +fbe1fff87c0802a6 +3be3fffffbc1fff0 +f821ffd1f8010010 +2c1e00008fdf0001 +3821003040820010 +4800022038600000 +4082000c2c1e000a +4bffff3d3860000d +4bffff357fc307b4 +000000004bffffd0 +0000028001000000 +386000007c691b78 +2c0a00007d4918ae +386300014d820020 +000000004bfffff0 +0000000000000000 +384298003c400001 +612900203d20c000 7c0004ac79290020 -7929f8047d204eea -79290fc33d00c000 -7908002061082000 -f902810060000000 -610820003d00001c -418200847d4a4392 -3920000160000000 -3d00c00099228108 -3920ff806108200c -7c0004ac79080020 -e92281007d2047aa -7d404faa7c0004ac -794ac202e9228100 -7c0004ac39290004 +3d40c0007d204eea +614a000879290600 +7c0004ac794a0020 +714a00207d4056ea +614a20003d40c000 +40820040794a0020 +f942810060000000 +6000000039400000 +3d40001c99428108 +7d295392614a2000 +614a20183d40c000 +3929ffff794a0020 +7d2057ea7c0004ac +3d00c0004e800020 +7908002061080040 +7d0046ea7c0004ac +60000000790807e3 +3d40001cf9428100 +7d495392614a2000 +600000004182ffa0 +9922810839200001 +6108200c3d00c000 +790800203920ff80 +7d2047aa7c0004ac +7c0004ace9228100 e92281007d404faa -3929000c39400003 +39290004794ac202 7d404faa7c0004ac -39290010e9228100 +39400003e9228100 +7c0004ac3929000c +e92281007d404faa +7c0004ac39290010 +e92281007d404faa +3929000839400007 7d404faa7c0004ac -39400007e9228100 -7c0004ac39290008 -4e8000207d404faa -394affff60000000 -3d20c00099228108 -7929002061292018 -7d404fea7c0004ac 000000004e800020 0000000000000000 384298003c400001 8922810860000000 600000002c090000 -41820024e9228100 -78840e282c230000 -6084000141820008 -7c0004ac39290004 -4e8000207c804faa -418200082c240000 -3929002060630002 -7c604fea7c0004ac -000000004e800020 -0000000000000000 -e8010010ebc1fff0 -7c0803a6ebe1fff8 -000000104e800020 -00527a0100000000 -00010c1b01417804 -0000001800000018 -00000070fffffc40 -9f7e4111300e4600 -0000001000000001 -00527a0100000000 -00010c1b01417804 -0000001800000010 -00000084fffffc80 -0000001000000000 -fffffcf00000002c -0000000000000080 -0000004000000028 -00000060fffffd5c -9e019f0041094500 -447e4111300e4302 -4106dedf42000e0a -000000100000000b -fffffd900000006c -0000000000000028 -0000008000000010 -0000012cfffffda4 +41820028e9228100 +5484083c2c230000 +418200087c8a2378 +39290004608a0001 +7d404faa7c0004ac +2c2400004e800020 +6063000241820008 +7c0004ac39290020 +4e8000207c604fea +0000000000000000 +6000000000000000 +000079747269642d +fbc1fff0fba1ffe8 +f8010010fbe1fff8 +ebc1fff04e800020 +ebe1fff8e8010010 +4e8000207c0803a6 +0000000000000010 +0141780400527a01 +0000002000010c1b +fffffb8400000018 +41094300000000e0 +019f029e039d4100 +0000400e417e4111 +0000000000000010 +0141780400527a01 +0000001000010c1b +fffffc2c00000018 +0000000000000090 +0000002c00000010 +00000088fffffca8 +0000002800000000 +fffffd1c00000040 +4109450000000060 +300e43029e019f00 +42000e0a447e4111 +0000000b4106dedf +0000006c00000010 +00000028fffffd50 0000001000000000 -fffffebc00000094 -0000000000000068 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 -0000000000000000 +fffffd6400000080 +0000000000000140 +0000009400000010 +0000006cfffffe90 0000000000000000 0000000000000000 0000000000000000 @@ -766,6 +766,12 @@ fffffebc00000094 0000000000000000 0000000000000000 0000000000000000 +2e2e3b202020200a +0a2020202020203b +3b2e2e3b20202020 +200a202020202020 +2027777760202020 +000a0a2020202020 4f4f6f2e2020200a 0a20202020202e6f 2020202020222e20 @@ -777,9 +783,6 @@ fffffebc00000094 27202027202e2020 200a202020202e20 2f207c7c205c2020 -2020200a20202020 -2020203b2e2e3b20 -202020200a202020 -202020203b2e2e3b -60202020200a2020 -000a202020277777 +4c44482020202020 +4148532074694720 +0000000000203a31