From 94e1e961b57f253b760298ab0bae96a7de6d20fa Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Mon, 18 Jan 2010 21:04:08 +0000 Subject: [PATCH 01/16] Initial changeset to experimental branch --- Makefile | 129 +-- src/blitter.cpp | 10 + src/blitter.h | 3 +- src/cdintf.cpp | 9 + src/cdrom.cpp | 10 +- src/cdrom.h | 3 +- src/crc32.cpp | 7 + src/dac.cpp | 19 +- src/dac.h | 3 +- src/dsp.cpp | 18 +- src/dsp.h | 3 +- src/eeprom.cpp | 7 + src/event.cpp | 9 + src/file.cpp | 8 + src/gpu.cpp | 11 +- src/gpu.h | 3 +- src/gui/app.cpp | 47 ++ src/gui/app.h | 30 + src/gui/button.cpp | 121 --- src/gui/button.h | 37 - src/gui/element.cpp | 18 - src/gui/element.h | 40 - src/gui/filelist.cpp | 112 --- src/gui/filelist.h | 29 - src/gui/font1.h | 262 ------- src/gui/font14pt.h | 1640 --------------------------------------- src/gui/glwidget.cpp | 131 ++++ src/gui/glwidget.h | 43 + src/gui/guielements.h | 348 --------- src/gui/guimisc.cpp | 397 ---------- src/gui/guimisc.h | 74 -- src/gui/image.cpp | 20 - src/gui/image.h | 27 - src/gui/listbox.cpp | 242 ------ src/gui/listbox.h | 45 -- src/gui/mainwin.cpp | 163 ++++ src/gui/mainwin.h | 46 ++ src/gui/menu.cpp | 177 ----- src/gui/menu.h | 68 -- src/gui/pushbutton.cpp | 38 - src/gui/pushbutton.h | 36 - src/gui/slideswitch.cpp | 38 - src/gui/slideswitch.h | 33 - src/gui/text.cpp | 26 - src/gui/text.h | 29 - src/gui/textedit.cpp | 52 -- src/gui/textedit.h | 32 - src/gui/vj.pro | 22 + src/gui/vj.qrc | 5 + src/gui/window.cpp | 94 --- src/gui/window.h | 35 - src/jaguar.cpp | 18 +- src/jaguar.h | 23 +- src/jerry.cpp | 3 +- src/jerry.h | 3 +- src/joystick.cpp | 31 +- src/log.cpp | 7 + src/memory.cpp | 330 ++++---- src/memory.h | 77 +- src/mmu.cpp | 313 +++++++- src/mmu.h | 7 +- src/objectp.cpp | 14 +- src/settings.cpp | 10 + src/settings.h | 5 +- src/state.cpp | 7 + src/tom.cpp | 21 +- src/tom.h | 3 +- src/types.h | 4 - src/unzip.c | 9 +- src/video.cpp | 18 +- src/vj.cpp | 18 +- src/wavetable.cpp | 278 +++++++ src/wavetable.h | 266 +------ 73 files changed, 1616 insertions(+), 4658 deletions(-) create mode 100644 src/gui/app.cpp create mode 100644 src/gui/app.h delete mode 100644 src/gui/button.cpp delete mode 100644 src/gui/button.h delete mode 100644 src/gui/element.cpp delete mode 100644 src/gui/element.h delete mode 100644 src/gui/filelist.cpp delete mode 100644 src/gui/filelist.h delete mode 100644 src/gui/font1.h delete mode 100644 src/gui/font14pt.h create mode 100644 src/gui/glwidget.cpp create mode 100644 src/gui/glwidget.h delete mode 100644 src/gui/guielements.h delete mode 100644 src/gui/guimisc.cpp delete mode 100644 src/gui/guimisc.h delete mode 100644 src/gui/image.cpp delete mode 100644 src/gui/image.h delete mode 100644 src/gui/listbox.cpp delete mode 100644 src/gui/listbox.h create mode 100644 src/gui/mainwin.cpp create mode 100644 src/gui/mainwin.h delete mode 100644 src/gui/menu.cpp delete mode 100644 src/gui/menu.h delete mode 100644 src/gui/pushbutton.cpp delete mode 100644 src/gui/pushbutton.h delete mode 100644 src/gui/slideswitch.cpp delete mode 100644 src/gui/slideswitch.h delete mode 100644 src/gui/text.cpp delete mode 100644 src/gui/text.h delete mode 100644 src/gui/textedit.cpp delete mode 100644 src/gui/textedit.h create mode 100644 src/gui/vj.pro create mode 100644 src/gui/vj.qrc delete mode 100644 src/gui/window.cpp delete mode 100644 src/gui/window.h create mode 100644 src/wavetable.cpp diff --git a/Makefile b/Makefile index e1467c9..9b05b78 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # # by James L. Hammons # -# This software is licensed under the GPL v2 or any later version. Set the +# This software is licensed under the GPL v2 or any later version. See the # file GPL.TXT for details. ;-) # @@ -36,7 +36,7 @@ else # *nix SYSTYPE = __GCCUNIX__ EXESUFFIX = -GLLIB = -lGL +GLLIB = -lGL -lGLU ICON = SDLLIBTYPE = --libs MSG = generic Unix/Linux @@ -50,14 +50,14 @@ TARGET = vj # Note that we use optimization level 2 instead of 3--3 doesn't seem to gain much over 2 CFLAGS = -MMD -Wall -Wno-switch -O2 -D$(SYSTYPE) -ffast-math -fomit-frame-pointer `sdl-config --cflags` -CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -O2 -D$(SYSTYPE) \ +CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -O2 -D$(SYSTYPE) -Wno-trigraphs \ -DHAVE_LIB_CDIO -ffast-math -fomit-frame-pointer `sdl-config --cflags` -g # -fomit-frame-pointer `sdl-config --cflags` -g # -fomit-frame-pointer `sdl-config --cflags` -DLOG_UNMAPPED_MEMORY_ACCESSES LDFLAGS = -LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -lcdio +LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -lcdio `pkg-config --libs QtGui QtOpenGL` # Comment out the above and uncomment below if you don't have libcdio. # Also, remove the "-DHAVE_LIB_CDIO" from CPPFLAGS above. #LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) @@ -72,19 +72,12 @@ OBJS = \ obj/m68kopnz.o \ obj/m68kdasm.o \ \ - obj/button.o \ - obj/element.o \ - obj/filelist.o \ - obj/gui.o \ - obj/guimisc.o \ - obj/image.o \ - obj/listbox.o \ - obj/menu.o \ - obj/pushbutton.o \ - obj/slideswitch.o \ - obj/text.o \ - obj/textedit.o \ - obj/window.o \ + obj/app.o \ + obj/mainwin.o \ + obj/moc_mainwin.o \ + obj/glwidget.o \ + obj/moc_glwidget.o \ + obj/qrc_vj.o \ \ obj/blitter.o \ obj/cdrom.o \ @@ -112,6 +105,7 @@ OBJS = \ obj/unzip.o \ obj/video.o \ obj/vj.o \ + obj/wavetable.o \ $(ICON) all: checkenv message obj $(TARGET)$(EXESUFFIX) @@ -135,7 +129,7 @@ ifeq "" "$(shell which sdl-config)" else @echo -e "\033[01;37mOK\033[00m" endif -# !!! NOTE !!! Need to put a check here for libcdio, GL, zlib +# !!! NOTE !!! Need to put a check here for libcdio, GL, zlib, Qt message: @echo @@ -143,6 +137,7 @@ message: @echo clean: + @echo @echo -en "\033[01;33m***\033[00;32m Cleaning out the garbage...\033[00m" @rm -rf obj @rm -f ./$(TARGET)$(EXESUFFIX) @@ -159,6 +154,8 @@ $(ICON): res/$(TARGET).rc res/$(TARGET).ico @windres -i res/$(TARGET).rc -o $(ICON) --include-dir=./res endif +# Main source compilation... + obj/%.o: src/%.c @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" @$(CC) $(CFLAGS) $(INCS) -c $< -o $@ @@ -167,61 +164,81 @@ obj/%.o: src/%.cpp @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" @$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@ -obj/%.o: src/gui/%.cpp - @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" - @$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@ - +#$(TARGET)$(EXESUFFIX): $(OBJS) $(TARGET)$(EXESUFFIX): $(OBJS) @echo -e "\033[01;33m***\033[00;32m Linking it all together...\033[00m" @$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) # strip --strip-all vj$(EXESUFFIX) # upx -9 vj$(EXESUFFIX) -# Pull in dependencies autogenerated by gcc's -MMD switch -# The "-" in front is there just in case they haven't been created yet +# Qt GUI stuff... + +src/gui/Makefile: src/gui/vj-gui.pro src/gui/vj-gui.qrc + @echo -e "\033[01;33m***\033[00;32m Creating Qt Makefile...\033[00m" + @qmake -o src/gui/Makefile src/gui/vj-gui.pro + +#obj/%.o: src/gui/%.cpp src/gui/Makefile +# @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" +# @make -C src/gui +#OR: +# @cd src/gui && make + +#QT_SOURCES = app.cpp \ +# mainwin.cpp ../../obj/moc_mainwin.cpp \ +# ../../obj/qrc_vj-gui.cpp +#QT_OBJECTS = ../../obj/app.o \ +# ../../obj/mainwin.o \ +# ../../obj/moc_mainwin.o \ +# ../../obj/qrc_vj-gui.o +QT_CFLAGS = `pkg-config --cflags QtGui` +# !!! THESE DEFINES ARE PLATFORM DEPENDENT !!! +#QT_DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +QT_DEFINES = -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +#QT_INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I./src/gui -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I./obj +QT_INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I./src -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -I/usr/X11R6/include -I./obj +QT_CXXFLAGS = -pipe -O2 -march=pentium-m -pipe -D_REENTRANT -Wall -W $(QT_DEFINES) -D$(SYSTYPE) + +obj/moc_%.cpp: src/gui/%.h + @echo -e "\033[01;33m***\033[00;32m Creating $@...\033[00m" + @/usr/bin/moc $(QT_DEFINES) $(QT_INCPATH) $< -o $@ + +obj/moc_%.o: obj/moc_%.cpp + @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" + @$(CC) -c $(QT_CXXFLAGS) $(QT_INCPATH) -o $@ $< --include obj/*.d +obj/qrc_vj.cpp: src/gui/vj.qrc src/gui/res/vj.xpm + @echo -e "\033[01;33m***\033[00;32m Creating qrc_vj.cpp...\033[00m" + @/usr/bin/rcc -name vj src/gui/vj.qrc -o obj/qrc_vj.cpp + +obj/qrc_%.o: obj/qrc_%.cpp + @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" + @$(CC) -c $(QT_CXXFLAGS) $(QT_INCPATH) -o $@ $< + +obj/%.o: src/gui/%.cpp src/gui/%.h + @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" + @$(CC) -c $(QT_CXXFLAGS) $(QT_INCPATH) -o $@ $< # # Musashi specific stuffola # -#obj/m68k%.o: obj/m68k%.c obj/m68kops.h -# $(CC) $(CFLAGS) -Iobj -c src/m68k%.c -o obj/m68k%.o - -#obj/m68k%.o: obj/m68k%.c obj/m68kmake$(EXESUFFIX) -# $(CC) $(CFLAGS) -Iobj -c src/m68k%.c -o obj/m68k%.o +obj/m68kmake$(EXESUFFIX): src/m68kmake.c src/m68k_in.c + @echo -e "\033[01;33m***\033[00;32m Preparing to make the Musashi core...\033[00m" + @$(CC) $(WARNINGS) src/m68kmake.c -o obj/m68kmake$(EXESUFFIX) -#see if you can collapse all this crap into one or two lines... -#NOTE: The above doesn't work for some reason... +obj/m68kops.h obj/m68kops.c obj/m68kopac.c obj/m68kopdm.c obj/m68kopnz.c: obj/m68kmake$(EXESUFFIX) + @echo -e "\033[01;33m***\033[00;32m Creating m68kops.h...\033[00m" + @obj/m68kmake obj src/m68k_in.c obj/m68kcpu.o: obj/m68kops.h src/m68k.h src/m68kconf.h @echo -e "\033[01;33m***\033[00;32m Compiling m68kcpu.c...\033[00m" @$(CC) $(CFLAGS) -Iobj -c src/m68kcpu.c -o obj/m68kcpu.o -obj/m68kops.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kops.c src/m68k.h src/m68kconf.h - @echo -e "\033[01;33m***\033[00;32m Compiling m68kops.c...\033[00m" - @$(CC) $(CFLAGS) -Isrc -c obj/m68kops.c -o obj/m68kops.o - -obj/m68kopac.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kopac.c src/m68k.h src/m68kconf.h - @echo -e "\033[01;33m***\033[00;32m Compiling m68kopac.c...\033[00m" - @$(CC) $(CFLAGS) -Isrc -c obj/m68kopac.c -o obj/m68kopac.o - -obj/m68kopdm.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kopdm.c src/m68k.h src/m68kconf.h - @echo -e "\033[01;33m***\033[00;32m Compiling m68kopdm.c...\033[00m" - @$(CC) $(CFLAGS) -Isrc -c obj/m68kopdm.c -o obj/m68kopdm.o - -obj/m68kopnz.o: obj/m68kmake$(EXESUFFIX) obj/m68kops.h obj/m68kopnz.c src/m68k.h src/m68kconf.h - @echo -e "\033[01;33m***\033[00;32m Compiling m68kopnz.c...\033[00m" - @$(CC) $(CFLAGS) -Isrc -c obj/m68kopnz.c -o obj/m68kopnz.o - -obj/m68kdasm.o: src/m68kdasm.c src/m68k.h src/m68kconf.h - @echo -e "\033[01;33m***\033[00;32m Compiling m68kdasm.c...\033[00m" - @$(CC) $(CFLAGS) -Isrc -c src/m68kdasm.c -o obj/m68kdasm.o +obj/m68kop%.o: obj/m68kop%.c + @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" + @$(CC) $(CFLAGS) -Isrc -c $< -o $@ -obj/m68kops.h: obj/m68kmake$(EXESUFFIX) - @obj/m68kmake obj src/m68k_in.c +# Pull in dependencies autogenerated by gcc's -MMD switch +# The "-" in front is there just in case they haven't been created yet -obj/m68kmake$(EXESUFFIX): src/m68kmake.c src/m68k_in.c - @echo -e "\033[01;33m***\033[00;32m Preparing to make the Musashi core...\033[00m" - @$(CC) $(WARNINGS) src/m68kmake.c -o obj/m68kmake$(EXESUFFIX) +-include obj/*.d diff --git a/src/blitter.cpp b/src/blitter.cpp index 75d65a4..3d4207d 100644 --- a/src/blitter.cpp +++ b/src/blitter.cpp @@ -2,6 +2,15 @@ // Blitter core // // by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) +// + // // I owe a debt of gratitude to Curt Vendel and to John Mathieson--to Curt // for supplying the Oberon ASIC nets and to John for making them available @@ -18,6 +27,7 @@ #include #include "jaguar.h" #include "log.h" +//#include "memory.h" // Various conditional compilation goodies... diff --git a/src/blitter.h b/src/blitter.h index 535f7cb..5c3febb 100644 --- a/src/blitter.h +++ b/src/blitter.h @@ -5,7 +5,8 @@ #ifndef __BLITTER_H__ #define __BLITTER_H__ -#include "types.h" +//#include "types.h" +#include "memory.h" void BlitterInit(void); void BlitterReset(void); diff --git a/src/cdintf.cpp b/src/cdintf.cpp index 066f2cc..8973c45 100644 --- a/src/cdintf.cpp +++ b/src/cdintf.cpp @@ -2,6 +2,15 @@ // OS agnostic CDROM interface functions // // by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) +// + // // This now uses the supposedly cross-platform libcdio to do the necessary // low-level CD twiddling we need that libsdl can't do currently. Jury is diff --git a/src/cdrom.cpp b/src/cdrom.cpp index a7569ac..c45a8f0 100644 --- a/src/cdrom.cpp +++ b/src/cdrom.cpp @@ -4,13 +4,21 @@ // Originally by David Raingeard // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Extensive rewrites/cleanups/fixes by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "cdrom.h" #include // For memset, etc. -#include "jaguar.h" // For GET32/SET32 macros +//#include "jaguar.h" // For GET32/SET32 macros #include "m68k.h" +//#include "memory.h" #include "cdintf.h" // System agnostic CD interface functions #include "log.h" #include "dac.h" diff --git a/src/cdrom.h b/src/cdrom.h index dbedb77..963a02a 100644 --- a/src/cdrom.h +++ b/src/cdrom.h @@ -5,7 +5,8 @@ #ifndef __CDROM_H__ #define __CDROM_H__ -#include "types.h" +//#include "types.h" +#include "memory.h" void CDROMInit(void); void CDROMReset(void); diff --git a/src/crc32.cpp b/src/crc32.cpp index 6711aae..8cb637b 100644 --- a/src/crc32.cpp +++ b/src/crc32.cpp @@ -4,6 +4,13 @@ // by David Raingeard // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Cleanups by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "crc32.h" diff --git a/src/dac.cpp b/src/dac.cpp index 9dc1a2e..4cf8da2 100644 --- a/src/dac.cpp +++ b/src/dac.cpp @@ -4,6 +4,13 @@ // Originally by David Raingeard // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Rewritten by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // // Need to set up defaults that the BIOS sets for the SSI here in DACInit()... !!! FIX !!! @@ -22,10 +29,11 @@ #include "dac.h" #include "SDL.h" -#include "gui.h" +//#include "gui.h" #include "jaguar.h" #include "log.h" #include "m68k.h" +//#include "memory.h" #include "settings.h" //#define DEBUG_DAC @@ -222,7 +230,8 @@ WriteLog("Tail=%X, Head=%X", ltail, lhead); WriteLog("From while: Tail=%X, Head=%X", (LeftFIFOTailPtr + 2) & (BUFFER_SIZE - 1), LeftFIFOHeadPtr); // LogDone(); // exit(0); - GUICrashGracefully("Stuck in left DAC spinlock!"); +#warning "Reimplement GUICrashGracefully!" +// GUICrashGracefully("Stuck in left DAC spinlock!"); return; } }//*/ @@ -313,7 +322,8 @@ WriteLog("Tail=%X, Head=%X", rtail, rhead); WriteLog("From while: Tail=%X, Head=%X", (RightFIFOTailPtr + 2) & (BUFFER_SIZE - 1), RightFIFOHeadPtr); // LogDone(); // exit(0); - GUICrashGracefully("Stuck in right DAC spinlock!"); +#warning "Reimplement GUICrashGracefully!" +// GUICrashGracefully("Stuck in right DAC spinlock!"); return; } }//*/ @@ -351,7 +361,8 @@ WriteLog("Tail=%X, Head=%X", rtail, rhead); WriteLog("DAC: Failed to initialize SDL sound: %s.\nDesired freq: %u\nShutting down!\n", SDL_GetError(), desired.freq); // LogDone(); // exit(1); - GUICrashGracefully("Failed to initialize SDL sound!"); +#warning "Reimplement GUICrashGracefully!" +// GUICrashGracefully("Failed to initialize SDL sound!"); return; } } diff --git a/src/dac.h b/src/dac.h index 914ff6a..74478da 100644 --- a/src/dac.h +++ b/src/dac.h @@ -5,7 +5,8 @@ #ifndef __DAC_H__ #define __DAC_H__ -#include "types.h" +//#include "types.h" +#include "memory.h" void DACInit(void); void DACReset(void); diff --git a/src/dsp.cpp b/src/dsp.cpp index 4a9ba85..604584c 100644 --- a/src/dsp.cpp +++ b/src/dsp.cpp @@ -4,6 +4,13 @@ // Originally by David Raingeard // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Extensive cleanups/rewrites by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "dsp.h" @@ -16,7 +23,7 @@ #include "jerry.h" #include "log.h" #include "m68k.h" -#include "memory.h" +//#include "memory.h" //#define DSP_DEBUG //#define DSP_DEBUG_IRQ @@ -441,7 +448,7 @@ void dsp_build_branch_condition_table(void) { // Allocate the mirror table if (!mirror_table) - mirror_table = (uint16 *)memory_malloc(65536 * sizeof(uint16), "DSP mirror table"); + mirror_table = (uint16 *)malloc(65536 * sizeof(uint16)); // Fill in the mirror table if (mirror_table) @@ -457,7 +464,7 @@ void dsp_build_branch_condition_table(void) if (!dsp_branch_condition_table) { - dsp_branch_condition_table = (uint8 *)memory_malloc(32 * 8 * sizeof(uint8), "DSP branch condition table"); + dsp_branch_condition_table = (uint8 *)malloc(32 * 8 * sizeof(uint8)); // Fill in the condition table if (dsp_branch_condition_table) @@ -1358,6 +1365,11 @@ void DSPDone(void) // memory_free(dsp_ram_8); // memory_free(dsp_reg_bank_0); // memory_free(dsp_reg_bank_1); + if (dsp_branch_condition_table) + free(dsp_branch_condition_table); + + if (mirror_table) + free(mirror_table); } diff --git a/src/dsp.h b/src/dsp.h index 7e09e59..44e8b70 100644 --- a/src/dsp.h +++ b/src/dsp.h @@ -5,7 +5,8 @@ #ifndef __DSP_H__ #define __DSP_H__ -#include "types.h" +//#include "types.h" +#include "memory.h" #define DSP_CONTROL_RAM_BASE 0x00F1A100 #define DSP_WORK_RAM_BASE 0x00F1B000 diff --git a/src/eeprom.cpp b/src/eeprom.cpp index fe3b1d0..266a11a 100644 --- a/src/eeprom.cpp +++ b/src/eeprom.cpp @@ -4,6 +4,13 @@ // by Cal2 // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Cleanups/enhancements by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "eeprom.h" diff --git a/src/event.cpp b/src/event.cpp index 734ad87..2fbfa33 100644 --- a/src/event.cpp +++ b/src/event.cpp @@ -2,6 +2,15 @@ // System time handlers // // by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) +// + // // STILL TO DO: // diff --git a/src/file.cpp b/src/file.cpp index 4fc852c..bf8ad54 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -3,6 +3,13 @@ // // File support // by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "file.h" @@ -13,6 +20,7 @@ #include "eeprom.h" #include "jaguar.h" #include "log.h" +#include "memory.h" #include "unzip.h" #include "zlib.h" diff --git a/src/gpu.cpp b/src/gpu.cpp index aec51a1..4892b7a 100644 --- a/src/gpu.cpp +++ b/src/gpu.cpp @@ -6,6 +6,15 @@ // Originally by David Raingeard (Cal2) // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Cleanups, endian wrongness, and bad ASM amelioration by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) + +// // Note: Endian wrongness probably stems from the MAME origins of this emu and // the braindead way in which MAME handles memory. :-) // @@ -23,7 +32,7 @@ #include "jaguar.h" #include "log.h" #include "m68k.h" -#include "memory.h" +//#include "memory.h" #include "tom.h" //#define GPU_DEBUG diff --git a/src/gpu.h b/src/gpu.h index 6548544..97ba4b3 100644 --- a/src/gpu.h +++ b/src/gpu.h @@ -5,7 +5,8 @@ #ifndef __GPU_H__ #define __GPU_H__ -#include "types.h" +//#include "types.h" +#include "memory.h" #define GPU_CONTROL_RAM_BASE 0x00F02100 #define GPU_WORK_RAM_BASE 0x00F03000 diff --git a/src/gui/app.cpp b/src/gui/app.cpp new file mode 100644 index 0000000..3bd8c6c --- /dev/null +++ b/src/gui/app.cpp @@ -0,0 +1,47 @@ +// +// app.cpp - Qt-based GUI for Virtual Jaguar +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 12/23/2009 Created this file +// + +#include "app.h" + +#include +#include "mainwin.h" + +// Here's the main application loop--short and simple... +int main(int argc, char * argv[]) +{ + if (argc > 1) + { + if (strcmp(argv[1], "--help") == 0) + { + printf("Virtual Jaguar 2.0.0 help\n"); + printf("\n"); + printf("This is an experimental branch of Virtual Jaguar, how did you get it?\n"); + return 0; + } + } + + Q_INIT_RESOURCE(vj); // This must the same name as the exe filename +//or is it the .qrc filename??? + + App app(argc, argv); // Declare an instance of the application + + return app.exec(); // And run it! +} + +// Main app constructor--we stick globally accessible stuff here... + +App::App(int argc, char * argv[]): QApplication(argc, argv) +{ + mainWindow = new MainWin(); + mainWindow->show(); +} diff --git a/src/gui/app.h b/src/gui/app.h new file mode 100644 index 0000000..2b57845 --- /dev/null +++ b/src/gui/app.h @@ -0,0 +1,30 @@ +// +// app.h: Header file +// +// by James L. Hammons +// (C) 2009 Underground Software +// + +#ifndef __APP_H__ +#define __APP_H__ + +//Hrm. uh??? I thought this wasn't the way to do this stuff...??? +#include + +// Forward declarations +class MainWin; + +class App: public QApplication +{ + public: + App(int argc, char * argv[]); + + private: + MainWin * mainWindow; + + // Globally accessible stuff goes here... + // Although... Globally accessible stuff should go into settings.cpp... +// public: +}; + +#endif // __APP_H__ diff --git a/src/gui/button.cpp b/src/gui/button.cpp deleted file mode 100644 index 052d19c..0000000 --- a/src/gui/button.cpp +++ /dev/null @@ -1,121 +0,0 @@ -// -// Button class -// -// by James L. Hammons -// - -#include "button.h" - -//#include "font14pt.h" -#include "guimisc.h" - -// Various constructors - -Button::Button(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/): - Element(x, y, w, h), activated(false), clicked(false), inside(false), - fgColor(0xFFFFFFFF), bgColor(0xFF00FF00), pic(NULL), elementToTell(NULL) -{ -} - -Button::Button(uint32 x, uint32 y, uint32 w, uint32 h, uint32 * p): - Element(x, y, w, h), activated(false), clicked(false), inside(false), - fgColor(0xFFFFFFFF), bgColor(0xFF00FF00), pic(p), elementToTell(NULL) -{ -} - -// Button::Button(uint32 x, uint32 y, uint32 * p): Element(x, y, 0, 0), - -Button::Button(uint32 x, uint32 y, uint32 * p, uint32 * pH/*= NULL*/, uint32 * pD/*= NULL*/): - Element(x, y, 0, 0), activated(false), clicked(false), inside(false), - fgColor(0xFFFFFFFF), bgColor(0xFF00FF00), pic(p), picHover(pH), picDown(pD), - elementToTell(NULL) -{ - if (pic) - extents.w = pic[0], extents.h = pic[1]; -} - -Button::Button(uint32 x, uint32 y, uint32 w, uint32 h, std::string s): - Element(x, y, w, h), activated(false), clicked(false), inside(false), - fgColor(0xFFFFFFFF), bgColor(0xFF00FF00), pic(NULL), text(s), elementToTell(NULL) -{ -} - -Button::Button(uint32 x, uint32 y, std::string s): - Element(x, y, 0, FONT_HEIGHT), activated(false), clicked(false), inside(false), - fgColor(0xFFFFFFFF), bgColor(0xFF00FF00), pic(NULL), text(s), elementToTell(NULL) -{ - extents.w = s.length() * FONT_WIDTH; -} - -// Implementation - -void Button::HandleMouseMove(uint32 x, uint32 y) -{ - inside = Inside(x, y); -} - -void Button::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) -{ - if (inside) - { - if (mouseDown) - clicked = true; - - if (clicked && !mouseDown) - { - clicked = false, activated = true; - - // Send a message that we're activated (if there's someone to tell, that is) - if (elementToTell) - elementToTell->Notify(this); - } - } - else - clicked = activated = false; -} - -void Button::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - uint32 addr = (extents.x + offsetX) + ((extents.y + offsetY) * pitch); - - if (text.length() > 0) // Simple text button -// if (pic == NULL) - { - for(uint32 y=0; y 010000 11111 10000 -> 0100 0001 1111 1111 1000 0100 -> 41 FF 84 - = (clicked && inside ? fgColor : (inside ? 0xFF84FF41 : bgColor)); - } - } - - DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str()); - } - else // Graphical button - { - uint32 * picToShow = pic; - - if (picHover != NULL && inside && !clicked) - picToShow = picHover; - - if (picDown != NULL && inside && clicked) - picToShow = picDown; - - DrawTransparentBitmapDeprecated(screenBuffer, extents.x + offsetX, extents.y + offsetY, picToShow); - } -} - -bool Button::ButtonClicked(void) -{ - return activated; -} - -void Button::SetNotificationElement(Element * e) -{ - elementToTell = e; -} diff --git a/src/gui/button.h b/src/gui/button.h deleted file mode 100644 index c024e39..0000000 --- a/src/gui/button.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// Button class -// -// by James L. Hammons -// - -#ifndef __BUTTON_H__ -#define __BUTTON_H__ - -#include -#include "element.h" - -class Button: public Element -{ - public: - Button(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0); - Button(uint32 x, uint32 y, uint32 w, uint32 h, uint32 * p); - Button(uint32 x, uint32 y, uint32 * p, uint32 * pH = NULL, uint32 * pD = NULL); - Button(uint32 x, uint32 y, uint32 w, uint32 h, std::string s); - Button(uint32 x, uint32 y, std::string s); - virtual void HandleKey(SDLKey key) {} - virtual void HandleMouseMove(uint32 x, uint32 y); - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element *) {} - bool ButtonClicked(void); - void SetNotificationElement(Element * e); - - protected: - bool activated, clicked, inside; - uint32 fgColor, bgColor; - uint32 * pic, * picHover, * picDown; - std::string text; - Element * elementToTell; -}; - -#endif // __BUTTON_H__ diff --git a/src/gui/element.cpp b/src/gui/element.cpp deleted file mode 100644 index 1aa63f7..0000000 --- a/src/gui/element.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// -// GUI element base class -// -// by James L. Hammons -// - -#include "element.h" - -// Initialize class variables (Element) - -uint32 * Element::screenBuffer = NULL; -uint32 Element::pitch = 0; - -bool Element::Inside(uint32 x, uint32 y) -{ - return (x >= (uint32)extents.x && x < (uint32)(extents.x + extents.w) - && y >= (uint32)extents.y && y < (uint32)(extents.y + extents.h) ? true : false); -} diff --git a/src/gui/element.h b/src/gui/element.h deleted file mode 100644 index b54fc7c..0000000 --- a/src/gui/element.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// GUI element base class -// -// by James L. Hammons -// - -#ifndef __ELEMENT_H__ -#define __ELEMENT_H__ - -#include "SDL.h" -#include "types.h" - -class Element -{ - public: - Element(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0) - { extents.x = x, extents.y = y, extents.w = w, extents.h = h; } - // These are "pure" virtual functions... - virtual void HandleKey(SDLKey key) = 0; - virtual void HandleMouseMove(uint32 x, uint32 y) = 0; - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown) = 0; - virtual void Draw(uint32, uint32) = 0; - virtual void Notify(Element *) = 0; -//Needed? virtual ~Element() = 0; -//We're not allocating anything in the base class, so the answer would be NO. - bool Inside(uint32 x, uint32 y); - - // Class method - static void SetScreenAndPitch(uint32 * s, uint32 p) { screenBuffer = s, pitch = p; } - - protected: - SDL_Rect extents; - uint32 state; - - // Class variables... - static uint32 * screenBuffer; - static uint32 pitch; -}; - -#endif // __ELEMENT_H__ diff --git a/src/gui/filelist.cpp b/src/gui/filelist.cpp deleted file mode 100644 index e2bcb75..0000000 --- a/src/gui/filelist.cpp +++ /dev/null @@ -1,112 +0,0 @@ -// -// FileList class -// -// by James L. Hammons -// - -#include "filelist.h" - -#include // For MacOS dependency -#include -#include "settings.h" -#include "file.h" -#include "guimisc.h" - -//Need 4 buttons, one scrollbar... -FileList::FileList(uint32 x, uint32 y, uint32 w, uint32 h): Window(x, y, w, h) -{ - files = new ListBox(8, 8, w - 16, h - 32); - AddElement(files); - load = new Button(8, h - 16, " Load "); - AddElement(load); - load->SetNotificationElement(this); - -#warning !!! FIX !!! Directory might not exist--this shouldn't cause VJ to crash! - DIR * dp = opendir(vjs.ROMPath); - dirent * de; - - if (dp != NULL) - { - while ((de = readdir(dp)) != NULL) - { - char * ext = strrchr(de->d_name, '.'); - - if (ext != NULL) - if (strcasecmp(ext, ".zip") == 0 || strcasecmp(ext, ".j64") == 0 - || strcasecmp(ext, ".abs") == 0 || strcasecmp(ext, ".jag") == 0 - || strcasecmp(ext, ".rom") == 0) - files->AddItem(std::string(de->d_name)); - } - - closedir(dp); - } - else - { -//Give a diagnostic message here so that the (l)user can figure out what went wrong. !!! FIX !!! - } -} - -void FileList::HandleKey(SDLKey key) -{ - if (key == SDLK_RETURN) - Notify(load); - else - Window::HandleKey(key); -} - -void FileList::HandleMouseMove(uint32 x, uint32 y) -{ - Window::HandleMouseMove(x, y); -} - -void FileList::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) -{ - Window::HandleMouseButton(x, y, mouseDown); -} - -void FileList::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - Window::Draw(offsetX, offsetY); -} - -extern Window * ResetJaguar(void); -#warning ICKY KLUDGE--FIX THIS MESS!!! -void FileList::Notify(Element * e) -{ - if (e == load) - { - char filename[MAX_PATH]; - strcpy(filename, vjs.ROMPath); - - if (strlen(filename) > 0) - if (filename[strlen(filename) - 1] != '/') - strcat(filename, "/"); - - strcat(filename, files->GetSelectedItem().c_str()); - -// uint32 romSize = JaguarLoadROM(jaguar_mainRom, filename); -// JaguarLoadCart(jaguar_mainRom, filename); - if (JaguarLoadFile(filename)) - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - - event.type = SDL_USEREVENT, event.user.code = MENU_ITEM_CHOSEN; - event.user.data1 = (void *)ResetJaguar; - SDL_PushEvent(&event); - } - else - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - - // Handle the error, but don't run... - // Tell the user that we couldn't run their file for some reason... !!! FIX !!! -//how to kludge: Make a function like ResetJaguar which creates the dialog window - } - } - else - Window::Notify(e); -} diff --git a/src/gui/filelist.h b/src/gui/filelist.h deleted file mode 100644 index 943cbd7..0000000 --- a/src/gui/filelist.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// FileList class -// -// by James L. Hammons -// - -#ifndef __FILELIST_H__ -#define __FILELIST_H__ - -#include "window.h" -#include "listbox.h" - -class FileList: public Window -{ - public: - FileList(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0); - virtual ~FileList() {} - virtual void HandleKey(SDLKey key); - virtual void HandleMouseMove(uint32 x, uint32 y); - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element * e); - - protected: - ListBox * files; - Button * load; -}; - -#endif // __FILELIST_H__ diff --git a/src/gui/font1.h b/src/gui/font1.h deleted file mode 100644 index 3f4f75d..0000000 --- a/src/gui/font1.h +++ /dev/null @@ -1,262 +0,0 @@ -// -// This file was automagically generated by bin2c (by James L. Hammons) -// - -char font1[0x4000] = { - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 -}; diff --git a/src/gui/font14pt.h b/src/gui/font14pt.h deleted file mode 100644 index 3fcb6a0..0000000 --- a/src/gui/font14pt.h +++ /dev/null @@ -1,1640 +0,0 @@ -//#define FONT_WIDTH 8 -//#define FONT_HEIGHT 16 - -// -// This file was automagically generated by rawfont2c (by James L. Hammons) -// - -char font2[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x05, 0x10, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x45, 0xFF, 0x55, 0x00, 0xE5, 0xB5, 0x00, - 0x00, 0x2F, 0xFF, 0x3F, 0x00, 0xCF, 0x9F, 0x00, - 0x00, 0x19, 0xFF, 0x29, 0x00, 0xB9, 0x89, 0x00, - 0x00, 0x04, 0xFE, 0x13, 0x00, 0xA3, 0x73, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x0F, 0x1E, 0x00, 0x1F, 0x0E, - 0x00, 0x00, 0x00, 0x7D, 0x8F, 0x00, 0xDC, 0x2F, - 0x00, 0x00, 0x00, 0xB9, 0x52, 0x17, 0xEF, 0x02, - 0x00, 0x00, 0x03, 0xF2, 0x16, 0x52, 0xB6, 0x00, - 0x00, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x10, 0x71, 0xA9, 0x10, 0xCB, 0x4C, 0x0F, - 0x00, 0x00, 0x90, 0x7A, 0x00, 0xF0, 0x18, 0x00, - 0x00, 0x00, 0xB9, 0x4F, 0x1C, 0xEE, 0x00, 0x00, - 0x80, 0xF0, 0xFC, 0xF3, 0xF3, 0xFD, 0xF0, 0x6F, - 0x14, 0x4B, 0xDB, 0x20, 0x9F, 0x88, 0x20, 0x0B, - 0x00, 0x72, 0x97, 0x00, 0xD0, 0x39, 0x00, 0x00, - 0x00, 0xB6, 0x55, 0x14, 0xF2, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x45, 0xE9, 0xFF, 0xF2, 0xB8, 0x12, - 0x00, 0x13, 0xF3, 0xAE, 0xFF, 0x3C, 0x6F, 0x31, - 0x00, 0x48, 0xFF, 0x75, 0xFF, 0x20, 0x00, 0x4B, - 0x10, 0x27, 0xFF, 0x9A, 0xFF, 0x20, 0x00, 0x2A, - 0x00, 0x00, 0x9F, 0xF5, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x04, 0xAA, 0xFF, 0xA5, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0xEF, 0x99, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x92, 0xFB, 0x0B, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x75, 0xFF, 0x14, - 0x00, 0x3B, 0x6E, 0x66, 0xFF, 0xB1, 0xC0, 0x00, - 0x00, 0x26, 0xBA, 0xF8, 0xFF, 0xC9, 0x18, 0x13, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0xDF, 0xD5, 0x3F, 0x00, 0x00, 0xA5, 0xCB, - 0xFC, 0x75, 0xA0, 0xE6, 0x02, 0x48, 0xFB, 0x30, - 0xFF, 0x25, 0x56, 0xFF, 0x26, 0xDF, 0x88, 0x00, - 0xFF, 0x50, 0x82, 0xF3, 0x94, 0xDC, 0x09, 0x00, - 0x8C, 0xFB, 0xF8, 0x96, 0xFB, 0x43, 0x00, 0x00, - 0x00, 0x11, 0x10, 0xCE, 0x9F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x75, 0xE9, 0x36, 0xCA, 0xDE, 0x6E, - 0x00, 0x21, 0xF5, 0x59, 0xB0, 0xC6, 0x90, 0xFF, - 0x00, 0xB9, 0xB6, 0x00, 0xDB, 0x94, 0x54, 0xFF, - 0x5C, 0xF4, 0x1F, 0x00, 0xB7, 0xBF, 0x85, 0xF1, - 0xEB, 0x71, 0x00, 0x00, 0x2D, 0xDC, 0xEF, 0x5B, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x6D, 0xE0, 0xDD, 0x5C, 0x00, 0x00, - 0x00, 0x2A, 0xFF, 0x6D, 0x91, 0xFA, 0x0D, 0x00, - 0x00, 0x47, 0xFF, 0x2D, 0x62, 0xFB, 0x0E, 0x00, - 0x00, 0x11, 0xF8, 0x90, 0xDC, 0x7E, 0x00, 0x00, - 0x00, 0x3D, 0xE0, 0xFD, 0x5B, 0x00, 0x00, 0x00, - 0x85, 0xF2, 0x75, 0xFB, 0x55, 0x00, 0x51, 0xFF, - 0xFE, 0x59, 0x00, 0x9A, 0xE4, 0x0F, 0x5D, 0xF5, - 0xFF, 0x26, 0x00, 0x17, 0xEF, 0xA7, 0x87, 0xB1, - 0xFF, 0x61, 0x00, 0x00, 0x61, 0xFF, 0xEE, 0x32, - 0xC7, 0xEC, 0x48, 0x17, 0x5D, 0xF9, 0xE8, 0x1A, - 0x12, 0xA2, 0xF1, 0xF7, 0xC4, 0x5D, 0xE9, 0xC8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xBB, 0xFF, 0x2B, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x9A, 0xFF, 0x0B, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x79, 0xE9, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x58, 0xC8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x34, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x8A, 0xF0, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0xA6, 0xCF, 0x1E, 0x00, - 0x00, 0x00, 0x00, 0x58, 0xF4, 0x1C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xCF, 0x95, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x19, 0xFF, 0x4E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x41, 0xFF, 0x2B, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x4B, 0xFF, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3B, 0xFF, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0E, 0xFD, 0x5B, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xB7, 0xAC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x37, 0xFB, 0x3A, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xED, 0x53, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xD1, 0xA5, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x1B, 0x34, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0xDA, 0xD8, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x5E, 0xF3, 0x53, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5E, 0xF2, 0x1E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xD3, 0x92, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x85, 0xE2, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5E, 0xFF, 0x0E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x54, 0xFF, 0x1A, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0xFE, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x94, 0xD5, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x09, 0xE7, 0x79, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x8E, 0xDE, 0x0C, 0x00, 0x00, - 0x00, 0x1A, 0x9E, 0xEA, 0x2C, 0x00, 0x00, 0x00, - 0x47, 0xF1, 0x9D, 0x19, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xB6, 0xB5, 0x00, 0x00, 0x00, - 0x01, 0x87, 0x23, 0x94, 0x93, 0x25, 0x87, 0x00, - 0x17, 0xBE, 0xF1, 0x1F, 0x20, 0xF1, 0xBE, 0x16, - 0x00, 0x00, 0x2F, 0x5D, 0x5D, 0x2E, 0x00, 0x00, - 0x00, 0x19, 0xE1, 0x76, 0x77, 0xE1, 0x19, 0x00, - 0x00, 0x1C, 0xA3, 0x05, 0x06, 0xA3, 0x1C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0xF0, 0xF0, 0xF5, 0xFF, 0xF2, 0xF0, 0xF0, - 0x00, 0x20, 0x20, 0x66, 0xFF, 0x3C, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0A, 0x20, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x1D, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC0, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x27, 0xAF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0A, 0x20, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xB2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE5, 0x36, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xBA, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0xE0, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0xC2, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0xD9, 0x46, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x58, 0xC9, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xD2, 0x4E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xD1, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xCB, 0x56, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x47, 0xD7, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xC2, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0xDE, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x75, 0xDF, 0xD4, 0x53, 0x00, 0x00, - 0x00, 0x60, 0xEB, 0x3F, 0x58, 0xF8, 0x34, 0x00, - 0x00, 0xDA, 0x7D, 0x00, 0x00, 0xAE, 0xAA, 0x00, - 0x1F, 0xFF, 0x42, 0x00, 0x00, 0x73, 0xEE, 0x00, - 0x42, 0xFF, 0x28, 0x00, 0x00, 0x5A, 0xFF, 0x11, - 0x4D, 0xFF, 0x21, 0x00, 0x00, 0x52, 0xFF, 0x1C, - 0x43, 0xFF, 0x28, 0x00, 0x00, 0x59, 0xFF, 0x13, - 0x22, 0xFF, 0x40, 0x00, 0x00, 0x71, 0xF1, 0x00, - 0x00, 0xDF, 0x78, 0x00, 0x00, 0xA9, 0xAF, 0x00, - 0x00, 0x6A, 0xE5, 0x2E, 0x47, 0xF8, 0x3B, 0x00, - 0x00, 0x01, 0x86, 0xF0, 0xE6, 0x61, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x16, 0x65, 0xB8, 0x1C, 0x00, 0x00, - 0x00, 0xC1, 0xE8, 0xCF, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x29, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x10, 0x10, 0x5B, 0xFF, 0x2E, 0x10, 0x10, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2F, 0xB2, 0xE4, 0xE4, 0x9F, 0x12, 0x00, - 0x00, 0x51, 0x75, 0x2E, 0x3E, 0xE0, 0xBA, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0xFF, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xFF, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xC3, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0xF3, 0x2D, 0x00, - 0x00, 0x00, 0x00, 0x40, 0xEF, 0x44, 0x00, 0x00, - 0x00, 0x00, 0x2A, 0xED, 0x4F, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xDE, 0x91, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xAC, 0xFE, 0x28, 0x10, 0x10, 0x10, 0x02, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x24, 0xB9, 0xE2, 0xE9, 0xBD, 0x3B, 0x00, - 0x00, 0x23, 0x61, 0x30, 0x31, 0xBE, 0xF1, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xFE, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x19, 0xC4, 0x92, 0x00, - 0x00, 0x00, 0x4B, 0xF3, 0xFF, 0xA7, 0x01, 0x00, - 0x00, 0x00, 0x0A, 0x24, 0x5C, 0xF1, 0x7B, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xF2, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFF, 0x19, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xFA, 0x08, - 0x00, 0x23, 0x57, 0x1A, 0x3B, 0xE8, 0x9E, 0x00, - 0x00, 0x2D, 0xDB, 0xF9, 0xEB, 0x94, 0x09, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x9E, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x3B, 0xFE, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x04, 0xD2, 0xB2, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x73, 0xC4, 0x51, 0xFF, 0x20, 0x00, - 0x00, 0x1B, 0xEF, 0x2E, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0xAB, 0x8F, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x46, 0xE5, 0x0D, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x88, 0xFA, 0xF0, 0xF0, 0xF5, 0xFF, 0xF2, 0xA5, - 0x11, 0x20, 0x20, 0x20, 0x66, 0xFF, 0x3C, 0x16, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4B, 0xF0, 0xF0, 0xF0, 0xF0, 0xB0, 0x00, - 0x00, 0x50, 0xFF, 0x3C, 0x20, 0x20, 0x17, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xEB, 0xC3, 0x5A, 0x00, 0x00, - 0x00, 0x0A, 0x21, 0x35, 0x84, 0xFC, 0x75, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xF0, 0x04, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xFF, 0x19, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xF7, 0x07, - 0x00, 0x27, 0x46, 0x16, 0x49, 0xF0, 0x8D, 0x00, - 0x00, 0x38, 0xDB, 0xF9, 0xE4, 0x80, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x32, 0xBA, 0xE8, 0xD3, 0x6D, 0x00, - 0x00, 0x2A, 0xF2, 0x7E, 0x27, 0x47, 0x5E, 0x00, - 0x00, 0xB4, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFC, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3A, 0xFF, 0x53, 0xC0, 0xE7, 0x9D, 0x0A, 0x00, - 0x4C, 0xFF, 0xBB, 0x33, 0x4A, 0xF0, 0xA0, 0x00, - 0x48, 0xFF, 0x45, 0x00, 0x00, 0x7F, 0xFB, 0x09, - 0x2D, 0xFF, 0x25, 0x00, 0x00, 0x55, 0xFF, 0x1A, - 0x04, 0xF0, 0x4D, 0x00, 0x00, 0x74, 0xF3, 0x04, - 0x00, 0x87, 0xD4, 0x2D, 0x2D, 0xE1, 0x8D, 0x00, - 0x00, 0x05, 0x93, 0xEF, 0xF0, 0x93, 0x05, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x8C, 0xBA, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0xE9, 0x36, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x75, 0xB6, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0B, 0xEA, 0x3D, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x75, 0xCB, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0xE9, 0x62, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x6A, 0xF5, 0x0C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xD9, 0xAC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2E, 0xFF, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x64, 0xFF, 0x33, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x28, 0xAC, 0xE4, 0xE8, 0xB8, 0x33, 0x00, - 0x10, 0xEB, 0xA9, 0x2E, 0x3B, 0xCC, 0xEB, 0x06, - 0x48, 0xFF, 0x2D, 0x00, 0x00, 0x5C, 0xFF, 0x17, - 0x21, 0xFD, 0x9F, 0x03, 0x01, 0xAB, 0xC2, 0x00, - 0x00, 0x6A, 0xFC, 0xCE, 0xB7, 0xB7, 0x14, 0x00, - 0x00, 0x3E, 0xEE, 0xD8, 0xFF, 0xAF, 0x0F, 0x00, - 0x06, 0xE6, 0x83, 0x04, 0x7E, 0xFE, 0xB4, 0x00, - 0x3D, 0xFF, 0x2E, 0x00, 0x00, 0x90, 0xFF, 0x0F, - 0x45, 0xFF, 0x35, 0x00, 0x00, 0x5C, 0xFE, 0x11, - 0x0B, 0xE8, 0xBD, 0x23, 0x2F, 0xD0, 0xB5, 0x00, - 0x00, 0x2D, 0xC0, 0xF8, 0xED, 0x9A, 0x0D, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0C, 0x9A, 0xE6, 0xD5, 0x61, 0x00, 0x00, - 0x00, 0xAD, 0xCE, 0x31, 0x54, 0xF4, 0x4A, 0x00, - 0x20, 0xFF, 0x4B, 0x00, 0x00, 0x89, 0xBD, 0x00, - 0x49, 0xFF, 0x27, 0x00, 0x00, 0x56, 0xF7, 0x02, - 0x3C, 0xFF, 0x45, 0x00, 0x00, 0x6B, 0xFF, 0x16, - 0x05, 0xE1, 0xBE, 0x0C, 0x16, 0xCF, 0xFF, 0x1C, - 0x00, 0x35, 0xE2, 0xFA, 0xD5, 0x7F, 0xFF, 0x0D, - 0x00, 0x00, 0x03, 0x18, 0x02, 0x7D, 0xE4, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0x97, 0x00, - 0x00, 0x26, 0x39, 0x1B, 0x8E, 0xF2, 0x20, 0x00, - 0x00, 0x3B, 0xDC, 0xF8, 0xD2, 0x3D, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0B, 0x24, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0A, 0x20, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x0B, 0x24, 0x24, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0A, 0x20, 0x20, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x1B, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0xF1, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x24, 0xD5, 0x71, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x13, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0xD5, 0xCE, - 0x00, 0x00, 0x00, 0x43, 0xCA, 0xD9, 0x57, 0x01, - 0x00, 0x36, 0xBC, 0xE3, 0x65, 0x04, 0x00, 0x00, - 0x08, 0x94, 0xFA, 0x95, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x21, 0xA3, 0xF0, 0x81, 0x0E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB0, 0xEC, 0x76, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xBD, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xCE, 0xD5, 0x51, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x58, 0xDA, 0xC9, 0x43, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x67, 0xE5, 0xBC, 0x35, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x98, 0xFA, 0x94, - 0x00, 0x00, 0x0F, 0x83, 0xF0, 0xA2, 0x21, 0x00, - 0x00, 0x77, 0xED, 0xAF, 0x2B, 0x00, 0x00, 0x00, - 0x00, 0xBD, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2B, 0xB1, 0xDB, 0xEB, 0xDD, 0xA0, 0x1F, 0x00, - 0x50, 0xFF, 0x5F, 0x25, 0x43, 0xD6, 0xDA, 0x02, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x5D, 0xFF, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xE4, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x4F, 0xF1, 0x49, 0x00, - 0x00, 0x00, 0x00, 0x63, 0xEC, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x14, 0xF7, 0x59, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x45, 0xF8, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x10, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0A, 0x83, 0xD6, 0xE9, 0xB6, 0x23, - 0x00, 0x09, 0xC8, 0xCD, 0x3F, 0x32, 0xC5, 0xC9, - 0x00, 0x86, 0xED, 0x1B, 0x8F, 0xE5, 0xDE, 0xFF, - 0x04, 0xEE, 0x84, 0x8E, 0xDE, 0x38, 0x7D, 0xFF, - 0x30, 0xFF, 0x50, 0xF8, 0x5F, 0x00, 0x53, 0xFF, - 0x49, 0xFF, 0x65, 0xFF, 0x2A, 0x00, 0x95, 0xFF, - 0x46, 0xFF, 0x71, 0xFF, 0x23, 0x0D, 0xE4, 0xFF, - 0x21, 0xFF, 0x74, 0xFF, 0x4D, 0x8E, 0x9D, 0xFF, - 0x00, 0xD1, 0xB2, 0xA6, 0xFD, 0xA5, 0x50, 0xFF, - 0x00, 0x42, 0xFC, 0x85, 0x31, 0x25, 0x41, 0x20, - 0x00, 0x00, 0x4A, 0xD0, 0xFA, 0xD8, 0x5F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0xA5, 0xFB, 0x18, 0x00, 0x00, - 0x1F, 0x00, 0x10, 0xF3, 0xEC, 0x77, 0x00, 0x00, - 0x20, 0x00, 0x6B, 0xBA, 0x92, 0xD8, 0x00, 0x00, - 0x20, 0x00, 0xCD, 0x60, 0x38, 0xFF, 0x3B, 0x00, - 0x20, 0x30, 0xF8, 0x0F, 0x00, 0xDC, 0x9D, 0x00, - 0x20, 0x93, 0xAE, 0x00, 0x00, 0x83, 0xF3, 0x0C, - 0xF1, 0xED, 0xF7, 0xF0, 0xF0, 0xF5, 0xFF, 0x62, - 0x77, 0xE4, 0x21, 0x20, 0x20, 0x20, 0xC0, 0xC4, - 0xBB, 0x78, 0x00, 0x00, 0x00, 0x00, 0x4D, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xF4, 0xC6, 0x43, - 0x00, 0x50, 0xFF, 0x2E, 0x15, 0x30, 0xB6, 0xF3, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x59, 0xFE, - 0x00, 0x50, 0xFF, 0x20, 0x01, 0x30, 0xCB, 0x81, - 0x00, 0x50, 0xFF, 0xF2, 0xFA, 0xFF, 0x82, 0x00, - 0x00, 0x50, 0xFF, 0x3C, 0x30, 0x70, 0xEE, 0x96, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x64, 0xFF, - 0x00, 0x50, 0xFF, 0x2E, 0x11, 0x24, 0xA5, 0xFA, - 0x27, 0x50, 0xFF, 0xFF, 0xFF, 0xF8, 0xD5, 0x64, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x33, 0xB2, 0xEE, 0xF8, 0xDB, 0x74, - 0x08, 0x43, 0xF8, 0x9C, 0x2A, 0x16, 0x41, 0x5D, - 0x14, 0xDE, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x32, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4A, 0xFF, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0xFF, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x17, 0xE6, 0xBA, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x0A, 0x4F, 0xFC, 0xB6, 0x3A, 0x16, 0x30, 0x4B, - 0x00, 0x00, 0x3B, 0xB7, 0xF1, 0xF8, 0xD8, 0x6E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0xFF, 0xFD, 0xEB, 0xB3, 0x3E, 0x00, - 0x50, 0xFF, 0x2E, 0x14, 0x32, 0x9B, 0xFD, 0x4C, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xB6, 0xD2, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x67, 0xFF, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x54, 0xFF, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x67, 0xFA, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0xBA, 0xB5, - 0x50, 0xFF, 0x2E, 0x18, 0x3E, 0xA7, 0xEF, 0x2A, - 0x50, 0xFF, 0xFF, 0xFD, 0xE8, 0xAA, 0x29, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, - 0x00, 0x50, 0xFF, 0x2E, 0x10, 0x10, 0x10, 0x0B, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0E, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x1A, 0x50, 0xFF, 0xF2, 0xF0, 0xF0, 0xF0, 0x00, - 0x06, 0x50, 0xFF, 0x3C, 0x20, 0x20, 0x20, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x2E, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x50, 0xFF, 0x2E, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xF2, 0xF0, 0xF0, 0xF0, 0x4B, - 0x00, 0x50, 0xFF, 0x3C, 0x20, 0x20, 0x20, 0x0A, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x25, 0xA2, 0xE5, 0xFA, 0xE9, 0xB9, - 0x00, 0x38, 0xF3, 0xA8, 0x30, 0x14, 0x2C, 0x66, - 0x01, 0xD9, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xFF, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4A, 0xFF, 0x25, 0x00, 0x00, 0xE8, 0xF0, 0xF0, - 0x34, 0xFF, 0x47, 0x00, 0x00, 0x1F, 0x66, 0xFF, - 0x03, 0xDF, 0xC0, 0x04, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x40, 0xF6, 0xC0, 0x43, 0x15, 0x63, 0xFF, - 0x00, 0x00, 0x2C, 0xA8, 0xEA, 0xFB, 0xE8, 0xB9, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x62, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x61, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x6E, 0xFF, 0xF2, 0xF0, 0xF0, 0xF5, 0xFF, 0x20, - 0x70, 0xFF, 0x3C, 0x20, 0x20, 0x66, 0xFF, 0x20, - 0x70, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x70, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x63, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x10, 0x10, 0x5B, 0xFF, 0x2E, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x10, 0x10, 0x5B, 0xFF, 0x2E, 0x10, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x58, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, - 0x00, 0x00, 0x05, 0x10, 0x10, 0x5B, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x1F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x1C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xFD, 0x09, - 0x00, 0x26, 0x53, 0x1E, 0x22, 0xC5, 0xB3, 0x00, - 0x00, 0x37, 0xD5, 0xF9, 0xF2, 0xA8, 0x13, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x9E, 0xB9, 0x03, - 0x50, 0xFF, 0x20, 0x00, 0x74, 0xD7, 0x0F, 0x00, - 0x50, 0xFF, 0x20, 0x4B, 0xEA, 0x24, 0x00, 0x00, - 0x50, 0xFF, 0x4C, 0xED, 0x41, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0xC6, 0xD7, 0x0A, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x31, 0xD5, 0xB3, 0x03, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x1E, 0xE5, 0x9A, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x2E, 0xF0, 0x7E, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x41, 0xF8, 0x62, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x2E, 0x10, 0x10, 0x10, 0x0D, - 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0xE5, 0x02, 0x00, 0x0C, 0xF6, 0xFF, - 0x50, 0xFF, 0xD7, 0x40, 0x00, 0x5A, 0xD6, 0xFF, - 0x50, 0xFF, 0x8C, 0x98, 0x00, 0xB0, 0x8A, 0xFF, - 0x50, 0xFF, 0x41, 0xEB, 0x12, 0xE5, 0x52, 0xFF, - 0x50, 0xFF, 0x20, 0xD7, 0xA5, 0xA4, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x8C, 0xFF, 0x58, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x41, 0xFC, 0x11, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xFF, 0x90, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x70, 0xFF, 0xFA, 0x25, 0x00, 0x50, 0xFF, 0x20, - 0x70, 0xFF, 0xBD, 0xB1, 0x00, 0x50, 0xFF, 0x20, - 0x70, 0xFF, 0x44, 0xFC, 0x42, 0x50, 0xFF, 0x20, - 0x70, 0xFF, 0x20, 0xA3, 0xCF, 0x52, 0xFF, 0x20, - 0x70, 0xFF, 0x20, 0x28, 0xFD, 0xB3, 0xFF, 0x20, - 0x70, 0xFF, 0x20, 0x00, 0xA9, 0xFF, 0xFF, 0x20, - 0x70, 0xFF, 0x20, 0x00, 0x2D, 0xFE, 0xFF, 0x20, - 0x70, 0xFF, 0x20, 0x00, 0x00, 0xAF, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x73, 0xDF, 0xF9, 0xD2, 0x50, 0x00, - 0x00, 0x79, 0xEF, 0x4A, 0x17, 0x68, 0xFB, 0x48, - 0x09, 0xF2, 0x73, 0x00, 0x00, 0x00, 0xA7, 0xCA, - 0x3A, 0xFF, 0x33, 0x00, 0x00, 0x00, 0x64, 0xFE, - 0x4C, 0xFF, 0x22, 0x00, 0x00, 0x00, 0x53, 0xFF, - 0x3A, 0xFF, 0x33, 0x00, 0x00, 0x00, 0x64, 0xFE, - 0x0A, 0xF3, 0x74, 0x00, 0x00, 0x00, 0xA7, 0xCB, - 0x00, 0x7D, 0xEE, 0x4A, 0x16, 0x68, 0xFB, 0x4B, - 0x00, 0x01, 0x75, 0xE0, 0xFA, 0xD3, 0x53, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xF7, 0xD0, 0x44, - 0x00, 0x50, 0xFF, 0x2E, 0x11, 0x29, 0xB3, 0xF0, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x59, 0xFF, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x27, 0xC8, 0xCF, - 0x00, 0x50, 0xFF, 0xF2, 0xF6, 0xF8, 0xAB, 0x1B, - 0x00, 0x50, 0xFF, 0x3C, 0x1B, 0x04, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x73, 0xDF, 0xF9, 0xD2, 0x50, 0x00, - 0x06, 0x79, 0xEF, 0x4A, 0x17, 0x68, 0xFB, 0x48, - 0x20, 0xF2, 0x73, 0x00, 0x00, 0x00, 0xA7, 0xCA, - 0x3A, 0xFF, 0x33, 0x00, 0x00, 0x00, 0x64, 0xFE, - 0x4C, 0xFF, 0x22, 0x00, 0x00, 0x00, 0x53, 0xFF, - 0x3A, 0xFF, 0x33, 0x00, 0x00, 0x00, 0x64, 0xFE, - 0x09, 0xF2, 0x74, 0x00, 0x00, 0x00, 0xA7, 0xCA, - 0x00, 0x79, 0xEE, 0x4A, 0x16, 0x68, 0xFB, 0x47, - 0x00, 0x00, 0x77, 0xE3, 0xFE, 0xFF, 0x64, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0xA4, 0xEF, 0x82, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xE4, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xFF, 0xF9, 0xD5, 0x4C, 0x00, - 0x00, 0x50, 0xFF, 0x2E, 0x1D, 0xA5, 0xF5, 0x09, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x59, 0xFF, 0x11, - 0x0A, 0x50, 0xFF, 0x20, 0x17, 0xC0, 0xB1, 0x00, - 0x1C, 0x50, 0xFF, 0xF3, 0xFF, 0xA5, 0x0A, 0x00, - 0x0B, 0x50, 0xFF, 0x3C, 0xA2, 0xBB, 0x01, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x12, 0xE9, 0x74, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x59, 0xF9, 0x30, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0xB5, 0xD6, - 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4F, 0xCF, 0xF9, 0xF1, 0xCE, 0x5F, 0x00, - 0x20, 0xFB, 0x83, 0x19, 0x1F, 0x4E, 0x4F, 0x00, - 0x4A, 0xFF, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x12, 0xE6, 0xE3, 0x6F, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x15, 0x88, 0xE7, 0xFB, 0xAD, 0x22, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x50, 0xDC, 0xDE, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xFF, 0x17, - 0x3D, 0x86, 0x3B, 0x15, 0x32, 0xC3, 0xD1, 0x00, - 0x33, 0xB2, 0xE5, 0xFC, 0xEB, 0xA3, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x10, 0x10, 0x10, 0x5B, 0xFF, 0x2E, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x4C, 0xFF, 0x22, 0x00, 0x00, 0x52, 0xFF, 0x1C, - 0x33, 0xFF, 0x3E, 0x00, 0x00, 0x71, 0xFC, 0x07, - 0x03, 0xDE, 0xB7, 0x1F, 0x2F, 0xDC, 0xAE, 0x00, - 0x00, 0x2C, 0xBF, 0xF7, 0xF0, 0xA3, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xB8, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x0E, 0xF3, - 0x57, 0xFD, 0x1D, 0x00, 0x00, 0x00, 0x6A, 0xBF, - 0x07, 0xEE, 0x7F, 0x00, 0x00, 0x00, 0xCF, 0x5D, - 0x00, 0x95, 0xE0, 0x02, 0x00, 0x36, 0xF0, 0x09, - 0x00, 0x34, 0xFF, 0x48, 0x00, 0x9D, 0x97, 0x00, - 0x00, 0x00, 0xD3, 0xAD, 0x0E, 0xF4, 0x35, 0x00, - 0x00, 0x00, 0x72, 0xFA, 0x80, 0xD2, 0x00, 0x00, - 0x00, 0x00, 0x16, 0xFB, 0xFD, 0x6F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xB0, 0xF9, 0x13, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xF4, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9, - 0xAC, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, - 0x87, 0xA4, 0x00, 0x84, 0xFB, 0x0C, 0x1B, 0xE9, - 0x61, 0xCB, 0x00, 0xC5, 0xFF, 0x48, 0x44, 0xC0, - 0x3C, 0xF2, 0x0C, 0xF9, 0xBF, 0x88, 0x6D, 0x97, - 0x17, 0xFF, 0x61, 0xD2, 0x6F, 0xC8, 0x96, 0x6E, - 0x00, 0xF1, 0xC8, 0x93, 0x30, 0xFB, 0xCC, 0x45, - 0x00, 0xCC, 0xFF, 0x55, 0x02, 0xEF, 0xFF, 0x1C, - 0x00, 0xA7, 0xFF, 0x17, 0x00, 0xB3, 0xF3, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x81, 0xFE, 0x52, 0x00, 0x00, 0x00, 0x89, 0xC2, - 0x12, 0x90, 0xEC, 0x1A, 0x00, 0x4B, 0xE9, 0x1B, - 0x00, 0x07, 0xD2, 0xBB, 0x20, 0xEB, 0x46, 0x00, - 0x00, 0x00, 0x2C, 0xF7, 0xEB, 0x82, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xAC, 0xFF, 0x33, 0x00, 0x00, - 0x00, 0x00, 0x4C, 0xE9, 0xC4, 0xD5, 0x08, 0x00, - 0x00, 0x1E, 0xEB, 0x46, 0x1C, 0xEE, 0x92, 0x00, - 0x04, 0xC6, 0x84, 0x00, 0x00, 0x55, 0xFE, 0x46, - 0x8C, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x9F, 0xE6, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0xFE, 0x39, 0x00, 0x00, 0x00, 0x15, 0xE9, - 0x00, 0xB4, 0xD3, 0x05, 0x00, 0x00, 0xAD, 0xA2, - 0x00, 0x1F, 0xF4, 0x79, 0x00, 0x5C, 0xE7, 0x12, - 0x00, 0x00, 0x73, 0xF6, 0x3D, 0xEE, 0x51, 0x00, - 0x00, 0x00, 0x03, 0xCF, 0xFB, 0xA8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x57, 0xFF, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x10, 0x10, 0x10, 0x10, 0x21, 0xE4, 0xA1, - 0x00, 0x00, 0x00, 0x00, 0x02, 0xB7, 0xC4, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x83, 0xE0, 0x16, 0x00, - 0x00, 0x00, 0x00, 0x4D, 0xF1, 0x2D, 0x00, 0x00, - 0x00, 0x00, 0x24, 0xED, 0x4B, 0x00, 0x00, 0x00, - 0x00, 0x0B, 0xD3, 0x73, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xA7, 0xA9, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x28, - 0x00, 0x00, 0x50, 0xFF, 0x2E, 0x10, 0x10, 0x02, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0xF2, 0xF0, 0xF0, 0x25, - 0x00, 0x00, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x05, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x42, 0xDD, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xC6, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x4A, 0xD6, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xCD, 0x54, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x52, 0xCF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xD4, 0x4C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5A, 0xC7, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xDA, 0x43, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0xBF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0xE0, 0x3A, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xB6, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE5, 0x32, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xAE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x58, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x00, - 0x00, 0x05, 0x10, 0x10, 0x5B, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x52, 0xF0, 0xF0, 0xF5, 0xFF, 0x20, 0x00, - 0x00, 0x0B, 0x20, 0x20, 0x20, 0x20, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0xA7, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA5, 0xFA, 0x19, 0x00, - 0x00, 0x00, 0x00, 0x18, 0xF2, 0xB4, 0x81, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xA1, 0x34, 0xE7, 0x05, - 0x00, 0x00, 0x05, 0xE6, 0x34, 0x00, 0xC7, 0x5A, - 0x00, 0x00, 0x58, 0xC7, 0x00, 0x00, 0x5B, 0xC7, - 0x00, 0x00, 0xC5, 0x5A, 0x00, 0x00, 0x06, 0xE8, - 0x00, 0x31, 0xE8, 0x06, 0x00, 0x00, 0x00, 0x82, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0xCD, 0xBE, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0C, 0xB6, 0x86, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1E, 0xB1, 0xE9, 0xFC, 0xE3, 0x60, 0x00, - 0x00, 0x25, 0x55, 0x1A, 0x1D, 0xAE, 0xF6, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFF, 0x1E, - 0x00, 0x12, 0x89, 0xD2, 0xEB, 0xF5, 0xFF, 0x20, - 0x08, 0xD7, 0xCA, 0x51, 0x29, 0x66, 0xFF, 0x20, - 0x44, 0xFF, 0x2E, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x2C, 0xFF, 0x87, 0x18, 0x47, 0xCF, 0xFF, 0x4B, - 0x00, 0x6B, 0xE7, 0xF6, 0xB7, 0x30, 0xAD, 0xF4, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x40, 0xC1, 0xF7, 0xBD, 0x16, 0x00, - 0x50, 0xFF, 0xCB, 0x42, 0x25, 0xD8, 0xA9, 0x00, - 0x50, 0xFF, 0x3C, 0x00, 0x00, 0x72, 0xF9, 0x05, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x53, 0xFF, 0x1B, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x5A, 0xFF, 0x11, - 0x50, 0xFF, 0x21, 0x00, 0x00, 0x8A, 0xE1, 0x00, - 0x56, 0xFF, 0xBA, 0x28, 0x3C, 0xEF, 0x76, 0x00, - 0x8F, 0xEB, 0x58, 0xE4, 0xF2, 0x8E, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x89, 0xE4, 0xFA, 0xE4, 0x7C, 0x00, - 0x00, 0xA2, 0xEF, 0x52, 0x16, 0x33, 0x4D, 0x00, - 0x1A, 0xFE, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1B, 0xFE, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xA5, 0xF0, 0x5A, 0x17, 0x2A, 0x47, 0x00, - 0x00, 0x08, 0x8C, 0xE5, 0xFA, 0xE1, 0x74, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x10, 0xAB, 0xF6, 0xD4, 0x84, 0xFF, 0x20, - 0x00, 0xAA, 0xD8, 0x2A, 0x37, 0xD6, 0xFF, 0x20, - 0x16, 0xFD, 0x5A, 0x00, 0x00, 0x51, 0xFF, 0x20, - 0x43, 0xFF, 0x29, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x4B, 0xFF, 0x23, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x30, 0xFF, 0x41, 0x00, 0x00, 0x6E, 0xFF, 0x20, - 0x02, 0xDC, 0xB6, 0x1C, 0x5A, 0xDD, 0xFF, 0x20, - 0x00, 0x32, 0xD4, 0xF6, 0xA8, 0x5D, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x87, 0xE9, 0xF7, 0xBB, 0x1E, 0x00, - 0x00, 0x92, 0xC7, 0x28, 0x28, 0xC9, 0xB9, 0x00, - 0x13, 0xFB, 0x3B, 0x00, 0x00, 0x5D, 0xFC, 0x08, - 0x44, 0xFF, 0xF1, 0xF0, 0xF0, 0xF5, 0xFF, 0x1C, - 0x48, 0xFF, 0x42, 0x20, 0x20, 0x20, 0x20, 0x04, - 0x1E, 0xFF, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xA9, 0xE8, 0x4F, 0x16, 0x22, 0x65, 0x13, - 0x00, 0x08, 0x89, 0xE1, 0xFB, 0xE8, 0xB0, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x59, 0xD4, 0xFA, 0xF4, 0xCD, - 0x00, 0x00, 0x21, 0xFC, 0x85, 0x1B, 0x16, 0x34, - 0x00, 0x00, 0x4E, 0xFF, 0x22, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x10, 0x5B, 0xFF, 0x2E, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0D, 0xA9, 0xF6, 0xCF, 0x7F, 0xFF, 0x20, - 0x00, 0xA4, 0xD8, 0x29, 0x38, 0xD9, 0xFF, 0x20, - 0x15, 0xFC, 0x5B, 0x00, 0x00, 0x53, 0xFF, 0x20, - 0x43, 0xFF, 0x2A, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x4B, 0xFF, 0x23, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x2E, 0xFF, 0x46, 0x00, 0x00, 0x72, 0xFF, 0x20, - 0x01, 0xD8, 0xBF, 0x1D, 0x56, 0xE3, 0xFF, 0x1E, - 0x00, 0x2E, 0xD1, 0xF7, 0xB7, 0x66, 0xFF, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xEF, 0x01, - 0x00, 0x4A, 0x3A, 0x14, 0x36, 0xDB, 0x8D, 0x00, - 0x00, 0x75, 0xDF, 0xFA, 0xE9, 0x92, 0x07, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x42, 0xB5, 0xF5, 0xE8, 0x5A, - 0x00, 0x50, 0xFF, 0xE4, 0x5F, 0x1B, 0xAA, 0xF1, - 0x00, 0x50, 0xFF, 0x4E, 0x00, 0x00, 0x55, 0xFF, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x43, 0xD8, 0x1B, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x00, 0x00, - 0x04, 0x10, 0x10, 0x5B, 0xFF, 0x20, 0x00, 0x00, - 0x1C, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0xD8, 0x1B, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x58, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x00, - 0x00, 0x05, 0x10, 0x10, 0x5B, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x1D, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x5D, 0xFE, 0x0A, 0x00, - 0x2A, 0x54, 0x1F, 0x1A, 0xB6, 0xBF, 0x00, 0x00, - 0x35, 0xD1, 0xF5, 0xF5, 0xB8, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x32, 0xF4, 0x4D, - 0x00, 0x50, 0xFF, 0x20, 0x17, 0xE2, 0x7B, 0x00, - 0x00, 0x50, 0xFF, 0x26, 0xC5, 0xA9, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0xB7, 0xEE, 0x0B, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x6F, 0xFD, 0x82, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x77, 0xFF, 0x5A, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0xA0, 0xF7, 0x38, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x06, 0xC4, 0xE8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2C, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x00, 0x00, - 0x02, 0x10, 0x10, 0x5B, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x45, 0xE8, 0x7A, 0x2E, 0xEB, 0xAA, - 0x50, 0xFF, 0x9E, 0x7C, 0xEF, 0x83, 0x79, 0xFF, - 0x50, 0xFF, 0x5F, 0x53, 0xFF, 0x5D, 0x51, 0xFF, - 0x50, 0xFF, 0x22, 0x50, 0xFF, 0x22, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x50, 0xFF, 0x20, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x50, 0xFF, 0x20, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x50, 0xFF, 0x20, 0x50, 0xFF, - 0x50, 0xFF, 0x20, 0x50, 0xFF, 0x20, 0x50, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x42, 0xB5, 0xF5, 0xE8, 0x5A, - 0x10, 0x50, 0xFF, 0xE4, 0x5F, 0x1B, 0xAA, 0xF1, - 0x1F, 0x50, 0xFF, 0x4E, 0x00, 0x00, 0x55, 0xFF, - 0x20, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x20, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x20, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x20, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x20, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x85, 0xE3, 0xFA, 0xD9, 0x6A, 0x00, - 0x04, 0x9C, 0xE8, 0x45, 0x16, 0x61, 0xFA, 0x6F, - 0x35, 0xFD, 0x62, 0x00, 0x00, 0x00, 0x94, 0xE6, - 0x66, 0xFF, 0x28, 0x00, 0x00, 0x00, 0x59, 0xFF, - 0x67, 0xFF, 0x28, 0x00, 0x00, 0x00, 0x59, 0xFF, - 0x3A, 0xFE, 0x61, 0x00, 0x00, 0x00, 0x93, 0xE6, - 0x20, 0xA2, 0xE6, 0x44, 0x16, 0x5E, 0xF9, 0x71, - 0x20, 0x07, 0x8A, 0xE5, 0xFA, 0xDA, 0x6D, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x40, 0xC1, 0xF7, 0xBD, 0x16, - 0x00, 0x50, 0xFF, 0xCB, 0x42, 0x25, 0xD8, 0xA9, - 0x00, 0x50, 0xFF, 0x3C, 0x00, 0x00, 0x72, 0xF9, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x53, 0xFF, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x5A, 0xFF, - 0x00, 0x50, 0xFF, 0x21, 0x00, 0x00, 0x8A, 0xE1, - 0x00, 0x50, 0xFF, 0xBA, 0x27, 0x3C, 0xEF, 0x76, - 0x00, 0x50, 0xFF, 0x74, 0xE5, 0xF1, 0x8E, 0x02, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0xAB, 0xF6, 0xD4, 0x5A, 0xFF, 0x20, - 0x00, 0xAA, 0xD8, 0x2A, 0x37, 0xD5, 0xFF, 0x20, - 0x1B, 0xFD, 0x5A, 0x00, 0x00, 0x51, 0xFF, 0x20, - 0x5E, 0xFF, 0x29, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x5C, 0xFF, 0x23, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x30, 0xFF, 0x41, 0x00, 0x00, 0x6E, 0xFF, 0x20, - 0x02, 0xDC, 0xB6, 0x1C, 0x5A, 0xDD, 0xFF, 0x20, - 0x00, 0x32, 0xD4, 0xF6, 0xA8, 0x5D, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x44, 0xBE, 0xF8, 0xFF, 0x20, - 0x00, 0x50, 0xFF, 0xD3, 0x42, 0x5F, 0xFF, 0x20, - 0x00, 0x50, 0xFF, 0x4B, 0x00, 0x11, 0x38, 0x07, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x66, 0xDA, 0xFB, 0xF0, 0xC9, 0x1D, - 0x00, 0x2D, 0xFF, 0x82, 0x1C, 0x1C, 0x45, 0x13, - 0x00, 0x3F, 0xFF, 0x70, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xA1, 0xFE, 0xEB, 0x9D, 0x47, 0x01, - 0x00, 0x00, 0x00, 0x22, 0x71, 0xC1, 0xFF, 0xAD, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xFF, - 0x00, 0x36, 0x70, 0x2C, 0x14, 0x33, 0xBD, 0xE0, - 0x00, 0x2B, 0xB8, 0xE8, 0xFD, 0xEF, 0xAE, 0x25, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x10, 0x5B, 0xFF, 0x2E, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x48, 0xFF, 0x24, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x1D, 0xFE, 0x95, 0x26, 0x18, 0x31, - 0x00, 0x00, 0x00, 0x6F, 0xDE, 0xFB, 0xF8, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x50, 0xFF, 0x20, 0x00, 0x00, 0x50, 0xFF, 0x20, - 0x4C, 0xFF, 0x27, 0x00, 0x00, 0x8E, 0xFF, 0x20, - 0x26, 0xFF, 0x93, 0x37, 0x99, 0xE6, 0xFF, 0x20, - 0x00, 0x82, 0xF2, 0xEF, 0x97, 0x5A, 0xFF, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0xF4, 0x0C, 0x00, 0x00, 0x00, 0x63, 0xD1, - 0x0C, 0xF3, 0x63, 0x00, 0x00, 0x00, 0xC9, 0x6C, - 0x00, 0x9E, 0xC5, 0x00, 0x00, 0x2E, 0xF6, 0x10, - 0x00, 0x3B, 0xFF, 0x27, 0x00, 0x95, 0xA2, 0x00, - 0x00, 0x00, 0xD8, 0x89, 0x0A, 0xF0, 0x3D, 0x00, - 0x00, 0x00, 0x76, 0xE6, 0x63, 0xD7, 0x00, 0x00, - 0x00, 0x00, 0x18, 0xFB, 0xEF, 0x73, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xB1, 0xF9, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD6, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, - 0xAB, 0x93, 0x00, 0x7E, 0xFE, 0x0F, 0x00, 0xEB, - 0x7F, 0xBD, 0x00, 0xC1, 0xC1, 0x43, 0x14, 0xE1, - 0x54, 0xE7, 0x0A, 0xD5, 0x71, 0x79, 0x3C, 0xB1, - 0x28, 0xFF, 0x58, 0x9E, 0x3A, 0xAE, 0x64, 0x82, - 0x04, 0xF8, 0xC5, 0x61, 0x08, 0xDD, 0x8C, 0x52, - 0x00, 0xD1, 0xFF, 0x23, 0x00, 0xCB, 0xCC, 0x23, - 0x00, 0xA6, 0xE6, 0x00, 0x00, 0x94, 0xF2, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x56, 0xE9, 0xB0, 0x00, 0x00, 0x1B, 0xF1, 0x7A, - 0x11, 0x4E, 0xFF, 0x61, 0x00, 0xB0, 0xA6, 0x00, - 0x00, 0x00, 0x9D, 0xF2, 0x73, 0xEC, 0x15, 0x00, - 0x00, 0x00, 0x0D, 0xDF, 0xFF, 0x5E, 0x00, 0x00, - 0x00, 0x00, 0x13, 0xE8, 0xFF, 0x75, 0x00, 0x00, - 0x00, 0x00, 0xA9, 0xB2, 0x88, 0xF8, 0x2E, 0x00, - 0x00, 0x58, 0xEC, 0x17, 0x06, 0xD0, 0xD1, 0x06, - 0x18, 0xED, 0x56, 0x00, 0x00, 0x2C, 0xF8, 0x8B, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0x33, 0x00, 0x00, 0x00, 0x53, 0xE0, - 0x00, 0xC9, 0x99, 0x00, 0x00, 0x00, 0xBA, 0x79, - 0x00, 0x62, 0xF3, 0x0D, 0x00, 0x23, 0xF8, 0x16, - 0x00, 0x0A, 0xF0, 0x67, 0x00, 0x88, 0xA7, 0x00, - 0x00, 0x00, 0x93, 0xCE, 0x05, 0xE9, 0x3E, 0x00, - 0x00, 0x00, 0x2B, 0xFF, 0x8C, 0xD5, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xC4, 0xFF, 0x6C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x63, 0xF4, 0x0E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x9B, 0x99, 0x00, 0x00, 0x00, - 0x00, 0x12, 0x4D, 0xF7, 0x2B, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xE4, 0x62, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x10, 0x10, 0x10, 0x17, 0xD3, 0xA9, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x97, 0xD7, 0x0C, 0x00, - 0x00, 0x00, 0x00, 0x5C, 0xF4, 0x2A, 0x00, 0x00, - 0x00, 0x00, 0x2B, 0xF4, 0x59, 0x00, 0x00, 0x00, - 0x00, 0x0D, 0xD8, 0x93, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xA9, 0xD1, 0x16, 0x10, 0x10, 0x10, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7A, 0xDF, 0xFC, 0x84, - 0x00, 0x00, 0x00, 0x37, 0xFF, 0x6B, 0x15, 0x08, - 0x00, 0x00, 0x00, 0x4F, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x53, 0xFF, 0x1D, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x90, 0xE8, 0x04, 0x00, 0x00, - 0x00, 0x70, 0xF7, 0xF4, 0x3B, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0x29, 0xAF, 0xCF, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x53, 0xFF, 0x1A, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x4D, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x96, 0xF8, 0xF4, 0x7B, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x1D, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xB4, 0xF9, 0xD1, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x0B, 0x19, 0x96, 0xF8, 0x0C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x1F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x4D, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x21, 0xFB, 0x62, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x61, 0xFE, 0xF4, 0x47, - 0x00, 0x00, 0x00, 0x14, 0xEE, 0x8A, 0x25, 0x09, - 0x00, 0x00, 0x00, 0x4B, 0xFF, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x50, 0xFF, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0xFE, 0x11, 0x00, 0x00, - 0x00, 0xA8, 0xF7, 0xF2, 0x76, 0x00, 0x00, 0x00, - 0x00, 0x16, 0x1A, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x5D, 0xE2, 0x8F, 0x00, 0x00, 0x00, 0x00, - 0x10, 0xF6, 0x72, 0xA8, 0xE2, 0x4C, 0x5C, 0xDF, - 0x44, 0xFF, 0x26, 0x09, 0xA8, 0xFC, 0xFC, 0x8D, - 0x09, 0x20, 0x04, 0x00, 0x00, 0x0E, 0x12, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; diff --git a/src/gui/glwidget.cpp b/src/gui/glwidget.cpp new file mode 100644 index 0000000..109c1c9 --- /dev/null +++ b/src/gui/glwidget.cpp @@ -0,0 +1,131 @@ +// OpenGL implementation in Qt +// Parts of this are blantantly ripped off from BSNES (thanks Byuu!) +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/14/2010 Created this file +// + +#include "glwidget.h" + +#include "settings.h" + +GLWidget::GLWidget(QWidget * parent/*= 0*/): QGLWidget(parent), texture(0), + textureWidth(0), textureHeight(0), buffer(0), rasterWidth(64), rasterHeight(64) +// textureWidth(0), textureHeight(0), buffer(0), rasterWidth(256), rasterHeight(256) +{ +} + +GLWidget::~GLWidget() +{ +} + +void GLWidget::initializeGL() +{ + format().setDoubleBuffer(true); + resizeGL(rasterWidth, rasterHeight); + + glDisable(GL_ALPHA_TEST); + glDisable(GL_BLEND); + glDisable(GL_DEPTH_TEST); + glDisable(GL_POLYGON_SMOOTH); + glDisable(GL_STENCIL_TEST); + glEnable(GL_DITHER); + glEnable(GL_TEXTURE_2D); + glClearColor(0.0, 0.0, 0.0, 0.0); +} + +void GLWidget::paintGL() +{ + unsigned outputWidth = width(); + unsigned outputHeight = height(); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, outputWidth, 0, outputHeight, -1.0, 1.0); + glViewport(0, 0, outputWidth, outputHeight); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (smoothGLOutput ? GL_LINEAR : GL_NEAREST)); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (smoothGLOutput ? GL_LINEAR : GL_NEAREST)); +// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST /*GL_LINEAR*/); +// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST /*GL_LINEAR*/); +// glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, buffer); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buffer); + + double w = (double)rasterWidth / (double)textureWidth; + double h = (double)rasterHeight / (double)textureHeight; + unsigned u = outputWidth; + unsigned v = outputHeight; + + glBegin(GL_TRIANGLE_STRIP); + glTexCoord2f(0, 0); glVertex3i(0, v, 0); + glTexCoord2f(w, 0); glVertex3i(u, v, 0); + glTexCoord2f(0, h); glVertex3i(0, 0, 0); + glTexCoord2f(w, h); glVertex3i(u, 0, 0); + glEnd(); +} + +void GLWidget::resizeGL(int width, int height) +{ + if (width > textureWidth || height > textureHeight) + { +// textureWidth = max(width, textureWidth); +// textureHeight = max(height, textureHeight); +// Seems that power of 2 sizes are still mandatory... + textureWidth = 1024;//(width > textureWidth ? width : textureWidth); + textureHeight = 512;//(height > textureHeight ? height : textureHeight); +// textureWidth = (width > textureWidth ? width : textureWidth); +// textureHeight = (height > textureHeight ? height : textureHeight); +#if 0 +printf("Resizing: new texture width/height = %i x %i\n", textureWidth, textureHeight); +printf("Resizing: new raster width/height = %i x %i\n", rasterWidth, rasterHeight); +#endif + + if (buffer) + { + delete[] buffer; + glDeleteTextures(1, &texture); + } + + buffer = new uint32_t[textureWidth * textureHeight]; + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glPixelStorei(GL_UNPACK_ROW_LENGTH, textureWidth); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); +// glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureWidth, textureHeight, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL); + } +} + +#if 0 +class RubyGLWidget: public QGLWidget +{ + public: + GLuint texture; + unsigned textureWidth, textureHeight; + + uint32_t * buffer; + unsigned rasterWidth, rasterHeight; + + bool synchronize; + unsigned filter; + + void updateSynchronization() { + #ifdef __APPLE__ + makeCurrent(); + CGLContextObj context = CGLGetCurrentContext(); + GLint value = synchronize; //0 = draw immediately (no vsync), 1 = draw once per frame (vsync) + CGLSetParameter(context, kCGLCPSwapInterval, &value); + #endif + } +} * widget; +#endif diff --git a/src/gui/glwidget.h b/src/gui/glwidget.h new file mode 100644 index 0000000..7c8f995 --- /dev/null +++ b/src/gui/glwidget.h @@ -0,0 +1,43 @@ +// Implementation of OpenGL widget using Qt +// +// by James L. Hammons +// (C) 2010 Underground Software + +#ifndef __GLWIDGET_H__ +#define __GLWIDGET_H__ + +#include +#include + +class GLWidget: public QGLWidget +{ + Q_OBJECT + + public: + GLWidget(QWidget * parent = 0); + ~GLWidget(); + +// QSize minimumSizeHint() const; +// QSize sizeHint() const; + +// signals: +// void clicked(); + + protected: + void initializeGL(); + void paintGL(); + void resizeGL(int width, int height); + +// private: + public: + GLuint texture; + int textureWidth, textureHeight; + + uint32_t * buffer; + unsigned rasterWidth, rasterHeight; + + bool synchronize; + unsigned filter; +}; + +#endif // __GLWIDGET_H__ diff --git a/src/gui/guielements.h b/src/gui/guielements.h deleted file mode 100644 index 3dece2f..0000000 --- a/src/gui/guielements.h +++ /dev/null @@ -1,348 +0,0 @@ -// -// GUIELEMENTS.H -// -// Graphical User Interface bitmaps and such -// - -#ifndef __GUIELEMENTS_H__ -#define __GUIELEMENTS_H__ - -#include "types.h" - -#if 0 -// Okay, this is ugly but works and I can't think of any better way to handle this. So what -// we do when we pass the GIMP bitmaps into a function is pass them as a (void *) and then -// cast them as type (Bitmap *) in order to use them. Yes, it's ugly. Come up with something -// better! - -struct Bitmap { - unsigned int width; - unsigned int height; - unsigned int bytesPerPixel; // 3:RGB, 4:RGBA - unsigned char pixelData[]; -}; -#endif - -//NOTE: 32-bit pixels are in the format of ABGR... -// This may not be endian safe... Mac users? -//Using the GIMP C style bitmap is portable in that it's specified in bytes -//but we can cast it in uint32s and thus it will display correctly regardless of -//the underlying endianess. At least, in theory. ;-) - -uint32 mousePic[] = { - 6, 8, - - 0xFF00FF00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, // + - 0xFF00C600,0xFF00FF00,0x00000000,0x00000000,0x00000000,0x00000000, // @+ - 0xFF00C600,0xFF00FF00,0xFF00FF00,0x00000000,0x00000000,0x00000000, // @++ - 0xFF00C600,0xFF00C600,0xFF00FF00,0xFF00FF00,0x00000000,0x00000000, // @@++ - 0xFF00C600,0xFF00C600,0xFF00FF00,0xFF00FF00,0xFF00FF00,0x00000000, // @@+++ - 0xFF00C600,0xFF00C600,0xFF00C600,0xFF00FF00,0xFF00FF00,0xFF00FF00, // @@@+++ - 0xFF00C600,0xFF00C600,0xFF00C600,0x00000000,0x00000000,0x00000000, // @@@ - 0xFF00C600,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 // @ -/* - 0x03E0,0x0000,0x0000,0x0000,0x0000,0x0000, // + - 0x0300,0x03E0,0x0000,0x0000,0x0000,0x0000, // @+ - 0x0300,0x03E0,0x03E0,0x0000,0x0000,0x0000, // @++ - 0x0300,0x0300,0x03E0,0x03E0,0x0000,0x0000, // @@++ - 0x0300,0x0300,0x03E0,0x03E0,0x03E0,0x0000, // @@+++ - 0x0300,0x0300,0x0300,0x03E0,0x03E0,0x03E0, // @@@+++ - 0x0300,0x0300,0x0300,0x0000,0x0000,0x0000, // @@@ - 0x0300,0x0000,0x0000,0x0000,0x0000,0x0000 // @ - - 0xFFFF,0x0000,0x0000,0x0000,0x0000,0x0000, // + - 0xE318,0xFFFF,0x0000,0x0000,0x0000,0x0000, // @+ - 0xE318,0xFFFF,0xFFFF,0x0000,0x0000,0x0000, // @++ - 0xE318,0xE318,0xFFFF,0xFFFF,0x0000,0x0000, // @@++ - 0xE318,0xE318,0xFFFF,0xFFFF,0xFFFF,0x0000, // @@+++ - 0xE318,0xE318,0xE318,0xFFFF,0xFFFF,0xFFFF, // @@@+++ - 0xE318,0xE318,0xE318,0x0000,0x0000,0x0000, // @@@ - 0xE318,0x0000,0x0000,0x0000,0x0000,0x0000 // @ -*/ -}; - -uint32 upArrowBox[] = { - 8, 8, - - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0xFFBD8400, // + @@@@ . - 0xFFF7D649,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFBD8400, // +@@@@@@. - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -uint32 downArrowBox[] = { - 8, 8, - - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFF7D649,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFBD8400, // +@@@@@@. - 0xFFF7D649,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0xFFBD8400, // + @@@@ . - 0xFFF7D649,0x00000000,0x00000000,0xFFFFFFFF,0xFFFFFFFF,0x00000000,0x00000000,0xFFBD8400, // + @@ . - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -/* GIMP RGBA C-Source image dump (unlit button (16x16).png.c) */ -#if 0 -const struct { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ - unsigned char pixel_data[16 * 16 * 4 + 1]; -} -#endif -#warning Nonportable--!!! FIX !!! -uint8 pbUp[] = { -// 16, 16, 4, -//nonportable--!!! FIX !!! - "\020\0\0\0" - "\020\0\0\0" - "\4\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\26\26\40`__\203\205rr\305\216mm\344\205" - "cc\345kWW\306@??\202\16\16\16\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\2\2\2\4nll\205\277\217\217\372\251LL\377\23588\377\23155\377\227" - "22\377\22600\377\22477\377\204UU\371>;;\203\1\1\1\3\0\0\0\0\0\0\0\0\0\0\0" - "\0\2\2\2\4\225\215\215\260\271hh\377\234==\377\22499\377\22366\377\22233" - "\377\22111\377\221//\377\220--\377\221,,\377\213==\377SJJ\254\1\1\1\4\0\0" - "\0\0\0\0\0\0omm\205\271hh\377\231==\377\224::\377\22377\377\22344\377\223" - "22\377\22100\377\220..\377\220--\377\220,,\377\220++\377\213<<\377=;;\204" - "\0\0\0\0\27\27\27\"\301\220\220\372\234==\377\224::\377\22388\377\22555\377" - "\22533\377\22411\377\223//\377\222--\377\220,,\377\220++\377\221**\377\222" - "**\377\204RR\372\16\16\16\37baa\205\252MM\377\224::\377\22377\377\22655\377" - "\22433\377\22111\377\216//\377\214..\377\214,,\377\217++\377\221++\377\221" - "**\377\224**\377\22422\377=<<\203\207tt\307\23599\377\22366\377\22355\377" - "\22533\377\22111\377\215//\377\213..\377\213--\377\212,,\377\212++\377\221" - "**\377\222**\377\226**\377\227**\377dNN\306\222oo\344\23155\377\22244\377" - "\22322\377\22411\377\216//\377\213..\377\213--\377\212,,\377\212++\377\212" - "**\377\220**\377\223**\377\230))\377\231**\377xTT\345\210ff\345\23033\377" - "\22111\377\22100\377\223//\377\215..\377\213--\377\212,,\377\212++\377\212" - "**\377\212**\377\221**\377\224))\377\232))\377\233))\377yTT\344lYY\304\230" - "11\377\221//\377\220..\377\222--\377\215,,\377\212,,\377\212++\377\212**" - "\377\212**\377\211**\377\224))\377\226))\377\235))\377\235**\377dNN\305?" - ">>\177\230;;\377\220..\377\220--\377\220,,\377\217++\377\212++\377\212**" - "\377\212**\377\212**\377\222))\377\225))\377\234))\377\237))\377\23455\377" - ";;;\200\15\15\15\34\207YY\367\222--\377\220,,\377\220++\377\221++\377\222" - "**\377\220**\377\221**\377\224))\377\224))\377\232))\377\237))\377\237**" - "\377\211UU\367\14\14\14\34\0\0\0\0:88{\221CC\377\220++\377\221++\377\221" - "**\377\222**\377\223**\377\224))\377\226))\377\234))\377\237))\377\237))" - "\377\232AA\377988{\0\0\0\0\0\0\0\0\1\1\1\2NGG\243\221CC\377\223++\377\224" - "**\377\226**\377\227))\377\232))\377\235))\377\236))\377\237**\377\232BB" - "\377OGG\244\1\1\1\2\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\2""766w\204WW\365\2279" - "9\377\231,,\377\231**\377\233**\377\236++\377\23388\377\207VV\365766w\1\1" - "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\12\12\30""777w]M" - "M\272rSS\330sSS\330]MM\270777w\12\12\12\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0" -}; - -uint32 pushButtonUp[] = { - 8, 8, - - 0x00000000, 0xFF1B1B1B, 0xFF545477, 0xFF525292, 0xFF474787, 0xFF363659, 0xFF0F0F0F, 0x00000000, - 0xFF1B1B1C, 0xFF6666A7, 0xFF393995, 0xFF343492, 0xFF2F2F90, 0xFF2C2C90, 0xFF3B3B7E, 0xFF0F0F0F, - 0xFF555578, 0xFF3A3A95, 0xFF353594, 0xFF303091, 0xFF2D2D8F, 0xFF2B2B90, 0xFF2A2A92, 0xFF333358, - 0xFF545493, 0xFF343492, 0xFF303092, 0xFF2D2D8B, 0xFF2B2B8A, 0xFF2A2A8D, 0xFF292994, 0xFF3D3D83, - 0xFF484889, 0xFF2F2F90, 0xFF2D2D8F, 0xFF2B2B8A, 0xFF2A2A89, 0xFF29298E, 0xFF292998, 0xFF3D3D84, - 0xFF37375A, 0xFF2C2C90, 0xFF2B2B90, 0xFF2A2A8D, 0xFF29298E, 0xFF292995, 0xFF29299D, 0xFF34345B, - 0xFF0E0E0E, 0xFF3E3E7F, 0xFF2A2A92, 0xFF292994, 0xFF292998, 0xFF29299D, 0xFF3C3C88, 0xFF0E0E0E, - 0x00000000, 0xFF0D0D0D, 0xFF343456, 0xFF3D3D80, 0xFF3D3D82, 0xFF333358, 0xFF0D0D0D, 0x00000000 -}; - -uint8 pbuAlpha[] = { - 0xFF, 0xE4, 0xA0, 0x99, 0xA4, 0xBE, 0xF0, 0xFF, - 0xE3, 0x85, 0x00, 0x00, 0x00, 0x00, 0xAF, 0xF0, - 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, - 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, - 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, - 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, - 0xF1, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xF1, - 0xFF, 0xF2, 0xC0, 0xAD, 0xAD, 0xC0, 0xF2, 0xFF -}; - -/* GIMP RGBA C-Source image dump (Lit Button (16x16).png.c) */ -#if 0 -const struct { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ - unsigned char pixel_data[16 * 16 * 4 + 1]; -} -#endif -uint8 pbDown[] = { -// 16, 16, 4, -//nonportable--!!! FIX !!! - "\020\0\0\0" - "\020\0\0\0" - "\4\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\261\261\261\36\276\276\276\200\272\272\272" - "\302\255\255\255\343\236\236\236\343\214\214\214\302~~~\177uuu\35\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\223\223\223\3\332\332\332\200\353" - "\353\353\371\347\323\323\377\321\224\224\377\303rr\377\274jj\377\263uu\377" - "\237\212\212\377\205\205\205\370xxx\177ccc\3\0\0\0\0\0\0\0\0\0\0\0\0\236" - "\236\236\3\345\345\345\252\371\362\362\377\326\203\203\377\325BB\377\353" - "DD\377\365DD\377\365CC\377\351>>\377\31777\377\251TT\377\210\200\200\377" - "yyy\250```\3\0\0\0\0\0\0\0\0\333\333\333\200\371\362\362\377\320cc\377\356" - "GG\377\371HH\377\366FF\377\363CC\377\363BB\377\365AA\377\367@@\377\351<<" - "\377\257@@\377\203{{\377www\177\0\0\0\0\261\261\261\36\354\354\354\370\326" - "\204\204\377\356GG\377\370HH\377\362EE\377\351BB\377\340>>\377\337==\377" - "\347>>\377\357??\377\366??\377\352;;\377\242LL\377{{{\370sss\35\300\300\300" - "\200\350\324\324\377\326BB\377\371HH\377\362EE\377\341@@\377\324<<\377\326" - "<<\377\325;;\377\32199\377\335;;\377\360>>\377\370??\377\32033\377\205pp" - "\377xxx\177\274\274\274\302\322\225\225\377\353DD\377\366FF\377\351BB\377" - "\324<<\377\331==\377\335>>\377\335==\377\330;;\377\32088\377\347<<\377\365" - ">>\377\353::\377\225UU\377xxx\303\260\260\260\343\305tt\377\366EE\377\363" - "DD\377\340>>\377\326<<\377\335>>\377\342??\377\342>>\377\334<<\377\32388" - "\377\33599\377\363>>\377\371==\377\237II\377yyy\343\237\237\237\343\275l" - "l\377\365CC\377\363BB\377\337==\377\325;;\377\335==\377\342>>\377\342>>\377" - "\334<<\377\32388\377\33699\377\364>>\377\372==\377\240II\377yyy\343\216\216" - "\216\303\264vv\377\352??\377\365AA\377\347>>\377\32199\377\330;;\377\334" - "<<\377\334<<\377\327::\377\31777\377\350;;\377\371>>\377\357;;\377\227UU" - "\377xxx\302~~~\200\240\214\214\377\32188\377\367@@\377\357??\377\335;;\377" - "\32088\377\32388\377\32388\377\31777\377\33799\377\362==\377\376>>\377\326" - "55\377\204nn\377www\177vvv\34\205\205\205\370\253UU\377\353==\377\366??\377" - "\360>>\377\347<<\377\33599\377\33699\377\350;;\377\362==\377\375>>\377\362" - ";;\377\246HH\377zzz\370rrr\36\0\0\0\0xxx\177\210\200\200\377\261AA\377\353" - "==\377\370??\377\365>>\377\363>>\377\364>>\377\370>>\377\376>>\377\362<<" - "\377\266<<\377~uu\377www\177\0\0\0\0\0\0\0\0ddd\3yyy\250\203{{\377\243MM" - "\377\32155\377\354<<\377\371>>\377\372>>\377\357;;\377\32755\377\246HH\377" - "~uu\377xxx\250___\3\0\0\0\0\0\0\0\0\0\0\0\0hhh\3www\177{{{\370\205pp\377" - "\225UU\377\237JJ\377\240JJ\377\227UU\377\204nn\377zzz\370www\177```\3\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ttt\35www\200xxx\303yyy\343y" - "yy\343xxx\303xxx\177sss\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", -}; - -uint32 pushButtonDown[] = { - 8, 8, - - 0x00000000, 0xFF1B1B1B, 0xFF8B8B90, 0xFF8C8CAF, 0xFF767699, 0xFF56565B, 0xFF0F0F0F, 0x00000000, - 0xFF1B1B1B, 0xFFB8B8D6, 0xFF5555E4, 0xFF4444F2, 0xFF4040F1, 0xFF4141D5, 0xFF626282, 0xFF0F0F0F, - 0xFF8C8C91, 0xFF5555E4, 0xFF4444EF, 0xFF3E3EDC, 0xFF3B3BDB, 0xFF3D3DEC, 0xFF3E3ED4, 0xFF4B4B51, - 0xFF8D8DB1, 0xFF4444F2, 0xFF3E3EDC, 0xFF3E3EDD, 0xFF3C3CDC, 0xFF3939D9, 0xFF3C3CF3, 0xFF59597E, - 0xFF77779B, 0xFF4141F1, 0xFF3B3BDB, 0xFF3C3CDC, 0xFF3B3BDC, 0xFF3838D9, 0xFF3C3CF5, 0xFF595980, - 0xFF57575D, 0xFF4242D8, 0xFF3D3DEC, 0xFF3939D9, 0xFF3838D9, 0xFF3C3CEF, 0xFF3D3DDC, 0xFF4C4C52, - 0xFF101010, 0xFF636385, 0xFF3E3ED8, 0xFF3D3DF4, 0xFF3D3DF6, 0xFF3D3DDD, 0xFF5D5D83, 0xFF101010, - 0x00000000, 0xFF101010, 0xFF4E4E55, 0xFF5B5B83, 0xFF5B5B84, 0xFF4D4D54, 0xFF101010, 0x00000000 -}; - -uint8 pbdAlpha[] = { - 0xFF, 0xE4, 0x72, 0x68, 0x7E, 0xA7, 0xF0, 0xFF, - 0xE4, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x93, 0xF0, - 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, - 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, - 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, - 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, - 0xEF, 0x91, 0x00, 0x00, 0x00, 0x00, 0x96, 0xEF, - 0xFF, 0xEF, 0xAE, 0x98, 0x97, 0xAF, 0xEF, 0xFF -}; - -uint32 slideSwitchUp[] = { - 8, 16, - -//0C7F -> 000011 00011 11111 -> 0000 1100 0001 1000 1111 1111 -> 0C 18 FF - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -uint32 slideSwitchDown[] = { - 8, 16, - - 0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649,0xFFF7D649, // ++++++++ - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xFFBD8400, // +....... - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFF7D649,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFFF180C,0xFFBD8400, // + . - 0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400,0xFFBD8400 // ........ -}; - -#define CLOSEBOX_WIDTH 15 -#define CLOSEBOX_HEIGHT 15 - -uint32 closeBox[] = { - 15, 15, - - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF3838ED, 0xFF3838ED, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000 -}; - -uint32 closeBoxHover[] = { - 15, 15, - - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF3838ED, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF3838ED, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF52B7FF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF63BEFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF52B7FF, 0xFF63BEFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF63BEFF, 0xFF52B7FF, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF40AFFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF63BEFF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF40AFFF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF52B7FF, 0xFF52B7FF, 0xFF52B7FF, 0xFF3838ED, 0xFF6B6BFB, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF3838ED, 0xFF3838ED, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF40AFFF, 0xFF3838ED, 0xFF3838ED, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF6B6BFB, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF20A2FF, 0xFF6B6BFB, 0xFF3838ED, - 0xFF3838ED, 0xFF5858E7, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF6B6BFB, 0xFF5858E7, 0xFF3838ED, - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000 -}; - -uint32 closeBoxDown[] = { - 15, 15, - - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000, - 0xFF3838ED, 0xFF1D1DE2, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF1D1DE2, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF3838ED, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF3838ED, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0077CC, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF006EBD, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF0077CC, 0xFF006EBD, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF006EBD, 0xFF0077CC, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF0786E2, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF006EBD, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0786E2, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF0077CC, 0xFF0077CC, 0xFF0077CC, 0xFF3838ED, 0xFF2B2BC0, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF3838ED, 0xFF3838ED, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF0786E2, 0xFF3838ED, 0xFF3838ED, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF2B2BC0, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF1F9DF7, 0xFF2B2BC0, 0xFF3838ED, - 0xFF3838ED, 0xFF1D1DE2, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF2B2BC0, 0xFF1D1DE2, 0xFF3838ED, - 0x00000000, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0xFF3838ED, 0x00000000 -}; - -#endif // __GUIELEMENTS_H__ diff --git a/src/gui/guimisc.cpp b/src/gui/guimisc.cpp deleted file mode 100644 index dcd0e9c..0000000 --- a/src/gui/guimisc.cpp +++ /dev/null @@ -1,397 +0,0 @@ -// -// Miscellaneous GUI utility functions -// -// by James L. Hammons -// - -#include "guimisc.h" - -#include -#include "font1.h" -#include "font14pt.h" -#include "guielements.h" // Make this go away... -#include "sdlemu_opengl.h" -#include "vj_title_small.c" -//#include "video.h" - -// -// Case insensitive string compare function -// Taken straight out of Thinking In C++ by Bruce Eckel. Thanks Bruce! -// - -int stringCmpi(const std::string &s1, const std::string &s2) -{ - // Select the first element of each string: - std::string::const_iterator p1 = s1.begin(), p2 = s2.begin(); - - while (p1 != s1.end() && p2 != s2.end()) // Don�t run past the end - { - if (toupper(*p1) != toupper(*p2)) // Compare upper-cased chars - return (toupper(*p1) < toupper(*p2) ? -1 : 1);// Report which was lexically greater - - p1++; - p2++; - } - - // If they match up to the detected eos, say which was longer. Return 0 if the same. - return s2.size() - s1.size(); -} - -// -// Draw text at the given x/y coordinates. Can invert text as well. -// -void DrawString(uint32 * screen, uint32 x, uint32 y, bool invert, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint32 pitch = sdlemuGetOverlayWidthInPixels();//GetSDLScreenWidthInPixels(); - uint32 length = strlen(string), address = x + (y * pitch); - - uint32 color1 = 0x0080FF; - uint8 nBlue = (color1 >> 16) & 0xFF, nGreen = (color1 >> 8) & 0xFF, nRed = color1 & 0xFF; - uint8 xorMask = (invert ? 0xFF : 0x00); - - for(uint32 i=0; i> 16) & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eRed = existingColor & 0xFF; - - uint8 trans = font2[fontAddr] ^ xorMask; - uint8 invTrans = trans ^ 0xFF; - - uint32 bRed = (eRed * invTrans + nRed * trans) / 255, - bGreen = (eGreen * invTrans + nGreen * trans) / 255, - bBlue = (eBlue * invTrans + nBlue * trans) / 255; - - *(screen + address + xx + (yy * pitch)) = 0xFF000000 | (bBlue << 16) | (bGreen << 8) | bRed; - fontAddr++; - } - } - - address += FONT_WIDTH; - } -} - -// -// Draw text at the given x/y coordinates, using FG/BG colors. -// -void DrawStringOpaque(uint32 * screen, uint32 x, uint32 y, uint32 color1, uint32 color2, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint32 pitch = sdlemuGetOverlayWidthInPixels(); - uint32 length = strlen(string), address = x + (y * pitch); - - uint8 eBlue = (color2 >> 16) & 0xFF, eGreen = (color2 >> 8) & 0xFF, eRed = color2 & 0xFF, - nBlue = (color1 >> 16) & 0xFF, nGreen = (color1 >> 8) & 0xFF, nRed = color1 & 0xFF; - - for(uint32 i=0; i> 16) & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eRed = existingColor & 0xFF, -//This could be done ahead of time, instead of on each pixel... - nBlue = (color >> 16) & 0xFF, - nGreen = (color >> 8) & 0xFF, - nRed = color & 0xFF; - -//This could be sped up by using a table of 5 + 5 + 5 bits (32 levels transparency -> 32768 entries) -//Here we've modified it to have 33 levels of transparency (could have any # we want!) -//because dividing by 32 is faster than dividing by 31...! - uint8 invTrans = 32 - trans; - - uint32 bRed = (eRed * trans + nRed * invTrans) / 32; - uint32 bGreen = (eGreen * trans + nGreen * invTrans) / 32; - uint32 bBlue = (eBlue * trans + nBlue * invTrans) / 32; - - *(screen + address + xx + (yy * pitch)) = 0xFF000000 | (bBlue << 16) | (bGreen << 8) | bRed; - } - - fontAddr++; - } - } - - address += 8; - } -} - -// -// Draw text at the given x/y coordinates, using FG color and overlay alpha blending. -// -void DrawString2(uint32 * screen, uint32 x, uint32 y, uint32 color, uint8 transparency, const char * text, ...) -{ - char string[4096]; - va_list arg; - - va_start(arg, text); - vsprintf(string, text, arg); - va_end(arg); - - uint32 pitch = sdlemuGetOverlayWidthInPixels(); - uint32 length = strlen(string), address = x + (y * pitch); - - color &= 0x00FFFFFF; // Just in case alpha was passed in... - - for(uint32 i=0; i> 8) & 0xFF, - eBlue = (existingColor >> 16) & 0xFF, - - nRed = color & 0xFF, - nGreen = (color >> 8) & 0xFF, - nBlue = (color >> 16) & 0xFF; - - uint8 invTrans = 255 - trans; - uint32 bRed = (eRed * trans + nRed * invTrans) / 255; - uint32 bGreen = (eGreen * trans + nGreen * invTrans) / 255; - uint32 bBlue = (eBlue * trans + nBlue * invTrans) / 255; - - uint32 blendedColor = 0xFF000000 | bRed | (bGreen << 8) | (bBlue << 16); - - *(screen + address + xx + (yy * pitch)) = blendedColor; - - alpha++; - } - - bitmap++; - } - } -}*/ -void DrawTransparentBitmapDeprecated(uint32 * screen, uint32 x, uint32 y, uint32 * bitmap) -{ - uint32 width = bitmap[0], height = bitmap[1]; - bitmap += 2; - - uint32 pitch = sdlemuGetOverlayWidthInPixels();//GetSDLScreenWidthInPixels(); - uint32 address = x + (y * pitch); - - for(uint32 yy=0; yy> 24 != 0x00) // Pixel needs blending - { - uint8 trans = color >> 24; - uint8 invTrans = trans ^ 0xFF;//255 - trans; - - uint8 eRed = existingColor & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eBlue = (existingColor >> 16) & 0xFF, - - nRed = color & 0xFF, - nGreen = (color >> 8) & 0xFF, - nBlue = (color >> 16) & 0xFF; - - uint32 bRed = (eRed * invTrans + nRed * trans) / 255; - uint32 bGreen = (eGreen * invTrans + nGreen * trans) / 255; - uint32 bBlue = (eBlue * invTrans + nBlue * trans) / 255; - - blendedColor = 0xFF000000 | bRed | (bGreen << 8) | (bBlue << 16); - } - - *(screen + address + xx + (yy * pitch)) = blendedColor; - bitmap++; - } - } -} - -void DrawTransparentBitmap(uint32 * screen, uint32 x, uint32 y, const void * bitmap) -{ - uint32 pitch = sdlemuGetOverlayWidthInPixels(); - uint32 address = x + (y * pitch); - uint32 count = 0; - - for(uint32 yy=0; yy<((Bitmap *)bitmap)->height; yy++) - { - for(uint32 xx=0; xx<((Bitmap *)bitmap)->width; xx++) - { - uint32 color = ((uint32 *)((Bitmap *)bitmap)->pixelData)[count]; - uint32 blendedColor = color; - uint32 existingColor = *(screen + address + xx + (yy * pitch)); - - if (existingColor >> 24 != 0x00) // Pixel needs blending - { - uint8 trans = color >> 24; - uint8 invTrans = trans ^ 0xFF; - - uint8 eRed = existingColor & 0xFF, - eGreen = (existingColor >> 8) & 0xFF, - eBlue = (existingColor >> 16) & 0xFF, - - nRed = color & 0xFF, - nGreen = (color >> 8) & 0xFF, - nBlue = (color >> 16) & 0xFF; - - uint32 bRed = (eRed * invTrans + nRed * trans) / 255; - uint32 bGreen = (eGreen * invTrans + nGreen * trans) / 255; - uint32 bBlue = (eBlue * invTrans + nBlue * trans) / 255; - -// Instead of $FF, should use the alpha from the destination pixel as the final alpha value... - blendedColor = 0xFF000000 | bRed | (bGreen << 8) | (bBlue << 16); - } - - *(screen + address + xx + (yy * pitch)) = blendedColor; - count++; - } - } -} - -// -// Draw a bitmap without using blending -// -void DrawBitmap(uint32 * screen, uint32 x, uint32 y, const void * bitmap) -{ - uint32 pitch = sdlemuGetOverlayWidthInPixels(); - uint32 address = x + (y * pitch); - uint32 count = 0; - - for(uint32 yy=0; yy<((Bitmap *)bitmap)->height; yy++) - { - for(uint32 xx=0; xx<((Bitmap *)bitmap)->width; xx++) - { - *(screen + address + xx + (yy * pitch)) = ((uint32 *)((Bitmap *)bitmap)->pixelData)[count]; - count++; - } - } -} - -// -// Fill a portion of the screen with the passed in color -// -void FillScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h, uint32 color) -//void ClearScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h) -{ - uint32 pitch = sdlemuGetOverlayWidthInPixels(); - uint32 address = x + (y * pitch); - - for(uint32 yy=0; yy -#include "types.h" - -int stringCmpi(const std::string &, const std::string &); -//void DrawTransparentBitmap(uint32 * screen, uint32 x, uint32 y, uint32 * bitmap, uint8 * alpha = NULL); -void DrawTransparentBitmapDeprecated(uint32 * screen, uint32 x, uint32 y, uint32 * bitmap); -void DrawTransparentBitmap(uint32 * screen, uint32 x, uint32 y, const void * bitmap); -void DrawBitmap(uint32 * screen, uint32 x, uint32 y, const void * bitmap); -//Should call this FillScreenRectangle with a number representing the RGBA value to fill. !!! FIX !!! -//void ClearScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h); -void FillScreenRectangle(uint32 * screen, uint32 x, uint32 y, uint32 w, uint32 h, uint32 color); -void DrawStringTrans(uint32 * screen, uint32 x, uint32 y, uint32 color, uint8 opacity, const char * text, ...); -void DrawStringOpaque(uint32 * screen, uint32 x, uint32 y, uint32 color1, uint32 color2, const char * text, ...); -void DrawString(uint32 * screen, uint32 x, uint32 y, bool invert, const char * text, ...); -void DrawString2(uint32 * screen, uint32 x, uint32 y, uint32 color, uint8 transparency, const char * text, ...); - -// Useful enumerations - -enum { WINDOW_CLOSE, MENU_ITEM_CHOSEN }; - -// This is for font2 (crappy--fix!!!) - -#define FONT_WIDTH 8 -#define FONT_HEIGHT 16 - -// And this is for the various closeBox stuff--crappy--fix!!! - -#define CLOSEBOX_WIDTH 15 -#define CLOSEBOX_HEIGHT 15 - -// Okay, this is ugly but works and I can't think of any better way to handle this. So what -// we do when we pass the GIMP bitmaps into a function is pass them as a (void *) and then -// cast them as type (Bitmap *) in order to use them. Yes, it's ugly. Come up with something -// better! - -struct Bitmap { - unsigned int width; - unsigned int height; - unsigned int bytesPerPixel; // 3:RGB, 4:RGBA - unsigned char pixelData[]; -}; - -// GUI bitmaps/fonts (exported) - -extern char font1[]; -extern char font2[]; - -extern uint32 mousePic[]; -extern uint32 upArrowBox[]; -extern uint32 downArrowBox[]; -extern uint32 pushButtonUp[]; -extern uint8 pbuAlpha[]; -extern uint32 pushButtonDown[]; -extern uint8 pbdAlpha[]; -extern uint32 slideSwitchUp[]; -extern uint32 slideSwitchDown[]; -extern uint32 closeBox[]; -extern uint32 closeBoxHover[]; -extern uint32 closeBoxDown[]; - -extern uint8 pbUp[]; -extern uint8 pbDown[]; -extern uint8 vj_title_small[]; - -#endif // __GUIMISC_H__ diff --git a/src/gui/image.cpp b/src/gui/image.cpp deleted file mode 100644 index c48a6ff..0000000 --- a/src/gui/image.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// -// Static image class -// -// by James L. Hammons -// - -#include "image.h" - -#include "guimisc.h" - -Image::Image(uint32 x, uint32 y, const void * img): - Element(x, y, 0, 0), image(img) -{ -} - -void Image::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - if (image != NULL) - DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, image); -} diff --git a/src/gui/image.h b/src/gui/image.h deleted file mode 100644 index 05de59c..0000000 --- a/src/gui/image.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// Static image class -// -// by James L. Hammons -// - -#ifndef __IMAGE_H__ -#define __IMAGE_H__ - -#include "element.h" - -class Image: public Element -{ - public: - Image(uint32 x, uint32 y, const void * img); - virtual void HandleKey(SDLKey key) {} - virtual void HandleMouseMove(uint32 x, uint32 y) {} - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown) {} - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element *) {} - - protected: - uint32 fgColor, bgColor; - const void * image; -}; - -#endif // __IMAGE_H__ diff --git a/src/gui/listbox.cpp b/src/gui/listbox.cpp deleted file mode 100644 index 9b47ff9..0000000 --- a/src/gui/listbox.cpp +++ /dev/null @@ -1,242 +0,0 @@ -// -// ListBox class -// -// by James L. Hammons -// - -#include "listbox.h" - -#include "guimisc.h" - -ListBox::ListBox(uint32 x, uint32 y, uint32 w, uint32 h): Element(x, y, w, h), - thumbClicked(false), windowPtr(0), cursor(0), limit(0), charWidth((w / FONT_WIDTH) - 1), - charHeight(h / FONT_HEIGHT), elementToTell(NULL), upArrow(w - 8, 0, upArrowBox), - downArrow(w - 8, h - 8, downArrowBox), upArrow2(w - 8, h - 16, upArrowBox) -{ - upArrow.SetNotificationElement(this); - downArrow.SetNotificationElement(this); - upArrow2.SetNotificationElement(this); - extents.w -= 8; // Make room for scrollbar... -} - -void ListBox::HandleKey(SDLKey key) -{ - if (key == SDLK_DOWN) - { - if (cursor != limit - 1) // Cursor is within its window - cursor++; - else // Otherwise, scroll the window... - { - if (cursor + windowPtr != item.size() - 1) - windowPtr++; - } - } - else if (key == SDLK_UP) - { - if (cursor != 0) - cursor--; - else - { - if (windowPtr != 0) - windowPtr--; - } - } - else if (key == SDLK_PAGEDOWN) - { - if (cursor != limit - 1) - cursor = limit - 1; - else - { - windowPtr += limit; - if (windowPtr > item.size() - limit) - windowPtr = item.size() - limit; - } - } - else if (key == SDLK_PAGEUP) - { - if (cursor != 0) - cursor = 0; - else - { - if (windowPtr < limit) - windowPtr = 0; - else - windowPtr -= limit; - } - } - else if (key >= SDLK_a && key <= SDLK_z) - { - // Advance cursor to filename with first letter pressed... - uint8 which = (key - SDLK_a) + 65; // Convert key to A-Z char - - for(uint32 i=0; i windowPtr + limit - 1) - windowPtr = i - limit + 1, cursor = limit - 1; - if (i < windowPtr) - windowPtr = i, cursor = 0; - break; - } - } - } -} - -void ListBox::HandleMouseMove(uint32 x, uint32 y) -{ - upArrow.HandleMouseMove(x - extents.x, y - extents.y); - downArrow.HandleMouseMove(x - extents.x, y - extents.y); - upArrow2.HandleMouseMove(x - extents.x, y - extents.y); - - if (thumbClicked) - { - uint32 sbHeight = extents.h - 24, - thumb = (uint32)(((float)limit / (float)item.size()) * (float)sbHeight); - -//yRelativePoint is the spot on the thumb where we clicked... - int32 newThumbStart = y - yRelativePoint; - - if (newThumbStart < 0) - newThumbStart = 0; - - if ((uint32)newThumbStart > sbHeight - thumb) - newThumbStart = sbHeight - thumb; - - windowPtr = (uint32)(((float)newThumbStart / (float)sbHeight) * (float)item.size()); -//Check for cursor bounds as well... Or do we need to??? -//Actually, we don't...! - } -} - -void ListBox::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) -{ - if (Inside(x, y) && mouseDown) - { - // Why do we have to do this??? (- extents.y?) - // I guess it's because only the Window class has offsetting implemented... !!! FIX !!! -// cursor = (y - extents.y) / 8; - cursor = (y - extents.y) / FONT_HEIGHT; - } - - // Check for a hit on the scrollbar... - if (x > (uint32)(extents.x + extents.w) && x <= (uint32)(extents.x + extents.w + 8) - && y > (uint32)(extents.y + 8) && y <= (uint32)(extents.y + extents.h - 16)) - { - if (mouseDown) - { -// This shiaut should be calculated in AddItem(), not here... (or in Draw() for that matter) - uint32 sbHeight = extents.h - 24, - thumb = (uint32)(((float)limit / (float)item.size()) * (float)sbHeight), - thumbStart = (uint32)(((float)windowPtr / (float)item.size()) * (float)sbHeight); - - // Did we hit the thumb? - if (y >= (extents.y + 8 + thumbStart) && y < (extents.y + 8 + thumbStart + thumb)) - thumbClicked = true, yRelativePoint = y - thumbStart; - } -//Seems that this is useless--never reached except in rare cases and that the code outside is -//more effective... -// else -// thumbClicked = false; - } - - if (!mouseDown) - thumbClicked = false; - - upArrow.HandleMouseButton(x - extents.x, y - extents.y, mouseDown); - downArrow.HandleMouseButton(x - extents.x, y - extents.y, mouseDown); - upArrow2.HandleMouseButton(x - extents.x, y - extents.y, mouseDown); -} - -void ListBox::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - for(uint32 i=0; i= thumbStart + (extents.y+offsetY+8) && y < thumbStart + thumb + (extents.y+offsetY+8)) -// screenBuffer[x + (y * pitch)] = (thumbClicked ? 0x458E : 0xFFFF); -//458E -> 01 0001 0 1100 0 1110 -> 0100 0101 0110 0011 0111 0011 -> 45 63 73 - screenBuffer[x + (y * pitch)] = (thumbClicked ? 0xFF736345 : 0xFFFFFFFF); - else -// screenBuffer[x + (y * pitch)] = 0x0200; -//0200 -> 000000 10000 00000 -> 00 1000 0100 00 - screenBuffer[x + (y * pitch)] = 0xFF008400; - } - } -} - -void ListBox::Notify(Element * e) -{ - if (e == &upArrow || e == &upArrow2) - { - if (windowPtr != 0) - { - windowPtr--; - - if (cursor < limit - 1) - cursor++; - } - } - else if (e == &downArrow) - { - if (windowPtr < item.size() - limit) - { - windowPtr++; - - if (cursor != 0) - cursor--; - } - } -} - -void ListBox::SetNotificationElement(Element * e) -{ - elementToTell = e; -} - -void ListBox::AddItem(std::string s) -{ - // Do a simple insertion sort - bool inserted = false; - - for(std::vector::iterator i=item.begin(); i charHeight ? charHeight : item.size()); -} - -std::string ListBox::GetSelectedItem(void) -{ - return item[windowPtr + cursor]; -} diff --git a/src/gui/listbox.h b/src/gui/listbox.h deleted file mode 100644 index 854a27f..0000000 --- a/src/gui/listbox.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// ListBox class -// -// by James L. Hammons -// - -#ifndef __LISTBOX_H__ -#define __LISTBOX_H__ - -#include -#include -#include "button.h" -//#include "element.h" - -class ListBox: public Element -//class ListBox: public Window -{ - public: -// ListBox(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0): Element(x, y, w, h), - ListBox(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0);//: Window(x, y, w, h), -// windowPtr(0), cursor(0), limit(0), charWidth((w / 8) - 1), charHeight(h / 8), -// elementToTell(NULL), upArrow(w - 8, 0, upArrowBox), -// downArrow(w - 8, h - 8, downArrowBox), upArrow2(w - 8, h - 16, upArrowBox) {} - virtual void HandleKey(SDLKey key); - virtual void HandleMouseMove(uint32 x, uint32 y); - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element * e); - void SetNotificationElement(Element * e); - void AddItem(std::string s); - std::string GetSelectedItem(void); - - protected: - bool thumbClicked; - uint32 windowPtr, cursor, limit; - uint32 charWidth, charHeight; // Box width/height in characters - Element * elementToTell; - Button upArrow, downArrow, upArrow2; - std::vector item; - - private: - uint32 yRelativePoint; -}; - -#endif // __LISTBOX_H__ diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp new file mode 100644 index 0000000..dba74e7 --- /dev/null +++ b/src/gui/mainwin.cpp @@ -0,0 +1,163 @@ +// +// mainwin.cpp - Qt-based GUI for Virtual Jaguar: Main Application Window +// by James L. Hammons +// (C) 2009 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 12/23/2009 Created this file +// + +// FIXED: +// +// +// STILL TO BE DONE: +// +// + +// Uncomment this for debugging... +//#define DEBUG +//#define DEBUGFOO // Various tool debugging... +//#define DEBUGTP // Toolpalette debugging... + +//#include +#include "mainwin.h" + +//#include +#include "glwidget.h" +//#include "editwindow.h" +//#include "charwindow.h" +//#include "ttedit.h" + +MainWin::MainWin() +{ + // The way BSNES controls things is by setting a timer with a zero + // timeout, sleeping if not emulating anything. Seems there has to be a + // better way. + + // It has a novel approach to plugging-in/using different video/audio/input + // methods, can we do something similar or should we just use the built-in + // QOpenGL? + +// ((TTEdit *)qApp)->charWnd = new CharWindow(this); + videoWidget = new GLWidget(this); + setCentralWidget(videoWidget); + setWindowIcon(QIcon(":/res/vj.xpm")); + setWindowTitle("Virtual Jaguar v2.0.0"); + +#if 0 +// createActions(); + newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this); + newAct->setShortcuts(QKeySequence::New); + newAct->setStatusTip(tr("Create a new file")); + connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); + + openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this); + openAct->setShortcuts(QKeySequence::Open); + openAct->setStatusTip(tr("Open an existing file")); + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); + + aboutQtAct = new QAction(tr("About &Qt"), this); + aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + +// createMenus(); + fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(newAct); + fileMenu->addAction(openAct); + fileMenu->addAction(saveAct); + fileMenu->addAction(saveAsAct); + fileMenu->addSeparator(); + fileMenu->addAction(exitAct); + + editMenu = menuBar()->addMenu(tr("&Edit")); + editMenu->addAction(cutAct); + editMenu->addAction(copyAct); + editMenu->addAction(pasteAct); + + menuBar()->addSeparator(); + + helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); + +// createToolBars(); + fileToolBar = addToolBar(tr("File")); + fileToolBar->addAction(newAct); + fileToolBar->addAction(openAct); + fileToolBar->addAction(saveAct); + + editToolBar = addToolBar(tr("Edit")); + editToolBar->addAction(cutAct); + editToolBar->addAction(copyAct); + editToolBar->addAction(pasteAct); +#endif + + // Create status bar + statusBar()->showMessage(tr("Ready")); + + ReadSettings(); + +// connect(textEdit->document(), SIGNAL(contentsChanged()), +// this, SLOT(documentWasModified())); + +// setCurrentFile(""); + setUnifiedTitleAndToolBarOnMac(true); + + // Set up timer based loop for animation... + timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(Timer())); + timer->start(20); +} + +void MainWin::closeEvent(QCloseEvent * event) +{ + WriteSettings(); + event->accept(); // ignore() if can't close for some reason +} + +void MainWin::Open(void) +{ +} + +void MainWin::Timer(void) +{ + // Random hash & trash + // We try to simulate an untuned tank circuit here... :-) + for(int x=0; xrasterWidth; x++) + { + for(int y=0; yrasterHeight; y++) + { + videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;// | (rand() & 0xFF);//0x000000FF; +// buffer[(y * textureWidth) + x] = x*y; + } + } + + videoWidget->updateGL(); +} + +void MainWin::ReadSettings(void) +{ + QSettings settings("Underground Software", "Virtual Jaguar"); + QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint(); + QSize size = settings.value("size", QSize(400, 400)).toSize(); + resize(size); + move(pos); +//videoWidget->updateGL(); +// pos = settings.value("charWndPos", QPoint(0, 0)).toPoint(); +// size = settings.value("charWndSize", QSize(200, 200)).toSize(); +// ((TTEdit *)qApp)->charWnd->resize(size); +// ((TTEdit *)qApp)->charWnd->move(pos); +} + +void MainWin::WriteSettings(void) +{ + QSettings settings("Underground Software", "Virtual Jaguar"); + settings.setValue("pos", pos()); + settings.setValue("size", size()); +// settings.setValue("charWndPos", ((TTEdit *)qApp)->charWnd->pos()); +// settings.setValue("charWndSize", ((TTEdit *)qApp)->charWnd->size()); +} + diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h new file mode 100644 index 0000000..831b56b --- /dev/null +++ b/src/gui/mainwin.h @@ -0,0 +1,46 @@ +// +// mainwin.h: Header file +// +// by James L. Hammons +// (C) 2010 Underground Software +// + +#ifndef __MAINWIN_H__ +#define __MAINWIN_H__ + +//Hrm. uh??? I thought this wasn't the way to do this stuff...??? +#include + +// Forward declarations + +class GLWidget; +//class EditWindow; +//class CharWindow; + +class MainWin: public QMainWindow +{ + // All Qt apps require this macro for signal/slot functionality to work + Q_OBJECT + + public: + MainWin(); + + protected: + void closeEvent(QCloseEvent * event); + + private slots: + void Open(void); + void Timer(void); + + private: + void ReadSettings(void); + void WriteSettings(void); + +// public: + GLWidget * videoWidget; + QTimer * timer; +// EditWindow * editWnd; +// CharWindow * charWnd; +}; + +#endif // __MAINWIN_H__ diff --git a/src/gui/menu.cpp b/src/gui/menu.cpp deleted file mode 100644 index f033977..0000000 --- a/src/gui/menu.cpp +++ /dev/null @@ -1,177 +0,0 @@ -// -// Menu class & supporting structs/classes -// -// by James L. Hammons -// - -#include "menu.h" - -// Local variables -static const char separator[] = "--------------------------------------------------------"; - -// Implementation - -Menu::Menu(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= FONT_HEIGHT*/, - uint32 fgc/*= 0xFF7F0000*/, uint32 bgc/*= 0xFFFF3F3F*/, uint32 fgch/*= 0xFFFF3F3F*/, - uint32 bgch/*= 0xFFFF8787*/): - Element(x, y, w, h), activated(false), clicked(false), inside(0), insidePopup(0), - fgColor(fgc), bgColor(bgc), fgColorHL(fgch), bgColorHL(bgch), menuChosen(-1), - menuItemChosen(-1) -{ -} - -void Menu::HandleKey(SDLKey key) -{ - for(uint32 i=0; i= xpos && x < xpos + width) - { - inside = i + 1; - menuChosen = i; - break; - } - - xpos += width; - } - } - - if (!Inside(x, y) && !clicked) - { - menuChosen = -1; - } - - if (itemList[menuChosen].Inside(x, y) && clicked) - { - insidePopup = ((y - itemList[menuChosen].extents.y) / FONT_HEIGHT) + 1; - menuItemChosen = insidePopup - 1; - } -} - -void Menu::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) -{ - if (!clicked) - { - if (mouseDown) - { - if (inside) - clicked = true; - else - menuChosen = -1; // clicked is already false...! - } - } - else // clicked == true - { - if (insidePopup && !mouseDown) // I.e., mouse-button-up - { - activated = true; - if (itemList[menuChosen].item[menuItemChosen].action != NULL) - { -// itemList[menuChosen].item[menuItemChosen].action(); - SDL_Event event; - event.type = SDL_USEREVENT; - event.user.code = MENU_ITEM_CHOSEN; - event.user.data1 = (void *)itemList[menuChosen].item[menuItemChosen].action; - SDL_PushEvent(&event); - - clicked = false, menuChosen = menuItemChosen = -1; - -/* SDL_Event event; - while (SDL_PollEvent(&event)); // Flush the event queue... - event.type = SDL_MOUSEMOTION; - int mx, my; - SDL_GetMouseState(&mx, &my); - event.motion.x = mx, event.motion.y = my; - SDL_PushEvent(&event); // & update mouse position...! -*/ } - } - - if (!inside && !insidePopup && mouseDown) - clicked = false, menuChosen = menuItemChosen = -1; - } -} - -void Menu::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - uint32 xpos = extents.x + offsetX; - - for(uint32 i=0; i 0) - DrawStringOpaque(screenBuffer, itemList[menuChosen].extents.x, ypos, - color1, color2, " %-*.*s ", itemList[menuChosen].charLength, - itemList[menuChosen].charLength, itemList[menuChosen].item[i].name.c_str()); - else - DrawStringOpaque(screenBuffer, itemList[menuChosen].extents.x, ypos, - fgColor, bgColor, "%.*s", itemList[menuChosen].charLength + 2, separator); - - ypos += FONT_HEIGHT; - } - } -} - -void Menu::Add(MenuItems mi) -{ - for(uint32 i=0; i mi.charLength) - mi.charLength = mi.item[i].name.length(); - - // Set extents here as well... - mi.extents.x = extents.x + extents.w, mi.extents.y = extents.y + FONT_HEIGHT + 1; - mi.extents.w = (mi.charLength + 2) * FONT_WIDTH, mi.extents.h = mi.item.size() * FONT_HEIGHT; - - itemList.push_back(mi); - extents.w += (mi.title.length() + 2) * FONT_WIDTH; -} diff --git a/src/gui/menu.h b/src/gui/menu.h deleted file mode 100644 index 9847418..0000000 --- a/src/gui/menu.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// Menu class & supporting structs/classes -// -// by James L. Hammons -// - -#ifndef __MENU_H__ -#define __MENU_H__ - -#include -#include -#include "element.h" -#include "guimisc.h" // Ick. - -class Window; - -struct NameAction -{ - std::string name; - Window * (* action)(void); - SDLKey hotKey; - - NameAction(std::string n, Window * (* a)(void) = NULL, SDLKey k = SDLK_UNKNOWN): - name(n), action(a), hotKey(k) {} -}; - -class MenuItems -{ - public: - MenuItems(): charLength(0) {} - // Normally, we avoid implementation in a header file but in this case - // we can make an exception. ;-) - bool Inside(uint32 x, uint32 y) - { return (x >= (uint32)extents.x && x < (uint32)(extents.x + extents.w) - && y >= (uint32)extents.y && y < (uint32)(extents.y + extents.h) ? true : false); } - - std::string title; - std::vector item; - uint32 charLength; - SDL_Rect extents; -}; - -class Menu: public Element -{ - public: -// 1CFF -> 0 001 11 00 111 1 1111 -// 421F -> 0 100 00 10 000 1 1111 - Menu(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = FONT_HEIGHT, - uint32 fgc = 0xFF7F0000, uint32 bgc = 0xFFFF3F3F, uint32 fgch = 0xFFFF3F3F, - uint32 bgch = 0xFFFF8787); - virtual void HandleKey(SDLKey key); - virtual void HandleMouseMove(uint32 x, uint32 y); - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element *) {} - void Add(MenuItems mi); - - protected: - bool activated, clicked; - uint32 inside, insidePopup; - uint32 fgColor, bgColor, fgColorHL, bgColorHL; - int menuChosen, menuItemChosen; - - private: - std::vector itemList; -}; - -#endif // __MENU_H__ diff --git a/src/gui/pushbutton.cpp b/src/gui/pushbutton.cpp deleted file mode 100644 index 738b3ac..0000000 --- a/src/gui/pushbutton.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// -// PushButton class -// -// by James L. Hammons -// - -#include "pushbutton.h" - -#include "guimisc.h" - -PushButton::PushButton(uint32 x, uint32 y, bool * st, std::string s): - Element(x, y, 16, 16), state(st), inside(false), text(s) -{ - if (st == NULL) - state = &internalState; -} - -void PushButton::HandleMouseMove(uint32 x, uint32 y) -{ - inside = Inside(x, y); -} - -void PushButton::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) -{ - if (inside && mouseDown) - *state = !(*state); -} - -void PushButton::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - if (*state) - DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, &pbDown); - else - DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, &pbUp); - - if (text.length() > 0) - DrawString(screenBuffer, extents.x + offsetX + 24, extents.y + offsetY, false, "%s", text.c_str()); -} diff --git a/src/gui/pushbutton.h b/src/gui/pushbutton.h deleted file mode 100644 index 2593b57..0000000 --- a/src/gui/pushbutton.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// PushButton class -// -// by James L. Hammons -// - -#ifndef __PUSHBUTTON_H__ -#define __PUSHBUTTON_H__ - -#include -#include "element.h" - -// How to handle? -// Save state externally? -//We pass in a state variable if we want to track it externally, otherwise we use our own -//internal state var. Still need to do some kind of callback for pushbuttons that do things -//like change from fullscreen to windowed... !!! FIX !!! - -class PushButton: public Element -{ - public: - PushButton(uint32 x, uint32 y, bool * st, std::string s); - virtual void HandleKey(SDLKey key) {} - virtual void HandleMouseMove(uint32 x, uint32 y); - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element *) {} - - protected: - bool * state; - bool inside; - std::string text; - bool internalState; -}; - -#endif // __PUSHBUTTON_H__ diff --git a/src/gui/slideswitch.cpp b/src/gui/slideswitch.cpp deleted file mode 100644 index fcf0520..0000000 --- a/src/gui/slideswitch.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// -// SlideSwitch class -// -// by James L. Hammons -// - -#include "slideswitch.h" - -#include "guimisc.h" - -SlideSwitch::SlideSwitch(uint32 x, uint32 y, bool * st, std::string s1, std::string s2): - Element(x, y, 16, 32), state(st), inside(false), text1(s1), text2(s2) -{ -} - -void SlideSwitch::HandleMouseMove(uint32 x, uint32 y) -{ - inside = Inside(x, y); -} - -void SlideSwitch::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) -{ - if (inside && mouseDown) - { - *state = !(*state); - } -} - -void SlideSwitch::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - DrawTransparentBitmapDeprecated(screenBuffer, extents.x + offsetX, extents.y + offsetY, (*state ? slideSwitchDown : slideSwitchUp)); - - if (text1.length() > 0) - DrawString(screenBuffer, extents.x + offsetX + 24, extents.y + offsetY, false, "%s", text1.c_str()); - - if (text2.length() > 0) - DrawString(screenBuffer, extents.x + offsetX + 24, extents.y + offsetY + 16, false, "%s", text2.c_str()); -} diff --git a/src/gui/slideswitch.h b/src/gui/slideswitch.h deleted file mode 100644 index b23fe3d..0000000 --- a/src/gui/slideswitch.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// SlideSwitch class -// -// by James L. Hammons -// - -#ifndef __SLIDESWITCH_H__ -#define __SLIDESWITCH_H__ - -#include -#include "element.h" - -// How to handle? -// Save state externally? -#warning Seems to be handled the same as PushButton, but without sanity checks. !!! FIX !!! - -class SlideSwitch: public Element -{ - public: - SlideSwitch(uint32 x, uint32 y, bool * st, std::string s1, std::string s2); - virtual void HandleKey(SDLKey key) {} - virtual void HandleMouseMove(uint32 x, uint32 y); - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element *) {} - - protected: - bool * state; - bool inside; - std::string text1, text2; -}; - -#endif // __SLIDESWITCH_H__ diff --git a/src/gui/text.cpp b/src/gui/text.cpp deleted file mode 100644 index 2d35242..0000000 --- a/src/gui/text.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// Static text class -// -// by James L. Hammons -// - -#include "text.h" - -#include "guimisc.h" - -Text::Text(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/): - Element(x, y, w, h), fgColor(0xFF8484FF), bgColor(0xFF84FF4D) -{ -} - -Text::Text(uint32 x, uint32 y, std::string s, uint32 fg/*= 0xFF8484FF*/, uint32 bg/*= 0xFF84FF4D*/): - Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s) -{ -} - -void Text::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - if (text.length() > 0) -// DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str()); - DrawStringOpaque(screenBuffer, extents.x + offsetX, extents.y + offsetY, fgColor, bgColor, "%s", text.c_str()); -} diff --git a/src/gui/text.h b/src/gui/text.h deleted file mode 100644 index 9651efd..0000000 --- a/src/gui/text.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// Static text class -// -// by James L. Hammons -// - -#ifndef __TEXT_H__ -#define __TEXT_H__ - -#include -#include "element.h" - -class Text: public Element -{ - public: - Text(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0); - Text(uint32 x, uint32 y, std::string s, uint32 fg = 0xFF8484FF, uint32 bg = 0xFF84FF4D); - virtual void HandleKey(SDLKey key) {} - virtual void HandleMouseMove(uint32 x, uint32 y) {} - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown) {} - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element *) {} - - protected: - uint32 fgColor, bgColor; - std::string text; -}; - -#endif // __TEXT_H__ diff --git a/src/gui/textedit.cpp b/src/gui/textedit.cpp deleted file mode 100644 index 301dd3e..0000000 --- a/src/gui/textedit.cpp +++ /dev/null @@ -1,52 +0,0 @@ -// -// TextEdit class -// -// by James L. Hammons -// - -#include "textedit.h" - -#include "guimisc.h" - -TextEdit::TextEdit(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/): - Element(x, y, w, h), fgColor(0xFF8484FF), bgColor(0xFF84FF4D), text(""), - caretPos(0), maxScreenSize(10) -{ -} - -TextEdit::TextEdit(uint32 x, uint32 y, std::string s, uint32 mss/*= 10*/, uint32 fg/*= 0xFF8484FF*/, uint32 bg/*= 0xFF84FF4D*/): - Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s), caretPos(0), maxScreenSize(mss) -{ -} - -//Set different filters depending on type passed in on construction, e.g., filename, amount, etc...? -void TextEdit::HandleKey(SDLKey key) -{ - if ((key >= SDLK_a && key <= SDLK_z) || (key >= SDLK_0 && key <= SDLK_9) || key == SDLK_PERIOD - || key == SDLK_SLASH) - { - //Need to handle shift key as well... - text[caretPos++] = key; - Draw(); - } - else if (key == SDLK_BACKSPACE) - { - - } - else if (key == SDLK_DELETE) - { - } -//left, right arrow -} - -void TextEdit::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - if (text.length() > 0) - { - FillScreenRectangle(screenBuffer, extents.x + offsetX, extents.y + offsetY, FONT_WIDTH * maxScreenSize, FONT_HEIGHT, bgColor); -// DrawString(screenBuffer, extents.x + offsetX, extents.y + offsetY, false, "%s", text.c_str()); - DrawStringOpaque(screenBuffer, extents.x + offsetX, extents.y + offsetY, fgColor, bgColor, "%s", text.c_str()); - } - - // Draw the caret (underscore? or vertical line?) -} diff --git a/src/gui/textedit.h b/src/gui/textedit.h deleted file mode 100644 index 17f9101..0000000 --- a/src/gui/textedit.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// TextEdit class -// -// by James L. Hammons -// - -#ifndef __TEXTEDIT_H__ -#define __TEXTEDIT_H__ - -#include -#include "element.h" - -class TextEdit: public Element -{ - public: - TextEdit(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0); - TextEdit(uint32 x, uint32 y, std::string s, uint32 mss = 10, uint32 fg = 0xFF8484FF, - uint32 bg = 0xFF84FF4D); - virtual void HandleKey(SDLKey key); - virtual void HandleMouseMove(uint32 x, uint32 y) {} - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown) {} - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element *) {} - - protected: - uint32 fgColor, bgColor; - std::string text; - uint32 caretPos; - uint32 maxScreenSize; -}; - -#endif // __TEXTEDIT_H__ diff --git a/src/gui/vj.pro b/src/gui/vj.pro new file mode 100644 index 0000000..a14781c --- /dev/null +++ b/src/gui/vj.pro @@ -0,0 +1,22 @@ +# Use 'qmake -o Makefile ttedit.pro' + +CONFIG += qt +#debug doesn't do shit +#CONFIG += qt debug + +QT += opengl + +HEADERS += app.h +HEADERS += mainwin.h +HEADERS += glwidget.h + +SOURCES += app.cpp +SOURCES += mainwin.cpp +SOURCES += glwidget.cpp + +RESOURCES += vj.qrc + +OBJECTS_DIR = ../../obj +MOC_DIR = ../../obj +RCC_DIR = ../../obj +UI_DIR = ../../obj diff --git a/src/gui/vj.qrc b/src/gui/vj.qrc new file mode 100644 index 0000000..ddd0f3d --- /dev/null +++ b/src/gui/vj.qrc @@ -0,0 +1,5 @@ + + + res/vj.xpm + + diff --git a/src/gui/window.cpp b/src/gui/window.cpp deleted file mode 100644 index 9b2358b..0000000 --- a/src/gui/window.cpp +++ /dev/null @@ -1,94 +0,0 @@ -// -// Window class -// -// by James L. Hammons -// - -#include "window.h" - -#include "guimisc.h" - -Window::Window(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/, - void (* f)(Element *)/*= NULL*/): Element(x, y, w, h), -// /*clicked(false), inside(false),*/ fgColor(0x4FF0), bgColor(0x1E10), -//4FF0 -> 010011 11111 10000 -> 0100 1101 1111 1111 1000 0100 -> 4D FF 84 -//1E10 -> 000111 10000 10000 -> 0001 1111 1000 0100 1000 0100 -> 1F 84 84 - /*clicked(false), inside(false),*/ fgColor(0xFF84FF4D), bgColor(0xFF84841F), - handler(f) -{ - close = new Button(w - (CLOSEBOX_WIDTH + 1), 1, closeBox, closeBoxHover, closeBoxDown); - list.push_back(close); - close->SetNotificationElement(this); -} - -Window::~Window() -{ - for(uint32 i=0; iHandleKey(key); -} - -void Window::HandleMouseMove(uint32 x, uint32 y) -{ - // Handle the items this window contains... - for(uint32 i=0; iHandleMouseMove(x - extents.x, y - extents.y); -} - -void Window::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) -{ - // Handle the items this window contains... - for(uint32 i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); -} - -void Window::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) -{ - uint32 addr = (extents.x + offsetX) + ((extents.y + offsetY) * pitch); - - for(uint32 y=0; yDraw(extents.x, extents.y); -} - -void Window::AddElement(Element * e) -{ - list.push_back(e); -} - -void Window::Notify(Element * e) -{ - if (e == close) - { - SDL_Event event; - event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; - SDL_PushEvent(&event); - } -} diff --git a/src/gui/window.h b/src/gui/window.h deleted file mode 100644 index 2686ff7..0000000 --- a/src/gui/window.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Window class -// -// by James L. Hammons - -#ifndef __WINDOW_H__ -#define __WINDOW_H__ - -#include -#include "button.h" -#include "element.h" - -class Window: public Element -{ - public: - Window(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0, - void (* f)(Element *) = NULL); - virtual ~Window(); - virtual void HandleKey(SDLKey key); - virtual void HandleMouseMove(uint32 x, uint32 y); - virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); - virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0); - virtual void Notify(Element * e); - void AddElement(Element * e); - - protected: - uint32 fgColor, bgColor; - void (* handler)(Element *); - Button * close; - // We have to use a list of Element *pointers* because we can't make a - // list that will hold all the different object types in the same list... - std::vector list; -}; - -#endif // __WINDOW_H__ diff --git a/src/jaguar.cpp b/src/jaguar.cpp index facaa12..e75ac0a 100644 --- a/src/jaguar.cpp +++ b/src/jaguar.cpp @@ -25,12 +25,12 @@ #include "eeprom.h" #include "event.h" #include "gpu.h" -#include "gui.h" +//#include "gui.h" #include "jerry.h" #include "joystick.h" #include "log.h" #include "m68k.h" -#include "memory.h" +//#include "memory.h" #include "mmu.h" #include "settings.h" #include "tom.h" @@ -60,27 +60,13 @@ extern int effect_start; extern int effect_start2, effect_start3, effect_start4, effect_start5, effect_start6; #endif -// Memory debugging identifiers - -const char * whoName[9] = - { "Unknown", "Jaguar", "DSP", "GPU", "TOM", "JERRY", "M68K", "Blitter", "OP" }; - uint32 jaguar_active_memory_dumps = 0; uint32 jaguarMainROMCRC32, jaguarROMSize, jaguarRunAddress; -uint8 jaguarMainRAM[0x400000]; // 68K CPU RAM -uint8 jaguarMainROM[0x600000]; // 68K CPU ROM -uint8 jaguarBootROM[0x040000]; // 68K CPU BIOS ROM--uses only half of this! -uint8 jaguarCDBootROM[0x040000]; // 68K CPU CD BIOS ROM bool BIOSLoaded = false; bool CDBIOSLoaded = false; -//uint8 cdRAM[0x100]; -uint8 * cdRAM = &jaguarMainROM[0x5FFF00]; -uint8 tomRAM[0x4000]; -uint8 jerryRAM[0x10000]; - #ifdef CPU_DEBUG_MEMORY uint8 writeMemMax[0x400000], writeMemMin[0x400000]; uint8 readMem[0x400000]; diff --git a/src/jaguar.h b/src/jaguar.h index 96d7b4c..d83cd6a 100644 --- a/src/jaguar.h +++ b/src/jaguar.h @@ -2,6 +2,7 @@ #define __JAGUAR_H__ #include "types.h" +#include "memory.h" // For "UNKNOWN" enum void JaguarInit(void); void JaguarReset(void); @@ -23,33 +24,11 @@ void JaguarExecuteNew(void); // Exports from JAGUAR.CPP -extern uint8 jaguarMainRAM[]; -extern uint8 jaguarMainROM[]; -extern uint8 jaguarBootROM[]; -extern uint8 jaguarCDBootROM[]; extern bool BIOSLoaded; extern bool CDBIOSLoaded; extern int32 jaguarCPUInExec; extern uint32 jaguarMainROMCRC32, jaguarROMSize, jaguarRunAddress; extern char * jaguarEepromsPath; -extern const char * whoName[9]; - -// Some handy macros to help converting native endian to big endian (jaguar native) -// & vice versa - -#define SET64(r, a, v) r[(a)] = ((v) & 0xFF00000000000000) >> 56, r[(a)+1] = ((v) & 0x00FF000000000000) >> 48, \ - r[(a)+2] = ((v) & 0x0000FF0000000000) >> 40, r[(a)+3] = ((v) & 0x000000FF00000000) >> 32, \ - r[(a)+4] = ((v) & 0xFF000000) >> 24, r[(a)+5] = ((v) & 0x00FF0000) >> 16, \ - r[(a)+6] = ((v) & 0x0000FF00) >> 8, r[(a)+7] = (v) & 0x000000FF -#define GET64(r, a) (((uint64)r[(a)] << 56) | ((uint64)r[(a)+1] << 48) | \ - ((uint64)r[(a)+2] << 40) | ((uint64)r[(a)+3] << 32) | \ - ((uint64)r[(a)+4] << 24) | ((uint64)r[(a)+5] << 16) | \ - ((uint64)r[(a)+6] << 8) | (uint64)r[(a)+7]) -#define SET32(r, a, v) r[(a)] = ((v) & 0xFF000000) >> 24, r[(a)+1] = ((v) & 0x00FF0000) >> 16, \ - r[(a)+2] = ((v) & 0x0000FF00) >> 8, r[(a)+3] = (v) & 0x000000FF -#define GET32(r, a) ((r[(a)] << 24) | (r[(a)+1] << 16) | (r[(a)+2] << 8) | r[(a)+3]) -#define SET16(r, a, v) r[(a)] = ((v) & 0xFF00) >> 8, r[(a)+1] = (v) & 0xFF -#define GET16(r, a) ((r[(a)] << 8) | r[(a)+1]) // Various clock rates diff --git a/src/jerry.cpp b/src/jerry.cpp index 8603b90..671b08a 100644 --- a/src/jerry.cpp +++ b/src/jerry.cpp @@ -163,6 +163,7 @@ #include "jaguar.h" #include "joystick.h" #include "log.h" +//#include "memory.h" #include "wavetable.h" //Note that 44100 Hz requires samples every 22.675737 usec. @@ -428,7 +429,7 @@ void JERRYInit(void) //This should be handled with the cart initialization... // eeprom_init(); // memory_malloc_secure((void **)&jerry_ram_8, 0x10000, "JERRY RAM/ROM"); - memcpy(&jerry_ram_8[0xD000], wave_table, 0x1000); + memcpy(&jerry_ram_8[0xD000], waveTableROM, 0x1000); JERRYPIT1Prescaler = 0xFFFF; JERRYPIT2Prescaler = 0xFFFF; diff --git a/src/jerry.h b/src/jerry.h index 684b55f..fd008d9 100644 --- a/src/jerry.h +++ b/src/jerry.h @@ -5,7 +5,8 @@ #ifndef __JERRY_H__ #define __JERRY_H__ -#include "types.h" +//#include "types.h" +#include "memory.h" void JERRYInit(void); void JERRYReset(void); diff --git a/src/joystick.cpp b/src/joystick.cpp index 9fe2197..057d059 100644 --- a/src/joystick.cpp +++ b/src/joystick.cpp @@ -4,6 +4,13 @@ // by cal2 // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Cleanups/fixes by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "joystick.h" @@ -11,7 +18,7 @@ #include #include #include "gpu.h" -#include "gui.h" +//#include "gui.h" #include "jaguar.h" #include "log.h" #include "settings.h" @@ -134,11 +141,14 @@ void JoystickExec(void) if (keystate[vjs.p1KeyBindings[20]]) joypad_0_buttons[BUTTON_d] = 0x01; - extern bool debounceRunKey; +#warning "!!! FIX !!! (debounceRunKey)" +// extern bool debounceRunKey; + bool debounceRunKey; if (keystate[SDLK_ESCAPE]) { if (!debounceRunKey) - finished = true; +#warning "!!! FIX !!! (finished = true)" +;// finished = true; } else debounceRunKey = false; @@ -146,7 +156,8 @@ void JoystickExec(void) if (keystate[SDLK_TAB]) { if (!GUIKeyHeld) - showGUI = !showGUI, GUIKeyHeld = true; +#warning "!!! FIX !!! (showGUI = !showGUI, ...)" +;// showGUI = !showGUI, GUIKeyHeld = true; } else GUIKeyHeld = false; @@ -233,9 +244,9 @@ void JoystickExec(void) if (vjs.useJoystick) { - extern SDL_Joystick * joystick; - int16 x = SDL_JoystickGetAxis(joystick, 0), - y = SDL_JoystickGetAxis(joystick, 1); + extern SDL_Joystick * joystick1; + int16 x = SDL_JoystickGetAxis(joystick1, 0), + y = SDL_JoystickGetAxis(joystick1, 1); if (x > 16384) joypad_0_buttons[BUTTON_R] = 0x01; @@ -246,11 +257,11 @@ void JoystickExec(void) if (y < -16384) joypad_0_buttons[BUTTON_U] = 0x01; - if (SDL_JoystickGetButton(joystick, 0) == SDL_PRESSED) + if (SDL_JoystickGetButton(joystick1, 0) == SDL_PRESSED) joypad_0_buttons[BUTTON_A] = 0x01; - if (SDL_JoystickGetButton(joystick, 1) == SDL_PRESSED) + if (SDL_JoystickGetButton(joystick1, 1) == SDL_PRESSED) joypad_0_buttons[BUTTON_B] = 0x01; - if (SDL_JoystickGetButton(joystick, 2) == SDL_PRESSED) + if (SDL_JoystickGetButton(joystick1, 2) == SDL_PRESSED) joypad_0_buttons[BUTTON_C] = 0x01; } diff --git a/src/log.cpp b/src/log.cpp index 5b2f763..76c0aa9 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -4,6 +4,13 @@ // Originally by David Raingeard (Cal2) // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Cleanups/new stuff by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "log.h" diff --git a/src/memory.cpp b/src/memory.cpp index 9cff768..7104acd 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -1,188 +1,178 @@ // -// Memory handler +// Jaguar memory and I/O physical (hosted!) memory // -// by David Raingeard (Cal2) -// GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) -// Cleanups by James L. Hammons +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ----------------------------------------------------------- +// JLH 12/10/2009 Repurposed this file. :-) // -#include "memory.h" - -#include -#include -#include "log.h" - -#warning This module needs some serious cleanup. !!! FIX !!! - -// Useful structs (for doubly linked list in this case) - -typedef struct sMemBlockInfo -{ - void * ptr; - const char * info; - uint32 size; - sMemBlockInfo * next; - sMemBlockInfo * prev; -} sMemBlockInfo; - -// Private global variables - -static sMemBlockInfo memoryInfo; -//static uint32 memoryMaxAllocated; -static uint32 currentAllocatedMemory; -static uint32 maximumAllocatedMemory; - - -void memory_addMemInfo(void * ptr, uint32 size, const char * info) -{ - sMemBlockInfo * alias = &memoryInfo; +/* +$FFFFFF => 16,777,215 +$A00000 => 10,485,760 + +Really, just six megabytes short of using the entire address space... +Why not? We could just allocate the entire space and then use the MMU code to do +things like call functions and whatnot... +In other words, read/write would just tuck the value into the host RAM space and +the I/O function would take care of any weird stuff... + +Actually: writes would tuck in the value, but reads would have to be handled +correctly since some registers do not fall on the same address as far as reading +goes... Still completely doable though. :-) +*/ - while (alias->next) - alias = alias->next; +#include "memory.h" - alias->next = (sMemBlockInfo *)malloc(sizeof(sMemBlockInfo)); +uint8 jagMemSpace[0xF20000]; // The entire memory space of the Jaguar...! - if (alias->next == NULL) - { - exit(0); - return; - } - - alias->next->prev = alias; - alias = alias->next; - alias->next = NULL; - alias->size = size; - alias->ptr = ptr; - alias->info = info; -} +uint8 * jaguarMainRAM = &jagMemSpace[0x000000]; +uint8 * jaguarMainROM = &jagMemSpace[0x800000]; +uint8 * cdRAM = &jagMemSpace[0xDFFF00]; +uint8 * gpuRAM = &jagMemSpace[0xF03000]; +uint8 * dspRAM = &jagMemSpace[0xF1B000]; -void MemoryInit(void) -{ - memoryInfo.next = memoryInfo.prev = NULL; - currentAllocatedMemory = maximumAllocatedMemory = 0; -} +uint8 jaguarBootROM[0x040000]; // 68K CPU BIOS ROM--uses only half of this! +uint8 jaguarCDBootROM[0x040000]; // 68K CPU CD BIOS ROM (256K) -void MemoryDone(void) -{ -} -void * memory_malloc(uint32 size, const char * info) +#if 0 +union Word { - void * ptr = (void *)malloc(size); - - if (ptr == NULL) - return NULL; - - memory_addMemInfo(ptr, size, info); - currentAllocatedMemory += size; - - if (currentAllocatedMemory > maximumAllocatedMemory) - maximumAllocatedMemory = currentAllocatedMemory; - - return ptr; -} - -// OK, this sux, causes the compiler to complain about type punned pointers. -// The only difference between this and the previous is that this one ABORTS -// if it can't allocate the memory. BAD BAD BAD - -void memory_malloc_secure(void ** new_ptr, uint32 size, const char * info) + uint16 word; + struct { + // This changes depending on endianness... +#ifdef __BIG_ENDIAN__ + uint8 hi, lo; // Big endian +#else + uint8 lo, hi; // Little endian +#endif + }; +}; +#endif + +#if 0 +union DWord { - WriteLog("Memory: Allocating %i bytes of memory for <%s>...", size, (info == NULL ? "unknown" : info)); - - void * ptr = malloc(size); - - if (ptr == NULL) + uint32 dword; + struct { - WriteLog("Failed!\n"); - LogDone(); - -#warning BAD, BAD, BAD! Need to do better than this!!! -#warning And since we ARE keeping track of all memory allocations, we should unwind the stack here as well...! -#warning !!! FIX !!! - - exit(0); - } - - memory_addMemInfo(ptr, size, info); - currentAllocatedMemory += size; - - if (currentAllocatedMemory > maximumAllocatedMemory) - maximumAllocatedMemory = currentAllocatedMemory; - - *new_ptr = ptr; - WriteLog("OK\n"); -} - -/* -void * memory_malloc_secure2(uint32 size, const char * info) +#ifdef __BIG_ENDIAN__ + uint16 hiw, low; +#else + uint16 low, hiw; +#endif + }; +}; +#endif + +#if 0 +static void test(void) { - WriteLog("Memory: Allocating %i bytes of memory for <%s>...", size, (info == NULL ? "unknown" : info)); - - void * ptr = malloc(size); - - if (ptr == NULL) - { - WriteLog("Failed!\n"); - log_done(); - -//BAD, BAD, BAD! Need to do better than this!!! -//And since we ARE keeping track of all memory allocations, we should unwind the stack here as well...! -// !!! FIX !!! - - exit(0); - } - - memory_addMemInfo(ptr, size, info); - currentAllocatedMemory += size; - - if (currentAllocatedMemory > maximumAllocatedMemory) - maximumAllocatedMemory = currentAllocatedMemory; - - new_ptr = ptr; - WriteLog("OK\n"); + Word reg; + reg.word = 0x1234; + reg.lo = 0xFF; + reg.hi = 0xEE; + + DWord reg2; + reg2.hiw = 0xFFFE; + reg2.low = 0x3322; + reg2.low.lo = 0x11; } -*/ - -void memory_free(void * ptr) +#endif + +// OR, we could do like so: +#if 0 +#ifdef __BIG_ENDIAN__ +#define DWORD_BYTE_HWORD_H 1 +#define DWORD_BYTE_HWORD_L 2 +#define DWORD_BYTE_LWORD_H 3 +#define DWORD_BYTE_LWORD_L 4 +#else +#define DWORD_BYTE_HWORD_H 4 +#define DWORD_BYTE_HWORD_L 3 +#define DWORD_BYTE_LWORD_H 2 +#define DWORD_BYTE_LWORD_L 1 +#endif +// But this starts to get cumbersome after a while... Is union really better? + +//More union stuff... +unsigned long ByteSwap1 (unsigned long nLongNumber) { -// sMemBlockInfo * alias= &memoryInfo; -// alias = alias->next; - sMemBlockInfo * alias= memoryInfo.next; - - while (alias->ptr != ptr) - alias = alias->next; - - WriteLog("Memory: Freeing %i bytes from <%s>...\n", (int)alias->size, alias->info); - - free(ptr); - currentAllocatedMemory -= alias->size; - alias->prev->next = alias->next; - - if (alias->next != NULL) - alias->next->prev = alias->prev; - - free(alias); + union u {unsigned long vi; unsigned char c[sizeof(unsigned long)];}; + union v {unsigned long ni; unsigned char d[sizeof(unsigned long)];}; + union u un; + union v vn; + un.vi = nLongNumber; + vn.d[0]=un.c[3]; + vn.d[1]=un.c[2]; + vn.d[2]=un.c[1]; + vn.d[3]=un.c[0]; + return (vn.ni); } +#endif + +//Not sure if this is a good approach yet... +//should be if we use proper aliasing, and htonl and friends... +#if 1 +uint32 & butch = *((uint32 *)&jagMemSpace[0xDFFF00]); // base of Butch == interrupt control register, R/W +uint32 & dscntrl = *((uint32 *)&jagMemSpace[0xDFFF04]); // DSA control register, R/W +uint16 & ds_data = *((uint16 *)&jagMemSpace[0xDFFF0A]); // DSA TX/RX data, R/W +uint32 & i2cntrl = *((uint32 *)&jagMemSpace[0xDFFF10]); // i2s bus control register, R/W +uint32 & sbcntrl = *((uint32 *)&jagMemSpace[0xDFFF14]); // CD subcode control register, R/W +uint32 & subdata = *((uint32 *)&jagMemSpace[0xDFFF18]); // Subcode data register A +uint32 & subdatb = *((uint32 *)&jagMemSpace[0xDFFF1C]); // Subcode data register B +uint32 & sb_time = *((uint32 *)&jagMemSpace[0xDFFF20]); // Subcode time and compare enable (D24) +uint32 & fifo_data = *((uint32 *)&jagMemSpace[0xDFFF24]); // i2s FIFO data +uint32 & i2sdat2 = *((uint32 *)&jagMemSpace[0xDFFF28]); // i2s FIFO data (old) +uint32 & unknown = *((uint32 *)&jagMemSpace[0xDFFF2C]); // Seems to be some sort of I2S interface +#else +uint32 butch, dscntrl, ds_data, i2cntrl, sbcntrl, subdata, subdatb, sb_time, fifo_data, i2sdat2, unknown; +#endif + +#warning "Need to separate out this stuff (or do we???)" +//if we use a contiguous memory space, we don't need this shit... +//err, maybe we do, let's not be so hasty now... :-) + +//#define ENDIANSAFE(x) htonl(x) + +// The nice thing about doing it this way is that on big endian machines, htons/l +// compile to nothing and on Intel machines, it compiles down to a single bswap instruction. +// So endianness issues go away nicely without a lot of drama. :-D + +#define BSWAP16(x) (htons(x)) +#define BSWAP32(x) (htonl(x)) +//this isn't endian safe... +#define BSWAP64(x) ((htonl(x & 0xFFFFFFFF) << 32) | htonl(x >> 32)) +// Actually, we use ESAFExx() macros instead of this, and we use GCC to check the endianness... + +#if 0 +uint16 * memcon1_t = (uint16 *)&jagMemSpace[0xF00000]; +uint16 & memcon1 = *memcon1_t; +#else +uint16 & memcon1 = *((uint16 *)&jagMemSpace[0xF00000]); +uint16 & memcon2 = *((uint16 *)&jagMemSpace[0xF00002]); +uint16 & hc = *((uint16 *)&jagMemSpace[0xF00004]); +uint16 & vc = *((uint16 *)&jagMemSpace[0xF00006]); +uint16 & lph = *((uint16 *)&jagMemSpace[0xF00008]); +uint16 & lpv = *((uint16 *)&jagMemSpace[0xF0000A]); +#endif + +uint32 obData, olp, obf, vmode, bord1, bord2, hp, hbb, hbe, hs, hvs, + hdb1, hdb2, hde, vp, vbb, vbe, vs, vdb, vde, veb, vee, vi, pit0, pit1, heq, bg, int1, int2, clut, lbuf, + g_flags, g_mtxc, g_mtxa, g_end, g_pc, g_ctrl, g_hidata, g_remain, g_divctrl, + a1_base, a1_pixel, a1_flags, a1_clip, a1_step, a1_fstep, a1_fpixel, a1_inc, a1_finc, + a2_base, a2_flags, a2_pixel, a2_mask, a2_step, b_cmd, b_count, b_srcd, b_dstd, b_dstz, b_srcz1, b_srcz2, + b_patd, b_iinc, b_zinc, b_stop, b_i3, b_i2, b_i1, b_i0, b_z3, b_z2, b_z1, b_z0, + jpit1, jpit2, jpit3, jpit4, clk1, clk2, clk3, j_int, asidata, asistat, asictrl, asiclk, joystick, + joybuts, d_flags, d_mtxc, d_mtxa, d_end, d_pc, d_ctrl, d_mod, d_remain, d_divctrl, d_machi, + ltxd, rtxd, sstat, sclk, smode; + +// Memory debugging identifiers + +const char * whoName[9] = + { "Unknown", "Jaguar", "DSP", "GPU", "TOM", "JERRY", "M68K", "Blitter", "OP" }; -void memory_memoryUsage(FILE * fp) -{ - uint32 total = 0; - - fprintf(fp, "Memory usage:\n"); - -// sMemBlockInfo * alias = &memoryInfo; -// alias = alias->next; - sMemBlockInfo * alias= memoryInfo.next; - - while (alias) - { -// fprintf(fp, "\t%16i bytes: <%s> (@ %08X)\n", (int)alias->size, alias->info, (unsigned int)alias->ptr); - fprintf(fp, "\t%16i bytes: <%s> (@ %08X)\n", (int)alias->size, alias->info, alias->ptr); - total += alias->size; - alias = alias->next; - } - - fprintf(fp, "\n\t%16i bytes total(%i Mb)\n", (int)total, (int)(total >> 20)); - fprintf(fp, "\n\t%16i bytes memory peak(%i Mb)\n", (int)maximumAllocatedMemory, (int)(maximumAllocatedMemory >> 20)); -} diff --git a/src/memory.h b/src/memory.h index 5ea70d9..c2e49df 100644 --- a/src/memory.h +++ b/src/memory.h @@ -1,19 +1,80 @@ // // MEMORY.H: Header file // +// All Jaguar related memory and I/O locations are contained in this file +// #ifndef __MEMORY_H__ #define __MEMORY_H__ -#include // For FILE struct #include "types.h" -void MemoryInit(void); -void MemoryDone(void); -void memory_malloc_secure(void ** new_ptr, uint32 size, const char * info); -//void * memory_malloc_secure2(uint32 size, const char * info); -void * memory_malloc(uint32 size, const char * info); -void memory_free(void * ptr); -void memory_memoryUsage(FILE * fp); +extern uint8 jagMemSpace[]; + +extern uint8 * jaguarMainRAM; +extern uint8 * jaguarMainROM; +extern uint8 jaguarBootROM[]; +extern uint8 jaguarCDBootROM[]; +extern uint8 * gpuRAM; +extern uint8 * dspRAM; +extern uint16 & memcon1, & memcon2, & hc, & vc, & lph, & lpv; + +#if 1 +extern uint32 & butch, & dscntrl; +extern uint16 & ds_data; +extern uint32 & i2cntrl, & sbcntrl, & subdata, & subdatb, & sb_time, & fifo_data, & i2sdat2, & unknown; +#else +extern uint32 butch, dscntrl, ds_data, i2cntrl, sbcntrl, subdata, subdatb, sb_time, fifo_data, i2sdat2, unknown; #endif + +extern uint32 obData, olp, obf, vmode, bord1, bord2, hp, hbb, hbe, hs, hvs, + hdb1, hdb2, hde, vp, vbb, vbe, vs, vdb, vde, veb, vee, vi, pit0, pit1, heq, bg, int1, int2, clut, lbuf, + g_flags, g_mtxc, g_mtxa, g_end, g_pc, g_ctrl, g_hidata, g_remain, g_divctrl, + a1_base, a1_pixel, a1_flags, a1_clip, a1_step, a1_fstep, a1_fpixel, a1_inc, a1_finc, + a2_base, a2_flags, a2_pixel, a2_mask, a2_step, b_cmd, b_count, b_srcd, b_dstd, b_dstz, b_srcz1, b_srcz2, + b_patd, b_iinc, b_zinc, b_stop, b_i3, b_i2, b_i1, b_i0, b_z3, b_z2, b_z1, b_z0, + jpit1, jpit2, jpit3, jpit4, clk1, clk2, clk3, j_int, asidata, asistat, asictrl, asiclk, joystick, + joybuts, d_flags, d_mtxc, d_mtxa, d_end, d_pc, d_ctrl, d_mod, d_remain, d_divctrl, d_machi, + ltxd, rtxd, sstat, sclk, smode; + +// Read/write tracing enumeration + +enum { UNKNOWN, JAGUAR, DSP, GPU, TOM, JERRY, M68K, BLITTER, OP }; +extern const char * whoName[9]; + +// Some handy macros to help converting native endian to big endian (jaguar native) +// & vice versa + +#define SET64(r, a, v) r[(a)] = ((v) & 0xFF00000000000000) >> 56, r[(a)+1] = ((v) & 0x00FF000000000000) >> 48, \ + r[(a)+2] = ((v) & 0x0000FF0000000000) >> 40, r[(a)+3] = ((v) & 0x000000FF00000000) >> 32, \ + r[(a)+4] = ((v) & 0xFF000000) >> 24, r[(a)+5] = ((v) & 0x00FF0000) >> 16, \ + r[(a)+6] = ((v) & 0x0000FF00) >> 8, r[(a)+7] = (v) & 0x000000FF +#define GET64(r, a) (((uint64)r[(a)] << 56) | ((uint64)r[(a)+1] << 48) | \ + ((uint64)r[(a)+2] << 40) | ((uint64)r[(a)+3] << 32) | \ + ((uint64)r[(a)+4] << 24) | ((uint64)r[(a)+5] << 16) | \ + ((uint64)r[(a)+6] << 8) | (uint64)r[(a)+7]) +#define SET32(r, a, v) r[(a)] = ((v) & 0xFF000000) >> 24, r[(a)+1] = ((v) & 0x00FF0000) >> 16, \ + r[(a)+2] = ((v) & 0x0000FF00) >> 8, r[(a)+3] = (v) & 0x000000FF +#define GET32(r, a) ((r[(a)] << 24) | (r[(a)+1] << 16) | (r[(a)+2] << 8) | r[(a)+3]) +#define SET16(r, a, v) r[(a)] = ((v) & 0xFF00) >> 8, r[(a)+1] = (v) & 0xFF +#define GET16(r, a) ((r[(a)] << 8) | r[(a)+1]) + +// This is GCC specific, but we can fix that if we need to... +// Big plus of this approach is that these compile down to single instructions on little +// endian machines while one big endian machines we don't have any overhead. :-) + +#include +#include + +#if __BYTE_ORDER == __LITTLE_ENDIAN + #define ESAFE16(x) bswap_16(x) + #define ESAFE32(x) bswap_32(x) + #define ESAFE64(x) bswap_64(x) +#else + #define ESAFE16(x) (x) + #define ESAFE32(x) (x) + #define ESAFE64(x) (x) +#endif + +#endif // __MEMORY_H__ diff --git a/src/mmu.cpp b/src/mmu.cpp index 669a79e..9f9380e 100644 --- a/src/mmu.cpp +++ b/src/mmu.cpp @@ -14,6 +14,12 @@ #include "mmu.h" +#include // For NULL definition +#include "dac.h" +//#include "jaguar.h" +//#include "memory.h" +#include "wavetable.h" + /* Addresses to be handled: @@ -160,9 +166,212 @@ Would be nice to have a way of either calling a handler function or reading/writ directly to/from a variable or array... */ -enum MemType { MM_NOP = 0, MM_RAM, MM_ROM, MM_IO }; +enum MemType { MM_NOP = 0, MM_RAM = 1, MM_ROM = 2, MM_IO_R = 4, MM_IO_W = 8, MM_IO = 12 }; + +/* +Would be nice to have different structs tailored to different memory access types, +but if we don't do that, we can encode things as follows: + +MM_NOP: readFunc = writeFunc = NULL +MM_RAM: readFunc = byte array pointer, writeFunc = NULL +MM_ROM: readFunc = byte array pointer, writeFunc = NULL +MM_IO_R: readFunc = function pointer to read function, writeFunc = NULL +MM_IO_W: readFunc = NULL, writeFunc = function pointer to write function +MM_IO: readFunc = function pointer to read function, writeFunc = function pointer to write function + +There may be a need to have readFunc do both read & write functions (makes sense? perhaps) + +Should we have a read mask as well, for the purposes of reading? +*/ + +struct MemDesc { + uint32 startAddr; + uint32 endAddr; + MemType type; +// (void (* ioFunc)(uint32, uint32)); // <-- could also be a pointer to RAM... + void * readFunc; // This is read & write with MM_IO + void * writeFunc; + uint32 mask; +}; + + +MemDesc memoryMap[] = { + { 0x000000, 0x3FFFFF, MM_RAM, jaguarMainRAM }, + { 0x800000, 0xDFFEFF, MM_ROM, jaguarMainROM }, + + { 0xDFFF00, 0xDFFF03, MM_IO, &butch }, // base of Butch == interrupt control register, R/W + { 0xDFFF04, 0xDFFF07, MM_IO, &dscntrl }, // DSA control register, R/W + { 0xDFFF0A, 0xDFFF0B, MM_IO, &ds_data }, // DSA TX/RX data, R/W + { 0xDFFF10, 0xDFFF13, MM_IO, &i2cntrl }, // i2s bus control register, R/W + { 0xDFFF14, 0xDFFF17, MM_IO, &sbcntrl }, // CD subcode control register, R/W + { 0xDFFF18, 0xDFFF1B, MM_IO, &subdata }, // Subcode data register A + { 0xDFFF1C, 0xDFFF1F, MM_IO, &subdatb }, // Subcode data register B + { 0xDFFF20, 0xDFFF23, MM_IO, &sb_time }, // Subcode time and compare enable (D24) + { 0xDFFF24, 0xDFFF27, MM_IO, &fifo_data }, // i2s FIFO data + { 0xDFFF28, 0xDFFF2B, MM_IO, &i2sdat2 }, // i2s FIFO data (old) + { 0xDFFF2C, 0xDFFF2F, MM_IO, &unknown }, // Seems to be some sort of I2S interface + + { 0xE00000, 0xE3FFFF, MM_ROM, jaguarBootROM }, + + // TOM REGISTERS + + { 0xF00000, 0xF00001, MM_IO, &memcon1 }, // *MEMCON1 Memory Control Register 1 F00000 RW + { 0xF00002, 0xF00003, MM_IO, &memcon2 }, // *MEMCON2 Memory Control Register 2 F00002 RW + { 0xF00004, 0xF00005, MM_IO, &hc }, // HC Horizontal Count F00004 RW + { 0xF00006, 0xF00007, MM_IO, &vc }, // VC Vertical Count F00006 RW + { 0xF00008, 0xF00009, MM_IO_R, &lph }, // LPH Light Pen Horizontal F00008 RO + { 0xF0000A, 0xF0000B, MM_IO_R, &lpv }, // LPV Light Pen Vertical F0000A RO + { 0xF00010, 0xF00017, MM_IO_R, &obData }, // OB[0-3] Object Data Field F00010-16 RO + { 0xF00020, 0xF00023, MM_IO_W, &olp }, // OLP Object List Pointer F00020-23 WO + { 0xF00026, 0xF00027, MM_IO_W, &obf }, // OBF Object Flag F00026 WO + { 0xF00028, 0xF00029, MM_IO_W, &vmode }, // VMODE Video Mode F00028 WO + { 0xF0002A, 0xF0002B, MM_IO_W, &bord1 }, // BORD1 Border Colour (Red & Green) F0002A WO + { 0xF0002C, 0xF0002D, MM_IO_W, &bord2 }, // BORD2 Border Colour (Blue) F0002C WO + { 0xF0002E, 0xF0002F, MM_IO_W, &hp }, // *HP Horizontal Period F0002E WO + { 0xF00030, 0xF00031, MM_IO_W, &hbb }, // *HBB Horizontal Blank Begin F00030 WO + { 0xF00032, 0xF00033, MM_IO_W, &hbe }, // *HBE Horizontal Blank End F00032 WO + { 0xF00034, 0xF00035, MM_IO_W, &hs }, // *HS Horizontal Sync F00034 WO + { 0xF00036, 0xF00037, MM_IO_W, &hvs }, // *HVS Horizontal Vertical Sync F00036 WO + { 0xF00038, 0xF00039, MM_IO_W, &hdb1 }, // HDB1 Horizontal Display Begin 1 F00038 WO + { 0xF0003A, 0xF0003B, MM_IO_W, &hdb2 }, // HDB2 Horizontal Display Begin 2 F0003A WO + { 0xF0003C, 0xF0003D, MM_IO_W, &hde }, // HDE Horizontal Display End F0003C WO + { 0xF0003E, 0xF0003F, MM_IO_W, &vp }, // *VP Vertical Period F0003E WO + { 0xF00040, 0xF00041, MM_IO_W, &vbb }, // *VBB Vertical Blank Begin F00040 WO + { 0xF00042, 0xF00043, MM_IO_W, &vbe }, // *VBE Vertical Blank End F00042 WO + { 0xF00044, 0xF00045, MM_IO_W, &vs }, // *VS Vertical Sync F00044 WO + { 0xF00046, 0xF00047, MM_IO_W, &vdb }, // VDB Vertical Display Begin F00046 WO + { 0xF00048, 0xF00049, MM_IO_W, &vde }, // VDE Vertical Display End F00048 WO + { 0xF0004A, 0xF0004B, MM_IO_W, &veb }, // *VEB Vertical Equalization Begin F0004A WO + { 0xF0004C, 0xF0004D, MM_IO_W, &vee }, // *VEE Vertical Equalization End F0004C WO + { 0xF0004E, 0xF0004F, MM_IO_W, &vi }, // VI Vertical Interrupt F0004E WO + { 0xF00050, 0xF00051, MM_IO_W, &pit0 }, // PIT[0-1] Programmable Interrupt Timer F00050-52 WO + { 0xF00052, 0xF00053, MM_IO_W, &pit1 }, + { 0xF00054, 0xF00055, MM_IO_W, &heq }, // *HEQ Horizontal Equalization End F00054 WO + { 0xF00058, 0xF0005B, MM_IO_W, &bg }, // BG Background Colour F00058 WO + { 0xF000E0, 0xF000E1, MM_IO, &int1 }, // INT1 CPU Interrupt Control Register F000E0 RW + { 0xF000E2, 0xF000E3, MM_IO_W, &int2 }, // INT2 CPU Interrupt Resume Register F000E2 WO + { 0xF00400, 0xF005FF, MM_RAM, &clut }, // CLUT Colour Look-Up Table F00400-7FE RW + { 0xF00600, 0xF007FF, MM_RAM, &clut }, + { 0xF00800, 0xF01D9F, MM_RAM, &lbuf }, // LBUF Line Buffer F00800-1D9E RW +//Need high speed RAM interface for GPU & DSP (we have it now...) + + // GPU REGISTERS + + { 0xF02100, 0xF02103, MM_IO, &g_flags }, // G_FLAGS GPU Flags Register F02100 RW + { 0xF02104, 0xF02107, MM_IO_W, &g_mtxc }, // G_MTXC Matrix Control Register F02104 WO + { 0xF02108, 0xF0210B, MM_IO_W, &g_mtxa }, // G_MTXA Matrix Address Register F02108 WO + { 0xF0210C, 0xF0210F, MM_IO_W, &g_end }, // G_END Data Organization Register F0210C WO + { 0xF02110, 0xF02113, MM_IO, &g_pc }, // G_PC GPU Program Counter F02110 RW + { 0xF02114, 0xF02117, MM_IO, &g_ctrl }, // G_CTRL GPU Control/Status Register F02114 RW + { 0xF02118, 0xF0211B, MM_IO, &g_hidata }, // G_HIDATA High Data Register F02118 RW + { 0xF0211C, 0xF0211F, MM_IO, &g_remain, &g_divctrl }, // G_REMAIN Divide Unit Remainder F0211C RO + // G_DIVCTRL Divide Unit Control F0211C WO + { 0xF03000, 0xF03FFF, MM_RAM, gpuRAM }, + + // BLITTER REGISTERS + + { 0xF02200, 0xF02203, MM_IO_W, &a1_base }, // A1_BASE A1 Base Register F02200 WO + { 0xF02204, 0xF02207, MM_IO, &a1_pixel, &a1_flags }, // A1_FLAGS Flags Register F02204 WO + { 0xF02208, 0xF0220B, MM_IO_W, &a1_clip }, // A1_CLIP A1 Clipping Size F02208 WO + { 0xF0220C, 0xF0220F, MM_IO_W, &a1_pixel }, // A1_PIXEL A1 Pixel Pointer F0220C WO +// F02204 RO + { 0xF02210, 0xF02213, MM_IO_W, &a1_step }, // A1_STEP A1 Step Value F02210 WO + { 0xF02214, 0xF02217, MM_IO_W, &a1_fstep }, // A1_FSTEP A1 Step Fraction Value F02214 WO + { 0xF02218, 0xF0221B, MM_IO, &a1_fpixel }, // A1_FPIXEL A1 Pixel Pointer Fraction F02218 RW + { 0xF0221C, 0xF0221F, MM_IO_W, &a1_inc }, // A1_INC A1 Increment F0221C WO + { 0xF02220, 0xF02223, MM_IO_W, &a1_finc }, // A1_FINC A1 Increment Fraction F02220 WO + { 0xF02224, 0xF02227, MM_IO_W, &a2_base }, // A2_BASE A2 Base Register F02224 WO + { 0xF02228, 0xF0222B, MM_IO_W, &a2_flags }, // A2_FLAGS A2 Flags Register F02228 WO + { 0xF0222C, 0xF0222F, MM_IO, &a2_pixel, &a2_mask }, // A2_MASK A2 Window Mask F0222C WO + { 0xF02230, 0xF02233, MM_IO_W, &a2_pixel }, // A2_PIXEL A2 Pixel Pointer F02230 WO +// F0222C RO + { 0xF02234, 0xF02237, MM_IO_W, &a2_step }, // A2_STEP A2 Step Value F02234 WO + { 0xF02238, 0xF0223B, MM_IO, &b_cmd }, // B_CMD Command/Status Register F02238 RW + { 0xF0223C, 0xF0223F, MM_IO_W, &b_count }, // B_COUNT Counters Register F0223C WO + { 0xF02240, 0xF02247, MM_IO_W, &b_srcd }, // B_SRCD Source Data Register F02240 WO + { 0xF02248, 0xF0224F, MM_IO_W, &b_dstd }, // B_DSTD Destination Data Register F02248 WO + { 0xF02250, 0xF02258, MM_IO_W, &b_dstz }, // B_DSTZ Destination Z Register F02250 WO + { 0xF02258, 0xF0225F, MM_IO_W, &b_srcz1 }, // B_SRCZ1 Source Z Register 1 F02258 WO + { 0xF02260, 0xF02267, MM_IO_W, &b_srcz2 }, // B_SRCZ2 Source Z Register 2 F02260 WO + { 0xF02268, 0xF0226F, MM_IO_W, &b_patd }, // B_PATD Pattern Data Register F02268 WO + { 0xF02270, 0xF02273, MM_IO_W, &b_iinc }, // B_IINC Intensity Increment F02270 WO + { 0xF02274, 0xF02277, MM_IO_W, &b_zinc }, // B_ZINC Z Increment F02274 WO + { 0xF02278, 0xF0227B, MM_IO_W, &b_stop }, // B_STOP Collision Control F02278 WO + { 0xF0227C, 0xF0227F, MM_IO_W, &b_i3 }, // B_I3 Intensity 3 F0227C WO + { 0xF02280, 0xF02283, MM_IO_W, &b_i2 }, // B_I2 Intensity 2 F02280 WO + { 0xF02284, 0xF02287, MM_IO_W, &b_i1 }, // B_I1 Intensity 1 F02284 WO + { 0xF02288, 0xF0228B, MM_IO_W, &b_i0 }, // B_I0 Intensity 0 F02288 WO + { 0xF0228C, 0xF0228F, MM_IO_W, &b_z3 }, // B_Z3 Z 3 F0228C WO + { 0xF02290, 0xF02293, MM_IO_W, &b_z2 }, // B_Z2 Z 2 F02290 WO + { 0xF02294, 0xF02297, MM_IO_W, &b_z1 }, // B_Z1 Z 1 F02294 WO + { 0xF02298, 0xF0229B, MM_IO_W, &b_z0 }, // B_Z0 Z 0 F02298 WO + +// JTRM sez ALL GPU address space is accessible from $8000 offset as "fast" 32-bit WO access +// Dunno if anything actually USED it tho... :-P + { 0xF0A100, 0xF0A103, MM_IO_W, &g_flags }, // G_FLAGS GPU Flags Register F02100 RW + { 0xF0A104, 0xF0A107, MM_IO_W, &g_mtxc }, // G_MTXC Matrix Control Register F02104 WO + { 0xF0A108, 0xF0A10B, MM_IO_W, &g_mtxa }, // G_MTXA Matrix Address Register F02108 WO + { 0xF0A10C, 0xF0A10F, MM_IO_W, &g_end }, // G_END Data Organization Register F0210C WO + { 0xF0A110, 0xF0A113, MM_IO_W, &g_pc }, // G_PC GPU Program Counter F02110 RW + { 0xF0A114, 0xF0A117, MM_IO_W, &g_ctrl }, // G_CTRL GPU Control/Status Register F02114 RW + { 0xF0A118, 0xF0A11B, MM_IO_W, &g_hidata }, // G_HIDATA High Data Register F02118 RW + { 0xF0A11C, 0xF0A11F, MM_IO_W, &g_divctrl }, // G_REMAIN Divide Unit Remainder F0211C RO + { 0xF0B000, 0xF0BFFF, MM_IO_W, gpuRAM }, // "Fast" interface to GPU RAM + + // JERRY REGISTERS + + { 0xF10000, 0xF10002, MM_IO_W, &jpit1 }, // JPIT1 Timer 1 Pre-scaler F10000 WO + { 0xF10002, 0xF10003, MM_IO_W, &jpit2 }, // JPIT2 Timer 1 Divider F10002 WO + { 0xF10004, 0xF10005, MM_IO_W, &jpit3 }, // JPIT3 Timer 2 Pre-scaler F10004 WO + { 0xF10006, 0xF10007, MM_IO_W, &jpit4 }, // JPIT4 Timer 2 Divider F10006 WO + { 0xF10010, 0xF10011, MM_IO_W, &clk1 }, // *CLK1 Processor Clock Divider F10010 WO + { 0xF10012, 0xF10013, MM_IO_W, &clk2 }, // *CLK2 Video Clock Divider F10012 WO + { 0xF10014, 0xF10015, MM_IO_W, &clk3 }, // *CLK3 Chroma Clock Divider F10014 WO + { 0xF10020, 0xF10021, MM_IO, &j_int }, // J_INT Interrup Control Register F10020 RW + { 0xF10030, 0xF10031, MM_IO, &asidata }, // ASIDATA Asynchronous Serial Data F10030 RW + { 0xF10032, 0xF10033, MM_IO, &asistat, &asictrl }, // ASICTRL Asynchronous Serial Control F10032 WO + // ASISTAT Asynchronous Serial Status F10032 RO + { 0xF10034, 0xF10035, MM_IO, &asiclk }, // ASICLK Asynchronous Serial Interface Clock F10034 RW + { 0xF10036, 0xF10037, MM_IO_R, &jpit1 }, // JPIT1 Timer 1 Pre-scaler F10036 RO + { 0xF10038, 0xF10039, MM_IO_R, &jpit2 }, // JPIT2 Timer 1 Divider F10038 RO + { 0xF1003A, 0xF1003B, MM_IO_R, &jpit3 }, // JPIT3 Timer 2 Pre-scaler F1003A RO + { 0xF1003C, 0xF1003D, MM_IO_R, &jpit4 }, // JPIT4 Timer 2 Divider F1003C RO + + { 0xF14000, 0xF14001, MM_IO, &joystick }, // JOYSTICK Joystick Register F14000 RW + { 0xF14002, 0xF14003, MM_IO, &joybuts }, // JOYBUTS Button Register F14002 RW + + // DSP REGISTERS + + { 0xF1A100, 0xF1A103, MM_IO, &d_flags }, // D_FLAGS DSP Flags Register F1A100 RW + { 0xF1A104, 0xF1A107, MM_IO_W, &d_mtxc }, // D_MTXC DSP Matrix Control Register F1A104 WO + { 0xF1A108, 0xF1A10B, MM_IO_W, &d_mtxa }, // D_MTXA DSP Matrix Address Register F1A108 WO + { 0xF1A10C, 0xF1A10F, MM_IO_W, &d_end }, // D_END DSP Data Organization Register F1A10C WO + { 0xF1A110, 0xF1A113, MM_IO, &d_pc }, // D_PC DSP Program Counter F1A110 RW + { 0xF1A114, 0xF1A117, MM_IO, &d_ctrl }, // D_CTRL DSP Control/Status Register F1A114 RW + { 0xF1A118, 0xF1A11B, MM_IO_W, &d_mod }, // D_MOD Modulo Instruction Mask F1A118 WO + { 0xF1A11C, 0xF1A11F, MM_IO_W, &d_remain, &d_divctrl }, // D_REMAIN Divide Unit Remainder F1A11C RO + // D_DIVCTRL Divide Unit Control F1A11C WO + { 0xF1A120, 0xF1A123, MM_IO_R, &d_machi }, // D_MACHI MAC High Result Bits F1A120 RO + + + { 0xF1A148, 0xF1A149, MM_IO, &lrxd, <xd }, // LTXD Left Transmit Data F1A148 WO + // LRXD Left Receive Data F1A148 RO + // L_I2S Left I2S Serial Interface F1A148 RW + { 0xF1A14C, 0xF1A14D, MM_IO, &rrxd, &rtxd }, // RTXD Right Transmit Data F1A14C WO + // RRXD Right Receive Data F1A14C RO + // R_I2S Right I2S Serial Interface F1A14C RW + { 0xF1A150, 0xF1A150, MM_IO, &sstat, &sclk }, // SCLK Serial Clock Frequency F1A150 WO + // SSTAT Serial Status F1A150 RO + { 0xF1A154, 0xF1A157, MM_IO_W, &smode }, // SMODE Serial Mode F1A154 WO + + { 0xF1B000, 0xF1CFFF, MM_RAM, dspRAM }, // F1B000-F1CFFF R/W xxxxxxxx xxxxxxxx Local DSP RAM + { 0xF1D000, 0xF1DFFF, MM_ROM, waveTableROM }, +// hi-speed interface for DSP??? Ain't no such thang... + { 0xFFFFFF, 0xFFFFFF, MM_NOP } // End of memory address sentinel +}; #if 0 + // Jaguar Memory map/handlers uint32 memoryMap[] = { { 0x000000, 0x3FFFFF, MM_RAM, jaguarMainRAM }, @@ -273,7 +482,107 @@ void MMUWrite64(uint32 address, uint64 data, uint32 who/*= UNKNOWN*/) uint8 MMURead8(uint32 address, uint32 who/*= UNKNOWN*/) { - return 0; + // Search for address in the memory map + // NOTE: This assumes that all entries are linear and sorted in ascending order! + + MemDesc memory; + uint8 byte = 0xFE; + + uint32 i = 0; + while (true) + { + if (address <= memoryMap[i].endAddr) + { + if (address >= memoryMap[i].startAddr) + { + memory = memoryMap[i]; + break; + } + else + return 0xFF; // Wasn't found... + } + + i++; + + if (memoryMap[i].startAddr == 0xFFFFFF) + return 0xFF; // Exhausted the list, so bail! + } + + uint32 offset = address - memory.startAddr; + uint32 size = memory.endAddr - memory.startAddr + 1; + uint8 byteShift[8] = { 0, 8, 16, 24, 32, 40, 48, 56 }; + + if (memory.type == MM_RAM || memory.type == MM_ROM) + { + byte = ((uint8 *)memory.readFunc)[offset]; + } + else if (memory.type == MM_IO_R || memory.type == MM_IO) + { + // Problem here: We don't know yet how wide the function is, so we don't know + // how to properly cast it. We COULD ignore the problem by passing in/receiving + // 64-bits of data and letting the function make heads or tails of it, but we + // still have the problem of, say, taking a byte from a 32-bit value. +/* +We can do like so: + uint8 byteShift[8] = { 0, 8, 16, 24, 32, 40, 48, 56 }; + size = memory.endAddr - memory.startAddr + 1; + byte = (returnValFromFunc >> byteShift[offset]) & 0xFF; + +Let's see, will this work depending on the endianess? +uint32 dword +accessing it like so: +((uint8 *)dword &)[0] --> should give us high byte +but if we assign it directly... +dword = 0x12345678 --> becomes 78 56 34 12 in memory, ptr[0] will be 78 in LE! +dword = 0x12345678 --> becomes 12 34 56 78 in memory, ptr[0] will be 12 in BE! + +So we're in danger if we use the variables directly! We'd need something like +#define ENDIAN_SAFE_16(x) swap lo & hi bytes on LE systems +#define ENDIAN_SAFE_16(x) do nothing on BE systems + +Then, if we want to use a jaguar variable, we need to cast it like so: +uint16 my_vbb = ENDIAN_SAFE_16(vbb); + +We have something like this already in jaguar.h, since we treat I/O spaces like +contiguous memory anyway... For reference: + +// Some handy macros to help converting native endian to big endian (jaguar native) +// & vice versa + +#define SET64(r, a, v) r[(a)] = ((v) & 0xFF00000000000000) >> 56, r[(a)+1] = ((v) & 0x00FF000000000000) >> 48, \ + r[(a)+2] = ((v) & 0x0000FF0000000000) >> 40, r[(a)+3] = ((v) & 0x000000FF00000000) >> 32, \ + r[(a)+4] = ((v) & 0xFF000000) >> 24, r[(a)+5] = ((v) & 0x00FF0000) >> 16, \ + r[(a)+6] = ((v) & 0x0000FF00) >> 8, r[(a)+7] = (v) & 0x000000FF +#define GET64(r, a) (((uint64)r[(a)] << 56) | ((uint64)r[(a)+1] << 48) | \ + ((uint64)r[(a)+2] << 40) | ((uint64)r[(a)+3] << 32) | \ + ((uint64)r[(a)+4] << 24) | ((uint64)r[(a)+5] << 16) | \ + ((uint64)r[(a)+6] << 8) | (uint64)r[(a)+7]) +#define SET32(r, a, v) r[(a)] = ((v) & 0xFF000000) >> 24, r[(a)+1] = ((v) & 0x00FF0000) >> 16, \ + r[(a)+2] = ((v) & 0x0000FF00) >> 8, r[(a)+3] = (v) & 0x000000FF +#define GET32(r, a) ((r[(a)] << 24) | (r[(a)+1] << 16) | (r[(a)+2] << 8) | r[(a)+3]) +#define SET16(r, a, v) r[(a)] = ((v) & 0xFF00) >> 8, r[(a)+1] = (v) & 0xFF +#define GET16(r, a) ((r[(a)] << 8) | r[(a)+1]) +*/ + // Confused? Let me enlighten... What we're doing here is casting + // data1 as a pointer to a function which returns a Window pointer and + // which takes no parameters (the "(Window *(*)(void))" part), then + // derefencing it (the "*" in front of that) in order to call the + // function that it points to. Clear as mud? Yeah, I hate function + // pointers too, but what else are you gonna do? +// mainWindow = (*(Window *(*)(void))event.user.data1)(); +// uint32 retVal = (*(uint32(*)(uint32))memory.readFunc)(offset); +//#define FUNC_CAST(x) (*(uint32(*)(uint32))x) +// uint32 retVal = FUNC_CAST(memory.readFunc)(offset); +#define FUNC_CAST(retVal, function, params) (*(retVal(*)(params))function) + uint64 retVal = FUNC_CAST(uint64, memory.readFunc, uint32)(offset); + byte = (retVal >> byteShift[offset]) & 0xFF; + } + else if (memory.type == MM_IO_W) + { + byte = 0xFF; // Write only, what do we return? A fixed value? + } + + return byte; } uint16 MMURead16(uint32 address, uint32 who/*= UNKNOWN*/) diff --git a/src/mmu.h b/src/mmu.h index 6a4cce9..9a04e9f 100644 --- a/src/mmu.h +++ b/src/mmu.h @@ -6,7 +6,11 @@ // by James L. Hammons // -#include "types.h" +#ifndef __MMU_H__ +#define __MMU_H__ + +//#include "types.h" +#include "memory.h" void MMUWrite8(uint32 address, uint8 data, uint32 who = UNKNOWN); void MMUWrite16(uint32 address, uint16 data, uint32 who = UNKNOWN); @@ -17,3 +21,4 @@ uint16 MMURead16(uint32 address, uint32 who = UNKNOWN); uint32 MMURead32(uint32 address, uint32 who = UNKNOWN); uint64 MMURead64(uint32 address, uint32 who = UNKNOWN); +#endif // __MMU_H__ diff --git a/src/objectp.cpp b/src/objectp.cpp index 856b233..3863164 100644 --- a/src/objectp.cpp +++ b/src/objectp.cpp @@ -4,6 +4,13 @@ // Original source by David Raingeard (Cal2) // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Extensive cleanups/fixes/rewrites by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "objectp.h" @@ -14,6 +21,7 @@ #include "jaguar.h" #include "log.h" #include "m68k.h" +#include "memory.h" #include "tom.h" //#define OP_DEBUG @@ -312,7 +320,7 @@ void DumpFixedObject(uint64 p0, uint64 p1) // //Need to fix this so that when an GPU object IRQ happens, we can pick up OP processing //where we left off. !!! FIX !!! -#warning Need to fix this so that when an GPU object IRQ happens, we can pick up OP processing where we left off. !!! FIX !!! +#warning "Need to fix this so that when an GPU object IRQ happens, we can pick up OP processing where we left off. !!! FIX !!!" void OPProcessList(int scanline, bool render) { extern int op_start_log; @@ -617,6 +625,7 @@ OP: Scaled bitmap 4x? 4bpp at 34,? hscale=80 fpix=0 data=000756E8 pitch 1 hflipp case OBJECT_TYPE_GPU: { //WriteLog("OP: Asserting GPU IRQ #3...\n"); +#warning "Need to fix OP GPU IRQ handling! !!! FIX !!!" OPSetCurrentObject(p0); GPUSetIRQLine(3, ASSERT_LINE); //Also, OP processing is suspended from this point until OBF (F00026) is written to... @@ -656,8 +665,8 @@ OP: Scaled bitmap 4x? 4bpp at 34,? hscale=80 fpix=0 data=000756E8 pitch 1 hflipp break; case CONDITION_SECOND_HALF_LINE: // This basically means branch if bit 10 of HC is set +#warning "Unhandled condition code causes emulator to crash... !!! FIX !!!" WriteLog("OP: Unexpected CONDITION_SECOND_HALF_LINE in BRANCH object\nOP: shuting down\n"); -// fclose(log_get()); LogDone(); exit(0); break; @@ -693,6 +702,7 @@ OP: Scaled bitmap 4x? 4bpp at 34,? hscale=80 fpix=0 data=000756E8 pitch 1 hflipp // Here is a little sanity check to keep the OP from locking up the machine // when fed bad data. Better would be to count how many actual cycles it used // and bail out/reenter to properly simulate an overloaded OP... !!! FIX !!! +#warning "Better would be to count how many actual cycles it used and bail out/reenter to properly simulate an overloaded OP... !!! FIX !!!" opCyclesToRun--; if (!opCyclesToRun) return; diff --git a/src/settings.cpp b/src/settings.cpp index 40d417e..b273cf6 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2,6 +2,13 @@ // SETTINGS.CPP: Virtual Jaguar configuration loading/saving support // // by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log // #include "settings.h" @@ -12,6 +19,9 @@ #include "sdlemu_config.h" #include "log.h" +// Temporary vars... +bool smoothGLOutput = false; + using namespace std; // Global variables diff --git a/src/settings.h b/src/settings.h index e527040..f998b8b 100644 --- a/src/settings.h +++ b/src/settings.h @@ -30,7 +30,7 @@ struct VJSettings bool hardwareTypeAlpine; uint32 frameSkip; uint32 renderType; - + // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * uint16 p1KeyBindings[21]; @@ -57,4 +57,7 @@ void SaveVJSettings(void); extern VJSettings vjs; +// Temporary vars... +extern bool smoothGLOutput; + #endif // __SETTINGS_H__ diff --git a/src/state.cpp b/src/state.cpp index 7b6f3d4..09fe443 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -2,6 +2,13 @@ // state.cpp: VJ machine state save/load support // // by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "state.h" diff --git a/src/tom.cpp b/src/tom.cpp index f1a7ed8..b3882a0 100644 --- a/src/tom.cpp +++ b/src/tom.cpp @@ -4,6 +4,14 @@ // Originally by David Raingeard (cal2) // GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) // Cleanups and endian wrongness amelioration by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) +// // Note: Endian wrongness probably stems from the MAME origins of this emu and // the braindead way in which MAME handles memory. :-) // @@ -255,6 +263,7 @@ #include "jaguar.h" #include "log.h" #include "m68k.h" +//#include "memory.h" #include "objectp.h" #include "settings.h" #include "video.h" @@ -548,6 +557,7 @@ uint32 RGB16ToRGB32[0x10000]; uint32 CRY16ToRGB32[0x10000]; uint32 MIX16ToRGB32[0x10000]; +#warning "This is not endian-safe. !!! FIX !!!" void TOMFillLookupTables(void) { for(uint32 i=0; i<0x10000; i++) @@ -568,12 +578,12 @@ void TOMFillLookupTables(void) b = (((uint32)bluecv[chrm][chrl]) * y) >> 8; CRY16ToRGB32[i] = 0xFF000000 | (b << 16) | (g << 8) | r; - MIX16ToRGB32[i] = CRY16ToRGB32[i]; + MIX16ToRGB32[i] = (i & 0x01 ? RGB16ToRGB32[i] : CRY16ToRGB32[i]); } - for(uint32 i=0; i<0x10000; i++) - if (i & 0x01) - MIX16ToRGB32[i] = RGB16ToRGB32[i]; +// for(uint32 i=0; i<0x10000; i++) +// if (i & 0x01) +// MIX16ToRGB32[i] = RGB16ToRGB32[i]; } void TOMSetPendingJERRYInt(void) @@ -613,10 +623,9 @@ uint8 TOMGetVideoMode(void) } //Used in only one place (and for debug purposes): OBJECTP.CPP +#warning "Used in only one place (and for debug purposes): OBJECTP.CPP !!! FIX !!!" uint16 TOMGetVDB(void) { -// This in NOT VDB!!! -// return GET16(tomRam8, VBE); return GET16(tomRam8, VDB); } diff --git a/src/tom.h b/src/tom.h index ea7ce35..03bd830 100644 --- a/src/tom.h +++ b/src/tom.h @@ -6,7 +6,8 @@ #define __TOM_H__ //#include "jaguar.h" -#include "types.h" +//#include "types.h" +#include "memory.h" #define VIDEO_MODE_16BPP_CRY 0 #define VIDEO_MODE_24BPP_RGB 1 diff --git a/src/types.h b/src/types.h index e001c99..7b2a694 100644 --- a/src/types.h +++ b/src/types.h @@ -19,8 +19,4 @@ typedef int32_t int32; typedef uint64_t uint64; typedef int64_t int64; -// Read/write tracing enumeration - -enum { UNKNOWN, JAGUAR, DSP, GPU, TOM, JERRY, M68K, BLITTER, OP }; - #endif // __TYPES_H__ diff --git a/src/unzip.c b/src/unzip.c index 67a494c..9e6c4a3 100644 --- a/src/unzip.c +++ b/src/unzip.c @@ -1,7 +1,14 @@ // -// ZIP file support (mostly ripped from MAME) +// ZIP file support (mostly ripped from MAME--thx MAME team!) // // Added by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include diff --git a/src/video.cpp b/src/video.cpp index 4f33d66..1d86f18 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -2,11 +2,18 @@ // VIDEO.CPP: SDL/local hardware specific video routines // // by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) // #include "video.h" -#include "gui.h" // For "finished" +//#include "gui.h" // For "finished" #include "log.h" #include "tom.h" #include "sdlemu_opengl.h" @@ -17,7 +24,7 @@ //shouldn't these exist here??? Prolly. //And now, they do! :-) SDL_Surface * surface, * mainSurface; -SDL_Joystick * joystick; +SDL_Joystick * joystick1; Uint32 mainSurfaceFlags; //int16 * backbuffer; uint32 * backbuffer; @@ -151,7 +158,7 @@ bool VideoInit(void) } else { - if ((joystick = SDL_JoystickOpen(vjs.joyport)) == 0) + if ((joystick1 = SDL_JoystickOpen(vjs.joyport)) == 0) { vjs.useJoystick = false; printf("VJ: Unable to open a Joystick on port: %d\n", (int)vjs.joyport); @@ -179,7 +186,7 @@ void VideoDone(void) if (vjs.useOpenGL) sdlemu_close_opengl(); - SDL_JoystickClose(joystick); + SDL_JoystickClose(joystick1); SDL_FreeSurface(surface); free(backbuffer); } @@ -243,7 +250,8 @@ void ResizeScreen(uint32 width, uint32 height) //as well as screwing up SDL... !!! FIX !!! // exit(1); // OK, this is cleaner. We can't continue if there is no surface created! - finished = true; +#warning "!!! FIX !!! (finished = true)" +// finished = true; } if (vjs.useOpenGL) diff --git a/src/vj.cpp b/src/vj.cpp index 123a0f5..0619b05 100644 --- a/src/vj.cpp +++ b/src/vj.cpp @@ -9,7 +9,7 @@ #include #include #include "file.h" -#include "gui.h" +//#include "gui.h" #include "jaguar.h" #include "log.h" #include "memory.h" @@ -39,7 +39,7 @@ //Maybe we should move the video stuff to TOM? Makes more sense to put it there... //Actually, it would probably be better served in VIDEO.CPP... !!! FIX !!! [DONE] //uint32 totalFrames;//temp, so we can grab this from elsewhere... -int main(int argc, char * argv[]) +int main_old(int argc, char * argv[]) { //NOTE: This isn't actually used anywhere... !!! FIX !!! int32 nFrameskip = 0; // Default: Show every frame @@ -157,8 +157,8 @@ int main(int argc, char * argv[]) WriteLog("VJ: SDL successfully initialized.\n"); - WriteLog("Initializing memory subsystem...\n"); - MemoryInit(); +// WriteLog("Initializing memory subsystem...\n"); +// MemoryInit(); #ifdef VJ_RELEASE_VERSION WriteLog("Virtual Jaguar %s (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__); #else @@ -188,11 +188,13 @@ WriteLog("About to attempt to load BIOSes...\n"); WriteLog("Initializing video subsystem...\n"); VideoInit(); WriteLog("Initializing GUI subsystem...\n"); - GUIInit(); +#warning "!!! FIX !!! (GUIInit())" +// GUIInit(); // Now with crunchy GUI goodness! WriteLog("About to start GUI...\n"); - GUIMain(haveCart ? argv[1] : NULL); +#warning "!!! FIX !!! (GUIMain(...))" +// GUIMain(haveCart ? argv[1] : NULL); //This is no longer accurate...! // int elapsedTime = clock() - startTime; @@ -201,12 +203,12 @@ WriteLog("About to start GUI...\n"); JaguarDone(); VideoDone(); - MemoryDone(); +// MemoryDone(); LogDone(); // Free SDL components last...! SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER); SDL_Quit(); - return 0; + return 0; } diff --git a/src/wavetable.cpp b/src/wavetable.cpp new file mode 100644 index 0000000..c9998cd --- /dev/null +++ b/src/wavetable.cpp @@ -0,0 +1,278 @@ +// +// Jaguar Wavetable ROM +// +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/16/2010 Created this log ;-) +// + +// +// In a real Jaguar, these are 16-bit values that are sign-extended to 32 bits. +// Each entry has 128 values (e.g., SINE goes from F1D200-F1D3FF) +// +// NOTE: This can probably be converted to 32-bit table, since I don't think +// that unaligned access is allowed... + +/*const*/ unsigned char waveTableROM[4096] = +{ + 0xFF, 0xFF, 0xC2, 0x01, 0xFF, 0xFF, 0xC4, 0x01, 0xFF, 0xFF, 0xC6, 0x01, 0xFF, 0xFF, 0xC8, 0x01, + 0xFF, 0xFF, 0xCA, 0x01, 0xFF, 0xFF, 0xCC, 0x01, 0xFF, 0xFF, 0xCE, 0x01, 0xFF, 0xFF, 0xD0, 0x01, + 0xFF, 0xFF, 0xD2, 0x01, 0xFF, 0xFF, 0xD4, 0x01, 0xFF, 0xFF, 0xD6, 0x01, 0xFF, 0xFF, 0xD8, 0x01, + 0xFF, 0xFF, 0xDA, 0x01, 0xFF, 0xFF, 0xDC, 0x01, 0xFF, 0xFF, 0xDE, 0x01, 0xFF, 0xFF, 0xE0, 0x01, + 0xFF, 0xFF, 0xE2, 0x01, 0xFF, 0xFF, 0xE4, 0x01, 0xFF, 0xFF, 0xE6, 0x01, 0xFF, 0xFF, 0xE8, 0x01, + 0xFF, 0xFF, 0xEA, 0x01, 0xFF, 0xFF, 0xEC, 0x01, 0xFF, 0xFF, 0xEE, 0x01, 0xFF, 0xFF, 0xF0, 0x01, + 0xFF, 0xFF, 0xF2, 0x01, 0xFF, 0xFF, 0xF4, 0x01, 0xFF, 0xFF, 0xF6, 0x01, 0xFF, 0xFF, 0xF8, 0x01, + 0xFF, 0xFF, 0xFA, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x05, 0xFF, 0x00, 0x00, 0x07, 0xFF, + 0x00, 0x00, 0x09, 0xFF, 0x00, 0x00, 0x0B, 0xFF, 0x00, 0x00, 0x0D, 0xFF, 0x00, 0x00, 0x0F, 0xFF, + 0x00, 0x00, 0x11, 0xFF, 0x00, 0x00, 0x13, 0xFF, 0x00, 0x00, 0x15, 0xFF, 0x00, 0x00, 0x17, 0xFF, + 0x00, 0x00, 0x19, 0xFF, 0x00, 0x00, 0x1B, 0xFF, 0x00, 0x00, 0x1D, 0xFF, 0x00, 0x00, 0x1F, 0xFF, + 0x00, 0x00, 0x21, 0xFF, 0x00, 0x00, 0x23, 0xFF, 0x00, 0x00, 0x25, 0xFF, 0x00, 0x00, 0x27, 0xFF, + 0x00, 0x00, 0x29, 0xFF, 0x00, 0x00, 0x2B, 0xFF, 0x00, 0x00, 0x2D, 0xFF, 0x00, 0x00, 0x2F, 0xFF, + 0x00, 0x00, 0x31, 0xFF, 0x00, 0x00, 0x33, 0xFF, 0x00, 0x00, 0x35, 0xFF, 0x00, 0x00, 0x37, 0xFF, + 0x00, 0x00, 0x39, 0xFF, 0x00, 0x00, 0x3B, 0xFF, 0x00, 0x00, 0x3D, 0xFF, 0x00, 0x00, 0x3F, 0xFF, + 0x00, 0x00, 0x3D, 0xFF, 0x00, 0x00, 0x3B, 0xFF, 0x00, 0x00, 0x39, 0xFF, 0x00, 0x00, 0x37, 0xFF, + 0x00, 0x00, 0x35, 0xFF, 0x00, 0x00, 0x33, 0xFF, 0x00, 0x00, 0x31, 0xFF, 0x00, 0x00, 0x2F, 0xFF, + 0x00, 0x00, 0x2D, 0xFF, 0x00, 0x00, 0x2B, 0xFF, 0x00, 0x00, 0x29, 0xFF, 0x00, 0x00, 0x27, 0xFF, + 0x00, 0x00, 0x25, 0xFF, 0x00, 0x00, 0x23, 0xFF, 0x00, 0x00, 0x21, 0xFF, 0x00, 0x00, 0x1F, 0xFF, + 0x00, 0x00, 0x1D, 0xFF, 0x00, 0x00, 0x1B, 0xFF, 0x00, 0x00, 0x19, 0xFF, 0x00, 0x00, 0x17, 0xFF, + 0x00, 0x00, 0x15, 0xFF, 0x00, 0x00, 0x13, 0xFF, 0x00, 0x00, 0x11, 0xFF, 0x00, 0x00, 0x0F, 0xFF, + 0x00, 0x00, 0x0D, 0xFF, 0x00, 0x00, 0x0B, 0xFF, 0x00, 0x00, 0x09, 0xFF, 0x00, 0x00, 0x07, 0xFF, + 0x00, 0x00, 0x05, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFA, 0x01, 0xFF, 0xFF, 0xF8, 0x01, + 0xFF, 0xFF, 0xF6, 0x01, 0xFF, 0xFF, 0xF4, 0x01, 0xFF, 0xFF, 0xF2, 0x01, 0xFF, 0xFF, 0xF0, 0x01, + 0xFF, 0xFF, 0xEE, 0x01, 0xFF, 0xFF, 0xEC, 0x01, 0xFF, 0xFF, 0xEA, 0x01, 0xFF, 0xFF, 0xE8, 0x01, + 0xFF, 0xFF, 0xE6, 0x01, 0xFF, 0xFF, 0xE4, 0x01, 0xFF, 0xFF, 0xE2, 0x01, 0xFF, 0xFF, 0xE0, 0x01, + 0xFF, 0xFF, 0xDE, 0x01, 0xFF, 0xFF, 0xDC, 0x01, 0xFF, 0xFF, 0xDA, 0x01, 0xFF, 0xFF, 0xD8, 0x01, + 0xFF, 0xFF, 0xD6, 0x01, 0xFF, 0xFF, 0xD4, 0x01, 0xFF, 0xFF, 0xD2, 0x01, 0xFF, 0xFF, 0xD0, 0x01, + 0xFF, 0xFF, 0xCE, 0x01, 0xFF, 0xFF, 0xCC, 0x01, 0xFF, 0xFF, 0xCA, 0x01, 0xFF, 0xFF, 0xC8, 0x01, + 0xFF, 0xFF, 0xC6, 0x01, 0xFF, 0xFF, 0xC4, 0x01, 0xFF, 0xFF, 0xC2, 0x01, 0xFF, 0xFF, 0xC0, 0x01, + 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x0C, 0x8B, 0x00, 0x00, 0x12, 0xC7, 0x00, 0x00, 0x18, 0xF8, + 0x00, 0x00, 0x1F, 0x19, 0x00, 0x00, 0x25, 0x27, 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x30, 0xFB, + 0x00, 0x00, 0x36, 0xB9, 0x00, 0x00, 0x3C, 0x56, 0x00, 0x00, 0x41, 0xCD, 0x00, 0x00, 0x47, 0x1C, + 0x00, 0x00, 0x4C, 0x3F, 0x00, 0x00, 0x51, 0x33, 0x00, 0x00, 0x55, 0xF4, 0x00, 0x00, 0x5A, 0x81, + 0x00, 0x00, 0x5E, 0xD6, 0x00, 0x00, 0x62, 0xF1, 0x00, 0x00, 0x66, 0xCE, 0x00, 0x00, 0x6A, 0x6C, + 0x00, 0x00, 0x6D, 0xC9, 0x00, 0x00, 0x70, 0xE1, 0x00, 0x00, 0x73, 0xB5, 0x00, 0x00, 0x76, 0x40, + 0x00, 0x00, 0x78, 0x83, 0x00, 0x00, 0x7A, 0x7C, 0x00, 0x00, 0x7C, 0x29, 0x00, 0x00, 0x7D, 0x89, + 0x00, 0x00, 0x7E, 0x9C, 0x00, 0x00, 0x7F, 0x61, 0x00, 0x00, 0x7F, 0xD7, 0x00, 0x00, 0x7F, 0xFF, + 0x00, 0x00, 0x7F, 0xD7, 0x00, 0x00, 0x7F, 0x61, 0x00, 0x00, 0x7E, 0x9C, 0x00, 0x00, 0x7D, 0x89, + 0x00, 0x00, 0x7C, 0x29, 0x00, 0x00, 0x7A, 0x7C, 0x00, 0x00, 0x78, 0x83, 0x00, 0x00, 0x76, 0x40, + 0x00, 0x00, 0x73, 0xB5, 0x00, 0x00, 0x70, 0xE1, 0x00, 0x00, 0x6D, 0xC9, 0x00, 0x00, 0x6A, 0x6C, + 0x00, 0x00, 0x66, 0xCE, 0x00, 0x00, 0x62, 0xF1, 0x00, 0x00, 0x5E, 0xD6, 0x00, 0x00, 0x5A, 0x81, + 0x00, 0x00, 0x55, 0xF4, 0x00, 0x00, 0x51, 0x33, 0x00, 0x00, 0x4C, 0x3F, 0x00, 0x00, 0x47, 0x1C, + 0x00, 0x00, 0x41, 0xCD, 0x00, 0x00, 0x3C, 0x56, 0x00, 0x00, 0x36, 0xB9, 0x00, 0x00, 0x30, 0xFB, + 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x25, 0x27, 0x00, 0x00, 0x1F, 0x19, 0x00, 0x00, 0x18, 0xF8, + 0x00, 0x00, 0x12, 0xC7, 0x00, 0x00, 0x0C, 0x8B, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xF9, 0xB9, 0xFF, 0xFF, 0xF3, 0x75, 0xFF, 0xFF, 0xED, 0x39, 0xFF, 0xFF, 0xE7, 0x08, + 0xFF, 0xFF, 0xE0, 0xE7, 0xFF, 0xFF, 0xDA, 0xD9, 0xFF, 0xFF, 0xD4, 0xE2, 0xFF, 0xFF, 0xCF, 0x05, + 0xFF, 0xFF, 0xC9, 0x47, 0xFF, 0xFF, 0xC3, 0xAA, 0xFF, 0xFF, 0xBE, 0x33, 0xFF, 0xFF, 0xB8, 0xE4, + 0xFF, 0xFF, 0xB3, 0xC1, 0xFF, 0xFF, 0xAE, 0xCD, 0xFF, 0xFF, 0xAA, 0x0C, 0xFF, 0xFF, 0xA5, 0x7F, + 0xFF, 0xFF, 0xA1, 0x2A, 0xFF, 0xFF, 0x9D, 0x0F, 0xFF, 0xFF, 0x99, 0x32, 0xFF, 0xFF, 0x95, 0x94, + 0xFF, 0xFF, 0x92, 0x37, 0xFF, 0xFF, 0x8F, 0x1F, 0xFF, 0xFF, 0x8C, 0x4B, 0xFF, 0xFF, 0x89, 0xC0, + 0xFF, 0xFF, 0x87, 0x7D, 0xFF, 0xFF, 0x85, 0x84, 0xFF, 0xFF, 0x83, 0xD7, 0xFF, 0xFF, 0x82, 0x77, + 0xFF, 0xFF, 0x81, 0x64, 0xFF, 0xFF, 0x80, 0x9F, 0xFF, 0xFF, 0x80, 0x29, 0xFF, 0xFF, 0x80, 0x01, + 0xFF, 0xFF, 0x80, 0x29, 0xFF, 0xFF, 0x80, 0x9F, 0xFF, 0xFF, 0x81, 0x64, 0xFF, 0xFF, 0x82, 0x77, + 0xFF, 0xFF, 0x83, 0xD7, 0xFF, 0xFF, 0x85, 0x84, 0xFF, 0xFF, 0x87, 0x7D, 0xFF, 0xFF, 0x89, 0xC0, + 0xFF, 0xFF, 0x8C, 0x4B, 0xFF, 0xFF, 0x8F, 0x1F, 0xFF, 0xFF, 0x92, 0x37, 0xFF, 0xFF, 0x95, 0x94, + 0xFF, 0xFF, 0x99, 0x32, 0xFF, 0xFF, 0x9D, 0x0F, 0xFF, 0xFF, 0xA1, 0x2A, 0xFF, 0xFF, 0xA5, 0x7F, + 0xFF, 0xFF, 0xAA, 0x0C, 0xFF, 0xFF, 0xAE, 0xCD, 0xFF, 0xFF, 0xB3, 0xC1, 0xFF, 0xFF, 0xB8, 0xE4, + 0xFF, 0xFF, 0xBE, 0x33, 0xFF, 0xFF, 0xC3, 0xAA, 0xFF, 0xFF, 0xC9, 0x47, 0xFF, 0xFF, 0xCF, 0x05, + 0xFF, 0xFF, 0xD4, 0xE2, 0xFF, 0xFF, 0xDA, 0xD9, 0xFF, 0xFF, 0xE0, 0xE7, 0xFF, 0xFF, 0xE7, 0x08, + 0xFF, 0xFF, 0xED, 0x39, 0xFF, 0xFF, 0xF3, 0x75, 0xFF, 0xFF, 0xF9, 0xB9, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x01, 0x8E, 0x00, 0x00, 0x02, 0x3A, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x03, 0xEB, + 0x00, 0x00, 0x04, 0xEC, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x07, 0x3D, 0x00, 0x00, 0x08, 0x88, + 0x00, 0x00, 0x09, 0xE9, 0x00, 0x00, 0x0B, 0x5E, 0x00, 0x00, 0x0C, 0xE4, 0x00, 0x00, 0x0E, 0x7B, + 0x00, 0x00, 0x10, 0x1F, 0x00, 0x00, 0x11, 0xCF, 0x00, 0x00, 0x13, 0x88, 0x00, 0x00, 0x15, 0x48, + 0x00, 0x00, 0x17, 0x0E, 0x00, 0x00, 0x18, 0xD5, 0x00, 0x00, 0x1A, 0x9C, 0x00, 0x00, 0x1C, 0x61, + 0x00, 0x00, 0x1E, 0x20, 0x00, 0x00, 0x1F, 0xD8, 0x00, 0x00, 0x21, 0x85, 0x00, 0x00, 0x23, 0x26, + 0x00, 0x00, 0x24, 0xB7, 0x00, 0x00, 0x26, 0x36, 0x00, 0x00, 0x27, 0xA1, 0x00, 0x00, 0x28, 0xF5, + 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x2B, 0x4F, 0x00, 0x00, 0x2C, 0x50, 0x00, 0x00, 0x2D, 0x31, + 0x00, 0x00, 0x2D, 0xF0, 0x00, 0x00, 0x2E, 0x8B, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x2F, 0x4D, + 0x00, 0x00, 0x2F, 0x70, 0x00, 0x00, 0x2F, 0x69, 0x00, 0x00, 0x2F, 0x35, 0x00, 0x00, 0x2E, 0xD3, + 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x2D, 0x83, 0x00, 0x00, 0x2C, 0x93, 0x00, 0x00, 0x2B, 0x71, + 0x00, 0x00, 0x2A, 0x1E, 0x00, 0x00, 0x28, 0x99, 0x00, 0x00, 0x26, 0xE2, 0x00, 0x00, 0x24, 0xFA, + 0x00, 0x00, 0x22, 0xE0, 0x00, 0x00, 0x20, 0x94, 0x00, 0x00, 0x1E, 0x19, 0x00, 0x00, 0x1B, 0x6E, + 0x00, 0x00, 0x18, 0x94, 0x00, 0x00, 0x15, 0x8C, 0x00, 0x00, 0x12, 0x59, 0x00, 0x00, 0x0E, 0xFB, + 0x00, 0x00, 0x0B, 0x74, 0x00, 0x00, 0x07, 0xC7, 0x00, 0x00, 0x03, 0xF4, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFB, 0xEB, 0xFF, 0xFF, 0xF7, 0xB9, 0xFF, 0xFF, 0xF3, 0x6B, 0xFF, 0xFF, 0xEF, 0x06, + 0xFF, 0xFF, 0xEA, 0x8B, 0xFF, 0xFF, 0xE5, 0xFE, 0xFF, 0xFF, 0xE1, 0x63, 0xFF, 0xFF, 0xDC, 0xBC, + 0xFF, 0xFF, 0xD8, 0x0D, 0xFF, 0xFF, 0xD3, 0x5A, 0xFF, 0xFF, 0xCE, 0xA6, 0xFF, 0xFF, 0xC9, 0xF5, + 0xFF, 0xFF, 0xC5, 0x4B, 0xFF, 0xFF, 0xC0, 0xAB, 0xFF, 0xFF, 0xBC, 0x19, 0xFF, 0xFF, 0xB7, 0x99, + 0xFF, 0xFF, 0xB3, 0x2F, 0xFF, 0xFF, 0xAE, 0xDF, 0xFF, 0xFF, 0xAA, 0xAC, 0xFF, 0xFF, 0xA6, 0x9B, + 0xFF, 0xFF, 0xA2, 0xAF, 0xFF, 0xFF, 0x9E, 0xEC, 0xFF, 0xFF, 0x9B, 0x56, 0xFF, 0xFF, 0x97, 0xF0, + 0xFF, 0xFF, 0x94, 0xBF, 0xFF, 0xFF, 0x91, 0xC4, 0xFF, 0xFF, 0x8F, 0x04, 0xFF, 0xFF, 0x8C, 0x82, + 0xFF, 0xFF, 0x8A, 0x41, 0xFF, 0xFF, 0x88, 0x44, 0xFF, 0xFF, 0x86, 0x8D, 0xFF, 0xFF, 0x85, 0x20, + 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0x83, 0x2B, 0xFF, 0xFF, 0x82, 0xA8, 0xFF, 0xFF, 0x82, 0x77, + 0xFF, 0xFF, 0x82, 0x9A, 0xFF, 0xFF, 0x83, 0x11, 0xFF, 0xFF, 0x83, 0xDF, 0xFF, 0xFF, 0x85, 0x05, + 0xFF, 0xFF, 0x86, 0x82, 0xFF, 0xFF, 0x88, 0x59, 0xFF, 0xFF, 0x8A, 0x88, 0xFF, 0xFF, 0x8D, 0x10, + 0xFF, 0xFF, 0x8F, 0xF1, 0xFF, 0xFF, 0x93, 0x2A, 0xFF, 0xFF, 0x96, 0xBB, 0xFF, 0xFF, 0x9A, 0xA2, + 0xFF, 0xFF, 0x9E, 0xDF, 0xFF, 0xFF, 0xA3, 0x6F, 0xFF, 0xFF, 0xA8, 0x51, 0xFF, 0xFF, 0xAD, 0x83, + 0xFF, 0xFF, 0xB3, 0x03, 0xFF, 0xFF, 0xB8, 0xCE, 0xFF, 0xFF, 0xBE, 0xE1, 0xFF, 0xFF, 0xC5, 0x39, + 0xFF, 0xFF, 0xCB, 0xD3, 0xFF, 0xFF, 0xD2, 0xAC, 0xFF, 0xFF, 0xD9, 0xC0, 0xFF, 0xFF, 0xE1, 0x0A, + 0xFF, 0xFF, 0xE8, 0x87, 0xFF, 0xFF, 0xF0, 0x32, 0xFF, 0xFF, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x09, 0x69, 0x00, 0x00, 0x12, 0xC2, 0x00, 0x00, 0x1B, 0xF7, 0x00, 0x00, 0x24, 0xF9, + 0x00, 0x00, 0x2D, 0xB7, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x3E, 0x29, 0x00, 0x00, 0x45, 0xBE, + 0x00, 0x00, 0x4C, 0xD5, 0x00, 0x00, 0x53, 0x61, 0x00, 0x00, 0x59, 0x57, 0x00, 0x00, 0x5E, 0xAE, + 0x00, 0x00, 0x63, 0x5D, 0x00, 0x00, 0x67, 0x5E, 0x00, 0x00, 0x6A, 0xAB, 0x00, 0x00, 0x6D, 0x40, + 0x00, 0x00, 0x6F, 0x1B, 0x00, 0x00, 0x70, 0x3D, 0x00, 0x00, 0x70, 0xA5, 0x00, 0x00, 0x70, 0x56, + 0x00, 0x00, 0x6F, 0x55, 0x00, 0x00, 0x6D, 0xA7, 0x00, 0x00, 0x6B, 0x53, 0x00, 0x00, 0x68, 0x61, + 0x00, 0x00, 0x64, 0xDB, 0x00, 0x00, 0x60, 0xCC, 0x00, 0x00, 0x5C, 0x3F, 0x00, 0x00, 0x57, 0x42, + 0x00, 0x00, 0x51, 0xE2, 0x00, 0x00, 0x4C, 0x2C, 0x00, 0x00, 0x46, 0x31, 0x00, 0x00, 0x3F, 0xFF, + 0x00, 0x00, 0x39, 0xA5, 0x00, 0x00, 0x33, 0x34, 0x00, 0x00, 0x2C, 0xBA, 0x00, 0x00, 0x26, 0x47, + 0x00, 0x00, 0x1F, 0xE9, 0x00, 0x00, 0x19, 0xAF, 0x00, 0x00, 0x13, 0xA8, 0x00, 0x00, 0x0D, 0xDF, + 0x00, 0x00, 0x08, 0x61, 0x00, 0x00, 0x03, 0x3A, 0xFF, 0xFF, 0xFE, 0x74, 0xFF, 0xFF, 0xFA, 0x17, + 0xFF, 0xFF, 0xF6, 0x2A, 0xFF, 0xFF, 0xF2, 0xB4, 0xFF, 0xFF, 0xEF, 0xBB, 0xFF, 0xFF, 0xED, 0x42, + 0xFF, 0xFF, 0xEB, 0x4A, 0xFF, 0xFF, 0xE9, 0xD5, 0xFF, 0xFF, 0xE8, 0xE2, 0xFF, 0xFF, 0xE8, 0x6E, + 0xFF, 0xFF, 0xE8, 0x76, 0xFF, 0xFF, 0xE8, 0xF5, 0xFF, 0xFF, 0xE9, 0xE5, 0xFF, 0xFF, 0xEB, 0x3D, + 0xFF, 0xFF, 0xEC, 0xF6, 0xFF, 0xFF, 0xEF, 0x06, 0xFF, 0xFF, 0xF1, 0x62, 0xFF, 0xFF, 0xF3, 0xFF, + 0xFF, 0xFF, 0xF6, 0xD1, 0xFF, 0xFF, 0xF9, 0xCA, 0xFF, 0xFF, 0xFC, 0xDF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x09, 0x2F, 0x00, 0x00, 0x0C, 0x01, + 0x00, 0x00, 0x0E, 0x9E, 0x00, 0x00, 0x10, 0xFA, 0x00, 0x00, 0x13, 0x0A, 0x00, 0x00, 0x14, 0xC3, + 0x00, 0x00, 0x16, 0x1B, 0x00, 0x00, 0x17, 0x0B, 0x00, 0x00, 0x17, 0x8A, 0x00, 0x00, 0x17, 0x92, + 0x00, 0x00, 0x17, 0x1E, 0x00, 0x00, 0x16, 0x2B, 0x00, 0x00, 0x14, 0xB6, 0x00, 0x00, 0x12, 0xBE, + 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x0D, 0x4C, 0x00, 0x00, 0x09, 0xD6, 0x00, 0x00, 0x05, 0xE9, + 0x00, 0x00, 0x01, 0x8C, 0xFF, 0xFF, 0xFC, 0xC6, 0xFF, 0xFF, 0xF7, 0x9F, 0xFF, 0xFF, 0xF2, 0x21, + 0xFF, 0xFF, 0xEC, 0x58, 0xFF, 0xFF, 0xE6, 0x51, 0xFF, 0xFF, 0xE0, 0x17, 0xFF, 0xFF, 0xD9, 0xB9, + 0xFF, 0xFF, 0xD3, 0x46, 0xFF, 0xFF, 0xCC, 0xCC, 0xFF, 0xFF, 0xC6, 0x5B, 0xFF, 0xFF, 0xC0, 0x01, + 0xFF, 0xFF, 0xB9, 0xCF, 0xFF, 0xFF, 0xB3, 0xD4, 0xFF, 0xFF, 0xAE, 0x1E, 0xFF, 0xFF, 0xA8, 0xBE, + 0xFF, 0xFF, 0xA3, 0xC1, 0xFF, 0xFF, 0x9F, 0x34, 0xFF, 0xFF, 0x9B, 0x25, 0xFF, 0xFF, 0x97, 0x9F, + 0xFF, 0xFF, 0x94, 0xAD, 0xFF, 0xFF, 0x92, 0x59, 0xFF, 0xFF, 0x90, 0xAB, 0xFF, 0xFF, 0x8F, 0xAA, + 0xFF, 0xFF, 0x8F, 0x5B, 0xFF, 0xFF, 0x8F, 0xC3, 0xFF, 0xFF, 0x90, 0xE5, 0xFF, 0xFF, 0x92, 0xC0, + 0xFF, 0xFF, 0x95, 0x55, 0xFF, 0xFF, 0x98, 0xA2, 0xFF, 0xFF, 0x9C, 0xA3, 0xFF, 0xFF, 0xA1, 0x52, + 0xFF, 0xFF, 0xA6, 0xA9, 0xFF, 0xFF, 0xAC, 0x9F, 0xFF, 0xFF, 0xB3, 0x2B, 0xFF, 0xFF, 0xBA, 0x42, + 0xFF, 0xFF, 0xC1, 0xD7, 0xFF, 0xFF, 0xC9, 0xDE, 0xFF, 0xFF, 0xD2, 0x49, 0xFF, 0xFF, 0xDB, 0x07, + 0xFF, 0xFF, 0xE4, 0x09, 0xFF, 0xFF, 0xED, 0x3E, 0xFF, 0xFF, 0xF6, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x0F, 0x79, 0x00, 0x00, 0x19, 0x4E, 0x00, 0x00, 0x24, 0x67, + 0x00, 0x00, 0x30, 0x92, 0x00, 0x00, 0x3D, 0x8B, 0x00, 0x00, 0x4A, 0xF0, 0x00, 0x00, 0x58, 0x42, + 0x00, 0x00, 0x64, 0xE0, 0x00, 0x00, 0x70, 0x09, 0x00, 0x00, 0x78, 0xE3, 0x00, 0x00, 0x7E, 0x7E, + 0x00, 0x00, 0x7F, 0xE5, 0x00, 0x00, 0x7C, 0x35, 0x00, 0x00, 0x72, 0xB3, 0x00, 0x00, 0x62, 0xF1, + 0x00, 0x00, 0x4C, 0xEA, 0x00, 0x00, 0x31, 0x29, 0x00, 0x00, 0x10, 0xE2, 0xFF, 0xFF, 0xEE, 0x00, + 0xFF, 0xFF, 0xCB, 0x1A, 0xFF, 0xFF, 0xAB, 0x5D, 0xFF, 0xFF, 0x92, 0x3E, 0xFF, 0xFF, 0x83, 0x1E, + 0xFF, 0xFF, 0x80, 0xC8, 0xFF, 0xFF, 0x8C, 0xE4, 0xFF, 0xFF, 0xA7, 0x6D, 0xFF, 0xFF, 0xCE, 0x4C, + 0xFF, 0xFF, 0xFD, 0x34, 0x00, 0x00, 0x2D, 0xE1, 0x00, 0x00, 0x58, 0xCA, 0x00, 0x00, 0x76, 0x40, + 0x00, 0x00, 0x7F, 0xEF, 0x00, 0x00, 0x72, 0x6A, 0x00, 0x00, 0x4E, 0x79, 0x00, 0x00, 0x19, 0xBD, + 0xFF, 0xFF, 0xDE, 0x4A, 0xFF, 0xFF, 0xA9, 0x08, 0xFF, 0xFF, 0x86, 0xFC, 0xFF, 0xFF, 0x81, 0xE4, + 0xFF, 0xFF, 0x9D, 0x07, 0xFF, 0xFF, 0xD3, 0x39, 0x00, 0x00, 0x16, 0xFE, 0x00, 0x00, 0x55, 0x5F, + 0x00, 0x00, 0x7B, 0x06, 0x00, 0x00, 0x7A, 0x8A, 0x00, 0x00, 0x51, 0xD7, 0x00, 0x00, 0x0C, 0x8B, + 0xFF, 0xFF, 0xC1, 0xA4, 0xFF, 0xFF, 0x8C, 0x61, 0xFF, 0xFF, 0x82, 0x3B, 0xFF, 0xFF, 0xA9, 0x77, + 0xFF, 0xFF, 0xF4, 0x95, 0x00, 0x00, 0x45, 0xA2, 0x00, 0x00, 0x79, 0x85, 0x00, 0x00, 0x77, 0x6B, + 0x00, 0x00, 0x3D, 0xC2, 0xFF, 0xFF, 0xE5, 0xAF, 0xFF, 0xFF, 0x99, 0x75, 0xFF, 0xFF, 0x80, 0x8C, + 0xFF, 0xFF, 0xAA, 0x4D, 0x00, 0x00, 0x02, 0xF1, 0x00, 0x00, 0x5B, 0x06, 0x00, 0x00, 0x7F, 0xFF, + 0x00, 0x00, 0x59, 0xFC, 0xFF, 0xFF, 0xFD, 0x0F, 0xFF, 0xFF, 0xA0, 0xEF, 0xFF, 0xFF, 0x80, 0x8C, + 0xFF, 0xFF, 0xB3, 0x67, 0x00, 0x00, 0x1A, 0x51, 0x00, 0x00, 0x70, 0x1C, 0x00, 0x00, 0x77, 0x6B, + 0x00, 0x00, 0x28, 0x32, 0xFF, 0xFF, 0xBA, 0x5E, 0xFF, 0xFF, 0x80, 0x84, 0xFF, 0xFF, 0xA9, 0x77, + 0x00, 0x00, 0x17, 0xC4, 0x00, 0x00, 0x73, 0x9F, 0x00, 0x00, 0x6F, 0xC6, 0x00, 0x00, 0x0C, 0x8B, + 0xFF, 0xFF, 0x9D, 0x97, 0xFF, 0xFF, 0x85, 0x76, 0xFF, 0xFF, 0xDC, 0xAF, 0x00, 0x00, 0x55, 0x5F, + 0x00, 0x00, 0x7D, 0xE9, 0x00, 0x00, 0x2C, 0xC7, 0xFF, 0xFF, 0xAE, 0xD7, 0xFF, 0xFF, 0x81, 0xE4, + 0xFF, 0xFF, 0xD6, 0x51, 0x00, 0x00, 0x56, 0xF8, 0x00, 0x00, 0x7B, 0x7A, 0x00, 0x00, 0x19, 0xBD, + 0xFF, 0xFF, 0x9A, 0xE3, 0xFF, 0xFF, 0x8D, 0x96, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x76, 0x40, + 0x00, 0x00, 0x5C, 0x31, 0xFF, 0xFF, 0xD2, 0x1F, 0xFF, 0xFF, 0x80, 0x09, 0xFF, 0xFF, 0xCE, 0x4C, + 0x00, 0x00, 0x5C, 0x65, 0x00, 0x00, 0x73, 0x1C, 0xFF, 0xFF, 0xF1, 0xF1, 0xFF, 0xFF, 0x83, 0x1E, + 0xFF, 0xFF, 0xBE, 0x28, 0x00, 0x00, 0x54, 0xA3, 0x00, 0x00, 0x74, 0x8D, 0xFF, 0xFF, 0xEE, 0x00, + 0xFF, 0xFF, 0x81, 0x20, 0xFF, 0xFF, 0xCE, 0xD7, 0x00, 0x00, 0x66, 0x4E, 0x00, 0x00, 0x62, 0xF1, + 0xFF, 0xFF, 0xC7, 0x33, 0xFF, 0xFF, 0x83, 0xCB, 0x00, 0x00, 0x05, 0x0D, 0x00, 0x00, 0x7E, 0x7E, + 0x00, 0x00, 0x2A, 0x0E, 0xFF, 0xFF, 0x8F, 0xF7, 0xFF, 0xFF, 0xB1, 0x37, 0x00, 0x00, 0x58, 0x42, + 0x00, 0x00, 0x67, 0xC3, 0xFF, 0xFF, 0xC2, 0x75, 0xFF, 0xFF, 0x89, 0x95, 0x00, 0x00, 0x24, 0x67, + 0x00, 0x00, 0x7D, 0x78, 0xFF, 0xFF, 0xF0, 0x87, 0xFF, 0xFF, 0x80, 0x33, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xC6, 0x95, 0xFF, 0xFF, 0xCB, 0x25, 0xFF, 0xFF, 0xC9, 0xBC, 0xFF, 0xFF, 0xCD, 0x56, + 0xFF, 0xFF, 0xCD, 0x2E, 0xFF, 0xFF, 0xCE, 0x03, 0xFF, 0xFF, 0xCE, 0xC0, 0xFF, 0xFF, 0xD1, 0xAC, + 0xFF, 0xFF, 0xD6, 0x81, 0xFF, 0xFF, 0xD7, 0xD8, 0xFF, 0xFF, 0xD6, 0x23, 0xFF, 0xFF, 0xD9, 0xA3, + 0xFF, 0xFF, 0xD9, 0x6F, 0xFF, 0xFF, 0xDE, 0x63, 0xFF, 0xFF, 0xE1, 0x8B, 0xFF, 0xFF, 0xE0, 0x2F, + 0xFF, 0xFF, 0xDE, 0x31, 0xFF, 0xFF, 0xE6, 0xBA, 0xFF, 0xFF, 0xED, 0x65, 0xFF, 0xFF, 0xEA, 0x39, + 0xFF, 0xFF, 0xEB, 0xAB, 0xFF, 0xFF, 0xED, 0x8B, 0xFF, 0xFF, 0xF0, 0xBA, 0xFF, 0xFF, 0xF4, 0xC5, + 0xFF, 0xFF, 0xF5, 0x99, 0xFF, 0xFF, 0xF4, 0x3B, 0xFF, 0xFF, 0xF6, 0x89, 0xFF, 0xFF, 0xF8, 0xDF, + 0xFF, 0xFF, 0xF8, 0xAE, 0xFF, 0xFF, 0xFE, 0x67, 0xFF, 0xFF, 0xFE, 0x69, 0x00, 0x00, 0x02, 0xF5, + 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x06, 0xEF, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x0B, 0x0F, + 0x00, 0x00, 0x06, 0x9D, 0x00, 0x00, 0x09, 0x67, 0x00, 0x00, 0x0D, 0x64, 0x00, 0x00, 0x0C, 0x6F, + 0x00, 0x00, 0x11, 0xFC, 0x00, 0x00, 0x14, 0x09, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x16, 0x07, + 0x00, 0x00, 0x19, 0x7E, 0x00, 0x00, 0x1B, 0x11, 0x00, 0x00, 0x1D, 0xD6, 0x00, 0x00, 0x1F, 0x99, + 0x00, 0x00, 0x1E, 0x69, 0x00, 0x00, 0x25, 0x8E, 0x00, 0x00, 0x23, 0x5F, 0x00, 0x00, 0x24, 0x44, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, 0x2C, 0x11, 0x00, 0x00, 0x2B, 0x65, 0x00, 0x00, 0x32, 0xBC, + 0x00, 0x00, 0x2F, 0x1F, 0x00, 0x00, 0x31, 0x21, 0x00, 0x00, 0x34, 0x14, 0x00, 0x00, 0x32, 0xF5, + 0x00, 0x00, 0x36, 0x92, 0x00, 0x00, 0x35, 0xFE, 0x00, 0x00, 0x3C, 0xE4, 0x00, 0x00, 0x3D, 0x5F, + 0x00, 0x00, 0x38, 0x91, 0x00, 0x00, 0x39, 0x21, 0x00, 0x00, 0x36, 0x58, 0x00, 0x00, 0x37, 0xD6, + 0x00, 0x00, 0x35, 0xE4, 0x00, 0x00, 0x32, 0xA6, 0x00, 0x00, 0x30, 0x6E, 0x00, 0x00, 0x2F, 0x1E, + 0x00, 0x00, 0x2A, 0x3D, 0x00, 0x00, 0x2A, 0x7D, 0x00, 0x00, 0x27, 0x24, 0x00, 0x00, 0x27, 0xA4, + 0x00, 0x00, 0x23, 0xC2, 0x00, 0x00, 0x25, 0xC2, 0x00, 0x00, 0x20, 0xA0, 0x00, 0x00, 0x20, 0xD0, + 0x00, 0x00, 0x1C, 0x6E, 0x00, 0x00, 0x17, 0xBF, 0x00, 0x00, 0x19, 0x64, 0x00, 0x00, 0x16, 0x6B, + 0x00, 0x00, 0x12, 0x42, 0x00, 0x00, 0x13, 0x6F, 0x00, 0x00, 0x11, 0x9D, 0x00, 0x00, 0x0E, 0x80, + 0x00, 0x00, 0x0F, 0xEA, 0x00, 0x00, 0x09, 0xE2, 0x00, 0x00, 0x07, 0xB8, 0x00, 0x00, 0x07, 0x98, + 0x00, 0x00, 0x06, 0x73, 0x00, 0x00, 0x02, 0xD5, 0x00, 0x00, 0x01, 0x63, 0xFF, 0xFF, 0xFD, 0xF2, + 0x00, 0x00, 0x01, 0xED, 0xFF, 0xFF, 0xFF, 0xE5, 0xFF, 0xFF, 0xF7, 0x69, 0xFF, 0xFF, 0xFC, 0x16, + 0xFF, 0xFF, 0xF4, 0xCD, 0xFF, 0xFF, 0xF4, 0x06, 0xFF, 0xFF, 0xF3, 0xC2, 0xFF, 0xFF, 0xF0, 0x30, + 0xFF, 0xFF, 0xF1, 0x72, 0xFF, 0xFF, 0xEF, 0x53, 0xFF, 0xFF, 0xE8, 0x12, 0xFF, 0xFF, 0xE7, 0x2D, + 0xFF, 0xFF, 0xE5, 0xDC, 0xFF, 0xFF, 0xE6, 0x34, 0xFF, 0xFF, 0xE2, 0xAE, 0xFF, 0xFF, 0xE2, 0xF2, + 0xFF, 0xFF, 0xE0, 0x23, 0xFF, 0xFF, 0xDB, 0xDF, 0xFF, 0xFF, 0xDC, 0x2B, 0xFF, 0xFF, 0xD8, 0x95, + 0xFF, 0xFF, 0xD6, 0xE8, 0xFF, 0xFF, 0xD8, 0xDA, 0xFF, 0xFF, 0xD1, 0x2C, 0xFF, 0xFF, 0xCE, 0x93, + 0xFF, 0xFF, 0xD1, 0x70, 0xFF, 0xFF, 0xCB, 0xA6, 0xFF, 0xFF, 0xCC, 0x70, 0xFF, 0xFF, 0xCB, 0x45, + 0xFF, 0xFF, 0xC8, 0x65, 0xFF, 0xFF, 0xC5, 0xEC, 0xFF, 0xFF, 0xC4, 0xBF, 0xFF, 0xFF, 0xC5, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x5F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, + 0x00, 0x00, 0x5F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xEF, 0xA6, 0x00, 0x00, 0x0F, 0x80, 0xFF, 0xFF, 0xF0, 0x04, 0x00, 0x00, 0x0E, 0xA6, + 0xFF, 0xFF, 0xED, 0x75, 0x00, 0x00, 0x1E, 0x84, 0x00, 0x00, 0x04, 0xC7, 0x00, 0x00, 0x28, 0xD4, + 0x00, 0x00, 0x08, 0x39, 0x00, 0x00, 0x16, 0x30, 0x00, 0x00, 0x21, 0x11, 0x00, 0x00, 0x0B, 0x1E, + 0xFF, 0xFF, 0xF6, 0x1E, 0xFF, 0xFF, 0xFD, 0x1F, 0xFF, 0xFF, 0xE7, 0x51, 0xFF, 0xFF, 0xCB, 0x57, + 0x00, 0x00, 0x03, 0xD6, 0x00, 0x00, 0x0D, 0xE0, 0x00, 0x00, 0x06, 0x83, 0xFF, 0xFF, 0xF8, 0x23, + 0xFF, 0xFF, 0xF5, 0x53, 0x00, 0x00, 0x1D, 0x19, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x29, 0x17, + 0x00, 0x00, 0x15, 0x24, 0x00, 0x00, 0x25, 0xA4, 0xFF, 0xFF, 0xDC, 0xB4, 0xFF, 0xFF, 0xF9, 0x57, + 0x00, 0x00, 0x19, 0x77, 0x00, 0x00, 0x2E, 0xF3, 0xFF, 0xFF, 0xD4, 0x13, 0x00, 0x00, 0x02, 0x39, + 0x00, 0x00, 0x32, 0x10, 0x00, 0x00, 0x04, 0x22, 0xFF, 0xFF, 0xEF, 0xE8, 0xFF, 0xFF, 0xDB, 0x2B, + 0xFF, 0xFF, 0xFE, 0x4C, 0x00, 0x00, 0x09, 0x8E, 0x00, 0x00, 0x05, 0x90, 0xFF, 0xFF, 0xFB, 0x68, + 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x10, 0x6F, 0x00, 0x00, 0x17, 0xA1, 0xFF, 0xFF, 0xD8, 0x31, + 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xF0, 0x66, 0x00, 0x00, 0x0E, 0x78, 0xFF, 0xFF, 0xF0, 0x5E, + 0x00, 0x00, 0x1F, 0x83, 0x00, 0x00, 0x19, 0x74, 0xFF, 0xFF, 0xEB, 0x6F, 0xFF, 0xFF, 0xF0, 0xDE, + 0x00, 0x00, 0x2B, 0x4D, 0x00, 0x00, 0x18, 0x67, 0xFF, 0xFF, 0xCE, 0x98, 0x00, 0x00, 0x0D, 0x20, + 0x00, 0x00, 0x0A, 0x13, 0xFF, 0xFF, 0xE8, 0xD3, 0xFF, 0xFF, 0xDF, 0x60, 0x00, 0x00, 0x08, 0xDF, + 0xFF, 0xFF, 0xE1, 0x68, 0x00, 0x00, 0x11, 0x14, 0xFF, 0xFF, 0xFE, 0x44, 0xFF, 0xFF, 0xD3, 0x92, + 0x00, 0x00, 0x14, 0xA4, 0xFF, 0xFF, 0xE8, 0x95, 0xFF, 0xFF, 0xF2, 0xD8, 0x00, 0x00, 0x30, 0x8A, + 0xFF, 0xFF, 0xF9, 0x85, 0xFF, 0xFF, 0xFB, 0x89, 0x00, 0x00, 0x19, 0x0E, 0x00, 0x00, 0x21, 0x02, + 0xFF, 0xFF, 0xF2, 0x6B, 0xFF, 0xFF, 0xEE, 0x43, 0xFF, 0xFF, 0xE9, 0xFE, 0x00, 0x00, 0x0D, 0x8A, + 0xFF, 0xFF, 0xFA, 0x2B, 0x00, 0x00, 0x09, 0xA5, 0x00, 0x00, 0x1F, 0x45, 0x00, 0x00, 0x1C, 0x1D, + 0xFF, 0xFF, 0xEA, 0x2A, 0xFF, 0xFF, 0xE8, 0xDB, 0x00, 0x00, 0x11, 0xE2, 0x00, 0x00, 0x0C, 0x5A, + 0x00, 0x00, 0x14, 0xC7, 0x00, 0x00, 0x08, 0x64, 0xFF, 0xFF, 0xD7, 0x61, 0xFF, 0xFF, 0xE8, 0x6E, + 0xFF, 0xFF, 0xF0, 0x47, 0xFF, 0xFF, 0xF7, 0x6F, 0x00, 0x00, 0x02, 0x0E, 0xFF, 0xFF, 0xFE, 0xC9, + 0xFF, 0xFF, 0xF0, 0x44, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x03, 0x33, 0xFF, 0xFF, 0xFA, 0x47, + 0xFF, 0xFF, 0xF5, 0xFE, 0xFF, 0xFF, 0xDC, 0x9F, 0x00, 0x00, 0x1B, 0x8D, 0x00, 0x00, 0x20, 0x7F, + 0x00, 0x00, 0x0C, 0x79, 0xFF, 0xFF, 0xE7, 0x85, 0x00, 0x00, 0x0B, 0x90, 0xFF, 0xFF, 0xDF, 0xE8, + 0x00, 0x00, 0x06, 0x90, 0x00, 0x00, 0x0A, 0xC8, 0x00, 0x00, 0x1A, 0xAF, 0x00, 0x00, 0x1E, 0xF3, + 0x00, 0x00, 0x13, 0xFD, 0xFF, 0xFF, 0xE1, 0xCC, 0x00, 0x00, 0x19, 0xA2, 0xFF, 0xFF, 0xE5, 0xC4, + 0xFF, 0xFF, 0xE4, 0xF3, 0x00, 0x00, 0x49, 0xEC, 0xFF, 0xFF, 0xF9, 0x26, 0xFF, 0xFF, 0xF3, 0x7F, + 0x00, 0x00, 0x0A, 0xBC, 0xFF, 0xFF, 0xEC, 0xFD, 0x00, 0x00, 0x0E, 0xAA, 0xFF, 0xFF, 0xFC, 0x53, + 0xFF, 0xFF, 0xFB, 0xFD, 0xFF, 0xFF, 0xF0, 0x58, 0x00, 0x00, 0x02, 0x91, 0xFF, 0xFF, 0xE3, 0x83, + 0x00, 0x00, 0x18, 0x80, 0xFF, 0xFF, 0xF1, 0x35, 0xFF, 0xFF, 0xF3, 0x0C, 0xFF, 0xFF, 0xE6, 0xD6, +}; diff --git a/src/wavetable.h b/src/wavetable.h index 085a158..cfd905c 100644 --- a/src/wavetable.h +++ b/src/wavetable.h @@ -8,262 +8,10 @@ // NOTE: This can probably be converted to 32-bit table, since I don't think // that unaligned access is allowed... -const unsigned char wave_table[4096] = -{ - 0xFF, 0xFF, 0xC2, 0x01, 0xFF, 0xFF, 0xC4, 0x01, 0xFF, 0xFF, 0xC6, 0x01, 0xFF, 0xFF, 0xC8, 0x01, - 0xFF, 0xFF, 0xCA, 0x01, 0xFF, 0xFF, 0xCC, 0x01, 0xFF, 0xFF, 0xCE, 0x01, 0xFF, 0xFF, 0xD0, 0x01, - 0xFF, 0xFF, 0xD2, 0x01, 0xFF, 0xFF, 0xD4, 0x01, 0xFF, 0xFF, 0xD6, 0x01, 0xFF, 0xFF, 0xD8, 0x01, - 0xFF, 0xFF, 0xDA, 0x01, 0xFF, 0xFF, 0xDC, 0x01, 0xFF, 0xFF, 0xDE, 0x01, 0xFF, 0xFF, 0xE0, 0x01, - 0xFF, 0xFF, 0xE2, 0x01, 0xFF, 0xFF, 0xE4, 0x01, 0xFF, 0xFF, 0xE6, 0x01, 0xFF, 0xFF, 0xE8, 0x01, - 0xFF, 0xFF, 0xEA, 0x01, 0xFF, 0xFF, 0xEC, 0x01, 0xFF, 0xFF, 0xEE, 0x01, 0xFF, 0xFF, 0xF0, 0x01, - 0xFF, 0xFF, 0xF2, 0x01, 0xFF, 0xFF, 0xF4, 0x01, 0xFF, 0xFF, 0xF6, 0x01, 0xFF, 0xFF, 0xF8, 0x01, - 0xFF, 0xFF, 0xFA, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x05, 0xFF, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x09, 0xFF, 0x00, 0x00, 0x0B, 0xFF, 0x00, 0x00, 0x0D, 0xFF, 0x00, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x11, 0xFF, 0x00, 0x00, 0x13, 0xFF, 0x00, 0x00, 0x15, 0xFF, 0x00, 0x00, 0x17, 0xFF, - 0x00, 0x00, 0x19, 0xFF, 0x00, 0x00, 0x1B, 0xFF, 0x00, 0x00, 0x1D, 0xFF, 0x00, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x21, 0xFF, 0x00, 0x00, 0x23, 0xFF, 0x00, 0x00, 0x25, 0xFF, 0x00, 0x00, 0x27, 0xFF, - 0x00, 0x00, 0x29, 0xFF, 0x00, 0x00, 0x2B, 0xFF, 0x00, 0x00, 0x2D, 0xFF, 0x00, 0x00, 0x2F, 0xFF, - 0x00, 0x00, 0x31, 0xFF, 0x00, 0x00, 0x33, 0xFF, 0x00, 0x00, 0x35, 0xFF, 0x00, 0x00, 0x37, 0xFF, - 0x00, 0x00, 0x39, 0xFF, 0x00, 0x00, 0x3B, 0xFF, 0x00, 0x00, 0x3D, 0xFF, 0x00, 0x00, 0x3F, 0xFF, - 0x00, 0x00, 0x3D, 0xFF, 0x00, 0x00, 0x3B, 0xFF, 0x00, 0x00, 0x39, 0xFF, 0x00, 0x00, 0x37, 0xFF, - 0x00, 0x00, 0x35, 0xFF, 0x00, 0x00, 0x33, 0xFF, 0x00, 0x00, 0x31, 0xFF, 0x00, 0x00, 0x2F, 0xFF, - 0x00, 0x00, 0x2D, 0xFF, 0x00, 0x00, 0x2B, 0xFF, 0x00, 0x00, 0x29, 0xFF, 0x00, 0x00, 0x27, 0xFF, - 0x00, 0x00, 0x25, 0xFF, 0x00, 0x00, 0x23, 0xFF, 0x00, 0x00, 0x21, 0xFF, 0x00, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x1D, 0xFF, 0x00, 0x00, 0x1B, 0xFF, 0x00, 0x00, 0x19, 0xFF, 0x00, 0x00, 0x17, 0xFF, - 0x00, 0x00, 0x15, 0xFF, 0x00, 0x00, 0x13, 0xFF, 0x00, 0x00, 0x11, 0xFF, 0x00, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x0D, 0xFF, 0x00, 0x00, 0x0B, 0xFF, 0x00, 0x00, 0x09, 0xFF, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x05, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFA, 0x01, 0xFF, 0xFF, 0xF8, 0x01, - 0xFF, 0xFF, 0xF6, 0x01, 0xFF, 0xFF, 0xF4, 0x01, 0xFF, 0xFF, 0xF2, 0x01, 0xFF, 0xFF, 0xF0, 0x01, - 0xFF, 0xFF, 0xEE, 0x01, 0xFF, 0xFF, 0xEC, 0x01, 0xFF, 0xFF, 0xEA, 0x01, 0xFF, 0xFF, 0xE8, 0x01, - 0xFF, 0xFF, 0xE6, 0x01, 0xFF, 0xFF, 0xE4, 0x01, 0xFF, 0xFF, 0xE2, 0x01, 0xFF, 0xFF, 0xE0, 0x01, - 0xFF, 0xFF, 0xDE, 0x01, 0xFF, 0xFF, 0xDC, 0x01, 0xFF, 0xFF, 0xDA, 0x01, 0xFF, 0xFF, 0xD8, 0x01, - 0xFF, 0xFF, 0xD6, 0x01, 0xFF, 0xFF, 0xD4, 0x01, 0xFF, 0xFF, 0xD2, 0x01, 0xFF, 0xFF, 0xD0, 0x01, - 0xFF, 0xFF, 0xCE, 0x01, 0xFF, 0xFF, 0xCC, 0x01, 0xFF, 0xFF, 0xCA, 0x01, 0xFF, 0xFF, 0xC8, 0x01, - 0xFF, 0xFF, 0xC6, 0x01, 0xFF, 0xFF, 0xC4, 0x01, 0xFF, 0xFF, 0xC2, 0x01, 0xFF, 0xFF, 0xC0, 0x01, - 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x0C, 0x8B, 0x00, 0x00, 0x12, 0xC7, 0x00, 0x00, 0x18, 0xF8, - 0x00, 0x00, 0x1F, 0x19, 0x00, 0x00, 0x25, 0x27, 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x30, 0xFB, - 0x00, 0x00, 0x36, 0xB9, 0x00, 0x00, 0x3C, 0x56, 0x00, 0x00, 0x41, 0xCD, 0x00, 0x00, 0x47, 0x1C, - 0x00, 0x00, 0x4C, 0x3F, 0x00, 0x00, 0x51, 0x33, 0x00, 0x00, 0x55, 0xF4, 0x00, 0x00, 0x5A, 0x81, - 0x00, 0x00, 0x5E, 0xD6, 0x00, 0x00, 0x62, 0xF1, 0x00, 0x00, 0x66, 0xCE, 0x00, 0x00, 0x6A, 0x6C, - 0x00, 0x00, 0x6D, 0xC9, 0x00, 0x00, 0x70, 0xE1, 0x00, 0x00, 0x73, 0xB5, 0x00, 0x00, 0x76, 0x40, - 0x00, 0x00, 0x78, 0x83, 0x00, 0x00, 0x7A, 0x7C, 0x00, 0x00, 0x7C, 0x29, 0x00, 0x00, 0x7D, 0x89, - 0x00, 0x00, 0x7E, 0x9C, 0x00, 0x00, 0x7F, 0x61, 0x00, 0x00, 0x7F, 0xD7, 0x00, 0x00, 0x7F, 0xFF, - 0x00, 0x00, 0x7F, 0xD7, 0x00, 0x00, 0x7F, 0x61, 0x00, 0x00, 0x7E, 0x9C, 0x00, 0x00, 0x7D, 0x89, - 0x00, 0x00, 0x7C, 0x29, 0x00, 0x00, 0x7A, 0x7C, 0x00, 0x00, 0x78, 0x83, 0x00, 0x00, 0x76, 0x40, - 0x00, 0x00, 0x73, 0xB5, 0x00, 0x00, 0x70, 0xE1, 0x00, 0x00, 0x6D, 0xC9, 0x00, 0x00, 0x6A, 0x6C, - 0x00, 0x00, 0x66, 0xCE, 0x00, 0x00, 0x62, 0xF1, 0x00, 0x00, 0x5E, 0xD6, 0x00, 0x00, 0x5A, 0x81, - 0x00, 0x00, 0x55, 0xF4, 0x00, 0x00, 0x51, 0x33, 0x00, 0x00, 0x4C, 0x3F, 0x00, 0x00, 0x47, 0x1C, - 0x00, 0x00, 0x41, 0xCD, 0x00, 0x00, 0x3C, 0x56, 0x00, 0x00, 0x36, 0xB9, 0x00, 0x00, 0x30, 0xFB, - 0x00, 0x00, 0x2B, 0x1E, 0x00, 0x00, 0x25, 0x27, 0x00, 0x00, 0x1F, 0x19, 0x00, 0x00, 0x18, 0xF8, - 0x00, 0x00, 0x12, 0xC7, 0x00, 0x00, 0x0C, 0x8B, 0x00, 0x00, 0x06, 0x47, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xF9, 0xB9, 0xFF, 0xFF, 0xF3, 0x75, 0xFF, 0xFF, 0xED, 0x39, 0xFF, 0xFF, 0xE7, 0x08, - 0xFF, 0xFF, 0xE0, 0xE7, 0xFF, 0xFF, 0xDA, 0xD9, 0xFF, 0xFF, 0xD4, 0xE2, 0xFF, 0xFF, 0xCF, 0x05, - 0xFF, 0xFF, 0xC9, 0x47, 0xFF, 0xFF, 0xC3, 0xAA, 0xFF, 0xFF, 0xBE, 0x33, 0xFF, 0xFF, 0xB8, 0xE4, - 0xFF, 0xFF, 0xB3, 0xC1, 0xFF, 0xFF, 0xAE, 0xCD, 0xFF, 0xFF, 0xAA, 0x0C, 0xFF, 0xFF, 0xA5, 0x7F, - 0xFF, 0xFF, 0xA1, 0x2A, 0xFF, 0xFF, 0x9D, 0x0F, 0xFF, 0xFF, 0x99, 0x32, 0xFF, 0xFF, 0x95, 0x94, - 0xFF, 0xFF, 0x92, 0x37, 0xFF, 0xFF, 0x8F, 0x1F, 0xFF, 0xFF, 0x8C, 0x4B, 0xFF, 0xFF, 0x89, 0xC0, - 0xFF, 0xFF, 0x87, 0x7D, 0xFF, 0xFF, 0x85, 0x84, 0xFF, 0xFF, 0x83, 0xD7, 0xFF, 0xFF, 0x82, 0x77, - 0xFF, 0xFF, 0x81, 0x64, 0xFF, 0xFF, 0x80, 0x9F, 0xFF, 0xFF, 0x80, 0x29, 0xFF, 0xFF, 0x80, 0x01, - 0xFF, 0xFF, 0x80, 0x29, 0xFF, 0xFF, 0x80, 0x9F, 0xFF, 0xFF, 0x81, 0x64, 0xFF, 0xFF, 0x82, 0x77, - 0xFF, 0xFF, 0x83, 0xD7, 0xFF, 0xFF, 0x85, 0x84, 0xFF, 0xFF, 0x87, 0x7D, 0xFF, 0xFF, 0x89, 0xC0, - 0xFF, 0xFF, 0x8C, 0x4B, 0xFF, 0xFF, 0x8F, 0x1F, 0xFF, 0xFF, 0x92, 0x37, 0xFF, 0xFF, 0x95, 0x94, - 0xFF, 0xFF, 0x99, 0x32, 0xFF, 0xFF, 0x9D, 0x0F, 0xFF, 0xFF, 0xA1, 0x2A, 0xFF, 0xFF, 0xA5, 0x7F, - 0xFF, 0xFF, 0xAA, 0x0C, 0xFF, 0xFF, 0xAE, 0xCD, 0xFF, 0xFF, 0xB3, 0xC1, 0xFF, 0xFF, 0xB8, 0xE4, - 0xFF, 0xFF, 0xBE, 0x33, 0xFF, 0xFF, 0xC3, 0xAA, 0xFF, 0xFF, 0xC9, 0x47, 0xFF, 0xFF, 0xCF, 0x05, - 0xFF, 0xFF, 0xD4, 0xE2, 0xFF, 0xFF, 0xDA, 0xD9, 0xFF, 0xFF, 0xE0, 0xE7, 0xFF, 0xFF, 0xE7, 0x08, - 0xFF, 0xFF, 0xED, 0x39, 0xFF, 0xFF, 0xF3, 0x75, 0xFF, 0xFF, 0xF9, 0xB9, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x01, 0x8E, 0x00, 0x00, 0x02, 0x3A, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x03, 0xEB, - 0x00, 0x00, 0x04, 0xEC, 0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x07, 0x3D, 0x00, 0x00, 0x08, 0x88, - 0x00, 0x00, 0x09, 0xE9, 0x00, 0x00, 0x0B, 0x5E, 0x00, 0x00, 0x0C, 0xE4, 0x00, 0x00, 0x0E, 0x7B, - 0x00, 0x00, 0x10, 0x1F, 0x00, 0x00, 0x11, 0xCF, 0x00, 0x00, 0x13, 0x88, 0x00, 0x00, 0x15, 0x48, - 0x00, 0x00, 0x17, 0x0E, 0x00, 0x00, 0x18, 0xD5, 0x00, 0x00, 0x1A, 0x9C, 0x00, 0x00, 0x1C, 0x61, - 0x00, 0x00, 0x1E, 0x20, 0x00, 0x00, 0x1F, 0xD8, 0x00, 0x00, 0x21, 0x85, 0x00, 0x00, 0x23, 0x26, - 0x00, 0x00, 0x24, 0xB7, 0x00, 0x00, 0x26, 0x36, 0x00, 0x00, 0x27, 0xA1, 0x00, 0x00, 0x28, 0xF5, - 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x2B, 0x4F, 0x00, 0x00, 0x2C, 0x50, 0x00, 0x00, 0x2D, 0x31, - 0x00, 0x00, 0x2D, 0xF0, 0x00, 0x00, 0x2E, 0x8B, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x2F, 0x4D, - 0x00, 0x00, 0x2F, 0x70, 0x00, 0x00, 0x2F, 0x69, 0x00, 0x00, 0x2F, 0x35, 0x00, 0x00, 0x2E, 0xD3, - 0x00, 0x00, 0x2E, 0x43, 0x00, 0x00, 0x2D, 0x83, 0x00, 0x00, 0x2C, 0x93, 0x00, 0x00, 0x2B, 0x71, - 0x00, 0x00, 0x2A, 0x1E, 0x00, 0x00, 0x28, 0x99, 0x00, 0x00, 0x26, 0xE2, 0x00, 0x00, 0x24, 0xFA, - 0x00, 0x00, 0x22, 0xE0, 0x00, 0x00, 0x20, 0x94, 0x00, 0x00, 0x1E, 0x19, 0x00, 0x00, 0x1B, 0x6E, - 0x00, 0x00, 0x18, 0x94, 0x00, 0x00, 0x15, 0x8C, 0x00, 0x00, 0x12, 0x59, 0x00, 0x00, 0x0E, 0xFB, - 0x00, 0x00, 0x0B, 0x74, 0x00, 0x00, 0x07, 0xC7, 0x00, 0x00, 0x03, 0xF4, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFB, 0xEB, 0xFF, 0xFF, 0xF7, 0xB9, 0xFF, 0xFF, 0xF3, 0x6B, 0xFF, 0xFF, 0xEF, 0x06, - 0xFF, 0xFF, 0xEA, 0x8B, 0xFF, 0xFF, 0xE5, 0xFE, 0xFF, 0xFF, 0xE1, 0x63, 0xFF, 0xFF, 0xDC, 0xBC, - 0xFF, 0xFF, 0xD8, 0x0D, 0xFF, 0xFF, 0xD3, 0x5A, 0xFF, 0xFF, 0xCE, 0xA6, 0xFF, 0xFF, 0xC9, 0xF5, - 0xFF, 0xFF, 0xC5, 0x4B, 0xFF, 0xFF, 0xC0, 0xAB, 0xFF, 0xFF, 0xBC, 0x19, 0xFF, 0xFF, 0xB7, 0x99, - 0xFF, 0xFF, 0xB3, 0x2F, 0xFF, 0xFF, 0xAE, 0xDF, 0xFF, 0xFF, 0xAA, 0xAC, 0xFF, 0xFF, 0xA6, 0x9B, - 0xFF, 0xFF, 0xA2, 0xAF, 0xFF, 0xFF, 0x9E, 0xEC, 0xFF, 0xFF, 0x9B, 0x56, 0xFF, 0xFF, 0x97, 0xF0, - 0xFF, 0xFF, 0x94, 0xBF, 0xFF, 0xFF, 0x91, 0xC4, 0xFF, 0xFF, 0x8F, 0x04, 0xFF, 0xFF, 0x8C, 0x82, - 0xFF, 0xFF, 0x8A, 0x41, 0xFF, 0xFF, 0x88, 0x44, 0xFF, 0xFF, 0x86, 0x8D, 0xFF, 0xFF, 0x85, 0x20, - 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0x83, 0x2B, 0xFF, 0xFF, 0x82, 0xA8, 0xFF, 0xFF, 0x82, 0x77, - 0xFF, 0xFF, 0x82, 0x9A, 0xFF, 0xFF, 0x83, 0x11, 0xFF, 0xFF, 0x83, 0xDF, 0xFF, 0xFF, 0x85, 0x05, - 0xFF, 0xFF, 0x86, 0x82, 0xFF, 0xFF, 0x88, 0x59, 0xFF, 0xFF, 0x8A, 0x88, 0xFF, 0xFF, 0x8D, 0x10, - 0xFF, 0xFF, 0x8F, 0xF1, 0xFF, 0xFF, 0x93, 0x2A, 0xFF, 0xFF, 0x96, 0xBB, 0xFF, 0xFF, 0x9A, 0xA2, - 0xFF, 0xFF, 0x9E, 0xDF, 0xFF, 0xFF, 0xA3, 0x6F, 0xFF, 0xFF, 0xA8, 0x51, 0xFF, 0xFF, 0xAD, 0x83, - 0xFF, 0xFF, 0xB3, 0x03, 0xFF, 0xFF, 0xB8, 0xCE, 0xFF, 0xFF, 0xBE, 0xE1, 0xFF, 0xFF, 0xC5, 0x39, - 0xFF, 0xFF, 0xCB, 0xD3, 0xFF, 0xFF, 0xD2, 0xAC, 0xFF, 0xFF, 0xD9, 0xC0, 0xFF, 0xFF, 0xE1, 0x0A, - 0xFF, 0xFF, 0xE8, 0x87, 0xFF, 0xFF, 0xF0, 0x32, 0xFF, 0xFF, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x09, 0x69, 0x00, 0x00, 0x12, 0xC2, 0x00, 0x00, 0x1B, 0xF7, 0x00, 0x00, 0x24, 0xF9, - 0x00, 0x00, 0x2D, 0xB7, 0x00, 0x00, 0x36, 0x22, 0x00, 0x00, 0x3E, 0x29, 0x00, 0x00, 0x45, 0xBE, - 0x00, 0x00, 0x4C, 0xD5, 0x00, 0x00, 0x53, 0x61, 0x00, 0x00, 0x59, 0x57, 0x00, 0x00, 0x5E, 0xAE, - 0x00, 0x00, 0x63, 0x5D, 0x00, 0x00, 0x67, 0x5E, 0x00, 0x00, 0x6A, 0xAB, 0x00, 0x00, 0x6D, 0x40, - 0x00, 0x00, 0x6F, 0x1B, 0x00, 0x00, 0x70, 0x3D, 0x00, 0x00, 0x70, 0xA5, 0x00, 0x00, 0x70, 0x56, - 0x00, 0x00, 0x6F, 0x55, 0x00, 0x00, 0x6D, 0xA7, 0x00, 0x00, 0x6B, 0x53, 0x00, 0x00, 0x68, 0x61, - 0x00, 0x00, 0x64, 0xDB, 0x00, 0x00, 0x60, 0xCC, 0x00, 0x00, 0x5C, 0x3F, 0x00, 0x00, 0x57, 0x42, - 0x00, 0x00, 0x51, 0xE2, 0x00, 0x00, 0x4C, 0x2C, 0x00, 0x00, 0x46, 0x31, 0x00, 0x00, 0x3F, 0xFF, - 0x00, 0x00, 0x39, 0xA5, 0x00, 0x00, 0x33, 0x34, 0x00, 0x00, 0x2C, 0xBA, 0x00, 0x00, 0x26, 0x47, - 0x00, 0x00, 0x1F, 0xE9, 0x00, 0x00, 0x19, 0xAF, 0x00, 0x00, 0x13, 0xA8, 0x00, 0x00, 0x0D, 0xDF, - 0x00, 0x00, 0x08, 0x61, 0x00, 0x00, 0x03, 0x3A, 0xFF, 0xFF, 0xFE, 0x74, 0xFF, 0xFF, 0xFA, 0x17, - 0xFF, 0xFF, 0xF6, 0x2A, 0xFF, 0xFF, 0xF2, 0xB4, 0xFF, 0xFF, 0xEF, 0xBB, 0xFF, 0xFF, 0xED, 0x42, - 0xFF, 0xFF, 0xEB, 0x4A, 0xFF, 0xFF, 0xE9, 0xD5, 0xFF, 0xFF, 0xE8, 0xE2, 0xFF, 0xFF, 0xE8, 0x6E, - 0xFF, 0xFF, 0xE8, 0x76, 0xFF, 0xFF, 0xE8, 0xF5, 0xFF, 0xFF, 0xE9, 0xE5, 0xFF, 0xFF, 0xEB, 0x3D, - 0xFF, 0xFF, 0xEC, 0xF6, 0xFF, 0xFF, 0xEF, 0x06, 0xFF, 0xFF, 0xF1, 0x62, 0xFF, 0xFF, 0xF3, 0xFF, - 0xFF, 0xFF, 0xF6, 0xD1, 0xFF, 0xFF, 0xF9, 0xCA, 0xFF, 0xFF, 0xFC, 0xDF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x21, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x09, 0x2F, 0x00, 0x00, 0x0C, 0x01, - 0x00, 0x00, 0x0E, 0x9E, 0x00, 0x00, 0x10, 0xFA, 0x00, 0x00, 0x13, 0x0A, 0x00, 0x00, 0x14, 0xC3, - 0x00, 0x00, 0x16, 0x1B, 0x00, 0x00, 0x17, 0x0B, 0x00, 0x00, 0x17, 0x8A, 0x00, 0x00, 0x17, 0x92, - 0x00, 0x00, 0x17, 0x1E, 0x00, 0x00, 0x16, 0x2B, 0x00, 0x00, 0x14, 0xB6, 0x00, 0x00, 0x12, 0xBE, - 0x00, 0x00, 0x10, 0x45, 0x00, 0x00, 0x0D, 0x4C, 0x00, 0x00, 0x09, 0xD6, 0x00, 0x00, 0x05, 0xE9, - 0x00, 0x00, 0x01, 0x8C, 0xFF, 0xFF, 0xFC, 0xC6, 0xFF, 0xFF, 0xF7, 0x9F, 0xFF, 0xFF, 0xF2, 0x21, - 0xFF, 0xFF, 0xEC, 0x58, 0xFF, 0xFF, 0xE6, 0x51, 0xFF, 0xFF, 0xE0, 0x17, 0xFF, 0xFF, 0xD9, 0xB9, - 0xFF, 0xFF, 0xD3, 0x46, 0xFF, 0xFF, 0xCC, 0xCC, 0xFF, 0xFF, 0xC6, 0x5B, 0xFF, 0xFF, 0xC0, 0x01, - 0xFF, 0xFF, 0xB9, 0xCF, 0xFF, 0xFF, 0xB3, 0xD4, 0xFF, 0xFF, 0xAE, 0x1E, 0xFF, 0xFF, 0xA8, 0xBE, - 0xFF, 0xFF, 0xA3, 0xC1, 0xFF, 0xFF, 0x9F, 0x34, 0xFF, 0xFF, 0x9B, 0x25, 0xFF, 0xFF, 0x97, 0x9F, - 0xFF, 0xFF, 0x94, 0xAD, 0xFF, 0xFF, 0x92, 0x59, 0xFF, 0xFF, 0x90, 0xAB, 0xFF, 0xFF, 0x8F, 0xAA, - 0xFF, 0xFF, 0x8F, 0x5B, 0xFF, 0xFF, 0x8F, 0xC3, 0xFF, 0xFF, 0x90, 0xE5, 0xFF, 0xFF, 0x92, 0xC0, - 0xFF, 0xFF, 0x95, 0x55, 0xFF, 0xFF, 0x98, 0xA2, 0xFF, 0xFF, 0x9C, 0xA3, 0xFF, 0xFF, 0xA1, 0x52, - 0xFF, 0xFF, 0xA6, 0xA9, 0xFF, 0xFF, 0xAC, 0x9F, 0xFF, 0xFF, 0xB3, 0x2B, 0xFF, 0xFF, 0xBA, 0x42, - 0xFF, 0xFF, 0xC1, 0xD7, 0xFF, 0xFF, 0xC9, 0xDE, 0xFF, 0xFF, 0xD2, 0x49, 0xFF, 0xFF, 0xDB, 0x07, - 0xFF, 0xFF, 0xE4, 0x09, 0xFF, 0xFF, 0xED, 0x3E, 0xFF, 0xFF, 0xF6, 0x97, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x0F, 0x79, 0x00, 0x00, 0x19, 0x4E, 0x00, 0x00, 0x24, 0x67, - 0x00, 0x00, 0x30, 0x92, 0x00, 0x00, 0x3D, 0x8B, 0x00, 0x00, 0x4A, 0xF0, 0x00, 0x00, 0x58, 0x42, - 0x00, 0x00, 0x64, 0xE0, 0x00, 0x00, 0x70, 0x09, 0x00, 0x00, 0x78, 0xE3, 0x00, 0x00, 0x7E, 0x7E, - 0x00, 0x00, 0x7F, 0xE5, 0x00, 0x00, 0x7C, 0x35, 0x00, 0x00, 0x72, 0xB3, 0x00, 0x00, 0x62, 0xF1, - 0x00, 0x00, 0x4C, 0xEA, 0x00, 0x00, 0x31, 0x29, 0x00, 0x00, 0x10, 0xE2, 0xFF, 0xFF, 0xEE, 0x00, - 0xFF, 0xFF, 0xCB, 0x1A, 0xFF, 0xFF, 0xAB, 0x5D, 0xFF, 0xFF, 0x92, 0x3E, 0xFF, 0xFF, 0x83, 0x1E, - 0xFF, 0xFF, 0x80, 0xC8, 0xFF, 0xFF, 0x8C, 0xE4, 0xFF, 0xFF, 0xA7, 0x6D, 0xFF, 0xFF, 0xCE, 0x4C, - 0xFF, 0xFF, 0xFD, 0x34, 0x00, 0x00, 0x2D, 0xE1, 0x00, 0x00, 0x58, 0xCA, 0x00, 0x00, 0x76, 0x40, - 0x00, 0x00, 0x7F, 0xEF, 0x00, 0x00, 0x72, 0x6A, 0x00, 0x00, 0x4E, 0x79, 0x00, 0x00, 0x19, 0xBD, - 0xFF, 0xFF, 0xDE, 0x4A, 0xFF, 0xFF, 0xA9, 0x08, 0xFF, 0xFF, 0x86, 0xFC, 0xFF, 0xFF, 0x81, 0xE4, - 0xFF, 0xFF, 0x9D, 0x07, 0xFF, 0xFF, 0xD3, 0x39, 0x00, 0x00, 0x16, 0xFE, 0x00, 0x00, 0x55, 0x5F, - 0x00, 0x00, 0x7B, 0x06, 0x00, 0x00, 0x7A, 0x8A, 0x00, 0x00, 0x51, 0xD7, 0x00, 0x00, 0x0C, 0x8B, - 0xFF, 0xFF, 0xC1, 0xA4, 0xFF, 0xFF, 0x8C, 0x61, 0xFF, 0xFF, 0x82, 0x3B, 0xFF, 0xFF, 0xA9, 0x77, - 0xFF, 0xFF, 0xF4, 0x95, 0x00, 0x00, 0x45, 0xA2, 0x00, 0x00, 0x79, 0x85, 0x00, 0x00, 0x77, 0x6B, - 0x00, 0x00, 0x3D, 0xC2, 0xFF, 0xFF, 0xE5, 0xAF, 0xFF, 0xFF, 0x99, 0x75, 0xFF, 0xFF, 0x80, 0x8C, - 0xFF, 0xFF, 0xAA, 0x4D, 0x00, 0x00, 0x02, 0xF1, 0x00, 0x00, 0x5B, 0x06, 0x00, 0x00, 0x7F, 0xFF, - 0x00, 0x00, 0x59, 0xFC, 0xFF, 0xFF, 0xFD, 0x0F, 0xFF, 0xFF, 0xA0, 0xEF, 0xFF, 0xFF, 0x80, 0x8C, - 0xFF, 0xFF, 0xB3, 0x67, 0x00, 0x00, 0x1A, 0x51, 0x00, 0x00, 0x70, 0x1C, 0x00, 0x00, 0x77, 0x6B, - 0x00, 0x00, 0x28, 0x32, 0xFF, 0xFF, 0xBA, 0x5E, 0xFF, 0xFF, 0x80, 0x84, 0xFF, 0xFF, 0xA9, 0x77, - 0x00, 0x00, 0x17, 0xC4, 0x00, 0x00, 0x73, 0x9F, 0x00, 0x00, 0x6F, 0xC6, 0x00, 0x00, 0x0C, 0x8B, - 0xFF, 0xFF, 0x9D, 0x97, 0xFF, 0xFF, 0x85, 0x76, 0xFF, 0xFF, 0xDC, 0xAF, 0x00, 0x00, 0x55, 0x5F, - 0x00, 0x00, 0x7D, 0xE9, 0x00, 0x00, 0x2C, 0xC7, 0xFF, 0xFF, 0xAE, 0xD7, 0xFF, 0xFF, 0x81, 0xE4, - 0xFF, 0xFF, 0xD6, 0x51, 0x00, 0x00, 0x56, 0xF8, 0x00, 0x00, 0x7B, 0x7A, 0x00, 0x00, 0x19, 0xBD, - 0xFF, 0xFF, 0x9A, 0xE3, 0xFF, 0xFF, 0x8D, 0x96, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x76, 0x40, - 0x00, 0x00, 0x5C, 0x31, 0xFF, 0xFF, 0xD2, 0x1F, 0xFF, 0xFF, 0x80, 0x09, 0xFF, 0xFF, 0xCE, 0x4C, - 0x00, 0x00, 0x5C, 0x65, 0x00, 0x00, 0x73, 0x1C, 0xFF, 0xFF, 0xF1, 0xF1, 0xFF, 0xFF, 0x83, 0x1E, - 0xFF, 0xFF, 0xBE, 0x28, 0x00, 0x00, 0x54, 0xA3, 0x00, 0x00, 0x74, 0x8D, 0xFF, 0xFF, 0xEE, 0x00, - 0xFF, 0xFF, 0x81, 0x20, 0xFF, 0xFF, 0xCE, 0xD7, 0x00, 0x00, 0x66, 0x4E, 0x00, 0x00, 0x62, 0xF1, - 0xFF, 0xFF, 0xC7, 0x33, 0xFF, 0xFF, 0x83, 0xCB, 0x00, 0x00, 0x05, 0x0D, 0x00, 0x00, 0x7E, 0x7E, - 0x00, 0x00, 0x2A, 0x0E, 0xFF, 0xFF, 0x8F, 0xF7, 0xFF, 0xFF, 0xB1, 0x37, 0x00, 0x00, 0x58, 0x42, - 0x00, 0x00, 0x67, 0xC3, 0xFF, 0xFF, 0xC2, 0x75, 0xFF, 0xFF, 0x89, 0x95, 0x00, 0x00, 0x24, 0x67, - 0x00, 0x00, 0x7D, 0x78, 0xFF, 0xFF, 0xF0, 0x87, 0xFF, 0xFF, 0x80, 0x33, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xC6, 0x95, 0xFF, 0xFF, 0xCB, 0x25, 0xFF, 0xFF, 0xC9, 0xBC, 0xFF, 0xFF, 0xCD, 0x56, - 0xFF, 0xFF, 0xCD, 0x2E, 0xFF, 0xFF, 0xCE, 0x03, 0xFF, 0xFF, 0xCE, 0xC0, 0xFF, 0xFF, 0xD1, 0xAC, - 0xFF, 0xFF, 0xD6, 0x81, 0xFF, 0xFF, 0xD7, 0xD8, 0xFF, 0xFF, 0xD6, 0x23, 0xFF, 0xFF, 0xD9, 0xA3, - 0xFF, 0xFF, 0xD9, 0x6F, 0xFF, 0xFF, 0xDE, 0x63, 0xFF, 0xFF, 0xE1, 0x8B, 0xFF, 0xFF, 0xE0, 0x2F, - 0xFF, 0xFF, 0xDE, 0x31, 0xFF, 0xFF, 0xE6, 0xBA, 0xFF, 0xFF, 0xED, 0x65, 0xFF, 0xFF, 0xEA, 0x39, - 0xFF, 0xFF, 0xEB, 0xAB, 0xFF, 0xFF, 0xED, 0x8B, 0xFF, 0xFF, 0xF0, 0xBA, 0xFF, 0xFF, 0xF4, 0xC5, - 0xFF, 0xFF, 0xF5, 0x99, 0xFF, 0xFF, 0xF4, 0x3B, 0xFF, 0xFF, 0xF6, 0x89, 0xFF, 0xFF, 0xF8, 0xDF, - 0xFF, 0xFF, 0xF8, 0xAE, 0xFF, 0xFF, 0xFE, 0x67, 0xFF, 0xFF, 0xFE, 0x69, 0x00, 0x00, 0x02, 0xF5, - 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x06, 0xEF, 0x00, 0x00, 0x02, 0x17, 0x00, 0x00, 0x0B, 0x0F, - 0x00, 0x00, 0x06, 0x9D, 0x00, 0x00, 0x09, 0x67, 0x00, 0x00, 0x0D, 0x64, 0x00, 0x00, 0x0C, 0x6F, - 0x00, 0x00, 0x11, 0xFC, 0x00, 0x00, 0x14, 0x09, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x16, 0x07, - 0x00, 0x00, 0x19, 0x7E, 0x00, 0x00, 0x1B, 0x11, 0x00, 0x00, 0x1D, 0xD6, 0x00, 0x00, 0x1F, 0x99, - 0x00, 0x00, 0x1E, 0x69, 0x00, 0x00, 0x25, 0x8E, 0x00, 0x00, 0x23, 0x5F, 0x00, 0x00, 0x24, 0x44, - 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, 0x2C, 0x11, 0x00, 0x00, 0x2B, 0x65, 0x00, 0x00, 0x32, 0xBC, - 0x00, 0x00, 0x2F, 0x1F, 0x00, 0x00, 0x31, 0x21, 0x00, 0x00, 0x34, 0x14, 0x00, 0x00, 0x32, 0xF5, - 0x00, 0x00, 0x36, 0x92, 0x00, 0x00, 0x35, 0xFE, 0x00, 0x00, 0x3C, 0xE4, 0x00, 0x00, 0x3D, 0x5F, - 0x00, 0x00, 0x38, 0x91, 0x00, 0x00, 0x39, 0x21, 0x00, 0x00, 0x36, 0x58, 0x00, 0x00, 0x37, 0xD6, - 0x00, 0x00, 0x35, 0xE4, 0x00, 0x00, 0x32, 0xA6, 0x00, 0x00, 0x30, 0x6E, 0x00, 0x00, 0x2F, 0x1E, - 0x00, 0x00, 0x2A, 0x3D, 0x00, 0x00, 0x2A, 0x7D, 0x00, 0x00, 0x27, 0x24, 0x00, 0x00, 0x27, 0xA4, - 0x00, 0x00, 0x23, 0xC2, 0x00, 0x00, 0x25, 0xC2, 0x00, 0x00, 0x20, 0xA0, 0x00, 0x00, 0x20, 0xD0, - 0x00, 0x00, 0x1C, 0x6E, 0x00, 0x00, 0x17, 0xBF, 0x00, 0x00, 0x19, 0x64, 0x00, 0x00, 0x16, 0x6B, - 0x00, 0x00, 0x12, 0x42, 0x00, 0x00, 0x13, 0x6F, 0x00, 0x00, 0x11, 0x9D, 0x00, 0x00, 0x0E, 0x80, - 0x00, 0x00, 0x0F, 0xEA, 0x00, 0x00, 0x09, 0xE2, 0x00, 0x00, 0x07, 0xB8, 0x00, 0x00, 0x07, 0x98, - 0x00, 0x00, 0x06, 0x73, 0x00, 0x00, 0x02, 0xD5, 0x00, 0x00, 0x01, 0x63, 0xFF, 0xFF, 0xFD, 0xF2, - 0x00, 0x00, 0x01, 0xED, 0xFF, 0xFF, 0xFF, 0xE5, 0xFF, 0xFF, 0xF7, 0x69, 0xFF, 0xFF, 0xFC, 0x16, - 0xFF, 0xFF, 0xF4, 0xCD, 0xFF, 0xFF, 0xF4, 0x06, 0xFF, 0xFF, 0xF3, 0xC2, 0xFF, 0xFF, 0xF0, 0x30, - 0xFF, 0xFF, 0xF1, 0x72, 0xFF, 0xFF, 0xEF, 0x53, 0xFF, 0xFF, 0xE8, 0x12, 0xFF, 0xFF, 0xE7, 0x2D, - 0xFF, 0xFF, 0xE5, 0xDC, 0xFF, 0xFF, 0xE6, 0x34, 0xFF, 0xFF, 0xE2, 0xAE, 0xFF, 0xFF, 0xE2, 0xF2, - 0xFF, 0xFF, 0xE0, 0x23, 0xFF, 0xFF, 0xDB, 0xDF, 0xFF, 0xFF, 0xDC, 0x2B, 0xFF, 0xFF, 0xD8, 0x95, - 0xFF, 0xFF, 0xD6, 0xE8, 0xFF, 0xFF, 0xD8, 0xDA, 0xFF, 0xFF, 0xD1, 0x2C, 0xFF, 0xFF, 0xCE, 0x93, - 0xFF, 0xFF, 0xD1, 0x70, 0xFF, 0xFF, 0xCB, 0xA6, 0xFF, 0xFF, 0xCC, 0x70, 0xFF, 0xFF, 0xCB, 0x45, - 0xFF, 0xFF, 0xC8, 0x65, 0xFF, 0xFF, 0xC5, 0xEC, 0xFF, 0xFF, 0xC4, 0xBF, 0xFF, 0xFF, 0xC5, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x5F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, - 0x00, 0x00, 0x5F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xEF, 0xA6, 0x00, 0x00, 0x0F, 0x80, 0xFF, 0xFF, 0xF0, 0x04, 0x00, 0x00, 0x0E, 0xA6, - 0xFF, 0xFF, 0xED, 0x75, 0x00, 0x00, 0x1E, 0x84, 0x00, 0x00, 0x04, 0xC7, 0x00, 0x00, 0x28, 0xD4, - 0x00, 0x00, 0x08, 0x39, 0x00, 0x00, 0x16, 0x30, 0x00, 0x00, 0x21, 0x11, 0x00, 0x00, 0x0B, 0x1E, - 0xFF, 0xFF, 0xF6, 0x1E, 0xFF, 0xFF, 0xFD, 0x1F, 0xFF, 0xFF, 0xE7, 0x51, 0xFF, 0xFF, 0xCB, 0x57, - 0x00, 0x00, 0x03, 0xD6, 0x00, 0x00, 0x0D, 0xE0, 0x00, 0x00, 0x06, 0x83, 0xFF, 0xFF, 0xF8, 0x23, - 0xFF, 0xFF, 0xF5, 0x53, 0x00, 0x00, 0x1D, 0x19, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x00, 0x29, 0x17, - 0x00, 0x00, 0x15, 0x24, 0x00, 0x00, 0x25, 0xA4, 0xFF, 0xFF, 0xDC, 0xB4, 0xFF, 0xFF, 0xF9, 0x57, - 0x00, 0x00, 0x19, 0x77, 0x00, 0x00, 0x2E, 0xF3, 0xFF, 0xFF, 0xD4, 0x13, 0x00, 0x00, 0x02, 0x39, - 0x00, 0x00, 0x32, 0x10, 0x00, 0x00, 0x04, 0x22, 0xFF, 0xFF, 0xEF, 0xE8, 0xFF, 0xFF, 0xDB, 0x2B, - 0xFF, 0xFF, 0xFE, 0x4C, 0x00, 0x00, 0x09, 0x8E, 0x00, 0x00, 0x05, 0x90, 0xFF, 0xFF, 0xFB, 0x68, - 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x10, 0x6F, 0x00, 0x00, 0x17, 0xA1, 0xFF, 0xFF, 0xD8, 0x31, - 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xF0, 0x66, 0x00, 0x00, 0x0E, 0x78, 0xFF, 0xFF, 0xF0, 0x5E, - 0x00, 0x00, 0x1F, 0x83, 0x00, 0x00, 0x19, 0x74, 0xFF, 0xFF, 0xEB, 0x6F, 0xFF, 0xFF, 0xF0, 0xDE, - 0x00, 0x00, 0x2B, 0x4D, 0x00, 0x00, 0x18, 0x67, 0xFF, 0xFF, 0xCE, 0x98, 0x00, 0x00, 0x0D, 0x20, - 0x00, 0x00, 0x0A, 0x13, 0xFF, 0xFF, 0xE8, 0xD3, 0xFF, 0xFF, 0xDF, 0x60, 0x00, 0x00, 0x08, 0xDF, - 0xFF, 0xFF, 0xE1, 0x68, 0x00, 0x00, 0x11, 0x14, 0xFF, 0xFF, 0xFE, 0x44, 0xFF, 0xFF, 0xD3, 0x92, - 0x00, 0x00, 0x14, 0xA4, 0xFF, 0xFF, 0xE8, 0x95, 0xFF, 0xFF, 0xF2, 0xD8, 0x00, 0x00, 0x30, 0x8A, - 0xFF, 0xFF, 0xF9, 0x85, 0xFF, 0xFF, 0xFB, 0x89, 0x00, 0x00, 0x19, 0x0E, 0x00, 0x00, 0x21, 0x02, - 0xFF, 0xFF, 0xF2, 0x6B, 0xFF, 0xFF, 0xEE, 0x43, 0xFF, 0xFF, 0xE9, 0xFE, 0x00, 0x00, 0x0D, 0x8A, - 0xFF, 0xFF, 0xFA, 0x2B, 0x00, 0x00, 0x09, 0xA5, 0x00, 0x00, 0x1F, 0x45, 0x00, 0x00, 0x1C, 0x1D, - 0xFF, 0xFF, 0xEA, 0x2A, 0xFF, 0xFF, 0xE8, 0xDB, 0x00, 0x00, 0x11, 0xE2, 0x00, 0x00, 0x0C, 0x5A, - 0x00, 0x00, 0x14, 0xC7, 0x00, 0x00, 0x08, 0x64, 0xFF, 0xFF, 0xD7, 0x61, 0xFF, 0xFF, 0xE8, 0x6E, - 0xFF, 0xFF, 0xF0, 0x47, 0xFF, 0xFF, 0xF7, 0x6F, 0x00, 0x00, 0x02, 0x0E, 0xFF, 0xFF, 0xFE, 0xC9, - 0xFF, 0xFF, 0xF0, 0x44, 0x00, 0x00, 0x06, 0x27, 0x00, 0x00, 0x03, 0x33, 0xFF, 0xFF, 0xFA, 0x47, - 0xFF, 0xFF, 0xF5, 0xFE, 0xFF, 0xFF, 0xDC, 0x9F, 0x00, 0x00, 0x1B, 0x8D, 0x00, 0x00, 0x20, 0x7F, - 0x00, 0x00, 0x0C, 0x79, 0xFF, 0xFF, 0xE7, 0x85, 0x00, 0x00, 0x0B, 0x90, 0xFF, 0xFF, 0xDF, 0xE8, - 0x00, 0x00, 0x06, 0x90, 0x00, 0x00, 0x0A, 0xC8, 0x00, 0x00, 0x1A, 0xAF, 0x00, 0x00, 0x1E, 0xF3, - 0x00, 0x00, 0x13, 0xFD, 0xFF, 0xFF, 0xE1, 0xCC, 0x00, 0x00, 0x19, 0xA2, 0xFF, 0xFF, 0xE5, 0xC4, - 0xFF, 0xFF, 0xE4, 0xF3, 0x00, 0x00, 0x49, 0xEC, 0xFF, 0xFF, 0xF9, 0x26, 0xFF, 0xFF, 0xF3, 0x7F, - 0x00, 0x00, 0x0A, 0xBC, 0xFF, 0xFF, 0xEC, 0xFD, 0x00, 0x00, 0x0E, 0xAA, 0xFF, 0xFF, 0xFC, 0x53, - 0xFF, 0xFF, 0xFB, 0xFD, 0xFF, 0xFF, 0xF0, 0x58, 0x00, 0x00, 0x02, 0x91, 0xFF, 0xFF, 0xE3, 0x83, - 0x00, 0x00, 0x18, 0x80, 0xFF, 0xFF, 0xF1, 0x35, 0xFF, 0xFF, 0xF3, 0x0C, 0xFF, 0xFF, 0xE6, 0xD6, -}; +#ifndef __WAVETABLE_H__ +#define __WAVETABLE_H__ + +// How to preserve const-ness of this stuff without introducing tons of hairiness? +extern /*const*/ unsigned char waveTableROM[]; + +#endif // __WAVETABLE_H__ -- 2.37.2 From 51dd66b8138173fdb3d9722f617c80911929c189 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Mon, 18 Jan 2010 21:29:21 +0000 Subject: [PATCH 02/16] Minor tweaks to get things compiling/running --- Makefile | 2 +- src/gui/gui.cpp | 699 ------------ src/gui/gui.h | 29 - src/gui/vj.qrc | 2 +- src/gui/vj_title_small.c | 2208 -------------------------------------- 5 files changed, 2 insertions(+), 2938 deletions(-) delete mode 100644 src/gui/gui.cpp delete mode 100644 src/gui/gui.h delete mode 100644 src/gui/vj_title_small.c diff --git a/Makefile b/Makefile index 9b05b78..ab65a75 100644 --- a/Makefile +++ b/Makefile @@ -206,7 +206,7 @@ obj/moc_%.o: obj/moc_%.cpp @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" @$(CC) -c $(QT_CXXFLAGS) $(QT_INCPATH) -o $@ $< -obj/qrc_vj.cpp: src/gui/vj.qrc src/gui/res/vj.xpm +obj/qrc_vj.cpp: src/gui/vj.qrc res/vj.xpm @echo -e "\033[01;33m***\033[00;32m Creating qrc_vj.cpp...\033[00m" @/usr/bin/rcc -name vj src/gui/vj.qrc -o obj/qrc_vj.cpp diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp deleted file mode 100644 index 2cdd58d..0000000 --- a/src/gui/gui.cpp +++ /dev/null @@ -1,699 +0,0 @@ -// -// GUI.CPP -// -// Graphical User Interface support -// by James L. Hammons -// - -#include "gui.h" - -#include -#include "crc32.h" -#include "file.h" -#include "jaguar.h" -#include "log.h" -#include "sdlemu_opengl.h" -#include "settings.h" -#include "tom.h" -#include "video.h" - -// Once these are split off, these may not be needed anymore... -#include "button.h" -#include "element.h" -#include "filelist.h" -#include "guimisc.h" -#include "image.h" -#include "listbox.h" -#include "menu.h" -#include "pushbutton.h" -#include "slideswitch.h" -#include "text.h" -#include "textedit.h" -#include "window.h" - -// Private function prototypes - -Window * LoadROM(void); -Window * ResetJaguar(void); -Window * ResetJaguarCD(void); -Window * RunEmu(void); -Window * Quit(void); -Window * About(void); -Window * MiscOptions(void); - -// Local global variables - -bool showGUI = false; -bool exitGUI = false; // GUI (emulator) done variable -int mouseX = 0, mouseY = 0; -uint32 background[1280 * 256]; // GUI background buffer -bool showMessage = false; -//uint32 showMessageTimeout; -//char messageBuffer[200]; -bool finished = false; - -// -// GUI stuff--it's not crunchy, it's GUI! ;-) -// - -void GUIInit(void) -{ - SDL_ShowCursor(SDL_DISABLE); - SDL_GetMouseState(&mouseX, &mouseY); -} - -void GUIDone(void) -{ -} - -// -// GUI main loop -// -//bool GUIMain(void) -bool GUIMain(char * filename) -{ -WriteLog("GUI: Inside GUIMain...\n"); - - uint32 pointerBGSave[6 * 8 + 2]; - pointerBGSave[0] = 6; - pointerBGSave[1] = 8; - -// Need to set things up so that it loads and runs a file if given on the command line. !!! FIX !!! [DONE] -// extern uint32 * backbuffer; -// bool done = false; - SDL_Event event; - Window * mainWindow = NULL; - - // Set up the GUI classes... -// Element::SetScreenAndPitch(backbuffer, GetSDLScreenWidthInPixels()); - Element::SetScreenAndPitch((uint32 *)sdlemuGetOverlayPixels(), sdlemuGetOverlayWidthInPixels()); - sdlemuEnableOverlay(); - - Menu mainMenu; - MenuItems mi; - mi.title = "Jaguar"; - mi.item.push_back(NameAction("Load...", LoadROM, SDLK_l)); - mi.item.push_back(NameAction("Reset", ResetJaguar, SDLK_r)); - if (CDBIOSLoaded) - mi.item.push_back(NameAction("Reset CD", ResetJaguarCD, SDLK_c)); - mi.item.push_back(NameAction("Run", RunEmu, SDLK_ESCAPE)); - mi.item.push_back(NameAction("")); - mi.item.push_back(NameAction("Quit", Quit, SDLK_q)); - mainMenu.Add(mi); - mi.title = "Settings"; - mi.item.clear(); - mi.item.push_back(NameAction("Video...")); - mi.item.push_back(NameAction("Audio...")); - mi.item.push_back(NameAction("Misc...", MiscOptions, SDLK_m)); - mainMenu.Add(mi); - mi.title = "Info"; - mi.item.clear(); - mi.item.push_back(NameAction("About...", About)); - mainMenu.Add(mi); - - bool showMouse = true; - - // Grab the BG where the mouse will be painted (prime the backstore) - -/* -DISNOWOK -Bitmap ptr = { 6, 8, 4, -""//"000011112222333344445555" -//"000011112222333344445555" -//"000011112222333344445555" -//"000011112222333344445555" -//"000011112222333344445555" -//"000011112222333344445555" -//"000011112222333344445555" -//"000011112222333344445555" -};//*/ - uint32 * overlayPixels = (uint32 *)sdlemuGetOverlayPixels(); - uint32 count = 2; - - for(uint32 y=0; y 000100 01000 10001 -> 0001 0000 0100 0010 1000 1100 -> 10 42 8C - for(uint32 i=0; iAddElement(new Text(8, 8, "Error!")); - mainWindow->AddElement(new Text(8, 24, errText)); - } - } - -WriteLog("GUI: Entering main loop...\n"); - while (!exitGUI) - { - if (SDL_PollEvent(&event)) - { - if (event.type == SDL_USEREVENT) - { - if (event.user.code == WINDOW_CLOSE) - { - delete mainWindow; - mainWindow = NULL; - } - else if (event.user.code == MENU_ITEM_CHOSEN) - { - // Confused? Let me enlighten... What we're doing here is casting - // data1 as a pointer to a function which returns a Window pointer and - // which takes no parameters (the "(Window *(*)(void))" part), then - // derefencing it (the "*" in front of that) in order to call the - // function that it points to. Clear as mud? Yeah, I hate function - // pointers too, but what else are you gonna do? - mainWindow = (*(Window *(*)(void))event.user.data1)(); - - while (SDL_PollEvent(&event)); // Flush the event queue... - event.type = SDL_MOUSEMOTION; - int mx, my; - SDL_GetMouseState(&mx, &my); - event.motion.x = mx, event.motion.y = my; - SDL_PushEvent(&event); // & update mouse position...! - - oldMouseX = mouseX, oldMouseY = mouseY; - mouseX = mx, mouseY = my; // This prevents "mouse flash"... - } - } - else if (event.type == SDL_ACTIVEEVENT) - { - if (event.active.state == SDL_APPMOUSEFOCUS) - showMouse = (event.active.gain ? true : false); - } - else if (event.type == SDL_KEYDOWN) - { -// Ugly kludge for windowed<-->fullscreen switching... -uint8 * keystate = SDL_GetKeyState(NULL); - -if ((keystate[SDLK_LALT] || keystate[SDLK_RALT]) & keystate[SDLK_RETURN]) - ToggleFullscreen(); - - if (mainWindow) - mainWindow->HandleKey(event.key.keysym.sym); - else - mainMenu.HandleKey(event.key.keysym.sym); - } - else if (event.type == SDL_MOUSEMOTION) - { - oldMouseX = mouseX, oldMouseY = mouseY; - mouseX = event.motion.x, mouseY = event.motion.y; - - if (mainWindow) - mainWindow->HandleMouseMove(mouseX, mouseY); - else - mainMenu.HandleMouseMove(mouseX, mouseY); - } - else if (event.type == SDL_MOUSEBUTTONDOWN) - { - uint32 mx = event.button.x, my = event.button.y; - - if (mainWindow) - mainWindow->HandleMouseButton(mx, my, true); - else - mainMenu.HandleMouseButton(mx, my, true); - } - else if (event.type == SDL_MOUSEBUTTONUP) - { - uint32 mx = event.button.x, my = event.button.y; - - if (mainWindow) - mainWindow->HandleMouseButton(mx, my, false); - else - mainMenu.HandleMouseButton(mx, my, false); - } - -//PROBLEM: In order to use the dirty rectangle approach here, we need some way of -// handling it in mainMenu.Draw() and mainWindow->Draw(). !!! FIX !!! -//POSSIBLE SOLUTION: -// When mouse is moving and not on menu or window, can do straight dirty rect. -// When mouse is on menu, need to update screen. Same for buttons on windows... -// What the menu & windows should do is only redraw on a state change. IOW, they -// should call their own/child window's Draw() function instead of doing it top -// level. -//#define NEW_BACKSTORE_METHOD - - // Draw the GUI... -// The way we do things here is kinda stupid (redrawing the screen every frame), but -// it's simple. Perhaps there may be a reason down the road to be more selective with -// our clearing, but for now, this will suffice. -// memset(backbuffer, 0x11, tom_getVideoModeWidth() * 240 * 2); -// memcpy(backbuffer, background, tom_getVideoModeWidth() * 256 * 2); -// memcpy(backbuffer, background, tom_getVideoModeWidth() * 256 * 4); -#ifndef NEW_BACKSTORE_METHOD - memset(sdlemuGetOverlayPixels(), 0, sdlemuGetOverlayWidthInPixels() * 480 * 4); - - mainMenu.Draw(); -//Could do multiple windows here by using a vector + priority info... -//Though the way ZSNES does it seems to be by a bool (i.e., they're always active, just not shown) - if (mainWindow) - mainWindow->Draw(); -#endif - -/*uint32 pBGS[6 * 8 + 3] = { 6, 8, 4, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 -};*/ -//This isn't working... Why???? -//It's because DrawTransparentBitmap does alpha blending if it detects zero in the alpha channel. -//So why do it that way? Hm. - overlayPixels = (uint32 *)sdlemuGetOverlayPixels(); - -#ifdef NEW_BACKSTORE_METHOD -// DrawTransparentBitmapDeprecated(overlayPixels, oldMouseX, oldMouseY, pointerBGSave); -// DrawTransparentBitmap(overlayPixels, oldMouseX, oldMouseY, pBGS); - for(uint32 y=0; y> 16) & 0xFF, g = (pixel >> 8) & 0xFF, r = pixel & 0xFF; - pixel = ((r + g + b) / 3) & 0x00FF; - backbuffer[i] = 0xFF000000 | (pixel << 16) | (pixel << 8); - } -return NULL;//*/ - -//This is crappy... !!! FIX !!! - extern bool finished, showGUI; - -// uint32 nFrame = 0, nFrameskip = 0; - uint32 totalFrames = 0; - finished = false; - bool showMessage = true; - uint32 showMsgFrames = 120; - uint8 transparency = 0; - // Pass a message to the "joystick" code to debounce the ESC key... - debounceRunKey = true; - - uint32 cartType = 4; - if (jaguarRomSize == 0x200000) - cartType = 0; - else if (jaguarRomSize == 0x400000) - cartType = 1; - else if (jaguar_mainRom_crc32 == 0x687068D5) - cartType = 2; - else if (jaguar_mainRom_crc32 == 0x55A0669C) - cartType = 3; - - char * cartTypeName[5] = { "2M Cartridge", "4M Cartridge", "CD BIOS", "CD Dev BIOS", "Homebrew" }; - uint32 elapsedTicks = SDL_GetTicks(), frameCount = 0, framesPerSecond = 0; - - while (true) - { - // Set up new backbuffer with new pixels and data - JaguarExecute(backbuffer, true); -// JaguarExecuteNew(); - totalFrames++; -//WriteLog("Frame #%u...\n", totalFrames); -//extern bool doDSPDis; -//if (totalFrames == 373) -// doDSPDis = true; - -//This sucks... !!! FIX !!! - joystick_exec(); -//This is done here so that the crud below doesn't get on our GUI background... - if (finished) - break; - - // Some QnD GUI stuff here... - if (showGUI) - { - extern uint32 gpu_pc, dsp_pc; - DrawString(backbuffer, 8, 8, false, "GPU PC: %08X", gpu_pc); - DrawString(backbuffer, 8, 16, false, "DSP PC: %08X", dsp_pc); - DrawString(backbuffer, 8, 32, false, "%u FPS", framesPerSecond); - } - - if (showMessage) - { -// FF0F -> 1111 11 11 000 0 1111 -> 3F 18 0F -// 3FE3 -> 0011 11 11 111 0 0011 -> 0F 3F 03 -/* DrawStringTrans((uint32 *)backbuffer, 8, 24*8, 0xFF0F, transparency, "Running..."); - DrawStringTrans((uint32 *)backbuffer, 8, 26*8, 0x3FE3, transparency, "%s, run address: %06X", cartTypeName[cartType], jaguarRunAddress); - DrawStringTrans((uint32 *)backbuffer, 8, 27*8, 0x3FE3, transparency, "CRC: %08X", jaguar_mainRom_crc32);//*/ -//first has wrong color. !!! FIX !!! - DrawStringTrans(backbuffer, 8, 24*8, 0xFF7F63FF, transparency, "Running..."); - DrawStringTrans(backbuffer, 8, 26*8, 0xFF1FFF3F, transparency, "%s, run address: %06X", cartTypeName[cartType], jaguarRunAddress); - DrawStringTrans(backbuffer, 8, 27*8, 0xFF1FFF3F, transparency, "CRC: %08X", jaguar_mainRom_crc32); - - if (showMsgFrames == 0) - { - transparency++; - - if (transparency == 33) -{ - showMessage = false; -/*extern bool doGPUDis; -doGPUDis = true;//*/ -} - - } - else - showMsgFrames--; - } - - RenderBackbuffer(); - frameCount++; - - if (SDL_GetTicks() - elapsedTicks > 250) - elapsedTicks += 250, framesPerSecond = frameCount * 4, frameCount = 0; - } - - // Reset the pitch, since it may have been changed in-game... - Element::SetScreenAndPitch((uint32 *)backbuffer, GetSDLScreenWidthInPixels()); - - // Save the background for the GUI... -// memcpy(background, backbuffer, tom_getVideoModeWidth() * 240 * 2); - // In this case, we squash the color to monochrome, then force it to blue + green... - for(uint32 i=0; i> 16) & 0xFF, g = (pixel >> 8) & 0xFF, r = pixel & 0xFF; - pixel = ((r + g + b) / 3) & 0x00FF; - background[i] = 0xFF000000 | (pixel << 16) | (pixel << 8); - } - - return NULL; -} - -#else - -bool debounceRunKey = true; -Window * RunEmu(void) -{ -// extern uint32 * backbuffer; - uint32 * overlayPixels = (uint32 *)sdlemuGetOverlayPixels(); - memset(overlayPixels, 0x00, 640 * 480 * 4); // Clear out overlay... - -//This is crappy... !!! FIX !!! -// extern bool finished, showGUI; - - sdlemuDisableOverlay(); - -// uint32 nFrame = 0, nFrameskip = 0; - uint32 totalFrames = 0; - finished = false; - bool showMessage = true; - uint32 showMsgFrames = 120; - uint8 transparency = 0xFF; - // Pass a message to the "joystick" code to debounce the ESC key... - debounceRunKey = true; - - uint32 cartType = 4; - if (jaguarROMSize == 0x200000) - cartType = 0; - else if (jaguarROMSize == 0x400000) - cartType = 1; - else if (jaguarMainROMCRC32 == 0x687068D5) - cartType = 2; - else if (jaguarMainROMCRC32 == 0x55A0669C) - cartType = 3; - - const char * cartTypeName[5] = { "2M Cartridge", "4M Cartridge", "CD BIOS", "CD Dev BIOS", "Homebrew" }; - uint32 elapsedTicks = SDL_GetTicks(), frameCount = 0, framesPerSecond = 0; - - while (!finished) - { - // Set up new backbuffer with new pixels and data - JaguarExecuteNew(); - totalFrames++; -//WriteLog("Frame #%u...\n", totalFrames); -//extern bool doDSPDis; -//if (totalFrames == 373) -// doDSPDis = true; - -//Problem: Need to do this *only* when the state changes from visible to not... -//Also, need to clear out the GUI when not on (when showMessage is active...) -if (showGUI || showMessage) - sdlemuEnableOverlay(); -else - sdlemuDisableOverlay(); - -//Add in a new function for clearing patches of screen (ClearOverlayRect) - -// Also: Take frame rate into account when calculating fade time... - - // Some QnD GUI stuff here... - if (showGUI) - { - FillScreenRectangle(overlayPixels, 8, 1*FONT_HEIGHT, 128, 4*FONT_HEIGHT, 0x00000000); - extern uint32 gpu_pc, dsp_pc; - DrawString(overlayPixels, 8, 1*FONT_HEIGHT, false, "GPU PC: %08X", gpu_pc); - DrawString(overlayPixels, 8, 2*FONT_HEIGHT, false, "DSP PC: %08X", dsp_pc); - DrawString(overlayPixels, 8, 4*FONT_HEIGHT, false, "%u FPS", framesPerSecond); - } - - if (showMessage) - { - DrawString2(overlayPixels, 8, 24*FONT_HEIGHT, 0x007F63FF, transparency, "Running..."); - DrawString2(overlayPixels, 8, 26*FONT_HEIGHT, 0x001FFF3F, transparency, "%s, run address: %06X", cartTypeName[cartType], jaguarRunAddress); - DrawString2(overlayPixels, 8, 27*FONT_HEIGHT, 0x001FFF3F, transparency, "CRC: %08X", jaguarMainROMCRC32); - - if (showMsgFrames == 0) - { - transparency--; - - if (transparency == 0) -{ - showMessage = false; -/*extern bool doGPUDis; -doGPUDis = true;//*/ -} - - } - else - showMsgFrames--; - } - - frameCount++; - - if (SDL_GetTicks() - elapsedTicks > 250) - elapsedTicks += 250, framesPerSecond = frameCount * 4, frameCount = 0; - } - - // Save the background for the GUI... - // In this case, we squash the color to monochrome, then force it to blue + green... - for(uint32 i=0; i> 16) & 0xFF, g = (pixel >> 8) & 0xFF, r = pixel & 0xFF; - pixel = ((r + g + b) / 3) & 0x00FF; - backbuffer[i] = 0xFF000000 | (pixel << 16) | (pixel << 8); - } - - sdlemuEnableOverlay(); - - return NULL; -} - -#endif - - -Window * Quit(void) -{ - WriteLog("GUI: Quitting due to user request.\n"); - exitGUI = true; - - return NULL; -} - -Window * About(void) -{ - char buf[512]; - sprintf(buf, "SVN %s", __DATE__); -//fprintf(fp, "VirtualJaguar v1.0.8 (Last full build was on %s %s)\n", __DATE__, __TIME__); -//VirtualJaguar v1.0.8 (Last full build was on Dec 30 2004 20:01:31) -//Hardwired, bleh... !!! FIX !!! -uint32 width = 55 * FONT_WIDTH, height = 18 * FONT_HEIGHT; -uint32 xpos = (640 - width) / 2, ypos = (480 - height) / 2; -// Window * window = new Window(8, 16, 50 * FONT_WIDTH, 21 * FONT_HEIGHT); - Window * window = new Window(xpos, ypos, width, height); -// window->AddElement(new Text(8, 8, "Virtual Jaguar 1.0.8")); -// window->AddElement(new Text(8, 8, "Virtual Jaguar CVS 20050110", 0xFF3030FF, 0xFF000000)); -// window->AddElement(new Text(208, 8+0*FONT_HEIGHT, buf, 0xFF3030FF, 0xFF000000)); - window->AddElement(new Text(248, 8+4*FONT_HEIGHT+5, buf, 0xFF3030FF, 0xFF000000)); - window->AddElement(new Text(8, 8+0*FONT_HEIGHT, "Coders:")); - window->AddElement(new Text(16, 8+1*FONT_HEIGHT, "James L. Hammons (shamus)")); - window->AddElement(new Text(16, 8+2*FONT_HEIGHT, "Niels Wagenaar (nwagenaar)")); - window->AddElement(new Text(16, 8+3*FONT_HEIGHT, "Carwin Jones (Caz)")); - window->AddElement(new Text(16, 8+4*FONT_HEIGHT, "Adam Green")); - window->AddElement(new Text(8, 8+6*FONT_HEIGHT, "Testers:")); - window->AddElement(new Text(16, 8+7*FONT_HEIGHT, "Guruma")); - window->AddElement(new Text(8, 8+9*FONT_HEIGHT, "Thanks go out to:")); - window->AddElement(new Text(16, 8+10*FONT_HEIGHT, "Aaron Giles for the original CoJag")); - window->AddElement(new Text(16, 8+11*FONT_HEIGHT, "David Raingeard for the original VJ")); - window->AddElement(new Text(16, 8+12*FONT_HEIGHT, "Karl Stenerud for his Musashi 68K emu")); - window->AddElement(new Text(16, 8+13*FONT_HEIGHT, "Sam Lantinga for his amazing SDL libs")); - window->AddElement(new Text(16, 8+14*FONT_HEIGHT, "Ryan C. Gordon for VJ's web presence")); - window->AddElement(new Text(16, 8+15*FONT_HEIGHT, "Curt Vendel for various Jaguar goodies")); - window->AddElement(new Text(16, 8+16*FONT_HEIGHT, "The guys over at Atari Age ;-)")); -// window->AddElement(new Image(8, 8, &vj_title_small)); -// window->AddElement(new Image(width - (vj_title_small.width + 8), 8, &vj_title_small)); - window->AddElement(new Image(width - (((Bitmap *)vj_title_small)->width + 8), 8, &vj_title_small)); - - return window; -} - -Window * MiscOptions(void) -{ - Window * window = new Window(8, 16, 304, 192); - window->AddElement(new PushButton(8, 8, &vjs.useJaguarBIOS, "BIOS")); - window->AddElement(new SlideSwitch(8, 32, &vjs.hardwareTypeNTSC, "PAL", "NTSC")); - window->AddElement(new PushButton(8, 64, &vjs.DSPEnabled, "DSP")); - window->AddElement(new SlideSwitch(24, 88, &vjs.usePipelinedDSP, "Original", "Pipelined")); - window->AddElement(new SlideSwitch(8, 120, (bool *)&vjs.glFilter, "Sharp", "Blurry")); - window->AddElement(new SlideSwitch(8, 152, (bool *)&vjs.renderType, "Normal render", "TV style")); - - window->AddElement(new TextEdit(88, 8, vjs.ROMPath, 20, 0xFF8484FF, 0xFF000000)); - -/*TextEdit(uint32 x, uint32 y, string s, uint32 mss = 10, uint32 fg = 0xFF8484FF, - uint32 bg = 0xFF84FF4D): Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(s), - caretPos(0), maxScreenSize(mss) {}*/ -// Missing: -// * BIOS path -// * ROM path -// * EEPROM path -// * joystick -// * joystick port -// * OpenGL? -// * GL Filter type -// * Window/fullscreen -// * Key definitions - - return window; -} - -// Function prototype -Window * CrashGracefullyCallback(void); - -//NOTE: Probably should set a flag as well telling it to do a full reset -// of the Jaguar hardware if this happens... -void GUICrashGracefully(const char * reason) -{ - finished = true; // We're finished for now! - - // Since this is used in the menu code as well, we could create another - // internal function called "PushWindowOnQueue" or somesuch - SDL_Event event; - event.type = SDL_USEREVENT; - event.user.code = MENU_ITEM_CHOSEN; - event.user.data1 = (void *)CrashGracefullyCallback; - SDL_PushEvent(&event); -} - -Window * CrashGracefullyCallback(void) -{ - Window * window = new Window(8, 16, 304, 192); - - window->AddElement(new Text(8, 8+0*FONT_HEIGHT, "We CRASHED!!!")); - - return window; -} diff --git a/src/gui/gui.h b/src/gui/gui.h deleted file mode 100644 index 6520f53..0000000 --- a/src/gui/gui.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// GUI.H -// -// Graphical User Interface support -// - -#ifndef __GUI_H__ -#define __GUI_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -void GUIInit(void); -void GUIDone(void); -bool GUIMain(char *); -void GUICrashGracefully(const char *); - -// Exported vars - -extern bool showGUI; -extern bool exitGUI; // Hmm. -extern bool finished; // Current emulator loop is finished - -#ifdef __cplusplus -} -#endif - -#endif // __GUI_H__ diff --git a/src/gui/vj.qrc b/src/gui/vj.qrc index ddd0f3d..65b1eab 100644 --- a/src/gui/vj.qrc +++ b/src/gui/vj.qrc @@ -1,5 +1,5 @@ - res/vj.xpm + ../../res/vj.xpm diff --git a/src/gui/vj_title_small.c b/src/gui/vj_title_small.c deleted file mode 100644 index 66c0519..0000000 --- a/src/gui/vj_title_small.c +++ /dev/null @@ -1,2208 +0,0 @@ -/* GIMP RGBA C-Source image dump (vj-title-small.c) */ - -#if 0 -static const struct { - unsigned int width; - unsigned int height; - unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ - unsigned char pixel_data[197 * 89 * 4 + 1]; -} -#endif -#warning Nonportable!--!!! FIX !!! -uint8 vj_title_small[] = { -// 197, 89, 4, - "\305\0\0\0" - "\131\0\0\0" - "\4\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372K\0\231\372`\0\231\372C\0" - "\231\372\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\231\3721\0\231\372w\0\231\3724\0\0\0\0\0\0\0\0\0\231\372\23\0\231\372" - "l\0\231\372X\0\231\372\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\3\0\231" - "\3729\0\231\372\\\0\231\372b\0\231\372b\0\231\372b\0\231\372b\0\231\372b" - "\0\231\372b\0\231\372b\0\231\372b\0\231\372b\0\231\372\\\0\231\372'\0\231" - "\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\2\0\231\3723\0\231\372\\\0\231\372" - "a\0\231\372a\0\231\372a\0\231\372a\0\231\372a\0\231\372a\0\231\372a\0\231" - "\372a\0\231\372a\0\231\372a\0\231\372a\0\231\372a\0\231\372W\0\231\372%\0" - "\231\372\0\0\231\372\0\0\231\372,\0\231\372y\0\231\372=\0\231\372\1\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231" - "\372\13\0\231\372d\0\231\372e\0\231\372\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\231\372\1\0\231\372+\0\231\372[\0\231\372a\0\231\372a\0\231\372a\0\231" - "\372a\0\231\372a\0\231\372a\0\231\372a\0\231\372U\0\231\372'\0\231\372\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\27\0\231\372n\0\231\372M\0\231" - "\372\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\231\372K\0\231\372\346\0\231\372\334\0\231\372\314\0\231" - "\372\353\0\231\372\270\0\231\372\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\231\3727\0\231\372\357\0\231\372\310\0\231\372\354\0\231\372" - "(\0\231\372\2\0\231\372\277\0\231\372\323\0\231\372\343\0\231\372\207\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\231\372\12\0\231\372\262\0\231\372\353\0\231\372\313" - "\0\231\372\307\0\231\372\307\0\231\372\307\0\231\372\307\0\231\372\307\0" - "\231\372\307\0\231\372\307\0\231\372\307\0\231\372\307\0\231\372\331\0\231" - "\372\364\0\231\372y\0\231\372\1\0\0\0\0\0\0\0\0\0\231\372m\0\231\372\355" - "\0\231\372\307\0\231\372\304\0\231\372\304\0\231\372\304\0\231\372\304\0" - "\231\372\304\0\231\372\304\0\231\372\304\0\231\372\304\0\231\372\304\0\231" - "\372\304\0\231\372\304\0\231\372\304\0\231\372\315\0\231\372\357\0\231\372" - "C\0\231\372)\0\231\372\357\0\231\372\303\0\231\372\360\0\231\372:\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\1\0\231" - "\372\260\0\231\372\330\0\231\372\336\0\231\372\237\0\231\372\0\0\0\0\0\0" - "\0\0\0\0\231\372\0\0\231\372w\0\231\372\356\0\231\372\323\0\231\372\304\0" - "\231\372\304\0\231\372\304\0\231\372\304\0\231\372\304\0\231\372\304\0\231" - "\372\305\0\231\372\325\0\231\372\356\0\231\372f\0\231\372\0\0\0\0\0\0\0\0" - "\0\0\231\372\12\0\231\372\321\0\231\372\317\0\231\372\353\0\231\372}\0\231" - "\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\231\372\0\0\231\372\304\0\231\372\217\0\231\372\11\0\231\372\1\0\231\372" - "%\0\231\372\357\0\231\3728\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\231\372n\0\231\372\305\0\231\372\6\0\231\372\313\0\231\372p\0\231\372" - "\26\0\231\372\362\0\231\3723\0\231\372u\0\231\372\304\0\231\372\2\0\0\0\0" - "\0\0\0\0\0\231\372Q\0\231\372\355\0\231\372$\0\231\372\1\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\4\0\231" - "\372Y\0\231\372\357\0\231\372\25\0\0\0\0\0\0\0\0\0\231\372\313\0\231\372" - "x\0\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\2\0\231\372\260\0\231\372" - "\224\0\231\372d\0\231\372\320\0\231\372\5\0\231\372\302\0\231\372z\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\16\0" - "\231\372\345\0\231\372F\0\231\372X\0\231\372\336\0\231\372\7\0\0\0\0\0\0" - "\0\0\0\231\372\22\0\231\372\360\0\231\372R\0\231\372\3\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\0\0\231\372\3\0\231\372j\0\231\372" - "\337\0\231\372\17\0\0\0\0\0\0\0\0\0\231\372)\0\231\372\362\0\231\372\36\0" - "\231\372\205\0\231\372\271\0\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\3\0\231\372\342\0\231\372Q\0\0\0" - "\0\0\0\0\0\0\231\372\0\0\231\372\330\0\231\372`\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\231\372y\0\231\372\275\0\0\0\0\0\231\372\264\0\231" - "\372\202\0\231\372\32\0\231\372\363\0\231\372*\0\231\372a\0\231\372\321\0" - "\231\372\5\0\0\0\0\0\0\0\0\0\231\372}\0\231\372\277\0\231\372\1\0\231\372" - "\5\0\231\372]\0\231\372\223\0\231\372\227\0\231\372\227\0\231\372\227\0\231" - "\372\227\0\231\372\227\0\231\372\207\0\231\3725\0\231\372\0\0\231\372\30" - "\0\231\372\366\0\231\3720\0\0\0\0\0\0\0\0\0\231\372\215\0\231\372\342\0\231" - "\372\236\0\231\372\227\0\231\372\227\0\231\372\224\0\231\372h\0\231\372\11" - "\0\0\0\0\0\231\372\1\0\231\372B\0\231\372\207\0\231\372\227\0\231\372\227" - "\0\231\372\227\0\231\372\251\0\231\372\351\0\231\372^\0\231\372k\0\231\372" - "\311\0\231\372\2\0\231\372\266\0\231\372\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\351\0\231\372" - ";\0\231\372K\0\231\372\343\0\231\372\11\0\0\0\0\0\0\0\0\0\231\3721\0\231" - "\372\355\0\231\372\27\0\231\372\0\0\231\372>\0\231\372\202\0\231\372\227" - "\0\231\372\227\0\231\372\227\0\231\372\202\0\231\3722\0\231\372\0\0\231\372" - "&\0\231\372\363\0\231\372\36\0\0\0\0\0\0\0\0\0\231\372/\0\231\372\360\0\231" - "\372\25\0\231\372z\0\231\372\275\0\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\12\0\231\372\354\0\231\372" - "A\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372y\0\231\372\275\0\0\0\0\0\231\372\264" - "\0\231\372\202\0\231\372\32\0\231\372\363\0\231\372*\0\231\372a\0\231\372" - "\321\0\231\372\5\0\0\0\0\0\0\0\0\0\231\372\177\0\231\372\271\0\231\372\1" - "\0\231\372g\0\231\372\351\0\231\372\230\0\231\372\215\0\231\372\215\0\231" - "\372\215\0\231\372\215\0\231\372\220\0\231\372\264\0\231\372\351\0\231\372" - "\37\0\231\372\25\0\231\372\364\0\231\3721\0\0\0\0\0\0\0\0\0\231\372\13\0" - "\231\372d\0\231\372\215\0\231\372\215\0\231\372\215\0\231\372\225\0\231\372" - "\337\0\231\372\214\0\231\372\0\0\231\372A\0\231\372\353\0\231\372\247\0\231" - "\372\215\0\231\372\215\0\231\372\215\0\231\372\204\0\231\372O\0\231\372\3" - "\0\231\372k\0\231\372\311\0\231\372\2\0\231\372\266\0\231\372\201\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231" - "\372\351\0\231\372<\0\231\372K\0\231\372\343\0\231\372\11\0\0\0\0\0\0\0\0" - "\0\231\372A\0\231\372\346\0\231\372\17\0\231\372*\0\231\372\353\0\231\372" - "\257\0\231\372\217\0\231\372\215\0\231\372\217\0\231\372\266\0\231\372\341" - "\0\231\372\30\0\231\372\27\0\231\372\365\0\231\372*\0\0\0\0\0\0\0\0\0\231" - "\372/\0\231\372\361\0\231\372\25\0\231\372z\0\231\372\275\0\231\372\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\13" - "\0\231\372\354\0\231\372@\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\313\0\231\372" - "k\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372y\0\231\372\275" - "\0\0\0\0\0\231\372\264\0\231\372\202\0\231\372\32\0\231\372\363\0\231\372" - "*\0\231\372a\0\231\372\321\0\231\372\5\0\0\0\0\0\0\0\0\0\231\372\177\0\231" - "\372\272\0\231\372\2\0\231\372\262\0\231\372\215\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\3\0\231\372\333\0\231\372]\0\231\372\25" - "\0\231\372\364\0\231\3721\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\231\372j\0\231\372\321\0\231\372\3\0\231\372\207\0\231" - "\372\264\0\231\372\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231" - "\372k\0\231\372\311\0\231\372\2\0\231\372\266\0\231\372\201\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372" - "\351\0\231\372<\0\231\372K\0\231\372\343\0\231\372\11\0\0\0\0\0\0\0\0\0\231" - "\372A\0\231\372\346\0\231\372\17\0\231\372d\0\231\372\320\0\231\372\6\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\231\372\12\0\231\372\351\0\231\372J\0\231\372\26\0" - "\231\372\366\0\231\372+\0\0\0\0\0\0\0\0\0\231\372/\0\231\372\361\0\231\372" - "\25\0\231\372z\0\231\372\275\0\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\13\0\231\372\354\0\231\372@\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\231\372y\0\231\372\275\0\0\0\0\0\231\372\264\0\231" - "\372\202\0\231\372\32\0\231\372\363\0\231\372*\0\231\372a\0\231\372\321\0" - "\231\372\5\0\0\0\0\0\0\0\0\0\231\372\177\0\231\372\272\0\231\372\3\0\231" - "\372\306\0\231\372o\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231" - "\372\0\0\231\372\312\0\231\372g\0\231\372\25\0\231\372\364\0\231\3721\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0" - "\231\372\337\0\231\372\10\0\231\372\231\0\231\372\235\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\311\0\231\372\2" - "\0\231\372\266\0\231\372\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\351\0\231\372<\0\231\372K\0\231" - "\372\343\0\231\372\11\0\0\0\0\0\0\0\0\0\231\372A\0\231\372\346\0\231\372" - "\17\0\231\372{\0\231\372\273\0\231\372\1\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372" - "\1\0\231\372\331\0\231\372]\0\231\372\26\0\231\372\366\0\231\372+\0\0\0\0" - "\0\0\0\0\0\231\372/\0\231\372\361\0\231\372\25\0\231\372z\0\231\372\275\0" - "\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\231\372\13\0\231\372\354\0\231\372@\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372" - "\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372" - "y\0\231\372\275\0\0\0\0\0\231\372\264\0\231\372\202\0\231\372\32\0\231\372" - "\363\0\231\372*\0\231\372^\0\231\372\321\0\231\372\5\0\0\0\0\0\0\0\0\0\231" - "\372\177\0\231\372\272\0\231\372\3\0\231\372\306\0\231\372p\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\0\0\231\372\314\0\231\372g\0" - "\231\372\21\0\231\372\360\0\231\3728\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10\0\231" - "\372\220\0\231\372\247\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372k\0\231\372\311\0\231\372\2\0\231\372\266\0\231\372\201\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372" - "\21\0\231\372\351\0\231\372<\0\231\372K\0\231\372\343\0\231\372\11\0\0\0" - "\0\0\0\0\0\0\231\372A\0\231\372\346\0\231\372\17\0\231\372z\0\231\372\273" - "\0\231\372\1\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\0\0\231\372\326\0\231\372" - "W\0\231\372\26\0\231\372\366\0\231\372+\0\0\0\0\0\0\0\0\0\231\372/\0\231" - "\372\361\0\231\372\25\0\231\372l\0\231\372\312\0\231\372\1\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\13\0\231\372" - "\354\0\231\372@\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\313\0\231\372k\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372y\0\231\372\275\0\0\0\0" - "\0\231\372\264\0\231\372\202\0\231\372\32\0\231\372\363\0\231\372*\0\231" - "\372G\0\231\372\341\0\231\372\27\0\0\0\0\0\0\0\0\0\231\372\177\0\231\372" - "\272\0\231\372\1\0\231\372\250\0\231\372\234\0\231\372\11\0\231\372\4\0\231" - "\372\4\0\231\372\4\0\231\372\4\0\231\372\5\0\231\372\22\0\231\372\343\0\231" - "\372Z\0\231\372\13\0\231\372\345\0\231\372Y\0\231\372\1\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372" - "\10\0\231\372\200\0\231\372\302\0\231\372\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\311\0\231\372\2\0\231\372\230\0" - "\231\372\252\0\231\372\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\231\372\21\0\231\372\351\0\231\372<\0\231\372K\0\231\372\343\0" - "\231\372\11\0\0\0\0\0\231\372\1\0\231\372b\0\231\372\334\0\231\372\11\0\231" - "\372d\0\231\372\327\0\231\372\21\0\231\372\5\0\231\372\4\0\231\372\6\0\231" - "\372\31\0\231\372\354\0\231\372E\0\231\372\20\0\231\372\360\0\231\372D\0" - "\231\372\0\0\0\0\0\0\231\372/\0\231\372\361\0\231\372\25\0\231\372a\0\231" - "\372\332\0\231\372\16\0\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\231\372\13\0\231\372\354\0\231\372@\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372\177\0\231\372\270\0\0\0\0\0\231\372\264\0\231\372\202\0" - "\231\372\32\0\231\372\363\0\231\372*\0\231\372\22\0\231\372\317\0\231\372" - "\332\0\231\372K\0\231\372\0\0\231\372\177\0\231\372\272\0\231\372\1\0\231" - "\372A\0\231\372\356\0\231\372\333\0\231\372\315\0\231\372\315\0\231\372\315" - "\0\231\372\315\0\231\372\320\0\231\372\347\0\231\372\316\0\231\372\23\0\231" - "\372\1\0\231\372\213\0\231\372\361\0\231\372\217\0\231\372\14\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10" - "\0\231\372,\0\231\372\340\0\231\372\306\0\231\372+\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\311\0\231\372\2\0\231\3728\0\231" - "\372\342\0\231\372\312\0\231\372,\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\231\372\21\0\231\372\351\0\231\372<\0\231\372K\0\231\372\343\0" - "\231\372\11\0\231\372\17\0\231\372\231\0\231\372\354\0\231\372\177\0\231" - "\372\0\0\231\372!\0\231\372\334\0\231\372\342\0\231\372\321\0\231\372\315" - "\0\231\372\323\0\231\372\345\0\231\372\304\0\231\372\15\0\231\372\2\0\231" - "\372\235\0\231\372\352\0\231\372\204\0\231\372\5\0\231\372/\0\231\372\361" - "\0\231\372\25\0\231\372\36\0\231\372\325\0\231\372\326\0\231\372A\0\231\372" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\13\0\231\372" - "\354\0\231\372@\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\313\0\231\372k\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\2\0\231\372\236\0\231\372\231" - "\0\0\0\0\0\231\372\264\0\231\372\202\0\231\372\32\0\231\372\363\0\231\372" - "*\0\0\0\0\0\231\372\20\0\231\372|\0\231\372\350\0\231\372\27\0\231\372\177" - "\0\231\372\272\0\231\372\1\0\231\372\1\0\231\372!\0\231\372L\0\231\372S\0" - "\231\372S\0\231\372S\0\231\372S\0\231\372S\0\231\372C\0\231\372\23\0\0\0" - "\0\0\0\0\0\0\231\372\4\0\231\372C\0\231\372\346\0\231\372h\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10" - "\0\231\372\0\0\231\372\37\0\231\372\247\0\231\372\304\0\231\372\3\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\311\0\231\372\2\0\231\372\0" - "\0\231\372\32\0\231\372\262\0\231\372\253\0\231\372\1\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\351\0\231\372<\0\231\372K\0\231" - "\372\343\0\231\372\11\0\231\372r\0\231\372\331\0\231\3726\0\231\372\2\0\0" - "\0\0\0\231\372\0\0\231\372\23\0\231\372?\0\231\372M\0\231\372S\0\231\372" - "J\0\231\372<\0\231\372\17\0\0\0\0\0\0\0\0\0\231\372\5\0\231\372L\0\231\372" - "\360\0\231\372D\0\231\372/\0\231\372\361\0\231\372\25\0\0\0\0\0\231\372\22" - "\0\231\372\220\0\231\372\334\0\231\372\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\231\372\13\0\231\372\354\0\231\372@\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372" - "\26\0\231\372\245\0\231\372\356\0\231\372D\0\0\0\0\0\231\372\264\0\231\372" - "\202\0\231\372\32\0\231\372\363\0\231\372*\0\0\0\0\0\0\0\0\0\231\372\22\0" - "\231\372\366\0\231\3720\0\231\372\177\0\231\372\272\0\231\372\1\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\231\372\2\0\231\372\22\0\231\372!\0\231\372$\0\231\372$" - "\0\231\372$\0\231\372$\0\231\372\34\0\231\372\10\0\0\0\0\0\231\372\0\0\231" - "\372\246\0\231\372\214\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\231\372Q\0\231\372\337\0\231\372\10\0\0\0\0\0\0\0\0\0\231\372E\0\231\372" - "\342\0\231\372\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\311" - "\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372d\0\231\372\320\0\231\372\5\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\351\0\231\372<\0" - "\231\372K\0\231\372\343\0\231\372\11\0\231\372\237\0\231\372\232\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\6\0\231\372\34\0\231\372+\0\231\3724\0" - "\231\3724\0\231\3724\0\231\3720\0\231\372!\0\231\372\12\0\0\0\0\0\0\0\0\0" - "\231\372\317\0\231\372i\0\231\372/\0\231\372\361\0\231\372\25\0\0\0\0\0\0" - "\0\0\0\231\372%\0\231\372\364\0\231\372\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\231\372\7\0\231\372\350\0\231\372H\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\0\0\231" - "\372\250\0\231\372\304\0\231\3725\0\231\372\1\0\0\0\0\0\231\372\265\0\231" - "\372\202\0\231\372\32\0\231\372\363\0\231\372*\0\0\0\0\0\0\0\0\0\231\372" - "\20\0\231\372\366\0\231\3721\0\231\372\177\0\231\372\272\0\231\372\1\0\0" - "\0\0\0\0\0\0\0\231\372\6\0\231\372\233\0\231\372\354\0\231\372\366\0\231" - "\372\370\0\231\372\370\0\231\372\370\0\231\372\370\0\231\372\364\0\231\372" - "\322\0\231\372\"\0\0\0\0\0\231\372\242\0\231\372\227\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10\0\0\0" - "\0\0\0\0\0\0\231\3726\0\231\372\353\0\231\372\24\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\231\372k\0\231\372\311\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372]" - "\0\231\372\323\0\231\372\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231" - "\372\21\0\231\372\351\0\231\372<\0\231\372K\0\231\372\343\0\231\372\11\0" - "\231\372\251\0\231\372\217\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\14\0\231\372" - "\265\0\231\372\356\0\231\372\361\0\231\372\354\0\231\372\354\0\231\372\354" - "\0\231\372\357\0\231\372\360\0\231\372\323\0\231\372\36\0\0\0\0\0\231\372" - "\315\0\231\372i\0\231\372/\0\231\372\361\0\231\372\25\0\0\0\0\0\0\0\0\0\231" - "\372\33\0\231\372\363\0\231\372)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\231\372\0\0\231\372\313\0\231\372\200\0\231\372\6\0\0\0\0\0\0" - "\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\3\0\231\372" - "\321\0\231\372d\0\0\0\0\0\231\372\0\0\231\372\33\0\231\372\337\0\231\372" - "]\0\231\372\32\0\231\372\363\0\231\372*\0\0\0\0\0\0\0\0\0\231\372\20\0\231" - "\372\366\0\231\3721\0\231\372\177\0\231\372\272\0\231\372\1\0\0\0\0\0\0\0" - "\0\0\231\372C\0\231\372\363\0\231\372E\0\231\372\33\0\231\372\16\0\231\372" - "\16\0\231\372\16\0\231\372\20\0\231\372!\0\231\372\261\0\231\372\250\0\231" - "\372\0\0\231\372\242\0\231\372\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10\0\0\0\0\0\0\0\0\0\231\372" - "5\0\231\372\354\0\231\372\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0" - "\231\372\311\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372N\0\231\372\336\0\231\372" - "\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\351\0" - "\231\372<\0\231\372K\0\231\372\343\0\231\372\11\0\231\372\251\0\231\372\217" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372X\0\231\372\341\0\231\372%\0\231\372\14" - "\0\231\372\4\0\231\372\4\0\231\372\4\0\231\372\11\0\231\372\27\0\231\372" - "\300\0\231\372\216\0\0\0\0\0\231\372\315\0\231\372i\0\231\372/\0\231\372" - "\361\0\231\372\25\0\0\0\0\0\0\0\0\0\231\372\33\0\231\372\363\0\231\372)\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372N\0\231\372" - "\350\0\231\372\274\0\231\372\37\0\0\0\0\0\231\372\313\0\231\372k\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\231\372\7\0\231\372\332\0\231\372W\0\231\372\0\0\231\372" - "U\0\231\372\340\0\231\372\277\0\231\372\14\0\231\372\32\0\231\372\363\0\231" - "\372*\0\0\0\0\0\0\0\0\0\231\372\20\0\231\372\366\0\231\3721\0\231\372\177" - "\0\231\372\272\0\231\372\1\0\0\0\0\0\0\0\0\0\231\372`\0\231\372\330\0\231" - "\372\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372r\0\231\372" - "\314\0\231\372\3\0\231\372\242\0\231\372\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10\0\0\0\0\0\0\0" - "\0\0\231\3725\0\231\372\354\0\231\372\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\231\372k\0\231\372\311\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372N\0\231\372" - "\336\0\231\372\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0" - "\231\372\351\0\231\372<\0\231\372K\0\231\372\343\0\231\372\11\0\231\372\251" - "\0\231\372\217\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372x\0\231\372\276\0\231\372" - "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\206\0\231\372" - "\262\0\0\0\0\0\231\372\315\0\231\372i\0\231\372/\0\231\372\361\0\231\372" - "\25\0\0\0\0\0\0\0\0\0\231\372\33\0\231\372\363\0\231\372)\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\0\0\231\372$\0\231\372" - "\312\0\231\372\214\0\0\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\231\372\7\0\231\372\332\0\231\372W\0\231\372\11\0\231\372\345\0\231" - "\372}\0\231\372\11\0\0\0\0\0\231\372\32\0\231\372\363\0\231\372*\0\0\0\0" - "\0\0\0\0\0\231\372\20\0\231\372\366\0\231\3721\0\231\372\177\0\231\372\272" - "\0\231\372\1\0\0\0\0\0\0\0\0\0\231\372a\0\231\372\326\0\231\372\3\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372m\0\231\372\323\0\231\372" - "\4\0\231\372\242\0\231\372\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10\0\0\0\0\0\0\0\0\0\231\3725\0" - "\231\372\354\0\231\372\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231" - "\372\311\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372N\0\231\372\336\0\231\372\12" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\351\0\231" - "\372<\0\231\372K\0\231\372\343\0\231\372\11\0\231\372\251\0\231\372\217\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\231\372{\0\231\372\272\0\231\372\1\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\200\0\231\372\265\0\0\0\0\0" - "\231\372\315\0\231\372i\0\231\372/\0\231\372\361\0\231\372\25\0\0\0\0\0\0" - "\0\0\0\231\372\33\0\231\372\363\0\231\372)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\220\0\231\372\246\0" - "\0\0\0\0\231\372\313\0\231\372k\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\7\0\231" - "\372\332\0\231\372W\0\231\372\34\0\231\372\357\0\231\372/\0\0\0\0\0\0\0\0" - "\0\231\372\32\0\231\372\363\0\231\372*\0\0\0\0\0\0\0\0\0\231\372\20\0\231" - "\372\366\0\231\3721\0\231\372\177\0\231\372\272\0\231\372\1\0\0\0\0\0\0\0" - "\0\0\231\372a\0\231\372\326\0\231\372\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\231\372m\0\231\372\323\0\231\372\4\0\231\372\242\0\231\372" - "\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372" - "\337\0\231\372\10\0\0\0\0\0\0\0\0\0\231\3725\0\231\372\354\0\231\372\25\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\311\0\231\372\2\0\0\0" - "\0\0\0\0\0\0\231\372N\0\231\372\331\0\231\372\10\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\351\0\231\372<\0\231\372K\0\231\372" - "\343\0\231\372\11\0\231\372\251\0\231\372\217\0\0\0\0\0\0\0\0\0\0\0\0\0\231" - "\372{\0\231\372\272\0\231\372\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372\200\0\231\372\265\0\0\0\0\0\231\372\315\0\231\372i\0\231" - "\372/\0\231\372\361\0\231\372\25\0\0\0\0\0\0\0\0\0\231\372\33\0\231\372\363" - "\0\231\372)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\231\372\220\0\231\372\246\0\0\0\0\0\231\372\313\0\231\372k\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\231\372\7\0\231\372\332\0\231\372W\0\231\372$\0" - "\231\372\357\0\231\372#\0\0\0\0\0\0\0\0\0\231\372\32\0\231\372\363\0\231" - "\372*\0\0\0\0\0\0\0\0\0\231\372\20\0\231\372\366\0\231\3721\0\231\372\177" - "\0\231\372\272\0\231\372\1\0\0\0\0\0\0\0\0\0\231\372a\0\231\372\326\0\231" - "\372\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372m\0\231\372" - "\323\0\231\372\4\0\231\372\242\0\231\372\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\337\0\231\372\10\0\231\372\0\0" - "\231\372\0\0\231\3725\0\231\372\354\0\231\372\25\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\231\372k\0\231\372\311\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372N" - "\0\231\372\332\0\231\372\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231" - "\372\22\0\231\372\351\0\231\3729\0\231\372K\0\231\372\343\0\231\372\11\0" - "\231\372\251\0\231\372\217\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372{\0\231\372\272" - "\0\231\372\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\200" - "\0\231\372\265\0\0\0\0\0\231\372\315\0\231\372i\0\231\372/\0\231\372\361" - "\0\231\372\25\0\0\0\0\0\0\0\0\0\231\372\33\0\231\372\363\0\231\372)\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231" - "\372\220\0\231\372\246\0\0\0\0\0\231\372\306\0\231\372u\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\231\372\11\0\231\372\335\0\231\372T\0\231\372$\0\231\372\357\0\231" - "\372#\0\0\0\0\0\0\0\0\0\231\372\32\0\231\372\363\0\231\372*\0\0\0\0\0\0\0" - "\0\0\231\372\20\0\231\372\366\0\231\3721\0\231\372\177\0\231\372\272\0\231" - "\372\1\0\0\0\0\0\0\0\0\0\231\372a\0\231\372\326\0\231\372\3\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372m\0\231\372\323\0\231\372\4\0" - "\231\372\242\0\231\372\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\231\372Q\0\231\372\337\0\231\372\11\0\231\372\6\0\231\372\2\0\231\372" - "5\0\231\372\354\0\231\372\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0" - "\231\372\311\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372C\0\231\372\342\0\231\372" - "\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372!\0\231\372\361\0\231" - "\372&\0\231\372K\0\231\372\343\0\231\372\11\0\231\372\251\0\231\372\217\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\231\372{\0\231\372\272\0\231\372\1\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\200\0\231\372\265\0\0\0\0\0" - "\231\372\315\0\231\372i\0\231\372/\0\231\372\361\0\231\372\25\0\0\0\0\0\0" - "\0\0\0\231\372\27\0\231\372\357\0\231\3724\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\220\0\231\372\246\0" - "\0\0\0\0\231\372\225\0\231\372\311\0\231\372V\0\231\372M\0\231\372M\0\231" - "\372s\0\231\372\363\0\231\372/\0\231\372$\0\231\372\357\0\231\372#\0\0\0" - "\0\0\0\0\0\0\231\372\32\0\231\372\363\0\231\372*\0\0\0\0\0\0\0\0\0\231\372" - "\20\0\231\372\366\0\231\3721\0\231\372\177\0\231\372\272\0\231\372\1\0\0" - "\0\0\0\0\0\0\0\231\372a\0\231\372\326\0\231\372\3\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372m\0\231\372\323\0\231\372\4\0\231\372\242" - "\0\231\372\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\1\25\0\0\3\3\210\337" - "T\0\226\365\340$\24\40\24C\4\7\33/\3\5\12\0\230\3715\0\231\372\354\0\231" - "\372\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\310\0\231\372" - "\1\0\0\0\0\0\0\0\0\0\231\372\40\0\231\372\361\0\231\372\214\0\231\372_\0" - "\231\372_\0\231\372_\0\231\372_\0\231\372`\0\231\372\233\0\231\372\347\0" - "\231\372\14\0\231\372K\0\231\372\343\0\231\372\11\0\231\372\251\0\231\372" - "\217\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372{\0\231\372\272\0\231\372\1\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\200\0\231\372\265\0\0" - "\0\0\0\231\372\315\0\231\372i\0\231\372/\0\231\372\361\0\231\372\25\0\0\0" - "\0\0\0\0\0\0\231\372\10\0\231\372\317\0\231\372\247\0\231\372W\0\231\372" - "M\0\231\372M\0\231\372M\0\231\372L\0\231\3727\0\231\372\13\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\231\372\212\0\231\372\256\0\0\0\0\0\231\372\26\0\231\372\252\0\231\372" - "\317\0\231\372\325\0\231\372\325\0\231\372\310\0\231\372m\0\231\372\1\0\231" - "\372(\0\231\372\357\0\231\372\40\0\0\0\0\0\0\0\0\0\231\372\32\0\231\372\362" - "\0\231\372(\0\0\0\0\0\0\0\0\0\231\372\21\0\231\372\366\0\231\3721\0\231\372" - "~\0\231\372\270\0\231\372\1\0\0\0\0\0\0\0\0\0\231\372e\0\231\372\324\0\231" - "\372\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372m\0\231\372" - "\323\0\231\372\4\0\231\372\242\0\231\372\232$\0\0\10""0\0\0\14O\0\0\35Z\0" - "\0,`\0\0Ea\0\0m;Bl\263\11\216\347\362y\4\7\327\216\0\0\351i\0\0q\1\225\364" - "@\0\231\372\346\0\231\372\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0" - "\231\372\310\0\231\372\2\0\0\0\0\0\0\0\0\0\231\372\1\0\231\372P\0\231\372" - "\265\0\231\372\306\0\231\372\306\0\231\372\306\0\231\372\306\0\231\372\306" - "\0\231\372\272\0\231\372B\0\0\0\0\0\231\372L\0\231\372\343\0\231\372\11\0" - "\231\372\240\0\231\372\231\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\200\0\231\372" - "\266\0\231\372\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372" - "\200\0\231\372\265\0\0\0\0\0\231\372\315\0\231\372i\0\231\372.\0\231\372" - "\357\0\231\372\25\0\0\0\0\0\0\0\0\0\231\372\0\0\231\372:\0\231\372\265\0" - "\231\372\325\0\231\372\325\0\231\372\325\0\231\372\325\0\231\372\325\0\231" - "\372\343\0\231\372\320\0\231\372\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372k\0\231\372\314\0\231" - "\372\6\0\0\0\0\0\0\0\0\0\231\372\1\0\231\372\2\0\231\372\2\0\231\372\1\0" - "\0\0\0\0\0\0\0\0\231\372K\0\231\372\352\0\231\372\16\0\0\0\0\0\0\0\0\0\231" - "\372\20\0\231\372\357\0\231\372C\0\0\0\0\0\0\0\0\0\231\372/\0\231\372\363" - "\0\231\372%\0\231\372h\0\231\372\332\0\231\372\11\0\0\0\0\0\231\372\0\0\231" - "\372\231\0\231\372\266\0\231\372\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\231\372j\1\224\362\330?\15\26&\13\205\332\272$j\256\316|\0\0" - "\261\204\0\0\310\211\0\0\345\177\0\0\314}\0\0\303o\0\0\2332Gu\204\1\226\365" - "\3560;`AR\2\3(:\0\0\14\0\231\372k\0\231\372\320\0\231\372\5\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\231\372Q\0\231\372\340\0\231\372\17\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\231\372\0\0\231\372m\0\231\372\314\0\231\372\2\0\231\372\204\0" - "\231\372\274\0\231\372\3\0\0\0\0\0\231\372\1\0\231\372\250\0\231\372\234" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372x\0\231" - "\372\276\0\231\372\1\0\231\372\316\0\231\372i\0\231\372\31\0\231\372\362" - "\0\231\3723\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\0\0\231\372\2\0\231" - "\372\2\0\231\372\2\0\231\372\2\0\231\372\2\0\231\372\22\0\231\372\345\0\231" - "\372T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\231\372\36\0\231\372\344\0\231\372\307\0\231\372\234\0\231" - "\372\213\0\231\372\204\0\231\372\204\0\231\372\204\0\231\372\204\0\231\372" - "\215\0\231\372\233\0\231\372\340\0\231\372\231\0\231\372\0\0\0\0\0\0\0\0" - "\0\0\231\372\0\0\231\372\231\0\231\372\341\0\231\372\241\0\231\372\234\0" - "\231\372\333\0\231\372\256\0\231\372\3\0\231\372\40\0\231\372\347\0\231\372" - "\307\0\231\372\225\0\231\372\254\0\231\372\362\0\231\372U\0\0\0\0\23\0\0" - "\1\24\0\0\3#\0\0\11A\0\0\32Z\0\0:g\0\0\\M1P\250\4\224\362\370CKz\354\17\211" - "\340\376[Cn\377\243\0\0\377\243\0\0\377{\0\0\3119\0\0#(\0\0\10)\0\0\3\3\211" - "\341\11\0\231\372\307\0\231\372\323\0\231\372\224\0\231\372\244\0\231\372" - "\346\0\231\372y\0\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372\20" - "\0\231\372\331\0\231\372\322\0\231\372\242\0\231\372\217\0\231\372\204\0" - "\231\372\204\0\231\372\204\0\231\372\204\0\231\372\204\0\231\372\204\0\231" - "\372\204\0\231\372\204\0\231\372\212\0\231\372\230\0\231\372\267\0\231\372" - "\354\0\231\372u\0\0\0\0\0\231\372,\0\231\372\346\0\231\372\275\0\231\372" - "\221\0\231\372\265\0\231\372\354\0\231\372;\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\372M\0\231\372\347\0\231\372n\0\231\372" - "\357\0\231\372O\0\231\372\3\0\231\372\254\0\231\372\335\0\231\372\241\0\231" - "\372\207\0\231\372\204\0\231\372\204\0\231\372\204\0\231\372\204\0\231\372" - "\204\0\231\372\204\0\231\372\204\0\231\372\206\0\231\372\244\0\231\372\355" - "\0\231\372*\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\231\372\0\0\231\372%\0\231\372v\0\231\372\217\0\231" - "\372\230\0\231\372\241\0\231\372\241\0\231\372\241\0\231\372\241\0\231\372" - "\224\0\231\372\212\0\231\372\\\0\231\372\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\224\362\12\0\226\365^\0\231\371\216\0\231\372\220\0\231\372j\0\231\372" - "\15\0\0\0\0\0\0\0\0\0\231\372)\0\222\357\201\0\214\345\230\2\212\341\225" - "\5\202\325T:\13\22\40Z\0\0;q\0\0rx\0\0\227\177\0\0\270\207\0\0\343\230\0" - "\0\375\240\0\0\377\236\3\4\377MM\177\377\36z\307\377=[\224\377\210\13\21" - "\377\222\0\0\377\227\0\0\377\214\0\0\365c\0\0~\36\0\0\11\0\0\0\0\0\0\0\0" - "\0\231\372\24\0\231\372t\0\231\372\221\0\231\372\214\0\231\372[\0\231\372" - "\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\215\347\32\0\215\346" - "j\0\216\350\215\0\227\367\222\0\231\372\241\0\231\372\241\0\231\372\241\0" - "\231\372\241\0\231\372\241\0\231\372\241\0\231\372\241\0\231\372\241\0\231" - "\372\226\0\231\372\217\0\231\372\177\0\231\372G\0\231\372\3\0\0\0\0\0\231" - "\372\0\0\231\372+\0\231\372\200\0\231\372\221\0\231\372\205\0\231\372/\0" - "\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\0\231" - "\372\7\0\231\372\207\0\227\366\307\0\231\371\214\0\231\372\11\0\0\0\0\0\231" - "\372\16\0\231\372c\0\231\372\215\0\231\372\235\0\231\372\241\0\231\372\241" - "\0\231\372\241\0\231\372\241\0\231\372\241\0\231\372\241\0\231\372\241\0" - "\231\372\236\0\231\372\215\0\231\372I\0\231\372\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\13\0\0\0\17\0\0\0\32\0\0" - "\0\23\0\0\0\23\0\0\3\24\0\0\3\31\0\0\4""3\0\0\23>\0\0!d\0\0Vz\0\0\217\177" - "\0\0\261\202\0\0\305\213\0\0\342\221\0\0\370\241\0\0\377\241\0\0\377\240" - "\0\0\377\233\0\0\377\230\0\0\377\226\0\0\377\222\0\0\377\222\0\0\377\221" - "\2\3\377\222\0\0\377\223\0\0\377\234\0\0\377\251\0\0\377\224\0\0\336T\0\0" - """1\22\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25\0\0\0$\0\0\3]\0\0" - "?`\0\0G\32\0\0\2\0\0\0\0\0\7\13\0\0\21\33\2\0\5\10\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\7\0\0\0\26\0\0\0\24\0\0\0\34\0\0\0\37\0\0\0\37\0\0\0\34\0\0" - "\0\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0" - "\1""3\0\0\7""8\0\0\13.\0\0\11/\0\0\11.\0\0\11""7\0\0\16K\0\0)S\0\0""6e\0" - "\0`k\0\0pw\0\0\230\203\0\0\256\204\0\0\265\213\0\0\342\222\0\0\363\231\0" - "\0\376\242\0\0\377\236\0\0\377\235\0\0\377\234\0\0\377\230\0\0\377\226\0" - "\0\377\224\0\0\377\222\0\0\377\223\0\0\377\223\0\0\377\223\0\0\377\223\0" - "\0\377\223\0\0\377\224\0\0\377\232\0\0\377\233\0\0\374\203\0\0\323w\0\0\232" - "W\0\0""1\5\0\0\0\0\0\0\0\3\0\0\0\3\0\0\0\3\0\0\0!\0\0\3""8\0\0\14%\0\0\5" - "\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\32\0\0\0U\0\0(\177" - "\0\0\241\232\0\0\367\216\0\0\3245\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0(\0\0\4.\0\0\10\25\0\0\1\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0" - "\13\0\0\1\16\0\0\1\17\0\0\1\32\0\0\2""5\0\0\11]\0\0JZ\0\0Fg\0\0ek\0\0pk\0" - "\0pe\0\0aN\0\0+6\0\0\13\32\0\0\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "+\0\0\15{\0\0\247\223\0\0\324\213\0\0\307\214\0\0\310\213\0\0\310\214\0\0" - "\317\223\0\0\356\230\0\0\367\234\0\0\377\231\0\0\377\233\0\0\377\240\0\0" - "\377\240\0\0\377\236\0\0\377\232\0\0\377\227\0\0\377\225\0\0\377\223\0\0" - "\377\223\0\0\377\223\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0" - "\377\224\0\0\377\223\0\0\377\226\0\0\377\234\0\0\377\237\0\0\377\234\0\0" - "\374\227\0\0\354u\0\0\202<\0\0\22\30\0\0\5\5\0\0\0\7\0\0\1\15\0\0\0""4\0" - "\0\21@\0\0\35=\0\0\26o\0\0v\224\0\0\321q\0\0q\26\0\0\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\5\0\0\0\20\0\0\2\36\0\0\5*\0\0\7$\0\0\5\16\0\0\1\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\24\0\0\0_\0\0.\217\0\0\330\243\0\0\377\234\0\0\377" - "\226\0\0\363V\0\0""9\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0$\0\0\6y\0\0\210\213\0\0\303W\0\0""3\34\0\0\4\22\0\0\3\15\0\0" - "\2\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\11\0\0\0\27\0\0\3'\0\0\7>\0\0\24S\0\0;[\0\0I\\" - "\0\0Nn\0\0y\200\0\0\262\230\0\0\371\231\0\0\372\235\0\0\377\236\0\0\377\236" - "\0\0\377\234\0\0\376\223\0\0\354\213\0\0\310l\0\0c6\0\0\13\11\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\7\0\0\1\31\0\0\10^\0\0\\\222\0\0\365\241\0\0\377\236\0\0\377\236" - "\0\0\377\234\0\0\377\227\0\0\377\227\0\0\377\226\0\0\377\225\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223" - "\0\0\377\223\0\0\377\223\0\0\377\227\0\0\377\232\0\0\376\215\0\0\331}\0\0" - "\247_\0\0PJ\0\0\36&\0\0\5\0\0\0\0\0\0\0\0""9\0\0\17X\0\0C2\0\0\22{\0\0\227" - "\223\0\0\351\222\0\0\345\231\0\0\374\247\0\0\377{\0\0\226\31\0\0\2\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\12\0\0\0\37\0\0\5O\0\0'i\0\0j{\0\0\243\210\0\0\316\200\0\0\262" - "^\0\0E\"\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9\0\0\17\206\0\0\303\241\0\0\377" - "\224\0\0\377\224\0\0\377\231\0\0\377t\0\0\2205\0\0\10\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\0\0\6;\0\0\16\31\0\0\5\27\0\0\4\15\0\0\1\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*\0\0\11\204\0\0\277\244\0\0\377\212" - "\0\0\346~\0\0\253k\0\0sf\0\0_7\0\0\13\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\21\0\0\2L\0\0\37p\0\0\200\204" - "\0\0\277\222\0\0\344\230\0\0\367\235\0\0\375\235\0\0\375\240\0\0\377\235" - "\0\0\377\227\0\0\377\227\0\0\377\226\0\0\377\226\0\0\377\226\0\0\377\226" - "\0\0\377\227\0\0\377\236\0\0\377\235\0\0\373\201\0\0\262P\0\0&\30\0\0\1\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0%\0\0\12p\0\0vw\0\0\233\212\0\0\360\230\0\0\377\223\0\0\377\224\0\0" - "\377\223\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0" - "\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0" - "\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\224\0\0" - "\377\231\0\0\377\234\0\0\377\240\0\0\377\201\0\0\253C\0\0\24\40\0\0\4\17" - "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0l\0\0T\234\0\0\367u\0\0\251\214\0\0" - "\346\236\0\0\377\233\0\0\377\226\0\0\377\237\0\0\377{\0\0\2535\0\0\14\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0&\0\0\10]\0\0Au\0\0\224\222\0\0\352\241\0\0\377\241\0\0\377\234\0\0\377" - "\240\0\0\377\231\0\0\362b\0\0J\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0^\0\0?\232\0\0\375" - "\227\0\0\377\223\0\0\377\223\0\0\377\226\0\0\377\230\0\0\371d\0\0V\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\0\0\7u\0\0\203\212\0\0\323o\0\0\213q" - "\0\0\213g\0\0W'\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0A\0\0\24\212\0\0\332" - "\233\0\0\377\226\0\0\377\237\0\0\377\241\0\0\377\243\0\0\374_\0\0I\7\0\0" - "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\33\0\0\5E\0\0\35^\0\0" - "El\0\0u\215\0\0\331\241\0\0\377\234\0\0\377\232\0\0\377\225\0\0\377\225\0" - "\0\377\225\0\0\377\225\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\224\0" - "\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\226\0" - "\0\377\237\0\0\377\220\0\0\333`\0\0A\30\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\0\0\12~\0\0\235\234\0\0\364" - "\231\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377" - "\224\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\223\0\0\377\222\0\0\377" - "\222\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377" - "\224\0\0\377\224\0\0\377\224\0\0\377\234\0\0\377\231\0\0\373\211\0\0\327" - "}\0\0\222J\0\0\26\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\33\0\0" - "\5w\0\0\236\242\0\0\377\230\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\223" - "\0\0\377\226\0\0\377\235\0\0\375n\0\0q\14\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\0\0\1P\0\0$|\0\0\240\233\0\0\370\241\0" - "\0\377\232\0\0\377\225\0\0\377\223\0\0\377\223\0\0\377\225\0\0\377\237\0" - "\0\377\201\0\0\304?\0\0\27\20\0\0\4\10\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\0\0\4v\0\0\224\241\0\0\377\222\0" - "\0\377\224\0\0\377\223\0\0\377\232\0\0\377\227\0\0\365V\0\0""8\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\25\0\0\3i\0\0d\233\0\0\370\237\0\0\377\233\0\0\377" - "\244\0\0\377\230\0\0\353G\0\0\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\22\0\0\0=\0\0\16x\0\0\226" - "\231\0\0\373\230\0\0\377\223\0\0\377\223\0\0\377\226\0\0\377\236\0\0\371" - "X\0\0""8\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0/\0\0\12X\0\0""5r\0\0\217" - "\215\0\0\346\237\0\0\372\241\0\0\376\235\0\0\377\224\0\0\377\223\0\0\377" - "\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377" - "\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377" - "\224\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377\240\0\0\377\230\0\0\360" - "`\0\0O\15\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2" - "\0\0\0\2\0\0\0\26\0\0\2v\0\0\213\242\0\0\377\225\0\0\377\222\0\0\377\223" - "\0\0\377\222\0\0\377\222\0\0\377\222\0\0\377\223\0\0\377\226\0\0\377\230" - "\0\0\377\232\0\0\377\240\0\0\377\241\0\0\377\240\0\0\377\227\0\0\377\222" - "\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\222\0\0\377\234\0\0\377\215" - "\0\0\347b\0\0U2\0\0\20\24\0\0\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\35\0\0\2f\0\0U\225\0\0\366\226\0\0\377\223\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\222\0\0\377\242\0\0\377\200\0\0\272\36\0" - "\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\0N\0\0&\216" - "\0\0\333\243\0\0\377\226\0\0\377\222\0\0\377\223\0\0\377\223\0\0\377\224" - "\0\0\377\224\0\0\377\223\0\0\377\225\0\0\377\226\0\0\376\206\0\0\314U\0\0" - "C\16\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0" - "\0K\0\0#\222\0\0\352\235\0\0\377\222\0\0\377\224\0\0\377\224\0\0\377\236" - "\0\0\376y\0\0\225*\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0I\0\0\34\221\0\0" - "\340\237\0\0\377\221\0\0\377\222\0\0\377\233\0\0\377\211\0\0\341<\0\0\26" - "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0R\0\0\33\201\0\0\254\240\0\0\376\230\0\0\377\223\0\0\377" - "\224\0\0\377\223\0\0\377\233\0\0\377\223\0\0\351F\0\0\27\0\0\0\0\0\0\0\0" - "\17\0\0\0@\0\0\22k\0\0]\202\0\0\272\227\0\0\372\237\0\0\377\232\0\0\377\226" - "\0\0\377\222\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\221\0\0\377\237\0\0\377\217\0\0\333E\0\0" - "\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0@\0\0\27{\0\0\310\234\0\0\377\233\0\0\377\231\0\0\377\234\0\0\377\242\0" - "\0\377\243\0\0\377\241\0\0\377\237\0\0\377\237\0\0\377\230\0\0\377\224\0" - "\0\371\205\0\0\323\201\0\0\303z\0\0\252\207\0\0\341\232\0\0\377\224\0\0\377" - "\224\0\0\377\223\0\0\377\225\0\0\377\244\0\0\377v\0\0\226\22\0\0\3\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0R\0\0+\224\0\0" - "\346\237\0\0\377\222\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0" - "\377\224\0\0\377\223\0\0\377\240\0\0\377w\0\0\237\25\0\0\5\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0:\0\0\16\177\0\0\255\241\0\0\377\223\0" - "\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0" - "\0\377\224\0\0\377\230\0\0\377\237\0\0\377\267\0\0\377t\0\0y\10\0\0\1\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0.\0\0\7z\0\0\236\236" - "\0\0\376\225\0\0\377\223\0\0\377\223\0\0\377\231\0\0\377\230\0\0\361Q\0\0" - ",\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\23\0\0\2m\0\0q\241\0\0\376\225\0\0\377" - "\223\0\0\377\223\0\0\377\226\0\0\377\223\0\0\371{\0\0\222)\0\0\10\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0C\0\0\24" - "\205\0\0\301\246\0\0\377\230\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377" - "\223\0\0\377\233\0\0\377\203\0\0\3103\0\0\13\0\0\0\0\15\0\0\1^\0\0=\211\0" - "\0\313\237\0\0\375\241\0\0\377\231\0\0\377\223\0\0\377\223\0\0\377\223\0" - "\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0" - "\0\377\224\0\0\377\223\0\0\377\223\0\0\377\222\0\0\377\222\0\0\377\222\0" - "\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0" - "\0\377\224\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377\244\0\0\376j\0\0g" - "\21\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0" - ".\0\0\11R\0\0:\211\0\0\323\230\0\0\363\220\0\0\357\202\0\0\317x\0\0\247x" - "\0\0\243o\0\0\206h\0\0oc\0\0bR\0\0""4L\0\0)-\0\0\17\"\0\0\12\33\0\0\4v\0" - "\0\211\237\0\0\377\225\0\0\377\223\0\0\377\223\0\0\377\230\0\0\377\233\0" - "\0\376c\0\0Y\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\"\0\0\6~\0\0\252\237\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\237\0\0\377p\0\0" - "\203\7\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\0\0\0?\0\0\16|\0\0\235\234" - "\0\0\375\226\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223" - "\0\0\377\224\0\0\377\233\0\0\377\237\0\0\374\234\0\0\371\213\0\0\341{\0\0" - "\241C\0\0\"\3\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\0" - "\0\1_\0\0;\235\0\0\367\226\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\240" - "\0\0\376x\0\0\220%\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0G\0\0\32\214\0\0" - "\330\236\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\235\0\0" - "\377\221\0\0\3223\0\0\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\20\0\0\0P\0\0\40\200\0\0\272\235\0\0\377\227\0\0\377\223\0\0\377" - "\223\0\0\377\224\0\0\377\224\0\0\377\222\0\0\377\241\0\0\377r\0\0\214\31" - "\0\0\5\0\0\0\0""1\0\0\15\205\0\0\311\250\0\0\377\227\0\0\377\223\0\0\377" - "\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377" - "\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\227\0\0\377" - "\233\0\0\377\241\0\0\377\242\0\0\377\241\0\0\377\231\0\0\377\223\0\0\377" - "\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377" - "\224\0\0\377\222\0\0\377\235\0\0\377\204\0\0\3105\0\0\14\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\2\0\0\0\12\0\0\1J\0\0\36" - "Q\0\0'I\0\0%4\0\0\20\34\0\0\7\32\0\0\7\20\0\0\3\7\0\0\2\6\0\0\1\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0&\0\0\11\201\0\0\271\234\0\0\377\224\0\0\377\223\0" - "\0\377\223\0\0\377\232\0\0\377\210\0\0\345E\0\0\40\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0H\0\0\37\227\0\0\360\233\0\0\377" - "\223\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377" - "\224\0\0\377\223\0\0\377\237\0\0\377p\0\0{\5\0\0\1\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0""2\0\0\12\177\0\0\235\240\0\0\377\227\0\0\377\223\0\0\377\224" - "\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377\232\0\0\377\237\0\0\374\200" - "\0\0\270d\0\0_Z\0\0?@\0\0\32\34\0\0\6\6\0\0\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0%\0\0\5\200\0\0\257\236\0\0\377\223\0\0\377\224" - "\0\0\377\223\0\0\377\232\0\0\377\215\0\0\327H\0\0\26\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0""2\0\0\7|\0\0\236\233\0\0\377\225\0\0\377\223\0\0\377\224\0" - "\0\377\224\0\0\377\224\0\0\377\237\0\0\375q\0\0z\31\0\0\3\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0=\0\0\21\203\0\0\300\243\0\0\377" - "\234\0\0\377\232\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377" - "\223\0\0\377\237\0\0\375e\0\0a\12\0\0\2C\0\0\24q\0\0\204\231\0\0\375\231" - "\0\0\377\222\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\225" - "\0\0\377\236\0\0\377\240\0\0\375\205\0\0\313r\0\0\213q\0\0\211|\0\0\254\220" - "\0\0\345\237\0\0\375\233\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\232\0\0\377\216\0\0\346C\0\0" - "\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\37\216\0\0\347\234\0\0\377" - "\223\0\0\377\224\0\0\377\223\0\0\377\237\0\0\377\204\0\0\313/\0\0\17\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\0\0\2o\0\0y\240\0" - "\0\377\224\0\0\377\230\0\0\377\234\0\0\377\231\0\0\377\225\0\0\377\223\0" - "\0\377\224\0\0\377\223\0\0\377\227\0\0\377\230\0\0\377`\0\0S\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\33\0\0\1h\0\0S\235\0\0\372\233\0\0\377\223\0\0\377\223" - "\0\0\377\223\0\0\377\223\0\0\377\232\0\0\377\233\0\0\376\214\0\0\324o\0\0" - "k9\0\0\14\13\0\0\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0>\0\0\23\223\0\0\344\233\0\0\377\223\0" - "\0\377\223\0\0\377\230\0\0\377\231\0\0\371c\0\0U\22\0\0\1\0\0\0\0\0\0\0\0" - "\0\0\0\0\17\0\0\1b\0\0I\224\0\0\361\227\0\0\377\223\0\0\377\224\0\0\377\224" - "\0\0\377\223\0\0\377\234\0\0\377\210\0\0\321E\0\0\31\3\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\0\0\13w\0\0\222\235\0\0\376\242\0" - "\0\377\207\0\0\325\203\0\0\321\222\0\0\376\224\0\0\377\224\0\0\377\224\0" - "\0\377\223\0\0\377\242\0\0\373b\0\0MN\0\0\36\221\0\0\314\240\0\0\375\230" - "\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\223" - "\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\226" - "\0\0\377\230\0\0\377z\0\0\261`\0\0K;\0\0\20\27\0\0\4\26\0\0\4#\0\0\7F\0\0" - "\26q\0\0v\221\0\0\344\230\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\224" - "\0\0\377\224\0\0\377\223\0\0\377\232\0\0\377\230\0\0\361Q\0\0'\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0[\0\0E\223\0\0\373\230\0\0\377\223\0\0\377" - "\224\0\0\377\224\0\0\377\237\0\0\377z\0\0\232\33\0\0\4\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\0F\0\0\30\207\0\0\316\232\0\0\377\227" - "\0\0\377\230\0\0\373}\0\0\250w\0\0\267\230\0\0\377\226\0\0\377\223\0\0\377" - "\223\0\0\377\230\0\0\377\230\0\0\377_\0\0E\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0" - "\0Z\0\0""1\215\0\0\340\232\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\226" - "\0\0\377\235\0\0\377\225\0\0\363v\0\0\211>\0\0\21\22\0\0\2\2\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\27\0\0\1g\0\0]\235\0\0\373\225\0\0\377\223\0\0\377\222\0\0\377" - "\233\0\0\377\215\0\0\341A\0\0\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\31\0\0\5" - "\203\0\0\267\241\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377" - "\224\0\0\377\241\0\0\374i\0\0Y\24\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\31\0\0\3p\0\0p\244\0\0\375\241\0\0\377\223\0\0\353U\0\0%\\" - "\0\0F\227\0\0\373\225\0\0\377\224\0\0\377\223\0\0\377\231\0\0\377\232\0\0" - "\365Q\0\0,d\0\0U\250\0\0\375\233\0\0\377\223\0\0\377\223\0\0\377\223\0\0" - "\377\224\0\0\377\223\0\0\377\225\0\0\377\225\0\0\377\223\0\0\377\224\0\0" - "\377\224\0\0\377\224\0\0\377\223\0\0\377\237\0\0\377\221\0\0\354?\0\0\33" - "\13\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25\0\0\2X\0\0/\211\0\0" - "\331\231\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0" - "\377\232\0\0\377\233\0\0\365T\0\0""1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\0" - "\0\1o\0\0}\234\0\0\377\225\0\0\377\223\0\0\377\223\0\0\377\226\0\0\377\240" - "\0\0\377q\0\0q\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""0" - "\0\0\12|\0\0\245\232\0\0\376\224\0\0\377\237\0\0\377\201\0\0\2607\0\0\11" - "a\0\0Q\234\0\0\377\230\0\0\377\223\0\0\377\223\0\0\377\230\0\0\377\231\0" - "\0\377`\0\0O\0\0\0\0\0\0\0\0\0\0\0\0,\0\0\13\205\0\0\301\241\0\0\377\222" - "\0\0\377\224\0\0\377\223\0\0\377\230\0\0\377\240\0\0\377\212\0\0\323`\0\0" - "G(\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\0\0\0G\0\0\31\212\0\0\323\232" - "\0\0\377\223\0\0\377\223\0\0\377\223\0\0\377\244\0\0\377~\0\0\261&\0\0\11" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\0\0\6|\0\0\261\233\0\0\377\224\0\0\377" - "\223\0\0\377\224\0\0\377\223\0\0\377\234\0\0\377\206\0\0\313?\0\0\21\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\0\0\0X\0\0""1\220\0\0\350" - "\237\0\0\377\222\0\0\362`\0\0K\34\0\0\2q\0\0z\236\0\0\377\225\0\0\377\224" - "\0\0\377\223\0\0\377\231\0\0\377\230\0\0\363N\0\0\"=\0\0\23m\0\0i\206\0\0" - "\330\246\0\0\377\231\0\0\377\223\0\0\377\222\0\0\377\231\0\0\377\240\0\0" - "\377\230\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\231\0\0" - "\377\243\0\0\376~\0\0\237\33\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\2\0\0\0\30\0\0\0o\0\0q\233\0\0\377\226\0\0\377\223\0\0\377\224" - "\0\0\377\224\0\0\377\223\0\0\377\232\0\0\377\214\0\0\333?\0\0\22\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\40\0\0\7\200\0\0\264\237\0\0\377\222\0\0\377\224" - "\0\0\377\223\0\0\377\232\0\0\377\223\0\0\366W\0\0""7\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0j\0\0Z\236\0\0\374\227\0\0\377\233\0" - "\0\377\232\0\0\366_\0\0@\0\0\0\0`\0\0T\234\0\0\377\230\0\0\377\223\0\0\377" - "\223\0\0\377\231\0\0\377\220\0\0\365V\0\0""1\0\0\0\0\0\0\0\0\25\0\0\1_\0" - "\0G\233\0\0\373\226\0\0\377\223\0\0\377\223\0\0\377\230\0\0\377\241\0\0\376" - "~\0\0\256@\0\0\24\17\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\0\0" - "\1n\0\0w\236\0\0\377\225\0\0\377\223\0\0\377\222\0\0\377\233\0\0\377\233" - "\0\0\373Z\0\0A\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\23\0\0\1h\0\0_\230\0\0\373" - "\227\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\225\0\0\377\237\0\0\377" - "c\0\0W\15\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0""8\0\0\16" - "\202\0\0\274\244\0\0\377\234\0\0\376q\0\0\200\36\0\0\3:\0\0\13\210\0\0\306" - "\232\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\232\0\0\377\220\0\0\347" - "I\0\0\35\0\0\0\0\11\0\0\1]\0\0G\205\0\0\274\217\0\0\351\243\0\0\377\237\0" - "\0\377\217\0\0\356w\0\0\225v\0\0\263\232\0\0\377\223\0\0\377\223\0\0\377" - "\227\0\0\377\221\0\0\356l\0\0g:\0\0\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\0\1y\0\0\222\237\0\0\377\225\0\0\377" - "\223\0\0\377\224\0\0\377\224\0\0\377\222\0\0\377\240\0\0\377x\0\0\241$\0" - "\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0L\0\0\"\214\0\0\346\234\0\0\377\223\0" - "\0\377\224\0\0\377\223\0\0\377\235\0\0\377\206\0\0\317,\0\0\16\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0C\0\0\25\213\0\0\325\237\0\0\377\224" - "\0\0\377\240\0\0\377{\0\0\227)\0\0\5\0\0\0\0a\0\0R\234\0\0\377\230\0\0\377" - "\223\0\0\377\223\0\0\377\235\0\0\377\205\0\0\3247\0\0\24\0\0\0\0\2\0\0\0" - "F\0\0\32\210\0\0\317\234\0\0\377\222\0\0\377\223\0\0\377\227\0\0\377\233" - "\0\0\374z\0\0\226G\0\0\24\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0.\0\0\15\207\0\0\315\234\0\0\377\224\0\0\377\223\0\0\377\225\0" - "\0\377\236\0\0\377w\0\0\227!\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0/\0\0\16" - "\211\0\0\315\242\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377" - "\235\0\0\377\206\0\0\320:\0\0\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0?\0\0\22{\0\0\233\233\0\0\374\241\0\0\377\207\0\0\314<\0\0\17\0\0" - "\0\0I\0\0&\220\0\0\357\227\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\240" - "\0\0\377w\0\0\246\35\0\0\7\0\0\0\0\4\0\0\0\21\0\0\4\40\0\0\5^\0\0E\202\0" - "\0\275{\0\0\237]\0\0""9\"\0\0\10s\0\0\223\236\0\0\377\223\0\0\377\223\0\0" - "\377\233\0\0\377u\0\0\220\27\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0C\0\0\33\213\0\0\341\235\0\0\377\224\0" - "\0\377\223\0\0\377\224\0\0\377\223\0\0\377\225\0\0\377\235\0\0\373`\0\0J" - "\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0k\0\0\\\242\0\0\377\226\0\0\377\223" - "\0\0\377\224\0\0\377\224\0\0\377\240\0\0\377~\0\0\241\30\0\0\3\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\31\0\0\2p\0\0w\240\0\0\377\227\0\0\377\232" - "\0\0\377\224\0\0\342N\0\0\35\15\0\0\0\0\0\0\0a\0\0R\234\0\0\377\230\0\0\377" - "\223\0\0\377\223\0\0\377\237\0\0\377\206\0\0\3201\0\0\21\0\0\0\0\21\0\0\2" - "j\0\0i\242\0\0\377\225\0\0\377\223\0\0\377\223\0\0\377\235\0\0\376}\0\0\252" - "2\0\0\13\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0" - "V\0\0A\225\0\0\374\230\0\0\377\223\0\0\377\223\0\0\377\236\0\0\377\212\0" - "\0\324F\0\0\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""3\0\0\23\205\0\0" - "\325\234\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\226\0\0\377\232\0\0" - "\374i\0\0X\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40\0\0\2q\0\0" - "|\243\0\0\377\241\0\0\377\221\0\0\344[\0\0/-\0\0\6C\0\0\26\\\0\0Z\222\0\0" - "\370\226\0\0\377\223\0\0\377\224\0\0\377\222\0\0\377\243\0\0\377y\0\0\246" - "\32\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\1\"\0\0\12\34\0\0\6\17\0" - "\0\0P\0\0%\225\0\0\356\231\0\0\377\222\0\0\377\230\0\0\377\231\0\0\364U\0" - "\0""0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0.\0\0\6w\0\0\221\233\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377\223" - "\0\0\377\225\0\0\377\245\0\0\377\203\0\0\3001\0\0\16\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\22\0\0\3w\0\0\222\244\0\0\377\223\0\0\377\223\0\0\377\224\0" - "\0\377\226\0\0\377\235\0\0\377q\0\0t\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0S\0\0%\212\0\0\337\233\0\0\377\224\0\0\377\237\0\0\377q\0\0u" - "\35\0\0\2\0\0\0\0\0\0\0\0`\0\0R\234\0\0\377\230\0\0\377\223\0\0\377\223\0" - "\0\377\237\0\0\377\206\0\0\3212\0\0\21\0\0\0\0""1\0\0\15\205\0\0\311\235" - "\0\0\377\223\0\0\377\222\0\0\377\236\0\0\377\213\0\0\326K\0\0\35\6\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\22\0\0\1""9\0\0\22)\0\0\5\5\0\0\0\6\0\0\1\2\0\0\0\34\0\0\4w\0\0" - "\227\237\0\0\377\225\0\0\377\223\0\0\377\226\0\0\377\233\0\0\376p\0\0i\20" - "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\1c\0\0P\224\0\0\367\230\0\0" - "\377\223\0\0\377\224\0\0\377\223\0\0\377\236\0\0\377\212\0\0\330B\0\0\27" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\31\0\0\2h\0\0V\223\0\0\362\233\0" - "\0\377\230\0\0\373k\0\0b@\0\0\22~\0\0\237\220\0\0\343\214\0\0\363\223\0\0" - "\377\224\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\237\0\0\377p\0\0\211" - "\24\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\0" - "\2e\0\0[\236\0\0\373\224\0\0\377\222\0\0\377\241\0\0\377\210\0\0\3137\0\0" - "\15\0\0\0\0\0\0\0\0\4\0\0\0\6\0\0\1\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\33\0" - "\0\4o\0\0q\231\0\0\371\231\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\225" - "\0\0\377\237\0\0\377\216\0\0\337X\0\0""0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0+\0\0\15\204\0\0\321\240\0\0\377\222\0\0\377\224\0\0\377\223\0\0" - "\377\232\0\0\377\222\0\0\361K\0\0'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0;\0\0\20\206\0\0\301\237\0\0\377\222\0\0\377\233\0\0\377\224\0\0\342E\0" - "\0\30\3\0\0\0\0\0\0\0\22\0\0\1c\0\0^\227\0\0\377\227\0\0\377\223\0\0\377" - "\223\0\0\377\237\0\0\377\206\0\0\3212\0\0\21\10\0\0\0Q\0\0""1\234\0\0\371" - "\225\0\0\377\223\0\0\377\230\0\0\377\236\0\0\375g\0\0\\\20\0\0\1\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\"\0\0\4Y\0\0""6\213\0\0\320l\0\0gS\0\0""6.\0\0\23\14\0\0\0=\0\0\31\213\0" - "\0\336\236\0\0\377\223\0\0\377\223\0\0\377\235\0\0\377\215\0\0\326:\0\0\21" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!\0\0\10\177\0\0\262\241\0\0\377" - "\223\0\0\377\223\0\0\377\223\0\0\377\226\0\0\377\234\0\0\377p\0\0z\27\0\0" - "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0Y\0\0.\222\0\0\347\235\0\0\377" - "\231\0\0\377\217\0\0\356]\0\0g~\0\0\266\237\0\0\376\233\0\0\377\225\0\0\377" - "\223\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\227\0\0\377\240\0\0\377" - "a\0\0Q\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0D\0" - "\0\27\213\0\0\325\232\0\0\377\223\0\0\377\224\0\0\377\232\0\0\366p\0\0u\30" - "\0\0\4\0\0\0\0\0\0\0\0""9\0\0\20d\0\0KD\0\0\20\0\0\0\0\0\0\0\0\11\0\0\0Z" - "\0\0:\230\0\0\363\236\0\0\377\223\0\0\377\223\0\0\377\223\0\0\377\224\0\0" - "\377\235\0\0\377\223\0\0\353^\0\0=\33\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0J\0\0%\223\0\0\364\232\0\0\377\223\0\0\377\224\0\0\377\224\0\0" - "\377\240\0\0\377\213\0\0\311-\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0Y\0\0;\237\0\0\374\231\0\0\377\223\0\0\377\242\0\0\377p\0\0x\31\0\0\2" - "\16\0\0\1D\0\0\26c\0\0N\206\0\0\325\235\0\0\377\224\0\0\377\223\0\0\377\223" - "\0\0\377\236\0\0\377\205\0\0\3201\0\0\21\21\0\0\2b\0\0]\237\0\0\376\224\0" - "\0\377\223\0\0\377\241\0\0\377\204\0\0\3023\0\0\15\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11\0\0\0\36\0\0\7D\0\0\27l\0\0" - "k\225\0\0\360\240\0\0\377\230\0\0\371\233\0\0\367]\0\0O\23\0\0\1X\0\0""7" - "\226\0\0\370\233\0\0\377\222\0\0\377\225\0\0\377\241\0\0\377~\0\0\233\22" - "\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""7\0\0\24\206\0\0\325\237" - "\0\0\377\222\0\0\377\224\0\0\377\223\0\0\377\234\0\0\377\222\0\0\354P\0\0" - ")\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0.\0\0\10}\0\0\245\242\0\0\377\225" - "\0\0\377\223\0\0\377\224\0\0\377\230\0\0\376\231\0\0\377\223\0\0\377\224" - "\0\0\377\226\0\0\377\225\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\227" - "\0\0\377\240\0\0\377_\0\0O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\14\0\0\1`\0\0N\240\0\0\375\224\0\0\377\223\0\0\377\240\0\0\377" - "p\0\0\204&\0\0\6\2\0\0\0\0\0\0\0\0\0\0\0Z\0\0""7\246\0\0\370\210\0\0\236" - "7\0\0\20'\0\0\12A\0\0\32\204\0\0\307\241\0\0\377\223\0\0\377\223\0\0\377" - "\223\0\0\377\227\0\0\377\242\0\0\377\216\0\0\342a\0\0D\35\0\0\2\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\0\0N\241\0\0\375\226\0\0\377\223" - "\0\0\377\224\0\0\377\224\0\0\377\240\0\0\377\177\0\0\243!\0\0\3\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\24\0\0\3e\0\0_\236\0\0\375\225\0\0\377\233\0\0\377" - "\216\0\0\340N\0\0'0\0\0\20[\0\0B\215\0\0\332\236\0\0\373\232\0\0\377\225" - "\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\234\0\0\377}\0\0\272&\0\0\13" - "\37\0\0\4s\0\0\214\237\0\0\377\224\0\0\377\231\0\0\377\235\0\0\375g\0\0P" - "\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0,\0\0\12" - "a\0\0Kx\0\0\244\215\0\0\340\235\0\0\374\227\0\0\377\223\0\0\377\233\0\0\377" - "\233\0\0\371Y\0\0A\32\0\0\2n\0\0t\233\0\0\376\226\0\0\377\223\0\0\377\233" - "\0\0\377\231\0\0\366]\0\0:\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0[\0\0C\232\0\0\375\230\0\0\377\223\0\0\377\224\0\0\377\225\0\0\377\241" - "\0\0\377}\0\0\233\32\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\1f\0\0Z" - "\234\0\0\374\227\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377" - "\223\0\0\377\227\0\0\377\240\0\0\377\240\0\0\377\235\0\0\377\223\0\0\377" - "\223\0\0\377\223\0\0\377\227\0\0\377\241\0\0\377b\0\0Q\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\0\0\4v\0\0\230\240\0\0\377\223" - "\0\0\377\230\0\0\377\234\0\0\377]\0\0E\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""4" - "\0\0\7x\0\0e\220\0\0\352\204\0\0\320\200\0\0\306\177\0\0\313\232\0\0\376" - "\227\0\0\377\222\0\0\377\225\0\0\377\234\0\0\377\235\0\0\377\214\0\0\315" - "`\0\0:\33\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\0\0\5t" - "\0\0\226\241\0\0\377\222\0\0\377\224\0\0\377\223\0\0\377\231\0\0\377\226" - "\0\0\364X\0\0:\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0T\0\0""0\222\0\0\352" - "\227\0\0\377\225\0\0\377\231\0\0\374]\0\0T_\0\0O\211\0\0\335\226\0\0\372" - "\240\0\0\377\232\0\0\377\230\0\0\377\224\0\0\377\223\0\0\377\224\0\0\377" - "\223\0\0\377\236\0\0\377z\0\0\242\32\0\0\4-\0\0\11\202\0\0\304\233\0\0\377" - "\223\0\0\377\236\0\0\377\206\0\0\322:\0\0\23\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0=\0\0\16i\0\0V|\0\0\265\236\0\0\374\241\0\0\377\232\0" - "\0\377\226\0\0\377\223\0\0\377\223\0\0\377\230\0\0\377\222\0\0\341A\0\0\27" - "U\0\0/\223\0\0\362\231\0\0\377\223\0\0\377\224\0\0\377\234\0\0\373x\0\0}" - "&\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\0\2j\0\0p\237\0\0\377" - "\225\0\0\377\223\0\0\377\223\0\0\377\232\0\0\377\230\0\0\365[\0\0?\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0A\0\0\24\213\0\0\323\237\0\0\377\222\0" - "\0\377\224\0\0\377\224\0\0\377\223\0\0\377\230\0\0\377\241\0\0\377\231\0" - "\0\372\203\0\0\314s\0\0\200{\0\0\264\227\0\0\377\224\0\0\377\223\0\0\377" - "\230\0\0\377\233\0\0\376Z\0\0?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\12\0\0\0G\0\0\36\217\0\0\343\231\0\0\377\223\0\0\377\234\0\0\377\201" - "\0\0\3166\0\0\21\0\0\0\0\0\0\0\0\0\0\0\0\22\0\0\1.\0\0\15""1\0\0\15s\0\0" - "\224\243\0\0\377\242\0\0\377\234\0\0\377\227\0\0\377\222\0\0\377\225\0\0" - "\377\240\0\0\377\221\0\0\347s\0\0\1779\0\0\20\12\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\0\0\33\216\0\0\343\232\0\0\377\223" - "\0\0\377\224\0\0\377\224\0\0\377\234\0\0\377\206\0\0\3000\0\0\11\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\2m\0\0x\240\0\0\377\222\0\0\377\226\0\0\377" - "\222\0\0\375n\0\0\224\215\0\0\340\237\0\0\377\237\0\0\377\240\0\0\377\231" - "\0\0\375\220\0\0\372\225\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\236" - "\0\0\377z\0\0\244\30\0\0\5+\0\0\11\200\0\0\301\234\0\0\377\223\0\0\377\235" - "\0\0\377z\0\0\246\32\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0=\0\0" - "\20w\0\0\232\244\0\0\376\254\0\0\377\245\0\0\377\241\0\0\377\231\0\0\377" - "\222\0\0\377\223\0\0\377\223\0\0\377\234\0\0\377\210\0\0\303)\0\0\7i\0\0" - "d\245\0\0\377\227\0\0\377\223\0\0\377\231\0\0\377\215\0\0\317:\0\0\15\4\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""5\0\0\20\206\0\0\324\236\0" - "\0\377\222\0\0\377\224\0\0\377\224\0\0\377\236\0\0\377\207\0\0\2714\0\0\10" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\0\0\5q\0\0~\237\0\0\376\225\0\0\377\223" - "\0\0\377\222\0\0\377\222\0\0\377\232\0\0\377\236\0\0\377\213\0\0\327j\0\0" - "b5\0\0\21\17\0\0\1^\0\0J\235\0\0\374\225\0\0\377\222\0\0\377\234\0\0\377" - "\217\0\0\362E\0\0\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\27\0" - "\0\1h\0\0f\240\0\0\376\225\0\0\377\222\0\0\377\237\0\0\377w\0\0\223\23\0" - "\0\3\0\0\0\0\0\0\0\0\21\0\0\2`\0\0K\212\0\0\314\206\0\0\317\210\0\0\354\230" - "\0\0\377\231\0\0\377\227\0\0\377\222\0\0\377\226\0\0\377\225\0\0\375|\0\0" - "\257U\0\0,\33\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\7\0\0\0]\0\0B\235\0\0\371\225\0\0\377\223\0\0\377\224\0\0\377" - "\224\0\0\377\237\0\0\377s\0\0\213\34\0\0\3\0\0\0\0\0\0\0\0\2\0\0\0\23\0\0" - "\1I\0\0\35\216\0\0\336\233\0\0\377\223\0\0\377\222\0\0\377\227\0\0\377\240" - "\0\0\377\246\0\0\377\235\0\0\374\222\0\0\356|\0\0\256\\\0\0?g\0\0z\232\0" - "\0\377\227\0\0\377\223\0\0\377\223\0\0\377\236\0\0\377z\0\0\244\30\0\0\5" - "+\0\0\11\200\0\0\301\233\0\0\377\225\0\0\377\242\0\0\377z\0\0\233\30\0\0" - "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0J\0\0\25\212\0\0\277\252\0\0\375\230\0" - "\0\356~\0\0\270~\0\0\300v\0\0\234z\0\0\306\227\0\0\377\224\0\0\377\224\0" - "\0\377\237\0\0\377|\0\0\240\31\0\0\4n\0\0~\241\0\0\377\224\0\0\377\224\0" - "\0\377\233\0\0\373j\0\0h\25\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\7\0\0\0U\0\0.\233\0\0\366\233\0\0\377\223\0\0\377\224\0\0\377\225\0\0\377" - "\233\0\0\372c\0\0Q\24\0\0\1\0\0\0\0\0\0\0\0\35\0\0\1M\0\0\33\200\0\0\243" - "\224\0\0\371\226\0\0\377\222\0\0\377\227\0\0\377\240\0\0\377\243\0\0\377" - "\222\0\0\350g\0\0a@\0\0\26\23\0\0\1\0\0\0\0\22\0\0\1^\0\0Q\234\0\0\374\225" - "\0\0\377\222\0\0\377\236\0\0\377\215\0\0\355?\0\0\31\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\0\0\5\204\0\0\256\237\0\0\377\224\0\0\377\225" - "\0\0\377\234\0\0\377m\0\0o\22\0\0\1'\0\0\11;\0\0\22\"\0\0\13w\0\0\240\252" - "\0\0\376\243\0\0\377\230\0\0\377y\0\0\334\214\0\0\346\234\0\0\373\227\0\0" - "\377\232\0\0\377\211\0\0\353E\0\0\37\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25\0\0\3n\0\0y\240\0\0\377\222" - "\0\0\377\224\0\0\377\223\0\0\377\232\0\0\377\226\0\0\362P\0\0/\14\0\0\1\2" - "\0\0\0\37\0\0\3A\0\0\22V\0\0:}\0\0\265\235\0\0\377\225\0\0\377\223\0\0\377" - "\231\0\0\377\232\0\0\373\220\0\0\335}\0\0\257e\0\0XG\0\0\37%\0\0\11\3\0\0" - "\0N\0\0""0\225\0\0\366\231\0\0\377\223\0\0\377\223\0\0\377\236\0\0\377z\0" - "\0\244\30\0\0\5+\0\0\11\200\0\0\301\234\0\0\377\224\0\0\377\240\0\0\377z" - "\0\0\227\33\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0;\0\0\15{\0\0\256\227\0\0\344w\0" - "\0zL\0\0#\"\0\0\11#\0\0\12\24\0\0\7n\0\0\203\236\0\0\377\223\0\0\377\224" - "\0\0\377\240\0\0\377i\0\0g\32\0\0\6z\0\0\252\241\0\0\377\222\0\0\377\232" - "\0\0\377\213\0\0\327>\0\0\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0""7\0\0\10|\0\0\235\241\0\0\376\223\0\0\377\223\0\0\377\223\0\0\377\233" - "\0\0\377\223\0\0\335=\0\0\21\0\0\0\0\5\0\0\0+\0\0\5h\0\0R\214\0\0\322\240" - "\0\0\377\227\0\0\377\222\0\0\377\230\0\0\377\223\0\0\367\206\0\0\311}\0\0" - "\256Z\0\0""5\25\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\1^\0\0P\234\0\0\374" - "\225\0\0\377\222\0\0\377\236\0\0\377\216\0\0\357@\0\0\33\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0J\0\0%\217\0\0\346\231\0\0\377\222\0\0\377" - "\234\0\0\377\221\0\0\360Q\0\0.\33\0\0\2l\0\0e\220\0\0\327v\0\0\217M\0\0K" - "p\0\0\247\230\0\0\364\244\0\0\377\206\0\0\314@\0\0\40p\0\0l\240\0\0\367\232" - "\0\0\377\226\0\0\375|\0\0\240O\0\0\34\17\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0>\0\0\23\211\0\0\326\233\0\0\377\223" - "\0\0\377\224\0\0\377\223\0\0\377\234\0\0\377\210\0\0\3300\0\0\16\0\0\0\0" - "\0\0\0\0d\0\0F\227\0\0\340\227\0\0\367\232\0\0\377\224\0\0\377\225\0\0\377" - "\237\0\0\377\224\0\0\346k\0\0gA\0\0\23&\0\0\10\17\0\0\1\0\0\0\0\0\0\0\0\0" - "\0\0\0@\0\0\40\221\0\0\360\232\0\0\377\223\0\0\377\223\0\0\377\236\0\0\377" - "z\0\0\244\31\0\0\5+\0\0\11\201\0\0\301\234\0\0\377\223\0\0\377\236\0\0\377" - "{\0\0\244\32\0\0\5\0\0\0\0\0\0\0\0\16\0\0\3Q\0\0Ci\0\0}M\0\0\30\27\0\0\3" - "\0\0\0\0\0\0\0\0\0\0\0\0,\0\0\14\202\0\0\305\240\0\0\377\222\0\0\377\232" - "\0\0\377\225\0\0\354J\0\0\35G\0\0\33\217\0\0\347\233\0\0\377\222\0\0\377" - "\241\0\0\377t\0\0\213\30\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%\0" - "\0\4n\0\0d\236\0\0\372\225\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\240" - "\0\0\377u\0\0\215\35\0\0\4\26\0\0\3@\0\0\23|\0\0\223\236\0\0\372\240\0\0" - "\377\225\0\0\377\223\0\0\377\230\0\0\377\230\0\0\372m\0\0h1\0\0\14%\0\0\10" - "\14\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\1^\0\0O\234\0\0\374\225" - "\0\0\377\222\0\0\377\236\0\0\377\216\0\0\356?\0\0\32\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0f\0\0_\234\0\0\376\227\0\0\377\222\0\0\377\237" - "\0\0\377\206\0\0\306)\0\0\13$\0\0\2{\0\0\222\246\0\0\374\240\0\0\372\236" - "\0\0\354u\0\0\244M\0\0""6\177\0\0\244\235\0\0\367\177\0\0\2103\0\0\13w\0" - "\0u\231\0\0\365\233\0\0\377\241\0\0\377\216\0\0\314K\0\0\26\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\2d\0\0\\\237\0\0\375\224" - "\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\242\0\0\377|\0\0\253\36\0\0" - "\5\0\0\0\0\0\0\0\0\\\0\0""4\211\0\0\312\226\0\0\376\225\0\0\377\225\0\0\377" - "\236\0\0\377\200\0\0\273M\0\0\37\23\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0@\0\0\37\221\0\0\357\232\0\0\377\223\0\0\377\223\0\0\377" - "\236\0\0\377z\0\0\244\31\0\0\5+\0\0\10\201\0\0\277\233\0\0\377\223\0\0\377" - "\236\0\0\377z\0\0\243\31\0\0\5\0\0\0\0\0\0\0\0\10\0\0\0\35\0\0\4\36\0\0\4" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0M\0\0&\225\0\0\363\231\0\0\377\222" - "\0\0\377\235\0\0\377}\0\0\261$\0\0\6e\0\0V\242\0\0\375\226\0\0\377\232\0" - "\0\377\230\0\0\363Y\0\0:\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""7\0\0" - "\10q\0\0o\225\0\0\362\233\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\225" - "\0\0\377\237\0\0\373[\0\0B\11\0\0\0B\0\0#\210\0\0\327\236\0\0\375\230\0\0" - "\377\224\0\0\377\223\0\0\377\227\0\0\377\237\0\0\376x\0\0\213+\0\0\6\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25\0\0\1c\0\0\\\234" - "\0\0\375\225\0\0\377\222\0\0\377\237\0\0\377\211\0\0\3437\0\0\24\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11\0\0\0u\0\0\205\235\0\0\377\225\0\0\377" - "\225\0\0\377\244\0\0\377~\0\0\245\32\0\0\4\26\0\0\1T\0\0/w\0\0\210\222\0" - "\0\325\226\0\0\343\223\0\0\362{\0\0\237@\0\0\37x\0\0l\243\0\0\366\201\0\0" - "\220G\0\0\16_\0\0""9\213\0\0\302\227\0\0\362\237\0\0\375~\0\0\2377\0\0\12" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%\0\0\6~\0\0\250\240\0\0" - "\377\224\0\0\377\224\0\0\377\224\0\0\377\224\0\0\377\236\0\0\373e\0\0Y\16" - "\0\0\1\0\0\0\0\2\0\0\0\25\0\0\1T\0\0<\221\0\0\370\227\0\0\377\232\0\0\377" - "\224\0\0\365U\0\0""1\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0@\0\0\37\222\0\0\357\232\0\0\377\223\0\0\377\223\0\0\377\236" - "\0\0\377z\0\0\244\31\0\0\5#\0\0\3z\0\0\236\235\0\0\377\223\0\0\377\236\0" - "\0\377}\0\0\257\35\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\2e\0\0a\236\0\0\375\227\0\0\377\222\0\0\377" - "\240\0\0\377n\0\0y\36\0\0\6x\0\0\236\241\0\0\377\221\0\0\377\242\0\0\377" - "z\0\0\247)\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\0\0\5u\0\0\207\240\0\0" - "\372\234\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377\235\0\0" - "\377\221\0\0\341C\0\0\25\0\0\0\0P\0\0/\214\0\0\364\226\0\0\376\225\0\0\377" - "\224\0\0\377\225\0\0\377\241\0\0\377\204\0\0\305A\0\0\22\3\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\2n\0\0}\233\0\0\377" - "\224\0\0\377\222\0\0\377\240\0\0\377\201\0\0\302%\0\0\13\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0""0\0\0\16\212\0\0\320\240\0\0\377\223\0\0\377\225" - "\0\0\377\237\0\0\377t\0\0\201\20\0\0\1!\0\0\6T\0\0.<\0\0\22?\0\0\21N\0\0" - "$\203\0\0\301\257\0\0\376\210\0\0\267<\0\0\23u\0\0]\227\0\0\353\212\0\0\273" - "A\0\0\23""8\0\0\12T\0\0""3\221\0\0\337\251\0\0\374v\0\0\2030\0\0\10\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0T\0\0""1\225\0\0\357\231\0\0\377\223\0" - "\0\377\224\0\0\377\222\0\0\377\237\0\0\377\206\0\0\316<\0\0\22\0\0\0\0\0" - "\0\0\0\0\0\0\0#\0\0\6~\0\0\255\236\0\0\377\225\0\0\377\240\0\0\377}\0\0\243" - "'\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@" - "\0\0\37\222\0\0\357\232\0\0\377\223\0\0\377\223\0\0\377\236\0\0\377z\0\0" - "\244\31\0\0\5\26\0\0\2h\0\0m\240\0\0\377\224\0\0\377\234\0\0\377\215\0\0" - "\350L\0\0$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\30\0\0\5t\0\0\222\243\0\0\377\222\0\0\377\223\0\0\377\235\0\0" - "\373b\0\0R>\0\0\20\215\0\0\336\232\0\0\377\224\0\0\377\235\0\0\376^\0\0O" - "\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\0\0\7s\0\0\207\242\0\0\376\240\0\0\377" - "\223\0\0\377\223\0\0\377\224\0\0\377\224\0\0\377\222\0\0\377\241\0\0\377" - "t\0\0\216\34\0\0\4\11\0\0\2J\0\0""2b\0\0]{\0\0\260\241\0\0\377\225\0\0\377" - "\227\0\0\377\231\0\0\370^\0\0F\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15\0\0\1V\0\0;\231\0\0\366\225\0\0\377\222" - "\0\0\377\241\0\0\377\200\0\0\271\36\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\10\0\0\0h\0\0]\235\0\0\376\230\0\0\377\222\0\0\377\231\0\0\377\222\0\0" - "\371P\0\0""6\4\0\0\0?\0\0\31\211\0\0\327\216\0\0\316_\0\0:7\0\0\12U\0\0+" - "\215\0\0\334\254\0\0\375\211\0\0\266F\0\0\21d\0\0?\237\0\0\361\220\0\0\314" - "O\0\0\34\35\0\0\2b\0\0@\226\0\0\344\244\0\0\374q\0\0s\31\0\0\1\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\"\0\0\2t\0\0\210\236\0\0\377\224\0\0\377\223\0\0\377\223\0" - "\0\377\226\0\0\377\233\0\0\372e\0\0]\24\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0U\0" - "\0""2\223\0\0\364\232\0\0\377\231\0\0\377\232\0\0\363[\0\0""8\22\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\0\37\222" - "\0\0\357\232\0\0\377\223\0\0\377\223\0\0\377\236\0\0\377{\0\0\250\32\0\0" - "\5\15\0\0\1X\0\0E\234\0\0\374\224\0\0\377\224\0\0\377\236\0\0\377w\0\0\227" - "!\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26" - "\0\0\5r\0\0\215\242\0\0\377\222\0\0\377\227\0\0\377\226\0\0\365T\0\0""3A" - "\0\0\22\216\0\0\344\231\0\0\377\234\0\0\377\215\0\0\355@\0\0\36\0\0\0\0\0" - "\0\0\0\0\0\0\0""2\0\0\6p\0\0\201\237\0\0\373\231\0\0\371w\0\0\302\220\0\0" - "\370\224\0\0\377\224\0\0\377\223\0\0\377\226\0\0\377\230\0\0\367Z\0\0A\12" - "\0\0\0\6\0\0\1\15\0\0\2^\0\0,\216\0\0\334\235\0\0\377\224\0\0\377\232\0\0" - "\377\207\0\0\3008\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\14\0\0\1T\0\0""9\230\0\0\365\225\0\0\377\222\0\0" - "\377\241\0\0\377\200\0\0\272\36\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\35" - "\0\0\4\177\0\0\246\242\0\0\377\224\0\0\377\223\0\0\377\233\0\0\377\214\0" - "\0\341+\0\0\20\0\0\0\0\31\0\0\5W\0\0""0\177\0\0\237\232\0\0\365\206\0\0\275" - "b\0\0KS\0\0/\203\0\0\261\250\0\0\374\211\0\0\255I\0\0\27s\0\0r\254\0\0\377" - "\212\0\0\307X\0\0,\25\0\0\2e\0\0>\230\0\0\345\227\0\0\357W\0\0""4\20\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0G\0\0\35\215\0\0\335\232\0\0\377\223\0\0\377\224\0\0\377" - "\222\0\0\377\240\0\0\377~\0\0\265-\0\0\12\0\0\0\0\0\0\0\0\0\0\0\0,\0\0\7" - "}\0\0\236\236\0\0\377\224\0\0\377\234\0\0\377\200\0\0\254.\0\0\6\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0A\0\0\37" - "\222\0\0\360\232\0\0\377\223\0\0\377\225\0\0\377\233\0\0\377p\0\0\201\27" - "\0\0\2\5\0\0\0""8\0\0\20\215\0\0\332\231\0\0\377\222\0\0\377\233\0\0\377" - "\230\0\0\367\\\0\0F\31\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\33\0\0\6v\0\0\231\243\0\0\377\222\0\0\377\232\0\0\377\217\0" - "\0\354F\0\0\34B\0\0\23\215\0\0\345\232\0\0\377\236\0\0\377z\0\0\253\31\0" - "\0\7\0\0\0\0\21\0\0\0I\0\0\25|\0\0\235\232\0\0\372\235\0\0\375i\0\0|^\0\0" - "g\224\0\0\371\224\0\0\377\224\0\0\377\222\0\0\377\240\0\0\377\202\0\0\302" - "3\0\0\17\0\0\0\0\0\0\0\0C\0\0\16\210\0\0\304\243\0\0\377\223\0\0\377\224" - "\0\0\377\231\0\0\370e\0\0T\25\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\0\0\1`\0\0S\235\0\0\374\225\0\0\377" - "\222\0\0\377\241\0\0\377\201\0\0\274!\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0+\0\0\16\207\0\0\315\237\0\0\377\222\0\0\377\224\0\0\377\234\0\0\377" - "~\0\0\244\27\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\16\216\0\0\303\254\0\0\374" - "\236\0\0\363|\0\0\212A\0\0\"\200\0\0\234\253\0\0\372\210\0\0\262C\0\0!\177" - "\0\0\243\257\0\0\376\222\0\0\340_\0\0B&\0\0\3h\0\0R\235\0\0\361\217\0\0\331" - "]\0\0""0\34\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\5\0\0\0l\0\0g\240\0\0\377\227\0\0\377\223\0\0\377\223\0" - "\0\377\226\0\0\377\242\0\0\377l\0\0a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0[\0\0" - """6\226\0\0\367\232\0\0\377\231\0\0\377\225\0\0\357N\0\0&\10\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0A\0\0!" - "\222\0\0\360\232\0\0\377\223\0\0\377\227\0\0\377\233\0\0\377i\0\0b\5\0\0" - "\0\0\0\0\0\20\0\0\2n\0\0l\241\0\0\375\223\0\0\377\223\0\0\377\234\0\0\377" - "\221\0\0\340\\\0\0""8\24\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\15\0\0\1]\0\0E\226\0\0\367\227\0\0\377\231\0\0\377\220\0\0\355G\0" - "\0\32B\0\0\23\216\0\0\345\232\0\0\377\236\0\0\377r\0\0\177\3\0\0\0\32\0\0" - "\2T\0\0$\204\0\0\276\240\0\0\376\243\0\0\375z\0\0\227(\0\0\14\206\0\0\267" - "\235\0\0\377\224\0\0\377\223\0\0\377\226\0\0\377\240\0\0\377e\0\0g\11\0\0" - "\1\0\0\0\0*\0\0\6u\0\0\204\241\0\0\377\225\0\0\377\223\0\0\377\240\0\0\377" - "\211\0\0\3032\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\1_\0\0Q\235\0\0\374\225\0\0\377\225\0" - "\0\377\241\0\0\377s\0\0\177\23\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\"\0" - "\0\10\177\0\0\266\236\0\0\377\223\0\0\377\226\0\0\377\236\0\0\377m\0\0q\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\0\0\1""9\0\0\21e\0\0U\221\0\0\331\247\0" - "\0\377\210\0\0\264;\0\0\31\203\0\0\242\250\0\0\375\205\0\0\254>\0\0\40v\0" - "\0\211\237\0\0\365\236\0\0\357t\0\0l\32\0\0\4q\0\0g\256\0\0\373\237\0\0\351" - "m\0\0R%\0\0\4\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0<\0\0\16\201\0\0\271\240\0\0\377\225\0\0\377\223\0\0\377\223\0\0\377" - "\236\0\0\377\215\0\0\343J\0\0\37\0\0\0\0\0\0\0\0\0\0\0\0\35\0\0\4u\0\0\214" - "\237\0\0\377\222\0\0\377\241\0\0\377\201\0\0\262\"\0\0\6\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""1\0\0\14" - "\205\0\0\311\236\0\0\377\224\0\0\377\227\0\0\377\234\0\0\377l\0\0d\13\0\0" - "\0\0\0\0\0\0\0\0\0C\0\0\27\203\0\0\273\234\0\0\376\223\0\0\377\224\0\0\377" - "\235\0\0\377\210\0\0\324X\0\0""4'\0\0\5\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\10\0\0\0""9\0\0\26\204\0\0\333\233\0\0\377\231\0\0\377\220\0\0\355" - "G\0\0\32B\0\0\23\215\0\0\342\232\0\0\377\234\0\0\377y\0\0\255?\0\0\30e\0" - "\0V\216\0\0\335\237\0\0\377\240\0\0\376\177\0\0\234@\0\0\14C\0\0\26\220\0" - "\0\335\230\0\0\377\223\0\0\377\223\0\0\377\227\0\0\377\237\0\0\377c\0\0_" - "\22\0\0\1#\0\0\4o\0\0m\230\0\0\364\232\0\0\377\222\0\0\377\232\0\0\377\234" - "\0\0\365c\0\0G\16\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15\0\0\1J\0\0)\202\0\0\313\224\0\0\377\226" - "\0\0\377\241\0\0\377o\0\0l\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15\0\0\1c\0\0" - "M\222\0\0\360\230\0\0\377\223\0\0\377\227\0\0\377\234\0\0\375d\0\0]\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\0\0\1Q\0\0'\216\0\0\332\253" - "\0\0\373d\0\0SO\0\0\36\222\0\0\317\251\0\0\374\202\0\0\2346\0\0\14t\0\0g" - "\252\0\0\364\220\0\0\326L\0\0\35\36\0\0\5l\0\0R\225\0\0\331\240\0\0\364{" - "\0\0\223F\0\0\31\14\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40\0\0\2" - "z\0\0\210\240\0\0\376\225\0\0\377\223\0\0\377\223\0\0\377\226\0\0\377\244" - "\0\0\377x\0\0\213\31\0\0\3\0\0\0\0\0\0\0\0\6\0\0\0X\0\0""8\223\0\0\360\231" - "\0\0\377\224\0\0\377\233\0\0\367`\0\0E\13\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\0\0\1n\0\0y\231" - "\0\0\377\225\0\0\377\225\0\0\377\243\0\0\377{\0\0\232\31\0\0\3\0\0\0\0\0" - "\0\0\0\2\0\0\0N\0\0\37\221\0\0\340\241\0\0\377\223\0\0\377\223\0\0\377\233" - "\0\0\377\231\0\0\362y\0\0\224D\0\0\30\33\0\0\5\7\0\0\1\10\0\0\1\31\0\0\4" - "T\0\0,\203\0\0\272\234\0\0\375\232\0\0\377\232\0\0\377\220\0\0\355G\0\0\32" - "/\0\0\12\200\0\0\277\234\0\0\377\222\0\0\377\223\0\0\374\223\0\0\355\227" - "\0\0\372\237\0\0\377\240\0\0\377\177\0\0\2425\0\0\13\2\0\0\0A\0\0\32\217" - "\0\0\340\227\0\0\377\224\0\0\377\224\0\0\377\223\0\0\377\231\0\0\377\217" - "\0\0\340R\0\0'S\0\0)\230\0\0\354\232\0\0\377\223\0\0\377\223\0\0\377\242" - "\0\0\377z\0\0\235)\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\0\0\2[\0\0I\230\0\0\371" - "\230\0\0\377\241\0\0\377p\0\0p\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\0\0\24" - "\210\0\0\332\237\0\0\377\222\0\0\377\223\0\0\377\230\0\0\377\220\0\0\343" - "H\0\0\40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\0\0\1" - "t\0\0t\250\0\0\375\207\0\0\2749\0\0\14X\0\0)\221\0\0\324\250\0\0\373~\0\0" - "\215-\0\0\10]\0\0""0\202\0\0\270\214\0\0\340p\0\0[(\0\0\4M\0\0\40\213\0\0" - "\317\251\0\0\377\212\0\0\307E\0\0\27\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0U\0\0-\223\0\0\355\235\0\0\377\222\0\0\377\224\0\0\377\223\0\0\377\235" - "\0\0\377\216\0\0\337R\0\0$\6\0\0\0\0\0\0\0\0\0\0\0""6\0\0\16\201\0\0\264" - "\241\0\0\377\221\0\0\377\236\0\0\377\207\0\0\317<\0\0\17\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\36\0\0\2{\0\0\231\234\0\0\377\224\0\0\377\222\0\0\377\240\0\0\377\177\0" - "\0\255\32\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\1h\0\0J\224\0\0\355\237\0" - "\0\377\227\0\0\377\223\0\0\377\233\0\0\377\236\0\0\376\212\0\0\333s\0\0\225" - "d\0\0^e\0\0ar\0\0\215\215\0\0\341\241\0\0\377\211\0\0\326\217\0\0\356\244" - "\0\0\377\220\0\0\353E\0\0\30\27\0\0\2n\0\0w\250\0\0\376\232\0\0\377\235\0" - "\0\377\242\0\0\377\240\0\0\377\234\0\0\376\200\0\0\253H\0\0\25\2\0\0\0\12" - "\0\0\0H\0\0#\221\0\0\351\227\0\0\377\223\0\0\377\224\0\0\377\223\0\0\377" - "\222\0\0\377\232\0\0\376\202\0\0\316{\0\0\300\230\0\0\377\224\0\0\377\222" - "\0\0\377\234\0\0\377\225\0\0\354W\0\0""3\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\2\0\0\0M\0\0'\226\0\0\362\235\0\0\377\236\0\0\377m\0\0e\16\0\0\0\0\0\0\0" - "\0\0\0\0\2\0\0\0\\\0\0I\232\0\0\375\227\0\0\377\223\0\0\377\224\0\0\377\235" - "\0\0\377\211\0\0\3021\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0""9\0\0\14\200\0\0\235\244\0\0\371}\0\0~\37\0\0\4X\0\0" - ",\212\0\0\276\234\0\0\366\177\0\0\234A\0\0\25:\0\0\20x\0\0\216\217\0\0\354" - "w\0\0|)\0\0\4f\0\0>\226\0\0\347\252\0\0\377}\0\0\236?\0\0\14\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0""0\0\0\12{\0\0\253\237\0\0\377\225\0\0\377\223\0\0\377\223\0" - "\0\377\231\0\0\377\227\0\0\371e\0\0U\25\0\0\1\0\0\0\0\0\0\0\0\17\0\0\1g\0" - "\0]\237\0\0\374\226\0\0\377\224\0\0\377\237\0\0\375i\0\0i\23\0\0\2\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0!\0\0\3\204\0\0\260\243\0\0\377\230\0\0\377\223\0\0\377\240\0\0" - "\377z\0\0\241\31\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\33\0\0\2^\0\0;\210" - "\0\0\317\240\0\0\376\233\0\0\377\225\0\0\377\223\0\0\377\234\0\0\377\240" - "\0\0\377\236\0\0\376\236\0\0\376\245\0\0\377\243\0\0\376{\0\0\243@\0\0\25" - "d\0\0L\226\0\0\354\231\0\0\361Q\0\0(\2\0\0\0M\0\0\36\210\0\0\312\226\0\0" - "\370\223\0\0\371\225\0\0\371\215\0\0\340s\0\0};\0\0\16\15\0\0\0\0\0\0\0\13" - "\0\0\0F\0\0!\212\0\0\337\230\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377" - "\227\0\0\377\224\0\0\377\232\0\0\377\233\0\0\377\223\0\0\377\223\0\0\377" - "\224\0\0\377\242\0\0\377p\0\0\177\34\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0G\0\0\32\221\0\0\354\240\0\0\377\224\0\0\371[\0\0;\5\0\0\0\0\0" - "\0\0\0\0\0\0\35\0\0\6y\0\0\237\244\0\0\377\222\0\0\377\223\0\0\377\224\0" - "\0\377\236\0\0\377}\0\0\237%\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0>\0\0\15\201\0\0\225\241\0\0\364t\0\0" - "d-\0\0\3F\0\0\17\203\0\0\261\262\0\0\375\210\0\0\301K\0\0!)\0\0\5_\0\0K\213" - "\0\0\342~\0\0\221H\0\0\16f\0\0<\217\0\0\323\246\0\0\376\201\0\0\256S\0\0" - "\40\21\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0%\0\0\4r\0\0\200\235\0\0\374\225\0\0\377\223\0\0\377\223\0\0" - "\377\224\0\0\377\243\0\0\377\200\0\0\252*\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0""0" - "\0\0\12\207\0\0\312\237\0\0\377\221\0\0\377\235\0\0\377\214\0\0\347@\0\0" - "\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0$\0\0\1n\0\0\202\207\0\0\347\224\0\0\374\233\0" - "\0\377\247\0\0\377}\0\0\252\32\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\17\0\0\0@\0\0\25o\0\0l\214\0\0\336\247\0\0\377\242\0\0\377\235\0\0\377" - "\227\0\0\377\230\0\0\377\237\0\0\377\247\0\0\377\215\0\0\315I\0\0\26\16\0" - "\0\0\30\0\0\2]\0\0?\231\0\0\364n\0\0a\10\0\0\1\17\0\0\1""4\0\0\21S\0\0""6" - "W\0\0=X\0\0<@\0\0\33\30\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*\0\0\5\204" - "\0\0\271\244\0\0\377\231\0\0\377\233\0\0\377\242\0\0\377\241\0\0\377\225" - "\0\0\377\222\0\0\377\223\0\0\377\223\0\0\377\224\0\0\377\240\0\0\377\206" - "\0\0\316@\0\0\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>\0\0\23" - "\214\0\0\337\250\0\0\377\224\0\0\367T\0\0""4\0\0\0\0\0\0\0\0\0\0\0\0:\0\0" - "\22\212\0\0\333\235\0\0\377\223\0\0\377\223\0\0\377\231\0\0\377\241\0\0\376" - "j\0\0o\31\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\6\0\0\0""0\0\0\10r\0\0m\226\0\0\355x\0\0t#\0\0\4U\0\0\37\206" - "\0\0\302\252\0\0\374\210\0\0\270A\0\0\25\40\0\0\4b\0\0H\227\0\0\351\221\0" - "\0\275K\0\0\21P\0\0\34\177\0\0\236\246\0\0\374\223\0\0\335`\0\0:\24\0\0\1" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25\0\0\1`\0\0E\231" - "\0\0\364\235\0\0\377\222\0\0\377\223\0\0\377\223\0\0\377\237\0\0\377\220" - "\0\0\335T\0\0'\21\0\0\0\0\0\0\0\0\0\0\0\22\0\0\1\\\0\0@\235\0\0\373\226\0" - "\0\377\224\0\0\377\244\0\0\377z\0\0\236\30\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\22\0\0\0""6\0\0\30B\0\0\40o\0\0\226\200\0\0\321\206\0\0\270\201\0\0\240" - "\30\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\0\0" - "\1T\0\0%t\0\0\177}\0\0\261\207\0\0\336\231\0\0\371\230\0\0\367\202\0\0\312" - "w\0\0\213S\0\0#\23\0\0\0\0\0\0\0\0\0\0\0\33\0\0\1b\0\0FM\0\0&\10\0\0\1\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\31\0\0\1f\0\0P\216\0\0\335\234\0\0\373\200\0\0\307o\0\0yj" - "\0\0~\214\0\0\365\227\0\0\377\223\0\0\377\223\0\0\377\232\0\0\377\234\0\0" - "\373e\0\0P\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!\0\0\5" - "m\0\0|\235\0\0\372\216\0\0\351E\0\0!\0\0\0\0\0\0\0\0\7\0\0\0D\0\0\34\214" - "\0\0\344\232\0\0\377\222\0\0\377\231\0\0\376y\0\0\277\214\0\0\353[\0\0L\21" - "\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0$\0\0\4\201\0\0\211\253\0\0\373v\0\0\204<\0\0\14H\0" - "\0\31v\0\0\202\232\0\0\352\210\0\0\273X\0\0""9\30\0\0\5b\0\0C\230\0\0\344" - "\214\0\0\272W\0\0\"4\0\0\10o\0\0n\235\0\0\361\235\0\0\354e\0\0H\33\0\0\2" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\22\0\0\3\32\0\0\7""1\0\0" - "\13\"\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0Q\0\0\37\216\0\0\330\236" - "\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377\232\0\0\377\232\0\0\360f\0\0" - "R\25\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0""2\0\0\11\207\0\0\276\236\0\0\377\223" - "\0\0\377\235\0\0\377\222\0\0\354T\0\0.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\13\0\0\1T\0\0Jc\0\0~E\0\0\27N\0\0'\5\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\0\0\1\34\0\0" - "\7""3\0\0\21S\0\0""3S\0\0""0)\0\0\14\16\0\0\3\0\0\0\0\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\4\0\0\1\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\2D\0" - "\0\32V\0\0""93\0\0\17\23\0\0\2g\0\0_\227\0\0\374\227\0\0\377\223\0\0\377" - "\225\0\0\377\243\0\0\377\206\0\0\2662\0\0\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0S\0\0""0\241\0\0\366\210\0\0\323.\0\0" - "\21\0\0\0\0\0\0\0\0\23\0\0\3j\0\0m\234\0\0\374\224\0\0\377\230\0\0\377\226" - "\0\0\363O\0\0""1E\0\0--\0\0\21\12\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\0\0\15" - "\204\0\0\236\251\0\0\374\177\0\0\232;\0\0\13\30\0\0\3^\0\0""8\220\0\0\307" - "\220\0\0\334_\0\0""8)\0\0\2P\0\0""1\214\0\0\314\225\0\0\335g\0\0?#\0\0\3" - "W\0\0""0\220\0\0\302\233\0\0\362s\0\0h6\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0(\0\0\16""8\0\0%\202\0\0\267u\0\0a\25\0\0\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21" - "\0\0\0Q\0\0\36\214\0\0\304\235\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377" - "\232\0\0\377\231\0\0\366g\0\0R\37\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0" - "O\0\0)\225\0\0\352\235\0\0\377\231\0\0\377\240\0\0\377x\0\0\227\37\0\0\4" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\0\0\2O\0\0=[\0\0d\"\0" - "\0\1\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11\0\0\0Q\0\0$\216\0\0\336\235" - "\0\0\377\223\0\0\377\227\0\0\377\232\0\0\374r\0\0\212J\0\0\32\15\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0I\0\0#\227" - "\0\0\346\212\0\0\325/\0\0\21\0\0\0\0\0\0\0\0\31\0\0\5t\0\0\216\243\0\0\377" - "\221\0\0\377\241\0\0\377{\0\0\262?\0\0,<\0\0$\20\0\0\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0""4\0\0\14\201\0\0\233\244\0\0\373s\0\0n\24\0\0\2\12" - "\0\0\0O\0\0\31\213\0\0\264\230\0\0\337S\0\0""1\"\0\0\2U\0\0""1\233\0\0\344" - "\233\0\0\354t\0\0u9\0\0\16C\0\0\17\202\0\0\240\247\0\0\372y\0\0q!\0\0\3\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25\0\0\4\35\0\0\7\205\0\0\245\230\0\0\345" - "d\0\0<%\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\13\0\0\0R\0\0\40\214\0\0\307\236\0\0\377\225\0\0\377\223\0\0" - "\377\223\0\0\377\225\0\0\377\240\0\0\376}\0\0\2330\0\0\10\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0""0\0\0\7|\0\0\241\235\0\0\377\216\0\0\354v\0\0\270\224\0" - "\0\370c\0\0I\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0" - "\0\0\33\0\0\5!\0\0\11\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36" - "\0\0\5z\0\0\230\243\0\0\377\226\0\0\377\223\0\0\377\237\0\0\377\210\0\0\277" - ">\0\0\20\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\37\0\0\10\211\0\0\262\227\0\0\3415\0\0\24\0\0\0\0\11\0\0" - "\0N\0\0\"\212\0\0\332\231\0\0\377\227\0\0\377\245\0\0\377a\0\0Vz\0\0\250" - "j\0\0}\30\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\0\0\14" - "\206\0\0\245\233\0\0\351a\0\0""0\10\0\0\0\0\0\0\0N\0\0\33\220\0\0\314\203" - "\0\0\266S\0\0-0\0\0\7c\0\0I\214\0\0\307\246\0\0\376\205\0\0\251F\0\0\17A" - "\0\0\17|\0\0\202\225\0\0\360o\0\0Y*\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0T\0\0\40\221\0\0\326\242\0\0\361w\0\0\207I\0\0\32\12\0\0\1\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\0\0\6]\0\0=\215\0\0\322\236" - "\0\0\377\225\0\0\377\223\0\0\377\222\0\0\377\226\0\0\377\243\0\0\377\202" - "\0\0\271A\0\0\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0[\0\0?\233\0\0\366" - "\240\0\0\377t\0\0\216_\0\0V{\0\0\261-\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0Q\0\0)\223\0\0\354\235\0\0\377\222\0\0\377\227" - "\0\0\377\230\0\0\356\\\0\0""4\26\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\23\220\0\0\334\202\0" - "\0\264$\0\0\7\0\0\0\0#\0\0\5\177\0\0\241\240\0\0\377\223\0\0\377\237\0\0" - "\377\217\0\0\343D\0\0\37|\0\0\271]\0\0""4\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0A\0\0\16\206\0\0\256\212\0\0\315g\0\0" - "GI\0\0\35\26\0\0\2V\0\0'|\0\0\243x\0\0\314q\0\0\205T\0\0\"N\0\0\32\210\0" - "\0\264\253\0\0\376\207\0\0\250<\0\0\15""0\0\0\4p\0\0a\210\0\0\337y\0\0\204" - "A\0\0\24\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\0\0\1`\0\0""6\220\0\0\317\257" - "\0\0\376\222\0\0\336j\0\0]:\0\0\13\14\0\0\0\20\0\0\1\21\0\0\1""1\0\0\12d" - "\0\0F{\0\0\247\225\0\0\365\240\0\0\377\224\0\0\377\223\0\0\377\223\0\0\377" - "\227\0\0\377\234\0\0\376\205\0\0\304O\0\0!\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\"\0\0\6~\0\0\253\242\0\0\377\224\0\0\354<\0\0\34F\0\0""2L\0\0" - """5\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'\0\0\7{\0\0\245" - "\241\0\0\377\227\0\0\377\230\0\0\377\241\0\0\377y\0\0\220\"\0\0\4\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\35\0\0\3c\0\0`b\0\0p\17\0\0\1\17\0\0\0T\0\0+\226\0\0\354\232\0\0" - "\377\236\0\0\377\236\0\0\375k\0\0[d\0\0Gc\0\0\2044\0\0\12\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0B\0\0\16y\0\0\211" - "\224\0\0\356\237\0\0\351t\0\0f\32\0\0\2/\0\0\3V\0\0""1\203\0\0\274\226\0" - "\0\350~\0\0zC\0\0\36\201\0\0\224\250\0\0\371\215\0\0\254>\0\0\16!\0\0\1a" - "\0\0""5\224\0\0\334\207\0\0\273J\0\0\23\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16" - "\0\0\0P\0\0\37\207\0\0\274\250\0\0\375\252\0\0\375\200\0\0\256r\0\0ps\0\0" - "ws\0\0x~\0\0\264\232\0\0\372\242\0\0\377\226\0\0\377\222\0\0\377\223\0\0" - "\377\222\0\0\377\234\0\0\377\243\0\0\377x\0\0\236A\0\0\22\17\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\0\0(\224\0\0\362\201\0\0\316l\0\0\232" - "%\0\0\10\26\0\0\13\27\0\0\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\30\0\0\1`\0\0J\233\0\0\367\235\0\0\377\234\0\0\377\232\0\0\377\221\0" - "\0\347O\0\0!\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0F\0\0$W\0\0b\21\0\0\1\35\0\0" - "\2p\0\0|\241\0\0\377\225\0\0\375\217\0\0\362\206\0\0\341K\0\0\35m\0\0e^\0" - "\0?\7\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\34\0\0\2]\0\0""6\210\0\0\237\217\0\0\350g\0\0F\0\0\0\0" - "\5\0\0\0""9\0\0\13\206\0\0\235\256\0\0\374~\0\0\222B\0\0\23x\0\0l\245\0\0" - "\362\216\0\0\265H\0\0\22\3\0\0\0R\0\0\35\210\0\0\277\210\0\0\274Z\0\0\"\4" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\0\0\0;\0\0\16i\0\0T\206\0\0\303\243\0\0" - "\373\254\0\0\377\245\0\0\377\240\0\0\377\234\0\0\377\226\0\0\377\221\0\0" - "\377\222\0\0\377\222\0\0\377\230\0\0\377\241\0\0\377\223\0\0\356s\0\0{?\0" - "\0\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\0\0:\201\0" - "\0\340W\0\0B,\0\0\25\14\0\0\2\13\0\0\3\7\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0K\0\0\40\223\0\0\335\232\0\0\373\213\0\0\354~\0\0\301" - "c\0\0hT\0\0""9\31\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0,\0\0\11""8\0\0\25" - "\13\0\0\0\37\0\0\2r\0\0\204\243\0\0\377\220\0\0\326O\0\0""8O\0\0=\35\0\0" - "\7\27\0\0\3\21\0\0\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!\0\0\4}\0\0\212\216" - "\0\0\322G\0\0\22\27\0\0\0\10\0\0\0""9\0\0\14{\0\0\207\250\0\0\373\216\0\0" - "\305U\0\0'i\0\0<\214\0\0\307\206\0\0\302Y\0\0+\37\0\0\1K\0\0\21\203\0\0\241" - "\217\0\0\335_\0\0""6\40\0\0\1\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0,\0\0" - "\13[\0\0>s\0\0\214\214\0\0\337\243\0\0\375\241\0\0\377\241\0\0\377\241\0" - "\0\377\241\0\0\377\242\0\0\377\235\0\0\367\202\0\0\271V\0\0""2\31\0\0\3\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\0\0\22@\0" - "\0(\33\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0F\0\0\37\222\0\0\332\211\0\0\305A\0\0!5\0\0\22\5\0\0" - "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\35\0\0\2v\0\0\201\253\0\0\377|\0\0\215\40\0\0\2\5\0\0\1\3\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""5\0\0\14o\0\0\204\200" - "\0\0\311d\0\0@!\0\0\3\0\0\0\0)\0\0\6~\0\0\205\256\0\0\374\217\0\0\323^\0" - "\0*G\0\0\17x\0\0\202\213\0\0\345k\0\0K(\0\0\2/\0\0\6r\0\0p\202\0\0\331w\0" - "\0zD\0\0\15\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\30\0\0\4J\0" - "\0\36o\0\0|\177\0\0\264\200\0\0\263\200\0\0\262\201\0\0\267u\0\0\221\\\0" - "\0:5\0\0\14\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\7\0\0\1\6\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%\0\0\10c\0\0n\\\0\0A\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0$\0\0\2z\0\0\226\225\0\0\353^\0\0I\20\0\0\1\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - """6\0\0\10p\0\0p\215\0\0\345n\0\0b)\0\0\5\0\0\0\0*\0\0\10t\0\0}\245\0\0\362" - "\221\0\0\314\\\0\0)+\0\0\6u\0\0n\216\0\0\352m\0\0j%\0\0\5$\0\0\3j\0\0L\223" - "\0\0\345\202\0\0\250C\0\0\17\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\3\0\0\0\27\0\0\3$\0\0\7$\0\0\7#\0\0\7%\0\0\7\32\0\0\4\6\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\0\0\1\31\0\0\4\17\0\0\2\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\32\0\0\1M\0\0""6M\0\0*\40\0\0\10\6\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\37\0\0\3c\0\0C\202\0\0\320r\0\0|G\0\0\16\0\0\0\0\32\0\0\3d\0\0>\221" - "\0\0\327\232\0\0\350g\0\0<\36\0\0\3a\0\0""9|\0\0\314i\0\0o)\0\0\6\30\0\0" - "\1Y\0\0$\202\0\0\306z\0\0\244;\0\0\13\0\0\0\0\2\0\0\0\2\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\6\0\0\0\16\0\0\2\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\32\0\0\1S\0\0!\200\0\0\267z\0\0\245\\\0\0&\17\0\0\0\26\0\0" - "\1M\0\0\32y\0\0\205}\0\0\321c\0\0G\30\0\0\1Q\0\0\40g\0\0\222`\0\0o6\0\0\12" - "\11\0\0\0V\0\0\"u\0\0\232F\0\0-0\0\0\16#\0\0\5\2\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\23\0\0\0A\0\0\15{\0\0\227\212\0\0\330p\0\0[1\0\0\11\13\0\0" - "\0)\0\0\2\\\0\0;o\0\0\252Y\0\0=\30\0\0\2.\0\0\11d\0\0vV\0\0Z1\0\0\15\22\0" - "\0\0)\0\0\2\32\0\0\5c\0\0ye\0\0c)\0\0\5\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0$\0\0\4m\0\0Z\221\0\0\337\202\0\0\247E\0\0\17\0\0\0\0\10" - "\0\0\0K\0\0\36d\0\0\216L\0\0""5\23\0\0\2\36\0\0\4P\0\0BT\0\0g1\0\0\20\15" - "\0\0\0\12\0\0\0H\0\0\36j\0\0\226\207\0\0\257a\0\0,\15\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\0]\0\0""1\213\0\0\313y\0\0\2318\0\0\14" - "\40\0\0\0\11\0\0\0""8\0\0\17O\0\0TG\0\0""5\30\0\0\3\32\0\0\2E\0\0'G\0\0E" - "(\0\0\15\15\0\0\0\6\0\0\0M\0\0\23\211\0\0\255\200\0\0\302A\0\0\32\15\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0D\0\0\26s\0\0\233\201\0" - "\0\311c\0\0E*\0\0\3\0\0\0\0.\0\0\12F\0\0\0\0\15\7\0\0\0.\0\0\20^\0\0{a\0\0yN\0\0$\22\0\0\1\36\0\0\2""7\0\0\24[\0" - "\0mM\0\0N\37\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21\0\0\1K\0\0" - "+m\0\0\255k\0\0\177A\0\0\24\12\0\0\0\0\0\0\0>\0\0\20r\0\0\227r\0\0\233B\0" - "\0\24\5\0\0\0%\0\0\6c\0\0[i\0\0\242J\0\0""2\23\0\0\2\2\0\0\0\25\0\0\3$\0" - "\0\17\30\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0G" - "\0\0\32i\0\0\201s\0\0\263Z\0\0""9\30\0\0\1\0\0\0\0;\0\0\13i\0\0{s\0\0\256" - "K\0\0\40\6\0\0\0\24\0\0\1A\0\0\34C\0\0""0\40\0\0\17\4\0\0\1\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\12\0\0" - "\0'\0\0\5a\0\0Jm\0\0\255^\0\0S,\0\0\4\10\0\0\0&\0\0\5Z\0\0BU\0\0f\"\0\0\12" - "\3\0\0\0\0\0\0\0\23\0\0\3\24\0\0\6\4\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15\0\0" - "\1M\0\0!j\0\0\231f\0\0{1\0\0\14\23\0\0\0\22\0\0\1""0\0\0\15\23\0\0\4!\0\0" - "\12#\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\0\0" - "\0>\0\0\20^\0\0j^\0\0\202H\0\0\36\22\0\0\1\0\0\0\0\14\0\0\3H\0\0""9M\0\0" - "@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\37\0\0\4R\0\0 Date: Tue, 19 Jan 2010 15:57:16 +0000 Subject: [PATCH 03/16] Added missing header file --- src/sdlemu_config.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sdlemu_config.cpp b/src/sdlemu_config.cpp index b43410a..aa971c1 100644 --- a/src/sdlemu_config.cpp +++ b/src/sdlemu_config.cpp @@ -20,6 +20,7 @@ #include "sdlemu_config.h" #include // For atoi() +#include // For fopen() and friends #include // For strcmp() #include #include -- 2.37.2 From 2c98ddddf1eeb20fe90c3e9759ac77ec96dcbc97 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Tue, 19 Jan 2010 15:59:25 +0000 Subject: [PATCH 04/16] Beginnings of UI goodness... ;-) --- src/gui/mainwin.cpp | 21 ++++++++++++++++++++- src/gui/mainwin.h | 3 +++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index dba74e7..e083446 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -31,7 +31,7 @@ //#include "charwindow.h" //#include "ttedit.h" -MainWin::MainWin() +MainWin::MainWin(): running(true) { // The way BSNES controls things is by setting a timer with a zero // timeout, sleeping if not emulating anything. Seems there has to be a @@ -41,12 +41,23 @@ MainWin::MainWin() // methods, can we do something similar or should we just use the built-in // QOpenGL? + // We're going to try to use the built-in OpenGL support and see how it goes. + // We'll make the VJ core modular so that it doesn't matter what GUI is in + // use, we can drop it in anywhere and use it as-is. + // ((TTEdit *)qApp)->charWnd = new CharWindow(this); videoWidget = new GLWidget(this); setCentralWidget(videoWidget); setWindowIcon(QIcon(":/res/vj.xpm")); setWindowTitle("Virtual Jaguar v2.0.0"); + QMenu * menu = menuBar()->addMenu(tr("&File")); + QToolBar * toolbar = addToolBar(tr("x1")); + /*QAction */ action = new QAction(tr("Toggle"), this); + action->setStatusTip(tr("Toggle running state")); + action->setCheckable(true); + toolbar->addAction(action); + connect(action, SIGNAL(triggered()), this, SLOT(ToggleRunState())); #if 0 // createActions(); newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this); @@ -124,6 +135,9 @@ void MainWin::Open(void) void MainWin::Timer(void) { + if (!running) + return; + // Random hash & trash // We try to simulate an untuned tank circuit here... :-) for(int x=0; xrasterWidth; x++) @@ -138,6 +152,11 @@ void MainWin::Timer(void) videoWidget->updateGL(); } +void MainWin::ToggleRunState(void) +{ + running = !running; +} + void MainWin::ReadSettings(void) { QSettings settings("Underground Software", "Virtual Jaguar"); diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index 831b56b..5f170db 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -31,6 +31,7 @@ class MainWin: public QMainWindow private slots: void Open(void); void Timer(void); + void ToggleRunState(void); private: void ReadSettings(void); @@ -39,8 +40,10 @@ class MainWin: public QMainWindow // public: GLWidget * videoWidget; QTimer * timer; + bool running; // EditWindow * editWnd; // CharWindow * charWnd; + QAction * action; }; #endif // __MAINWIN_H__ -- 2.37.2 From 5e11cea96160bd958c1b271940bf97ecfa257b15 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Thu, 21 Jan 2010 04:20:21 +0000 Subject: [PATCH 05/16] Added some icons, reconnected settings, added start of GUI control over some settings --- res/generic.png | Bin 0 -> 1529 bytes res/power.png | Bin 0 -> 989 bytes res/zoom100.png | Bin 0 -> 1448 bytes res/zoom200.png | Bin 0 -> 1487 bytes res/zoom300.png | Bin 0 -> 1452 bytes src/gui/glwidget.cpp | 6 +- src/gui/mainwin.cpp | 148 +++++++++++++++++++++++++++++++++---------- src/gui/mainwin.h | 11 ++++ src/gui/vj.pro | 2 + src/gui/vj.qrc | 5 ++ src/settings.cpp | 3 - src/settings.h | 3 - 12 files changed, 134 insertions(+), 44 deletions(-) create mode 100644 res/generic.png create mode 100644 res/power.png create mode 100644 res/zoom100.png create mode 100644 res/zoom200.png create mode 100644 res/zoom300.png diff --git a/res/generic.png b/res/generic.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9c7fdd15450b4de5c8338c632776ffda44aad0 GIT binary patch literal 1529 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV0Tlx}8D>(`6aWAK8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1!hS^K~z}7%~pMEQ&ki{_rCl3`ug#@ zw5($v9Yf~6fkD{DN({tkh=9Zq+>FsIi2Sj?B!XmtESe3ICCoq+fk(}dR-+R|T=4QLKu9ZbSf8KNNJ-_q2zjN+Elv4OFjU;je zWXg_*RJ~uO8UsP$3@r}m35q0p@kme+I-FABXCqQ~P@#~{q26qsIk+jEb#Ben+{x83 zUH||T%|Jk=?A3>1+lk>&`7a*1lL7z*fP4e)-B+O7QIpO6o-BZK&QMX?pg7$|;M_WbN0zV4Ab)jxv+01WxnvQxw2j#Q|1232Fc-~a$l zQHA$z2P*&oW&xZW7RwzI@>fa%Neuaw)>Hu4bl7L(aYDaiLOve@;JfkgB{jij1OU%w zXf~$;pxVN^>TF!4KoFofe!GR#!~n=QFpcpp(qMq~7E;r&g6~NMK(3DQ?l06`yS&k4 zYAV*Ptu&JzX3aE|wP|GMz5?B~7!jTym7Y9$Tm162Un$dKfD(c1+`U|Tb4?m?TeUc# zmnb9mg!03e0u_;~!PUx0A7!qo~_m|WJK5I{VO z{1`0r?HapDz3O8(9F)Ph^i4}%);wqEie@A(0A(a%l{&ne#1A~@Kw893$pDb`e6#L= z<#V=*ABYP;y5Or09D4W#bt_p5W+h-?%D5I%!rcV`ko%=PrB`ZNh%qE!Ft%r|WH;z~ zV*n^45$n`8=dZ~G2LK>;zJ=eDc9GcmJ^%pOA(o1#A8nHzV$*{1u#tA5GpBL33?p4) zv2XX-TM2`+0HBSnXi~!6C3e0Ko0tGLF#%%d`)1gPITy!Nr@Tu%?y12vOj&tAS{69y zeqFgK?T`C(E4eo9p0xUZq6e-{Xh0c^E1pm4^q#`hqZp)5r=C&z!*9lYFEa-H;q)`i za?RM>5|sO;JlP?Zs#A(yol^9&LoAj1rMwuHD)>R;N14wsC7Pr2zg!ALom2$rqQ5y_ zeKRY$HvQrBGi(((ukkIyxTv#3<4qTIPLe)G^mV?0k#iSjO?0=0U@h4S(xj7uf4|Q2)Yxfmy}1 z8ID*_k=5GanYCcsM6Gzja}I*j*&+)A%sWkQW9m^JC{B4hNEDEjadBG>hxENMgW2`a+g9{Lgh(V{UB&&EP39QZ9T zL)Y`bg^=9%yGJDHROk=|n{EbB~ z!&^StT;J`RxED;!uRsu7-e@uPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV0TdM%FDcce#Q*>R8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b14>CmK~z}7#g|P;R8bVie~x`<&7|cb zgIT;NDbzi3pTtQAk8Yl(s2|V60IxouCh-NrWLCO&7ID zgtwTqT9i3vALiKRzPdf`D`%YY50CfWedpc#zvrBL|K}#nWoELNSQ5`qvrcDvayXm~ zY!^+#vrgwwayUE@YhOumdSD-L5!eJI0bhYDKwYdI+2ZtEku*5Ka-b@nj^ZV-MjG6} z%0v>#2fBgJz?^XL4L}p$b;Un(z*_Na2eN=1aks}pAQ!j;>;_Uq+cMxFunVBq=L@Lv z3D_f^OMy;cKwO=@K41QP2;>5{fprSo6vG4gWo1KR#%2_X`*C24cy<6qPPe;DMM5T^ z2{&)B@YWZ}^;1ApVPk|~v-yK&v!&;km0i+ax`N0xpj!5T9mr4^K9&auh(sa| z#oz#Mfl=e7#^Y($gTWoZJB96Da|rT)r3%9~bA!X-h=~2cj2@AkzY@>o(t*1QTc@$2 z3<3ufM&E&uxiPDtU|i&dyb2~;8XE%^iPvf&f=7N5=ub`EsWAFro{_NxUv_ub*Or%G z2F8Hbz}4d7;zt$)LSiR1!!0M_3t+3sU=-MxAld%}tT44r0%529APutDIx!XP7o z1iq<4DHG^d7^F#C>q4L@+z&7!6X>*1H+KRER7$EU`xZhH3&uoV1!6sz z^a3U0gM;gVW59Fa#%VF5k3wW-Eh^+0-~mwahZ-^NvthzuW0CO#I(6FAeyTCU00000 LNkvXXu0mjfA$_BN literal 0 HcmV?d00001 diff --git a/res/zoom100.png b/res/zoom100.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3422797fa446ec993ecd1d9ab755c17236ed10 GIT binary patch literal 1448 zcmV;Z1y}lsP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV0Tlx=0O8G|9{>OV8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1rTWMyLm ziz`G|Es`b|8WmE6tXN|p`BD6#SOooJ^hd88roRrvL+Gzd5vgz{{c#m)Z41R8iP$J* zBSoP!Voq&AbDq+~4Z+hIyVY8Z(?1;<*G-~lJMdt3-rIR^=FR)wdoleJ~okxf>k(Hu84H2h4{bb=(wL!;5SPEl0ynjnNwl6an{{Cje#@s!itq!7c~71^`55tZI$a7v2;}$+-`m?ON8cSC9p8dGj%YM$ z#=lJ_(;Aweot+h3i2{$u<3-k$l#~eQk=%yFE}WX0`am36;v2eTG7R$qF{-Mnwr{JP z<2Y8U)xN?NEG#U%m&-*w&r_E!I6OQg(cEsg&)@W#!{IPnSy{Q$+}z9^92{tI-o?d* zTr5wL z3s$Rj8ST^2(eaI#&$29s_y&VvL!Rwq4<0=D%x<^O`+UBBv?d6GDi({?#A2};K@e0@ z|DB$mD$rc1RGx_WPN#Dg&G+~B-;}(8Xf%3Xr_-fmGT8-=YJot&WwBTy7Kjf{*8;cJ6~gP$@C^P-@j;9Q|loOr!nk5mTDg@h17FfcIi6!DEl z<62G#MYs+CfO5G!gXSia>3Jj)v4}Shg+g{DLlDG~lmULfzYoc1wc1yCG2HET`^4$g z@AvmfZGIC2R##We_+IjSVOCyVz9(MW+}wOiO4evJuH)%gN(Kifl}aV#yaA5m*wWI{ z-=&HQx7+QL$``myC={}XLLoaYCw?bcF&aV$dV71Hp|yMW?wz%@wSAAvwYRr_$MZZD zi9{?-O-(;4mC8S}RY7=tAZY+W5J$M>Vgq`6d!IoF!NkNwe_>(a-)MbhW#t{O*Xuzc zn~QQ9fM4~%z`#@F0+wYtmSs6SrY9yQ`YDRyksAVmfUB&mY+tNUqtT?%!Sdb!P1A84 zB5wn~$H&L&rKP2JXJ%&J-`d)$$(Obz4RAOdb7--;x;pkc<=9O~tS75wuTv4-gh-M+ zKswB3^Xe6*Mx#k1rpM#){@2PMJ$m#Be#p_$(T7+10)}C>U%q@<1polW#l?TIEE^^W zB3)l!AE9YFfog@UZPvfV?fCfkhm(_&J%S*p5Fn{kDgn=+3WehIWVKqC@o>)f|Fyn==Xt8GuI|_Wvn>MvK$0X6#>U1zl5EYA z$s`pF23O|?5s19NYErn9#&RX?zFVD{NQrAg4y1Pc>Dw89!z`5(rUi|0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV0Tlx;JA{XH_x#@1M42Dh#)j(51mkK8Lfk27Up zePFZM7R+X|4*-DPhe}FH{%C7!o8H>ms=$7ZIff8Q6%`d*@9QiTNs_NzK%)#n zLqh{xTwIjYj+UnBNOpGiz90yjG)+g;^dgZ6y}7w592^{E#^Z6VGF%>y$I;#0{Z+!h z9~&FHK_bo1&wnk7;*!l~Tj=cU{2D?isfFw$8XO#S<>lqYu1T{4^8(5*d zy!^L!b*4tQZ{Pk5+h;^&z zFbwk&^E@6;_fZaLG@7G&ynOlcPwx`r%*@OKQ51iM5H>&v8z_p3VcFEwR3`ucklpb9 z{rhd1_(wb**Wx|HFuUnE3vw6yehr_(tqNzx*gpFe;8>GJY&9RL7i zWo5lhNIn2SFc>Tc$zl@>2Kitx$gi%hUI>T7?7Nm7*}l8Fy6z%`fFwx}^9%-qUlqXh z>({?!SvKr)xdzFk3j_kyfk2=-8jVt^oI?mD(k8A3WiLnyV0Cr%0?V>tjYe}wX7TLo zY_r8;@meev@9gYsb1DE`U0rvvJ+s;DQ)@;^0ffV0*5z^ylDxjYzEMFCo@=$*1D#H{ zH!?EfOa(v`#U=c0YisKR%Llzk0o1ODX`$ za>IO&$J34Z#l^*crUZZx0uF~`Qd!fa!F1wJc2%FxXC`GCCzV=RS=o+~x3RJDL8@;? zM@OA_UteFpMArV{;o*@_ilSmEPXIzF6&4o$m8`Ql9FECk_XUJd(&==2YNw^V4}e;a zR%UWmR@Q!FW8?Rvp51PLM1mL|9{xNxH}`KW=XpLjJw4s#^ZCpxD=QbVZc+d=O~1m- z$B!R>qy&H)iQDb&Id|^dTg+csS-FT10`2YX_tfqId{H?Zj!9Jj%IVs{-J8K1jC6)3jXDpjN9rFc=JeQ52V0mJL%B6~!-Nx7*#L ztdJukHk)k$Gxd7?v(o^;Ct$bRANhPfvoh((_$&RSRl8?NWP>uB&AtR-K|w(T3!P5q z$XPod7#R3M`AA8a3j{&feDUH%6#xL_g9QU8^0A)$E^Pzw-XZ+ zpG-|nb;e>b3eN)+Ma5#V7=`t8I^CPSy}jH7gyh5YB%*2h70a?=gTdg}>-Ep->gs+G zMRAEN=aaraHW$dU%+=P`KK(z(G5`Q#80O{p`1q$uN3&2U#LdmkHBU}X_W1q&4+{$m zU&Z5bE$-pT#w_Jx7-qMlqvKvvQ`5ZBXk5p3IgSe{L#H{-c%E!bpP!#^+TPyg8HU-d ptgPI+a^=d8&CShoYB{1@{{k>Pl{XUyPB#Dm002ovPDHLkV1g3gyvzUq literal 0 HcmV?d00001 diff --git a/res/zoom300.png b/res/zoom300.png new file mode 100644 index 0000000000000000000000000000000000000000..3567764ae5d6440343c2425c48790bd4a1dc2d1f GIT binary patch literal 1452 zcmV;d1ylNoP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV0Tlx-IdhUEi2wiq8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b1sO?1K~z}7wO2t%BUc!HCPs}(oH)wJ zU<7rt7KzCQMgzgi1hoeAAUU`d1id8YP>Ps62@(nP6iXC@)#+gyENdx94^doO+VN0? zZ3D3?3+k%S=%k_Dtcj_u*7$nqlgT)V*}6OM!_5EwdH?tR_x=BSe-VTb6#B$sF>-r* z+qkv0WeSJGt;u8(%Vk?pQITqEYx`NJ(;eeDo-i7X+ayWGZW%%dC57jCl4V)vqeqXv zvfJ&eX0tg00D$+A>gwv>2L=Y79UUFjBR{tsa~#Li*ViB2*I7Pc7>46{o`evBBJmd3 zY&LFveVxe_S`5RIrKP186h$3i7?#XsmrN$HgM$O=>guXElgY@%+r_f1%jtA}p0)Zw zATTOKs?lgtR;zWxZnv)v4Gn$4aU7Ft%kGkii3y)drAni@ySlo*y|o2RO-;MVpsud& z*Z=D*m-zku$7p_nAmR{0P%LEl$;nAA`tI-V|GLoZn4X><4F-clB_$=7IF2VU3`=%& zbbR02+q*1ezR6_TLhlzB7o}NQ;PH5-5IU7gl}04VCmhEy48w56#l`ua06-DY z>-GD3y?(!~t?j4o?(XMSt93)ERGy1h3n2tJj=x4amSvqlYG843@uT|^j^j8+3V^|2 z*g-m*&Gv%~ks_1H$k98F;|cJdo*VK30HV=o9gy0aXf&#eMx(mT&CQ4Lc$_G7)u?>8 zx3~YOP$({?IKVIrhx7)6VJ9bmzP`S12!e?Fe7*@}b9Q#7-rL)Iu(!AO;Oy*7Ep+bn zdMBj_SYBTKXTDk>31D+`^C3YH@uH%lYvBq)p-?YP(_xyX!=X^9S2%I53=kKzf&j$h zal+^GO$c>kV`HCD6!l6jmtQHB%JZqIDUVbHG#X7xrBbEka`_bi0BW_`Hw?pYs2;f8 z?k8wYqtUn}2|y~WGMOxc-c2UcFX3>QzAFoarQPH4OhE_%%d$?StE#H{BQF35A#k}| z^Ww0wEbAm zI-NHH9LF(Qt@e!+xm+&Se7^HST!@gZ_&fl)YBYop3=a=KMY@ubl8f%{?&m@~hr_WX z1%l^!lBVgf@CKAKV~`TVuv4U5TU+~33}AS8_$h=C%+1Y>2#buv;aEZ>t*NQ`t)-=9 zTNpKsMw1d>WF!Fye?o^5I&6e#gg}ra$x9JbC<=w*a&B&JL>wVW06Lv6DlCzOmfwMa zfoD?AWinYt%DI>uHv@LNeHAJ7di{Q(08*)xW?^Ar(BW__b#``sXR%mbn9b%$AP^Xp zvKRZgleOs3NR#a3Z#g*$_%J}&Br@}=B0)f%2zJQ{rgTuqaMgRaPD=Yh( zVVHFc!;-D7tzn%`cZ}`|IoquNF1NF@vmXb8!J%|Itw#NTTCGl}(`hxbQ!15zou8kV zXCV|`Oz#p5!%hi;h#L%s9lc(^Z?RZjSgqC#VLIRS|E<1&=XtWZx%uV$Y|8)u5XbS? zGcz-vNVaCNSd3g=UhbWrpC8%T*=f;gwWpa(MviK@RGTG!a2!tz4i0|V)6=tJG#a #include "mainwin.h" +//#include //#include #include "glwidget.h" -//#include "editwindow.h" -//#include "charwindow.h" -//#include "ttedit.h" +#include "settings.h" -MainWin::MainWin(): running(true) -{ - // The way BSNES controls things is by setting a timer with a zero - // timeout, sleeping if not emulating anything. Seems there has to be a - // better way. +// The way BSNES controls things is by setting a timer with a zero +// timeout, sleeping if not emulating anything. Seems there has to be a +// better way. - // It has a novel approach to plugging-in/using different video/audio/input - // methods, can we do something similar or should we just use the built-in - // QOpenGL? +// It has a novel approach to plugging-in/using different video/audio/input +// methods, can we do something similar or should we just use the built-in +// QOpenGL? - // We're going to try to use the built-in OpenGL support and see how it goes. - // We'll make the VJ core modular so that it doesn't matter what GUI is in - // use, we can drop it in anywhere and use it as-is. +// We're going to try to use the built-in OpenGL support and see how it goes. +// We'll make the VJ core modular so that it doesn't matter what GUI is in +// use, we can drop it in anywhere and use it as-is. -// ((TTEdit *)qApp)->charWnd = new CharWindow(this); +MainWin::MainWin() +{ videoWidget = new GLWidget(this); setCentralWidget(videoWidget); setWindowIcon(QIcon(":/res/vj.xpm")); setWindowTitle("Virtual Jaguar v2.0.0"); - QMenu * menu = menuBar()->addMenu(tr("&File")); - QToolBar * toolbar = addToolBar(tr("x1")); - /*QAction */ action = new QAction(tr("Toggle"), this); + // Create actions + + quitAppAct = new QAction(tr("E&xit"), this); + quitAppAct->setShortcuts(QKeySequence::Quit); + quitAppAct->setStatusTip(tr("Quit Virtual Jaguar")); + connect(quitAppAct, SIGNAL(triggered()), this, SLOT(close())); + + action = new QAction(QIcon(":/res/power.png"), tr("&Power"), this); action->setStatusTip(tr("Toggle running state")); action->setCheckable(true); - toolbar->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(ToggleRunState())); + + zoomActs = new QActionGroup(this); + + x1Act = new QAction(QIcon(":/res/zoom100.png"), tr("Zoom 100%"), zoomActs); + x1Act->setStatusTip(tr("Set window zoom to 100%")); + x1Act->setCheckable(true); +// connect(x1Act, SIGNAL(triggered()), this, SLOT(???())); + + x2Act = new QAction(QIcon(":/res/zoom200.png"), tr("Zoom 200%"), zoomActs); + x2Act->setStatusTip(tr("Set window zoom to 200%")); + x2Act->setCheckable(true); +// connect(x2Act, SIGNAL(triggered()), this, SLOT(???())); + + x3Act = new QAction(QIcon(":/res/zoom300.png"), tr("Zoom 300%"), zoomActs); + x3Act->setStatusTip(tr("Set window zoom to 300%")); + x3Act->setCheckable(true); +// connect(x3Act, SIGNAL(triggered()), this, SLOT(???())); + + blurAct = new QAction(QIcon(":/res/generic.png"), tr("Blur"), this); + blurAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST")); + blurAct->setCheckable(true); + connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur())); + + // Create menus & toolbars + + QMenu * fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(action); + fileMenu->addAction(quitAppAct); + + QToolBar * toolbar = addToolBar(tr("Stuff")); + toolbar->addAction(action); + toolbar->addAction(x1Act); + toolbar->addAction(x2Act); + toolbar->addAction(x3Act); + toolbar->addAction(blurAct); #if 0 // createActions(); newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this); @@ -110,13 +147,13 @@ MainWin::MainWin(): running(true) statusBar()->showMessage(tr("Ready")); ReadSettings(); - -// connect(textEdit->document(), SIGNAL(contentsChanged()), -// this, SLOT(documentWasModified())); - -// setCurrentFile(""); setUnifiedTitleAndToolBarOnMac(true); + // Set toolbar button based on setting read in (sync the UI)... + blurAct->setChecked(vjs.glFilter); + x1Act->setChecked(true); + running = action->isChecked(); + // Set up timer based loop for animation... timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(Timer())); @@ -140,9 +177,9 @@ void MainWin::Timer(void) // Random hash & trash // We try to simulate an untuned tank circuit here... :-) - for(int x=0; xrasterWidth; x++) + for(uint32_t x=0; xrasterWidth; x++) { - for(int y=0; yrasterHeight; y++) + for(uint32_t y=0; yrasterHeight; y++) { videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;// | (rand() & 0xFF);//0x000000FF; // buffer[(y * textureWidth) + x] = x*y; @@ -155,6 +192,32 @@ void MainWin::Timer(void) void MainWin::ToggleRunState(void) { running = !running; + + if (!running) + { + for(uint32_t x=0; xrasterWidth; x++) + for(uint32_t y=0; yrasterHeight; y++) + videoWidget->buffer[(y * videoWidget->textureWidth) + x] = 0x00000000; + + videoWidget->updateGL(); + } +} + +void MainWin::SetZoom100(void) +{ +} + +void MainWin::SetZoom200(void) +{ +} + +void MainWin::SetZoom300(void) +{ +} + +void MainWin::ToggleBlur(void) +{ + vjs.glFilter = !vjs.glFilter; } void MainWin::ReadSettings(void) @@ -164,11 +227,18 @@ void MainWin::ReadSettings(void) QSize size = settings.value("size", QSize(400, 400)).toSize(); resize(size); move(pos); -//videoWidget->updateGL(); -// pos = settings.value("charWndPos", QPoint(0, 0)).toPoint(); -// size = settings.value("charWndSize", QSize(200, 200)).toSize(); -// ((TTEdit *)qApp)->charWnd->resize(size); -// ((TTEdit *)qApp)->charWnd->move(pos); + + vjs.useJoystick = settings.value("useJoystick", false).toBool(); + vjs.joyport = settings.value("joyport", 0).toInt(); + vjs.hardwareTypeNTSC = settings.value("hardwareTypeNTSC", true).toBool(); + vjs.frameSkip = settings.value("frameSkip", 0).toInt(); + vjs.useJaguarBIOS = settings.value("useJaguarBIOS", false).toBool(); + vjs.DSPEnabled = settings.value("DSPEnabled", false).toBool(); + vjs.usePipelinedDSP = settings.value("usePipelinedDSP", false).toBool(); + vjs.fullscreen = settings.value("fullscreen", false).toBool(); + vjs.useOpenGL = settings.value("useOpenGL", true).toBool(); + vjs.glFilter = settings.value("glFilterType", 0).toInt(); + vjs.renderType = settings.value("renderType", 0).toInt(); } void MainWin::WriteSettings(void) @@ -176,7 +246,17 @@ void MainWin::WriteSettings(void) QSettings settings("Underground Software", "Virtual Jaguar"); settings.setValue("pos", pos()); settings.setValue("size", size()); -// settings.setValue("charWndPos", ((TTEdit *)qApp)->charWnd->pos()); -// settings.setValue("charWndSize", ((TTEdit *)qApp)->charWnd->size()); + + settings.setValue("useJoystick", vjs.useJoystick); + settings.setValue("joyport", vjs.joyport); + settings.setValue("hardwareTypeNTSC", vjs.hardwareTypeNTSC); + settings.setValue("frameSkip", vjs.frameSkip); + settings.setValue("useJaguarBIOS", vjs.useJaguarBIOS); + settings.setValue("DSPEnabled", vjs.DSPEnabled); + settings.setValue("usePipelinedDSP", vjs.usePipelinedDSP); + settings.setValue("fullscreen", vjs.fullscreen); + settings.setValue("useOpenGL", vjs.useOpenGL); + settings.setValue("glFilterType", vjs.glFilter); + settings.setValue("renderType", vjs.renderType); } diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index 5f170db..781ac29 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -32,6 +32,10 @@ class MainWin: public QMainWindow void Open(void); void Timer(void); void ToggleRunState(void); + void SetZoom100(void); + void SetZoom200(void); + void SetZoom300(void); + void ToggleBlur(void); private: void ReadSettings(void); @@ -43,7 +47,14 @@ class MainWin: public QMainWindow bool running; // EditWindow * editWnd; // CharWindow * charWnd; + QActionGroup * zoomActs; + QAction * action; + QAction * quitAppAct; + QAction * x1Act; + QAction * x2Act; + QAction * x3Act; + QAction * blurAct; }; #endif // __MAINWIN_H__ diff --git a/src/gui/vj.pro b/src/gui/vj.pro index a14781c..106f79b 100644 --- a/src/gui/vj.pro +++ b/src/gui/vj.pro @@ -20,3 +20,5 @@ OBJECTS_DIR = ../../obj MOC_DIR = ../../obj RCC_DIR = ../../obj UI_DIR = ../../obj +#Nope, don't do dookey +#INCLUDES_DIR = .. diff --git a/src/gui/vj.qrc b/src/gui/vj.qrc index 65b1eab..159f890 100644 --- a/src/gui/vj.qrc +++ b/src/gui/vj.qrc @@ -1,5 +1,10 @@ ../../res/vj.xpm + ../../res/power.png + ../../res/zoom100.png + ../../res/zoom200.png + ../../res/zoom300.png + ../../res/generic.png diff --git a/src/settings.cpp b/src/settings.cpp index b273cf6..0ddf070 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -19,9 +19,6 @@ #include "sdlemu_config.h" #include "log.h" -// Temporary vars... -bool smoothGLOutput = false; - using namespace std; // Global variables diff --git a/src/settings.h b/src/settings.h index f998b8b..acc8c91 100644 --- a/src/settings.h +++ b/src/settings.h @@ -57,7 +57,4 @@ void SaveVJSettings(void); extern VJSettings vjs; -// Temporary vars... -extern bool smoothGLOutput; - #endif // __SETTINGS_H__ -- 2.37.2 From e6b7d61963423b7f9cb4c6c24d2befca50328d4f Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Thu, 21 Jan 2010 22:09:01 +0000 Subject: [PATCH 06/16] More GUI fill in, new About box --- Makefile | 1 + src/gui/about.cpp | 73 +++++++++++++ src/gui/about.h | 41 ++++++++ src/gui/glwidget.cpp | 6 +- src/gui/mainwin.cpp | 236 ++++++++++++++++++++++++++++++++----------- src/gui/mainwin.h | 19 +++- src/gui/vj.pro | 2 + src/gui/vj.qrc | 1 + 8 files changed, 315 insertions(+), 64 deletions(-) create mode 100644 src/gui/about.cpp create mode 100644 src/gui/about.h diff --git a/Makefile b/Makefile index ab65a75..ebce4f7 100644 --- a/Makefile +++ b/Makefile @@ -72,6 +72,7 @@ OBJS = \ obj/m68kopnz.o \ obj/m68kdasm.o \ \ + obj/about.o \ obj/app.o \ obj/mainwin.o \ obj/moc_mainwin.o \ diff --git a/src/gui/about.cpp b/src/gui/about.cpp new file mode 100644 index 0000000..c354307 --- /dev/null +++ b/src/gui/about.cpp @@ -0,0 +1,73 @@ +// +// about.cpp - Credits +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/21/2010 Created this file +// + +#include "about.h" + +AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget() +{ + layout = new QVBoxLayout(); + layout->setSizeConstraint(QLayout::SetFixedSize); +// layout->setMargin(Style::WindowMargin); +// layout->setSpacing(Style::WidgetSpacing); + setLayout(layout); + +// logo = new Logo; +// logo->setFixedSize(600, 106); +// layout->addWidget(logo); + + text = new QLabel(tr( + "" + "" + "" + "" + "
Version: 2.0.0
Author: byuu
Homepage: http://byuu.org/
" + )); + layout->addWidget(text); +} + + +// Byuu's version... +#if 0 +#include "about.moc" +AboutWindow *aboutWindow; + +AboutWindow::AboutWindow() : QbWindow(config().geometry.aboutWindow) { + setObjectName("about-window"); + setWindowTitle("About bsnes ..."); + + layout = new QVBoxLayout; + layout->setSizeConstraint(QLayout::SetFixedSize); + layout->setMargin(Style::WindowMargin); + layout->setSpacing(Style::WidgetSpacing); + setLayout(layout); + + logo = new Logo; + logo->setFixedSize(600, 106); + layout->addWidget(logo); + + info = new QLabel(string() << + "" + "" + "" + "" + "
Version: " << bsnesVersion << "
Author: byuu
Homepage: http://byuu.org/
" + ); + layout->addWidget(info); +} + +void AboutWindow::Logo::paintEvent(QPaintEvent*) { + QPainter painter(this); + QPixmap pixmap(":/logo.png"); + painter.drawPixmap(0, 0, pixmap); +} +#endif diff --git a/src/gui/about.h b/src/gui/about.h new file mode 100644 index 0000000..c448651 --- /dev/null +++ b/src/gui/about.h @@ -0,0 +1,41 @@ +// +// about.h: Credits where credits are due ;-) +// +// by James L. Hammons +// (C) 2010 Underground Software +// + +#ifndef __ABOUT_H__ +#define __ABOUT_H__ + +#include + +class AboutWindow: public QWidget +{ + public: + AboutWindow(QWidget * parent = 0); + + private: + QVBoxLayout * layout; + QLabel * text; +}; + +#endif // __ABOUT_H__ + + +#if 0 +class AboutWindow : public QbWindow { + Q_OBJECT + +public: + QVBoxLayout *layout; + struct Logo : public QWidget { + void paintEvent(QPaintEvent*); + } *logo; + QLabel *info; + + AboutWindow(); +}; + +extern AboutWindow *aboutWindow; +#endif diff --git a/src/gui/glwidget.cpp b/src/gui/glwidget.cpp index d4a65ec..e32dde3 100644 --- a/src/gui/glwidget.cpp +++ b/src/gui/glwidget.cpp @@ -16,8 +16,7 @@ #include "settings.h" GLWidget::GLWidget(QWidget * parent/*= 0*/): QGLWidget(parent), texture(0), - textureWidth(0), textureHeight(0), buffer(0), rasterWidth(64), rasterHeight(64) -// textureWidth(0), textureHeight(0), buffer(0), rasterWidth(256), rasterHeight(256) + textureWidth(0), textureHeight(0), buffer(0), rasterWidth(320), rasterHeight(240) { } @@ -42,6 +41,9 @@ void GLWidget::initializeGL() void GLWidget::paintGL() { +//kludge +rasterHeight = (vjs.hardwareTypeNTSC ? 240 : 256); + unsigned outputWidth = width(); unsigned outputHeight = height(); diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index deef6b4..40af9eb 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -28,6 +28,7 @@ //#include //#include #include "glwidget.h" +#include "about.h" #include "settings.h" // The way BSNES controls things is by setting a timer with a zero @@ -49,6 +50,11 @@ MainWin::MainWin() setWindowIcon(QIcon(":/res/vj.xpm")); setWindowTitle("Virtual Jaguar v2.0.0"); + aboutWin = new AboutWindow(this); + + videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + // Create actions quitAppAct = new QAction(tr("E&xit"), this); @@ -56,92 +62,67 @@ MainWin::MainWin() quitAppAct->setStatusTip(tr("Quit Virtual Jaguar")); connect(quitAppAct, SIGNAL(triggered()), this, SLOT(close())); - action = new QAction(QIcon(":/res/power.png"), tr("&Power"), this); - action->setStatusTip(tr("Toggle running state")); - action->setCheckable(true); - connect(action, SIGNAL(triggered()), this, SLOT(ToggleRunState())); + powerAct = new QAction(QIcon(":/res/power.png"), tr("&Power"), this); + powerAct->setStatusTip(tr("Toggle running state")); + powerAct->setCheckable(true); + connect(powerAct, SIGNAL(triggered()), this, SLOT(ToggleRunState())); zoomActs = new QActionGroup(this); x1Act = new QAction(QIcon(":/res/zoom100.png"), tr("Zoom 100%"), zoomActs); x1Act->setStatusTip(tr("Set window zoom to 100%")); x1Act->setCheckable(true); -// connect(x1Act, SIGNAL(triggered()), this, SLOT(???())); + connect(x1Act, SIGNAL(triggered()), this, SLOT(SetZoom100())); x2Act = new QAction(QIcon(":/res/zoom200.png"), tr("Zoom 200%"), zoomActs); x2Act->setStatusTip(tr("Set window zoom to 200%")); x2Act->setCheckable(true); -// connect(x2Act, SIGNAL(triggered()), this, SLOT(???())); + connect(x2Act, SIGNAL(triggered()), this, SLOT(SetZoom200())); x3Act = new QAction(QIcon(":/res/zoom300.png"), tr("Zoom 300%"), zoomActs); x3Act->setStatusTip(tr("Set window zoom to 300%")); x3Act->setCheckable(true); -// connect(x3Act, SIGNAL(triggered()), this, SLOT(???())); + connect(x3Act, SIGNAL(triggered()), this, SLOT(SetZoom300())); + + tvTypeActs = new QActionGroup(this); + + ntscAct = new QAction(QIcon(":/res/generic.png"), tr("NTSC"), tvTypeActs); + ntscAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST")); + ntscAct->setCheckable(true); + connect(ntscAct, SIGNAL(triggered()), this, SLOT(SetNTSC())); + + palAct = new QAction(QIcon(":/res/generic.png"), tr("PAL"), tvTypeActs); + palAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST")); + palAct->setCheckable(true); + connect(palAct, SIGNAL(triggered()), this, SLOT(SetPAL())); blurAct = new QAction(QIcon(":/res/generic.png"), tr("Blur"), this); blurAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST")); blurAct->setCheckable(true); connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur())); + aboutAct = new QAction(QIcon(":/res/generic.png"), tr("&About..."), this); + aboutAct->setStatusTip(tr("Shows self-serving credits")); +// aboutAct->setCheckable(true); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); + // Create menus & toolbars - QMenu * fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(action); + fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(powerAct); fileMenu->addAction(quitAppAct); + fileMenu = menuBar()->addMenu(tr("&Help")); + fileMenu->addAction(aboutAct); + QToolBar * toolbar = addToolBar(tr("Stuff")); - toolbar->addAction(action); + toolbar->addAction(powerAct); toolbar->addAction(x1Act); toolbar->addAction(x2Act); toolbar->addAction(x3Act); + toolbar->addAction(ntscAct); + toolbar->addAction(palAct); toolbar->addAction(blurAct); -#if 0 -// createActions(); - newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this); - newAct->setShortcuts(QKeySequence::New); - newAct->setStatusTip(tr("Create a new file")); - connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); - - openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this); - openAct->setShortcuts(QKeySequence::Open); - openAct->setStatusTip(tr("Open an existing file")); - connect(openAct, SIGNAL(triggered()), this, SLOT(open())); - - aboutQtAct = new QAction(tr("About &Qt"), this); - aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); - connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); - -// createMenus(); - fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(newAct); - fileMenu->addAction(openAct); - fileMenu->addAction(saveAct); - fileMenu->addAction(saveAsAct); - fileMenu->addSeparator(); - fileMenu->addAction(exitAct); - - editMenu = menuBar()->addMenu(tr("&Edit")); - editMenu->addAction(cutAct); - editMenu->addAction(copyAct); - editMenu->addAction(pasteAct); - - menuBar()->addSeparator(); - - helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(aboutQtAct); - -// createToolBars(); - fileToolBar = addToolBar(tr("File")); - fileToolBar->addAction(newAct); - fileToolBar->addAction(openAct); - fileToolBar->addAction(saveAct); - - editToolBar = addToolBar(tr("Edit")); - editToolBar->addAction(cutAct); - editToolBar->addAction(copyAct); - editToolBar->addAction(pasteAct); -#endif // Create status bar statusBar()->showMessage(tr("Ready")); @@ -151,8 +132,15 @@ MainWin::MainWin() // Set toolbar button based on setting read in (sync the UI)... blurAct->setChecked(vjs.glFilter); - x1Act->setChecked(true); - running = action->isChecked(); + x1Act->setChecked(zoomLevel == 1); + x2Act->setChecked(zoomLevel == 2); + x3Act->setChecked(zoomLevel == 3); + running = powerAct->isChecked(); + ntscAct->setChecked(vjs.hardwareTypeNTSC); + palAct->setChecked(!vjs.hardwareTypeNTSC); + + // Do this in case original size isn't correct + ResizeMainWindow(); // Set up timer based loop for animation... timer = new QTimer(this); @@ -205,14 +193,32 @@ void MainWin::ToggleRunState(void) void MainWin::SetZoom100(void) { + zoomLevel = 1; + ResizeMainWindow(); } void MainWin::SetZoom200(void) { + zoomLevel = 2; + ResizeMainWindow(); } void MainWin::SetZoom300(void) { + zoomLevel = 3; + ResizeMainWindow(); +} + +void MainWin::SetNTSC(void) +{ + vjs.hardwareTypeNTSC = true; + ResizeMainWindow(); +} + +void MainWin::SetPAL(void) +{ + vjs.hardwareTypeNTSC = false; + ResizeMainWindow(); } void MainWin::ToggleBlur(void) @@ -220,6 +226,28 @@ void MainWin::ToggleBlur(void) vjs.glFilter = !vjs.glFilter; } +void MainWin::ShowAboutWin(void) +{ + aboutWin->show(); +// QMessageBox::about(this, tr("About Application"), +// tr("The Application example demonstrates how to " +// "write modern GUI applications using Qt, with a menu bar, " +// "toolbars, and a status bar.")); +} + +void MainWin::ResizeMainWindow(void) +{ + videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256)); + show(); + + for(int i=0; i<2; i++) + { + resize(0, 0); + usleep(2000); + QApplication::processEvents(); + } +} + void MainWin::ReadSettings(void) { QSettings settings("Underground Software", "Virtual Jaguar"); @@ -228,6 +256,8 @@ void MainWin::ReadSettings(void) resize(size); move(pos); + zoomLevel = settings.value("zoom", 1).toInt(); + vjs.useJoystick = settings.value("useJoystick", false).toBool(); vjs.joyport = settings.value("joyport", 0).toInt(); vjs.hardwareTypeNTSC = settings.value("hardwareTypeNTSC", true).toBool(); @@ -247,6 +277,8 @@ void MainWin::WriteSettings(void) settings.setValue("pos", pos()); settings.setValue("size", size()); + settings.setValue("zoom", zoomLevel); + settings.setValue("useJoystick", vjs.useJoystick); settings.setValue("joyport", vjs.joyport); settings.setValue("hardwareTypeNTSC", vjs.hardwareTypeNTSC); @@ -260,3 +292,89 @@ void MainWin::WriteSettings(void) settings.setValue("renderType", vjs.renderType); } +// Here's how Byuu does it... +// I think I have it working now... :-) +#if 0 +void Utility::resizeMainWindow() +{ + unsigned region = config().video.context->region; + unsigned multiplier = config().video.context->multiplier; + unsigned width = 256 * multiplier; + unsigned height = (region == 0 ? 224 : 239) * multiplier; + + if(config().video.context->correctAspectRatio) + { + if(region == 0) + { + width = (double)width * config().video.ntscAspectRatio + 0.5; //NTSC adjust + } + else + { + width = (double)width * config().video.palAspectRatio + 0.5; //PAL adjust + } + } + + if(config().video.isFullscreen == false) + { + //get effective desktop work area region (ignore Windows taskbar, OS X dock, etc.) + QRect deskRect = QApplication::desktop()->availableGeometry(mainWindow); + + //ensure window size will not be larger than viewable desktop area + constrainSize(height, width, deskRect.height()); //- frameHeight); + constrainSize(width, height, deskRect.width()); //- frameWidth ); + + mainWindow->canvas->setFixedSize(width, height); + mainWindow->show(); + } + else + { + for(unsigned i = 0; i < 2; i++) + { + unsigned iWidth = width, iHeight = height; + + constrainSize(iHeight, iWidth, mainWindow->canvasContainer->size().height()); + constrainSize(iWidth, iHeight, mainWindow->canvasContainer->size().width()); + + //center canvas onscreen; ensure it is not larger than viewable area + mainWindow->canvas->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + mainWindow->canvas->setFixedSize(iWidth, iHeight); + mainWindow->canvas->setMinimumSize(0, 0); + + usleep(2000); + QApplication::processEvents(); + } + } + + //workaround for Qt/Xlib bug: + //if window resize occurs with cursor over it, Qt shows Qt::Size*DiagCursor; + //so force it to show Qt::ArrowCursor, as expected + mainWindow->setCursor(Qt::ArrowCursor); + mainWindow->canvasContainer->setCursor(Qt::ArrowCursor); + mainWindow->canvas->setCursor(Qt::ArrowCursor); + + //workaround for DirectSound(?) bug: + //window resizing sometimes breaks audio sync, this call re-initializes it + updateAvSync(); +} + +void Utility::setScale(unsigned scale) +{ + config().video.context->multiplier = scale; + resizeMainWindow(); + mainWindow->shrink(); + mainWindow->syncUi(); +} + +void QbWindow::shrink() +{ + if(config().video.isFullscreen == false) + { + for(unsigned i = 0; i < 2; i++) + { + resize(0, 0); + usleep(2000); + QApplication::processEvents(); + } + } +} +#endif diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index 781ac29..a3a26cc 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -14,6 +14,7 @@ // Forward declarations class GLWidget; +class AboutWindow; //class EditWindow; //class CharWindow; @@ -35,26 +36,38 @@ class MainWin: public QMainWindow void SetZoom100(void); void SetZoom200(void); void SetZoom300(void); + void SetNTSC(void); + void SetPAL(void); void ToggleBlur(void); + void ShowAboutWin(void); private: + void ResizeMainWindow(void); void ReadSettings(void); void WriteSettings(void); // public: GLWidget * videoWidget; + AboutWindow * aboutWin; QTimer * timer; bool running; -// EditWindow * editWnd; -// CharWindow * charWnd; + int zoomLevel; + + QMenu * fileMenu; + QMenu * helpMenu; + QActionGroup * zoomActs; + QActionGroup * tvTypeActs; - QAction * action; QAction * quitAppAct; + QAction * powerAct; QAction * x1Act; QAction * x2Act; QAction * x3Act; + QAction * ntscAct; + QAction * palAct; QAction * blurAct; + QAction * aboutAct; }; #endif // __MAINWIN_H__ diff --git a/src/gui/vj.pro b/src/gui/vj.pro index 106f79b..f95b90e 100644 --- a/src/gui/vj.pro +++ b/src/gui/vj.pro @@ -9,10 +9,12 @@ QT += opengl HEADERS += app.h HEADERS += mainwin.h HEADERS += glwidget.h +HEADERS += about.h SOURCES += app.cpp SOURCES += mainwin.cpp SOURCES += glwidget.cpp +SOURCES += about.cpp RESOURCES += vj.qrc diff --git a/src/gui/vj.qrc b/src/gui/vj.qrc index 159f890..4a23d8c 100644 --- a/src/gui/vj.qrc +++ b/src/gui/vj.qrc @@ -6,5 +6,6 @@ ../../res/zoom200.png ../../res/zoom300.png ../../res/generic.png + ../../res/vj_title_small.png -- 2.37.2 From 90217c7d09fe1b0c7c78e911f3b0c90333f8f9c2 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 22 Jan 2010 14:44:32 +0000 Subject: [PATCH 07/16] More About box tweaking --- res/vj_title_small.png | Bin 0 -> 13819 bytes src/gui/about.cpp | 10 ++++++++-- src/gui/about.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 res/vj_title_small.png diff --git a/res/vj_title_small.png b/res/vj_title_small.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0c8fd1e4f44791d6dad8befd58fcbcba517a82 GIT binary patch literal 13819 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RV0TvD*3qPx5IsgD507*naRCwC$ z-FKYaWt|7`_w4M>mTXDyy^w??B-8+*qjUt3qMj8!bCy$2@9?mfvv3|Ncz3XPch*x> z5JgZB3D8FHW`N9O(E3V@9Q~#t)FjsVzQ|+ z*$Zc)AGY90GZRT&QDyQ(T!g=xnV28F*9Y&y9{lbl*QiX!aT>-T;n0-CJghb|k$s&! zoQR1iaAeeo1$ZI)_hej&r|^`SiOeCdP?_uzJ!cGeo0+J~`TrP>$FxH{XFZm@r{>F-r|b;CWnSW}>ANrkIY0uo`1=7S`ae=!>5Cg_(() zv%XV;yKx3K;&3*(H-_Mw_|5@_txWzsz8d{z>Ik2`7^875s_-$8~4lco7oE*J(0j^S+%ri5Qj=pm-W<=jzcbFPEAJ^eO@n6^- z{m=XG-AGW5?8$?b`5oSlMc5SG?_Y6VBqUu?8BWCqBcc5k3el1!$T#Cg{K3pbs+0SG zIA&(;LAwBrz^KTI&5V>zH@zxC5jJHwZZ$K}6m8ZE*coZU&V-@|n$1ikRVH^vjF2B` zzoy82DvPe4&T>)*RCf^ykQu!TRzb0bbd3Y>hx*=IY@dQ4G<5VWwnK2b<{GXbc zXo@uY`FLxjk+ZGO8ThB@9$TXC)e&9Nyijt5%tOrJwiAD6Y8SMW92788+Y~%+FevZh9S9iq|U0?~Bb{ zd?poHfs!M<_I8v<7N|FN9#-t~%F%$xRcg(7zbUfLeY#ok|Bq0l4pTS|=N{XlSK$%f zL(@?R)v=~b7w@OC+{vzJe-!(4Tas7FeR`#6XXIP=j{cra>BveFY*C3V2C-`YqL})CmqJ;e}dC7TV-$QqOy(vd{~E3JvpD}%h=aN<#Zhd2UW5v5>hv=+ z6MI!A&&Mb5-7iN}SU#-vW%q8cnRGf^G==FL&S{c|B5(BaBBrBp_awVZNCODw7+8yv*b%)=5OdvL8ziWWp0G(R1yJn0l1T{lv_~JY-ZRhX@I(7mo5i&c-{1;<|BB@Y((v7-`=P_}0ttr8AB!4^SHkUcoU~ z=PM$2XS$G)ADHzTjPa<(r@LA5^Rg|k#9KNPtfoqeYmbrFMJC)6Kph+LrZ zqqvV@LUQY|PO3m_R3>NR-AAdtUuzl}xlU_4h)>$kq%!$*BskslI*KXo7YfeG@%M-M z{bKwe3ZgGFGf{t(_YsR+hOPqI)+iW%BjWUNhpq-rzCi{4O)L~4z+5X-hYmi>@Arv( z==+Zv(|>(a>mmI6Zh8|3+DA+6fqDJw_6c7ep5Ijr(*Ay`n~mPQ?o(%)vZRCW#NQyy z5EF6&M*}@KL_*)0OH&d3fAy>UOzlWvk8bvTZ7jt?T&psL$^y>Ib<)D!D69LeOwH0vV9|EkL5(hh`eh5(ON=_sf0 z%2BP*vG`e)$=^r!ko^q1u`H?}?xtfT6v-^N=xg|Qp(Csvs;v{c^OguuVn;4SCdU_# zb@6}g_i?1YdweWKrR0yGR}U%@42m&f&0lW4Xu%a<=zU$y_9y$bwe)_0?<`5RF3jX7 zlDaNSiDe1KCcGbiE0licQa%30%tU=u>(ovi6(ANkytZ41SVuy_@8kG_kloIua#X8K zo?~WWe>aOC8=(konU%?enTcJvKHBtyJr@Uiq{l=|wm0khjggQH5$bvfndJ7awp~JR zbddl>5}Iuem9$F5TAK^bxq0m9`TzXXz(L!V^?fJ5E@D6d!y4J1rfEN`nhJ^+Hy4%9 z`1AC4eQfkIKi|G1o!XkoPrN_+?T$2Pm5?(i)86$Kp7Hn5>rgSvD52o71zUxDPu$Ez zDq6bv zxafU%-M;93cg>C%iD(T*2))|3n3+hcOx`VY6#hkJ za+y$$G96bP;(E*RDFF^26$$Dt`~|;JnS3gGFLj6*ad@O~R&=xX(FdX(X})nn$;BWc z7m-^pR2Nxssd#h!W2fG7 z_WY3zdxs2QdLiQq8CArjUJNcGFCEW!-(_F0c*-S4Yn$TAQL9Ir#K z$U6Q8i#sd#&O^E~S%|Mnx1A?1K8M(sq8{_|=vv1|!rfII*xr=&s4xzvo5PQZP`pfv zM`|iRf=40~6ORSQIyRV!9+V%)sr@;lfYEXK7BehC|DI8`Y$oF5_QvdXhdh%P7fYwa zB1tU^e#M5zdB-dk?|lR075aq;K7Iyg#VPs=k5rLX*n^UudFrdvTHp8uu!Rv)kwsj*qVc%4ktc<;%Zv9(c1VLFLquOxXfU}@!ULw>+4zf zE2hsow7Yi97wlYTKM=)}d+MUeZ!N#pL z?Iitr!uO9lc{iBSOSo$wQ<|xZ5sNDB3JV!gKyf}rsfZcctLoade!I3vcf$C2S@26d z5`-u@l4_-9J^%R(KUhm$HLZEX%E*kTS1F|_T2A5v>G@espW+l7HsC%yIHW7?Q5c- z`3x#XaLO7MUd%TKa!rP|LI#u*-_E!rEh;JrZcf28Mi1t~-ked!q-M6R=Z8-*d;Q_{ zRv(~oRE+08dNaQEpwN{L=Y|O^e4gfxq;>*{J`}B|DNUx4RNYZ(_yqADOdrHqC-cYg z%&F$tR`x9Bp7}JS4#V1%kT-*2WBFiT&MjwLf<6TibRQ=#mBj-&BPL_{^yx#N-kjWz zs|NFr&+@{KS8t-su@#Ep6kpCK3K`c-YkN;>EQg^FRUgqAFdxMq2d0f};@&6t=sIfl zk*dvExRZJ7G=4se`+ISA5BjH~dx|t)zoC?DKg@EJ<0zUQwA?#}aeYP9(9;_3=fpvr zm(M$Q@u&JD6N+hlIkPcqol*gw`e+SL&kF(hi)bu`SMtSvT)mBl@&dv!|8eeHeS|_O zKz%(D3~53sgZgpp7_QAD)xxetJe2B$F^5oaJOc+Yp`2->_;6p2Yt2%Ishqvcbg}0R zVUP2Nb7ch+d-9Qocw)zETrF`_LJYoV)qDsIH<0{+Tvte5`_!{cv;nE$j&1HBAdkP5_a4VT0TL^p&etm#m2xm~6vYFn7WSoco}*{LoJ%G$X)x~|!VSIYn@4^d zvARPj!q_4BDCNLJhOwsyc>n$Pa(~@xXfcjhDDtqD#yk1j53qMK|JatLA#xWe9(^b8 zV1O(WF>7m%3zd%CmRfc!=aY+gWHbBsl1_K*ALm`l)x&vbeRL1GE?Ha9h5X(pC!*&|rHW-lAslQEOWA zcoyTQvp(Are9Po+*0fR6!uB$z_hEQ4C!j70Nsaq{&+qnjvFAlNm5C>CTM5N=I!^Dl z-%AtQnmQ@9D8fX_PvqNu7+aIY%pJLQ@hGku#mRd)Ey=8|)@(9`Q~5$EeVekFF%j0K zZWVWI%5jCt$s5acJsDn~buUqc=D>6LVl_9dJdEK57t;4+emRPB_Gc-hY^q^Hb>v=_ z5xa`BCh@)goRmjivlsiGd53U;bz(tcT_}!*plrsB};iOA4`%nY@(`x))ta~69VF!vKtoSfq664JlS*zB{-PG zWWLgaK@Eoyr?jwje+Snr3Bpx=Hs2q{)eRkNUM9<}%O{m0wTB&Rd3+(i?y8uol-P-! zGKP0G6U%N^FC?>yA1`A~w#!!$ti-?(%uGe!$*xl`A<>`nN)A!|+cQ{*k<$W7cuuXC zYK3;;+{aT@kzkIcbUgnyf>ZWoedkaXA(O>a`8l3Jb5_vZnVXdk`xG0@2gmZi^IoHt zgrkOJm(jGAXPUXZkm6?2yV<=XAS4=tU}Q36k~tE89K}7Dmdep4d8lUlW}fK^o+}F1 z7&M5B+On8d*MVJgx&zHKfs*t1{wQv2%5uT7g`qIG7^zJ>x|LrwvayO6*0N_8t(h(~ z+92{r@sF_xp3b%s)vR8`w_eDx5@RSlm4B&Vd{f78b$TOrSG@$(c`;3)*U9{3BYYYy`cA$A&<4(GkCSsF2u1wFsm}y=EIx*cNqk@= zpDbiZYbSycS??a@A+59f4P_~gmI^SG;|l28)`8F2$ih8cWOvJhkKTVE*JU*|w{7Cy zBo(8$B$gF`W--+M97b?1)5dXYih`Cb;f!Ji&D3w=KcD40%c!mCB;fCi`VpJRWhD$~ z&S9Ya>{!q2y*Ywf5-iIn%P6nwK$Aum>pKhCnd)5W#82mMr||I)l7098~QVS04LT(0@0BrpyO(T;_yt>bNJZ&;3gkB); zpxllqPJa9~od5f(PaW??tS_e*lb_02@aUwMm33Y89*m~sG;Zy~wD!i2ojmv#KDdj! z@;i8_2$6cxB2T2pB!1AB5zRT)swB8J%jR+I{e0mG_U%1FfhfT=29DvT6#3b)L~%e{ z7Htbj{oLeQtc7H<1Ews(HWsenp*@{I%RPdypD>btZVm8n-Sd3l8P@gVl)?@aVLDif z#?{Q4!zXsLx{remH0kK?J-oCHv0bq8LoE2mwd`!@#GR}r{Wy!OxHB&cmd>SGs&;oZ zdGgI>DN0E6VtTuOn~m4k(Nx9Lopr`k;7qO_%?&NY3WLwvw4NV4N7KX(T1O*6Yi!JN z^ZF4xnX~$HWN(7{c*m&O8m&r{z?oShKYx%+E9C)}7u}gW^ zP%g`jmD+oN*YR%)vJcnEiM6Isemvjp8>~}i1K*p)L>^z!kYJS+qX&t+YN#^?dHU zmh~C_se~zg>E9OI&wcCpRfgeXxuPYDftuO3l$#gun{8bvw5Y@G)!FU>r*3)mi> z-u5chg1s&*#bkz*a#AYC1jmC=tX|H_&c1sJ{YLSH81YoZ#GCl(+;D`JSO?lOI)7`! zrZDVHbe!s-iF_v(5>N*|7bmrvJD=ktOG2{ns3F0jln&zh?72Ph=(U#rdWNT(U;3T0 zQGBu_>%OwB#C8_1+FSSgz^VqV`yP=iL z1N`+zT)L3=Y+%+}ezJhef6Hf6Y|PJD->v-YxBS=BhlmAXDua7-Rqi~a%t0WaZ3n+T z6o~MqvJ@jYvp<9CJ4o_1v!t_lVi0*#xUnC{H$|IS&z7ZpYik!Rrjc9LmW;xTih%!L zHJE92S%R4$vytCD#6PW|;pG%=7Y0=8lyauFWo>?O(1Obs^0f^e+;ct!Z4@Q5)+LKs zQd{`WicT1BBzY(Cu?c)Q9W?v4WqhcXrVHuchg0$>&U6wWw+l;KfM?tG1vlo=Ud&0- zR!8!D#*OB0TC=oznud-1r1miKh$oOZg`0XZyeS7{Y0tW^XU<}tdMzuOUsa*#9V$&v z%iaW8n^MQp>P{B-OvVi6@7n8Yim;L&E@WF>2g#ybFDiDBd3p@t1MT^d_MxoRtXjZl zm(h?s{O5^{r&kSiYiW&zQus{25G-F`LcB4{N~FkC@gH+vdR9j}>U4GmquV-gi}tW~ zHILPFqA)Ju+R@z99BJD%e0dvN-cDt2-qJ?T7=^j6Qy5QZOR|G?-$!O&G#H^TdHp!8 zn6kz!A>Yo*&8%zAVyHY~DKe=SBYpYj^YPLAUAhB-C<(FQ#^ro^X$~mzrWT4pl$3F9 zTh?M^4!St|*YL-VRQ?Qlp3HysV`N>l84YY%#?PxFm#KHC-O zdM)3Y!`8zUh|%Ov=cJRkYZG@I&%zg2x1Q=z^y|yT*;5A!BUpGYch__vzr86O%8g|d z?a$HVX;ksEJGZa)R*@QYDg(nc(qr37MG>mCah;n{tM7_2aj ze#i0owg|b(3s85{4t}#KD>gcno|BldkvWe>u}^Ub{!g38*9$l>W+Xc)TF;(EyzfaC zw|Q;pRTYX646I;GGDlk_!p5xH+)2)3IFkl3Bbk*R z2ZK{tjGZ5zan7nv8qWGtTF97mj>1R;n7Vo+_wDQ;W;%|dv3#y41Kayk3g|V1J7UD@ z4<`IV+iS-GaFn6vGTS~`BTG=Pca6n7Lf)U&3(gHq_e!Q~p8iMsS6S7Ot8?i)b) zq@b$%quK7=@sym(`2%=YKhEmO z&?ND?a8C&&+t^=7tUqTLkZ8>k`evFo@Z*|JpwzKU?aPFg9K@+01kCr%4Tsd^#xAkb zxn=}6G~}R4t9^m3l8sm|&KtoMy~B8!c1B1ylPZWhUvq>bFC7)urAcL% zP1Lh&V+Vmp2@#X;lo8Csis|^vP-A)L%gtg2Q?G8vNvVz7c2-2u&v7@2Mg-j1Zx# zCZ0Z+8>-(Oj#224%0e~pCA}EZkfrGxnX@iy-FlJtHZDD$ueA}+V^~AheMJpgG9iAu ze>Govnibn#hl3_w6`?2$zWDeG`sYHOkxo6a?t;KkuJcd#)t=yx8!8Ob?&saeBZ6g9IppW}ydMk?zW z>RDG4gmQ3ue@W!ax2>b{1sd8qS(}jz@5ks=j>1UMx|TaPW?}Zj0!lUbWWLjv>zg8r z)NUE#0X5pWoSRqk;8J#1lj$9WW4Q&GXi~s=kEWs@6UOs}3Pv?&F;I-Q8a7w6WCy?A%rooRwVtNSscj8SIbEJ>mmP1QEuLdo zW>9t_m1T^3o-Zxu*DI)sg*u|tyZK@vXEYpik5uzajJ(q5;Fb2VE;X!O#@)L+(TLM1 z8qcQ^IjB=qd$nZ^kMAK<5Q6H0v$=9CU+v43_C~F!9k{uQB~5Hw$G0Eh`Rw1!bb?yP z$cuFmQw(Ed4^D4)PfG&wSG$$Riiy3I_l)H;RXntU-?oGa9#@vqql}sdc*``dn8tUL z6qV6?I$tZ{i;uId_H`0RysAQx2tH}gAyFl2EJsuAr)nb`>Z8SZD;J&|PE;BYr>MOt zr!;KF_LY2X1@~;DVJ9uwi@KkhHj)J$2t{s_OXgr;T9!G8d@2t?S$)>QP3V(N04&s8vfxaeo;@`c3SE?X0{IB>#Fp9C});2urxzS$ zIi)}2dNO7L?_J454|2gtd~!JNIG4YBfNvC1Jesc-P%@79_hxb%mpvF|(*IuxMG1Mw zacO_XH*_E{^(@_+g`zgIcR#zz7~U>K#laLm`aBx6wF+EAuHI&f5~S&gKiJ^Xw%4^=%YA&6juZ)MRccWm+#z zJegbe@bTwfJURW%FBJXAAIuf)CORjZ+P0J5wKGi~9_IOGK65sYCMb-8y2j<)G@DI_ zN_BSC9o8JW{x;-=bFSN&x->uQYt4blI}YvCdjJ3xfk{L`R18Tf$Q#IvVoI`wqLycq z=o5VJyw=FFt>S@2ENFgdZlT~DzA}l=wo#CqSBc87t9G!oDOj)4e1_uc$R-4*weGmJ0fu z%7352`^y;k0PjgrJDTrZ$fQ5>&edEpl!<3^&m`X4%+?mZx#)FtCip8_5Lkh!Od7z& zEm%tSh|vj+XsuK0|OKs&p(t!B?*b(g8Xg?%U*8ozmCja7RIwsk)E6}H4G&_ zBoz~{;KYKg2AmXa^{gIANk7hO?{I4+vz5Eo=4|%qVPwtMr|>yh0+H?34x`%ANuam}=>;cE-nd#J*r8ZtYWm8L27;@GOGr31@b6z=t^KAh0(MU~9S zwLDl)W_S>SUthzcBbm69swI4EJ?qDE(UtssF%LY?wf#8lDjps{@8?*!m=9L7;{CtP z{AB*IiPn`onW80EAeutZ{KvhtrN}(VqBa)x34ZtiSadJXu3^sM%w&yXsB{PML##6k zKY&XMqNHiNAST)ILKr|{O=weM z?F^3pBTp>k-SzA|jxV0W$vyu+xKHC4GKlN4djr}LjP*S7Eca$N%S;Z)#V2~uqcLKx ztvtMx1$z&V`Cqij?S+O7tWHIpGfy?MR!4<@y@J;5cQW4@&U@43E#hkp>>d`z^dDf{5^QGPY8FI}cIIr# zj_1yPjHx-O;ak@8@9PfJA5R3AZg2sGsT}kv-Z5fWQpEUFmg^J?Zrzi6qU`^6T7S)= zbNSR&j6IHX2Xfka?wG|tq}V-)_hl$}gin=n;xzuIhzAO}aW=E#{Qar?_;mg^!3~eG zc&EcMkPUWr(nclYxGrphJ?c7sGbHPDDkG1!4#9kb~EZarPVDc_x z>OnJf*ph5ua@zMLae;GH8VDtq%{C3_xE)0Nv^9jZD5TsqhiyhV?><;r- zXXW7G`GdK>I3&p0Yn+~3#>T^qz-riC$Lf49$(rXS4t^%RoZoI{R&m5o&4JNIOy_P(c?7Y<&XBwKeQTDh7M+oBT6tEh>SOGj$A=r(TplrEV~Bw!ozJXm`2M*J96~`M zu_9uF$iITgm+^~%jLw}zQB6}F>!Mk&26NT5EI)}~^kQ@j8~DYa_|y~BN5cc+nXCk0 zTX=4h`Pz9LH;r)<`AQx=+RI~#g6nzr(>#78lh5nO%xCp#zMM}oFDu^4Wr9hers~!* zDzb&5o~o@p+1YP2ka>l)+Qr5-RAx65O{07wUo5AhCTJ=< zS+$nA4M(u?`C%OY$O!$BjW4*X|Du1cv zxft;>CJ*7-z6{^N$^--Z(W@~GG)V8Dc`px5;M{cR?T8o9JL*f$Y~|kP`0VpE6os`Y z&Wn3=@?VY7e9Lsy&!e@TQxA4xBxP3Suy@rY>xOpA#Jcloj;I^w6 zbwA%3#HV`j>yey(I^Rz6$=R>+{HJ3s6w@d>UT`RjN=kAE&#EKaZxflmbOlvfMD4S}@{E>$mdE4>)`#`3)9&E;m^=52; z#-{mbl%0;H!$iMd%;7U*nSK&KDJD@$&)w|Uz^?}Lj`EP)i$$>M_A37SS#Ddx{&bcr z(n4clmd_tMh`7ZDa$sm>c1kIn^%Zlu44IwcsbPeY1 z&2dBPSyz7;r@SttzJO21XdcT=*HQH_Ki#xnUTe8N#UcGUuqo zBvu$PscBCsqKMAt8LpmJAp4nvlP?<`!z9a~?IE4!LGIu;>Q z&7%6lV9aJb8@m5KdjYG)a?9oP{4GDI;FEEBjSc6J-_gi>XY+8JkDSU+FJzWJN^?IZlU{wT_d8(F!PpXO84N?{#~ux}o}?`T6?u#v`1%**3XO;qn^ zf09H=$T7BVXWR zKI8akg7UWTUS=b+Gn8%Q$17QLIMID7D3P|^EEr3#seGw|f|UXGzCT6t5Uw1;S^2Da zggHH!KY|Yr;k=#v`8n>+W6w~o7{Lu?EZNEWS9(l;tT*wZkf_P8rFs2PXrZ1spAl#C za8Jf(cXvhZLG65QypQ{`t;9(bUl&e8I={hz3e4&!xZs{}^6F7hk1#*!(h5%5Ol2`W z|IF&v!~AY95(6k18P5Aotzhl8kdH`p)Y6$Bauk^(UAPMJPGw+kMyzASM(VERz0>$_ z#M_&($^%UM=XyDo*$mI{$b8(45MeZ zt_ux8N5qt;Q+5TnjpKbQ_@77lhjlbx#HlCoee_$%d*(8CJX6o&N5%A7!i|se)G16k zgWG#BZB=l;|7Y$|99VPM?o)qy^kl$g++N3Te!@?8AAyGMh4UCbga57QKp-+SE#St7 zxj$PVdInQHvYg57F-JTEYQLTLGS7gHh4UBcnyFgHu1#HxnCu8aX`p2*Ezk3OM}Bz+ zaOY8Ju3FNMhI1IIig5{J$Mcm$)JfMqi)ta?Tg4AvI7R_yBXy0`$B9g@yRPmjpKv$EL+XL-@~)DTyqvbI)h);bIn2)7x1?i z@yAoRw~SlnP`QUI&*ipLxIIDfZf@W33Y~ZqkCAGk?ldkM!j0uTSI73lIeNDT-onTk z+})cqo3jKWnn0b|#7}2&d+t$G6DT~JTl#TkE!A6ivY27(`1%~yyqu>^k=Y*t+~w8Y z7>Dl;rr<*UWdv_&%tD*?@WgCBF^k>DYC2deO(!s;oZ(COQ5B8FIGd3Z`Ffl_?GwZo z^X222S;2r8c&h#=6+l%;20k{B(Ifak36Crdhx61IGkX|U_2%>#i`TL$&9XA49LERx zGiEb?T*pI2q=)dizHF>x)$UiIb1&W)V7gRq77XFq3H)7OO3PVU6~-xcNJB|n#+j$_ zi{6~v?&6X4{IZ-0*9}AH>&3hJz=UY&^!L=LZs6`>8EqUIk}O<{kaHW+;0LShtVXk^pzcCQ@<* z=g;746Zu93LmRRzL_sjanJS*1&xamkM=pntB5@wK^k-@v)erIh7Fzc3)I2t){Qsiy z6rRhigP9(cowTEMcRj?`()Cohw>6cfRbNplmoy55(27&qPM7|W^`UTm; zgG-{bz)(_g(FuGtla*br zXUE(ytjJ(tN$Z#%iCf!JV4ZD`|m1s20yjiR}7Wa|D23j^U ztAJT0^z6k)`mp#x)~;bk1NV+#>}38SLBW%JHBQwSJ~E6`Yx(nitSjWcp}b>6P~uOm z3zjZ#dd`~)r<#;1lwWAj@g?7qDeA-lCS;Xq@|zKz^EpWC|1LSDm}Q~Biz zZd}gNjZ{Z-oiZ)2!|4vMBwfzPOZaOc!)vLnWBE3IRm>15&x)P=rk+P?!d#%i zWt8U;O9(YMMGiDWH*aCqeBS>c_bxj`2||9TQMzvti`P+?B-0umB;)@XjiTZ>-c!d5 zf9BE^{Pba-TE>?8S8zRc(YBSw))4>2rgF{*&fUPz9|=>&H}4OFl{3vbExX5(YC@6W zGv)Lf$Cn4Oc6XQ<*s_Nw`%^H18_Kz0Ge2L#9laSmhVS=h)$=S{!-IXu4CY(MQC7&J z9VA*u_;^^XVeOAT^!m?Gq0A0sv?=;>3-oX^jimnKK*4Y zY26)Sp4PEk){}E;cyu;@7);A>zSo=jl{~+i=LWET3|}9>)D(~G%*oatwfoeS^z;pd zarx~rM0Ct+YENWhyXnZO2eI-91+0CIT*txT5Svp`zm)Y=G`|-6IfD3G!l1ibYq)1Q zw?EAO!Nf0P#*~nV?e#p@{+VYk(`J)bcX`B^jTXESpS4cW(%y=+U7 z3v)Jv9_Q3vQv0Gm>kcuTx0|}A)(}*uTV6xgu?5@MzK&hHLksL{LbYUevax`Nhx5?^ zTsR^edbwvEo0I%5L4Fzk(4TdGVs;^aDdF;gVQ}}7C)nAG$I6(#mlw)tE(!2_I&-Xr zqMP2llnR28c|E{>b-`_~Y3BanArg8way|9lMgC@o9F~hjBc${djf+SM=ceRvxYnh-bG@bkiG? zTCj{AY5vfUw@l`yK5VLI(?XgG*;vZ3!AwZ8do$aUp-!xzH)RRhR#3MwWXm@eF(bp~ zUg0>lbYr(rbkiG=GFTr_q*-O`8^$feD2TCeX&C0VJwd|=-Zq?}`E1)nZQszfH!M!W z7MeG*AP+=uN+`kkMtFFqm{1jrFv43q?1* z;ixgVQ?=F19?a0ee0ETn`L%U9t<@|m<(ZLup%*7KGHVMh{Yi}GU4xn4i|upSx{Ku* zwhZBlLVE3IYqwBz(;JeagDBHmSyjf0q5Sh$#+R~uH4XErYT@pIoIjXL6Fl=gd+T{_ zBtv`gp)xjYV8=Qdw)1=)+nc&AMK`_CsTsT2UCdKGIdwQ69m>YtVR%Gy9*_57!tl^N z_}qeU{PMCm^U~p@-o`qT^`!TP!*1HTg`%6@@YI6s)a_+XU-tIo6GKC}$_vYB*~_!# z?2L1211opXx}N>}+1(ljZ>O{CqGH`k+D&gJDkF9tBZu+NZET*$ZJWa|yx4F`x6o8h zB9GL%PFftgEk!rIsVIpmYT`Uq%D4es+>>?N*uR06II)vBc_1U#u(4Yxy6OLoU~Hnf zhJ}4;>BmO~hqm4wyGbS4xrc50I_c->7K(0q(^4(zeQYUU;RrrAj6n@7*+Ozp7Y%OR xLeWicYO2T1@WsetSizeConstraint(QLayout::SetFixedSize); // layout->setMargin(Style::WindowMargin); @@ -24,12 +26,16 @@ AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget() // logo = new Logo; // logo->setFixedSize(600, 106); // layout->addWidget(logo); + image = new QLabel(); + image->setPixmap(QPixmap(":/res/vj_title_small.png")); +//hrm, this doesn't work + layout->addWidget(image); text = new QLabel(tr( "" "" - "" - "" + "" + "" "
Version: 2.0.0
Author: byuu
Homepage: http://byuu.org/
Author: James L. Hammons & others
Homepage: http://icculus.org/virtualjaguar/
" )); layout->addWidget(text); diff --git a/src/gui/about.h b/src/gui/about.h index c448651..7397e3b 100644 --- a/src/gui/about.h +++ b/src/gui/about.h @@ -18,6 +18,7 @@ class AboutWindow: public QWidget private: QVBoxLayout * layout; QLabel * text; + QLabel * image; }; #endif // __ABOUT_H__ -- 2.37.2 From 7de4f207c14185e6fceb8f6b0c63e7ec5bb5d546 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 22 Jan 2010 22:05:11 +0000 Subject: [PATCH 08/16] More "About..." box tweaks... --- src/gui/about.cpp | 72 +++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 46 deletions(-) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index bd3df4a..5a3c02c 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -9,71 +9,51 @@ // Who When What // --- ---------- ------------------------------------------------------------- // JLH 01/21/2010 Created this file +// JLH 01/22/2010 Fleshed out the credits a bit more +// JLH 01/22/2010 Fixed centering and decorating of window +// + +// STILL TO DO: // #include "about.h" -AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget() +AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog) { setWindowTitle("About Virtual Jaguar..."); layout = new QVBoxLayout(); layout->setSizeConstraint(QLayout::SetFixedSize); -// layout->setMargin(Style::WindowMargin); -// layout->setSpacing(Style::WidgetSpacing); setLayout(layout); -// logo = new Logo; -// logo->setFixedSize(600, 106); -// layout->addWidget(logo); image = new QLabel(); + image->setAlignment(Qt::AlignRight); image->setPixmap(QPixmap(":/res/vj_title_small.png")); -//hrm, this doesn't work layout->addWidget(image); - text = new QLabel(tr( +// QString s = QString(tr("(Last full build was on %1 %2)
")).arg(__DATE__).arg(__TIME__); + QString s = QString(tr("SVN %1
")).arg(__DATE__); + s.append(tr( "" "" - "" + "" + "" "" "
Version: 2.0.0
Author: James L. Hammons & others
Coders: James L. Hammons (shamus)
Niels Wagenaar (nwagenaar)
Carwin Jones (Caz)
Adam Green
Testers: Guruma
Homepage: http://icculus.org/virtualjaguar/
" + "

" + "The Virtual Jaguar team would like to express their gratitude to:" + "

" + "Aaron Giles for the original CoJag sources
" + "David Raingeard for the original Virtual Jaguar sources
" + "Karl Stenerud for his Musashi 68K emulator
" + "Sam Lantinga for his amazing SDL libraries
" + "Ryan C. Gordon for Virtual Jaguar's web presence
" + "Curt Vendel for various Jaguar & other goodies (you rock!)
" + "Reboot for reasons too numerous to mention
" + "The Free Jaguar Project (you know why) ;-)
" + "The guys over at Atari Age :-)
" + "byuu for BSNES and showing us what was possible" )); + text = new QLabel(s); layout->addWidget(text); } - - -// Byuu's version... -#if 0 -#include "about.moc" -AboutWindow *aboutWindow; - -AboutWindow::AboutWindow() : QbWindow(config().geometry.aboutWindow) { - setObjectName("about-window"); - setWindowTitle("About bsnes ..."); - - layout = new QVBoxLayout; - layout->setSizeConstraint(QLayout::SetFixedSize); - layout->setMargin(Style::WindowMargin); - layout->setSpacing(Style::WidgetSpacing); - setLayout(layout); - - logo = new Logo; - logo->setFixedSize(600, 106); - layout->addWidget(logo); - - info = new QLabel(string() << - "" - "" - "" - "" - "
Version: " << bsnesVersion << "
Author: byuu
Homepage: http://byuu.org/
" - ); - layout->addWidget(info); -} - -void AboutWindow::Logo::paintEvent(QPaintEvent*) { - QPainter painter(this); - QPixmap pixmap(":/logo.png"); - painter.drawPixmap(0, 0, pixmap); -} -#endif -- 2.37.2 From be0b102eec76acf80acce7cd3de8e690e27564d4 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Sat, 23 Jan 2010 05:58:20 +0000 Subject: [PATCH 09/16] Added beginnings of graphical file chooser --- Makefile | 1 + src/gui/filepicker.cpp | 102 +++++++++++++++++++++++++++++++++++++++++ src/gui/filepicker.h | 5 ++ src/gui/mainwin.cpp | 9 +--- src/gui/vj.pro | 2 + 5 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 src/gui/filepicker.cpp create mode 100644 src/gui/filepicker.h diff --git a/Makefile b/Makefile index ebce4f7..870cd31 100644 --- a/Makefile +++ b/Makefile @@ -74,6 +74,7 @@ OBJS = \ \ obj/about.o \ obj/app.o \ + obj/filepicker.o \ obj/mainwin.o \ obj/moc_mainwin.o \ obj/glwidget.o \ diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp new file mode 100644 index 0000000..2280f82 --- /dev/null +++ b/src/gui/filepicker.cpp @@ -0,0 +1,102 @@ +// +// filepicker.cpp - A ROM chooser +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/22/2010 Created this file +// + +#include "filepicker.h" + +#include "types.h" + +struct RomIdentifier +{ + const uint32 crc32; + const char name[128]; + const char file[128]; +}; + +RomIdentifier romList[] = { + { 0x0509C85E, "Raiden (World)", "" }, + { 0x08F15576, "Iron Soldier (World) (v1.04)", "" }, + { 0x0957A072, "Kasumi Ninja (World)", "" }, + { 0x0AC83D77, "NBA Jam T.E. (World)", "" }, + { 0x0EC5369D, "Evolution - Dino Dudes (World)", "" }, + { 0x0F6A1C2C, "Ultra Vortek (World)", "" }, + { 0x14915F20, "White Men Can't Jump (World)", "" }, + { 0x1660F070, "Power Drive Rally (World)", "" }, + { 0x1E451446, "Trevor McFur in the Crescent Galaxy (World)", "" }, + { 0x27594C6A, "Defender 2000 (World)", "" }, + { 0x2E17D5DA, "Bubsy in Fractured Furry Tales (World)", "" }, + { 0x348E6449, "Double Dragon V - The Shadow Falls (World)", "" }, + { 0x3615AF6A, "Fever Pitch Soccer (World) (En,Fr,De,Es,It)", "" }, + { 0x38A130ED, "Troy Aikman NFL Football (World)", "" }, + { 0x3C044941, "Skyhammer (World)", "" }, + { 0x42A13EC5, "Soccer Kid (World)", "" }, + { 0x47EBC158, "Theme Park (World)", "" }, + { 0x4899628F, "Hover Strike (World)", "" }, + { 0x53DF6440, "Space War 2000 (World)", "" }, + { 0x55A0669C, "[BIOS] Atari Jaguar Developer CD (World)", "" }, + { 0x58272540, "Syndicate (World)", "" }, + { 0x5A101212, "Sensible Soccer - International Edition (World)", "" }, + { 0x5B6BB205, "Ruiner Pinball (World)", "" }, + { 0x5CFF14AB, "Pinball Fantasies (World)", "" }, + { 0x5E2CDBC0, "Doom (World)", "" }, + { 0x61C7EEC0, "Zero 5 (World)", "" }, + { 0x67F9AB3A, "Battle Sphere Gold (World)", "" }, + { 0x687068D5, "[BIOS] Atari Jaguar CD (World)", "" }, + { 0x6B2B95AD, "Tempest 2000 (World)", "" }, + { 0x6EB774EB, "Worms (World)", "" }, + { 0x6F8B2547, "Super Burnout (World)", "" }, + { 0x817A2273, "Pitfall - The Mayan Adventure (World)", "" }, + { 0x8975F48B, "Zool 2 (World)", "" }, + { 0x8D15DBC6, "[BIOS] Atari Jaguar Stubulator '94 (World)", "" }, + { 0x8FEA5AB0, "Dragon - The Bruce Lee Story (World)", "" }, + { 0x97EB4651, "I-War (World)", "" }, + { 0xA27823D8, "Ultra Vortek (World) (v0.94) (Beta)", "" }, + { 0xA56D0798, "Protector - Special Edition (World)", "" }, + { 0xA9F8A00E, "Rayman (World)", "" }, + { 0xB14C4753, "Fight for Life (World)", "" }, + { 0xBCB1A4BF, "Brutal Sports Football (World)", "" }, + { 0xBDA405C6, "Cannon Fodder (World)", "" }, + { 0xBDE67498, "Cybermorph (World) (Rev 1)", "" }, + { 0xC5562581, "Zoop! (World)", "" }, + { 0xC654681B, "Total Carnage (World)", "" }, + { 0xC6C7BA62, "Fight for Life (World) (Alt)", "" }, + { 0xC9608717, "Val d'Isere Skiing and Snowboarding (World)", "" }, + { 0xCBFD822A, "Air Cars (World)", "" }, + { 0xCD5BF827, "Attack of the Mutant Penguins (World)", "" }, + { 0xD6C19E34, "Iron Soldier 2 (World)", "" }, + { 0xDA9C4162, "Missile Command 3D (World)", "" }, + { 0xDC187F82, "Alien vs Predator (World)", "" }, + { 0xDE55DCC7, "Flashback - The Quest for Identity (World) (En,Fr)", "" }, + { 0xE28756DE, "Atari Karts (World)", "" }, + { 0xE60277BB, "[BIOS] Atari Jaguar Stubulator '93 (World)", "" }, + { 0xE91BD644, "Wolfenstein 3D (World)", "" }, + { 0xEC22F572, "SuperCross 3D (World)", "" }, + { 0xECF854E7, "Cybermorph (World) (Rev 2)", "" }, + { 0xEEE8D61D, "Club Drive (World)", "" }, + { 0xF0360DB3, "Hyper Force (World)", "" }, + { 0xFA7775AE, "Checkered Flag (World)", "" }, + { 0xFAE31DD0, "Flip Out! (World)", "" }, + { 0xFB731AAA, "[BIOS] Atari Jaguar (World)", "" }, + { 0xFFFFFFFF, "***END***", "" } +}; + +/* +Our strategy here is like so: +Look at the files in the directory pointed to by ROMPath. +For each file in the directory, take the CRC32 of it and compare it to the CRC +in the romList[]. If there's a match, put it in a list and note it's index value +in romList for future reference. + +When constructing the list, use the index to pull up an image of the cart and +put that in the list. User picks from a graphical image of the cart. +*/ + diff --git a/src/gui/filepicker.h b/src/gui/filepicker.h new file mode 100644 index 0000000..ec02cba --- /dev/null +++ b/src/gui/filepicker.h @@ -0,0 +1,5 @@ +// +// filepicker.h - A ROM chooser +// + +#include diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 40af9eb..69634f6 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -102,8 +102,7 @@ MainWin::MainWin() connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur())); aboutAct = new QAction(QIcon(":/res/generic.png"), tr("&About..."), this); - aboutAct->setStatusTip(tr("Shows self-serving credits")); -// aboutAct->setCheckable(true); + aboutAct->setStatusTip(tr("Blatant self-promotion")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); // Create menus & toolbars @@ -139,7 +138,7 @@ MainWin::MainWin() ntscAct->setChecked(vjs.hardwareTypeNTSC); palAct->setChecked(!vjs.hardwareTypeNTSC); - // Do this in case original size isn't correct + // Do this in case original size isn't correct (mostly for the first-run case) ResizeMainWindow(); // Set up timer based loop for animation... @@ -229,10 +228,6 @@ void MainWin::ToggleBlur(void) void MainWin::ShowAboutWin(void) { aboutWin->show(); -// QMessageBox::about(this, tr("About Application"), -// tr("The Application example demonstrates how to " -// "write modern GUI applications using Qt, with a menu bar, " -// "toolbars, and a status bar.")); } void MainWin::ResizeMainWindow(void) diff --git a/src/gui/vj.pro b/src/gui/vj.pro index f95b90e..ae383ed 100644 --- a/src/gui/vj.pro +++ b/src/gui/vj.pro @@ -10,11 +10,13 @@ HEADERS += app.h HEADERS += mainwin.h HEADERS += glwidget.h HEADERS += about.h +HEADERS += filepicker.h SOURCES += app.cpp SOURCES += mainwin.cpp SOURCES += glwidget.cpp SOURCES += about.cpp +SOURCES += filepicker.cpp RESOURCES += vj.qrc -- 2.37.2 From 7611a21d2b36def66216598617d647acfc657e3e Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Wed, 27 Jan 2010 18:07:17 +0000 Subject: [PATCH 10/16] Added beginnings of ROM directory scanning functionality --- src/gui/filepicker.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++ src/gui/filepicker.h | 15 +++++++++++ src/gui/mainwin.cpp | 21 ++++++++++++--- src/gui/mainwin.h | 7 ++--- 4 files changed, 97 insertions(+), 6 deletions(-) diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index 2280f82..daaae59 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -13,6 +13,8 @@ #include "filepicker.h" +#include "crc32.h" +#include "settings.h" #include "types.h" struct RomIdentifier @@ -98,5 +100,63 @@ in romList for future reference. When constructing the list, use the index to pull up an image of the cart and put that in the list. User picks from a graphical image of the cart. + +Ideally, the label will go into the archive along with the ROM image, but that's +for the future... +Maybe box art, screenshots will go as well... */ +//FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog)//could use Window as well... +FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Window) +{ + setWindowTitle("Insert Cartridge..."); + + fileList = new QListWidget(this); +// addWidget(fileList); + + QVBoxLayout * layout = new QVBoxLayout(); +// layout->setSizeConstraint(QLayout::SetFixedSize); + setLayout(layout); + + layout->addWidget(fileList); + + PopulateList(); +} + +void FilePickerWindow::PopulateList(void) +{ + QDir romDir(vjs.ROMPath); + QFileInfoList list = romDir.entryInfoList(); + + for(int i=0; i + +// Forward declarations +class QListWidget; + +class FilePickerWindow: public QWidget +{ + public: + FilePickerWindow(QWidget * parent = 0); + + protected: + void PopulateList(void); + + private: + QListWidget * fileList; +}; diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 69634f6..5aae995 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -30,6 +30,7 @@ #include "glwidget.h" #include "about.h" #include "settings.h" +#include "filepicker.h" // The way BSNES controls things is by setting a timer with a zero // timeout, sleeping if not emulating anything. Seems there has to be a @@ -50,7 +51,11 @@ MainWin::MainWin() setWindowIcon(QIcon(":/res/vj.xpm")); setWindowTitle("Virtual Jaguar v2.0.0"); + ReadSettings(); + setUnifiedTitleAndToolBarOnMac(true); + aboutWin = new AboutWindow(this); + filePickWin = new FilePickerWindow(this); videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -105,9 +110,14 @@ MainWin::MainWin() aboutAct->setStatusTip(tr("Blatant self-promotion")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); + filePickAct = new QAction(QIcon(":/res/generic.png"), tr("Insert Cartridge..."), this); + filePickAct->setStatusTip(tr("Insert a cartridge into Virtual Jaguar")); + connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart())); + // Create menus & toolbars fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(filePickAct); fileMenu->addAction(powerAct); fileMenu->addAction(quitAppAct); @@ -126,9 +136,6 @@ MainWin::MainWin() // Create status bar statusBar()->showMessage(tr("Ready")); - ReadSettings(); - setUnifiedTitleAndToolBarOnMac(true); - // Set toolbar button based on setting read in (sync the UI)... blurAct->setChecked(vjs.glFilter); x1Act->setChecked(zoomLevel == 1); @@ -230,6 +237,11 @@ void MainWin::ShowAboutWin(void) aboutWin->show(); } +void MainWin::InsertCart(void) +{ + filePickWin->show(); +} + void MainWin::ResizeMainWindow(void) { videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256)); @@ -264,6 +276,9 @@ void MainWin::ReadSettings(void) vjs.useOpenGL = settings.value("useOpenGL", true).toBool(); vjs.glFilter = settings.value("glFilterType", 0).toInt(); vjs.renderType = settings.value("renderType", 0).toInt(); + + // Hardcoded, !!! FIX !!! + strcpy(vjs.ROMPath, "./roms"); } void MainWin::WriteSettings(void) diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index a3a26cc..fb07549 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -12,11 +12,9 @@ #include // Forward declarations - class GLWidget; class AboutWindow; -//class EditWindow; -//class CharWindow; +class FilePickerWindow; class MainWin: public QMainWindow { @@ -40,6 +38,7 @@ class MainWin: public QMainWindow void SetPAL(void); void ToggleBlur(void); void ShowAboutWin(void); + void InsertCart(void); private: void ResizeMainWindow(void); @@ -49,6 +48,7 @@ class MainWin: public QMainWindow // public: GLWidget * videoWidget; AboutWindow * aboutWin; + FilePickerWindow * filePickWin; QTimer * timer; bool running; int zoomLevel; @@ -68,6 +68,7 @@ class MainWin: public QMainWindow QAction * palAct; QAction * blurAct; QAction * aboutAct; + QAction * filePickAct; }; #endif // __MAINWIN_H__ -- 2.37.2 From 3e68f33188872d5754d3765ff140811bcb696c6f Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 29 Jan 2010 05:10:24 +0000 Subject: [PATCH 11/16] Initial file reading thread implementation --- Makefile | 1 + src/gui/filepicker.cpp | 1 - src/gui/filethread.cpp | 174 +++++++++++++++++++++++++++++++++++++++++ src/gui/filethread.h | 26 ++++++ src/gui/mainwin.cpp | 15 ++-- src/gui/mainwin.h | 1 + 6 files changed, 211 insertions(+), 7 deletions(-) create mode 100644 src/gui/filethread.cpp create mode 100644 src/gui/filethread.h diff --git a/Makefile b/Makefile index 870cd31..9b52935 100644 --- a/Makefile +++ b/Makefile @@ -75,6 +75,7 @@ OBJS = \ obj/about.o \ obj/app.o \ obj/filepicker.o \ + obj/filethread.o \ obj/mainwin.o \ obj/moc_mainwin.o \ obj/glwidget.o \ diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index daaae59..9146bdf 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -157,6 +157,5 @@ printf("FilePickerWindow: Found match [%s]...\n", romList[j].name); delete[] buffer; } - } diff --git a/src/gui/filethread.cpp b/src/gui/filethread.cpp new file mode 100644 index 0000000..3d53f92 --- /dev/null +++ b/src/gui/filethread.cpp @@ -0,0 +1,174 @@ +// +// filethread.cpp - File discovery thread +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/28/2010 Created this file +// + +#include "filethread.h" + +#include "crc32.h" +#include "settings.h" +#include "types.h" + +struct RomIdentifier +{ + const uint32 crc32; + const char name[128]; + const char file[128]; +}; + +RomIdentifier romList[] = { + { 0x0509C85E, "Raiden (World)", "" }, + { 0x08F15576, "Iron Soldier (World) (v1.04)", "" }, + { 0x0957A072, "Kasumi Ninja (World)", "" }, + { 0x0AC83D77, "NBA Jam T.E. (World)", "" }, + { 0x0EC5369D, "Evolution - Dino Dudes (World)", "" }, + { 0x0F6A1C2C, "Ultra Vortek (World)", "" }, + { 0x14915F20, "White Men Can't Jump (World)", "" }, + { 0x1660F070, "Power Drive Rally (World)", "" }, + { 0x1E451446, "Trevor McFur in the Crescent Galaxy (World)", "" }, + { 0x27594C6A, "Defender 2000 (World)", "" }, + { 0x2E17D5DA, "Bubsy in Fractured Furry Tales (World)", "" }, + { 0x348E6449, "Double Dragon V - The Shadow Falls (World)", "" }, + { 0x3615AF6A, "Fever Pitch Soccer (World) (En,Fr,De,Es,It)", "" }, + { 0x38A130ED, "Troy Aikman NFL Football (World)", "" }, + { 0x3C044941, "Skyhammer (World)", "" }, + { 0x42A13EC5, "Soccer Kid (World)", "" }, + { 0x47EBC158, "Theme Park (World)", "" }, + { 0x4899628F, "Hover Strike (World)", "" }, + { 0x53DF6440, "Space War 2000 (World)", "" }, + { 0x55A0669C, "[BIOS] Atari Jaguar Developer CD (World)", "" }, + { 0x58272540, "Syndicate (World)", "" }, + { 0x5A101212, "Sensible Soccer - International Edition (World)", "" }, + { 0x5B6BB205, "Ruiner Pinball (World)", "" }, + { 0x5CFF14AB, "Pinball Fantasies (World)", "" }, + { 0x5E2CDBC0, "Doom (World)", "" }, + { 0x61C7EEC0, "Zero 5 (World)", "" }, + { 0x67F9AB3A, "Battle Sphere Gold (World)", "" }, + { 0x687068D5, "[BIOS] Atari Jaguar CD (World)", "" }, + { 0x6B2B95AD, "Tempest 2000 (World)", "" }, + { 0x6EB774EB, "Worms (World)", "" }, + { 0x6F8B2547, "Super Burnout (World)", "" }, + { 0x817A2273, "Pitfall - The Mayan Adventure (World)", "" }, + { 0x8975F48B, "Zool 2 (World)", "" }, + { 0x8D15DBC6, "[BIOS] Atari Jaguar Stubulator '94 (World)", "" }, + { 0x8FEA5AB0, "Dragon - The Bruce Lee Story (World)", "" }, + { 0x97EB4651, "I-War (World)", "" }, + { 0xA27823D8, "Ultra Vortek (World) (v0.94) (Beta)", "" }, + { 0xA56D0798, "Protector - Special Edition (World)", "" }, + { 0xA9F8A00E, "Rayman (World)", "" }, + { 0xB14C4753, "Fight for Life (World)", "" }, + { 0xBCB1A4BF, "Brutal Sports Football (World)", "" }, + { 0xBDA405C6, "Cannon Fodder (World)", "" }, + { 0xBDE67498, "Cybermorph (World) (Rev 1)", "" }, + { 0xC5562581, "Zoop! (World)", "" }, + { 0xC654681B, "Total Carnage (World)", "" }, + { 0xC6C7BA62, "Fight for Life (World) (Alt)", "" }, + { 0xC9608717, "Val d'Isere Skiing and Snowboarding (World)", "" }, + { 0xCBFD822A, "Air Cars (World)", "" }, + { 0xCD5BF827, "Attack of the Mutant Penguins (World)", "" }, + { 0xD6C19E34, "Iron Soldier 2 (World)", "" }, + { 0xDA9C4162, "Missile Command 3D (World)", "" }, + { 0xDC187F82, "Alien vs Predator (World)", "" }, + { 0xDE55DCC7, "Flashback - The Quest for Identity (World) (En,Fr)", "" }, + { 0xE28756DE, "Atari Karts (World)", "" }, + { 0xE60277BB, "[BIOS] Atari Jaguar Stubulator '93 (World)", "" }, + { 0xE91BD644, "Wolfenstein 3D (World)", "" }, + { 0xEC22F572, "SuperCross 3D (World)", "" }, + { 0xECF854E7, "Cybermorph (World) (Rev 2)", "" }, + { 0xEEE8D61D, "Club Drive (World)", "" }, + { 0xF0360DB3, "Hyper Force (World)", "" }, + { 0xFA7775AE, "Checkered Flag (World)", "" }, + { 0xFAE31DD0, "Flip Out! (World)", "" }, + { 0xFB731AAA, "[BIOS] Atari Jaguar (World)", "" }, + { 0xFFFFFFFF, "***END***", "" } +}; + +/* +Our strategy here is like so: +Look at the files in the directory pointed to by ROMPath. +For each file in the directory, take the CRC32 of it and compare it to the CRC +in the romList[]. If there's a match, put it in a list and note it's index value +in romList for future reference. + +When constructing the list, use the index to pull up an image of the cart and +put that in the list. User picks from a graphical image of the cart. + +Ideally, the label will go into the archive along with the ROM image, but that's +for the future... +Maybe box art, screenshots will go as well... +*/ + +FileThread::FileThread(QObject * parent/*= 0*/): QThread(parent), listWidget(NULL), abort(false) +{ +} + +FileThread::~FileThread() +{ + mutex.lock(); + abort = true; + condition.wakeOne(); + mutex.unlock(); + + wait(); +} + +FileThread::Go(QListWidget * lw) +{ + QMutexLocker locker(&mutex); + this->listWidget = lw; + start(); +} + +void FileThread::run(void) +{ +// mutex.lock(); +// if (abort) +// return; +// mutex.unlock(); + + QDir romDir(vjs.ROMPath); + QFileInfoList list = romDir.entryInfoList(); + + for(int i=0; i + +// Forward declarations +class QListWidget; + +class FileThread: public QThread +{ + public: + FileThread(QObject * parent = 0); + ~FileThread(); + + private: + QListWidget * listWidget; + QMutex mutex; + QWaitCondition condition; + bool abort; +}; + +#endif // __FILETHREAD_H__ diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 5aae995..bbeb3f8 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -92,12 +92,12 @@ MainWin::MainWin() tvTypeActs = new QActionGroup(this); ntscAct = new QAction(QIcon(":/res/generic.png"), tr("NTSC"), tvTypeActs); - ntscAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST")); + ntscAct->setStatusTip(tr("Sets Jaguar to NTSC mode")); ntscAct->setCheckable(true); connect(ntscAct, SIGNAL(triggered()), this, SLOT(SetNTSC())); palAct = new QAction(QIcon(":/res/generic.png"), tr("PAL"), tvTypeActs); - palAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST")); + palAct->setStatusTip(tr("Sets Jaguar to PAL mode")); palAct->setCheckable(true); connect(palAct, SIGNAL(triggered()), this, SLOT(SetPAL())); @@ -121,22 +121,25 @@ MainWin::MainWin() fileMenu->addAction(powerAct); fileMenu->addAction(quitAppAct); - fileMenu = menuBar()->addMenu(tr("&Help")); - fileMenu->addAction(aboutAct); + helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(aboutAct); - QToolBar * toolbar = addToolBar(tr("Stuff")); + toolbar = addToolBar(tr("Stuff")); toolbar->addAction(powerAct); + toolbar->addSeparator(); toolbar->addAction(x1Act); toolbar->addAction(x2Act); toolbar->addAction(x3Act); + toolbar->addSeparator(); toolbar->addAction(ntscAct); toolbar->addAction(palAct); + toolbar->addSeparator(); toolbar->addAction(blurAct); // Create status bar statusBar()->showMessage(tr("Ready")); - // Set toolbar button based on setting read in (sync the UI)... + // Set toolbar buttons/menus based on settings read in (sync the UI)... blurAct->setChecked(vjs.glFilter); x1Act->setChecked(zoomLevel == 1); x2Act->setChecked(zoomLevel == 2); diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index fb07549..c1ea616 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -55,6 +55,7 @@ class MainWin: public QMainWindow QMenu * fileMenu; QMenu * helpMenu; + QToolBar * toolbar; QActionGroup * zoomActs; QActionGroup * tvTypeActs; -- 2.37.2 From b54bb3c04ba861123e44b7f25fbc859d78627379 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 29 Jan 2010 22:00:24 +0000 Subject: [PATCH 12/16] Minor tweaks to ROM discovery threading, beginnings of new config window --- Makefile | 5 +++-- src/gui/configwin.cpp | 15 +++++++++++++++ src/gui/configwin.h | 13 +++++++++++++ src/gui/filepicker.cpp | 15 +++++++++------ src/gui/filepicker.h | 2 ++ src/gui/filethread.cpp | 39 ++++++++++++++++++++++----------------- src/gui/filethread.h | 10 ++++++++-- src/gui/vj.pro | 4 ++++ 8 files changed, 76 insertions(+), 27 deletions(-) create mode 100644 src/gui/configwin.cpp create mode 100644 src/gui/configwin.h diff --git a/Makefile b/Makefile index 9b52935..2c3d82e 100644 --- a/Makefile +++ b/Makefile @@ -74,6 +74,7 @@ OBJS = \ \ obj/about.o \ obj/app.o \ + obj/configwin.o \ obj/filepicker.o \ obj/filethread.o \ obj/mainwin.o \ @@ -193,13 +194,13 @@ src/gui/Makefile: src/gui/vj-gui.pro src/gui/vj-gui.qrc # ../../obj/mainwin.o \ # ../../obj/moc_mainwin.o \ # ../../obj/qrc_vj-gui.o -QT_CFLAGS = `pkg-config --cflags QtGui` +QT_CFLAGS = -MMD `pkg-config --cflags QtGui` # !!! THESE DEFINES ARE PLATFORM DEPENDENT !!! #QT_DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED QT_DEFINES = -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED #QT_INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I./src/gui -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I./obj QT_INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I./src -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4 -I/usr/X11R6/include -I./obj -QT_CXXFLAGS = -pipe -O2 -march=pentium-m -pipe -D_REENTRANT -Wall -W $(QT_DEFINES) -D$(SYSTYPE) +QT_CXXFLAGS = -MMD -pipe -O2 -march=pentium-m -pipe -D_REENTRANT -Wall -W $(QT_DEFINES) -D$(SYSTYPE) obj/moc_%.cpp: src/gui/%.h @echo -e "\033[01;33m***\033[00;32m Creating $@...\033[00m" diff --git a/src/gui/configwin.cpp b/src/gui/configwin.cpp new file mode 100644 index 0000000..484e03b --- /dev/null +++ b/src/gui/configwin.cpp @@ -0,0 +1,15 @@ +// +// configwin.cpp - Configuration window +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 01/29/2010 Created this file +// + +#include "configwin.h" + diff --git a/src/gui/configwin.h b/src/gui/configwin.h new file mode 100644 index 0000000..4f09095 --- /dev/null +++ b/src/gui/configwin.h @@ -0,0 +1,13 @@ +// +// configwin.h - Configuration window +// +// by James L. Hammons +// (C) 2010 Underground Software +// + +#ifndef __CONFIGWIN_H__ +#define __CONFIGWIN_H__ + + + +#endif // __CONFIGWIN_H__ diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index 9146bdf..13cc4d1 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -14,6 +14,7 @@ #include "filepicker.h" #include "crc32.h" +#include "filethread.h" #include "settings.h" #include "types.h" @@ -24,7 +25,7 @@ struct RomIdentifier const char file[128]; }; -RomIdentifier romList[] = { +RomIdentifier romList2[] = { { 0x0509C85E, "Raiden (World)", "" }, { 0x08F15576, "Iron Soldier (World) (v1.04)", "" }, { 0x0957A072, "Kasumi Ninja (World)", "" }, @@ -120,7 +121,9 @@ FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt: layout->addWidget(fileList); - PopulateList(); +// PopulateList(); + fileThread = new FileThread(this); + fileThread->Go(fileList); } void FilePickerWindow::PopulateList(void) @@ -144,12 +147,12 @@ void FilePickerWindow::PopulateList(void) file.close(); //printf("FilePickerWindow: File crc == %08X...\n", crc); - for(int j=0; romList[j].crc32 != 0xFFFFFFFF; j++) + for(int j=0; romList2[j].crc32 != 0xFFFFFFFF; j++) { - if (romList[j].crc32 == crc) + if (romList2[j].crc32 == crc) { -printf("FilePickerWindow: Found match [%s]...\n", romList[j].name); - new QListWidgetItem(QIcon(":/res/generic.png"), romList[j].name, fileList); +printf("FilePickerWindow: Found match [%s]...\n", romList2[j].name); + new QListWidgetItem(QIcon(":/res/generic.png"), romList2[j].name, fileList); break; } } diff --git a/src/gui/filepicker.h b/src/gui/filepicker.h index e886e3b..2978248 100644 --- a/src/gui/filepicker.h +++ b/src/gui/filepicker.h @@ -6,6 +6,7 @@ // Forward declarations class QListWidget; +class FileThread; class FilePickerWindow: public QWidget { @@ -17,4 +18,5 @@ class FilePickerWindow: public QWidget private: QListWidget * fileList; + FileThread * fileThread; }; diff --git a/src/gui/filethread.cpp b/src/gui/filethread.cpp index 3d53f92..1f5a5aa 100644 --- a/src/gui/filethread.cpp +++ b/src/gui/filethread.cpp @@ -13,9 +13,10 @@ #include "filethread.h" +#include #include "crc32.h" #include "settings.h" -#include "types.h" +//#include "types.h" struct RomIdentifier { @@ -120,7 +121,7 @@ FileThread::~FileThread() wait(); } -FileThread::Go(QListWidget * lw) +void FileThread::Go(QListWidget * lw) { QMutexLocker locker(&mutex); this->listWidget = lw; @@ -129,11 +130,6 @@ FileThread::Go(QListWidget * lw) void FileThread::run(void) { -// mutex.lock(); -// if (abort) -// return; -// mutex.unlock(); - QDir romDir(vjs.ROMPath); QFileInfoList list = romDir.entryInfoList(); @@ -143,9 +139,6 @@ void FileThread::run(void) return; QFileInfo fileInfo = list.at(i); -// std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10) -// .arg(fileInfo.fileName())); -// std::cout << std::endl; QFile file(romDir.filePath(fileInfo.fileName())); uint8 * buffer = new uint8[fileInfo.size()]; @@ -156,19 +149,31 @@ void FileThread::run(void) file.close(); //printf("FilePickerWindow: File crc == %08X...\n", crc); - for(int j=0; romList[j].crc32 != 0xFFFFFFFF; j++) + uint32 index = FindCRCIndexInFileList(crc); + + if (index != 0xFFFFFFFF) { - if (romList[j].crc32 == crc) - { -printf("FilePickerWindow: Found match [%s]...\n", romList[j].name); - new QListWidgetItem(QIcon(":/res/generic.png"), romList[j].name, listWidget); - break; - } +printf("FileThread: Found match [%s]...\n", romList[index].name); + new QListWidgetItem(QIcon(":/res/generic.png"), romList[index].name, listWidget); +// break; } } delete[] buffer; } +} + +// +// Find a CRC in the ROM list. If it's there, return the index, otherwise return $FFFFFFFF +// +uint32 FileThread::FindCRCIndexInFileList(uint32 crc) +{ + for(int i=0; romList[i].crc32!=0xFFFFFFFF; i++) + { + if (romList[i].crc32 == crc) + return i; + } + return 0xFFFFFFFF; } diff --git a/src/gui/filethread.h b/src/gui/filethread.h index 8873976..aec0038 100644 --- a/src/gui/filethread.h +++ b/src/gui/filethread.h @@ -2,10 +2,11 @@ // filethread.h: File discovery thread class definition // -#ifndef // __FILETHREAD_H__ -#define // __FILETHREAD_H__ +#ifndef __FILETHREAD_H__ +#define __FILETHREAD_H__ #include +#include "types.h" // Forward declarations class QListWidget; @@ -15,6 +16,11 @@ class FileThread: public QThread public: FileThread(QObject * parent = 0); ~FileThread(); + void Go(QListWidget * lw); + + protected: + void run(void); + uint32 FindCRCIndexInFileList(uint32); private: QListWidget * listWidget; diff --git a/src/gui/vj.pro b/src/gui/vj.pro index ae383ed..5f1551f 100644 --- a/src/gui/vj.pro +++ b/src/gui/vj.pro @@ -11,12 +11,16 @@ HEADERS += mainwin.h HEADERS += glwidget.h HEADERS += about.h HEADERS += filepicker.h +HEADERS += filethread.h +HEADERS += configwin.h SOURCES += app.cpp SOURCES += mainwin.cpp SOURCES += glwidget.cpp SOURCES += about.cpp SOURCES += filepicker.cpp +SOURCES += filethread.cpp +SOURCES += configwin.cpp RESOURCES += vj.qrc -- 2.37.2 From 8549cdb01f45764f69a6483285dc0771ea66c007 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Wed, 3 Feb 2010 04:39:13 +0000 Subject: [PATCH 13/16] Start of model/view class implementation, since QListViewWidget ultimately just doesn't have what we need. --- Makefile | 1 + src/gui/filelistmodel.cpp | 118 ++++++++++++++++++++++++++++++++++++++ src/gui/filelistmodel.h | 29 ++++++++++ src/gui/filepicker.cpp | 13 ++++- src/gui/filepicker.h | 2 +- src/gui/filethread.cpp | 15 ++++- src/unzip.c | 2 +- 7 files changed, 176 insertions(+), 4 deletions(-) create mode 100644 src/gui/filelistmodel.cpp create mode 100644 src/gui/filelistmodel.h diff --git a/Makefile b/Makefile index 2c3d82e..f0ae69e 100644 --- a/Makefile +++ b/Makefile @@ -76,6 +76,7 @@ OBJS = \ obj/app.o \ obj/configwin.o \ obj/filepicker.o \ + obj/filelistmodel.o \ obj/filethread.o \ obj/mainwin.o \ obj/moc_mainwin.o \ diff --git a/src/gui/filelistmodel.cpp b/src/gui/filelistmodel.cpp new file mode 100644 index 0000000..b509957 --- /dev/null +++ b/src/gui/filelistmodel.cpp @@ -0,0 +1,118 @@ +// +// filepicker.cpp - A ROM chooser +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 02/01/2010 Created this file +// + +// Note that we have to put in convenience functions to the model for adding data +// and calling reset() to tell the view(s) that the model has changed. So that much +// should be simple. According to the docs, we have to reimplement flags() in the +// QAbstractListModel subclass, but in the example given below they don't. Not sure +// if it's necessary or not. + +#include "filelistmodel.h" + + +FileListModel::FileListModel(QObject * parent/*= 0*/): QAbstractListModel(parent) +{ +} + +int FileListModel::rowCount(const QModelIndex & parent/*= QModelIndex()*/) const +{ + return pixList.size(); +} + +QVariant FileListModel::data(const QModelIndex & index, int role) const +{ +// return QVariant(); + return pixList.at(index.row()); +} + +QVariant FileListModel::headerData(int section, Qt::Orientation orientation, int role/*= Qt::DisplayRole*/) const +{ + // Not sure that this is necessary for our purposes... + // Especially since this model would never make use of this info... + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return QString("Column %1").arg(section); + else + return QString("Row %1").arg(section); +} + +void FileListModel::AddData(QIcon pix) +{ + pixList.push_back(pix); + reset(); +} + + +#if 0 + +class StringListModel : public QAbstractListModel +{ + Q_OBJECT + + public: + StringListModel(const QStringList &strings, QObject *parent = 0) + : QAbstractListModel(parent), stringList(strings) {} + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + private: + QStringList stringList; +}; + +int StringListModel::rowCount(const QModelIndex &parent) const +{ + return stringList.count(); +} + +QVariant StringListModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (index.row() >= stringList.size()) + return QVariant(); + + if (role == Qt::DisplayRole) + return stringList.at(index.row()); + else + return QVariant(); +} + + +QVariant StringListModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return QString("Column %1").arg(section); + else + return QString("Row %1").arg(section); +} + + + + void ImageModel::setImage(const QImage &image) + { + modelImage = image; + reset(); + } + +The QAbstractItemModel::reset() call tells the view(s) that the model has changed. + +#endif diff --git a/src/gui/filelistmodel.h b/src/gui/filelistmodel.h new file mode 100644 index 0000000..4828d38 --- /dev/null +++ b/src/gui/filelistmodel.h @@ -0,0 +1,29 @@ +// +// filelistmodel.h: Class definition +// +// by James L. Hammons +// (C) 2010 Underground Software +// + +#ifndef __FILELISTMODEL_H__ +#define __FILELISTMODEL_H__ + +#include +#include + +class FileListModel: public QAbstractListModel +{ + public: + FileListModel(QObject * parent = 0); + + int rowCount(const QModelIndex & parent = QModelIndex()) const; + QVariant data(const QModelIndex & index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + void AddData(QIcon pix); + + private: + std::vector pixList; +}; + +#endif // __FILELISTMODEL_H__ diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index 13cc4d1..a221d03 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -112,6 +112,7 @@ FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt: { setWindowTitle("Insert Cartridge..."); +#if 1 fileList = new QListWidget(this); // addWidget(fileList); @@ -124,8 +125,18 @@ FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt: // PopulateList(); fileThread = new FileThread(this); fileThread->Go(fileList); +#else +QStringList numbers; +numbers << "One" << "Two" << "Three" << "Four" << "Five"; + +QAbstractItemModel * model = new StringListModel(numbers); +QListView * view = new QListView; +view->setModel(model); + +#endif } +/* void FilePickerWindow::PopulateList(void) { QDir romDir(vjs.ROMPath); @@ -161,4 +172,4 @@ printf("FilePickerWindow: Found match [%s]...\n", romList2[j].name); delete[] buffer; } } - +*/ diff --git a/src/gui/filepicker.h b/src/gui/filepicker.h index 2978248..a476a50 100644 --- a/src/gui/filepicker.h +++ b/src/gui/filepicker.h @@ -14,7 +14,7 @@ class FilePickerWindow: public QWidget FilePickerWindow(QWidget * parent = 0); protected: - void PopulateList(void); +// void PopulateList(void); private: QListWidget * fileList; diff --git a/src/gui/filethread.cpp b/src/gui/filethread.cpp index 1f5a5aa..55d9e42 100644 --- a/src/gui/filethread.cpp +++ b/src/gui/filethread.cpp @@ -133,10 +133,22 @@ void FileThread::run(void) QDir romDir(vjs.ROMPath); QFileInfoList list = romDir.entryInfoList(); +/* +Another thing we'll probably have to do here is check for compressed files and +decompress/fish around in them to find what we need. :-P +*/ + for(int i=0; i Date: Thu, 4 Feb 2010 20:26:53 +0000 Subject: [PATCH 14/16] More ROM picker refinements... --- Makefile | 2 ++ src/gui/app.cpp | 3 +++ src/gui/filelistmodel.cpp | 8 ++++++++ src/gui/filepicker.cpp | 19 ++++++++++++++++--- src/gui/filepicker.h | 13 ++++++++++++- src/gui/filethread.cpp | 2 +- src/gui/filethread.h | 5 +++++ 7 files changed, 47 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index f0ae69e..1bc442f 100644 --- a/Makefile +++ b/Makefile @@ -76,8 +76,10 @@ OBJS = \ obj/app.o \ obj/configwin.o \ obj/filepicker.o \ + obj/moc_filepicker.o \ obj/filelistmodel.o \ obj/filethread.o \ + obj/moc_filethread.o \ obj/mainwin.o \ obj/moc_mainwin.o \ obj/glwidget.o \ diff --git a/src/gui/app.cpp b/src/gui/app.cpp index 3bd8c6c..9a2cdbf 100644 --- a/src/gui/app.cpp +++ b/src/gui/app.cpp @@ -15,6 +15,7 @@ #include #include "mainwin.h" +#include "types.h" // Here's the main application loop--short and simple... int main(int argc, char * argv[]) @@ -32,6 +33,8 @@ int main(int argc, char * argv[]) Q_INIT_RESOURCE(vj); // This must the same name as the exe filename //or is it the .qrc filename??? + // This is so we can pass this stuff using signal/slot mechanism... +//ick int id = qRegisterMetaType(); App app(argc, argv); // Declare an instance of the application diff --git a/src/gui/filelistmodel.cpp b/src/gui/filelistmodel.cpp index b509957..2730a45 100644 --- a/src/gui/filelistmodel.cpp +++ b/src/gui/filelistmodel.cpp @@ -37,6 +37,7 @@ QVariant FileListModel::data(const QModelIndex & index, int role) const QVariant FileListModel::headerData(int section, Qt::Orientation orientation, int role/*= Qt::DisplayRole*/) const { +#if 0 // Not sure that this is necessary for our purposes... // Especially since this model would never make use of this info... if (role != Qt::DisplayRole) @@ -46,6 +47,13 @@ QVariant FileListModel::headerData(int section, Qt::Orientation orientation, int return QString("Column %1").arg(section); else return QString("Row %1").arg(section); +#else + // This seems more like what we want... + if (role == Qt::SizeHintRole) + return QSize(1, 1); + + return QVariant(); +#endif } void FileListModel::AddData(QIcon pix) diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index a221d03..e8a44d1 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -14,6 +14,7 @@ #include "filepicker.h" #include "crc32.h" +#include "filelistmodel.h" #include "filethread.h" #include "settings.h" #include "types.h" @@ -113,18 +114,22 @@ FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt: setWindowTitle("Insert Cartridge..."); #if 1 - fileList = new QListWidget(this); + fileList2 = new QListWidget(this); // addWidget(fileList); QVBoxLayout * layout = new QVBoxLayout(); // layout->setSizeConstraint(QLayout::SetFixedSize); setLayout(layout); - layout->addWidget(fileList); + layout->addWidget(fileList2); // PopulateList(); fileThread = new FileThread(this); - fileThread->Go(fileList); + + /*bool b =*/ connect(fileThread, SIGNAL(FoundAFile(unsigned long)), this, SLOT(AddFileToList(unsigned long))); +//printf("FilePickerWindow: Connection to FileThread %s...\n", (b ? "succeeded" : "failed")); + + fileThread->Go(fileList2); #else QStringList numbers; numbers << "One" << "Two" << "Three" << "Four" << "Five"; @@ -136,6 +141,14 @@ view->setModel(model); #endif } +// Need a slot here to pickup stuff from the thread... + +void FilePickerWindow::AddFileToList(unsigned long index) +{ + printf("--> Found CRC: %08X...\n", (uint32)index); +} + + /* void FilePickerWindow::PopulateList(void) { diff --git a/src/gui/filepicker.h b/src/gui/filepicker.h index a476a50..e11dc34 100644 --- a/src/gui/filepicker.h +++ b/src/gui/filepicker.h @@ -3,20 +3,31 @@ // #include +#include "types.h" // Forward declarations class QListWidget; class FileThread; +class FileListModel; +class QListView; class FilePickerWindow: public QWidget { + // Once we have signals/slots, we need this... + Q_OBJECT + public: FilePickerWindow(QWidget * parent = 0); + public slots: + void AddFileToList(unsigned long index); + protected: // void PopulateList(void); private: - QListWidget * fileList; + QListWidget * fileList2; FileThread * fileThread; + FileListModel * model; + QListView * fileList; }; diff --git a/src/gui/filethread.cpp b/src/gui/filethread.cpp index 55d9e42..8bb2b87 100644 --- a/src/gui/filethread.cpp +++ b/src/gui/filethread.cpp @@ -167,7 +167,7 @@ printf("FileThread: Aborting!!!\n"); { printf("FileThread: Found match [%s]...\n", romList[index].name); new QListWidgetItem(QIcon(":/res/generic.png"), romList[index].name, listWidget); -// break; + emit FoundAFile(romList[index].crc32); } } diff --git a/src/gui/filethread.h b/src/gui/filethread.h index aec0038..12c316f 100644 --- a/src/gui/filethread.h +++ b/src/gui/filethread.h @@ -13,11 +13,16 @@ class QListWidget; class FileThread: public QThread { + Q_OBJECT + public: FileThread(QObject * parent = 0); ~FileThread(); void Go(QListWidget * lw); + signals: + void FoundAFile(unsigned long index); + protected: void run(void); uint32 FindCRCIndexInFileList(uint32); -- 2.37.2 From 8e680eb382eceb22f52cb923958ac652d693eb1a Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Mon, 8 Feb 2010 06:09:52 +0000 Subject: [PATCH 15/16] Incremental improvements to the file picker, introduction of ImageDelegate class to do custom rendering for our QListView --- Makefile | 1 + src/gui/filepicker.cpp | 25 ++++++--- src/gui/filepicker.h | 4 +- src/gui/filethread.cpp | 3 +- src/gui/imagedelegate.cpp | 106 ++++++++++++++++++++++++++++++++++++++ src/gui/imagedelegate.h | 27 ++++++++++ src/gui/mainwin.cpp | 2 +- src/gui/vj.qrc | 2 + 8 files changed, 158 insertions(+), 12 deletions(-) create mode 100644 src/gui/imagedelegate.cpp create mode 100644 src/gui/imagedelegate.h diff --git a/Makefile b/Makefile index 1bc442f..c4a771f 100644 --- a/Makefile +++ b/Makefile @@ -79,6 +79,7 @@ OBJS = \ obj/moc_filepicker.o \ obj/filelistmodel.o \ obj/filethread.o \ + obj/imagedelegate.o \ obj/moc_filethread.o \ obj/mainwin.o \ obj/moc_mainwin.o \ diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index e8a44d1..5211736 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -9,6 +9,7 @@ // Who When What // --- ---------- ------------------------------------------------------------- // JLH 01/22/2010 Created this file +// JLH 02/06/2010 Modified to use Qt model/view framework // #include "filepicker.h" @@ -16,6 +17,7 @@ #include "crc32.h" #include "filelistmodel.h" #include "filethread.h" +#include "imagedelegate.h" #include "settings.h" #include "types.h" @@ -113,7 +115,7 @@ FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt: { setWindowTitle("Insert Cartridge..."); -#if 1 +#if 0 fileList2 = new QListWidget(this); // addWidget(fileList); @@ -131,13 +133,20 @@ FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt: fileThread->Go(fileList2); #else -QStringList numbers; -numbers << "One" << "Two" << "Three" << "Four" << "Five"; - -QAbstractItemModel * model = new StringListModel(numbers); -QListView * view = new QListView; -view->setModel(model); +//is there any reason why this must be cast as a QAbstractListModel? +//Also, need to think about data structure for the model... + model = new FileListModel(); + fileList = new QListView(); + fileList->setModel(model); + ImageDelegate * delegate = new ImageDelegate(this); + fileList->setItemDelegate(delegate); + + QVBoxLayout * layout = new QVBoxLayout; + setLayout(layout); + layout->addWidget(fileList); + ((FileListModel *)model)->AddData(QIcon(":/res/generic.png")); + ((FileListModel *)model)->AddData(QIcon(":/res/generic.png")); #endif } @@ -145,7 +154,7 @@ view->setModel(model); void FilePickerWindow::AddFileToList(unsigned long index) { - printf("--> Found CRC: %08X...\n", (uint32)index); + printf("--> Found CRC: %08X...\n", romList2[index].crc32); } diff --git a/src/gui/filepicker.h b/src/gui/filepicker.h index e11dc34..543de0e 100644 --- a/src/gui/filepicker.h +++ b/src/gui/filepicker.h @@ -8,7 +8,7 @@ // Forward declarations class QListWidget; class FileThread; -class FileListModel; +//class FileListModel; class QListView; class FilePickerWindow: public QWidget @@ -28,6 +28,6 @@ class FilePickerWindow: public QWidget private: QListWidget * fileList2; FileThread * fileThread; - FileListModel * model; + QAbstractItemModel * model; QListView * fileList; }; diff --git a/src/gui/filethread.cpp b/src/gui/filethread.cpp index 8bb2b87..7ecb453 100644 --- a/src/gui/filethread.cpp +++ b/src/gui/filethread.cpp @@ -167,7 +167,8 @@ printf("FileThread: Aborting!!!\n"); { printf("FileThread: Found match [%s]...\n", romList[index].name); new QListWidgetItem(QIcon(":/res/generic.png"), romList[index].name, listWidget); - emit FoundAFile(romList[index].crc32); +// emit FoundAFile(romList[index].crc32); + emit FoundAFile(index); } } diff --git a/src/gui/imagedelegate.cpp b/src/gui/imagedelegate.cpp new file mode 100644 index 0000000..76e690b --- /dev/null +++ b/src/gui/imagedelegate.cpp @@ -0,0 +1,106 @@ +// +// imagedelegate.cpp - Qt Model/View rendering class +// +// by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JLH 02/04/2010 Created this file +// + +// This class takes care of rendering items in our custom model in the ListView +// class utilized in FilePicker. + +#include "imagedelegate.h" + + +ImageDelegate::ImageDelegate(QObject * parent): QAbstractItemDelegate(parent), pixelSize(12) +{ +} + +/* +Each item is rendered by the delegate's paint() function. The view calls this function with a ready-to-use QPainter object, style information that the delegate should use to correctly draw the item, and an index to the item in the model: +*/ + +void ImageDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const +{ + if (option.state & QStyle::State_Selected) + painter->fillRect(option.rect, option.palette.highlight()); + +/* +The first task the delegate has to perform is to draw the item's background correctly. Usually, selected items appear differently to non-selected items, so we begin by testing the state passed in the style option and filling the background if necessary. + +The radius of each circle is calculated in the following lines of code: +*/ + +#if 0 + int size = qMin(option.rect.width(), option.rect.height()); + int brightness = index.model()->data(index, Qt::DisplayRole).toInt(); + double radius = (size/2.0) - (brightness/255.0 * size/2.0); + if (radius == 0.0) + return; +#endif + +/* +First, the largest possible radius of the circle is determined by taking the smallest dimension of the style option's rect attribute. Using the model index supplied, we obtain a value for the brightness of the relevant pixel in the image. The radius of the circle is calculated by scaling the brightness to fit within the item and subtracting it from the largest possible radius. +*/ + + painter->save(); +#if 0 + painter->setRenderHint(QPainter::Antialiasing, true); + painter->setPen(Qt::NoPen); + +/* +We save the painter's state, turn on antialiasing (to obtain smoother curves), and turn off the pen. +*/ + + if (option.state & QStyle::State_Selected) + painter->setBrush(option.palette.highlightedText()); + else + painter->setBrush(QBrush(Qt::black)); + +/* +The foreground of the item (the circle representing a pixel) must be rendered using an appropriate brush. For unselected items, we will use a solid black brush; selected items are drawn using a predefined brush from the style option's palette. +*/ + + painter->drawEllipse(QRectF(option.rect.x() + option.rect.width()/2 - radius, + option.rect.y() + option.rect.height()/2 - radius, 2*radius, 2*radius)); +#else +// painter->drawPixmap(option.rect.x()+8, option.rect.y()+8, 200, 94, QPixmap(":/res/labels/rayman.jpg")); + painter->drawPixmap(option.rect.x(), option.rect.y(), 488/2, 395/2, QPixmap(":/res/cart-blank.png")); + painter->drawPixmap(option.rect.x()+13, option.rect.y()+51, 433/2, 203/2, QPixmap(":/res/labels/rayman.jpg")); +//26x100 +#endif + painter->restore(); +} + +/* +Finally, we paint the circle within the rectangle specified by the style option and we call restore() on the painter. + +The paint() function does not have to be particularly complicated; it is only necessary to ensure that the state of the painter when the function returns is the same as it was when it was called. This usually means that any transformations applied to the painter must be preceded by a call to QPainter::save() and followed by a call to QPainter::restore(). + +The delegate's sizeHint() function returns a size for the item based on the predefined pixel size, initially set up in the constructor: +*/ + +QSize ImageDelegate::sizeHint(const QStyleOptionViewItem & /* option */, const QModelIndex & /* index */) const +{ + // 488x395 --> blank cart (full size) + // 400x188 --> label (full size) 433x203 <-- (actually, it's this) + + // 200x94 is shrunk dimension... +// return QSize(100, 47); +// return QSize(216, 110); + return QSize(488/2, 395/2); +} + +/* +The delegate's size is updated whenever the pixel size is changed. We provide a custom slot to do this: +*/ + +//void ImageDelegate::setPixelSize(int size) +//{ +// pixelSize = size; +//} diff --git a/src/gui/imagedelegate.h b/src/gui/imagedelegate.h new file mode 100644 index 0000000..78d07dc --- /dev/null +++ b/src/gui/imagedelegate.h @@ -0,0 +1,27 @@ +// +// imagedelegate.h: Class definition +// + +#ifndef __IMAGEDELEGATE_H__ +#define __IMAGEDELEGATE_H__ + +#include + +class ImageDelegate: public QAbstractItemDelegate +{ +// Q_OBJECT + + public: + ImageDelegate(QObject * parent = 0); + + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index ) const; + +// public slots: +// void setPixelSize(int size); + + private: + int pixelSize; +}; + +#endif // __IMAGEDELEGATE_H__ diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index bbeb3f8..3d9276f 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -110,7 +110,7 @@ MainWin::MainWin() aboutAct->setStatusTip(tr("Blatant self-promotion")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); - filePickAct = new QAction(QIcon(":/res/generic.png"), tr("Insert Cartridge..."), this); + filePickAct = new QAction(QIcon(":/res/generic.png"), tr("&Insert Cartridge..."), this); filePickAct->setStatusTip(tr("Insert a cartridge into Virtual Jaguar")); connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart())); diff --git a/src/gui/vj.qrc b/src/gui/vj.qrc index 4a23d8c..f55a393 100644 --- a/src/gui/vj.qrc +++ b/src/gui/vj.qrc @@ -6,6 +6,8 @@ ../../res/zoom200.png ../../res/zoom300.png ../../res/generic.png + ../../res/cart-blank.png ../../res/vj_title_small.png + ../../res/labels/rayman.jpg -- 2.37.2 From 25cc16d819c81e08d2e21b57720dd4ea08ae9e25 Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 12 Feb 2010 22:18:49 +0000 Subject: [PATCH 16/16] Moving towards a better file picker... :-) --- src/gui/filelistmodel.cpp | 12 ++- src/gui/filelistmodel.h | 2 + src/gui/filepicker.cpp | 167 +++++--------------------------------- src/gui/filepicker.h | 5 +- src/gui/filethread.cpp | 16 ++-- src/gui/filethread.h | 16 +++- src/gui/imagedelegate.cpp | 8 +- src/gui/vj.qrc | 1 + 8 files changed, 69 insertions(+), 158 deletions(-) diff --git a/src/gui/filelistmodel.cpp b/src/gui/filelistmodel.cpp index 2730a45..a975b82 100644 --- a/src/gui/filelistmodel.cpp +++ b/src/gui/filelistmodel.cpp @@ -26,13 +26,15 @@ FileListModel::FileListModel(QObject * parent/*= 0*/): QAbstractListModel(parent int FileListModel::rowCount(const QModelIndex & parent/*= QModelIndex()*/) const { - return pixList.size(); +// return pixList.size(); + return dbIndex.size(); } QVariant FileListModel::data(const QModelIndex & index, int role) const { // return QVariant(); - return pixList.at(index.row()); +// return pixList.at(index.row()); + return (uint)dbIndex.at(index.row()); } QVariant FileListModel::headerData(int section, Qt::Orientation orientation, int role/*= Qt::DisplayRole*/) const @@ -62,6 +64,12 @@ void FileListModel::AddData(QIcon pix) reset(); } +void FileListModel::AddData(unsigned long index) +{ + dbIndex.push_back(index); + reset(); +} + #if 0 diff --git a/src/gui/filelistmodel.h b/src/gui/filelistmodel.h index 4828d38..1599ca5 100644 --- a/src/gui/filelistmodel.h +++ b/src/gui/filelistmodel.h @@ -21,9 +21,11 @@ class FileListModel: public QAbstractListModel QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; void AddData(QIcon pix); + void AddData(unsigned long); private: std::vector pixList; + std::vector dbIndex; }; #endif // __FILELISTMODEL_H__ diff --git a/src/gui/filepicker.cpp b/src/gui/filepicker.cpp index 5211736..a841d88 100644 --- a/src/gui/filepicker.cpp +++ b/src/gui/filepicker.cpp @@ -14,87 +14,12 @@ #include "filepicker.h" -#include "crc32.h" #include "filelistmodel.h" #include "filethread.h" #include "imagedelegate.h" #include "settings.h" #include "types.h" -struct RomIdentifier -{ - const uint32 crc32; - const char name[128]; - const char file[128]; -}; - -RomIdentifier romList2[] = { - { 0x0509C85E, "Raiden (World)", "" }, - { 0x08F15576, "Iron Soldier (World) (v1.04)", "" }, - { 0x0957A072, "Kasumi Ninja (World)", "" }, - { 0x0AC83D77, "NBA Jam T.E. (World)", "" }, - { 0x0EC5369D, "Evolution - Dino Dudes (World)", "" }, - { 0x0F6A1C2C, "Ultra Vortek (World)", "" }, - { 0x14915F20, "White Men Can't Jump (World)", "" }, - { 0x1660F070, "Power Drive Rally (World)", "" }, - { 0x1E451446, "Trevor McFur in the Crescent Galaxy (World)", "" }, - { 0x27594C6A, "Defender 2000 (World)", "" }, - { 0x2E17D5DA, "Bubsy in Fractured Furry Tales (World)", "" }, - { 0x348E6449, "Double Dragon V - The Shadow Falls (World)", "" }, - { 0x3615AF6A, "Fever Pitch Soccer (World) (En,Fr,De,Es,It)", "" }, - { 0x38A130ED, "Troy Aikman NFL Football (World)", "" }, - { 0x3C044941, "Skyhammer (World)", "" }, - { 0x42A13EC5, "Soccer Kid (World)", "" }, - { 0x47EBC158, "Theme Park (World)", "" }, - { 0x4899628F, "Hover Strike (World)", "" }, - { 0x53DF6440, "Space War 2000 (World)", "" }, - { 0x55A0669C, "[BIOS] Atari Jaguar Developer CD (World)", "" }, - { 0x58272540, "Syndicate (World)", "" }, - { 0x5A101212, "Sensible Soccer - International Edition (World)", "" }, - { 0x5B6BB205, "Ruiner Pinball (World)", "" }, - { 0x5CFF14AB, "Pinball Fantasies (World)", "" }, - { 0x5E2CDBC0, "Doom (World)", "" }, - { 0x61C7EEC0, "Zero 5 (World)", "" }, - { 0x67F9AB3A, "Battle Sphere Gold (World)", "" }, - { 0x687068D5, "[BIOS] Atari Jaguar CD (World)", "" }, - { 0x6B2B95AD, "Tempest 2000 (World)", "" }, - { 0x6EB774EB, "Worms (World)", "" }, - { 0x6F8B2547, "Super Burnout (World)", "" }, - { 0x817A2273, "Pitfall - The Mayan Adventure (World)", "" }, - { 0x8975F48B, "Zool 2 (World)", "" }, - { 0x8D15DBC6, "[BIOS] Atari Jaguar Stubulator '94 (World)", "" }, - { 0x8FEA5AB0, "Dragon - The Bruce Lee Story (World)", "" }, - { 0x97EB4651, "I-War (World)", "" }, - { 0xA27823D8, "Ultra Vortek (World) (v0.94) (Beta)", "" }, - { 0xA56D0798, "Protector - Special Edition (World)", "" }, - { 0xA9F8A00E, "Rayman (World)", "" }, - { 0xB14C4753, "Fight for Life (World)", "" }, - { 0xBCB1A4BF, "Brutal Sports Football (World)", "" }, - { 0xBDA405C6, "Cannon Fodder (World)", "" }, - { 0xBDE67498, "Cybermorph (World) (Rev 1)", "" }, - { 0xC5562581, "Zoop! (World)", "" }, - { 0xC654681B, "Total Carnage (World)", "" }, - { 0xC6C7BA62, "Fight for Life (World) (Alt)", "" }, - { 0xC9608717, "Val d'Isere Skiing and Snowboarding (World)", "" }, - { 0xCBFD822A, "Air Cars (World)", "" }, - { 0xCD5BF827, "Attack of the Mutant Penguins (World)", "" }, - { 0xD6C19E34, "Iron Soldier 2 (World)", "" }, - { 0xDA9C4162, "Missile Command 3D (World)", "" }, - { 0xDC187F82, "Alien vs Predator (World)", "" }, - { 0xDE55DCC7, "Flashback - The Quest for Identity (World) (En,Fr)", "" }, - { 0xE28756DE, "Atari Karts (World)", "" }, - { 0xE60277BB, "[BIOS] Atari Jaguar Stubulator '93 (World)", "" }, - { 0xE91BD644, "Wolfenstein 3D (World)", "" }, - { 0xEC22F572, "SuperCross 3D (World)", "" }, - { 0xECF854E7, "Cybermorph (World) (Rev 2)", "" }, - { 0xEEE8D61D, "Club Drive (World)", "" }, - { 0xF0360DB3, "Hyper Force (World)", "" }, - { 0xFA7775AE, "Checkered Flag (World)", "" }, - { 0xFAE31DD0, "Flip Out! (World)", "" }, - { 0xFB731AAA, "[BIOS] Atari Jaguar (World)", "" }, - { 0xFFFFFFFF, "***END***", "" } -}; - /* Our strategy here is like so: Look at the files in the directory pointed to by ROMPath. @@ -108,90 +33,42 @@ put that in the list. User picks from a graphical image of the cart. Ideally, the label will go into the archive along with the ROM image, but that's for the future... Maybe box art, screenshots will go as well... + +I'm thinking compatibility info should be displayed as well... Just to stop the +inevitable stupid questions from people too lazy to do basic research for themselves. */ -//FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog)//could use Window as well... +//could use Window as well... +//FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog) FilePickerWindow::FilePickerWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Window) { setWindowTitle("Insert Cartridge..."); -#if 0 - fileList2 = new QListWidget(this); -// addWidget(fileList); - - QVBoxLayout * layout = new QVBoxLayout(); -// layout->setSizeConstraint(QLayout::SetFixedSize); - setLayout(layout); - - layout->addWidget(fileList2); - -// PopulateList(); - fileThread = new FileThread(this); - - /*bool b =*/ connect(fileThread, SIGNAL(FoundAFile(unsigned long)), this, SLOT(AddFileToList(unsigned long))); -//printf("FilePickerWindow: Connection to FileThread %s...\n", (b ? "succeeded" : "failed")); - - fileThread->Go(fileList2); -#else -//is there any reason why this must be cast as a QAbstractListModel? +//is there any reason why this must be cast as a QAbstractListModel? No //Also, need to think about data structure for the model... - model = new FileListModel(); - fileList = new QListView(); + model = new FileListModel; + fileList = new QListView; fileList->setModel(model); - ImageDelegate * delegate = new ImageDelegate(this); - fileList->setItemDelegate(delegate); + fileList->setItemDelegate(new ImageDelegate(this)); QVBoxLayout * layout = new QVBoxLayout; setLayout(layout); - layout->addWidget(fileList); - ((FileListModel *)model)->AddData(QIcon(":/res/generic.png")); - ((FileListModel *)model)->AddData(QIcon(":/res/generic.png")); -#endif -} - -// Need a slot here to pickup stuff from the thread... -void FilePickerWindow::AddFileToList(unsigned long index) -{ - printf("--> Found CRC: %08X...\n", romList2[index].crc32); + fileThread = new FileThread(this); + connect(fileThread, SIGNAL(FoundAFile(unsigned long)), this, SLOT(AddFileToList(unsigned long))); + fileThread->Go(); } - -/* -void FilePickerWindow::PopulateList(void) +// +// This slot gets called by the FileThread's run() function when it finds a +// match in the filesystem to a ROM on our CRC list. +// +void FilePickerWindow::AddFileToList(unsigned long index) { - QDir romDir(vjs.ROMPath); - QFileInfoList list = romDir.entryInfoList(); - - for(int i=0; i Found CRC: %08X...\n", romList2[index].crc32); + // NOTE: The model *ignores* what you send it, so this is crap. !!! FIX !!! +// model->AddData(QIcon(":/res/generic.png")); + model->AddData(index); } -*/ diff --git a/src/gui/filepicker.h b/src/gui/filepicker.h index 543de0e..f0b5143 100644 --- a/src/gui/filepicker.h +++ b/src/gui/filepicker.h @@ -8,7 +8,7 @@ // Forward declarations class QListWidget; class FileThread; -//class FileListModel; +class FileListModel; class QListView; class FilePickerWindow: public QWidget @@ -28,6 +28,7 @@ class FilePickerWindow: public QWidget private: QListWidget * fileList2; FileThread * fileThread; - QAbstractItemModel * model; +// QAbstractItemModel * model; + FileListModel * model; QListView * fileList; }; diff --git a/src/gui/filethread.cpp b/src/gui/filethread.cpp index 7ecb453..a6ecd3f 100644 --- a/src/gui/filethread.cpp +++ b/src/gui/filethread.cpp @@ -18,12 +18,14 @@ #include "settings.h" //#include "types.h" +#if 0 struct RomIdentifier { const uint32 crc32; const char name[128]; const char file[128]; }; +#endif RomIdentifier romList[] = { { 0x0509C85E, "Raiden (World)", "" }, @@ -107,7 +109,7 @@ for the future... Maybe box art, screenshots will go as well... */ -FileThread::FileThread(QObject * parent/*= 0*/): QThread(parent), listWidget(NULL), abort(false) +FileThread::FileThread(QObject * parent/*= 0*/): QThread(parent), /*listWidget(NULL),*/ abort(false) { } @@ -121,13 +123,17 @@ FileThread::~FileThread() wait(); } -void FileThread::Go(QListWidget * lw) +//void FileThread::Go(QListWidget * lw) +void FileThread::Go(void) { QMutexLocker locker(&mutex); - this->listWidget = lw; +// this->listWidget = lw; start(); } +// +// Here's the thread's actual execution path... +// void FileThread::run(void) { QDir romDir(vjs.ROMPath); @@ -165,8 +171,8 @@ printf("FileThread: Aborting!!!\n"); if (index != 0xFFFFFFFF) { -printf("FileThread: Found match [%s]...\n", romList[index].name); - new QListWidgetItem(QIcon(":/res/generic.png"), romList[index].name, listWidget); +//printf("FileThread: Found match [%s]...\n", romList[index].name); +// new QListWidgetItem(QIcon(":/res/generic.png"), romList[index].name, listWidget); // emit FoundAFile(romList[index].crc32); emit FoundAFile(index); } diff --git a/src/gui/filethread.h b/src/gui/filethread.h index 12c316f..6690dc6 100644 --- a/src/gui/filethread.h +++ b/src/gui/filethread.h @@ -9,7 +9,7 @@ #include "types.h" // Forward declarations -class QListWidget; +//class QListWidget; class FileThread: public QThread { @@ -18,7 +18,8 @@ class FileThread: public QThread public: FileThread(QObject * parent = 0); ~FileThread(); - void Go(QListWidget * lw); +// void Go(QListWidget * lw); + void Go(void); signals: void FoundAFile(unsigned long index); @@ -28,10 +29,19 @@ class FileThread: public QThread uint32 FindCRCIndexInFileList(uint32); private: - QListWidget * listWidget; +// QListWidget * listWidget; QMutex mutex; QWaitCondition condition; bool abort; }; +struct RomIdentifier +{ + const uint32 crc32; + const char name[128]; + const char file[128]; +}; + +extern RomIdentifier romList[]; + #endif // __FILETHREAD_H__ diff --git a/src/gui/imagedelegate.cpp b/src/gui/imagedelegate.cpp index 76e690b..7087915 100644 --- a/src/gui/imagedelegate.cpp +++ b/src/gui/imagedelegate.cpp @@ -15,6 +15,8 @@ // class utilized in FilePicker. #include "imagedelegate.h" +#warning "Move ROM database to its own file... !!! FIX !!!" +#include "filethread.h" ImageDelegate::ImageDelegate(QObject * parent): QAbstractItemDelegate(parent), pixelSize(12) @@ -71,7 +73,11 @@ The foreground of the item (the circle representing a pixel) must be rendered us #else // painter->drawPixmap(option.rect.x()+8, option.rect.y()+8, 200, 94, QPixmap(":/res/labels/rayman.jpg")); painter->drawPixmap(option.rect.x(), option.rect.y(), 488/2, 395/2, QPixmap(":/res/cart-blank.png")); - painter->drawPixmap(option.rect.x()+13, option.rect.y()+51, 433/2, 203/2, QPixmap(":/res/labels/rayman.jpg")); +// painter->drawPixmap(option.rect.x()+13, option.rect.y()+51, 433/2, 203/2, QPixmap(":/res/labels/rayman.jpg")); + painter->drawPixmap(option.rect.x()+14, option.rect.y()+50, 433/2, 203/2, QPixmap(":/res/label-blank.png")); +//Need to query the model for the data we're supposed to draw here... + unsigned long i = index.model()->data(index, Qt::DisplayRole).toUInt(); + painter->drawText(17, 73, QString(romList[i].name)); //26x100 #endif painter->restore(); diff --git a/src/gui/vj.qrc b/src/gui/vj.qrc index f55a393..4f7e92a 100644 --- a/src/gui/vj.qrc +++ b/src/gui/vj.qrc @@ -7,6 +7,7 @@ ../../res/zoom300.png ../../res/generic.png ../../res/cart-blank.png + ../../res/label-blank.png ../../res/vj_title_small.png ../../res/labels/rayman.jpg -- 2.37.2