summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2009-02-26 21:23:10 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2009-02-26 21:23:10 +0000
commit1e3f52992110d75f1df8c2256d7d6759e9f997fd (patch)
tree40b2f77ffea1ef6c2884f5515c7a30d40b15639a
parent38436038a9e50e8314967672fb5e7b9a5009a4be (diff)
downloadrockbox-1e3f52992110d75f1df8c2256d7d6759e9f997fd.tar.gz
rockbox-1e3f52992110d75f1df8c2256d7d6759e9f997fd.zip
Get the M:Robe 500 main build booting again, fix a bug and commit the rest of Cat's work to get sound working. The code is messy right now, but it plays a file (test.raw) in a normal build when you go into the debug ports screen. Take 2.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20116 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c4
-rwxr-xr-xfirmware/target/arm/tms320dm320/crt0.S2
-rwxr-xr-xfirmware/target/arm/tms320dm320/debug-dm320.c9
-rw-r--r--firmware/target/arm/tms320dm320/dsp-dm320.c167
-rw-r--r--firmware/target/arm/tms320dm320/dsp/Makefile15
-rw-r--r--firmware/target/arm/tms320dm320/dsp/dsp-image.h102
-rw-r--r--firmware/target/arm/tms320dm320/dsp/ipc.h2
-rw-r--r--firmware/target/arm/tms320dm320/dsp/main.c34
-rw-r--r--firmware/target/arm/tms320dm320/dsp/xml2h.py193
9 files changed, 482 insertions, 46 deletions
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
index b51139e7e6..3c54ce81fb 100644
--- a/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
+++ b/firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c
@@ -40,7 +40,7 @@ void pcm_play_dma_init(void)
40 audiohw_set_frequency(HW_FREQ_DEFAULT); 40 audiohw_set_frequency(HW_FREQ_DEFAULT);
41 41
42 /* init DSP */ 42 /* init DSP */
43 dsp_init(); 43// dsp_init();
44} 44}
45 45
46void pcm_postinit(void) 46void pcm_postinit(void)
@@ -48,7 +48,7 @@ void pcm_postinit(void)
48 audiohw_postinit(); 48 audiohw_postinit();
49 49
50 /* wake DSP */ 50 /* wake DSP */
51 dsp_wake(); 51// dsp_wake();
52} 52}
53 53
54const void * pcm_play_dma_get_peak_buffer(int *count) 54const void * pcm_play_dma_get_peak_buffer(int *count)
diff --git a/firmware/target/arm/tms320dm320/crt0.S b/firmware/target/arm/tms320dm320/crt0.S
index ffbe7e5d31..9375de7d0d 100755
--- a/firmware/target/arm/tms320dm320/crt0.S
+++ b/firmware/target/arm/tms320dm320/crt0.S
@@ -143,7 +143,7 @@ start:
143 bhi 1b 143 bhi 1b
144 144
145 /* Set up stack for IRQ mode */ 145 /* Set up stack for IRQ mode */
146 msr cpsr_c, #0x92 /* IRQ disabled, FIQ enabled */ 146 msr cpsr_c, #0xd2 /* IRQ disabled, FIQ enabled */
147 ldr sp, =irq_stack 147 ldr sp, =irq_stack
148 /* Set up stack for FIQ mode */ 148 /* Set up stack for FIQ mode */
149 msr cpsr_c, #0xd1 /* IRQ/FIQ disabled */ 149 msr cpsr_c, #0xd1 /* IRQ/FIQ disabled */
diff --git a/firmware/target/arm/tms320dm320/debug-dm320.c b/firmware/target/arm/tms320dm320/debug-dm320.c
index 7887bcac1e..522278a476 100755
--- a/firmware/target/arm/tms320dm320/debug-dm320.c
+++ b/firmware/target/arm/tms320dm320/debug-dm320.c
@@ -31,8 +31,17 @@
31#include "debug-target.h" 31#include "debug-target.h"
32#include "lcd-target.h" 32#include "lcd-target.h"
33 33
34#ifndef CREATIVE_ZVx
35#include "tsc2100.h"
36#endif
37
34bool __dbg_ports(void) 38bool __dbg_ports(void)
35{ 39{
40 dsp_init();
41#ifndef CREATIVE_ZVx
42 tsc2100_writereg(TSDACGAIN_PAGE, TSDACGAIN_ADDRESS, 0x2020/*x0303*/);
43#endif
44 dsp_wake();
36 return false; 45 return false;
37} 46}
38 47
diff --git a/firmware/target/arm/tms320dm320/dsp-dm320.c b/firmware/target/arm/tms320dm320/dsp-dm320.c
index bc05eff24f..20391baf56 100644
--- a/firmware/target/arm/tms320dm320/dsp-dm320.c
+++ b/firmware/target/arm/tms320dm320/dsp-dm320.c
@@ -23,7 +23,9 @@
23#include "system.h" 23#include "system.h"
24#include "debug.h" 24#include "debug.h"
25#include "string.h" 25#include "string.h"
26#include "file.h"
26#include "dsp-target.h" 27#include "dsp-target.h"
28#include "dsp/ipc.h"
27 29
28/* A "DSP image" is an array of these, terminated by raw_data_size_half = 0. */ 30/* A "DSP image" is an array of these, terminated by raw_data_size_half = 0. */
29struct dsp_section { 31struct dsp_section {
@@ -33,7 +35,9 @@ struct dsp_section {
33}; 35};
34 36
35/* Must define struct dsp_section before including the image. */ 37/* Must define struct dsp_section before including the image. */
36#include "dsp_image_helloworld.h" 38#include "dsp/dsp-image.h"
39
40#define dsp_message (*(volatile struct ipc_message *)&DSP_(_status))
37 41
38#ifdef DEBUG 42#ifdef DEBUG
39static void dsp_status(void) 43static void dsp_status(void)
@@ -127,27 +131,180 @@ static void dsp_load(const struct dsp_section *im)
127 } 131 }
128} 132}
129 133
134static signed short *the_rover = (signed short *)0x1900000;
135static unsigned int index_rover = 0;
136static signed short __attribute__((aligned (16))) pcm_buffer[PCM_SIZE / 2];
137
130void dsp_init(void) 138void dsp_init(void)
131{ 139{
140 unsigned long sdem_addr;
141 int fd;
142 int bytes;
143
144
132 IO_INTC_IRQ0 = 1 << 11; 145 IO_INTC_IRQ0 = 1 << 11;
133 IO_INTC_EINT0 |= 1 << 11; 146 IO_INTC_EINT0 |= 1 << 11;
134 147
135 IO_DSPC_HPIB_CONTROL = 1 << 10 | 1 << 9 | 1 << 8 | 1 << 7 | 1 << 3 | 1 << 0; 148 IO_DSPC_HPIB_CONTROL = 1 << 10 | 1 << 9 | 1 << 8 | 1 << 7 | 1 << 3 | 1 << 0;
136 149
137 dsp_reset(); 150 dsp_reset();
138 dsp_load(dsp_image_helloworld); 151 dsp_load(dsp_image);
152
153 /* Initialize codec. */
154 sdem_addr = (unsigned long)pcm_buffer - CONFIG_SDRAM_START;
155 DEBUGF("pcm_sdram at 0x%08lx, sdem_addr 0x%08lx",
156 (unsigned long)pcm_buffer, (unsigned long)sdem_addr);
157 DSP_(_sdem_addrl) = sdem_addr & 0xffff;
158 DSP_(_sdem_addrh) = sdem_addr >> 16;
159
160 fd = open("/test.raw", O_RDONLY);
161 bytes = read(fd, the_rover, 4*1024*1024);
162 close(fd);
163
164 DEBUGF("read %d rover bytes", bytes);
165
166 #if 0
167 {
168 unsigned int i;
169 memset(pcm_buffer, 0x80, PCM_SIZE);
170 for (i = 0; i < 8192; i++) {
171 signed short val = 0;
172 /*if (i < PCM_SIZE/4/2) {
173 val = 128*(i%256);
174 } else {
175 val = 2*128*128-128*(i%256);
176 }*/
177 val = 128*(i%256);
178 pcm_buffer[2*i] = pcm_buffer[2*i+1] = val;
179 }
180 clean_dcache();
181
182
183 {
184 unsigned int i;
185 volatile signed short *pdata = &DSP_(_data);
186 DEBUGF("dsp__data at %08x", pdata);
187 for (i = 0; i < 4096; i++) {
188 pdata[2*i]=pdata[2*i+1]=(i&1)*32767;
189 }
190 for (i = 4096; i < 8192; i++) {
191 pdata[2*i]=pdata[2*i+1]=0;
192 }
193 }
194 #endif
195
196#ifdef IPC_SIZES
197 DEBUGF("dsp_message at 0x%08x", &dsp_message);
198 DEBUGF("sizeof(ipc_message)=%uB offset(ipc_message.payload)=%uB",
199 sizeof(struct ipc_message), (int)&((struct ipc_message*)0)->payload);
200#endif
201
202#ifdef INIT_MSG
203 /* Prepare init message. */
204
205 /* DSP accesses MUST be done a word at a time. */
206 dsp_message.msg = MSG_INIT;
207
208 sdem_addr = (unsigned long)pcm_sdram - CONFIG_SDRAM_START;
209 DEBUGF("pcm_sdram at 0x%08x, sdem_addr 0x%08x", pcm_sdram, sdem_addr);
210 dsp_message.payload.init.sdem_addrl = sdem_addr & 0xffff;
211 dsp_message.payload.init.sdem_addrh = sdem_addr >> 16;
212
213 DEBUGF("dsp_message: %04x %04x %04x %04x",
214 ((unsigned short *)&dsp_message)[0],
215 ((unsigned short *)&dsp_message)[1],
216 ((unsigned short *)&dsp_message)[2],
217 ((unsigned short *)&dsp_message)[3]);
218#endif
219
139} 220}
140 221
141void DSPHINT(void) 222void DSPHINT(void)
142{ 223{
143 unsigned int i; 224 unsigned int i;
144 char buffer[80]; 225 char buffer[80];
226 static unsigned short level = 2;
227
228 unsigned short *pcm_topbottom, *pcm_topbottom_end;
229
145 230
146 IO_INTC_IRQ0 = 1 << 11; 231 IO_INTC_IRQ0 = 1 << 11;
147 232
148 /* DSP stores one character per word. */ 233
149 for (i = 0; i < sizeof(buffer); i++) { 234 switch (dsp_message.msg)
150 buffer[i] = (&DSP_(_status))[i]; 235 {
236 case MSG_DEBUGF:
237 /* DSP stores one character per word. */
238 for (i = 0; i < sizeof(buffer); i++)
239 {
240 buffer[i] = dsp_message.payload.debugf.buffer[i];
241 }
242
243 /* Release shared area to DSP. */
244 dsp_wake();
245
246 DEBUGF("DSP: %s", buffer);
247 break;
248 case MSG_REFILL:
249 DEBUGF("DSP: DMA0 with topbottom=%u (fill at %04lx)",
250 dsp_message.payload.refill.topbottom,
251 (unsigned long)pcm_buffer +
252 dsp_message.payload.refill.topbottom);
253 pcm_topbottom = pcm_buffer + dsp_message.payload.refill.topbottom / 2;
254
255 /*
256 i = 0;
257 while (i < PCM_SIZE/4) {
258 unsigned int j;
259 for (j = 0; j < level; j++) {
260 pcm_topbottom[i+j] = -32768;
261 }
262 for (j = level; j < 2*level; j++) {
263 pcm_topbottom[i+j] = 32767;
264 }
265 i += 2*level;
266 }
267
268 level += 2;
269 if (level > 256) {
270 level = 2;
271 }*/
272
273 memcpy(pcm_topbottom, the_rover + index_rover, PCM_SIZE/2);
274 index_rover += PCM_SIZE/4;
275 if (index_rover >= 2*1024*1024) {
276 index_rover = 0;
277 }
278
279 /*
280 pcm_topbottom = &p_pcm_sdram[dsp_message.payload.refill.topbottom/2];
281 DEBUGF("DSP: tofill begins: %04x %04x %04x %04x",
282 pcm_topbottom[0],
283 pcm_topbottom[1],
284 pcm_topbottom[2],
285 pcm_topbottom[3]
286 );
287 pcm_topbottom_end = &p_pcm_sdram[(dsp_message.payload.refill.topbottom+PCM_SIZE/2)/2];
288 DEBUGF("DSP: tofill ends: %04x %04x %04x %04x",
289 pcm_topbottom_end[-4],
290 pcm_topbottom_end[-3],
291 pcm_topbottom_end[-2],
292 pcm_topbottom_end[-1]
293 );
294 */
295
296 /*
297 DEBUGF("DSP: DMA0: SD %04x:%04x -> DSP %04x:%04x, TRG %04x",
298 dsp_message.payload.refill._SDEM_ADDRH,
299 dsp_message.payload.refill._SDEM_ADDRL,
300 dsp_message.payload.refill._DSP_ADDRH,
301 dsp_message.payload.refill._DSP_ADDRL,
302 dsp_message.payload.refill._DMA_TRG);
303 */
304 break;
305 default:
306 DEBUGF("DSP: unknown msg 0x%04x", dsp_message.msg);
307 break;
151 } 308 }
152 309
153 /* Release shared area to DSP. */ 310 /* Release shared area to DSP. */
diff --git a/firmware/target/arm/tms320dm320/dsp/Makefile b/firmware/target/arm/tms320dm320/dsp/Makefile
index 8f016378fd..8cc1bd98c0 100644
--- a/firmware/target/arm/tms320dm320/dsp/Makefile
+++ b/firmware/target/arm/tms320dm320/dsp/Makefile
@@ -10,10 +10,12 @@
10# http://daniel.haxx.se/blog/2007/11/18/free-to-use-compiler-from-ti/ 10# http://daniel.haxx.se/blog/2007/11/18/free-to-use-compiler-from-ti/
11CC = cl500 11CC = cl500
12LD = lnk500 12LD = lnk500
13CFLAGS = $(BUILDDATE) 13CFLAGS =
14# There's more in linker.cmd. 14# There's more in linker.cmd.
15LDFLAGS = -w 15LDFLAGS = -w
16 16
17OBJDIR=./build
18
17OBJS = arm.obj main.obj vectors.obj dma.obj 19OBJS = arm.obj main.obj vectors.obj dma.obj
18 20
19ifeq ($(findstring -DCREATIVE_ZV,$(TARGET)), -DCREATIVE_ZV) 21ifeq ($(findstring -DCREATIVE_ZV,$(TARGET)), -DCREATIVE_ZV)
@@ -24,14 +26,15 @@ endif
24 26
25OBJS := $(patsubst %.obj, $(OBJDIR)/%.obj, $(OBJS)) 27OBJS := $(patsubst %.obj, $(OBJDIR)/%.obj, $(OBJS))
26 28
27all: $(BUILDDIR)/dsp-image.h 29all: dsp-image.h
28 30
29clean: 31clean:
30 $(call PRINTS,cleaning DSP firmware)rm -f $(OBJS) $(OBJDIR)/dsp-image.out $(OBJDIR)/dsp-image.xml 32 $(call PRINTS,cleaning DSP firmware)rm -f $(OBJS) $(OBJDIR)/dsp-image.out $(OBJDIR)/dsp-image.xml
33 rmdir $(OBJDIR)
31 34
32$(BUILDDIR)/dsp-image.h: $(OBJS) linker.cmd 35dsp-image.h: $(OBJS) linker.cmd
33 $(call PRINTS,LNK500 dsp-image.out)lnk500 $(LDFLAGS) -o $(OBJDIR)/dsp-image.out $^ 36 $(call PRINTS,LNK500 dsp-image.out)lnk500 $(LDFLAGS) -o $(OBJDIR)/dsp-image.out $^
34 $(call PRINTS,OFD500+XML2H $(@F))ofd500 -x -o /dev/stdout $(OBJDIR)/dsp-image.out | python $(TOOLSDIR)/xml2h.py $(OBJDIR)/dsp-image.xml > $@ 37 $(call PRINTS,OFD500+XML2H $(@F))ofd500 -x -o /dev/stdout $(OBJDIR)/dsp-image.out | python xml2h.py $(OBJDIR)/dsp-image.xml > $@
35 38
36$(OBJDIR)/%.obj: %.asm 39$(OBJDIR)/%.obj: %.asm
37 $(SILENT)mkdir -p $(dir $@) 40 $(SILENT)mkdir -p $(dir $@)
@@ -51,5 +54,3 @@ $(OBJDIR)/tsc2100.obj: tsc2100.c audio.h registers.h
51 54
52$(OBJDIR)/dma.obj: dma.c dma.h registers.h ipc.h 55$(OBJDIR)/dma.obj: dma.c dma.h registers.h ipc.h
53 56
54# For PRINTS.
55include $(TOOLSDIR)/make.inc
diff --git a/firmware/target/arm/tms320dm320/dsp/dsp-image.h b/firmware/target/arm/tms320dm320/dsp/dsp-image.h
new file mode 100644
index 0000000000..1cbe1e5c3e
--- /dev/null
+++ b/firmware/target/arm/tms320dm320/dsp/dsp-image.h
@@ -0,0 +1,102 @@
1#ifndef DSP_IMAGE
2#define DSP_IMAGE
3/*
4 * Automatically generated by xml2h.py from ./build/dsp-image.out.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of
9 * the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19 * MA 02111-1307 USA
20 *
21 */
22static const unsigned short _section_text[] = {
23 0xe808, 0x75f8, 0x0008, 0x0280, 0xfc00, 0x4a11, 0x4a07, 0x4a1d, 0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d, 0xfffc, 0x7711, 0x0001, 0x7681, 0x0001, 0x76f8, 0x27db, 0x0001, 0x8a1d, 0x8a07, 0x8a11, 0xf4eb, 0xeefb, 0x4818, 0xf000, 0x0006, 0x76f8, 0x278a, 0x0002, 0x8004, 0x7600, 0x0051, 0x1006, 0x8001, 0x1004, 0x8002, 0xf274, 0x0293, 0xf020, 0x278b, 0x76f8, 0x27db, 0x0000, 0xf074, 0x0080, 0x10f8, 0x27db, 0xf844, 0x00bd, 0xf4e1, 0xf495, 0x10f8, 0x27db, 0xf845, 0x00b7, 0xee05, 0x76f8, 0x27db, 0x0002, 0xfc00, 0x4a11, 0x7711, 0x0026, 0x7712, 0x0001, 0x7681, 0x0010, 0x7713, 0x0001, 0x7711, 0x0000, 0xeefe, 0x7681, 0xffff, 0xe501, 0xf495, 0xf6bb, 0xf074, 0x01c1, 0xf074, 0x0192, 0xf074, 0x01ec, 0x7600, 0x2ba3, 0xf074, 0x009c, 0xf4e1, 0xf495, 0xf073, 0x00dd, 0xe808, 0x75f8, 0x0008, 0x0280, 0xfc00, 0xf495, 0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a10, 0x4a11, 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17, 0x4a17, 0x4a19, 0x4a0e, 0x4a06, 0x4a07, 0x4a1a, 0x4a1d, 0x4a1b, 0x4a1c, 0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d, 0xfffc, 0x4818, 0x68f8, 0x0018, 0xfffe, 0x7711, 0x0001, 0x4a08, 0x7681, 0x0040, 0x7711, 0x0055, 0x7681, 0x0000, 0x7711, 0x0057, 0x6f81, 0x0c41, 0xeefb, 0xf030, 0x4000, 0x8002, 0xf020, 0x4000, 0x1c02, 0x76f8, 0x278a, 0x0003, 0x8003, 0x7102, 0x278b, 0xf074, 0x00e1, 0x12f8, 0x27dc, 0xf1ef, 0xf6b8, 0xf3e1, 0x12f8, 0x27dd, 0xf2a0, 0x0003, 0x4e00, 0xf020, 0xffff, 0x5700, 0xf280, 0x75f8, 0x0008, 0x8000, 0x5600, 0xf0f0, 0x75f8, 0x0008, 0x8001, 0xf020, 0x8000, 0x6f03, 0x0c1f, 0x75f8, 0x0008, 0x8002, 0xe800, 0x75f8, 0x0008, 0x8003, 0xf020, 0x4000, 0x75f8, 0x0008, 0x8004, 0xe800, 0x75f8, 0x0008, 0x8005, 0x74f8, 0x278c, 0x8006, 0x74f8, 0x278d, 0x8001, 0x74f8, 0x278e, 0x8000, 0x74f8, 0x278f, 0x8003, 0xee05, 0xe801, 0x74f8, 0x2790, 0x8002, 0x8a18, 0x75f8, 0x0008, 0x8006, 0x8a1c, 0x8a1b, 0x8a1d, 0x8a1a, 0x8a07, 0x8a06, 0x8a0e, 0x8a19, 0x8a17, 0x8a17, 0x8a16, 0x8a15, 0x8a14, 0x8a13, 0x8a12, 0x8a11, 0x8a10, 0x8a0d, 0x8a0c, 0x8a0b, 0x8a0a, 0x8a09, 0x8a08, 0xf4eb, 0x4a11, 0x4a07, 0x4a1d, 0x68f8, 0x0007, 0x7d3f, 0x69f8, 0x0007, 0x4000, 0x68f8, 0x001d, 0xfffc, 0x7711, 0x0001, 0x7681, 0x0800, 0x8a1d, 0x8a07, 0x8a11, 0xf4eb, 0x4a11, 0x7711, 0x0055, 0x7681, 0x0003, 0x7711, 0x0057, 0x7681, 0x2800, 0x7711, 0x0055, 0x7681, 0x0004, 0x7711, 0x0057, 0x7681, 0x7141, 0x7711, 0x0055, 0x7681, 0x0000, 0x7711, 0x0057, 0x7681, 0x8000, 0x7711, 0x0055, 0x7681, 0x0001, 0x7711, 0x0057, 0x7681, 0x0022, 0x7711, 0x0055, 0x7681, 0x0002, 0x7711, 0x0057, 0x7681, 0x4000, 0x7711, 0x0054, 0x7681, 0x0081, 0x8a11, 0xfc00, 0x4a11, 0x7711, 0x0038, 0x7681, 0x0000, 0x7711, 0x0039, 0x7681, 0x0000, 0x7711, 0x0038, 0x7681, 0x0001, 0x7711, 0x0039, 0x7681, 0x0030, 0x7711, 0x0038, 0x7681, 0x000e, 0x7711, 0x0039, 0x7681, 0x0002, 0x7711, 0x0038, 0x7681, 0x0004, 0x7711, 0x0039, 0x7681, 0x00a0, 0x7711, 0x0038, 0x7681, 0x0005, 0x7711, 0x0039, 0x7681, 0x0000, 0x8a11, 0xfc00, 0x4a11, 0x7711, 0x0038, 0x7681, 0x0001, 0x7711, 0x0039, 0x6981, 0x0001, 0x8a11, 0xfc00, 0xf7be, 0xf6b9, 0xf4a0, 0xf6b7, 0xf6b5, 0xf6b6, 0xf7b8, 0x7718, 0x178a, 0x6bf8, 0x0018, 0x0fff, 0x68f8, 0x0018, 0xfffe, 0xf020, 0x2cb1, 0xf100, 0x0001, 0xf84d, 0x0223, 0xf6b8, 0xf495, 0xf020, 0x2cb1, 0xf073, 0x021d, 0x7ef8, 0x0012, 0xf000, 0x0001, 0x47f8, 0x0011, 0x7e92, 0x00f8, 0x0011, 0xf000, 0x0001, 0x7ef8, 0x0011, 0xf000, 0x0001, 0x6c89, 0x0212, 0xf7b8, 0xeefc, 0xf020, 0xffff, 0xf100, 0x0001, 0xf84d, 0x023b, 0xf6b8, 0xf495, 0xf020, 0xffff, 0xf273, 0x0235, 0x4e02, 0xf495, 0xf5e3, 0x5602, 0x7e00, 0x1100, 0xfa4c, 0x0233, 0x6b03, 0x0001, 0xf6b8, 0xee04, 0xf074, 0x0e85, 0xf074, 0x0241, 0x4a11, 0x4a16, 0xeeff, 0x10f8, 0x2801, 0xf4e3, 0x7211, 0x27de, 0x10f8, 0x0011, 0xf845, 0x0259, 0x4811, 0xf000, 0x27df, 0x8816, 0xf495, 0xf495, 0x10ee, 0xffff, 0xf4e3, 0x6ce9, 0xffff, 0x0253, 0x10f8, 0x2800, 0xf845, 0x0260, 0x10f8, 0x2800, 0xf4e3, 0x10f8, 0x27ff, 0xf845, 0x0267, 0x10f8, 0x27ff, 0xf4e3, 0x10f8, 0x2802, 0xf4e3, 0xf074, 0x0290, 0xf073, 0x026c, 0x4a11, 0x8811, 0x10f8, 0x2801, 0xf4e3, 0xf7b8, 0x10f8, 0x27de, 0xf468, 0xf478, 0xf010, 0x0020, 0xf843, 0x0282, 0x10f8, 0x2802, 0xf4e3, 0xe801, 0xf073, 0x028e, 0x7212, 0x27de, 0x10f8, 0x2802, 0x6bf8, 0x27de, 0x0001, 0x70e2, 0x27df, 0x0011, 0xf4e3, 0xe800, 0x8a11, 0xfc00, 0xf495, 0xf073, 0x0291, 0x4a11, 0xeef8, 0xf495, 0x710b, 0x0012, 0x110c, 0x710a, 0x0011, 0x7004, 0x0012, 0x8005, 0x7006, 0x0011, 0x4818, 0x7607, 0x0000, 0xf000, 0x0005, 0x8100, 0x8001, 0x7602, 0x02ba, 0x4818, 0x7603, 0x02d1, 0xf274, 0x0316, 0xf000, 0x0004, 0x4911, 0xf84d, 0x02b7, 0x7105, 0x0011, 0x7681, 0x0000, 0xee08, 0x8a11, 0xfc00, 0x4a11, 0xf495, 0x7102, 0x0011, 0x71e1, 0x0001, 0x0010, 0x71e1, 0x0002, 0x0012, 0xf5aa, 0xf820, 0x02cc, 0x7181, 0x0012, 0x8082, 0x6b81, 0x0001, 0x6be1, 0x0002, 0x0001, 0x8a11, 0xfc00, 0x4a11, 0xf110, 0x0001, 0x4a16, 0x8812, 0x4a17, 0x8913, 0xeefe, 0x7716, 0xffff, 0x7106, 0x0011, 0x11eb, 0x0001, 0xfa4c, 0x02dd, 0xf495, 0x6d96, 0x11e1, 0x0001, 0x8910, 0xf495, 0x71e1, 0x0002, 0x0013, 0xf5ab, 0xf820, 0x0304, 0x4813, 0xf520, 0x8910, 0xf495, 0xf495, 0xf6ae, 0xf820, 0x02f9, 0xf273, 0x02fa, 0xf495, 0x8917, 0xe767, 0x7000, 0x0012, 0x7001, 0x0017, 0x1081, 0xf074, 0x142a, 0x4817, 0x0081, 0x8081, 0x4816, 0x00e1, 0x0002, 0xee02, 0x80e1, 0x0002, 0x8a17, 0x4816, 0x8a16, 0x8a11, 0xfc00, 0xfc00, 0x80f8, 0x2801, 0xfc00, 0x80f8, 0x2802, 0xfc00, 0x4a11, 0x4a16, 0x4a17, 0xeef4, 0x8816, 0x1013, 0x8009, 0x1186, 0xf210, 0x0001, 0x8813, 0xf495, 0x7712, 0xffff, 0x7111, 0x0017, 0x7112, 0x0011, 0x10eb, 0x0001, 0xfa44, 0x0328, 0xf495, 0x6d92, 0x6ff8, 0x0012, 0x0e00, 0x800a, 0x4812, 0xfa45, 0x0410, 0x7604, 0x0000, 0x7605, 0x0000, 0x7606, 0x0000, 0x7607, 0xffff, 0xe925, 0x7608, 0x0000, 0x7186, 0x0012, 0x7182, 0x0012, 0x10f8, 0x0012, 0x08f8, 0x000b, 0xf845, 0x0362, 0x10f8, 0x0012, 0xf845, 0x0410, 0x1086, 0xf000, 0x0001, 0x4911, 0x8086, 0x8812, 0x7000, 0x0017, 0x10e2, 0xffff, 0xf5e3, 0x6b04, 0x0001, 0x7186, 0x0012, 0x7182, 0x0012, 0x6ce2, 0xffdb, 0x034a, 0x6b86, 0x0001, 0x4818, 0x7000, 0x0016, 0xf274, 0x0416, 0xf000, 0x0005, 0x4818, 0x7000, 0x0016, 0xf000, 0x0010, 0x8001, 0x4818, 0xf274, 0x0468, 0xf000, 0x0005, 0x7186, 0x0012, 0x1182, 0x7713, 0x004c, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf845, 0x03a7, 0x7713, 0x0068, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf845, 0x03a3, 0x7713, 0x006c, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf844, 0x03b0, 0x4812, 0xf000, 0x0001, 0x8812, 0x7086, 0x0012, 0x6082, 0x006c, 0xf830, 0x039f, 0xf273, 0x03af, 0x6905, 0x0040, 0xf273, 0x03a9, 0x6905, 0x0100, 0xf273, 0x03a9, 0x6905, 0x0020, 0x6905, 0x0080, 0x1086, 0xf000, 0x0001, 0x8812, 0xf495, 0x8086, 0x1182, 0x7712, 0x006e, 0x10f8, 0x000b, 0x8108, 0x08f8, 0x0012, 0xfa45, 0x03ed, 0x6b86, 0x0001, 0x7712, 0x0073, 0x10f8, 0x000b, 0x08f8, 0x0012, 0xf845, 0x03da, 0x10f8, 0x2801, 0xf4e3, 0x4818, 0xf000, 0x0010, 0x8000, 0x4818, 0xf274, 0x0637, 0xf000, 0x0005, 0x7000, 0x0017, 0x1109, 0xf5e3, 0x0004, 0x8004, 0x10f8, 0x2802, 0xf4e3, 0xf073, 0x0409, 0x4818, 0x7000, 0x0017, 0xf000, 0x0010, 0x8001, 0x4818, 0xf000, 0x0004, 0x8002, 0x1009, 0x8003, 0x4818, 0xf274, 0x052f, 0xf000, 0x0005, 0xf073, 0x0409, 0xf020, 0x0160, 0x1805, 0x8812, 0xf495, 0xf495, 0x6ce2, 0xffc0, 0x0401, 0x6b10, 0x0001, 0x7110, 0x0012, 0xf7b8, 0x7182, 0x0012, 0xf273, 0x0409, 0x1004, 0x4e82, 0x6b10, 0x0001, 0x7110, 0x0012, 0x1004, 0x7182, 0x0012, 0x8082, 0x710a, 0x0010, 0x7186, 0x0012, 0xf5aa, 0xf830, 0x0337, 0x1004, 0xee0c, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0x8812, 0xf273, 0x0430, 0x7102, 0x0011, 0xf273, 0x042e, 0x6982, 0x0010, 0xf273, 0x042e, 0x6982, 0x0001, 0xf273, 0x042e, 0x6982, 0x0002, 0xf273, 0x042e, 0x6982, 0x0008, 0x6982, 0x0004, 0x6b81, 0x0001, 0x7181, 0x0013, 0xf7b8, 0x1183, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x002b, 0xf846, 0x0456, 0x7713, 0x002b, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf845, 0x0424, 0x7713, 0x0020, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf845, 0x042c, 0x7713, 0x0023, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf845, 0x0428, 0xf073, 0x0466, 0x7713, 0x002d, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf845, 0x0420, 0x7713, 0x0030, 0x10f8, 0x000b, 0x08f8, 0x0013, 0xf845, 0x041c, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x4a17, 0xeef6, 0xf495, 0x710e, 0x0011, 0x7181, 0x0012, 0x8816, 0x6082, 0x002a, 0xfa20, 0x0496, 0x710f, 0x0017, 0x1087, 0xf000, 0x0001, 0x8812, 0xf7b8, 0x8087, 0x1082, 0x80e6, 0x0001, 0x10e6, 0x0001, 0xf842, 0x048a, 0xf484, 0x80e6, 0x0001, 0x6986, 0x0001, 0x1081, 0xf000, 0x0001, 0x8812, 0xf495, 0x8081, 0x6082, 0x002e, 0xf830, 0x04db, 0xf073, 0x052a, 0xe782, 0x4812, 0xf010, 0x0001, 0x8813, 0xf495, 0xec09, 0x769b, 0x0000, 0x7181, 0x0013, 0xf7b8, 0x1183, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x0030, 0xf843, 0x04c3, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x003a, 0xf842, 0x04c3, 0x8192, 0x1081, 0xf000, 0x0001, 0x8813, 0xf495, 0x8081, 0x1183, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x0030, 0xf842, 0x04ab, 0x1000, 0xf844, 0x04d0, 0x7712, 0x002e, 0x10f8, 0x000b, 0x08f8, 0x0012, 0xf845, 0x04db, 0xf073, 0x052a, 0x4818, 0xf074, 0x0e9c, 0x80e6, 0x0001, 0x7181, 0x0012, 0x6082, 0x002e, 0xf820, 0x052a, 0x1081, 0xf000, 0x0001, 0x8812, 0xf495, 0x8081, 0x6082, 0x002a, 0xf830, 0x051f, 0xe782, 0x4812, 0xf010, 0x0001, 0x8813, 0xf495, 0xec09, 0x769b, 0x0000, 0x7181, 0x0013, 0xf7b8, 0x1183, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x0030, 0xf843, 0x0512, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x003a, 0xf842, 0x0512, 0x8192, 0x1081, 0xf000, 0x0001, 0x8813, 0xf495, 0x8081, 0x1183, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x0030, 0xf842, 0x04fa, 0x1000, 0xf845, 0x051a, 0x4818, 0xf074, 0x0e9c, 0xf073, 0x051b, 0xe800, 0xf273, 0x052a, 0x80e6, 0x0002, 0x1087, 0xf000, 0x0001, 0x8812, 0xf495, 0x8087, 0x1082, 0x80e6, 0x0002, 0x6b81, 0x0001, 0xee0a, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x4a17, 0xeefa, 0xf495, 0x8002, 0x100d, 0x710b, 0x0011, 0x8003, 0x710c, 0x0012, 0x1081, 0x710a, 0x0017, 0xf000, 0x0001, 0x8081, 0x8811, 0xf495, 0xf495, 0x1281, 0x8004, 0xf845, 0x062c, 0x7102, 0x0011, 0xf7b8, 0x71e1, 0x0002, 0x0011, 0x10f8, 0x0011, 0xf843, 0x0574, 0x1004, 0xf010, 0x0001, 0x8813, 0xf495, 0x7710, 0xffff, 0x10eb, 0x0001, 0xfa44, 0x0559, 0xf495, 0x6d90, 0xf5a9, 0xf820, 0x0574, 0x7005, 0x0011, 0x7102, 0x0011, 0x11e1, 0x0001, 0x10f8, 0x000b, 0xf468, 0x7105, 0x0011, 0xf478, 0x08f8, 0x0011, 0xf847, 0x058f, 0xf073, 0x0593, 0x1004, 0xf010, 0x0001, 0x8811, 0xf495, 0x7713, 0xffff, 0x10e9, 0x0001, 0xfa44, 0x057b, 0xf495, 0x6d93, 0x7102, 0x0011, 0x7005, 0x0013, 0x11e1, 0x0001, 0x10f8, 0x000b, 0xf468, 0xf478, 0x08f8, 0x0013, 0xf846, 0x0593, 0xf273, 0x0595, 0x7105, 0x0011, 0x8911, 0xf495, 0x4811, 0x0082, 0x8082, 0x4811, 0xf274, 0x14ca, 0xf000, 0x0001, 0x8816, 0x4808, 0xf845, 0x0632, 0xf7b8, 0xf495, 0x1105, 0xf768, 0xf778, 0x09f8, 0x0011, 0xe762, 0xf84a, 0x05c8, 0x7102, 0x0013, 0x961f, 0xf830, 0x05c8, 0x7105, 0x0010, 0x4916, 0xf4a9, 0xf310, 0x0001, 0x8913, 0xf830, 0x05c3, 0x4911, 0x0905, 0xf310, 0x0001, 0x891a, 0xf495, 0xf072, 0x05c2, 0x769b, 0x0020, 0x4911, 0x4812, 0x0905, 0xf600, 0x8812, 0x1105, 0xf640, 0x10f8, 0x0008, 0xf845, 0x05f7, 0x4812, 0xf010, 0x0001, 0x8813, 0x1004, 0xf010, 0x0001, 0x8814, 0xf640, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x05e5, 0x10ec, 0x0001, 0x809b, 0x10f8, 0x0008, 0xf845, 0x05e6, 0xf310, 0x0001, 0x8914, 0xf495, 0x7710, 0x0001, 0xf6ac, 0xfa20, 0x05f7, 0xf310, 0x0001, 0xf310, 0x0001, 0x891a, 0xf495, 0xf072, 0x05f6, 0x769b, 0x0000, 0x1105, 0x4812, 0xf600, 0xf768, 0xf778, 0x09f8, 0x0011, 0xf84a, 0x0618, 0x7102, 0x0013, 0x961f, 0xf820, 0x0618, 0x7105, 0x0010, 0xf4a9, 0xf010, 0x0001, 0x8812, 0xf830, 0x0618, 0x4910, 0x4811, 0xf620, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x0617, 0x769a, 0x0020, 0x4911, 0x4816, 0xf600, 0x8811, 0xf495, 0xf495, 0x7681, 0x0000, 0x7000, 0x0017, 0x1103, 0xf7e3, 0xf495, 0x4816, 0xf274, 0x1625, 0xf495, 0x4816, 0xf073, 0x0632, 0x7000, 0x0017, 0x1103, 0xf7e3, 0xf020, 0x2a5e, 0xee06, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0xf120, 0x2803, 0x8811, 0x4a16, 0x4a17, 0x6fe1, 0x0001, 0x0e00, 0xeef6, 0x8817, 0xf495, 0x710e, 0x0013, 0xf200, 0x018f, 0x8004, 0xf210, 0x0001, 0x8812, 0x7605, 0x0000, 0x8006, 0xf070, 0x018f, 0x769a, 0x0020, 0x7104, 0x0012, 0x7682, 0x0000, 0xf120, 0x2803, 0x1004, 0xf7b8, 0xf010, 0x0001, 0x8107, 0x8004, 0x71e1, 0x0003, 0x0014, 0x11f8, 0x0014, 0xf768, 0xf778, 0xf310, 0x0064, 0x8812, 0xf84e, 0x06a4, 0xf495, 0x7715, 0x0064, 0x11f8, 0x0014, 0x09f8, 0x0015, 0xf84d, 0x06e7, 0x11f8, 0x0014, 0xf768, 0xf778, 0xf310, 0x0047, 0xf84e, 0x0692, 0xe947, 0x10f8, 0x0014, 0x08f8, 0x000b, 0xf845, 0x06f7, 0xe925, 0x10f8, 0x0014, 0x08f8, 0x000b, 0xf845, 0x06d5, 0xe945, 0x10f8, 0x0014, 0x08f8, 0x000b, 0xf845, 0x06f7, 0xf073, 0x0712, 0x7715, 0x0058, 0x11f8, 0x0014, 0x09f8, 0x0015, 0xf84d, 0x06e7, 0x7715, 0x0063, 0x11f8, 0x0014, 0x09f8, 0x0015, 0xf84d, 0x0707, 0xf073, 0x0712, 0x10f8, 0x0014, 0xf468, 0xf478, 0xf010, 0x0070, 0xf846, 0x06c5, 0x10f8, 0x0014, 0xf468, 0xf478, 0xf010, 0x006f, 0xf842, 0x06e7, 0xe742, 0x7710, 0x0002, 0x6dea, 0xff9b, 0xf6aa, 0xf820, 0x06f7, 0xe969, 0x10f8, 0x0014, 0x08f8, 0x000b, 0xf845, 0x06e7, 0xf073, 0x0712, 0xe975, 0x10f8, 0x0014, 0x08f8, 0x000b, 0xf845, 0x06e7, 0xe978, 0x10f8, 0x0014, 0x08f8, 0x000b, 0xf845, 0x06e7, 0xf073, 0x0712, 0x7713, 0x2a65, 0x7107, 0x0012, 0xe510, 0x1183, 0x4812, 0xf84d, 0x07ef, 0x71eb, 0x0001, 0x0011, 0x6e81, 0x06de, 0x709a, 0x0011, 0xf073, 0x07ef, 0x4818, 0xf000, 0x0005, 0x8000, 0x4818, 0xf000, 0x0004, 0x8001, 0x7002, 0x0013, 0xf274, 0x0c3b, 0xf495, 0x4811, 0xf073, 0x0712, 0x4818, 0xf000, 0x0005, 0x8000, 0x4818, 0xf000, 0x0004, 0x8001, 0x7002, 0x0013, 0xf274, 0x07f4, 0xf495, 0x4811, 0xf073, 0x0712, 0x1183, 0xf300, 0x0001, 0x8183, 0x8913, 0xf010, 0x0001, 0xe510, 0x8004, 0x6881, 0xfffd, 0x7181, 0x0012, 0x61f8, 0x0012, 0x0002, 0xfa20, 0x073f, 0x7716, 0x0000, 0x10e1, 0x0003, 0x7713, 0x0075, 0x11f8, 0x0008, 0x09f8, 0x0013, 0xf84d, 0x073f, 0x7713, 0x006f, 0x11f8, 0x0008, 0x09f8, 0x0013, 0xf84d, 0x073f, 0x7713, 0x0078, 0x11f8, 0x0008, 0x09f8, 0x0013, 0xf84d, 0x073f, 0x7713, 0x0058, 0x11f8, 0x0008, 0x09f8, 0x0013, 0xf84d, 0x073f, 0x7716, 0x0001, 0x1005, 0xf844, 0x0750, 0x10f8, 0x0016, 0xf845, 0x0758, 0x7104, 0x0012, 0x7682, 0x002b, 0x6b04, 0xffff, 0xf273, 0x075b, 0x7181, 0x0012, 0x7104, 0x0012, 0x7682, 0x002d, 0x6b04, 0xffff, 0x7181, 0x0012, 0x1005, 0xf844, 0x076a, 0x6c86, 0x076a, 0x61f8, 0x0012, 0x0004, 0xf820, 0x076a, 0x7104, 0x0012, 0x7682, 0x0020, 0x6b04, 0xffff, 0x7181, 0x0012, 0x61f8, 0x0012, 0x0001, 0xf830, 0x0782, 0x1007, 0x0804, 0xf7b8, 0xf000, 0x018f, 0x11f8, 0x0008, 0xf768, 0xf778, 0x09e1, 0x0001, 0xf84e, 0x0782, 0x4917, 0xf520, 0xf273, 0x0783, 0xf200, 0x0001, 0x1007, 0x8008, 0x1004, 0xf000, 0x0001, 0x8000, 0x7601, 0x0000, 0x7602, 0x0190, 0x1008, 0xf074, 0x140a, 0x8812, 0xf495, 0xe770, 0xf6aa, 0x8004, 0xf830, 0x07aa, 0xf010, 0x0002, 0x8812, 0x4817, 0x0804, 0xf000, 0x0001, 0x4808, 0xf845, 0x07a8, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x07a7, 0x769a, 0x0020, 0x7687, 0x0000, 0xe712, 0x960b, 0xf830, 0x07c4, 0x1107, 0x1008, 0xf620, 0xf010, 0x0001, 0x8812, 0xf495, 0x7710, 0xffff, 0xf4aa, 0xfa30, 0x07ee, 0x7106, 0x0011, 0x7312, 0x001a, 0xf072, 0x07c1, 0x7699, 0x0020, 0xf073, 0x07ee, 0x7107, 0x0010, 0x7108, 0x0013, 0xf4ab, 0xfa30, 0x07d8, 0x7106, 0x0012, 0x4910, 0x4813, 0xf620, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x07d7, 0x769a, 0x0030, 0x4816, 0x1a05, 0x8816, 0xf495, 0xf495, 0x6c86, 0x07e3, 0xe712, 0x960d, 0xf820, 0x07ee, 0xe731, 0xf4a9, 0xf830, 0x07ee, 0x7712, 0x2803, 0xe510, 0x7681, 0x0030, 0x7007, 0x0012, 0x1007, 0xee0a, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0x8812, 0xeefe, 0xf495, 0x7106, 0x0014, 0x1184, 0xf693, 0xf030, 0x0001, 0x7105, 0x0015, 0xf600, 0x7104, 0x0013, 0xf000, 0x0001, 0x8811, 0x7084, 0x0011, 0xf000, 0x0001, 0x5781, 0x8084, 0x56f8, 0x2a88, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xfa42, 0x081c, 0x7711, 0x0000, 0x7711, 0x0001, 0x10f8, 0x0011, 0xfa45, 0x0827, 0x7083, 0x0011, 0xf274, 0x11e7, 0xf495, 0xf640, 0xf540, 0xf7b8, 0x71e2, 0x0003, 0x0011, 0x10f8, 0x0011, 0xf468, 0xf478, 0xf010, 0x0065, 0xf846, 0x084d, 0x7713, 0x0065, 0x10f8, 0x0011, 0x08f8, 0x0013, 0xf845, 0x0871, 0x7713, 0x0045, 0x10f8, 0x0011, 0x08f8, 0x0013, 0xf845, 0x0871, 0x7713, 0x0047, 0x10f8, 0x0011, 0x08f8, 0x0013, 0xf845, 0x085d, 0xf073, 0x0879, 0x7713, 0x0066, 0x10f8, 0x0011, 0x08f8, 0x0013, 0xf845, 0x0867, 0x7713, 0x0067, 0x10f8, 0x0011, 0x08f8, 0x0013, 0xf844, 0x0879, 0x7000, 0x0012, 0x7001, 0x0015, 0xf274, 0x09e2, 0xf495, 0xf640, 0xf073, 0x0879, 0x7000, 0x0012, 0x7001, 0x0015, 0xf274, 0x087c, 0xf495, 0xf640, 0xf073, 0x0879, 0x7000, 0x0012, 0x7001, 0x0015, 0xf274, 0x08e4, 0xf495, 0xf640, 0xee02, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x4a17, 0x6bf8, 0x0018, 0xfe68, 0xf495, 0xf7b8, 0xe787, 0x11e7, 0x019c, 0x8912, 0x81e7, 0x0196, 0x11e2, 0x0002, 0x71e7, 0x019d, 0x0011, 0xf84a, 0x0895, 0x76e2, 0x0002, 0x0006, 0xe906, 0x8100, 0x4918, 0xf300, 0x0004, 0x8101, 0x4918, 0xf300, 0x0005, 0x8102, 0xf074, 0x11f5, 0xe783, 0x8814, 0x6deb, 0x0006, 0x1084, 0x8083, 0x10f8, 0x0008, 0xf845, 0x08b1, 0x71ec, 0x0001, 0x0012, 0x6e82, 0x08aa, 0x709b, 0x0012, 0x1004, 0x7181, 0x0016, 0x8000, 0x7601, 0x0001, 0x71e7, 0x0196, 0x0012, 0x10e2, 0x0002, 0x8002, 0x4818, 0x7003, 0x0011, 0xf274, 0x0a93, 0xf000, 0x0006, 0x7181, 0x0010, 0xf7ae, 0xe801, 0xf830, 0x08d1, 0x71e7, 0x0196, 0x0012, 0x960c, 0xf830, 0x08d1, 0xe800, 0x1104, 0x8100, 0x8001, 0x4818, 0x7002, 0x0011, 0xf274, 0x0bc0, 0xf000, 0x0006, 0x6bf8, 0x0018, 0x0198, 0xf495, 0xf495, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0xf7b8, 0x4a17, 0xee96, 0xf540, 0x716e, 0x0011, 0x71e1, 0x0002, 0x0012, 0x10f8, 0x0012, 0xfa42, 0x08fa, 0x716f, 0x0017, 0x7712, 0x0006, 0x76e1, 0x0002, 0x0006, 0x56f8, 0x2a8a, 0x7716, 0x0000, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf842, 0x0952, 0x56f8, 0x2a8c, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf847, 0x092e, 0x56f8, 0x2a88, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf845, 0x0968, 0x56f8, 0x2a8e, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf843, 0x0930, 0xf073, 0x0944, 0x57f8, 0x2a8c, 0x56f8, 0x2a90, 0x4e00, 0xf274, 0x1174, 0x6d8e, 0xf640, 0xf540, 0x56f8, 0x2a8e, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf843, 0x0930, 0x56f8, 0x2a90, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf842, 0x0954, 0xf073, 0x0968, 0x57f8, 0x2a8a, 0x56f8, 0x2a90, 0x4e00, 0xf274, 0x1028, 0x6d96, 0xf640, 0xf540, 0x56f8, 0x2a90, 0x4e00, 0xf274, 0x1008, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf842, 0x0954, 0x4818, 0x7000, 0x0012, 0xf000, 0x0004, 0x8001, 0x4818, 0xf000, 0x0005, 0x8002, 0xf274, 0x11f5, 0xf495, 0xf640, 0xe783, 0x8814, 0x6deb, 0x0006, 0x1084, 0x8083, 0x10f8, 0x0008, 0xf845, 0x0987, 0x71ec, 0x0001, 0x0012, 0x6e82, 0x0980, 0x709b, 0x0012, 0x6004, 0x0002, 0xf820, 0x09a2, 0xe782, 0xf6b8, 0x6b04, 0xffff, 0x6dea, 0x0005, 0xf120, 0xffff, 0x10ea, 0x0001, 0xfa44, 0x0993, 0xf300, 0x0001, 0x4818, 0xf000, 0x0005, 0xf600, 0x8812, 0xf495, 0x6d96, 0x7682, 0x0000, 0x10e1, 0x0003, 0x8000, 0x7001, 0x0017, 0xf274, 0x0b6c, 0xf495, 0x4816, 0x1004, 0x8000, 0x7601, 0x0001, 0x10e1, 0x0002, 0x8002, 0x4818, 0x7003, 0x0017, 0xf274, 0x0a93, 0xf000, 0x0006, 0xe782, 0xf6b8, 0x6dea, 0x0005, 0xf120, 0xffff, 0x10ea, 0x0001, 0xfa44, 0x09bf, 0xf300, 0x0001, 0x1004, 0x08f8, 0x000b, 0xfa44, 0x09d2, 0x7713, 0x0001, 0xe712, 0x960c, 0xf830, 0x09d2, 0x7713, 0x0000, 0x1004, 0x8000, 0x7001, 0x0013, 0x4818, 0x7002, 0x0017, 0xf274, 0x0bc0, 0xf000, 0x0006, 0xee6a, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x4a17, 0xee96, 0x7711, 0x0000, 0x716e, 0x0016, 0x71e6, 0x0002, 0x0012, 0x11f8, 0x0012, 0xfa4d, 0x09ff, 0x716f, 0x0017, 0xf7b8, 0x11f8, 0x0012, 0xf84a, 0x0a04, 0x76e6, 0x0002, 0x0006, 0xf273, 0x0a04, 0x7712, 0x0006, 0x7712, 0x0001, 0x76e6, 0x0002, 0x0001, 0x4918, 0x7000, 0x0012, 0xf300, 0x0005, 0x8101, 0x4918, 0xf300, 0x0004, 0x8102, 0xf074, 0x0ef3, 0xe783, 0x8814, 0x6deb, 0x0006, 0x1084, 0x8083, 0x10f8, 0x0008, 0xf845, 0x0a21, 0x71ec, 0x0001, 0x0012, 0x6e82, 0x0a1a, 0x709b, 0x0012, 0xf7b8, 0xf495, 0x1005, 0xf468, 0xf478, 0xf010, 0xfffd, 0xf843, 0x0a47, 0x11e6, 0x0002, 0x10f8, 0x000b, 0xf468, 0xf478, 0x0805, 0xf842, 0x0a60, 0x1005, 0xf468, 0xf478, 0xf010, 0x0002, 0xf843, 0x0a47, 0x1005, 0xf010, 0x0001, 0x8005, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x0002, 0x6d91, 0xf842, 0x0a3a, 0x1005, 0xf846, 0x0a53, 0x1005, 0xf000, 0x0001, 0x8005, 0x10f8, 0x0008, 0x6d89, 0xf847, 0x0a4a, 0x10e6, 0x0003, 0xf000, 0xfffe, 0x8000, 0x7001, 0x0017, 0xf274, 0x0b6c, 0xf495, 0x4811, 0x11e6, 0x0002, 0x1005, 0x7187, 0x0011, 0x8000, 0x1286, 0xf47d, 0xf030, 0x0001, 0x8001, 0x8102, 0x4818, 0x7003, 0x0017, 0xf274, 0x0a93, 0xf000, 0x0006, 0x1005, 0x8000, 0x7187, 0x0010, 0xf4a9, 0x7712, 0x0000, 0xe900, 0xf830, 0x0a7c, 0xe901, 0xe808, 0x1886, 0xf2a0, 0x10f8, 0x0008, 0xf845, 0x0a85, 0x7712, 0x0001, 0x7001, 0x0012, 0x4818, 0x7002, 0x0017, 0xf274, 0x0bc0, 0xf000, 0x0006, 0xee6a, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0xeeff, 0xf495, 0x1103, 0x8100, 0xf110, 0x0001, 0x8913, 0xf495, 0x7711, 0xffff, 0x7104, 0x0015, 0x7105, 0x0014, 0x7106, 0x0010, 0xe732, 0x11ea, 0x0001, 0xfa4c, 0x0aa5, 0xf495, 0x6d91, 0x4911, 0xf500, 0xf7b8, 0xf210, 0x0001, 0x8812, 0x4814, 0x10f8, 0x0008, 0xf847, 0x0ada, 0x4814, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x0ad9, 0xf6b8, 0xe731, 0xf120, 0xffff, 0x10e9, 0x0001, 0xfa44, 0x0ac1, 0xf300, 0x0001, 0xf7b8, 0xf495, 0x1000, 0xf468, 0xf478, 0x08f8, 0x000b, 0xf847, 0x0ada, 0x10f8, 0x0015, 0xf845, 0x0ada, 0x7180, 0x0011, 0x7681, 0x0030, 0x6b80, 0xffff, 0xf6b8, 0xe731, 0xf120, 0xffff, 0x10e9, 0x0001, 0xfa44, 0x0ade, 0xf300, 0x0001, 0xf7b8, 0xf495, 0x1000, 0xf468, 0xf478, 0x08f8, 0x000b, 0xf842, 0x0b22, 0x1000, 0xf843, 0x0b22, 0xf6b8, 0xe731, 0xf020, 0xffff, 0x11e9, 0x0001, 0xfa4c, 0x0af4, 0xf000, 0x0001, 0x6e85, 0x0b12, 0xf495, 0x0800, 0xf7b8, 0x10f8, 0x0008, 0xf847, 0x0b12, 0x6082, 0x0030, 0xf820, 0x0b12, 0xf010, 0x0001, 0x10f8, 0x0008, 0x6d8a, 0xf847, 0x0b22, 0x6082, 0x0030, 0xf830, 0x0b07, 0xf7b8, 0x10f8, 0x0008, 0xf847, 0x0b22, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x0b21, 0x7180, 0x0015, 0xe543, 0x6b80, 0xffff, 0x1000, 0xf842, 0x0b67, 0x1000, 0xf484, 0x8811, 0x10f8, 0x0008, 0xf468, 0xf478, 0x08f8, 0x0014, 0xf842, 0x0b4a, 0xf6b8, 0xf495, 0xf020, 0xffff, 0x11eb, 0x0001, 0xfa4c, 0x0b34, 0xf000, 0x0001, 0xf7b8, 0x10f8, 0x0008, 0xf847, 0x0b4a, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x0b49, 0x7180, 0x0013, 0xe541, 0x6b80, 0xffff, 0x4811, 0x10f8, 0x0008, 0xf468, 0xf478, 0x08f8, 0x0014, 0xf847, 0x0b57, 0x4814, 0xe741, 0xf484, 0x8000, 0x1000, 0xf842, 0x0b67, 0x4811, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x0b66, 0x7180, 0x0011, 0x7681, 0x0030, 0x6b80, 0xffff, 0xee01, 0x8a11, 0xfe00, 0xf495, 0x1080, 0x4a11, 0xf7b8, 0x4a16, 0x4a17, 0x8816, 0xeefc, 0x10f8, 0x0008, 0x7108, 0x0017, 0xfa47, 0x0b7e, 0x7109, 0x0011, 0xf273, 0x0b80, 0xf495, 0x4816, 0x4816, 0xf484, 0x7600, 0x000a, 0x7601, 0x0064, 0x7002, 0x0011, 0xf274, 0x0e01, 0x10f8, 0x0008, 0xf7b8, 0x4816, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x000a, 0xf842, 0x0bac, 0x4816, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0xfff6, 0xf847, 0x0ba3, 0x7181, 0x0012, 0x7682, 0x0030, 0x6b81, 0xffff, 0x4816, 0x10f8, 0x0008, 0xf842, 0x0bac, 0xf273, 0x0bad, 0xf495, 0xe82d, 0xe82b, 0x7181, 0x0012, 0x8082, 0x1081, 0xee04, 0xf010, 0x0001, 0x8812, 0x8081, 0x7082, 0x0017, 0x1081, 0xf010, 0x0001, 0x8081, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0xf7b8, 0x4a16, 0x7714, 0x0000, 0x7103, 0x0013, 0x11f8, 0x0013, 0x3004, 0xfa4f, 0x0be7, 0x7105, 0x0016, 0xf110, 0x0001, 0x8912, 0xf495, 0x7711, 0xffff, 0x11ea, 0x0001, 0xfa4c, 0x0bd4, 0xf495, 0x6d91, 0x11f8, 0x0013, 0xf768, 0xf778, 0x09f8, 0x0011, 0xf84e, 0x0be7, 0x4913, 0xf500, 0xf310, 0x0001, 0x8914, 0xf110, 0x0001, 0x8915, 0x11f8, 0x000e, 0xf84d, 0x0bf4, 0x7186, 0x0011, 0x7681, 0x002e, 0x6b86, 0xffff, 0x7712, 0xffff, 0xe751, 0x11e9, 0x0001, 0xfa4c, 0x0bf7, 0xf495, 0x6d92, 0x11f8, 0x0013, 0xf768, 0xf778, 0x09f8, 0x0012, 0xf84f, 0x0c1d, 0x7186, 0x0011, 0x7681, 0x0030, 0xe752, 0x7711, 0xffff, 0x6b86, 0xffff, 0x11ea, 0x0001, 0xfa4c, 0x0c0e, 0xf495, 0x6d91, 0x11f8, 0x0011, 0x6d8b, 0xf768, 0xf778, 0x09f8, 0x0013, 0xf84b, 0x0c05, 0x11f8, 0x0013, 0xf84f, 0x0c31, 0x8810, 0xf495, 0xf495, 0xf5ac, 0xf830, 0x0c37, 0x7186, 0x0012, 0xe560, 0xf5ac, 0xfa20, 0x0c27, 0x6b86, 0xffff, 0xf073, 0x0c37, 0x7186, 0x0011, 0x7681, 0x0030, 0x6b86, 0xffff, 0x1086, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x8812, 0x4a17, 0xeefa, 0xf7b8, 0x8004, 0x10e2, 0x0002, 0x110c, 0x710a, 0x0017, 0xfa43, 0x0c4f, 0x710b, 0x0011, 0xf273, 0x0c52, 0x6882, 0xffef, 0x76e2, 0x0002, 0x0001, 0x71e2, 0x0003, 0x0012, 0x7713, 0x0058, 0x10f8, 0x0012, 0x08f8, 0x0013, 0xf845, 0x0c79, 0x7713, 0x006f, 0x10f8, 0x0012, 0x08f8, 0x0013, 0xf845, 0x0c7d, 0x7713, 0x0070, 0x10f8, 0x0012, 0x08f8, 0x0013, 0xf845, 0x0c79, 0x7713, 0x0078, 0x10f8, 0x0012, 0x08f8, 0x0013, 0xf845, 0x0c79, 0xf273, 0x0c7f, 0x7716, 0x000a, 0xf273, 0x0c7f, 0x7716, 0x0010, 0x7716, 0x0008, 0x8100, 0x1004, 0xf074, 0x0d09, 0x7104, 0x0012, 0x11e2, 0x0002, 0xf84c, 0x0c91, 0xf540, 0xf3e0, 0xf84c, 0x0c91, 0xf273, 0x0d04, 0xf495, 0xe801, 0x71e2, 0x0003, 0x0012, 0x7713, 0x0064, 0x11f8, 0x0012, 0x09f8, 0x0013, 0xf84d, 0x0c9f, 0x6ce2, 0xff97, 0x0cad, 0xf540, 0xf7b8, 0xf768, 0xf778, 0xf84a, 0x0cad, 0x7687, 0x0001, 0x7104, 0x0012, 0xf484, 0x71e2, 0x0003, 0x0012, 0x7000, 0x0016, 0x7001, 0x0012, 0x7002, 0x0011, 0xf074, 0x0e01, 0xf7b8, 0xf000, 0x0001, 0x11f8, 0x0008, 0xf768, 0x7104, 0x0012, 0xf778, 0x09e2, 0x0002, 0xf84e, 0x0cd4, 0x7181, 0x0012, 0xf000, 0x0001, 0x7682, 0x0030, 0x11f8, 0x0008, 0x6b81, 0xffff, 0xf768, 0x7104, 0x0012, 0xf778, 0x09e2, 0x0002, 0xf84f, 0x0cc2, 0x71e2, 0x0003, 0x0013, 0xe978, 0x10f8, 0x0013, 0x08f8, 0x000b, 0xf845, 0x0ce1, 0x6ce3, 0xffa8, 0x0cf7, 0x960c, 0xf820, 0x0cf7, 0x7181, 0x0012, 0x7082, 0x0013, 0x1081, 0xf010, 0x0001, 0x8812, 0xf495, 0x8081, 0x7682, 0x0030, 0x6b81, 0xffff, 0x7104, 0x0012, 0x71e2, 0x0003, 0x0013, 0x6ce3, 0xff91, 0x0d03, 0x960c, 0xf820, 0x0d03, 0x7181, 0x0012, 0x7682, 0x0030, 0x6b81, 0xffff, 0xe800, 0xee06, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x8813, 0x4a11, 0xe970, 0x71e3, 0x0003, 0x0011, 0x10f8, 0x0011, 0x08f8, 0x000b, 0xfa45, 0x0df8, 0x7102, 0x0012, 0x1183, 0xf330, 0x0160, 0x8913, 0xf495, 0x7710, 0x0020, 0xf4ab, 0xe800, 0xf830, 0x0db3, 0x7710, 0x0040, 0xf4ab, 0xf830, 0x0d64, 0xf7b8, 0x11f8, 0x0011, 0xf768, 0xf778, 0xf310, 0x006f, 0xf84e, 0x0d52, 0x7713, 0x006f, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0x7713, 0x0058, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0x7713, 0x0064, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df0, 0x7713, 0x0069, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df0, 0xf073, 0x0dff, 0x7713, 0x0075, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0x7713, 0x0078, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0xf073, 0x0dff, 0xf7b8, 0x11f8, 0x0011, 0xf768, 0xf778, 0xf310, 0x006f, 0xf84e, 0x0d8f, 0x7713, 0x006f, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0da1, 0x7713, 0x0058, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0da1, 0x7713, 0x0064, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0da1, 0x7713, 0x0069, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0da1, 0xf073, 0x0dff, 0x7713, 0x0075, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0da1, 0x7713, 0x0078, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0da1, 0xf073, 0x0dff, 0x1182, 0xf693, 0xf030, 0x0001, 0xf600, 0xf000, 0x0001, 0x8811, 0xf495, 0x4911, 0x7082, 0x0011, 0xf300, 0x0001, 0xf273, 0x0dff, 0x5681, 0x8182, 0xf7b8, 0x11f8, 0x0011, 0xf768, 0xf778, 0xf310, 0x006f, 0xf84e, 0x0dde, 0x7713, 0x006f, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0x7713, 0x0058, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0x7713, 0x0064, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df0, 0x7713, 0x0069, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df0, 0xf073, 0x0dff, 0x7713, 0x0075, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0x7713, 0x0078, 0x11f8, 0x0011, 0x09f8, 0x0013, 0xf84d, 0x0df8, 0xf073, 0x0dff, 0x1082, 0xf000, 0x0001, 0x8811, 0xf273, 0x0dff, 0x8082, 0x1081, 0x1082, 0xf000, 0x0001, 0x8811, 0xf495, 0x8082, 0x1281, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x4a17, 0xeefa, 0xf495, 0x4e02, 0xf0e0, 0x710a, 0x0016, 0x710b, 0x0017, 0xfa44, 0x0e18, 0x710c, 0x0011, 0x7181, 0x0012, 0x7682, 0x0030, 0xf273, 0x0e3b, 0x6b81, 0xffff, 0xf7b8, 0x7000, 0x0016, 0x5602, 0xf074, 0x0e4f, 0x4e04, 0x4e00, 0xf7b8, 0xf274, 0x13a8, 0x10f8, 0x0016, 0xf7b8, 0x6ee7, 0xffa8, 0x0e2d, 0x5702, 0xf520, 0xf300, 0x0010, 0x8912, 0xf495, 0x7181, 0x0013, 0xf6b8, 0x6dea, 0x2a67, 0xe501, 0x6b81, 0xffff, 0x5604, 0x4e02, 0xf844, 0x0e18, 0x1081, 0xf6b8, 0xf010, 0x0001, 0x8811, 0xf020, 0xffff, 0x11e9, 0x0001, 0xfa4c, 0x0e42, 0xf000, 0x0001, 0xee06, 0x8a17, 0x8a16, 0x8a11, 0xfe00, 0xf010, 0x0001, 0x4a11, 0xeefe, 0x7712, 0x0008, 0x7104, 0x0011, 0x11f8, 0x0011, 0x09f8, 0x0012, 0xf84d, 0x0e65, 0x7712, 0x0010, 0x11f8, 0x0011, 0x09f8, 0x0012, 0xf84d, 0x0e69, 0xf073, 0x0e6d, 0xf273, 0x0e82, 0xf495, 0xf0fd, 0xf273, 0x0e82, 0xf495, 0xf0fc, 0xf540, 0xf6b8, 0xf3e0, 0xf310, 0xffff, 0xf84a, 0x0e7c, 0x7000, 0x0011, 0xf074, 0x16b5, 0xf273, 0x0e82, 0xf495, 0x4808, 0xf7b8, 0x11f8, 0x0011, 0x4f00, 0xf074, 0x1353, 0xee02, 0x8a11, 0xfc00, 0x4a11, 0x7711, 0xffff, 0xeefe, 0x6ce1, 0x0001, 0x0e90, 0xf273, 0x0e96, 0xe800, 0xe900, 0xf120, 0xffff, 0x10f8, 0xffff, 0xf300, 0x0001, 0x8100, 0xf074, 0x00c2, 0xee02, 0x8a11, 0xfc00, 0x8813, 0x4a11, 0xf020, 0x2aa2, 0xeefe, 0x1183, 0x8000, 0xf600, 0x8812, 0xf495, 0xf495, 0x6d92, 0x960c, 0xf820, 0x0eb6, 0x11eb, 0x0001, 0x1000, 0xf600, 0x8812, 0xf495, 0xf495, 0x6d92, 0x960c, 0xf830, 0x0eab, 0x8911, 0xf495, 0x7712, 0x002d, 0x11f8, 0x0011, 0x09f8, 0x0012, 0xe800, 0xf84d, 0x0ec8, 0x6ee1, 0xffd5, 0x0ecd, 0x7714, 0x0000, 0xf073, 0x0eca, 0x7714, 0x0001, 0x71eb, 0x0001, 0x0011, 0x4911, 0x0100, 0x8912, 0xf495, 0xf495, 0x6d92, 0x960d, 0xf820, 0x0eeb, 0x4911, 0x880e, 0x71eb, 0x0001, 0x0011, 0xf066, 0x000a, 0xf600, 0x7001, 0x0011, 0x1100, 0x0101, 0x8912, 0xf495, 0xf495, 0x6d92, 0x960d, 0xfa30, 0x0ed6, 0xf010, 0x0030, 0x11f8, 0x0014, 0xf84d, 0x0ef0, 0xf484, 0xee02, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x4a17, 0xeef8, 0xf7b8, 0x4e02, 0x710e, 0x0011, 0x710d, 0x0017, 0x710c, 0x0016, 0x56f8, 0x2a92, 0x76f8, 0x2993, 0x0030, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xe900, 0xf842, 0x0f0f, 0xe901, 0x56f8, 0x2a92, 0x8181, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xf842, 0x0f1f, 0x5602, 0xf074, 0x11e7, 0x4e02, 0x56f8, 0x2a94, 0xf7b8, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xfa47, 0x0f3f, 0x7711, 0x0000, 0x56f8, 0x2a96, 0x4e00, 0x5602, 0xf074, 0x1028, 0x57f8, 0x2a94, 0x4e02, 0x4f00, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0x6d91, 0xf846, 0x0f2d, 0xf020, 0x2993, 0x8004, 0x56f8, 0x2a92, 0x4e00, 0x5602, 0xf274, 0x1008, 0xf495, 0x6d96, 0xf7b8, 0x10f8, 0x0008, 0xf845, 0x0f79, 0x56f8, 0x2a98, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xf842, 0x0f79, 0x56f8, 0x2a96, 0x4e00, 0x5602, 0xf074, 0x1174, 0x4e02, 0xf7b8, 0x56f8, 0x2a92, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0x6d89, 0xf845, 0x0f79, 0x56f8, 0x2a98, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xf843, 0x0f5a, 0x1004, 0xf000, 0x0001, 0x8005, 0x5602, 0xf074, 0x10ff, 0x1105, 0x8100, 0xf074, 0x13bc, 0xf540, 0x8006, 0x1004, 0xf500, 0xf300, 0x0001, 0x8912, 0x4811, 0x1106, 0xf500, 0xf7b8, 0x8187, 0x1106, 0xf768, 0xf778, 0x09f8, 0x0016, 0xf84a, 0x0fc3, 0x4916, 0x0906, 0x8916, 0xf495, 0x4816, 0x10f8, 0x0008, 0xf847, 0x0fca, 0x4816, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x0fc0, 0xf7b8, 0xf495, 0x5602, 0xf074, 0x10ff, 0xf074, 0x114a, 0xf7b8, 0x4e00, 0x5602, 0xf074, 0x11ec, 0x4e02, 0x56f8, 0x2a96, 0xf7b8, 0x4e00, 0x5602, 0xf074, 0x1174, 0x4e02, 0xf074, 0x10c3, 0xf000, 0x0030, 0x8092, 0xf073, 0x0fca, 0x1104, 0x4816, 0xf600, 0xf000, 0x0001, 0x8812, 0xf495, 0xf7b8, 0x10ea, 0xffff, 0xf468, 0xf478, 0xf010, 0x0035, 0xf843, 0x1000, 0x4812, 0xf010, 0x0001, 0x8811, 0xf495, 0xf495, 0x1081, 0xf000, 0x0001, 0x8081, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x003a, 0xf843, 0x0ff3, 0x7689, 0x0030, 0x1081, 0xf000, 0x0001, 0x8081, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x003a, 0xf842, 0x0fe5, 0x7104, 0x0010, 0xf7a9, 0xf830, 0x1000, 0x76ea, 0xffff, 0x0000, 0x4810, 0xf273, 0x1003, 0x6b87, 0x0001, 0x7682, 0x0000, 0x1005, 0xee08, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0xf7b8, 0xf468, 0xf478, 0x5704, 0xf842, 0x1015, 0xff4b, 0xf484, 0xf784, 0xf586, 0xf808, 0x1020, 0xf587, 0xf808, 0x1024, 0xf420, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf273, 0x101c, 0xe801, 0xf495, 0xf273, 0x101c, 0xf020, 0xffff, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0xf6b7, 0xeef3, 0xf7b8, 0xf468, 0xf478, 0xf845, 0x1095, 0x6f05, 0x0c79, 0x800b, 0xf063, 0x007f, 0xf060, 0x0080, 0x820a, 0x5612, 0xf845, 0x10b3, 0x6f06, 0x0c79, 0x8009, 0xf063, 0x007f, 0xf060, 0x0080, 0x8208, 0x1005, 0x1c06, 0xf030, 0x0100, 0x8004, 0x1005, 0xf030, 0x00ff, 0x1106, 0xf330, 0x00ff, 0xf000, 0x007f, 0xf620, 0x8001, 0xf843, 0x10ab, 0xf010, 0x00ff, 0xf846, 0x109b, 0x560a, 0xf0e6, 0x5708, 0xf3e7, 0x4f08, 0xec0e, 0x1e08, 0x8002, 0x0a02, 0xec0a, 0x1e08, 0x6f03, 0x0c85, 0x3002, 0x2409, 0xf0ff, 0xec0b, 0x1e08, 0xf0e4, 0xf030, 0xffff, 0xf0e1, 0xf484, 0x0203, 0x3c02, 0x1101, 0xf48e, 0xf495, 0xf48f, 0x8c01, 0x0901, 0xf0ff, 0xf300, 0x0001, 0xf000, 0x0020, 0xf48e, 0xf495, 0xf48f, 0x8c01, 0x0901, 0x8101, 0xf84f, 0x10ab, 0xf310, 0x00ff, 0xf84a, 0x109b, 0xf0f9, 0x8003, 0xf038, 0x7f00, 0x8202, 0x4404, 0x3c01, 0xf0e7, 0x5002, 0xee0d, 0x8a0e, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0x7600, 0x0002, 0xf074, 0x10c2, 0xf483, 0xf061, 0x0081, 0x4504, 0xf84c, 0x1095, 0xf162, 0x8000, 0xf273, 0x1095, 0xf2c0, 0xf495, 0x7600, 0x0001, 0xf074, 0x10c2, 0xf273, 0x1095, 0xf420, 0xf495, 0x7600, 0x0003, 0xf074, 0x10c2, 0x4505, 0xf363, 0x0100, 0xf061, 0x0081, 0xf065, 0x8000, 0xf273, 0x1095, 0xf2a7, 0xf495, 0xfc00, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0xf6b8, 0xeefd, 0xf845, 0x10e5, 0x6f01, 0x0c79, 0xf0e9, 0xf0f7, 0xf060, 0x0080, 0x6f02, 0x0c67, 0x1101, 0xf330, 0x00ff, 0xf310, 0x007f, 0xf84b, 0x10eb, 0xf310, 0x000e, 0xf84e, 0x10ef, 0x890e, 0x6101, 0x0100, 0x1402, 0xfd30, 0xf484, 0xee03, 0x8a0e, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf273, 0x10e5, 0xf420, 0xf495, 0x7600, 0x0002, 0xf074, 0x10c2, 0x6101, 0x0100, 0xf020, 0x7fff, 0xf820, 0x10e5, 0xf000, 0x0001, 0xf273, 0x10e5, 0xf484, 0xf495, 0xf845, 0x1132, 0x4a0e, 0x4a0d, 0x4a0b, 0x4a0c, 0xf6b8, 0xeefd, 0x6f01, 0x0c79, 0xf0e9, 0xf0f7, 0xf060, 0x0080, 0xf447, 0x1101, 0xf330, 0x00ff, 0xf310, 0x007f, 0xf84b, 0x1133, 0xf310, 0x001e, 0xf84e, 0x1137, 0xf84d, 0x1128, 0xf300, 0x0010, 0xf84a, 0x1123, 0xf273, 0x1125, 0xf0f0, 0xf495, 0xf310, 0x0010, 0x890e, 0xf495, 0xf48f, 0x6101, 0x0100, 0xf495, 0xfd30, 0xf484, 0xee03, 0x8a0c, 0x8a0b, 0x8a0d, 0x8a0e, 0xfc00, 0xf273, 0x112d, 0xf420, 0xf495, 0x7600, 0x0002, 0xf074, 0x10c2, 0x6101, 0x0100, 0xf062, 0x7fff, 0xf040, 0xffff, 0xf483, 0xf820, 0x112d, 0xf000, 0x0001, 0xf273, 0x112d, 0xf484, 0xf495, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0xf7b8, 0xeefd, 0xf468, 0xf478, 0xf845, 0x116a, 0x8201, 0xf4ba, 0xf485, 0xf870, 0x1170, 0xf48e, 0xe99d, 0x8c00, 0x0900, 0xf48f, 0xf0e2, 0xf0fe, 0xf459, 0x6101, 0x8000, 0xf3ef, 0xf2a8, 0xf820, 0x116a, 0xf064, 0x8000, 0xee03, 0x8a0e, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf273, 0x116a, 0xf062, 0xcf00, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0xf6b7, 0xeef3, 0xf7b8, 0xf468, 0xf478, 0xf845, 0x11cd, 0x6f05, 0x0c79, 0x800b, 0xf063, 0x007f, 0xf060, 0x0080, 0x820a, 0x5612, 0xf845, 0x11cd, 0x6f06, 0x0c79, 0x8009, 0xf063, 0x007f, 0xf060, 0x0080, 0x8208, 0x1005, 0x1c06, 0xf030, 0x0100, 0x8004, 0x1005, 0xf030, 0x00ff, 0x1106, 0xf330, 0x00ff, 0xf310, 0x007f, 0xf600, 0x8001, 0xf843, 0x11df, 0xf010, 0x00ff, 0xf846, 0x11d3, 0x300b, 0x2409, 0x2508, 0xf510, 0x300a, 0x2409, 0xf600, 0x2508, 0x8102, 0x3c02, 0xf000, 0x0040, 0xf468, 0xf478, 0xf6b8, 0x1101, 0xf842, 0x11be, 0xf0ff, 0xf300, 0x0001, 0x8101, 0xf84f, 0x11df, 0xf310, 0x00ff, 0xf84a, 0x11d3, 0xf0f9, 0x8003, 0xf038, 0x7f00, 0x8202, 0x4404, 0x3c01, 0xf0e7, 0x5002, 0xee0d, 0x8a0e, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0x7600, 0x0002, 0xf074, 0x10c2, 0x4504, 0xf020, 0xffff, 0xf2a7, 0xf273, 0x11cd, 0xf060, 0x7f7f, 0x7600, 0x0001, 0xf074, 0x10c2, 0xf273, 0x11cd, 0xf420, 0xf495, 0xf495, 0xff44, 0xf065, 0x8000, 0xfc00, 0xf495, 0x6001, 0x0000, 0xf495, 0xff20, 0x6a01, 0x8000, 0xf073, 0x16c1, 0x4a11, 0x4a16, 0x4a17, 0xeefa, 0xf7b8, 0x4e02, 0x710c, 0x0011, 0x710b, 0x0017, 0x710a, 0x0016, 0x56f8, 0x2a9a, 0x76f8, 0x29f7, 0x0030, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xe900, 0xf842, 0x1211, 0xe901, 0x56f8, 0x2a9a, 0x8181, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xf842, 0x1221, 0x5602, 0xf074, 0x11e7, 0x4e02, 0x56f8, 0x2a9c, 0xf7b8, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xfa47, 0x1241, 0x7711, 0x0000, 0x56f8, 0x2a9e, 0x4e00, 0x5602, 0xf074, 0x1028, 0x57f8, 0x2a9c, 0x4e02, 0x4f00, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0x6d91, 0xf846, 0x122f, 0xf020, 0x29f7, 0x8004, 0x56f8, 0x2a9a, 0x4e00, 0x5602, 0xf274, 0x1008, 0xf495, 0x6d96, 0xf7b8, 0x10f8, 0x0008, 0xf845, 0x127b, 0x56f8, 0x2aa0, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xf842, 0x127b, 0x56f8, 0x2a9e, 0x4e00, 0x5602, 0xf074, 0x1174, 0x4e02, 0xf7b8, 0x56f8, 0x2a9a, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0x6d89, 0xf845, 0x127b, 0x56f8, 0x2aa0, 0x4e00, 0x5602, 0xf074, 0x1008, 0xf7b8, 0x10f8, 0x0008, 0xf843, 0x125c, 0x1004, 0xf000, 0x0001, 0x8005, 0x5602, 0xf074, 0x10ff, 0x1105, 0x8100, 0xf074, 0x13bc, 0x8812, 0x1104, 0xf600, 0xf100, 0x0001, 0x8913, 0x4911, 0x4812, 0xf600, 0x8087, 0x4816, 0xf600, 0xf7b8, 0x8816, 0x10f8, 0x0008, 0xf847, 0x12b9, 0x4816, 0xf010, 0x0001, 0x881a, 0xf495, 0xf072, 0x12b8, 0xf7b8, 0xf495, 0x5602, 0xf074, 0x10ff, 0xf074, 0x114a, 0xf7b8, 0x4e00, 0x5602, 0xf074, 0x11ec, 0x4e02, 0x56f8, 0x2a9e, 0xf7b8, 0x4e00, 0x5602, 0xf074, 0x1174, 0x4e02, 0xf074, 0x10c3, 0xf000, 0x0030, 0x8093, 0xf7b8, 0x10eb, 0xffff, 0xf468, 0xf478, 0xf010, 0x0035, 0xf843, 0x12e7, 0x4813, 0xf010, 0x0001, 0x8811, 0xf495, 0xf495, 0x1081, 0xf000, 0x0001, 0x8081, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x003a, 0xf843, 0x12e2, 0x7689, 0x0030, 0x1081, 0xf000, 0x0001, 0x8081, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x003a, 0xf842, 0x12d4, 0x7104, 0x0010, 0xf4a9, 0xf830, 0x12ed, 0x7683, 0x0000, 0xf273, 0x12fe, 0xf495, 0x1005, 0xf6ab, 0xf830, 0x12f9, 0x7711, 0x29f7, 0x76e1, 0x0001, 0x0000, 0xf273, 0x12fb, 0x7004, 0x0011, 0x7683, 0x0000, 0x6b87, 0x0001, 0x1004, 0xee06, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0xeefe, 0xf7b8, 0xf468, 0xf478, 0x4506, 0xf1c0, 0x8300, 0xf485, 0x5706, 0xf785, 0x4f06, 0xf520, 0xf84d, 0x1323, 0xf84e, 0x1327, 0xf074, 0x1388, 0x6100, 0x8000, 0xf820, 0x131e, 0xf484, 0xee02, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf273, 0x1319, 0xe801, 0xf495, 0xf273, 0x131e, 0xf420, 0xf495, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0xeefe, 0xf7b8, 0x8200, 0xf468, 0xf478, 0xf485, 0x5706, 0xf785, 0x4f06, 0xf520, 0xf84d, 0x134b, 0xf84e, 0x134f, 0xf074, 0x1388, 0x6100, 0x8000, 0xfa20, 0x1346, 0xf640, 0xf495, 0xf484, 0xee02, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf273, 0x1346, 0xf420, 0xf495, 0xf273, 0x133f, 0xf540, 0xf495, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0xeefe, 0xf6b8, 0xf0e0, 0x5706, 0xf520, 0xf84d, 0x1367, 0xf84e, 0x136b, 0xf074, 0x1388, 0xee02, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf273, 0x1362, 0xe801, 0xf495, 0xf273, 0x1362, 0xf420, 0xf495, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0xeefe, 0xf6b8, 0xf0e0, 0x5706, 0xf520, 0xf84d, 0x1384, 0xf84e, 0x137f, 0xf074, 0x1388, 0xf640, 0xee02, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf273, 0x137f, 0xf420, 0xf495, 0xf495, 0x4a11, 0xf6b8, 0xf273, 0x1390, 0x7711, 0x001f, 0x6d89, 0xf0e1, 0xf808, 0x138f, 0xe901, 0x5508, 0xf84b, 0x139b, 0xf273, 0x139c, 0xf040, 0x0001, 0x5308, 0x6c89, 0x13a0, 0x8a11, 0xfc00, 0xf3e1, 0xf0e1, 0xf808, 0x1394, 0xf273, 0x1394, 0xf340, 0x0001, 0xf495, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0xeefd, 0xf495, 0x4e00, 0x3109, 0x4408, 0x3501, 0x2409, 0xf76f, 0xf601, 0xee03, 0x8a0e, 0x8a0d, 0x8a0c, 0x8a0b, 0xfc00, 0xf540, 0x4a11, 0xf7b8, 0xf768, 0x7711, 0x0000, 0xeee8, 0xf778, 0xfa4a, 0x13ca, 0x711a, 0x0013, 0x7711, 0x0001, 0xe782, 0x6dea, 0x0015, 0xf540, 0x7682, 0x0000, 0xe80a, 0x4e00, 0xf274, 0x132b, 0xf495, 0xf640, 0xf7b8, 0x10f8, 0x0008, 0xf485, 0xf000, 0x0030, 0x80ea, 0xffff, 0xe80a, 0x4e00, 0xf274, 0x1303, 0xf495, 0xf640, 0xf7b8, 0xf540, 0xf468, 0xf478, 0xf844, 0x13d0, 0x10f8, 0x0011, 0xf845, 0x13f1, 0x76ea, 0xffff, 0x002d, 0x4818, 0x4912, 0xf000, 0x0002, 0xf620, 0x7000, 0x0012, 0xf000, 0x0014, 0x10f8, 0x0008, 0x4e16, 0x8001, 0xf274, 0x142a, 0xf495, 0x4813, 0xf7b8, 0xf495, 0x5616, 0xee18, 0x8a11, 0xfe00, 0xf010, 0x0001, 0xf7b8, 0x4a11, 0x8812, 0x1004, 0x1103, 0xfa47, 0x1427, 0x7102, 0x0011, 0xf010, 0x0001, 0x881a, 0x6d89, 0xf072, 0x1426, 0x10e9, 0x0001, 0x8092, 0x10f8, 0x0008, 0x08f8, 0x000b, 0xf844, 0x1426, 0xf273, 0x1428, 0xf495, 0x4812, 0xf495, 0xe800, 0x8a11, 0xfc00, 0x1302, 0x7101, 0x0012, 0x8813, 0xf84d, 0x1437, 0xf310, 0x0001, 0x891a, 0xf495, 0xf072, 0x1436, 0xe589, 0xfc00, 0x4a11, 0x7211, 0x2a5b, 0xf495, 0x8813, 0x6c81, 0x1443, 0xf273, 0x146e, 0x7313, 0x2a5b, 0xf495, 0x7712, 0x0000, 0x1183, 0xf7b8, 0x10f8, 0x000b, 0xf468, 0xf478, 0x0881, 0xf842, 0x1457, 0xe712, 0x71e2, 0x0001, 0x0011, 0x6c81, 0x1447, 0xf073, 0x146b, 0x4811, 0xf845, 0x146b, 0x6c82, 0x1463, 0x70e3, 0x0001, 0x2a5b, 0xf273, 0x1471, 0x7313, 0x2a5b, 0x70e3, 0x0001, 0x0011, 0x70e2, 0x0001, 0x0013, 0xf073, 0x1471, 0x70e2, 0x0001, 0x0013, 0x76e3, 0x0001, 0x0000, 0x8a11, 0xfc00, 0x4a11, 0x8813, 0x7211, 0x2a5b, 0x4811, 0xf845, 0x1496, 0xe730, 0xf4a9, 0xf830, 0x1491, 0xe712, 0x71e2, 0x0001, 0x0011, 0x4811, 0xf845, 0x1496, 0xf7a9, 0xf830, 0x147e, 0x4812, 0xf845, 0x1491, 0x10e3, 0x0001, 0xf273, 0x1499, 0x80e2, 0x0001, 0x71e3, 0x0001, 0x2a5b, 0xf073, 0x1499, 0x76f8, 0x2a5b, 0x0000, 0x8a11, 0xfc00, 0x4a11, 0x10f8, 0x2801, 0xf4e3, 0x7711, 0x2bb1, 0x61f8, 0x0011, 0x0001, 0xf830, 0x14b6, 0x4811, 0x7681, 0x0000, 0xf000, 0x0001, 0x80f8, 0x2a5b, 0xf020, 0x00fe, 0x80f8, 0x2a5c, 0xf484, 0xf273, 0x14bf, 0x80e1, 0x0001, 0xf020, 0x00ff, 0x80f8, 0x2a5c, 0x7311, 0x2a5b, 0xf484, 0x80f8, 0x2bb1, 0x7211, 0x2a5b, 0xf495, 0x76e1, 0x0001, 0x0000, 0x10f8, 0x2802, 0xf4e3, 0x8a11, 0xfc00, 0x4a11, 0x8811, 0x4a16, 0xeeff, 0x10f8, 0x2801, 0xf4e3, 0x10f8, 0x2a5d, 0xf845, 0x14da, 0xf074, 0x149b, 0x76f8, 0x2a5d, 0x0000, 0xf7b8, 0x4811, 0x10f8, 0x0008, 0xfa43, 0x14fc, 0x7216, 0x2a5b, 0x61f8, 0x0011, 0x0001, 0xf830, 0x14e8, 0x6d91, 0x4811, 0xf484, 0x8811, 0x4816, 0xf845, 0x14fc, 0x1186, 0x10f8, 0x000b, 0xf468, 0xf478, 0x08f8, 0x0011, 0xf847, 0x150b, 0x71e6, 0x0001, 0x0016, 0x6c86, 0x1502, 0x10f8, 0x2802, 0xf4e3, 0xe800, 0xf073, 0x1537, 0x1186, 0x10f8, 0x000b, 0xf468, 0xf478, 0x08f8, 0x0011, 0xf846, 0x14f7, 0x8100, 0xf274, 0x1473, 0xf495, 0x4816, 0xf7b8, 0x4811, 0x0800, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x0002, 0xf842, 0x151f, 0xf273, 0x152f, 0xf495, 0xf640, 0x4911, 0x4816, 0xf620, 0xf000, 0x0001, 0x8812, 0x1000, 0xf620, 0xf000, 0x0001, 0x8082, 0xf274, 0x1438, 0xf495, 0x4812, 0x4811, 0xf484, 0x8086, 0x10f8, 0x2802, 0xf4e3, 0x4816, 0xf000, 0x0001, 0xee01, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0xf495, 0x3002, 0x20f8, 0x0008, 0xf274, 0x14ca, 0x8811, 0xf495, 0x8812, 0xf495, 0xf495, 0x6c82, 0x154d, 0xf273, 0x155b, 0xf495, 0xe800, 0x4911, 0xf495, 0x490b, 0xf84d, 0x155b, 0x4911, 0xf310, 0x0001, 0x891a, 0xf495, 0xf072, 0x155a, 0x7692, 0x0000, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0xf7b8, 0x4a17, 0x8817, 0xf010, 0x0001, 0xeefa, 0x8816, 0x110a, 0x10f8, 0x000b, 0x76f8, 0x2a5c, 0x0100, 0x8911, 0xf843, 0x15d8, 0x6c87, 0x1577, 0xf274, 0x14ca, 0xf495, 0xf640, 0xf073, 0x1620, 0x6c81, 0x157f, 0xf274, 0x1625, 0xf495, 0x4817, 0xf073, 0x15d8, 0x1086, 0xfa47, 0x15d8, 0xf495, 0x8002, 0x61f8, 0x0011, 0x0001, 0xf830, 0x158a, 0x6d91, 0x10f8, 0x0011, 0x1102, 0xf468, 0xf478, 0x08f8, 0x000b, 0xf847, 0x1603, 0xf640, 0x4916, 0xf600, 0xf000, 0x0001, 0x8003, 0x8004, 0x10f8, 0x2801, 0xf4e3, 0x6bf8, 0x2a5c, 0xfffe, 0x7210, 0x2a5c, 0x7103, 0x0012, 0x6de8, 0x2bb1, 0xf5aa, 0xf820, 0x15b8, 0xf7b8, 0xf495, 0x1182, 0xf84a, 0x15b8, 0x1002, 0xf620, 0x4911, 0xf620, 0xf100, 0x0001, 0x11f8, 0x000b, 0xf84a, 0x15dc, 0xf274, 0x14ca, 0xf495, 0x4811, 0x8811, 0xf495, 0x4811, 0xf845, 0x15d5, 0x4816, 0xf000, 0x0001, 0x8000, 0x1002, 0x8001, 0xf274, 0x1760, 0xf495, 0x4811, 0xf274, 0x1625, 0xf495, 0x4817, 0x10f8, 0x2802, 0xf4e3, 0x4811, 0xf073, 0x1620, 0x10f8, 0x2802, 0xf4e3, 0xf273, 0x1620, 0xf495, 0xe800, 0xf274, 0x1473, 0xf495, 0x4812, 0xf7b8, 0x10f8, 0x000b, 0xf468, 0xf478, 0xf010, 0x0002, 0xf842, 0x15ee, 0x4811, 0xf273, 0x15fe, 0xf500, 0x8186, 0x7086, 0x0011, 0x4816, 0x7002, 0x0011, 0x0002, 0xf000, 0x0001, 0x8816, 0xe801, 0xf620, 0x8086, 0xf274, 0x1438, 0xf495, 0x4816, 0x10f8, 0x2802, 0xf4e3, 0xf073, 0x161f, 0xf640, 0x4911, 0xf620, 0x8812, 0x10f8, 0x0008, 0xf468, 0xf478, 0xf010, 0x0002, 0xf843, 0x161f, 0x4816, 0xf600, 0x7086, 0x0011, 0xf000, 0x0001, 0x8816, 0x4812, 0xf010, 0x0001, 0x8086, 0x4816, 0xf274, 0x1625, 0xf000, 0x0001, 0x4817, 0xee06, 0x8a17, 0x8a16, 0x8a11, 0xfc00, 0x4a11, 0x4a16, 0x8816, 0x4808, 0xeeff, 0xf845, 0x16b1, 0x10f8, 0x2801, 0xf4e3, 0xf020, 0x0100, 0x6d8e, 0x80f8, 0x2a5c, 0x8000, 0x4816, 0x8810, 0xf495, 0x7712, 0x2bb1, 0xe721, 0xf5a9, 0xf830, 0x1645, 0xf7a9, 0xf830, 0x16ae, 0xf273, 0x1659, 0x7714, 0x0000, 0xf7b8, 0xf495, 0x1081, 0xe714, 0xf842, 0x164c, 0xf484, 0x4911, 0xf600, 0xf000, 0x0001, 0x8811, 0xf495, 0xf495, 0xf5a9, 0xf830, 0x1645, 0xf7a9, 0xf830, 0x16ae, 0xf7b8, 0xf495, 0x1081, 0xf843, 0x16ae, 0xf484, 0x8081, 0x4811, 0x0881, 0xf000, 0x0001, 0x8815, 0x1000, 0xf010, 0x0001, 0x80f8, 0x2a5c, 0x4812, 0x0000, 0x8810, 0xf495, 0xf495, 0x6d88, 0xf6ad, 0xf820, 0x1675, 0x7715, 0x0000, 0x4814, 0xf845, 0x169c, 0x1084, 0xf842, 0x169c, 0x4815, 0xf845, 0x1692, 0x1085, 0xf842, 0x1692, 0xf274, 0x1473, 0xf495, 0x4814, 0xf274, 0x1473, 0xf495, 0x4815, 0x1085, 0x0084, 0x0081, 0xf010, 0x0002, 0xf273, 0x16ac, 0x8084, 0x4814, 0xf274, 0x1473, 0xf495, 0x4814, 0x1081, 0x0084, 0xf273, 0x168e, 0xf010, 0x0001, 0x4815, 0xf845, 0x16ab, 0x1085, 0xf842, 0x16ab, 0xf274, 0x1473, 0xf495, 0x4815, 0x1085, 0x0081, 0xf010, 0x0001, 0x8081, 0x4811, 0xf074, 0x1438, 0x10f8, 0x2802, 0xf4e3, 0xee01, 0x8a16, 0x8a11, 0xfc00, 0xf6b8, 0x4808, 0xec0f, 0x1e01, 0xfc00, 0xf6b8, 0x4808, 0xec0f, 0x1e01, 0xfe00, 0xf0f0, 0xf495, 0xf495, 0x4a0e, 0x4a0b, 0x4a0c, 0x4a0d, 0xf6b7, 0xeef3, 0xf7b8, 0xf468, 0xf478, 0xf845, 0x173a, 0xf540, 0xf6b8, 0xf0e1, 0x6f05, 0x0c78, 0xf0e8, 0xf0f7, 0xf060, 0x0080, 0xfd4b, 0xf484, 0xf7b8, 0x4e0a, 0x5612, 0xf845, 0x173e, 0xf540, 0xf0e1, 0x6f06, 0x0c78, 0xf6b8, 0xf0e8, 0xf0f7, 0xf060, 0x0080, 0xfd4b, 0xf484, 0xf7b8, 0x4e08, 0x1005, 0x1106, 0xf520, 0xf84b, 0x1719, 0xf84e, 0x172a, 0x560a, 0x5008, 0xf845, 0x175c, 0x1105, 0x8204, 0xf485, 0xf0e6, 0xf48e, 0xf495, 0xf48f, 0x8c01, 0xf300, 0x0001, 0x0901, 0x8101, 0xf84f, 0x1758, 0xf310, 0x00ff, 0xf84a, 0x174b, 0xf0f9, 0x8003, 0xf038, 0x7f00, 0x8202, 0x6f04, 0x0c49, 0xf063, 0x0100, 0x3c01, 0xf0e7, 0x5002, 0xee0d, 0x8a0d, 0x8a0c, 0x8a0b, 0x8a0e, 0xfc00, 0xf785, 0xf310, 0x0018, 0xf84a, 0x173e, 0xf300, 0x0017, 0x8104, 0x5608, 0x4704, 0xf47f, 0x1105, 0x500a, 0xf844, 0x16f6, 0xf073, 0x1713, 0xf310, 0x0018, 0xf84a, 0x173a, 0xf300, 0x0017, 0x8104, 0x560a, 0x4704, 0xf47f, 0x1106, 0x5008, 0xf844, 0x16f6, 0xf073, 0x1713, 0xf273, 0x1713, 0x5612, 0xf495, 0x560a, 0xf846, 0x1744, 0xf484, 0x6b05, 0x0100, 0xf061, 0x0080, 0x4505, 0xf273, 0x1713, 0xf3e7, 0xf600, 0x7600, 0x0002, 0xf074, 0x10c2, 0x4404, 0xf063, 0x1f40, 0xf040, 0xffff, 0xf273, 0x1713, 0xf060, 0x7f7f, 0x7600, 0x0001, 0xf074, 0x10c2, 0xf273, 0x1713, 0xf420, 0xf495, 0x4a11, 0x8811, 0xf495, 0xeefe, 0xe710, 0x7104, 0x0012, 0xf6aa, 0x1105, 0xf820, 0x1772, 0x7000, 0x0012, 0x8101, 0xf074, 0x142a, 0xf073, 0x1787, 0x00f8, 0x000b, 0x8813, 0x4812, 0x00f8, 0x000b, 0x490b, 0x8812, 0xf84d, 0x1786, 0xf310, 0x0001, 0x891a, 0xf495, 0xf072, 0x1785, 0x10ea, 0xffff, 0x80eb, 0xffff, 0x4811, 0xee02, 0x8a11, 0xfc00,
24};
25static const unsigned short _section_cinit[] = {
26 0x0001, 0x27de, 0x0000, 0x0001, 0x27ff, 0x0000, 0x0001, 0x2800, 0x0000, 0x0001, 0x2801, 0x030f, 0x0001, 0x2802, 0x030f, 0x0001, 0x2a5d, 0x0001, 0x0000,
27};
28static const unsigned short _section_const[] = {
29 0x0028, 0x006e, 0x0075, 0x006c, 0x006c, 0x0029, 0x0000, 0x0025, 0x0000, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0000, 0x0000, 0x0000, 0x7f7f, 0xffff, 0xff7f, 0xffff, 0x3f80, 0x0000, 0x4120, 0x0000, 0x0000, 0x0000, 0x4f00, 0x0000, 0x4120, 0x0000, 0x3f80, 0x0000, 0x0000, 0x0000, 0x4f00, 0x0000, 0x4120, 0x0000, 0x3f80, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0028, 0x0028, 0x0028, 0x0028, 0x0028, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0088, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0010, 0x0010, 0x0010, 0x0010, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0044, 0x0053, 0x0050, 0x0020, 0x0069, 0x006e, 0x0069, 0x0074, 0x0065, 0x0064, 0x002e, 0x002e, 0x002e, 0x0000,
30};
31static const unsigned short _section_vectors[] = {
32 0xf273, 0x01f7, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf273, 0x0085, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf273, 0x00e6, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495, 0xf273, 0x017e, 0xf495, 0xf495, 0xf4eb, 0xf495, 0xf495, 0xf495,
33};
34
35
36static const struct dsp_section dsp_image[] = {
37 {_section_text, 0x0080, 0x170a},
38 {_section_cinit, 0x2cb1, 0x0013},
39 {NULL /* .bss */, 0x278a, 0x02d4},
40 {_section_const, 0x2a5e, 0x0153},
41 {NULL /* .sysmem */, 0x2bb1, 0x0100},
42 {NULL /* .stack */, 0x178a, 0x1000},
43 {_section_vectors, 0x7f80, 0x0080},
44 {NULL /* .dma */, 0x8000, 0x4000},
45 {NULL, 0, 0}
46};
47
48/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */
49#define _acked 0x27db
50#define _debugf 0x009c
51#define _handle_int0 0x0085
52#define _status 0x278a
53#define _vsnprintf 0x0293
54#define _main 0x00c2
55#define _audiohw_postinit 0x01ec
56#define _dma_init 0x0192
57#define _audiohw_init 0x01c1
58#define _c_int00 0x01f7
59#define _handle_dma0 0x00e6
60#define _handle_dmac 0x017e
61#define _data 0x8000
62#define _sdem_addrh 0x27dc
63#define _sdem_addrl 0x27dd
64#define cinit 0x2cb1
65#define __args_main 0x0e85
66#define _exit 0x0241
67#define _atexit 0x026e
68#define __dtors_ptr 0x2800
69#define __cleanup_ptr 0x27ff
70#define _abort 0x0290
71#define __lock 0x2801
72#define __unlock 0x2802
73#define __printfi 0x0316
74#define _memcpy 0x142a
75#define __register_lock 0x0310
76#define __register_unlock 0x0313
77#define __nop 0x030f
78#define _malloc 0x14ca
79#define _memccpy 0x140a
80#define _ecvt 0x0ef3
81#define _fcvt 0x11f5
82#define _atoi 0x0e9c
83#define _free 0x1625
84#define __ctypes_ 0x2aa2
85#define _ltoa 0x13bc
86#define __sys_memory 0x2bb1
87#define _minit 0x149b
88#define _realloc 0x155d
89#define _calloc 0x153b
90#define _memmove 0x1760
91#define ___text__ 0x0080
92#define etext 0x178a
93#define ___etext__ 0x178a
94#define ___cinit__ 0x2cb1
95#define ___bss__ 0x278a
96#define end 0x2a5e
97#define ___end__ 0x2a5e
98#define ___data__ 0x0000
99#define edata 0x0000
100#define ___edata__ 0x0000
101
102#endif
diff --git a/firmware/target/arm/tms320dm320/dsp/ipc.h b/firmware/target/arm/tms320dm320/dsp/ipc.h
index fafbc23c2c..b307753c0f 100644
--- a/firmware/target/arm/tms320dm320/dsp/ipc.h
+++ b/firmware/target/arm/tms320dm320/dsp/ipc.h
@@ -34,7 +34,7 @@
34#define PACKED 34#define PACKED
35#endif 35#endif
36 36
37#define PCM_SIZE 32768 /* bytes */ 37#define PCM_SIZE 0x8000 /* bytes */
38 38
39struct sdram_buffer { 39struct sdram_buffer {
40 unsigned long addr; 40 unsigned long addr;
diff --git a/firmware/target/arm/tms320dm320/dsp/main.c b/firmware/target/arm/tms320dm320/dsp/main.c
index aaeea21513..57156e0451 100644
--- a/firmware/target/arm/tms320dm320/dsp/main.c
+++ b/firmware/target/arm/tms320dm320/dsp/main.c
@@ -41,9 +41,10 @@ void main(void) {
41 41
42 audiohw_postinit(); 42 audiohw_postinit();
43 43
44#if 0 44 debugf("DSP inited...");
45 for (i = 0; i < 32; i++) 45
46 { 46#ifdef DATA_32_SINE
47 for (i = 0; i < 32; i++) {
47 double ratio = ((double)i)/32.0; 48 double ratio = ((double)i)/32.0;
48 double rad = 3.0*3.141592*ratio; 49 double rad = 3.0*3.141592*ratio;
49 double normal = sin(rad); 50 double normal = sin(rad);
@@ -51,24 +52,7 @@ void main(void) {
51 data[2*i + 0] = -(signed short)scaled; 52 data[2*i + 0] = -(signed short)scaled;
52 data[2*i + 1] = (signed short)scaled; 53 data[2*i + 1] = (signed short)scaled;
53 } 54 }
54
55 debugf("starting write");
56
57 i = 0;
58 p = data;
59 SPSA0 = 0x01;
60 for (;;) {
61 while ((SPSD0 & (1 << 1)) == 0);
62 DXR20 = *p++; // left channel
63 DXR10 = *p++; // right channel
64 if (++i == 32)
65 {
66 p = data;
67 i = 0;
68 }
69 }
70#endif 55#endif
71 debugf("DSP inited...");
72 56
73 for (;;) { 57 for (;;) {
74 asm(" IDLE 1"); 58 asm(" IDLE 1");
@@ -85,16 +69,6 @@ void main(void) {
85 memset((unsigned short *)0x7f80, 0, 0x80); 69 memset((unsigned short *)0x7f80, 0, 0x80);
86#endif 70#endif
87 71
88#ifdef DATA_32_SINE
89 for (i = 0; i < 32; i++) {
90 double ratio = ((double)i)/32.0;
91 double rad = 3.0*3.141592*ratio;
92 double normal = sin(rad);
93 double scaled = 32767.0*(normal);
94 data[2*i + 0] = -(signed short)scaled;
95 data[2*i + 1] = (signed short)scaled;
96 }
97#endif
98 72
99#ifdef MANUAL_TRANSFER 73#ifdef MANUAL_TRANSFER
100 register signed short *p; 74 register signed short *p;
diff --git a/firmware/target/arm/tms320dm320/dsp/xml2h.py b/firmware/target/arm/tms320dm320/dsp/xml2h.py
new file mode 100644
index 0000000000..2d25c9028e
--- /dev/null
+++ b/firmware/target/arm/tms320dm320/dsp/xml2h.py
@@ -0,0 +1,193 @@
1#!/usr/bin/python
2# __________ __ ___.
3# Open \______ \ ____ ____ | | _\_ |__ _______ ___
4# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7# \/ \/ \/ \/ \/
8# $Id$
9#
10# Copyright (C) 2007 Catalin Patulea <cat@vv.carleton.ca>
11#
12# All files in this archive are subject to the GNU General Public License.
13# See the file COPYING in the source tree root for full license agreement.
14#
15# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16# KIND, either express or implied.
17#
18
19import sys, os.path, array, re
20from xml.dom import Node
21from xml.dom.minidom import parse
22
23
24C_IDENT_RE = re.compile('^[0-9a-zA-Z_]+$')
25
26
27def getText(nodelist):
28 rc = ""
29 for node in nodelist:
30 if node.nodeType == node.TEXT_NODE:
31 rc = rc + node.data
32 return rc
33
34
35def descendAll(root, tagname):
36 for child in root.childNodes:
37 if child.nodeType == Node.ELEMENT_NODE and child.tagName == tagname:
38 yield child
39
40
41def descend(root, tagname):
42 return descendAll(root, tagname).next()
43
44
45def getTagText(root, tagname):
46 try:
47 tag = descend(root, tagname)
48 except StopIteration:
49 return None
50 return getText(tag.childNodes)
51
52
53def main():
54 dom = parse(sys.stdin)
55
56 ofd = descend(dom, "ofd")
57 object_file = descend(ofd, "object_file")
58 object_file_name = descend(object_file, "name")
59
60 out_filepath = getText(object_file_name.childNodes)
61 sys.stderr.write("*.out filename (input): %s\n" % out_filepath)
62
63 out_file = open(out_filepath, "rb")
64 h_file = sys.stdout
65
66 h_file.write("""#ifndef DSP_IMAGE
67#define DSP_IMAGE
68/*
69 * Automatically generated by xml2h.py from %s.
70 *
71 * This program is free software; you can redistribute it and/or
72 * modify it under the terms of the GNU General Public License as
73 * published by the Free Software Foundation; either version 2 of
74 * the License, or (at your option) any later version.
75 *
76 * This program is distributed in the hope that it will be useful,
77 * but WITHOUT ANY WARRANTY; without even the implied warranty of
78 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
79 * GNU General Public License for more details.
80 *
81 * You should have received a copy of the GNU General Public License
82 * along with this program; if not, write to the Free Software
83 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
84 * MA 02111-1307 USA
85 *
86 */
87""" % out_filepath)
88
89 # Section data and directory.
90 h_directory = ["""
91static const struct dsp_section dsp_image[] = {"""]
92
93 ti_coff = descend(object_file, "ti_coff")
94 for section in descendAll(ti_coff, "section"):
95 page = int(getTagText(section, "page") or "0", 16)
96 name = getTagText(section, "name")
97 physical_addr = int(getTagText(section, "physical_addr"), 16)
98 raw_data_size = int(getTagText(section, "raw_data_size"), 16)
99 copy = getTagText(section, "copy")
100 data = getTagText(section, "data")
101 regular = getTagText(section, "regular")
102 text = getTagText(section, "text")
103 bss = getTagText(section, "bss")
104
105 file_offsets = descend(section, "file_offsets")
106 raw_data_ptr = int(getTagText(file_offsets, "raw_data_ptr"), 16)
107
108 if copy:
109 # Empirically, .debug* sections have this attribute set.
110 sys.stderr.write(
111 "%s: didn't copy debug section ('copy' attribute set)\n" %
112 name)
113 continue
114
115 if raw_data_size == 0:
116 sys.stderr.write("%s: not copying empty section\n" % name)
117 continue
118
119 if raw_data_size % 2 != 0:
120 sys.stderr.write("%s: error, raw_data_size 0x%04x not a multiple "
121 "of word size (2 bytes)\n" % (name, raw_data_size))
122 break
123
124 if data or regular or text:
125 sys.stderr.write("%s: placing 0x%04x words at 0x%04x from offset "
126 "0x%08x\n" % (
127 name, raw_data_size >> 1, physical_addr, raw_data_ptr))
128
129 sanitized_name = name.replace(".", "_")
130 h_file.write(("static const unsigned short _section%s[] = {\n" %
131 sanitized_name))
132
133 out_file.seek(raw_data_ptr)
134 data = array.array('H')
135 data.fromfile(out_file, raw_data_size >> 1)
136 h_file.write("\t")
137 for word in data:
138 h_file.write("0x%04x, " % word)
139 h_file.write("""
140};
141""")
142
143 h_directory.append("\t{_section%s, 0x%04x, 0x%04x}," % (
144 sanitized_name, physical_addr, raw_data_size >> 1))
145
146 continue
147
148 if bss:
149 sys.stderr.write("%s: bss section, 0x%04x words at 0x%04x\n" % (
150 name, raw_data_size >> 1, physical_addr))
151
152 h_directory.append("\t{NULL /* %s */, 0x%04x, 0x%04x}," % (
153 name, physical_addr, raw_data_size >> 1))
154 continue
155
156 sys.stderr.write("%s: error, unprocessed section\n" % name)
157
158 h_file.write("\n")
159
160 h_directory.append("\t{NULL, 0, 0}")
161 h_directory.append("};")
162
163 h_file.write("\n".join(h_directory))
164 h_file.write("\n")
165
166 # Symbols.
167 symbol_table = descend(ti_coff, "symbol_table")
168 h_file.write("""
169/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */
170""")
171 for symbol in descendAll(symbol_table, "symbol"):
172 name = getTagText(symbol, "name")
173 kind = getTagText(symbol, "kind")
174 value = int(getTagText(symbol, "value"), 16)
175
176 if kind != "defined":
177 continue
178
179 if not C_IDENT_RE.match(name):
180 continue
181
182 h_file.write("#define %s 0x%04x\n" % (name, value))
183
184 h_file.write("\n#endif\n")
185 h_file.close()
186 out_file.close()
187
188 dom.unlink()
189
190
191if __name__ == "__main__":
192 main()
193