From: Shamus Hammons Date: Tue, 29 May 2007 02:17:17 +0000 (+0000) Subject: Creating trunk (should've done this from the start)... X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bd73c05044baf1669c5f7e8c26aef531970c3a9;p=apple2 Creating trunk (should've done this from the start)... --- diff --git a/apple2/Makefile b/apple2/Makefile new file mode 100755 index 0000000..a41a08a --- /dev/null +++ b/apple2/Makefile @@ -0,0 +1,164 @@ +# +# Unified Makefile for Apple 2 SDL +# +# by James L. Hammons +# (C) 2005 Underground Software +# This software is licensed under the GPL v2 +# + +# Figure out which system we're compiling for, and set the appropriate variables + +ifeq "$(OSTYPE)" "msys" # Win32 + +SYSTYPE = __GCCWIN32__ +EXESUFFIX = .exe +GLLIB = -lopengl32 +ICON = obj/icon.o +SDLLIBTYPE = --libs +MSG = Win32 on MinGW + +else +#ifeq "$(OSTYPE)" "darwin" +ifeq "darwin" "$(findstring darwin,$(OSTYPE))" # Should catch both 'darwin' and 'darwin7.0' + +SYSTYPE = __GCCUNIX__ -D_OSX_ +EXESUFFIX = +GLLIB = +ICON = +SDLLIBTYPE = --static-libs +MSG = Mac OS X + +else # *nix + +SYSTYPE = __GCCUNIX__ +EXESUFFIX = +GLLIB = -lGL +ICON = +SDLLIBTYPE = --libs +MSG = generic Unix/Linux + +endif +endif + +CC = gcc +LD = gcc +TARGET = apple2 + +# 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) \ +# No optimization and w/gcov flags, so that we get an accurate picture from gcov +#CFLAGS = -MMD -Wall -Wno-switch -D$(SYSTYPE) \ +# -ffast-math -fomit-frame-pointer `sdl-config --cflags` -fprofile-arcs -ftest-coverage +#CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -D$(SYSTYPE) \ +# -ffast-math -fomit-frame-pointer `sdl-config --cflags` -fprofile-arcs -ftest-coverage +# No optimization for profiling with gprof... +CFLAGS = -MMD -Wall -Wno-switch -D$(SYSTYPE) \ + -ffast-math `sdl-config --cflags` -pg +CPPFLAGS = -MMD -Wall -Wno-switch -Wno-non-virtual-dtor -D$(SYSTYPE) \ + -ffast-math `sdl-config --cflags` -pg +# -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) +# Link in the gcov library (for profiling purposes) +#LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -lgcov +# Link in the gprof lib +LIBS = -L/usr/local/lib -L/usr/lib `sdl-config $(SDLLIBTYPE)` -lstdc++ -lz $(GLLIB) -pg + +INCS = -I. -I./src -I/usr/local/include -I/usr/include + +OBJS = \ + obj/button.o \ + obj/draggablewindow.o \ + obj/element.o \ + obj/gui.o \ + obj/guimisc.o \ + obj/menu.o \ + obj/textedit.o \ + obj/window.o \ + \ + obj/applevideo.o \ + obj/ay8910.o \ + obj/dis65c02.o \ + obj/floppy.o \ + obj/log.o \ + obj/sdlemu_config.o \ + obj/sdlemu_opengl.o \ + obj/settings.o \ + obj/sound.o \ + obj/timing.o \ + obj/v65c02.o \ + obj/video.o \ + obj/apple2.o \ + $(ICON) + +all: checkenv message obj $(TARGET)$(EXESUFFIX) + @echo + @echo "*** Looks like it compiled OK... Give it a whirl!" + +# Check the compilation environment, barf if not appropriate + +checkenv: + @echo + @echo -n "*** Checking compilation environment... " +ifeq "" "$(shell which sdl-config)" + @echo + @echo + @echo "It seems that you don't have the SDL development libraries installed. If you" + @echo "have installed them, make sure that the sdl-config file is somewhere in your" + @echo "path and is executable." + @echo +#Is there a better way to break out of the makefile? + @break +else + @echo "OK" +endif + +message: + @echo + @echo "*** Building Apple 2 SDL for $(MSG)..." + @echo + +clean: + @echo -n "*** Cleaning out the garbage..." + @rm -rf obj + @rm -f ./$(TARGET)$(EXESUFFIX) + @echo "done!" + +obj: + @mkdir obj + +# This is only done for Win32 at the moment... + +ifneq "" "$(ICON)" +$(ICON): res/$(TARGET).rc res/$(TARGET).ico + @echo "*** Processing icon..." + @windres -i res/$(TARGET).rc -o $(ICON) --include-dir=./res +endif + +obj/%.o: src/%.c + @echo "*** Compiling $<..." + @$(CC) $(CFLAGS) $(INCS) -c $< -o $@ + +obj/%.o: src/%.cpp + @echo "*** Compiling $<..." + @$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@ + +#GUI compilation... +obj/%.o: src/gui/%.cpp + @echo "*** Compiling $<..." + @$(CC) $(CPPFLAGS) $(INCS) -c $< -o $@ + +$(TARGET)$(EXESUFFIX): $(OBJS) + @echo "*** Linking it all together..." + @$(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 in there just in case they haven't been created yet + +-include obj/*.d diff --git a/apple2/ROMs/apple2.rom b/apple2/ROMs/apple2.rom new file mode 100755 index 0000000..cb94b9f Binary files /dev/null and b/apple2/ROMs/apple2.rom differ diff --git a/apple2/ROMs/apple2c.rom b/apple2/ROMs/apple2c.rom new file mode 100755 index 0000000..73055d3 Binary files /dev/null and b/apple2/ROMs/apple2c.rom differ diff --git a/apple2/ROMs/apple2e.rom b/apple2/ROMs/apple2e.rom new file mode 100755 index 0000000..65bb648 Binary files /dev/null and b/apple2/ROMs/apple2e.rom differ diff --git a/apple2/apple2.cfg b/apple2/apple2.cfg new file mode 100755 index 0000000..ece7b9c --- /dev/null +++ b/apple2/apple2.cfg @@ -0,0 +1,141 @@ +# +# Apple 2 configuration file +# + +# Apple ROM paths + +BIOSROM = ./ROMs/apple2.rom +diskROM = ./ROMs/disk.rom +ROMs = ./ROMs + +# Auto state loading/saving upon starting/quitting Apple2 (1 - use, 0 - don't use) + +autoSaveState = 1 +#This is the default--we don't advertise it just yet... ;-) +#autoStateFilename = ./apple2auto.state + +# TEMPORARY disk image load paths + +#floppyImage1 = ./disks/dos33.dsk +#floppyImage1 = ./disks/prodos.dsk +#floppyImage1 = ./disks/temp.nib +#floppyImage1 = ./disks/temp.dsk +# Yes +#floppyImage1 = ./disks/bt1_boot.dsk +# Yes +#floppyImage1 = ./disks/bt2_boot.dsk +# No +#floppyImage1 = ./disks/bt3_boot.dsk +# Yes +#floppyImage1 = ./disks/Sabotage.dsk +# ??? +#floppyImage1 = ./disks/airheart.dsk +# Yes +#floppyImage1 = ./disks/drol.dsk +# Yes +#floppyImage1 = ./disks/karateka.dsk +# Yes +#floppyImage1 = ./disks/wolfenstein_dos32.nib +# Yes, keys??? +#floppyImage1 = ./disks/MidnightMagic_etc.dsk +# ??? +#floppyImage1 = ./disks/battle_chess_1.dsk +# Yes +#floppyImage1 = ./disks/MoebiusI-1.dsk +# Yes, but crashes on the attract mode +#floppyImage1 = ./disks/MoebiusIIA.dsk +# Yes +#floppyImage1 = ./disks/wind_walker_1.dsk +# Yes +#floppyImage1 = ./disks/dino_eggs.dsk +#floppyImage1 = ./disks/mockingboard1.dsk +#floppyImage1 = ./disks/mockingboard2.dsk +# Yes, but have to load manually +#floppyImage1 = ./disks/ultima_ii-1.dsk +#floppyImage2 = ./disks/ultima_ii-2.dsk +# Yes, autoloads! +floppyImage1 = ./disks/u2prog-patched.dsk +floppyImage2 = ./disks/u2player-jlh.dsk + + +# OpenGL options: 1 - use OpenGL rendering, 0 - use old style rendering + +useOpenGL = 1 + +# OpenGL filtering type: 1 - blurry, 0 - sharp + +glFilterType = 0 + +# Display options: 1 - fullscreen, 0 - windowed + +fullscreen = 0 + +# Backend renderer (OpenGL dependent): 0 - regular, 1 - "TV" style + +#renderType = 0 + +# NTSC/PAL options: 1 - NTSC, 0 - PAL + +hardwareTypeNTSC = 1 + +# Framskip options: 0 - no skip, 1-N - draw every Nth frame +# Note: Skipping frames may cause strange visual side effects--don't bother +# reporting these unless they occur with a frameskip value of 0! + +frameSkip = 0 + +# Joystick options: 1 - use joystick, 0 - don't use + +useJoystick = 0 + +# Joyport option: If joystick is enabled above, set the port (0 - 3) here + +joyport = 0 + +# Jaguar joypad key assignments +# Note: It would be nicer to be able to have a single left side to store all this in... +# E.g. p1keys = 34, 32, 22, etc. instead of what we have here... + +p1k_up = 273 # SDLK_UP +p1k_down = 274 # SDLK_DOWN +p1k_left = 276 # SDLK_LEFT +p1k_right = 275 # SDLK_RIGHT +p1k_c = 122 # SDLK_z +p1k_b = 120 # SDLK_x +p1k_a = 99 # SDLK_c +p1k_option = 39 # SDLK_QUOTE +p1k_pause = 13 # SDLK_RETURN +p1k_0 = 256 # SDLK_KP0 +p1k_1 = 257 # SDLK_KP1 +p1k_2 = 258 # SDLK_KP2 +p1k_3 = 259 # SDLK_KP3 +p1k_4 = 260 # SDLK_KP4 +p1k_5 = 261 # SDLK_KP5 +p1k_6 = 262 # SDLK_KP6 +p1k_7 = 263 # SDLK_KP7 +p1k_8 = 264 # SDLK_KP8 +p1k_9 = 265 # SDLK_KP9 +p1k_pound = 267 # SDLK_KP_DIVIDE +p1k_star = 268 # SDLK_KP_MULTIPLY + +p2k_up = 273 # SDLK_UP +p2k_down = 274 # SDLK_DOWN +p2k_left = 276 # SDLK_LEFT +p2k_right = 275 # SDLK_RIGHT +p2k_c = 122 # SDLK_z +p2k_b = 120 # SDLK_x +p2k_a = 99 # SDLK_c +p2k_option = 39 # SDLK_QUOTE +p2k_pause = 13 # SDLK_RETURN +p2k_0 = 256 # SDLK_KP0 +p2k_1 = 257 # SDLK_KP1 +p2k_2 = 258 # SDLK_KP2 +p2k_3 = 259 # SDLK_KP3 +p2k_4 = 260 # SDLK_KP4 +p2k_5 = 261 # SDLK_KP5 +p2k_6 = 262 # SDLK_KP6 +p2k_7 = 263 # SDLK_KP7 +p2k_8 = 264 # SDLK_KP8 +p2k_9 = 265 # SDLK_KP9 +p2k_pound = 267 # SDLK_KP_DIVIDE +p2k_star = 268 # SDLK_KP_MULTIPLY diff --git a/apple2/docs/gpl.txt b/apple2/docs/gpl.txt new file mode 100755 index 0000000..1bcc46f --- /dev/null +++ b/apple2/docs/gpl.txt @@ -0,0 +1,342 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + + diff --git a/apple2/res/apple2.ico b/apple2/res/apple2.ico new file mode 100755 index 0000000..836530c Binary files /dev/null and b/apple2/res/apple2.ico differ diff --git a/apple2/res/apple2.rc b/apple2/res/apple2.rc new file mode 100755 index 0000000..c891182 --- /dev/null +++ b/apple2/res/apple2.rc @@ -0,0 +1,9 @@ +#include "winresrc.h" + +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON DISCARDABLE "apple2.ico" diff --git a/apple2/src/apple2.cpp b/apple2/src/apple2.cpp new file mode 100755 index 0000000..e5fff04 --- /dev/null +++ b/apple2/src/apple2.cpp @@ -0,0 +1,814 @@ +// +// Apple 2 SDL Portable Apple Emulator +// +// by James L. Hammons +// (C) 2005 Underground Software +// +// Loosely based on AppleWin by Tom Charlesworth which was based on AppleWin by +// Oliver Schmidt which was based on AppleWin by Michael O'Brien. :-) Parts are +// also derived from ApplePC. Too bad it was closed source--it could have been +// *the* premier Apple II emulator out there. +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 11/12/2005 Initial port to SDL +// JLH 11/18/2005 Wired up graphic soft switches +// JLH 12/02/2005 Setup timer subsystem for more accurate time keeping +// JLH 12/12/2005 Added preliminary state saving support +// + +// STILL TO DO: +// +// - Port to SDL [DONE] +// - GUI goodies +// - Weed out unneeded functions [DONE] +// - Disk I/O [DONE] +// - 128K IIe related stuff +// - State loading/saving +// + +#include "apple2.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include "log.h" +#include "video.h" +#include "sound.h" +#include "settings.h" +#include "v65c02.h" +#include "applevideo.h" +#include "timing.h" +#include "floppy.h" +#include "firmware.h" + +#include "gui/gui.h" +#include "gui/window.h" +#include "gui/draggablewindow.h" +#include "gui/textedit.h" + +using namespace std; + +// Global variables + +uint8 ram[0x10000], rom[0x10000]; // RAM & ROM spaces +uint8 diskRom[0x100]; // Disk ROM space +V65C02REGS mainCPU; +uint8 appleType = APPLE_TYPE_II; + +// Local variables + +static uint8 lastKeyPressed = 0; +static bool keyDown = false; + +static FloppyDrive floppyDrive; + +enum { LC_BANK_1, LC_BANK_2 }; + +static uint8 visibleBank = LC_BANK_1; +static bool readRAM = false; +static bool writeRAM = false; + +static bool running = true; // Machine running state flag... +static uint32 startTicks; + +static GUI * gui = NULL; + +// Local functions (technically, they're global...) + +bool LoadImg(char * filename, uint8 * ram, int size); +uint8 RdMem(uint16 addr); +void WrMem(uint16 addr, uint8 b); +static void SaveApple2State(const char * filename); +static bool LoadApple2State(const char * filename); + +// Local timer callback functions + +static void FrameCallback(void); +static void BlinkTimer(void); + +// Test GUI function + +Element * TestWindow(void) +{ + Element * win = new DraggableWindow(10, 10, 128, 128); +// ((DraggableWindow *)win)->AddElement(new TextEdit(4, 16, 92, 0, "u2prog.dsk", win)); + + return win; +} + +Element * QuitEmulator(void) +{ + gui->Stop(); + running = false; + + return NULL; +} + +/* + Small Apple II memory map: + +$C010 - Clear bit 7 of keyboard data ($C000) +$C030 - Toggle speaker diaphragm +$C051 - Display text +$C054 - Select page 1 +$C056 - Select lo-res +$C058 - Set annuciator-0 output to 0 +$C05A - Set annuciator-0 output to 0 +$C05D - Set annuciator-0 output to 1 +$C05F - Set annuciator-0 output to 1 +$C0E0 - Disk control stepper ($C0E0-7) +$C0E9 - Disk control motor (on) +$C0EA - Disk enable (drive 1) +$C0EC - Disk R/W +$C0EE - Disk set read mode +*/ + +// +// V65C02 read/write memory functions +// + +uint8 RdMem(uint16 addr) +{ + uint8 b; + +#if 0 +if (addr >= 0xC000 && addr <= 0xC0FF) + WriteLog("\n*** Read at I/O address %04X\n", addr); +#endif +#if 0 +if (addr >= 0xC080 && addr <= 0xC08F) + WriteLog("\n*** Read at I/O address %04X\n", addr); +#endif + + if ((addr & 0xFFF0) == 0xC000) + { + return lastKeyPressed | (keyDown ? 0x80 : 0x00); + } + else if ((addr & 0xFFF0) == 0xC010) + { +//This is bogus: keyDown is set to false, so return val NEVER is set... +//Fixed... +//Also, this is IIe/IIc only...! + uint8 retVal = lastKeyPressed | (keyDown ? 0x80 : 0x00); + keyDown = false; + return retVal; + } + else if ((addr & 0xFFF0) == 0xC030) + { + ToggleSpeaker(GetCurrentV65C02Clock()); +//should it return something else here??? + return 0x00; + } + else if (addr == 0xC050) + { + textMode = false; + } + else if (addr == 0xC051) + { + textMode = true; + } + else if (addr == 0xC052) + { + mixedMode = false; + } + else if (addr == 0xC053) + { + mixedMode = true; + } + else if (addr == 0xC054) + { + displayPage2 = false; + } + else if (addr == 0xC055) + { + displayPage2 = true; + } + else if (addr == 0xC056) + { + hiRes = false; + } + else if (addr == 0xC057) + { + hiRes = true; + } + +//Note that this is a kludge: The $D000-$DFFF 4K space is shared (since $C000-$CFFF is +//memory mapped) between TWO banks, and that that $E000-$FFFF RAM space is a single bank. +//[SHOULD BE FIXED NOW] +//OK! This switch selects bank 2 of the 4K bank at $D000-$DFFF. One access makes it +//visible, two makes it R/W. + + else if ((addr & 0xFFFB) == 0xC080) + { +//$C080 49280 OECG R Read RAM bank 2; no write + visibleBank = LC_BANK_2; + readRAM = true; + writeRAM = false; + } + else if ((addr & 0xFFFB) == 0xC081) + { +//$C081 49281 ROMIN OECG RR Read ROM; write RAM bank 2 + visibleBank = LC_BANK_2; + readRAM = false; + writeRAM = true; + } + else if ((addr & 0xFFFB) == 0xC082) + { +//$C082 49282 OECG R Read ROM; no write + visibleBank = LC_BANK_2; + readRAM = false; + writeRAM = false; + } + else if ((addr & 0xFFFB) == 0xC083) + { +//$C083 49283 LCBANK2 OECG RR Read/write RAM bank 2 + visibleBank = LC_BANK_2; + readRAM = true; + writeRAM = true; + } + else if ((addr & 0xFFFB) == 0xC088) + { +//$C088 49288 OECG R Read RAM bank 1; no write + visibleBank = LC_BANK_1; + readRAM = true; + writeRAM = false; + } + else if ((addr & 0xFFFB) == 0xC089) + { +//$C089 49289 OECG RR Read ROM; write RAM bank 1 + visibleBank = LC_BANK_1; + readRAM = false; + writeRAM = true; + } + else if ((addr & 0xFFFB) == 0xC08A) + { +//$C08A 49290 OECG R Read ROM; no write + visibleBank = LC_BANK_1; + readRAM = false; + writeRAM = false; + } + else if ((addr & 0xFFFB) == 0xC08B) + { +//$C08B 49291 OECG RR Read/write RAM bank 1 + visibleBank = LC_BANK_1; + readRAM = true; + writeRAM = true; + } + else if ((addr & 0xFFF8) == 0xC0E0) + { + floppyDrive.ControlStepper(addr & 0x07); + } + else if ((addr & 0xFFFE) == 0xC0E8) + { + floppyDrive.ControlMotor(addr & 0x01); + } + else if ((addr & 0xFFFE) == 0xC0EA) + { + floppyDrive.DriveEnable(addr & 0x01); + } + else if (addr == 0xC0EC) + { + return floppyDrive.ReadWrite(); + } + else if (addr == 0xC0ED) + { + return floppyDrive.GetLatchValue(); + } + else if (addr == 0xC0EE) + { + floppyDrive.SetReadMode(); + } + else if (addr == 0xC0EF) + { + floppyDrive.SetWriteMode(); + } + +//This sux... + if (addr >= 0xC100 && addr <= 0xCFFF) // The $C000-$CFFF block is *never* RAM + b = rom[addr]; + else if (addr >= 0xD000) + { + if (readRAM) + { + if (addr <= 0xDFFF && visibleBank == LC_BANK_1) + b = ram[addr - 0x1000]; + else + b = ram[addr]; + } + else + b = rom[addr]; + } + else + b = ram[addr]; + + return b; +} + +/* +A-9 (Mockingboard) +APPENDIX F Assembly Language Program Listings + + 1 *PRIMARY ROUTINES + 2 *FOR SLOT 4 + 3 * + 4 ORG $9000 + 5 * ;ADDRESSES + FOR FIRST + 6522 + 6 ORB EQU $C400 ;PORT B + 7 ORA EQU $C401 ;PORT A + 8 DDRB EQU $C402 ;DATA DIRECTION + REGISTER (A) + 9 DDRA EQU $C403 ;DATA DIRECTION + REGISTER (B) + 10 * ;ADDRESSES + FOR SECOND + 6522 + 11 ORB2 EQU $C480 ;PORT B + 12 ORA2 EQU $C481 ;PORT A + 13 DDRB2 EQU $C482 ;DATA DIRECTION + REGISTER (B) + 14 DDRA2 EQU $C483 ;DATA DIRECTION + REGISTER (A) +*/ +void WrMem(uint16 addr, uint8 b) +{ +//temp... +//extern V6809REGS regs; +//if (addr >= 0xC800 && addr <= 0xCBFE) +//if (addr == 0xC80F || addr == 0xC80D) +// WriteLog("WrMem: Writing address %04X with %02X [PC=%04X, $CB00=%02X]\n", addr, b, regs.pc, gram[0xCB00]);//*/ + +#if 0 +if (addr >= 0xC000 && addr <= 0xC0FF) + WriteLog("\n*** Write at I/O address %04X\n", addr); +#endif +/* +Check the BIKO version on Asimov to see if it's been cracked or not... + +7F3D: 29 07 AND #$07 [PC=7F3F, SP=01EA, CC=---B-I--, A=01, X=4B, Y=00] +7F3F: C9 06 CMP #$06 [PC=7F41, SP=01EA, CC=N--B-I--, A=01, X=4B, Y=00] +7F41: 90 03 BCC $7F46 [PC=7F46, SP=01EA, CC=N--B-I--, A=01, X=4B, Y=00] +[7F43: 4C 83 7E JMP $7E83] <- Skipped over... (Prints "THANK YOU VERY MUCH!") +7F46: AA TAX [PC=7F47, SP=01EA, CC=---B-I--, A=01, X=01, Y=00] + +; INX here *ensures* 1 - 6!!! BUG!!! +; Or is it? Could this be part of a braindead copy protection scheme? It's +; awfully close to NOP ($EA)... +; Nothing else touches it once it's been written... Hmm... + +7F47: E8 INX [PC=7F48, SP=01EA, CC=---B-I--, A=01, X=02, Y=00] +7F48: F8 SED [PC=7F49, SP=01EA, CC=---BDI--, A=01, X=02, Y=00] +7F49: 18 CLC [PC=7F4A, SP=01EA, CC=---BDI--, A=01, X=02, Y=00] +7F4A: BD 15 4E LDA $4E15,X [PC=7F4D, SP=01EA, CC=---BDI--, A=15, X=02, Y=00] + +; 4E13: 03 00 +; 4E15: 25 25 15 15 10 20 +; 4E1B: 03 41 99 99 01 00 12 +; 4E22: 99 70 + +7F4D: 65 FC ADC $FC [PC=7F4F, SP=01EA, CC=---BDI--, A=16, X=02, Y=00] +7F4F: 65 FC ADC $FC [PC=7F51, SP=01EA, CC=---BDI--, A=17, X=02, Y=00] +7F51: 65 FC ADC $FC [PC=7F53, SP=01EA, CC=---BDI--, A=18, X=02, Y=00] +7F53: 65 FC ADC $FC [PC=7F55, SP=01EA, CC=---BDI--, A=19, X=02, Y=00] + +; NO checking is done on the raised stat! Aarrrgggghhhhh! + +7F55: 9D 15 4E STA $4E15,X [PC=7F58, SP=01EA, CC=---BDI--, A=19, X=02, Y=00] +7F58: D8 CLD [PC=7F59, SP=01EA, CC=---B-I--, A=19, X=02, Y=00] + +; Print "ALAKAZAM!" and so on... + +7F59: 20 2C 40 JSR $402C [PC=402C, SP=01E8, CC=---B-I--, A=19, X=02, Y=00] +*/ +#if 0 +if (addr == 0x7F47) + WriteLog("\n*** Byte %02X written at address %04X\n", b, addr); +#endif +/* +CLR80STORE=$C000 ;80STORE Off- disable 80-column memory mapping (Write) +SET80STORE=$C001 ;80STORE On- enable 80-column memory mapping (WR-only) + +CLRAUXRD = $C002 ;read from main 48K (WR-only) +SETAUXRD = $C003 ;read from aux/alt 48K (WR-only) + +CLRAUXWR = $C004 ;write to main 48K (WR-only) +SETAUXWR = $C005 ;write to aux/alt 48K (WR-only) + +CLRCXROM = $C006 ;use ROM on cards (WR-only) +SETCXROM = $C007 ;use internal ROM (WR-only) + +CLRAUXZP = $C008 ;use main zero page, stack, & LC (WR-only) +SETAUXZP = $C009 ;use alt zero page, stack, & LC (WR-only) + +CLRC3ROM = $C00A ;use internal Slot 3 ROM (WR-only) +SETC3ROM = $C00B ;use external Slot 3 ROM (WR-only) + +CLR80VID = $C00C ;disable 80-column display mode (WR-only) +SET80VID = $C00D ;enable 80-column display mode (WR-only) + +CLRALTCH = $C00E ;use main char set- norm LC, Flash UC (WR-only) +SETALTCH = $C00F ;use alt char set- norm inverse, LC; no Flash (WR-only) +*/ + if (addr == 0xC00E) + { + alternateCharset = false; + } + else if (addr == 0xC00F) + { + alternateCharset = true; + } + else if ((addr & 0xFFF0) == 0xC010) // Keyboard strobe + { + keyDown = false; + } + else if (addr == 0xC050) + { + textMode = false; + } + else if (addr == 0xC051) + { + textMode = true; + } + else if (addr == 0xC052) + { + mixedMode = false; + } + else if (addr == 0xC053) + { + mixedMode = true; + } + else if (addr == 0xC054) + { + displayPage2 = false; + } + else if (addr == 0xC055) + { + displayPage2 = true; + } + else if (addr == 0xC056) + { + hiRes = false; + } + else if (addr == 0xC057) + { + hiRes = true; + } + else if ((addr & 0xFFF8) == 0xC0E0) + { + floppyDrive.ControlStepper(addr & 0x07); + } + else if ((addr & 0xFFFE) == 0xC0E8) + { + floppyDrive.ControlMotor(addr & 0x01); + } + else if ((addr & 0xFFFE) == 0xC0EA) + { + floppyDrive.DriveEnable(addr & 0x01); + } + else if (addr == 0xC0EC) + { +//change this to Write()? (and the other to Read()?) Dunno. Seems to work OK, but still... + floppyDrive.ReadWrite(); + } + else if (addr == 0xC0ED) + { + floppyDrive.SetLatchValue(b); + } + else if (addr == 0xC0EE) + { + floppyDrive.SetReadMode(); + } + else if (addr == 0xC0EF) + { + floppyDrive.SetWriteMode(); + } +//Still need to add missing I/O switches here... + + if (addr >= 0xD000) + { + if (writeRAM) + { + if (addr <= 0xDFFF && visibleBank == LC_BANK_1) + ram[addr - 0x1000] = b; + else + ram[addr] = b; + } + + return; + } + + ram[addr] = b; +} + +// +// Load a file into RAM/ROM image space +// +bool LoadImg(char * filename, uint8 * ram, int size) +{ + FILE * fp = fopen(filename, "rb"); + + if (fp == NULL) + return false; + + fread(ram, 1, size, fp); + fclose(fp); + + return true; +} + +static void SaveApple2State(const char * filename) +{ +} + +static bool LoadApple2State(const char * filename) +{ + return false; +} + +// +// Main loop +// +int main(int /*argc*/, char * /*argv*/[]) +{ + InitLog("./apple2.log"); + LoadSettings(); + srand(time(NULL)); // Initialize RNG + + // Zero out memory +//Need to bankify this stuff for the IIe emulation... + memset(ram, 0, 0x10000); + memset(rom, 0, 0x10000); + + // Set up V65C02 execution context + memset(&mainCPU, 0, sizeof(V65C02REGS)); + mainCPU.RdMem = RdMem; + mainCPU.WrMem = WrMem; + mainCPU.cpuFlags |= V65C02_ASSERT_LINE_RESET; + + if (!LoadImg(settings.BIOSPath, rom + 0xD000, 0x3000)) + { + WriteLog("Could not open file '%s'!\n", settings.BIOSPath); + return -1; + } + +//This is now included... +/* if (!LoadImg(settings.diskPath, diskRom, 0x100)) + { + WriteLog("Could not open file '%s'!\nDisk II will be unavailable!\n", settings.diskPath); +// return -1; + }//*/ + +//Load up disk image from config file (for now)... + floppyDrive.LoadImage(settings.diskImagePath1, 0); + floppyDrive.LoadImage(settings.diskImagePath2, 1); +// floppyDrive.LoadImage("./disks/temp.nib", 1); // Load temp .nib file into second drive... + +//Kill the DOS ROM in slot 6 for now... +//not + memcpy(rom + 0xC600, diskROM, 0x100); + + WriteLog("About to initialize video...\n"); + if (!InitVideo()) + { + cout << "Aborting!" << endl; + return -1; + } + + // Have to do this *after* video init but *before* sound init...! +//Shouldn't be necessary since we're not doing emulation in the ISR... + if (settings.autoStateSaving) + { + // Load last state from file... + if (!LoadApple2State(settings.autoStatePath)) + WriteLog("Unable to use Apple2 state file \"%s\"!\n", settings.autoStatePath); + } + + +#if 0 +// State loading! +if (!LoadImg("./BT1_6502_RAM_SPACE.bin", ram, 0x10000)) +{ + cout << "Couldn't load state file!" << endl; + cout << "Aborting!!" << endl; + return -1; +} + +//A P Y X S PC +//-- -- -- -- ----- ----- +//00 75 3B 53 FD 01 41 44 + +mainCPU.cpuFlags = 0; +mainCPU.a = 0x00; +mainCPU.x = 0x53; +mainCPU.y = 0x3B; +mainCPU.cc = 0x75; +mainCPU.sp = 0xFD; +mainCPU.pc = 0x4441; + +textMode = false; +mixedMode = false; +displayPage2 = false; +hiRes = true; + +//kludge... +readHiRam = true; +//dumpDis=true; +//kludge II... +memcpy(ram + 0xD000, ram + 0xC000, 0x1000); +#endif + + WriteLog("About to initialize audio...\n"); + SoundInit(); + SDL_EnableUNICODE(1); // Needed to do key translation shit + + gui = new GUI(surface); // Set up the GUI system object... + gui->AddMenuTitle("Apple2"); + gui->AddMenuItem("Test!", TestWindow/*, hotkey*/); + gui->AddMenuItem(""); + gui->AddMenuItem("Quit", QuitEmulator, SDLK_q); + gui->CommitItemsToMenu(); + + SetupBlurTable(); // Set up the color TV emulation blur table + running = true; // Set running status... + + InitializeEventList(); // Clear the event list before we use it... + SetCallbackTime(FrameCallback, 16666.66666667); // Set frame to fire at 1/60 s interval + SetCallbackTime(BlinkTimer, 250000); // Set up blinking at 1/4 s intervals + startTicks = SDL_GetTicks(); + + WriteLog("Entering main loop...\n"); + while (running) + { + double timeToNextEvent = GetTimeToNextEvent(); + Execute65C02(&mainCPU, USEC_TO_M6502_CYCLES(timeToNextEvent)); +//We MUST remove a frame's worth of time in order for the CPU to function... !!! FIX !!! +//(Fix so that this is not a requirement!) + mainCPU.clock -= USEC_TO_M6502_CYCLES(timeToNextEvent); + HandleNextEvent(); + } + + if (settings.autoStateSaving) + { + // Save state here... + SaveApple2State(settings.autoStatePath); + } +floppyDrive.SaveImage(); + + SoundDone(); + VideoDone(); + SaveSettings(); + LogDone(); + + return 0; +} + +/* +Apple II keycodes +----------------- + +Key Aln CTL SHF BTH +----------------------- +space $A0 $A0 $A0 $A0 No xlation +RETURN $8D $8D $8D $8D No xlation +0 $B0 $B0 $B0 $B0 Need to screen shift+0 (?) +1! $B1 $B1 $A1 $A1 No xlation +2" $B2 $B2 $A2 $A2 No xlation +3# $B3 $B3 $A3 $A3 No xlation +4$ $B4 $B4 $A4 $A4 No xlation +5% $B5 $B5 $A5 $A5 No xlation +6& $B6 $B6 $A6 $A6 No xlation +7' $B7 $B7 $A7 $A7 No xlation +8( $B8 $B8 $A8 $A8 No xlation +9) $B9 $B9 $A9 $A9 No xlation +:* $BA $BA $AA $AA No xlation +;+ $BB $BB $AB $AB No xlation +,< $AC $AC $BC $BC No xlation +-= $AD $AD $BD $BD No xlation +.> $AE $AE $BE $BE No xlation +/? $AF $AF $BF $BF No xlation +A $C1 $81 $C1 $81 +B $C2 $82 $C2 $82 +C $C3 $83 $C3 $83 +D $C4 $84 $C4 $84 +E $C5 $85 $C5 $85 +F $C6 $86 $C6 $86 +G $C7 $87 $C7 $87 +H $C8 $88 $C8 $88 +I $C9 $89 $C9 $89 +J $CA $8A $CA $8A +K $CB $8B $CB $8B +L $CC $8C $CC $8C +M $CD $8D $DD $9D -> ODD +N^ $CE $8E $DE $9E -> ODD +O $CF $8F $CF $8F +P@ $D0 $90 $C0 $80 Need to xlate CTL+SHFT+P & SHFT+P (?) +Q $D1 $91 $D1 $91 +R $D2 $92 $D2 $92 +S $D3 $93 $D3 $93 +T $D4 $94 $D4 $94 +U $D5 $95 $D5 $95 +V $D6 $96 $D6 $96 +W $D7 $97 $D7 $97 +X $D8 $98 $D8 $98 +Y $D9 $99 $D9 $99 +Z $DA $9A $DA $9A +<- $88 $88 $88 $88 +-> $95 $95 $95 $95 +ESC $9B $9B $9B $9B No xlation + +*/ +static void FrameCallback(void) +{ + SDL_Event event; + + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_KEYDOWN: + if (event.key.keysym.unicode != 0) + { +//Need to do some key translation here, and screen out non-apple keys as well... + if (event.key.keysym.sym == SDLK_TAB) // Prelim key screening... + break; + + lastKeyPressed = event.key.keysym.unicode; + keyDown = true; + //kludge: should have a caps lock thingy here... + //or all uppercase for ][+... + if (lastKeyPressed >= 'a' && lastKeyPressed <='z') + lastKeyPressed &= 0xDF; // Convert to upper case... + } + + // CTRL+RESET key emulation (mapped to CTRL+`) +// This doesn't work... +// if (event.key.keysym.sym == SDLK_BREAK && (event.key.keysym.mod & KMOD_CTRL)) +// if (event.key.keysym.sym == SDLK_PAUSE && (event.key.keysym.mod & KMOD_CTRL)) + if (event.key.keysym.sym == SDLK_BACKQUOTE && (event.key.keysym.mod & KMOD_CTRL)) +//NOTE that this shouldn't take place until the key is lifted... !!! FIX !!! +//ALSO it seems to leave the machine in an inconsistent state vis-a-vis the language card... + mainCPU.cpuFlags |= V65C02_ASSERT_LINE_RESET; + + if (event.key.keysym.sym == SDLK_RIGHT) + lastKeyPressed = 0x15, keyDown = true; + else if (event.key.keysym.sym == SDLK_LEFT) + lastKeyPressed = 0x08, keyDown = true; + + // Use ALT+Q to exit, as well as the usual window decoration method + if (event.key.keysym.sym == SDLK_q && (event.key.keysym.mod & KMOD_ALT)) + running = false; + + if (event.key.keysym.sym == SDLK_F12) + dumpDis = !dumpDis; // Toggle the disassembly process + else if (event.key.keysym.sym == SDLK_F11) + floppyDrive.LoadImage("./disks/bt1_char.dsk");//Kludge to load char disk... +else if (event.key.keysym.sym == SDLK_F9) +{ + floppyDrive.CreateBlankImage(); +// SpawnMessage("Image cleared..."); +}//*/ +else if (event.key.keysym.sym == SDLK_F10) +{ + floppyDrive.SwapImages(); +// SpawnMessage("Image swapped..."); +}//*/ + + if (event.key.keysym.sym == SDLK_F2)// Toggle the palette + TogglePalette(); + else if (event.key.keysym.sym == SDLK_F3)// Cycle through screen types + CycleScreenTypes(); + +// if (event.key.keysym.sym == SDLK_F5) // Temp GUI launch key + if (event.key.keysym.sym == SDLK_F1) // GUI launch key +//NOTE: Should parse the output to determine whether or not the user requested +// to quit completely... !!! FIX !!! + gui->Run(); + + break; + case SDL_QUIT: + running = false; + } + } + + HandleSoundAtFrameEdge(); // Sound stuff... (ick) + RenderVideoFrame(); + SetCallbackTime(FrameCallback, 16666.66666667); + + while (SDL_GetTicks() - startTicks < 16); // Wait for next frame... + startTicks = SDL_GetTicks(); +} + +static void BlinkTimer(void) +{ + flash = !flash; + SetCallbackTime(BlinkTimer, 250000); // Set up blinking at 1/4 sec intervals +} diff --git a/apple2/src/apple2.h b/apple2/src/apple2.h new file mode 100755 index 0000000..48d39ff --- /dev/null +++ b/apple2/src/apple2.h @@ -0,0 +1,12 @@ +// +// Apple 2 SDL Portable Apple Emulator +// + +#include "types.h" + +enum { APPLE_TYPE_II, APPLE_TYPE_IIE, APPLE_TYPE_IIC }; + +// Global variables (exported) + +extern uint8 ram[0x10000], rom[0x10000]; // RAM & ROM pointers +extern uint8 appleType; diff --git a/apple2/src/applevideo.cpp b/apple2/src/applevideo.cpp new file mode 100755 index 0000000..e9bfaa9 --- /dev/null +++ b/apple2/src/applevideo.cpp @@ -0,0 +1,715 @@ +// +// Apple 2 video support +// +// All the video modes that a real Apple 2 supports are handled here +// +// by James L. Hammons +// (c) 2005 Underground Software +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 12/01/2005 Added color TV/monochrome emulation to hi-res code +// JLH 12/09/2005 Cleaned up color TV emulation code +// JLH 12/09/2005 Fixed lo-res color TV/mono emulation modes +// +// STILL TO DO: +// +// - Fix LoRes mode green mono to skip every other scanline instead of fill +// like white mono does +// - Double HiRes +// - 80 column text +// - Fix OSD text display so that it's visible no matter what background is there [DONE] +// + +// Display routines seem MUCH slower now... !!! INVESTIGATE !!! + +#include "applevideo.h" + +#include // for memset() +#include // for va_* stuff +#include // for vsprintf() +#include "apple2.h" +#include "video.h" +#include "charset.h" +#include "font14pt.h" + +/* Reference: Technote tn-iigs-063 "Master Color Values" + + Color Color Register LR HR DHR Master Color R,G,B + Name Value # # # Value + ---------------------------------------------------- + Black 0 0 0,4 0 $0000 (0,0,0) +(Magenta) Deep Red 1 1 1 $0D03 (D,0,3) + Dark Blue 2 2 8 $0009 (0,0,9) + (Violet) Purple 3 3 2 9 $0D2D (D,2,D) + Dark Green 4 4 4 $0072 (0,7,2) + (Gray 1) Dark Gray 5 5 5 $0555 (5,5,5) + (Blue) Medium Blue 6 6 6 C $022F (2,2,F) + (Cyan) Light Blue 7 7 D $06AF (6,A,F) + Brown 8 8 2 $0850 (8,5,0) + Orange 9 9 5 3 $0F60 (F,6,0) + (Gray 2) Light Gray A A A $0AAA (A,A,A) + Pink B B B $0F98 (F,9,8) + (Green) Light Green C C 1 6 $01D0 (1,D,0) + Yellow D D 7 $0FF0 (F,F,0) + (Aqua) Aquamarine E E E $04F9 (4,F,9) + White F F 3,7 F $0FFF (F,F,F) + + LR: Lo-Res HR: Hi-Res DHR: Double Hi-Res */ + +// Global variables + +bool flash; +bool textMode; +bool mixedMode; +bool displayPage2; +bool hiRes; +bool alternateCharset; +//void SpawnMessage(const char * text, ...); + +// Local variables + +// We set up the colors this way so that they'll be endian safe +// when we cast them to a uint32. + +// "Master Color Values" palette + +static uint8 colors[16 * 4] = { + 0x00, 0x00, 0x00, 0xFF, // Black + 0xDD, 0x00, 0x33, 0xFF, // Deep Red (Magenta) + 0x00, 0x00, 0x99, 0xFF, // Dark Blue + 0xDD, 0x22, 0xDD, 0xFF, // Purple (Violet) + 0x00, 0x77, 0x22, 0xFF, // Dark Green + 0x55, 0x55, 0x55, 0xFF, // Dark Gray (Gray 1) + 0x22, 0x22, 0xFF, 0xFF, // Medium Blue (Blue) + 0x66, 0xAA, 0xFF, 0xFF, // Light Blue (Cyan) + 0x88, 0x55, 0x00, 0xFF, // Brown + 0xFF, 0x66, 0x00, 0xFF, // Orange + 0xAA, 0xAA, 0xAA, 0xFF, // Light Gray (Gray 2) + 0xFF, 0x99, 0x88, 0xFF, // Pink + 0x11, 0xDD, 0x00, 0xFF, // Light Green (Green) + 0xFF, 0xFF, 0x00, 0xFF, // Yellow + 0x44, 0xFF, 0x99, 0xFF, // Aquamarine (Aqua) + 0xFF, 0xFF, 0xFF, 0xFF // White +}; + +// This palette comes from ApplePC's colors (more realistic to my eye ;-) + +static uint8 altColors[16 * 4] = { + 0x00, 0x00, 0x00, 0xFF, + 0x7D, 0x20, 0x41, 0xFF, + 0x41, 0x30, 0x7D, 0xFF, + 0xBE, 0x51, 0xBE, 0xFF, + 0x00, 0x5D, 0x3C, 0xFF, + 0x7D, 0x7D, 0x7D, 0xFF, + 0x41, 0x8E, 0xBA, 0xFF, + 0xBE, 0xAE, 0xFB, 0xFF, + 0x3C, 0x4D, 0x00, 0xFF, + 0xBA, 0x6D, 0x41, 0xFF, + 0x7D, 0x7D, 0x7D, 0xFF, + 0xFB, 0x9E, 0xBE, 0xFF, + 0x3C, 0xAA, 0x3C, 0xFF, + 0xBA, 0xCB, 0x7D, 0xFF, + 0x7D, 0xDB, 0xBA, 0xFF, + 0xFB, 0xFB, 0xFB, 0xFF }; + +// Lo-res starting line addresses + +static uint16 lineAddrLoRes[24] = { + 0x0400, 0x0480, 0x0500, 0x0580, 0x0600, 0x0680, 0x0700, 0x0780, + 0x0428, 0x04A8, 0x0528, 0x05A8, 0x0628, 0x06A8, 0x0728, 0x07A8, + 0x0450, 0x04D0, 0x0550, 0x05D0, 0x0650, 0x06D0, 0x0750, 0x07D0 }; + +// Hi-res starting line addresses + +static uint16 lineAddrHiRes[192] = { + 0x2000, 0x2400, 0x2800, 0x2C00, 0x3000, 0x3400, 0x3800, 0x3C00, + 0x2080, 0x2480, 0x2880, 0x2C80, 0x3080, 0x3480, 0x3880, 0x3C80, + 0x2100, 0x2500, 0x2900, 0x2D00, 0x3100, 0x3500, 0x3900, 0x3D00, + 0x2180, 0x2580, 0x2980, 0x2D80, 0x3180, 0x3580, 0x3980, 0x3D80, + + 0x2200, 0x2600, 0x2A00, 0x2E00, 0x3200, 0x3600, 0x3A00, 0x3E00, + 0x2280, 0x2680, 0x2A80, 0x2E80, 0x3280, 0x3680, 0x3A80, 0x3E80, + 0x2300, 0x2700, 0x2B00, 0x2F00, 0x3300, 0x3700, 0x3B00, 0x3F00, + 0x2380, 0x2780, 0x2B80, 0x2F80, 0x3380, 0x3780, 0x3B80, 0x3F80, + + 0x2028, 0x2428, 0x2828, 0x2C28, 0x3028, 0x3428, 0x3828, 0x3C28, + 0x20A8, 0x24A8, 0x28A8, 0x2CA8, 0x30A8, 0x34A8, 0x38A8, 0x3CA8, + 0x2128, 0x2528, 0x2928, 0x2D28, 0x3128, 0x3528, 0x3928, 0x3D28, + 0x21A8, 0x25A8, 0x29A8, 0x2DA8, 0x31A8, 0x35A8, 0x39A8, 0x3DA8, + + 0x2228, 0x2628, 0x2A28, 0x2E28, 0x3228, 0x3628, 0x3A28, 0x3E28, + 0x22A8, 0x26A8, 0x2AA8, 0x2EA8, 0x32A8, 0x36A8, 0x3AA8, 0x3EA8, + 0x2328, 0x2728, 0x2B28, 0x2F28, 0x3328, 0x3728, 0x3B28, 0x3F28, + 0x23A8, 0x27A8, 0x2BA8, 0x2FA8, 0x33A8, 0x37A8, 0x3BA8, 0x3FA8, + + 0x2050, 0x2450, 0x2850, 0x2C50, 0x3050, 0x3450, 0x3850, 0x3C50, + 0x20D0, 0x24D0, 0x28D0, 0x2CD0, 0x30D0, 0x34D0, 0x38D0, 0x3CD0, + 0x2150, 0x2550, 0x2950, 0x2D50, 0x3150, 0x3550, 0x3950, 0x3D50, + 0x21D0, 0x25D0, 0x29D0, 0x2DD0, 0x31D0, 0x35D0, 0x39D0, 0x3DD0, + + 0x2250, 0x2650, 0x2A50, 0x2E50, 0x3250, 0x3650, 0x3A50, 0x3E50, + 0x22D0, 0x26D0, 0x2AD0, 0x2ED0, 0x32D0, 0x36D0, 0x3AD0, 0x3ED0, + 0x2350, 0x2750, 0x2B50, 0x2F50, 0x3350, 0x3750, 0x3B50, 0x3F50, + 0x23D0, 0x27D0, 0x2BD0, 0x2FD0, 0x33D0, 0x37D0, 0x3BD0, 0x3FD0 }; + +uint16 appleHiresToMono[0x200] = { + 0x0000, 0x3000, 0x0C00, 0x3C00, 0x0300, 0x3300, 0x0F00, 0x3F00, + 0x00C0, 0x30C0, 0x0CC0, 0x3CC0, 0x03C0, 0x33C0, 0x0FC0, 0x3FC0, // $0x + 0x0030, 0x3030, 0x0C30, 0x3C30, 0x0330, 0x3330, 0x0F30, 0x3F30, + 0x00F0, 0x30F0, 0x0CF0, 0x3CF0, 0x03F0, 0x33F0, 0x0FF0, 0x3FF0, // $1x + 0x000C, 0x300C, 0x0C0C, 0x3C0C, 0x030C, 0x330C, 0x0F0C, 0x3F0C, + 0x00CC, 0x30CC, 0x0CCC, 0x3CCC, 0x03CC, 0x33CC, 0x0FCC, 0x3FCC, // $2x + 0x003C, 0x303C, 0x0C3C, 0x3C3C, 0x033C, 0x333C, 0x0F3C, 0x3F3C, + 0x00FC, 0x30FC, 0x0CFC, 0x3CFC, 0x03FC, 0x33FC, 0x0FFC, 0x3FFC, // $3x + 0x0003, 0x3003, 0x0C03, 0x3C03, 0x0303, 0x3303, 0x0F03, 0x3F03, + 0x00C3, 0x30C3, 0x0CC3, 0x3CC3, 0x03C3, 0x33C3, 0x0FC3, 0x3FC3, // $4x + 0x0033, 0x3033, 0x0C33, 0x3C33, 0x0333, 0x3333, 0x0F33, 0x3F33, + 0x00F3, 0x30F3, 0x0CF3, 0x3CF3, 0x03F3, 0x33F3, 0x0FF3, 0x3FF3, // $5x + 0x000F, 0x300F, 0x0C0F, 0x3C0F, 0x030F, 0x330F, 0x0F0F, 0x3F0F, + 0x00CF, 0x30CF, 0x0CCF, 0x3CCF, 0x03CF, 0x33CF, 0x0FCF, 0x3FCF, // $6x + 0x003F, 0x303F, 0x0C3F, 0x3C3F, 0x033F, 0x333F, 0x0F3F, 0x3F3F, + 0x00FF, 0x30FF, 0x0CFF, 0x3CFF, 0x03FF, 0x33FF, 0x0FFF, 0x3FFF, // $7x + 0x0000, 0x1800, 0x0600, 0x1E00, 0x0180, 0x1980, 0x0780, 0x1F80, + 0x0060, 0x1860, 0x0660, 0x1E60, 0x01E0, 0x19E0, 0x07E0, 0x1FE0, // $8x + 0x0018, 0x1818, 0x0618, 0x1E18, 0x0198, 0x1998, 0x0798, 0x1F98, + 0x0078, 0x1878, 0x0678, 0x1E78, 0x01F8, 0x19F8, 0x07F8, 0x1FF8, // $9x + 0x0006, 0x1806, 0x0606, 0x1E06, 0x0186, 0x1986, 0x0786, 0x1F86, + 0x0066, 0x1866, 0x0666, 0x1E66, 0x01E6, 0x19E6, 0x07E6, 0x1FE6, // $Ax + 0x001E, 0x181E, 0x061E, 0x1E1E, 0x019E, 0x199E, 0x079E, 0x1F9E, + 0x007E, 0x187E, 0x067E, 0x1E7E, 0x01FE, 0x19FE, 0x07FE, 0x1FFE, // $Bx + 0x0001, 0x1801, 0x0601, 0x1E01, 0x0181, 0x1981, 0x0781, 0x1F81, + 0x0061, 0x1861, 0x0661, 0x1E61, 0x01E1, 0x19E1, 0x07E1, 0x1FE1, // $Cx + 0x0019, 0x1819, 0x0619, 0x1E19, 0x0199, 0x1999, 0x0799, 0x1F99, + 0x0079, 0x1879, 0x0679, 0x1E79, 0x01F9, 0x19F9, 0x07F9, 0x1FF9, // $Dx + 0x0007, 0x1807, 0x0607, 0x1E07, 0x0187, 0x1987, 0x0787, 0x1F87, + 0x0067, 0x1867, 0x0667, 0x1E67, 0x01E7, 0x19E7, 0x07E7, 0x1FE7, // $Ex + 0x001F, 0x181F, 0x061F, 0x1E1F, 0x019F, 0x199F, 0x079F, 0x1F9F, + 0x007F, 0x187F, 0x067F, 0x1E7F, 0x01FF, 0x19FF, 0x07FF, 0x1FFF, // $Fx + + // Second half adds in the previous byte's lo pixel + + 0x0000, 0x3000, 0x0C00, 0x3C00, 0x0300, 0x3300, 0x0F00, 0x3F00, + 0x00C0, 0x30C0, 0x0CC0, 0x3CC0, 0x03C0, 0x33C0, 0x0FC0, 0x3FC0, // $0x + 0x0030, 0x3030, 0x0C30, 0x3C30, 0x0330, 0x3330, 0x0F30, 0x3F30, + 0x00F0, 0x30F0, 0x0CF0, 0x3CF0, 0x03F0, 0x33F0, 0x0FF0, 0x3FF0, // $1x + 0x000C, 0x300C, 0x0C0C, 0x3C0C, 0x030C, 0x330C, 0x0F0C, 0x3F0C, + 0x00CC, 0x30CC, 0x0CCC, 0x3CCC, 0x03CC, 0x33CC, 0x0FCC, 0x3FCC, // $2x + 0x003C, 0x303C, 0x0C3C, 0x3C3C, 0x033C, 0x333C, 0x0F3C, 0x3F3C, + 0x00FC, 0x30FC, 0x0CFC, 0x3CFC, 0x03FC, 0x33FC, 0x0FFC, 0x3FFC, // $3x + 0x0003, 0x3003, 0x0C03, 0x3C03, 0x0303, 0x3303, 0x0F03, 0x3F03, + 0x00C3, 0x30C3, 0x0CC3, 0x3CC3, 0x03C3, 0x33C3, 0x0FC3, 0x3FC3, // $4x + 0x0033, 0x3033, 0x0C33, 0x3C33, 0x0333, 0x3333, 0x0F33, 0x3F33, + 0x00F3, 0x30F3, 0x0CF3, 0x3CF3, 0x03F3, 0x33F3, 0x0FF3, 0x3FF3, // $5x + 0x000F, 0x300F, 0x0C0F, 0x3C0F, 0x030F, 0x330F, 0x0F0F, 0x3F0F, + 0x00CF, 0x30CF, 0x0CCF, 0x3CCF, 0x03CF, 0x33CF, 0x0FCF, 0x3FCF, // $6x + 0x003F, 0x303F, 0x0C3F, 0x3C3F, 0x033F, 0x333F, 0x0F3F, 0x3F3F, + 0x00FF, 0x30FF, 0x0CFF, 0x3CFF, 0x03FF, 0x33FF, 0x0FFF, 0x3FFF, // $7x + 0x2000, 0x3800, 0x2600, 0x3E00, 0x2180, 0x3980, 0x2780, 0x3F80, + 0x2060, 0x3860, 0x2660, 0x3E60, 0x21E0, 0x39E0, 0x27E0, 0x3FE0, // $8x + 0x2018, 0x3818, 0x2618, 0x3E18, 0x2198, 0x3998, 0x2798, 0x3F98, + 0x2078, 0x3878, 0x2678, 0x3E78, 0x21F8, 0x39F8, 0x27F8, 0x3FF8, // $9x + 0x2006, 0x3806, 0x2606, 0x3E06, 0x2186, 0x3986, 0x2786, 0x3F86, + 0x2066, 0x3866, 0x2666, 0x3E66, 0x21E6, 0x39E6, 0x27E6, 0x3FE6, // $Ax + 0x201E, 0x381E, 0x261E, 0x3E1E, 0x219E, 0x399E, 0x279E, 0x3F9E, + 0x207E, 0x387E, 0x267E, 0x3E7E, 0x21FE, 0x39FE, 0x27FE, 0x3FFE, // $Bx + 0x2001, 0x3801, 0x2601, 0x3E01, 0x2181, 0x3981, 0x2781, 0x3F81, + 0x2061, 0x3861, 0x2661, 0x3E61, 0x21E1, 0x39E1, 0x27E1, 0x3FE1, // $Cx + 0x2019, 0x3819, 0x2619, 0x3E19, 0x2199, 0x3999, 0x2799, 0x3F99, + 0x2079, 0x3879, 0x2679, 0x3E79, 0x21F9, 0x39F9, 0x27F9, 0x3FF9, // $Dx + 0x2007, 0x3807, 0x2607, 0x3E07, 0x2187, 0x3987, 0x2787, 0x3F87, + 0x2067, 0x3867, 0x2667, 0x3E67, 0x21E7, 0x39E7, 0x27E7, 0x3FE7, // $Ex + 0x201F, 0x381F, 0x261F, 0x3E1F, 0x219F, 0x399F, 0x279F, 0x3F9F, + 0x207F, 0x387F, 0x267F, 0x3E7F, 0x21FF, 0x39FF, 0x27FF, 0x3FFF // $Fx +}; + +static uint8 blurTable[0x800][8]; // Color TV blur table +static uint32 * palette = (uint32 *)altColors; +enum { ST_FIRST_ENTRY = 0, ST_COLOR_TV = 0, ST_WHITE_MONO, ST_GREEN_MONO, ST_LAST_ENTRY }; +static uint8 screenType = ST_COLOR_TV; + +// Local functions + +static void Render40ColumnTextLine(uint8 line); +static void Render40ColumnText(void); +static void RenderLoRes(uint16 toLine = 24); +static void RenderHiRes(uint16 toLine = 192); + + +void SetupBlurTable(void) +{ + // NOTE: This table only needs to be 7 bits wide instead of 11, since the + // last four bits are copies of the previous four... + + for(uint16 bitPat=0; bitPat<0x800; bitPat++) + { + uint16 w3 = bitPat & 0x888; + uint16 w2 = bitPat & 0x444; + uint16 w1 = bitPat & 0x222; + uint16 w0 = bitPat & 0x111; + + uint16 blurred3 = (w3 | (w3 >> 1) | (w3 >> 2) | (w3 >> 3)) & 0x00FF; + uint16 blurred2 = (w2 | (w2 >> 1) | (w2 >> 2) | (w2 >> 3)) & 0x00FF; + uint16 blurred1 = (w1 | (w1 >> 1) | (w1 >> 2) | (w1 >> 3)) & 0x00FF; + uint16 blurred0 = (w0 | (w0 >> 1) | (w0 >> 2) | (w0 >> 3)) & 0x00FF; + + for(int8 i=7; i>=0; i--) + { + uint8 color = (((blurred0 >> i) & 0x01) << 3) + | (((blurred1 >> i) & 0x01) << 2) + | (((blurred2 >> i) & 0x01) << 1) + | ((blurred3 >> i) & 0x01); + blurTable[bitPat][7 - i] = color; + } + } +} + +void TogglePalette(void) +{ + if (palette == (uint32 *)colors) + { + palette = (uint32 *)altColors; + SpawnMessage("Color TV palette"); + } + else + { + palette = (uint32 *)colors; + SpawnMessage("\"Master Color Values\" palette"); + } +} + +void CycleScreenTypes(void) +{ + char scrTypeStr[3][40] = { "Color TV", "White monochrome", "Green monochrome" }; + + screenType++; + + if (screenType == ST_LAST_ENTRY) + screenType = ST_FIRST_ENTRY; + + SpawnMessage("%s", scrTypeStr[screenType]); +} + +static uint32 msgTicks = 0; +static char message[4096]; + +void SpawnMessage(const char * text, ...) +{ + va_list arg; + + va_start(arg, text); + vsprintf(message, text, arg); + va_end(arg); + + msgTicks = 120; +} + +static void DrawString2(uint32 x, uint32 y, uint32 color); +static void DrawString(void) +{ +//This approach works, and seems to be fast enough... Though it probably would +//be better to make the oversized font to match this one... + for(uint32 x=7; x<=9; x++) + for(uint32 y=7; y<=9; y++) + DrawString2(x, y, 0x00000000); + + DrawString2(8, 8, 0x0020FF20); +} + +static void DrawString2(uint32 x, uint32 y, uint32 color) +{ +//uint32 x = 8, y = 8; + uint32 length = strlen(message), address = x + (y * VIRTUAL_SCREEN_WIDTH); +// uint32 color = 0x0020FF20; +//This could be done ahead of time, instead of on each pixel... +//(Now it is!) + uint8 nBlue = (color >> 16) & 0xFF, nGreen = (color >> 8) & 0xFF, nRed = color & 0xFF; + + for(uint32 i=0; i> 16) & 0xFF, + eGreen = (existingColor >> 8) & 0xFF, + eRed = existingColor & 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 = 255 - trans; + + uint32 bRed = (eRed * invTrans + nRed * trans) / 255; + uint32 bGreen = (eGreen * invTrans + nGreen * trans) / 255; + uint32 bBlue = (eBlue * invTrans + nBlue * trans) / 255; + +//THIS IS NOT ENDIAN SAFE + *(scrBuffer + address + xx + (yy * VIRTUAL_SCREEN_WIDTH)) = 0xFF000000 | (bBlue << 16) | (bGreen << 8) | bRed; + } + } + } + + address += FONT_WIDTH; + } +} + +static void Render40ColumnTextLine(uint8 line) +{ + uint32 pixelOn = (screenType == ST_GREEN_MONO ? 0xFF61FF61 : 0xFFFFFFFF); + + for(int x=0; x<40; x++) + { + uint8 chr = ram[lineAddrLoRes[line] + (displayPage2 ? 0x0400 : 0x0000) + x]; + + // Render character at (x, y) + + for(int cy=0; cy<8; cy++) + { + for(int cx=0; cx<7; cx++) + { + uint32 pixel = 0xFF000000; + + if (!alternateCharset) + { + if (textChar[((chr & 0x3F) * 56) + cx + (cy * 7)]) +// pixel = 0xFFFFFFFF; + pixel = pixelOn; + + if (chr < 0x80) + pixel = pixel ^ (screenType == ST_GREEN_MONO ? 0x0061FF61 : 0x00FFFFFF); + + if ((chr & 0xC0) == 0x40 && flash) + pixel = 0xFF000000; + } + else + { + if (textChar2e[(chr * 56) + cx + (cy * 7)]) +// pixel = 0xFFFFFFFF; + pixel = pixelOn; + } + +// scrBuffer[(x * 7 * 2) + (line * VIRTUAL_SCREEN_WIDTH * 8) + (cx * 2) + 0 + (cy * VIRTUAL_SCREEN_WIDTH)] = pixel; +// scrBuffer[(x * 7 * 2) + (line * VIRTUAL_SCREEN_WIDTH * 8) + (cx * 2) + 1 + (cy * VIRTUAL_SCREEN_WIDTH)] = pixel; + scrBuffer[(x * 7 * 2) + (line * VIRTUAL_SCREEN_WIDTH * 8 * 2) + (cx * 2) + 0 + (cy * VIRTUAL_SCREEN_WIDTH * 2)] = pixel; + scrBuffer[(x * 7 * 2) + (line * VIRTUAL_SCREEN_WIDTH * 8 * 2) + (cx * 2) + 1 + (cy * VIRTUAL_SCREEN_WIDTH * 2)] = pixel; + + if (screenType == ST_GREEN_MONO) + pixel = 0xFF000000; + + { + scrBuffer[(x * 7 * 2) + (line * VIRTUAL_SCREEN_WIDTH * 8 * 2) + (cx * 2) + 0 + (((cy * 2) + 1) * VIRTUAL_SCREEN_WIDTH)] = pixel; + scrBuffer[(x * 7 * 2) + (line * VIRTUAL_SCREEN_WIDTH * 8 * 2) + (cx * 2) + 1 + (((cy * 2) + 1) * VIRTUAL_SCREEN_WIDTH)] = pixel; + } + } + } + } +} + +static void Render40ColumnText(void) +{ + for(uint8 line=0; line<24; line++) + Render40ColumnTextLine(line); +} + +static void RenderLoRes(uint16 toLine/*= 24*/) +{ +// NOTE: The green mono rendering doesn't skip every other line... !!! FIX !!! +/* +Note that these colors correspond to the bit patterns generated by the numbers 0-F in order: +Color #s correspond to the bit patterns in reverse... Interesting! + +00 00 00 -> 0 [0000] -> 0 (lores color #) +3c 4d 00 -> 8 [0001] -> 8? BROWN +00 5d 3c -> 4 [0010] -> 4? DARK GREEN +3c aa 3c -> 12 [0011] -> 12? LIGHT GREEN (GREEN) +41 30 7d -> 2 [0100] -> 2? DARK BLUE +7d 7d 7d -> 10 [0101] -> 10? LIGHT GRAY +41 8e ba -> 6 [0110] -> 6? MEDIUM BLUE (BLUE) +7d db ba -> 14 [0111] -> 14? AQUAMARINE (AQUA) +7d 20 41 -> 1 [1000] -> 1? DEEP RED (MAGENTA) +ba 6d 41 -> 9 [1001] -> 9? ORANGE +7d 7d 7d -> 5 [1010] -> 5? DARK GRAY +ba cb 7d -> 13 [1011] -> 13? YELLOW +be 51 be -> 3 [1100] -> 3 PURPLE (VIOLET) +fb 9e be -> 11 [1101] -> 11? PINK +be ae fb -> 7 [1110] -> 7? LIGHT BLUE (CYAN) +fb fb fb -> 15 [1111] -> 15 WHITE +*/ + uint8 mirrorNybble[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 }; + +//This is the old "perfect monitor" rendering code... +/* if (screenType != ST_COLOR_TV) // Not correct, but for now... +//if (1) + { + for(uint16 y=0; y> 4]; + + for(int cy=4; cy<8; cy++) + for(int cx=0; cx<14; cx++) + scrBuffer[(x * 14) + (y * VIRTUAL_SCREEN_WIDTH * 8) + cx + (cy * VIRTUAL_SCREEN_WIDTH)] = pixel; + } + } + } + else//*/ + + uint32 pixelOn = (screenType == ST_WHITE_MONO ? 0xFFFFFFFF : 0xFF61FF61); + + for(uint16 y=0; y> 20; + pixels <<= 4; + + for(uint8 j=0; j<4; j++) + { + uint8 color = blurTable[bitPat][j]; + + for(uint32 cy=0; cy<8; cy++) + { + scrBuffer[((x * 14) + (i * 4) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = palette[color]; +// scrBuffer[((x * 14) + (i * 4) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = palette[color]; + } + } + } + + previous3Bits = pixels & 0x70000000; + } + else + { + for(int j=0; j<28; j++) + { + for(uint32 cy=0; cy<8; cy++) + { + scrBuffer[((x * 14) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = (pixels & 0x08000000 ? pixelOn : 0xFF000000); +// scrBuffer[((x * 14) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = (pixels & 0x08000000 ? pixelOn : 0xFF000000); + } + + pixels <<= 1; + } + } + } + + // Now do bottom half... + + previous3Bits = 0; + + for(uint16 x=0; x<40; x+=2) + { + uint8 scrByte1 = ram[lineAddrLoRes[y] + (displayPage2 ? 0x0400 : 0x0000) + x + 0] >> 4; + uint8 scrByte2 = ram[lineAddrLoRes[y] + (displayPage2 ? 0x0400 : 0x0000) + x + 1] >> 4; + scrByte1 = mirrorNybble[scrByte1]; + scrByte2 = mirrorNybble[scrByte2]; + // This is just a guess, but it'll have to do for now... + uint32 pixels = previous3Bits | (scrByte1 << 24) | (scrByte1 << 20) | (scrByte1 << 16) + | ((scrByte1 & 0x0C) << 12) | ((scrByte2 & 0x03) << 12) + | (scrByte2 << 8) | (scrByte2 << 4) | scrByte2; + + // We now have 28 pixels (expanded from 14) in word: mask is $0F FF FF FF + // 0ppp 1111 1111 1111 11|11 1111 1111 1111 + // 31 27 23 19 15 11 7 3 0 + + if (screenType == ST_COLOR_TV) + { + for(uint8 i=0; i<7; i++) + { + uint16 bitPat = (pixels & 0x7F000000) >> 20; + pixels <<= 4; + + for(uint8 j=0; j<4; j++) + { + uint8 color = blurTable[bitPat][j]; + + for(uint32 cy=8; cy<16; cy++) + { + scrBuffer[((x * 14) + (i * 4) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = palette[color]; +// scrBuffer[((x * 14) + (i * 4) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = palette[color]; + } + } + } + + previous3Bits = pixels & 0x70000000; + } + else + { + for(int j=0; j<28; j++) + { + for(uint32 cy=8; cy<16; cy++) + { + scrBuffer[((x * 14) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = (pixels & 0x08000000 ? pixelOn : 0xFF000000); +// scrBuffer[((x * 14) + j) + (((y * 16) + cy) * VIRTUAL_SCREEN_WIDTH)] = (pixels & 0x08000000 ? pixelOn : 0xFF000000); + } + + pixels <<= 1; + } + } + } + } +} + +static void RenderHiRes(uint16 toLine/*= 192*/) +{ + uint32 pixelOn = (screenType == ST_WHITE_MONO ? 0xFFFFFFFF : 0xFF61FF61); + + for(uint16 y=0; y> 20; + pixels <<= 4; + + for(uint8 j=0; j<4; j++) + { + uint8 color = blurTable[bitPat][j]; +#if 0 +//This doesn't seem to make things go any faster... +//It's the OpenGL render that's faster... Hmm... + scrBuffer[(x * 14) + (i * 4) + j + (y * VIRTUAL_SCREEN_WIDTH)] = palette[color]; +#else + scrBuffer[(x * 14) + (i * 4) + j + (((y * 2) + 0) * VIRTUAL_SCREEN_WIDTH)] = palette[color]; + scrBuffer[(x * 14) + (i * 4) + j + (((y * 2) + 1) * VIRTUAL_SCREEN_WIDTH)] = palette[color]; +#endif + } + } + + previous3bits = pixels & 0x70000000; + } + else + { + for(int j=0; j<28; j++) + { + scrBuffer[(x * 14) + j + (((y * 2) + 0) * VIRTUAL_SCREEN_WIDTH)] = (pixels & 0x08000000 ? pixelOn : 0xFF000000); + + if (screenType == ST_GREEN_MONO) + pixels &= 0x07FFFFFF; + + scrBuffer[(x * 14) + j + (((y * 2) + 1) * VIRTUAL_SCREEN_WIDTH)] = (pixels & 0x08000000 ? pixelOn : 0xFF000000); + pixels <<= 1; + } + } + } + } +} + +void RenderVideoFrame(void) +{ +//temp... +/*RenderLoRes(); +RenderScreenBuffer(); +return;//*/ + + if (textMode) + { + // There's prolly more to it than this (like 80 column text), but this'll have to do for now... + Render40ColumnText(); + } + else + { + if (mixedMode) + { + if (hiRes) + { + RenderHiRes(160); + Render40ColumnTextLine(20); + Render40ColumnTextLine(21); + Render40ColumnTextLine(22); + Render40ColumnTextLine(23); + } + else + { + RenderLoRes(20); + Render40ColumnTextLine(20); + Render40ColumnTextLine(21); + Render40ColumnTextLine(22); + Render40ColumnTextLine(23); + } + } + else + { + if (hiRes) + RenderHiRes(); + else + RenderLoRes(); + } + } + + if (msgTicks) + { + DrawString(); + msgTicks--; + } + + RenderScreenBuffer(); +} diff --git a/apple2/src/applevideo.h b/apple2/src/applevideo.h new file mode 100755 index 0000000..975dced --- /dev/null +++ b/apple2/src/applevideo.h @@ -0,0 +1,25 @@ +// +// Apple 2 video support +// + +#ifndef __APPLEVIDEO_H__ +#define __APPLEVIDEO_H__ + +// Global variables (exported) + +extern bool flash; +extern bool textMode; +extern bool mixedMode; +extern bool displayPage2; +extern bool hiRes; +extern bool alternateCharset; + +// Functions (exported) + +void SetupBlurTable(void); +void TogglePalette(void); +void CycleScreenTypes(void); +void SpawnMessage(const char * text, ...); +void RenderVideoFrame(void); + +#endif // __APPLEVIDEO_H__ diff --git a/apple2/src/ay8910.cpp b/apple2/src/ay8910.cpp new file mode 100755 index 0000000..962511b --- /dev/null +++ b/apple2/src/ay8910.cpp @@ -0,0 +1,693 @@ +/*************************************************************************** + + ay8910.cpp + + Emulation of the AY-3-8910 / YM2149 sound chip. + + Based on various code snippets by Ville Hallik, Michael Cuddy, + Tatsuyuki Satoh, Fabrice Frances, Nicola Salmoria. + +***************************************************************************/ + +// +// From mame.txt (http://www.mame.net/readme.html) +// +// VI. Reuse of Source Code +// -------------------------- +// This chapter might not apply to specific portions of MAME (e.g. CPU +// emulators) which bear different copyright notices. +// The source code cannot be used in a commercial product without the written +// authorization of the authors. Use in non-commercial products is allowed, and +// indeed encouraged. If you use portions of the MAME source code in your +// program, however, you must make the full source code freely available as +// well. +// Usage of the _information_ contained in the source code is free for any use. +// However, given the amount of time and energy it took to collect this +// information, if you find new information we would appreciate if you made it +// freely available as well. +// + +// JLH: Removed MAME specific crap + +#include // for memset() +#include "ay8910.h" + +/////////////////////////////////////////////////////////// +// typedefs & dummy funcs to allow MAME code to compile: +// +//typedef UINT8 (*mem_read_handler)(UINT32); +//typedef void (*mem_write_handler)(UINT32, UINT8); +// +//static void logerror(char* psz, ...) +//{ +//} +// +//static unsigned short activecpu_get_pc() +//{ +// return 0; +//} +// +// +/////////////////////////////////////////////////////////// + +#define MAX_OUTPUT 0x7fff + +// See AY8910_set_clock() for definition of STEP +#define STEP 0x8000 + +//This is not used at all... +//static int num = 0, ym_num = 0; + +struct AY8910 +{ + int Channel; + int SampleRate; +// mem_read_handler PortAread; +// mem_read_handler PortBread; +// mem_write_handler PortAwrite; +// mem_write_handler PortBwrite; + int register_latch; + unsigned char Regs[16]; + int lastEnable; + unsigned int UpdateStep; + int PeriodA,PeriodB,PeriodC,PeriodN,PeriodE; + int CountA,CountB,CountC,CountN,CountE; + unsigned int VolA,VolB,VolC,VolE; + unsigned char EnvelopeA,EnvelopeB,EnvelopeC; + unsigned char OutputA,OutputB,OutputC,OutputN; + signed char CountEnv; + unsigned char Hold,Alternate,Attack,Holding; + int RNG; + unsigned int VolTable[32]; +}; + +/* register id's */ +#define AY_AFINE (0) +#define AY_ACOARSE (1) +#define AY_BFINE (2) +#define AY_BCOARSE (3) +#define AY_CFINE (4) +#define AY_CCOARSE (5) +#define AY_NOISEPER (6) +#define AY_ENABLE (7) +#define AY_AVOL (8) +#define AY_BVOL (9) +#define AY_CVOL (10) +#define AY_EFINE (11) +#define AY_ECOARSE (12) +#define AY_ESHAPE (13) + +#define AY_PORTA (14) +#define AY_PORTB (15) + + +static struct AY8910 AYPSG[MAX_8910]; /* array of PSG's */ + + + +void _AYWriteReg(int n, int r, int v) +{ + struct AY8910 *PSG = &AYPSG[n]; + int old; + + + PSG->Regs[r] = v; + + /* A note about the period of tones, noise and envelope: for speed reasons,*/ + /* we count down from the period to 0, but careful studies of the chip */ + /* output prove that it instead counts up from 0 until the counter becomes */ + /* greater or equal to the period. This is an important difference when the*/ + /* program is rapidly changing the period to modulate the sound. */ + /* To compensate for the difference, when the period is changed we adjust */ + /* our internal counter. */ + /* Also, note that period = 0 is the same as period = 1. This is mentioned */ + /* in the YM2203 data sheets. However, this does NOT apply to the Envelope */ + /* period. In that case, period = 0 is half as period = 1. */ + switch( r ) + { + case AY_AFINE: + case AY_ACOARSE: + PSG->Regs[AY_ACOARSE] &= 0x0f; + old = PSG->PeriodA; + PSG->PeriodA = (PSG->Regs[AY_AFINE] + 256 * PSG->Regs[AY_ACOARSE]) * PSG->UpdateStep; + if (PSG->PeriodA == 0) PSG->PeriodA = PSG->UpdateStep; + PSG->CountA += PSG->PeriodA - old; + if (PSG->CountA <= 0) PSG->CountA = 1; + break; + case AY_BFINE: + case AY_BCOARSE: + PSG->Regs[AY_BCOARSE] &= 0x0f; + old = PSG->PeriodB; + PSG->PeriodB = (PSG->Regs[AY_BFINE] + 256 * PSG->Regs[AY_BCOARSE]) * PSG->UpdateStep; + if (PSG->PeriodB == 0) PSG->PeriodB = PSG->UpdateStep; + PSG->CountB += PSG->PeriodB - old; + if (PSG->CountB <= 0) PSG->CountB = 1; + break; + case AY_CFINE: + case AY_CCOARSE: + PSG->Regs[AY_CCOARSE] &= 0x0f; + old = PSG->PeriodC; + PSG->PeriodC = (PSG->Regs[AY_CFINE] + 256 * PSG->Regs[AY_CCOARSE]) * PSG->UpdateStep; + if (PSG->PeriodC == 0) PSG->PeriodC = PSG->UpdateStep; + PSG->CountC += PSG->PeriodC - old; + if (PSG->CountC <= 0) PSG->CountC = 1; + break; + case AY_NOISEPER: + PSG->Regs[AY_NOISEPER] &= 0x1f; + old = PSG->PeriodN; + PSG->PeriodN = PSG->Regs[AY_NOISEPER] * PSG->UpdateStep; + if (PSG->PeriodN == 0) PSG->PeriodN = PSG->UpdateStep; + PSG->CountN += PSG->PeriodN - old; + if (PSG->CountN <= 0) PSG->CountN = 1; + break; + case AY_ENABLE: + if ((PSG->lastEnable == -1) || + ((PSG->lastEnable & 0x40) != (PSG->Regs[AY_ENABLE] & 0x40))) + { + /* write out 0xff if port set to input */ +// if (PSG->PortAwrite) +// (*PSG->PortAwrite)(0, (UINT8) ((PSG->Regs[AY_ENABLE] & 0x40) ? PSG->Regs[AY_PORTA] : 0xff)); // [TC: UINT8 cast] + } + + if ((PSG->lastEnable == -1) || + ((PSG->lastEnable & 0x80) != (PSG->Regs[AY_ENABLE] & 0x80))) + { + /* write out 0xff if port set to input */ +// if (PSG->PortBwrite) +// (*PSG->PortBwrite)(0, (UINT8) ((PSG->Regs[AY_ENABLE] & 0x80) ? PSG->Regs[AY_PORTB] : 0xff)); // [TC: UINT8 cast] + } + + PSG->lastEnable = PSG->Regs[AY_ENABLE]; + break; + case AY_AVOL: + PSG->Regs[AY_AVOL] &= 0x1f; + PSG->EnvelopeA = PSG->Regs[AY_AVOL] & 0x10; + PSG->VolA = PSG->EnvelopeA ? PSG->VolE : PSG->VolTable[PSG->Regs[AY_AVOL] ? PSG->Regs[AY_AVOL]*2+1 : 0]; + break; + case AY_BVOL: + PSG->Regs[AY_BVOL] &= 0x1f; + PSG->EnvelopeB = PSG->Regs[AY_BVOL] & 0x10; + PSG->VolB = PSG->EnvelopeB ? PSG->VolE : PSG->VolTable[PSG->Regs[AY_BVOL] ? PSG->Regs[AY_BVOL]*2+1 : 0]; + break; + case AY_CVOL: + PSG->Regs[AY_CVOL] &= 0x1f; + PSG->EnvelopeC = PSG->Regs[AY_CVOL] & 0x10; + PSG->VolC = PSG->EnvelopeC ? PSG->VolE : PSG->VolTable[PSG->Regs[AY_CVOL] ? PSG->Regs[AY_CVOL]*2+1 : 0]; + break; + case AY_EFINE: + case AY_ECOARSE: + old = PSG->PeriodE; + PSG->PeriodE = ((PSG->Regs[AY_EFINE] + 256 * PSG->Regs[AY_ECOARSE])) * PSG->UpdateStep; + if (PSG->PeriodE == 0) PSG->PeriodE = PSG->UpdateStep / 2; + PSG->CountE += PSG->PeriodE - old; + if (PSG->CountE <= 0) PSG->CountE = 1; + break; + case AY_ESHAPE: + /* envelope shapes: + C AtAlH + 0 0 x x \___ + + 0 1 x x /___ + + 1 0 0 0 \\\\ + + 1 0 0 1 \___ + + 1 0 1 0 \/\/ + ___ + 1 0 1 1 \ + + 1 1 0 0 //// + ___ + 1 1 0 1 / + + 1 1 1 0 /\/\ + + 1 1 1 1 /___ + + The envelope counter on the AY-3-8910 has 16 steps. On the YM2149 it + has twice the steps, happening twice as fast. Since the end result is + just a smoother curve, we always use the YM2149 behaviour. + */ + PSG->Regs[AY_ESHAPE] &= 0x0f; + PSG->Attack = (PSG->Regs[AY_ESHAPE] & 0x04) ? 0x1f : 0x00; + if ((PSG->Regs[AY_ESHAPE] & 0x08) == 0) + { + /* if Continue = 0, map the shape to the equivalent one which has Continue = 1 */ + PSG->Hold = 1; + PSG->Alternate = PSG->Attack; + } + else + { + PSG->Hold = PSG->Regs[AY_ESHAPE] & 0x01; + PSG->Alternate = PSG->Regs[AY_ESHAPE] & 0x02; + } + PSG->CountE = PSG->PeriodE; + PSG->CountEnv = 0x1f; + PSG->Holding = 0; + PSG->VolE = PSG->VolTable[PSG->CountEnv ^ PSG->Attack]; + if (PSG->EnvelopeA) PSG->VolA = PSG->VolE; + if (PSG->EnvelopeB) PSG->VolB = PSG->VolE; + if (PSG->EnvelopeC) PSG->VolC = PSG->VolE; + break; + case AY_PORTA: + if (PSG->Regs[AY_ENABLE] & 0x40) + { +// if (PSG->PortAwrite) +// (*PSG->PortAwrite)(0, PSG->Regs[AY_PORTA]); +// else +// logerror("PC %04x: warning - write %02x to 8910 #%d Port A\n",activecpu_get_pc(),PSG->Regs[AY_PORTA],n); + } + else + { +// logerror("warning: write to 8910 #%d Port A set as input - ignored\n",n); + } + break; + case AY_PORTB: + if (PSG->Regs[AY_ENABLE] & 0x80) + { +// if (PSG->PortBwrite) +// (*PSG->PortBwrite)(0, PSG->Regs[AY_PORTB]); +// else +// logerror("PC %04x: warning - write %02x to 8910 #%d Port B\n",activecpu_get_pc(),PSG->Regs[AY_PORTB],n); + } + else + { +// logerror("warning: write to 8910 #%d Port B set as input - ignored\n",n); + } + break; + } +} + + +// /length/ is the number of samples we require +// NB. This should be called at twice the 6522 IRQ rate or (eg) 60Hz if no IRQ. +void AY8910Update(int chip, int16 ** buffer, int length) // [TC: Removed static] +{ + struct AY8910 *PSG = &AYPSG[chip]; + INT16 *buf1,*buf2,*buf3; + int outn; + + buf1 = buffer[0]; + buf2 = buffer[1]; + buf3 = buffer[2]; + + + /* The 8910 has three outputs, each output is the mix of one of the three */ + /* tone generators and of the (single) noise generator. The two are mixed */ + /* BEFORE going into the DAC. The formula to mix each channel is: */ + /* (ToneOn | ToneDisable) & (NoiseOn | NoiseDisable). */ + /* Note that this means that if both tone and noise are disabled, the output */ + /* is 1, not 0, and can be modulated changing the volume. */ + + + /* If the channels are disabled, set their output to 1, and increase the */ + /* counter, if necessary, so they will not be inverted during this update. */ + /* Setting the output to 1 is necessary because a disabled channel is locked */ + /* into the ON state (see above); and it has no effect if the volume is 0. */ + /* If the volume is 0, increase the counter, but don't touch the output. */ + if (PSG->Regs[AY_ENABLE] & 0x01) + { + if (PSG->CountA <= length*STEP) PSG->CountA += length*STEP; + PSG->OutputA = 1; + } + else if (PSG->Regs[AY_AVOL] == 0) + { + /* note that I do count += length, NOT count = length + 1. You might think */ + /* it's the same since the volume is 0, but doing the latter could cause */ + /* interferencies when the program is rapidly modulating the volume. */ + if (PSG->CountA <= length*STEP) PSG->CountA += length*STEP; + } + if (PSG->Regs[AY_ENABLE] & 0x02) + { + if (PSG->CountB <= length*STEP) PSG->CountB += length*STEP; + PSG->OutputB = 1; + } + else if (PSG->Regs[AY_BVOL] == 0) + { + if (PSG->CountB <= length*STEP) PSG->CountB += length*STEP; + } + if (PSG->Regs[AY_ENABLE] & 0x04) + { + if (PSG->CountC <= length*STEP) PSG->CountC += length*STEP; + PSG->OutputC = 1; + } + else if (PSG->Regs[AY_CVOL] == 0) + { + if (PSG->CountC <= length*STEP) PSG->CountC += length*STEP; + } + + /* for the noise channel we must not touch OutputN - it's also not necessary */ + /* since we use outn. */ + if ((PSG->Regs[AY_ENABLE] & 0x38) == 0x38) /* all off */ + if (PSG->CountN <= length*STEP) PSG->CountN += length*STEP; + + outn = (PSG->OutputN | PSG->Regs[AY_ENABLE]); + + + /* buffering loop */ + while (length) + { + int vola,volb,volc; + int left; + + + /* vola, volb and volc keep track of how long each square wave stays */ + /* in the 1 position during the sample period. */ + vola = volb = volc = 0; + + left = STEP; + do + { + int nextevent; + + + if (PSG->CountN < left) nextevent = PSG->CountN; + else nextevent = left; + + if (outn & 0x08) + { + if (PSG->OutputA) vola += PSG->CountA; + PSG->CountA -= nextevent; + /* PeriodA is the half period of the square wave. Here, in each */ + /* loop I add PeriodA twice, so that at the end of the loop the */ + /* square wave is in the same status (0 or 1) it was at the start. */ + /* vola is also incremented by PeriodA, since the wave has been 1 */ + /* exactly half of the time, regardless of the initial position. */ + /* If we exit the loop in the middle, OutputA has to be inverted */ + /* and vola incremented only if the exit status of the square */ + /* wave is 1. */ + while (PSG->CountA <= 0) + { + PSG->CountA += PSG->PeriodA; + if (PSG->CountA > 0) + { + PSG->OutputA ^= 1; + if (PSG->OutputA) vola += PSG->PeriodA; + break; + } + PSG->CountA += PSG->PeriodA; + vola += PSG->PeriodA; + } + if (PSG->OutputA) vola -= PSG->CountA; + } + else + { + PSG->CountA -= nextevent; + while (PSG->CountA <= 0) + { + PSG->CountA += PSG->PeriodA; + if (PSG->CountA > 0) + { + PSG->OutputA ^= 1; + break; + } + PSG->CountA += PSG->PeriodA; + } + } + + if (outn & 0x10) + { + if (PSG->OutputB) volb += PSG->CountB; + PSG->CountB -= nextevent; + while (PSG->CountB <= 0) + { + PSG->CountB += PSG->PeriodB; + if (PSG->CountB > 0) + { + PSG->OutputB ^= 1; + if (PSG->OutputB) volb += PSG->PeriodB; + break; + } + PSG->CountB += PSG->PeriodB; + volb += PSG->PeriodB; + } + if (PSG->OutputB) volb -= PSG->CountB; + } + else + { + PSG->CountB -= nextevent; + while (PSG->CountB <= 0) + { + PSG->CountB += PSG->PeriodB; + if (PSG->CountB > 0) + { + PSG->OutputB ^= 1; + break; + } + PSG->CountB += PSG->PeriodB; + } + } + + if (outn & 0x20) + { + if (PSG->OutputC) volc += PSG->CountC; + PSG->CountC -= nextevent; + while (PSG->CountC <= 0) + { + PSG->CountC += PSG->PeriodC; + if (PSG->CountC > 0) + { + PSG->OutputC ^= 1; + if (PSG->OutputC) volc += PSG->PeriodC; + break; + } + PSG->CountC += PSG->PeriodC; + volc += PSG->PeriodC; + } + if (PSG->OutputC) volc -= PSG->CountC; + } + else + { + PSG->CountC -= nextevent; + while (PSG->CountC <= 0) + { + PSG->CountC += PSG->PeriodC; + if (PSG->CountC > 0) + { + PSG->OutputC ^= 1; + break; + } + PSG->CountC += PSG->PeriodC; + } + } + + PSG->CountN -= nextevent; + if (PSG->CountN <= 0) + { + /* Is noise output going to change? */ + if ((PSG->RNG + 1) & 2) /* (bit0^bit1)? */ + { + PSG->OutputN = ~PSG->OutputN; + outn = (PSG->OutputN | PSG->Regs[AY_ENABLE]); + } + + /* The Random Number Generator of the 8910 is a 17-bit shift */ + /* register. The input to the shift register is bit0 XOR bit3 */ + /* (bit0 is the output). This was verified on AY-3-8910 and YM2149 chips. */ + + /* The following is a fast way to compute bit17 = bit0^bit3. */ + /* Instead of doing all the logic operations, we only check */ + /* bit0, relying on the fact that after three shifts of the */ + /* register, what now is bit3 will become bit0, and will */ + /* invert, if necessary, bit14, which previously was bit17. */ + if (PSG->RNG & 1) PSG->RNG ^= 0x24000; /* This version is called the "Galois configuration". */ + PSG->RNG >>= 1; + PSG->CountN += PSG->PeriodN; + } + + left -= nextevent; + } while (left > 0); + + /* update envelope */ + if (PSG->Holding == 0) + { + PSG->CountE -= STEP; + if (PSG->CountE <= 0) + { + do + { + PSG->CountEnv--; + PSG->CountE += PSG->PeriodE; + } while (PSG->CountE <= 0); + + /* check envelope current position */ + if (PSG->CountEnv < 0) + { + if (PSG->Hold) + { + if (PSG->Alternate) + PSG->Attack ^= 0x1f; + PSG->Holding = 1; + PSG->CountEnv = 0; + } + else + { + /* if CountEnv has looped an odd number of times (usually 1), */ + /* invert the output. */ + if (PSG->Alternate && (PSG->CountEnv & 0x20)) + PSG->Attack ^= 0x1f; + + PSG->CountEnv &= 0x1f; + } + } + + PSG->VolE = PSG->VolTable[PSG->CountEnv ^ PSG->Attack]; + /* reload volume */ + if (PSG->EnvelopeA) PSG->VolA = PSG->VolE; + if (PSG->EnvelopeB) PSG->VolB = PSG->VolE; + if (PSG->EnvelopeC) PSG->VolC = PSG->VolE; + } + } + +#if 0 + *(buf1++) = (vola * PSG->VolA) / STEP; + *(buf2++) = (volb * PSG->VolB) / STEP; + *(buf3++) = (volc * PSG->VolC) / STEP; +#else + // Output PCM wave [-32768...32767] instead of MAME's voltage level [0...32767] + // - This allows for better s/w mixing + + if(PSG->VolA) + { + if(vola) + *(buf1++) = (vola * PSG->VolA) / STEP; + else + *(buf1++) = - (int) PSG->VolA; + } + else + { + *(buf1++) = 0; + } + + // + + if(PSG->VolB) + { + if(volb) + *(buf2++) = (volb * PSG->VolB) / STEP; + else + *(buf2++) = - (int) PSG->VolB; + } + else + { + *(buf2++) = 0; + } + + // + + if(PSG->VolC) + { + if(volc) + *(buf3++) = (volc * PSG->VolC) / STEP; + else + *(buf3++) = - (int) PSG->VolC; + } + else + { + *(buf3++) = 0; + } +#endif + + length--; + } +} + + +static void AY8910_set_clock(int chip,int clock) +{ + struct AY8910 *PSG = &AYPSG[chip]; + + /* the step clock for the tone and noise generators is the chip clock */ + /* divided by 8; for the envelope generator of the AY-3-8910, it is half */ + /* that much (clock/16), but the envelope of the YM2149 goes twice as */ + /* fast, therefore again clock/8. */ + /* Here we calculate the number of steps which happen during one sample */ + /* at the given sample rate. No. of events = sample rate / (clock/8). */ + /* STEP is a multiplier used to turn the fraction into a fixed point */ + /* number. */ + PSG->UpdateStep = (unsigned int) (((double)STEP * PSG->SampleRate * 8 + clock/2) / clock); // [TC: unsigned int cast] +} + + +static void build_mixer_table(int chip) +{ + struct AY8910 *PSG = &AYPSG[chip]; + int i; + double out; + + + /* calculate the volume->voltage conversion table */ + /* The AY-3-8910 has 16 levels, in a logarithmic scale (3dB per step) */ + /* The YM2149 still has 16 levels for the tone generators, but 32 for */ + /* the envelope generator (1.5dB per step). */ + out = MAX_OUTPUT; + for (i = 31;i > 0;i--) + { + PSG->VolTable[i] = (unsigned int) (out + 0.5); /* round to nearest */ // [TC: unsigned int cast] + + out /= 1.188502227; /* = 10 ^ (1.5/20) = 1.5dB */ + } + PSG->VolTable[0] = 0; +} + + +void AY8910_reset(int chip) +{ + int i; + struct AY8910 *PSG = &AYPSG[chip]; + + PSG->register_latch = 0; + PSG->RNG = 1; + PSG->OutputA = 0; + PSG->OutputB = 0; + PSG->OutputC = 0; + PSG->OutputN = 0xff; + PSG->lastEnable = -1; /* force a write */ + for (i = 0;i < AY_PORTA;i++) + _AYWriteReg(chip,i,0); /* AYWriteReg() uses the timer system; we cannot */ + /* call it at this time because the timer system */ + /* has not been initialized. */ +} + +//------------------------------------- + +void AY8910_InitAll(int nClock, int nSampleRate) +{ + for(int nChip=0; nChipSampleRate = nSampleRate; + +// PSG->PortAread = NULL; +// PSG->PortBread = NULL; +// PSG->PortAwrite = NULL; +// PSG->PortBwrite = NULL; + + AY8910_set_clock(nChip, nClock); + + build_mixer_table(nChip); + } +} + +//------------------------------------- + +void AY8910_InitClock(int nClock) +{ + for(int nChip=0; nChip= MAX_8910) + return NULL; + + return &AYPSG[nAyNum].Regs[0]; +} diff --git a/apple2/src/ay8910.h b/apple2/src/ay8910.h new file mode 100755 index 0000000..f9910ef --- /dev/null +++ b/apple2/src/ay8910.h @@ -0,0 +1,16 @@ +#ifndef AY8910_H +#define AY8910_H + +#include "types.h" + +#define MAX_8910 4 + +void _AYWriteReg(int n, int r, int v); +void AY8910_reset(int chip); +void AY8910Update(int chip, int16 ** buffer, int length); + +void AY8910_InitAll(int nClock, int nSampleRate); +void AY8910_InitClock(int nClock); +uint8 * AY8910_GetRegsPtr(uint16 nAyNum); + +#endif diff --git a/apple2/src/charset.h b/apple2/src/charset.h new file mode 100755 index 0000000..ba91c6e --- /dev/null +++ b/apple2/src/charset.h @@ -0,0 +1,860 @@ +// +// The Apple II/IIe video generator character set +// +// by James L. Hammons +// (C) 2005 Underground Software +// +// While we could pack things into bytes, it doesn't cost too much to have everything +// unpacked as we have it here. +// + +// Apple II character set has 64 chars (56 bytes for each character) + +char textChar[0x0E00] = { + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// Apple IIe/IIc character set has 256 chars (56 bytes for each character) + +char textChar2e[0x3800] = { + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 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, 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, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +#if 0 +char textChar[0x7000] = { + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 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, 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, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#endif diff --git a/apple2/src/dis65c02.cpp b/apple2/src/dis65c02.cpp new file mode 100755 index 0000000..6197659 --- /dev/null +++ b/apple2/src/dis65c02.cpp @@ -0,0 +1,178 @@ +// +// 65C02 disassembler +// +// by James L. Hammons +// (c) 2005 Underground Software +// + +#include +#include +#include "dis65c02.h" +//#include "types.h" +#include "v65c02.h" +#include "log.h" + +using namespace std; + +// External shit + +extern V65C02REGS mainCPU;//Hm. Shouldn't we pass this shit in? + +// Private globals variables + +static uint8 op_mat[256] = { + 14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 2, 3, 3, 2, 14, 10, 14, 0, 8, 9, 9, 13, + 8, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 9, 9, 9, 13, + 14, 6, 0, 0, 0, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13, + 14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 11, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 12, 9, 9, 13, + 13, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 8, 9, 9, 13, + 1, 6, 1, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 9, 9, 10, 13, + 1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13, + 1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13 }; + +static uint8 mnemonics[256][6] = { + "BRK ","ORA ","??? ","??? ","TSB ","ORA ","ASL ","RMB0 ", + "PHP ","ORA ","ASL ","??? ","TSB ","ORA ","ASL ","BBR0 ", + "BPL ","ORA ","ORA ","??? ","TRB ","ORA ","ASL ","RMB1 ", + "CLC ","ORA ","INC ","??? ","TRB ","ORA ","ASL ","BBR1 ", + "JSR ","AND ","??? ","??? ","BIT ","AND ","ROL ","RMB2 ", + "PLP ","AND ","ROL ","??? ","BIT ","AND ","ROL ","BBR2 ", + "BMI ","AND ","AND ","??? ","BIT ","AND ","ROL ","RMB3 ", + "SEC ","AND ","DEC ","??? ","BIT ","AND ","ROL ","BBR3 ", + "RTI ","EOR ","??? ","??? ","??? ","EOR ","LSR ","RMB4 ", + "PHA ","EOR ","LSR ","??? ","JMP ","EOR ","LSR ","BBR4 ", + "BVC ","EOR ","EOR ","??? ","??? ","EOR ","LSR ","RMB5 ", + "CLI ","EOR ","PHY ","??? ","??? ","EOR ","LSR ","BBR5 ", + "RTS ","ADC ","??? ","??? ","STZ ","ADC ","ROR ","RMB6 ", + "PLA ","ADC ","ROR ","??? ","JMP ","ADC ","ROR ","BBR6 ", + "BVS ","ADC ","ADC ","??? ","STZ ","ADC ","ROR ","RMB7 ", + "SEI ","ADC ","PLY ","??? ","JMP ","ADC ","ROR ","BBR7 ", + "BRA ","STA ","??? ","??? ","STY ","STA ","STX ","SMB0 ", + "DEY ","BIT ","TXA ","??? ","STY ","STA ","STX ","BBS0 ", + "BCC ","STA ","STA ","??? ","STY ","STA ","STX ","SMB1 ", + "TYA ","STA ","TXS ","??? ","STZ ","STA ","STZ ","BBS1 ", + "LDY ","LDA ","LDX ","??? ","LDY ","LDA ","LDX ","SMB2 ", + "TAY ","LDA ","TAX ","??? ","LDY ","LDA ","LDX ","BBS2 ", + "BCS ","LDA ","LDA ","??? ","LDY ","LDA ","LDX ","SMB3 ", + "CLV ","LDA ","TSX ","??? ","LDY ","LDA ","LDX ","BBS3 ", + "CPY ","CMP ","??? ","??? ","CPY ","CMP ","DEC ","SMB4 ", + "INY ","CMP ","DEX ","??? ","CPY ","CMP ","DEC ","BBS4 ", + "BNE ","CMP ","CMP ","??? ","??? ","CMP ","DEC ","SMB5 ", + "CLD ","CMP ","PHX ","??? ","??? ","CMP ","DEC ","BBS5 ", + "CPX ","SBC ","??? ","??? ","CPX ","SBC ","INC ","SMB6 ", + "INX ","SBC ","NOP ","??? ","CPX ","SBC ","INC ","BBS6 ", + "BEQ ","SBC ","SBC ","??? ","??? ","SBC ","INC ","SMB7 ", + "SED ","SBC ","PLX ","??? ","??? ","SBC ","INC ","BBS7 " }; + +// +// Display bytes in mem in hex +// +static void DisplayBytes(uint16 src, uint32 dst) +{ + WriteLog("%04X: ", src); + uint8 cnt = 0; // Init counter... + + if (src > dst) + dst += 0x10000; // That should fix the FFFF bug... + + for(uint32 i=src; i?\377ECA\377D?<\377EA>" + "\377BBB\377???\377@>=\377FF=\377B?9\377>;9\377AA6\377CA:\377CD=\377HK=\377" + "JLD\377NKH\377RMG\377KLK\377ILB\377NPA\377b_S\377`[Q\377]YP\377YVR\377ZU" + "L\377^ZS\377`f^\377ihh\377jii\377ji`\377ji_\377jjc\377jif\377jhj\377jhj\377" + "jhj\377jii\377jhj\377jii\377jig\377c^T\377420\377\7\12\25\377\34\"*\377&" + "+4\377'.7\377+2:\377&0:\377#)1\377Zhp\377\40'0\377*08\377'.6\377\"(3\377" + "\20\23\27\377AC@\377\232\227\223\377\257\252\244\377\257\256\257\377\277" + "\277\270\377\303\302\262\377\303\301\275\377\300\274\253\377\303\277\301" + "\377\303\300\303\377\303\300\303\377\303\300\303\377\303\300\303\377\303" + "\300\303\377\303\300\303\377\303\300\303\377\303\300\303\377\303\300\303" + "\377\303\300\303\377\303\300\303\377\303\301\270\377\303\300\303\377\303" + "\300\303\377\303\300\303\377\303\301\303\377\303\301\303\377\303\301\303" + "\377\303\301\303\377\303\301\303\377\303\301\303\377\303\301\303\377\304" + "\301\303\377\305\301\304\377\310\305\310\377\310\305\307\377\314\310\270" + "\377\313\311\307\377\307\305\307\377\312\307\310\377\313\310\312\377\316" + "\313\312\377\315\312\311\377\321\315\316\377\322\317\317\377\326\322\321" + "\377\325\322\321\377\317\313\312\377\316\311\312\377\316\313\312\377\317" + "\315\276\377\323\320\317\377\324\324\315\377\331\326\323\377\332\325\322" + "\377\330\324\321\377\330\324\311\377\333\330\317\377\331\326\326\377\334" + "\332\313\377\335\335\324\377\340\335\317\377\336\335\314\377\337\336\331" + "\377\336\333\312\377\337\332\303\377\340\333\327\377\341\335\336\377\337" + "\333\334\377\343\340\333\377\342\340\341\377\341\336\341\377\344\341\343" + "\377\343\340\342\377\346\343\345\377\351\346\346\377\351\344\344\377\351" + "\345\345\377\350\345\347\377\346\343\345\377\346\343\345\377\352\347\345" + "\377\350\343\343\377\346\341\342\377\347\344\341\377\350\344\343\377\350" + "\346\345\377\353\352\345\377\354\352\351\377\356\352\352\377\361\354\351" + "\377\355\352\355\377\354\352\350\377\356\355\347\377\371\365\361\377\371" + "\363\360\377\367\361\357\377\365\360\361\377\365\357\355\377\370\362\361" + "\377\371\371\367\377\376\372\375\377\376\372\376\377\376\373\371\377\376" + "\373\370\377\376\373\372\377\376\372\374\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\373\375\377\376\372\376\377\376\373\375\377\376" + "\373\374\377\372\365\362\377\337\333\334\377sof\377\16\21\31\377\"*2\377" + "*/8\377,08\377&,7\377#)1\377Zen\377%&-\377).7\377%*3\377\12\14\21\377\213" + "\211\212\377\376\373\375\377\376\372\376\377\376\372\376\377\376\374\374" + "\377\376\374\374\377\376\374\374\377\376\374\374\377\376\373\375\377\376" + "\372\376\377\376\372\376\377\376\373\375\377\376\373\375\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\373\375\377\376" + "\374\374\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374" + "\377\376\374\374\377\376\375\373\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373\377\376" + "\375\373\377\376\374\374\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\362\377\376\375\373\377\376\374\374\377\376" + "\374\374\377\376\374\373\377\376\376\366\377\376\374\373\377\376\375\373" + "\377\376\376\361\377\376\376\371\377\376\375\373\377\376\375\373\377\376" + "\376\370\377\376\376\371\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373\377\376" + "\374\374\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374" + "\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374\377\376" + "\375\373\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374" + "\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374\377\376" + "\374\374\377\376\372\376\377\376\372\376\377\376\372\376\377\376\374\374" + "\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374\377\376" + "\374\374\377\376\373\375\377\376\373\375\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\362\355\355\377FC?\377" + "\31\37&\377&-5\377$)3\377&.6\377#)1\377Zgq\377$(/\377',4\377\35#+\377PON" + "\377\362\356\361\377\376\372\376\377\376\374\374\377\376\375\373\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\375\373\377\376\375\373\377\376\376\372\377\376\376\372\377\376" + "\375\373\377\376\375\373\377\376\375\373\377\376\375\373\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\375\373\377\376\375\373\377\376\375\373\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373\377\376" + "\375\373\377\376\375\373\377\372\371\363\377\375\372\372\377\376\372\376" + "\377\230\224\224\377\17\23\27\377',5\377$)2\377%,5\377#)1\377Zeo\377\"%." + "\377'+3\377\14\21\33\377\206\203\205\377\376\372\376\377\376\372\376\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\375\373\377\376\375\373\377\376\373\375\377\372\372" + "\366\377\375\373\373\377\376\372\376\377\312\304\277\377\11\16\25\377$*5" + "\377%*1\377\40(4\377#)1\377Zen\377\37#.\377#)0\377\12\14\20\377\213\210\206" + "\377\376\372\376\377\376\374\374\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\373\375\377\376\374\374\377\376\373\375\377\376\372\376" + "\377\333\327\314\377\6\13\22\377\"*3\377%+1\377\40'0\377#)1\377Zem\377\37" + "%-\377%+3\377\14\15\20\377\217\214\211\377\376\372\376\377\376\374\374\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\375\373\377\376\374\374\377\376\375" + "\373\377\376\373\375\377\376\372\376\377\340\336\327\377\5\13\21\377#*3\377" + "$'/\377!)3\377#)1\377[is\377\37%/\377$*2\377\13\14\17\377\213\210\206\377" + "\376\373\370\377\376\375\373\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\375" + "\373\377\376\375\373\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\340\336\317\377\5\13\21\377$+3\377%)/\377!'0\377#)1\377[js\377\37'1\377" + "$*2\377\13\14\16\377\213\210\206\377\376\375\366\377\376\375\373\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\375\373\377\376\373\375\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\340\336\316\377\3\10\17\377!*2\377#" + "(0\377\"(2\377#)1\377[is\377\37%.\377$*1\377\12\14\21\377\213\210\206\377" + "\376\372\376\377\376\374\374\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373\377\376\375" + "\373\377\376\373\375\377\376\373\375\377\376\373\375\377\376\372\376\377" + "\336\332\312\377\6\14\23\377#)3\377&,3\377\")1\377#)1\377[go\377\35#+\377" + "#(0\377\13\14\20\377\216\212\210\377\376\372\376\377\376\372\376\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\374\374\377\376\373\375\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\333\324\304\377\10\15\24\377%+4\377" + "$*2\377\37%.\377#)1\377Zgo\377\33\40(\377'-3\377\13\15\20\377\211\207\205" + "\377\376\372\376\377\376\372\376\377\376\373\375\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374\374\377\376" + "\372\376\377\376\373\375\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\336\333\316\377\7\14\23\377%*3\377%+3\377!&/\377#)1\377Zgo\377\36$+" + "\377&+4\377\11\12\15\377\207\204\205\377\376\372\376\377\376\372\376\377" + "\376\375\373\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374\374\377" + "\376\373\375\377\376\372\376\377\376\373\375\377\376\373\375\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\333\326\315\377\12\17\25\377&+4" + "\377&+3\377#*2\377#)1\377Zeo\377\37#-\377'.5\377\13\14\16\377\211\207\205" + "\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\374\374\377\376\372\376\377\376\373\375\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\373\375\377\376\373\375\377\376\372\376" + "\377\324\316\303\377\11\16\25\377#+5\377',7\377\"'2\377#)1\377Zfp\377\37" + "%/\377,07\377\17\20\22\377\221\216\214\377\376\372\376\377\376\372\376\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\374\374\377\376\375\373\377\376\374\374\377" + "\376\373\375\377\376\372\376\377\376\373\375\377\376\373\375\377\376\373" + "\375\377\376\373\375\377\376\372\376\377\321\311\300\377\12\17\25\377#)4" + "\377&-4\377\")2\377#)1\377Zgq\377\35$,\377(/6\377\11\13\14\377\207\205\205" + "\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\375\373\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\375\373\377\376\374\374\377\376\372\376" + "\377\376\373\375\377\376\375\373\377\376\375\373\377\376\373\375\377\376" + "\373\375\377\376\373\375\377\376\373\375\377\375\374\375\377\376\372\376" + "\377\327\321\310\377\10\15\23\377#*3\377'-5\377\40&.\377#)1\377Ydj\377\33" + "\40%\377&.4\377\13\14\15\377\213\211\207\377\376\372\376\377\376\372\376" + "\377\376\375\373\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\375\373\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\373\375\377\376\375\373\377\376\375\373\377\376\373\375\377\376" + "\373\375\377\374\374\376\377\376\372\376\377\330\321\304\377\5\13\21\377" + "&-6\377)/6\377\40%,\377#)1\377Zel\377\34\40(\377%-4\377\12\13\20\377\210" + "\206\210\377\376\372\376\377\376\372\376\377\376\373\375\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\373\375\377\376\374\374" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374\374" + "\377\376\374\374\377\376\373\375\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\375\373\377\376\375\373" + "\377\376\373\375\377\376\373\375\377\376\375\373\377\376\373\375\377\376" + "\372\376\377\327\317\302\377\7\15\23\377\"*3\377$+3\377\37$)\377#)1\377Y" + "di\377\33!%\377(-6\377\13\14\16\377\214\211\207\377\376\372\376\377\376\372" + "\376\377\376\373\375\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\374\374\377\376\375\373\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\374\374\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\373\375\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\314\306\270\377\7\15\24" + "\377!)1\377&-2\377\37#(\377#)1\377Ydi\377\33\37&\377(/7\377\14\15\21\377" + "\214\211\207\377\376\372\376\377\376\372\376\377\376\375\373\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\373" + "\375\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\314\305\270\377\11\14\22\377!)1\377&-4\377\40&-\377#)1\377" + "Ydi\377\33\36$\377)-6\377\13\14\22\377\212\205\205\377\376\372\376\377\376" + "\372\376\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\374\374\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\373\375" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\327\320\302\377\11\16" + "\24\377%+4\377&-3\377\36&.\377#)1\377Ydi\377\34\36%\377&,6\377\15\15\16\377" + "\222\215\207\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374" + "\374\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\374\374\377\376\374\374\377\376\372\376\377" + "\376\372\376\377\322\313\302\377\7\15\23\377%*4\377&+4\377\37&.\377#)1\377" + "Ydi\377\27\36$\377&,3\377\15\15\15\377\224\216\207\377\376\372\376\377\376" + "\372\376\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\374\374\377\376\372\376\377\376\372\376" + "\377\376\375\373\377\376\373\375\377\376\373\375\377\376\372\376\377\376" + "\372\376\377\376\374\374\377\376\373\374\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\333\325\311\377\5\13" + "\21\377$*2\377%+1\377\")/\377#)1\377Ydi\377\34\40&\377&,5\377\16\16\15\377" + "\225\217\211\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374" + "\374\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\373\375\377\376\372\376\377\376\372\376\377\376\372\376\377\376\373" + "\375\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\330\320\300\377\5\13\21\377$(1\377%+2\377\35\"(\377#)1\377" + "Ydi\377\34!'\377%+1\377\17\17\17\377\233\225\223\377\376\372\376\377\376" + "\372\376\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374\374\377\376" + "\375\373\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\373\375\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\374\374\377\376\374\374\377\376\374\374\377\376\373\375" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\315\304\271\377\7\14" + "\23\377!(2\377%*1\377\40%,\377#)1\377Ydi\377\36\"'\377&-5\377\17\17\17\377" + "\230\223\214\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\373\375\377\376\373\375\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\373\375\377\376\373\375\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\375\373\377\376\374" + "\374\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\320\311\300\377\7\14\22\377\32\",\377\36#+\377\22\31\40" + "\377!&-\377Ydi\377\37#(\377&+5\377\16\16\15\377\225\221\212\377\376\372\376" + "\377\376\372\376\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374\374" + "\377\376\373\375\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\374\374\377\376\374\374\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\373\375\377\376\372\376\377\376\372\376\377\272\271\247" + "\377\5\7\15\377\6\13\25\377\1\2\4\377\4\4\4\377\32\34\"\377Ydi\377\36$'\377" + "(-6\377\21\21\21\377\235\232\224\377\376\372\376\377\376\372\376\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\374\374\377\376\373\375\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\375\373\377\376\374\374\377\376\372\376\377\376\372\376\377\376" + "\374\374\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\310\303\267\377\1\1\2\377\4\4\7<\1\1" + "\1\27\6\6\6\27\35\40%\27Ydi\377\37\")\377'-5\377\21\22\22\377\237\234\230" + "\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\374\374\377\376\372\376\377\376\375\373\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\374\374\377\376\373\375\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\310\301\267\377\1\1\1\377\1\1\1)\0\0\0\0\0\0\0\0\0\0\0\0Ydi\377\35\40" + "'\377'.6\377\21\22\21\377\236\233\226\377\376\372\376\377\376\372\376\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\373\375\377\376\372\376\377" + "\376\372\376\377\376\375\373\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\375\373\377\376\373\375\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\374\374\377\376\373" + "\375\377\376\373\375\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\274\266\260\377\1\1\1\377\1\1\1" + ")\0\0\0\0\0\0\0\0\0\0\0\0Ydi\377\37#)\377'/7\377\24\24\22\377\251\242\233" + "\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\375\373" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\373\375\377\376" + "\375\373\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\373\375\377\376\373\375\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\373\375\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\274\270\266\377\1\1\1\377\1\1\1)\0\0\0\0\0\0\0\0\0\0\0\0Zdj\377\37#" + "+\377%*4\377\27\26\25\377\263\254\244\377\376\372\376\377\376\372\376\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\375\373\377\376\374\374\377\376\375\373\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376" + "\372\377\376\374\374\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\374\374\377\376\376\372\377\376\376" + "\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377" + "\376\376\372\377\376\373\375\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\272\260\250\377\1\1\1\377\1\1\1" + ")\0\0\0\0\0\0\0\0\0\0\0\0Zdj\377\37#)\377',4\377\31\31\30\377\272\263\253" + "\377\376\372\376\377\376\372\376\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\375\373\377\376\373\375\377\376\372\376\377\376" + "\373\375\377\376\374\374\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\373\375\377\376" + "\373\375\377\376\373\375\377\376\373\375\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\373\375\377\376\375\373\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\375\373\377\376\373\375\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\374\374\377\376\374\374" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\375\373\377\376\373\375\377\376\372\376" + "\377\263\251\245\377\1\1\1\377\36\36\37<\207\206\205\27\207\206\205\27\207" + "\206\205\27Zej\377\37$*\377*/7\377\30\27\25\377\257\250\237\377\376\372\376" + "\377\376\372\376\377\376\375\373\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\374\374" + "\377\376\373\375\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\373\375\377\376\374\374\377\376\374\374" + "\377\376\375\373\377\376\376\372\377\376\374\374\377\376\374\374\377\376" + "\374\374\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374" + "\377\376\374\374\377\376\374\374\377\376\374\374\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\373\375\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\373\375\377\376\374\374" + "\377\376\373\375\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\373\375\377\376\372\376\377\376\372\376\377\227\224\224" + "\377\6\10\12\3778;@\377X[^\377X[^\377Y[^\377Yej\377\40$*\377,08\377\21\22" + "\23\377\235\231\225\377\376\372\376\377\376\372\376\377\376\373\375\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\376\372\377\376\376\372" + "\377\376\375\373\377\376\375\373\377\376\375\373\377\376\375\373\377\376" + "\375\373\377\376\375\373\377\376\375\373\377\376\375\373\377\376\375\373" + "\377\376\375\373\377\376\375\373\377\376\375\373\377\376\375\373\377\376" + "\375\373\377\376\375\373\377\376\375\373\377\376\375\373\377\376\373\375" + "\377\376\373\375\377\376\373\375\377\376\374\374\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\373\375" + "\377\376\375\373\377\376\372\376\377\376\372\376\377\376\373\375\377\376" + "\372\376\377\376\374\374\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\375\373\377\376\373\375\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377oi`\377\21\25\32\377&.6\377#)4\377\40&.\377\"&.\377Z" + "fl\377\37$+\377+19\377\22\30\40\377\202qj\377\375\366\370\377\376\372\376" + "\377\376\372\376\377\376\373\375\377\376\375\373\377\376\376\372\377\376" + "\376\372\377\376\376\372\377\376\376\372\377\376\374\374\377\376\374\374" + "\377\376\374\374\377\376\374\374\377\376\374\374\377\376\374\374\377\376" + "\374\374\377\376\374\374\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\373\375\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\373\375\377\376\374\374\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\375\372\372\377\376\372\375" + "\377\376\372\376\377\376\372\376\377\376\373\375\377\376\373\375\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\373\375\377\376\373\375" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\373\375\377\376\372\376\377\376\372\376\377\376" + "\373\375\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376" + "\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376" + "\372\376\377\376\372\376\377\342\335\334\377/.-\377\35$,\377*.6\377'.6\377" + "%)4\377\"&.\377Zek\377\40%,\377*08\377$)3\377\27\24\27\377\300\274\275\377" + "\373\367\371\377\376\372\376\377\376\372\376\377\376\372\376\377\376\373" + "\375\377\376\373\375\377\376\373\375\377\376\373\375\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\375\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\375\377" + "\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372" + "\376\377\376\372\376\377\376\372\376\377\376\372\376\377\376\372\376\377" + "\376\373\374\377\376\373\372\377\376\372\374\377\375\370\366\377\374\367" + "\364\377\374\367\364\377\373\366\364\377\376\372\373\377\373\367\367\377" + "\375\371\372\377\376\372\376\377\376\373\366\377\374\370\362\377\374\367" + "\370\377\375\371\367\377\372\365\363\377\374\370\366\377\371\363\363\377" + "\370\363\362\377\370\363\362\377\371\364\364\377\370\363\362\377\370\363" + "\362\377\366\360\357\377\366\360\357\377\366\361\360\377\370\363\364\377" + "\370\363\364\377\371\364\364\377\365\360\357\377\366\361\362\377\367\362" + "\363\377\371\364\364\377\371\364\364\377\373\366\364\377\372\366\370\377" + "\373\365\364\377\375\370\370\377\376\372\375\377\375\370\371\377\375\372" + "\372\377\364\356\356\377\317\313\314\377PMC\377\26\32!\377&,5\377&-4\377" + "%+3\377%+3\377\"&.\377[hp\377!'/\377*.7\377*/7\377\36#(\377\33\32\32\377" + "mhd\377\261\255\252\377\271\264\260\377\272\266\261\377\272\266\264\377\271" + "\263\255\377\271\265\263\377\272\266\267\377\262\260\260\377\263\261\263" + "\377\264\262\265\377\262\257\260\377\255\246\234\377\242\233\227\377\221" + "\214\206\377\217\216\212\377\217\215\211\377\216\213\206\377\211\206{\377" + "\211\203\200\377\203\177|\377\203\177y\377\201\177~\377yvr\377zws\377}yq" + "\377}wq\377qmo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377" + "omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377onm\377omn\377om" + "o\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377" + "omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377omo\377om" + "o\377omo\377omo\377omo\377omo\377ooj\377ooh\377onk\377li^\377kg[\377jf[\377" + "hd[\377nnh\377ifa\377mjf\377omo\377onm\377lh_\377jgb\377lka\377gcX\377ki" + "^\377d_X\377c_V\377c_V\377eaZ\377c_V\377c_W\377_ZP\377_YP\377_ZS\377c_Z\377" + "b^Z\377e`Z\377\\XP\377^[W\377`]Y\377e`Z\377eaZ\377ie[\377fdb\377hc[\377l" + "jb\377onm\377ljd\377nmg\377ZVO\377\26\26\27\377\20\26\36\377!'0\377'-4\377" + "'-7\377'-5\377&+3\377\"&.\377Zej\377\37#)\377*.6\377*.8\377).8\377\"'/\377" + "\23\26\33\377\24\26\27\377\25\27\27\377\26\27\31\377\25\27\30\377\26\26\27" + "\377\24\26\27\377\25\27\31\377\24\25\27\377\24\25\30\377\24\26\30\377\24" + "\26\30\377\23\24\25\377\21\23\24\377\17\22\21\377\17\21\23\377\20\22\24\377" + "\17\21\22\377\17\21\21\377\20\21\23\377\16\20\21\377\16\20\20\377\16\20\21" + "\377\16\17\23\377\16\20\26\377\17\20\25\377\16\20\26\377\14\17\31\377\14" + "\17\27\377\14\17\25\377\14\16\23\377\14\16\30\377\15\20\32\377\14\17\33\377" + "\14\17\37\377\14\17\33\377\14\24\40\377\15\22\34\377\15\17\33\377\14\17\32" + "\377\15\20\32\377\14\16\30\377\14\17\27\377\14\17\31\377\15\17\34\377\13" + "\16\36\377\14\22\35\377\14\22\33\377\14\17\31\377\15\24\33\377\15\21\33\377" + "\14\17\30\377\14\16\25\377\15\24\36\377\15\21\31\377\14\23\34\377\14\22\33" + "\377\13\22\36\377\14\23\33\377\14\24\34\377\14\21\31\377\14\22\33\377\13" + "\23\35\377\16\27\40\377\14\24\35\377\13\23\36\377\17\26\36\377\15\25\37\377" + "\14\25\40\377\13\24\40\377\20\30!\377\21\31\"\377\20\31\"\377\21\34%\377" + "\23\33'\377\26\36*\377\24\35(\377\23\35&\377\27\37+\377\25\35)\377\24\35" + ")\377\21\33%\377\22\34%\377\23\34(\377\26\36*\377\24\36(\377\22\34&\377\23" + "\34'\377\22\34'\377\27\37+\377\30\40+\377\25\37*\377\27\40+\377\30\40+\377" + "\26\36*\377\32!*\377\30!+\377\27\37*\377\27\35'\377\25\36)\377\26\35&\377" + "\25\35*\377\26\35&\377\25\36)\377\26\35&\377\26\35&\377\23\33%\377\23\33" + "%\377\24\33#\377\20\31#\377\22\27\40\377\20\30!\377\21\32%\377\30\40*\377" + "\35$,\377\")1\377%*1\377%*1\377%+2\377%+4\377$*3\377\"&.\377Zdj\377\37#+" + "\377'.6\377',6\377(/6\377'.6\377(/7\377'-5\377&-3\377)-8\377&,5\377&,4\377" + "&,3\377&-5\377%,4\377'+4\377&-4\377'-5\377',5\377',6\377(.4\377&+5\377)." + "7\377&+5\377(.6\377'/7\377&.6\377)/6\377)/7\377*.7\377(/7\377).7\377).7\377" + ").6\377)/7\377(16\377)08\377)/8\377(/7\377*08\377).8\377).8\377(/7\377)-" + "7\377*.6\377(.7\377)/7\377(-5\377'-6\377'-5\377).7\377&-5\377'-4\377(-4\377" + "&.3\377&-5\377'+6\377',6\377(-5\377&-4\377'-5\377&-5\377%*1\377$)1\377&-" + "2\377&,5\377&,3\377%+3\377%*3\377%,4\377$)2\377%*4\377&,2\377)/6\377(.6\377" + "&+4\377&+6\377(-6\377%-5\377&/6\377)-6\377*08\377)/7\377)/6\377(.6\377*." + "7\377*/8\377&-3\377).6\377'.7\377).7\377)/7\377'.6\377'.7\377).7\377)-9\377" + ")/7\377).7\377(.7\377(,6\377).6\377(.6\377).6\377&-4\377'-5\377&-5\377%+" + "3\377&*6\377%,5\377&,5\377'-6\377'-6\377%,4\377%+2\377%*3\377$*2\377$+2\377" + "$+1\377%,2\377$)1\377$*1\377$*1\377$*1\377%+2\377#*2\377&+4\377\"'1\377\"" + "&.\377Zel\377\36\")\377&-4\377(-5\377(.5\377(-5\377&-5\377(.6\377'.6\377" + "&+5\377(.5\377'.5\377'.4\377)/6\377'.6\377(.6\377'-6\377'.6\377',6\377)-" + "8\377&.6\377(-5\377&-6\377&-6\377'.6\377'.7\377'-7\377'.6\377).8\377).7\377" + ").8\377*/7\377*.8\377).8\377).8\377).8\377)/6\377*.7\377*07\377*.6\377)." + "6\377'.7\377).8\377).8\377*06\377)/7\377(.6\377'-6\377).6\377(.6\377&/5\377" + "(-5\377'.6\377'.6\377'-4\377%,4\377%*3\377%+1\377%*3\377%,2\377%+1\377$*" + "1\377$*2\377%,2\377%-2\377#(2\377$+2\377%,3\377$*1\377&,2\377%*3\377$*2\377" + "%-3\377&.4\377&-5\377&+4\377(.5\377',3\377).6\377).6\377'/6\377&,6\377&." + "6\377'-6\377)/7\377*/9\377).6\377).6\377&-6\377&.6\377&+6\377(,6\377',6\377" + "&-6\377).6\377*.6\377'/6\377&,6\377)/6\377'-6\377'.6\377&-5\377(,6\377(-" + "6\377',6\377).5\377',6\377%+4\377%+2\377%+3\377$+2\377%,3\377$)1\377$)1\377" + "$*1\377%*2\377%*1\377$)1\377$)1\377#*1\377\"*2\377%-2\377$+2\377#)3\377%" + "*2\377&*4\377%)3\377\"&.\377Ydi\377\34!'\377&-5\377&-4\377(+5\377&,4\377" + "'-5\377'.5\377&,2\377%*3\377$+3\377&.4\377(-5\377&.6\377&,5\377(.5\377&," + "5\377&-5\377',6\377'-6\377).6\377&-5\377(-6\377'-6\377',6\377'.4\377)-6\377" + ").6\377).6\377*.7\377).6\377(/6\377(.7\377'.6\377(.7\377'.7\377)/6\377*." + "6\377*.6\377(.6\377'.6\377(.8\377)07\377'-7\377)-6\377'+7\377'-4\377&+5\377" + "(.6\377',4\377&.4\377&-4\377(-6\377',6\377(-6\377$+3\377&+4\377&,3\377$*" + "1\377%+1\377%-2\377%*3\377&,2\377&*2\377%+3\377%,4\377$*1\377%*2\377$*1\377" + "%*1\377$)0\377%*3\377&-3\377%+4\377&*5\377&,4\377&-5\377&,5\377'-4\377(-" + "6\377)/6\377&.6\377&.5\377'-6\377)/7\377'/7\377'.6\377'.6\377(-6\377).6\377" + "'-6\377&,4\377)-7\377(-6\377'.5\377).7\377'.6\377&-6\377&-5\377&-5\377&-" + "4\377&-5\377%,4\377&-6\377'.4\377',5\377$*4\377%,4\377%+2\377'+6\377%+2\377" + "$*1\377$*3\377&,4\377&+3\377%+2\377%*1\377$)3\377\")2\377\"(2\377#*1\377" + "#+2\377#)2\377$*2\377%,2\377%*3\377!'1\377\"&.\377Ydi\377\35!%\377%+2\377" + "$+2\377',6\377&+4\377$*3\377&-3\377&,3\377&+5\377%*2\377&*4\377',4\377&," + "5\377&,5\377',5\377&-5\377&-6\377&+4\377&-4\377&-5\377'-6\377&,4\377,06\377" + "&,3\377&-3\377&-5\377'.6\377',6\377)-6\377',3\377(.5\377(.8\377).6\377)." + "6\377*.6\377(.7\377&.6\377&.6\377'-7\377'/7\377'.6\377(.6\377).6\377'.6\377" + "'.6\377'.4\377'-5\377)/5\377',5\377&-5\377&.5\377&-5\377%*2\377\"'.\377$" + "+3\377$,4\377&-4\377&,3\377%,3\377$)0\377\36!+\377\30\34&\377\30\32\"\377" + "\33\37$\377\31\36%\377\31\37&\377\34%0\377\")1\377#*3\377$)0\377$*1\377%" + "+1\377\"&/\377$)0\377&+3\377&+2\377&,3\377&-4\377&+6\377(07\377(.5\377'-" + "6\377(06\377)/7\377&.6\377&-6\377(.6\377(.6\377'.6\377&.5\377&-6\377&,6\377" + "(-6\377%,4\377(.6\377'-5\377&+5\377&-5\377&,6\377',4\377&-6\377&-5\377%," + "4\377%,3\377&+3\377%*2\377$*1\377#*2\377$+2\377#(2\377#*2\377%*4\377%*2\377" + "$)0\377%*2\377$)3\377#)2\377$)1\377%+1\377$*1\377#)2\377$)1\377$*1\377$*" + "2\377$)3\377\"(1\377\"&.\377Ydi\377\35!%\377&-4\377%+3\377&,4\377$,3\377" + "&-6\377%+2\377$*2\377',3\377&-4\377%+3\377%+2\377&-6\377&+5\377'-5\377%," + "4\377%+3\377&-4\377%-4\377$+2\377&+2\377$+2\377&+5\377&-6\377(.6\377&.6\377" + "&.6\377(.6\377'-6\377',6\377'.6\377&.6\377'.4\377',6\377'.6\377&-6\377&." + "6\377&.6\377).6\377'/6\377&.6\377'.6\377(.6\377'-4\377&-6\377&.5\377&.6\377" + "&.5\377&.4\377&+5\377'.5\377&-5\377$+3\377$,3\377%+2\377#)1\377!&.\377\26" + "\31#\377\21\23\24\377\24\25\30\377\40\"#\377,..\377.4,\377/4+\377.4-\377" + "'(\"\377\26\32\35\377\21\23\24\377\20\25\34\377\34\"*\377%)0\377%+1\377%" + "+1\377%*1\377%*1\377(/6\377'.6\377(.6\377&-6\377&.6\377'.6\377'.6\377&.6" + "\377(/6\377(.6\377&.6\377'.6\377&.6\377'.6\377'.5\377&.6\377&-6\377&+6\377" + "&.6\377&,6\377&.4\377&-5\377&.5\377&-4\377'-6\377$+3\377&,3\377%+2\377%+" + "4\377%+1\377&-5\377%*3\377%+3\377$,2\377$*1\377$*1\377\"*2\377#*2\377%+1" + "\377%+1\377%*1\377#*3\377#*3\377#(2\377#)2\377\"*2\377!)0\377$)1\377$*1\377" + "$*1\377!%/\377\"&.\377Ydi\377\36!'\377&-3\377',4\377&,4\377&,4\377&-4\377" + "%*3\377$*1\377&+5\377%*2\377%+2\377%*1\377&,4\377%*2\377&*4\377$+2\377%+" + "3\377%,4\377$*2\377%+2\377$,2\377&,3\377%+2\377&-4\377&,4\377&-5\377'-6\377" + "&.6\377(-6\377(,5\377',6\377'-6\377'.6\377&,6\377&-4\377'.5\377(.6\377(-" + "6\377'.6\377(.6\377&.6\377(.6\377(-5\377',4\377&,6\377).6\377)/6\377&,5\377" + "&-6\377&-4\377#(0\377%*3\377&+4\377&+4\377\31\35#\377\21\20\26\377\37#\37" + "\377::3\377PTG\377[XP\377\\XM\377]XJ\377ZWK\377^XJ\377YWK\377]XJ\377ZXN\377" + "VTH\377CC;\377**(\377\25\26\31\377\24\27\33\377$*2\377$,3\377%,2\377#(/\377" + "#)0\377(,4\377',4\377'.5\377).6\377',6\377'-4\377'.6\377&.6\377'-6\377&-" + "6\377&-6\377'-6\377(-6\377(.6\377&-4\377'.6\377'-6\377$+3\377%,2\377%+3\377" + "&-6\377&+6\377'-5\377(.5\377'-6\377&+4\377&-4\377%*2\377%*3\377#+2\377%*" + "3\377%*3\377%*1\377$*1\377#*2\377$*3\377$*4\377$+2\377$)1\377$+2\377#*3\377" + "#)2\377#(2\377#)2\377$(0\377$)1\377$*2\377%-2\377\"(1\377\"&.\377Zek\377" + "\35\"(\377&-3\377&-4\377&+5\377%+3\377%,3\377%+2\377%-4\377&,4\377%*2\377" + "&,3\377&*5\377&+4\377$*3\377&*5\377$*2\377$*1\377%+2\377#*2\377$*2\377&-" + "4\377&.4\377%*3\377&,5\377&-5\377&+6\377%,4\377&,5\377&-4\377&-3\377&-6\377" + ").6\377',6\377'.6\377'.6\377(.6\377&.6\377&-6\377&,5\377&,5\377&,6\377&." + "6\377(.6\377'-4\377&+6\377&,4\377&.6\377&-4\377(.6\377*/7\377'+4\377&,3\377" + "\35$,\377\20\25\31\377()'\377KJB\377TUG\377URF\377RQG\377ROE\377QOE\377Q" + "NE\377RNE\377RNE\377QNE\377QNE\377OOF\377QOF\377RQH\377XTH\377RQI\377:90" + "\377\23\25\30\377\33\40%\377%*3\377&+2\377&.4\377&,5\377&-5\377).6\377(-" + "6\377',6\377'.6\377*/6\377&.6\377(-6\377&.6\377&.6\377'.6\377&.6\377&-6\377" + "&-6\377(-7\377&-6\377'-6\377',3\377&-6\377%*4\377&,5\377&*4\377&,4\377$+" + "3\377%+2\377%+1\377%*2\377%*2\377#*2\377$*2\377$*2\377$(0\377%*1\377#)3\377" + "$)3\377#*2\377$)2\377%*1\377%*2\377\")2\377#)3\377$+3\377#)1\377#'/\377\"" + "'1\377#(0\377$+2\377!(0\377\"&.\377Yej\377\36\")\377&+3\377&+5\377%+3\377" + "%+2\377$*3\377&,4\377%,2\377%*3\377&*4\377%*1\377%*2\377&+3\377%*3\377%*" + "2\377%+3\377%,2\377%,3\377%*4\377$+4\377%+4\377&-3\377%*4\377&*4\377%-5\377" + "%,4\377%+5\377%,3\377%*4\377'-4\377$,4\377&-6\377',6\377'-6\377'-4\377'." + "5\377'.5\377&,4\377%*5\377%-5\377'-6\377(.6\377'-7\377&,6\377&,6\377'-6\377" + "&,6\377%+3\377&-3\377&-5\377&,4\377\30\34\"\377\34\40\37\377AE9\377WVI\377" + "SQF\377ROE\377ROE\377POF\377RPF\377SPG\377RSI\377QPG\377QPG\377RQH\377SP" + "G\377QOE\377ONE\377ONF\377RNE\377OOF\377XVI\377SRD\377++%\377\15\26\35\377" + "%*4\377(.6\377%,5\377$,4\377'+4\377&-6\377).6\377(-7\377(.6\377&.6\377&." + "6\377&.6\377&.5\377'.6\377&.5\377&-6\377&,4\377&,4\377&+4\377%+5\377%*4\377" + "%*5\377%*5\377&*6\377&+6\377&*6\377',4\377%+3\377$+2\377\"*2\377#)3\377#" + "*2\377$*2\377\"*2\377$*1\377$+2\377%+3\377&,5\377$*3\377$*1\377$*3\377$*" + "2\377#*2\377\")1\377%+1\377$)0\377%*3\377$*3\377%*2\377&,3\377\35#,\377\"" + "&.\377Zek\377\34\")\377&-2\377%+2\377%,2\377$+2\377%+3\377&-6\377%+3\377" + "%,2\377%+1\377%*1\377%*1\377%+2\377%,3\377#*2\377#)2\377#*2\377$+2\377%*" + "2\377%,2\377%+4\377#*2\377%,2\377$*1\377$+2\377%+2\377%+2\377%+2\377$*2\377" + "&,4\377%*4\377&+4\377(-5\377'-5\377&-5\377&,5\377&.4\377%+3\377&-6\377&+" + "6\377&,4\377&+6\377&+6\377&+6\377(,6\377&.4\377&+5\377%-3\377&-4\377\")1" + "\377\27\32\37\377'+%\377WUG\377WWI\377ROE\377ROE\377ROE\377SPF\377YUM\377" + "TTF\377LLA\377FG@\377DD:\377CC:\377IIA\377LLI\377VTI\377a\\M\377YXO\377R" + "QI\377QME\377ONF\377RPF\377VTF\377>?4\377\27\31\31\377\37'.\377%+5\377&," + "6\377(-6\377&.6\377&-6\377',6\377'.6\377&.6\377&.6\377&,5\377&-4\377%,4\377" + "&-6\377&-6\377%*3\377&,5\377&,5\377&+5\377%+4\377&,5\377$*2\377&*3\377%*" + "4\377%*2\377%*3\377&+4\377&+5\377%,2\377$*2\377$*3\377#*2\377$*1\377#)2\377" + "#+2\377\")1\377\"*2\377\")2\377#(0\377%*2\377$*2\377$*3\377\")1\377$*1\377" + "$)0\377#)2\377$*1\377%,2\377\"*2\377\"'/\377\"&.\377Zek\377\34\")\377%+1" + "\377',3\377',3\377&,2\377%*1\377&-5\377$*2\377%+2\377%*1\377#)2\377#*2\377" + "#*2\377#*2\377#*2\377#'1\377%*2\377$+2\377$*2\377$*1\377&-4\377%+3\377$*" + "3\377%*3\377%+3\377%*2\377%-5\377&-3\377&,5\377&+4\377%)5\377&+3\377%+2\377" + "$*1\377&-4\377'-5\377&,3\377%*3\377'.4\377&-4\377'-6\377&+6\377&-6\377&+" + "5\377',5\377&-6\377&+5\377%+4\377&-4\377\20\24\31\37711+\377WVH\377ROF\377" + "QOF\377RQF\377PPF\377KK@\377FE;\377BB8\377;>4\377;;2\377::0\377::0\377;:" + "0\377=<2\377>>6\377BA8\377FE=\377SQL\377]YT\377ZXR\377ONE\377POF\377QOF\377" + "USG\377EE;\377\25\27\27\377&*3\377'-7\377&,6\377$*4\377'/6\377&.6\377&-6" + "\377&.6\377&-6\377&,4\377&,5\377%*5\377&*4\377&-5\377&,5\377&+4\377'.4\377" + "'+4\377$+3\377#*2\377#*3\377&*2\377%*4\377$)1\377\")2\377$*1\377$*3\377$" + ")3\377$)1\377$*2\377\"*2\377#*2\377#)1\377\")1\377!(0\377\"*1\377#)1\377" + "#(2\377$+3\377#)2\377#*2\377$*1\377#*2\377$*1\377%*3\377%*3\377\"*2\377\"" + "(2\377\36$-\377\"&.\377Zek\377\34\")\377&+3\377&,2\377%*1\377&+3\377&,4\377" + "$+2\377&,3\377%*2\377$*1\377%)3\377%*2\377$*3\377%,2\377%,2\377%*3\377$*" + "1\377%*1\377%*1\377$)0\377#)0\377%,3\377%,4\377$*2\377$*2\377%)3\377$*2\377" + "%+3\377%+3\377%*2\377%,4\377#+3\377%-4\377%*1\377&-2\377%,3\377&+3\377&," + "4\377&,4\377&-5\377&.6\377'-5\377&-4\377&+5\377)-6\377'.6\377'-5\377&.7\377" + "\30\32\40\37797+\377VTF\377QOF\377RQF\377QPE\377II@\377CC:\377;<2\377;;1" + "\377:8-\377:8-\377:8-\377:8-\377:8-\377:8-\377:8-\377:8.\377:9.\377:8-\377" + "::0\377880\377KJ@\377\\ZT\377WXO\377NOF\377OOF\377SSG\377II>\377\30\31\30" + "\377%*3\377'-6\377'-6\377&-5\377&,5\377&-6\377'.7\377'.7\377%-5\377&-5\377" + "&+4\377&-4\377&,3\377$+3\377&-6\377$+4\377%*3\377%,4\377$*3\377$+4\377#*" + "2\377\"*2\377#)3\377#*3\377#*2\377$*2\377#*2\377#(2\377#+1\377$*1\377\"*" + "2\377$*1\377$(1\377#)1\377$+2\377$)1\377#*1\377#)1\377#*2\377%*2\377\"*2" + "\377#*2\377$*1\377%*4\377#'1\377\")1\377#)2\377\"&.\377\"&.\377Zeo\377\35" + "\"+\377$*1\377%*1\377$*1\377$+3\377%,3\377%+2\377%+2\377%*2\377#(2\377#)" + "2\377%+1\377%+1\377%*2\377%*2\377$(1\377%*1\377$*1\377%*2\377$*3\377$*1\377" + "$+1\377$*2\377$,2\377&*4\377%+4\377%)3\377%+2\377%*1\377%*2\377$)2\377&+" + "4\377%+2\377&,4\377$,3\377%-4\377%,3\377%,4\377&,4\377&-5\377&-4\377&,5\377" + "&-3\377',4\377#(1\377&-5\377&,5\377\31!)\377,+%\377SQG\377QPF\377RPF\377" + "PPD\377EF;\377==3\377<;0\377:8-\377:8-\377:8-\377:8-\377:8-\377:8-\377:8" + "-\377:8-\377:8-\377:8-\377:8-\377:8-\377:8-\37798.\37788/\377<=3\377XXR\377" + "[ZS\377PND\377QOE\377WTJ\377EB3\377\24\31\33\377'-8\377&-6\377&+6\377(-6" + "\377'-6\377'.5\377&,5\377%+5\377&-5\377',4\377%*5\377&+6\377&,5\377%+5\377" + "#*3\377#*3\377$*3\377$*4\377$,3\377%+3\377$*1\377$)4\377\"*2\377\"(0\377" + "#)2\377$*2\377$*2\377\")1\377\"'2\377\")0\377#*2\377$*1\377#)2\377$+3\377" + "\"(2\377$*1\377%)2\377%*2\377%,2\377$*1\377#*2\377\")2\377#)3\377$*3\377" + "!(0\377$*1\377$(/\377\"&.\377Zel\377\35!)\377$+1\377%,4\377&-4\377$,2\377" + "%+2\377$+3\377$,4\377&,3\377%+1\377%*1\377#(0\377%+2\377$+3\377%,5\377%)" + "2\377$)0\377$+2\377\"*2\377#(0\377#*1\377$*0\377$)0\377$*1\377#*2\377$)4" + "\377&+4\377#+2\377&-2\377%*1\377#(2\377%*2\377&*4\377%*1\377%*4\377&-3\377" + "&-4\377&+6\377%*3\377$*2\377$+2\377&+4\377&-5\377%,3\377%+2\377%+3\377\40" + "%.\377%%\40\377RQD\377OOF\377QPF\377PPD\377CC9\377;;2\377:8-\377:8-\377:" + "8-\377:8-\274:8-\247:8-\35:8-\3:8-\3:8-\3:8-\3:8-\3:8-K:8-\247:8-\247:8-" + "\364:8-\377:8-\377:8-\37777.\377KK?\377`]X\377PQG\377POF\377XWH\37700&\377" + "\33\40(\377*/9\377).7\377'+7\377%,5\377&.6\377&,6\377%,5\377$*3\377&,5\377" + "&-3\377$)0\377%+3\377%*3\377%*3\377#(3\377$*1\377%,3\377$+3\377#*2\377#'" + "0\377$*1\377\"*2\377#)2\377\"*2\377\")2\377\"(2\377#)2\377\")1\377\"(1\377" + "#(1\377$*1\377#*2\377\"'2\377$)3\377$+3\377$*4\377%*2\377#*2\377$*2\377$" + "*2\377$)4\377'+4\377%+1\377&*3\377%*2\377!&-\377\"&.\377Zem\377\35\37*\377" + "%+1\377%*2\377%*3\377%+2\377&-4\377%+3\377%(1\377$*2\377&,2\377&+3\377$," + "2\377#+3\377#)0\377%*1\377$*2\377\")1\377#)1\377#*2\377#)2\377%+2\377&-4" + "\377$)1\377#*1\377#*2\377#)3\377%+5\377$+2\377%+1\377%,4\377$*4\377%,2\377" + "$*1\377#*2\377#)2\377$*1\377%*2\377%*3\377&+3\377#)2\377$*3\377&,4\377%*" + "3\377%+3\377$+2\377$*3\377\27\31\40\377LM?\377PPF\377PPF\377QQG\377DD:\377" + ";<2\377:8.\377:8-\377:8-\366:8-\260:8-\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:8-D:8-\260:8-\366:8-\377" + "98.\37799.\377QOE\377^]X\377PPF\377PPF\377OPB\377\34\35\31\377\37%,\377'" + ",6\377%*4\377$*3\377&,6\377&,6\377$*3\377%*2\377$*2\377%+4\377%*3\377#*2" + "\377$*2\377$*3\377$)1\377$*1\377#*2\377#)2\377#(2\377#(1\377\")2\377\"'2" + "\377\"&/\377\40'2\377#)2\377\"(0\377!(0\377$)1\377#)2\377$(2\377$*2\377\"" + "(2\377\")2\377\"(2\377#)1\377$*2\377$*1\377#*2\377%*3\377&+5\377\"*2\377" + "$)2\377%+1\377%*2\377%*2\377#)0\377\"&.\377Zen\377\34\40+\377%+1\377&,3\377" + "%,3\377&,2\377',3\377%*1\377$*1\377$)1\377%,2\377'+3\377$*1\377\")1\377#" + "*2\377%-2\377#)2\377$*1\377#*2\377#*2\377$+1\377#*1\377#)1\377$,2\377$*1" + "\377%*3\377$)2\377#*2\377$,2\377%+3\377&,4\377%+2\377$+1\377$)2\377$+3\377" + "#*2\377$*2\377$,2\377#*2\377&*4\377%*3\377#*3\377%,3\377\")1\377%-2\377$" + "*1\377\36!(\377--'\377SSE\377RPF\377QPF\377GG>\377;;2\377:8-\377:8-\377:" + "8-\336:8-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:8-1:8-\336:8-\377:8-\377" + "76*\377TTM\377ZXO\377QNE\377QPF\377??2\377\35\37!\377&,8\377&-3\377&,4\377" + "&-6\377&-5\377&.3\377#+2\377%*4\377#*2\377$*2\377%*3\377%+4\377#)2\377#)" + "2\377#)2\377#*2\377#)2\377\")1\377!(0\377#)2\377#+3\377\"(1\377\")1\377\"" + ")1\377#(0\377!'/\377\"(1\377#(1\377#(1\377%)1\377$*1\377\"(2\377$)4\377#" + "*2\377$*1\377\"*2\377\"*2\377$*4\377%,3\377\")1\377%*4\377%+3\377$*3\377" + "$)1\377!%,\377\"&.\377Zen\377\34\40+\377&,2\377&-2\377%+2\377%,2\377%+3\377" + "%,3\377$*2\377$*1\377$*1\377$)0\377%*1\377#*2\377$)1\377$*1\377$(4\377#)" + "2\377#*2\377%(0\377%*3\377$)1\377$(3\377$*2\377#*2\377$)0\377\")1\377\"*" + "2\377\"*2\377$)2\377%*1\377$(1\377$*1\377$*1\377#*2\377$*1\377$*2\377$*2" + "\377%*3\377%*2\377%,3\377%,2\377%+1\377$*1\377$+2\377$+3\377\40\"!\377HH" + "?\377RPF\377SOE\377LKA\377<;1\377:8.\377:8-\377:8-\356:8-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:8-1:8-\356:8-\37798.\377::2\377" + "TPE\377SQF\377RNE\377UTK\377'&%\377!)2\377&-5\377$*4\377#*2\377$*2\377&+" + "5\377%*5\377$*2\377$*4\377$+2\377#*2\377$*1\377\"*1\377\"*1\377\"(1\377\"" + "'1\377\"(2\377\"'1\377\")2\377#)1\377#(0\377\")1\377\"(2\377\"*2\377$*1\377" + "!'/\377#)1\377\")2\377#)1\377\"*2\377$*2\377#)2\377\"'1\377$)1\377$(0\377" + "\"'0\377\"'2\377#*3\377$*3\377#*3\377&*5\377%,4\377$*4\377#(2\377!'/\377" + "\"&.\377Zfo\377\36\",\377'-4\377%*2\377%+2\377&,3\377&,2\377%*1\377%+3\377" + "%,3\377%+2\377%+2\377&,2\377%,4\377%*1\377#*2\377$*3\377$*1\377#(1\377$*" + "2\377#)2\377$*1\377#)2\377$)1\377#(2\377%)1\377\"*2\377#*2\377$*2\377$*2" + "\377\")2\377$*1\377#(0\377#)1\377%*3\377$*1\377$*1\377$*1\377$*1\377$*1\377" + "#*2\377$,3\377%+2\377&-4\377&+5\377\37&.\377..#\377QPE\377POF\377ZXL\377" + "A@6\377:8-\377:8-\377:8-\343:8-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:8-7:8-\343:8-\37755)\377ED;\377URI\377Q" + "OF\377OOF\377DD;\377\33\36'\377&,6\377!*1\377#)1\377%*2\377$*3\377\"*2\377" + "%+3\377$)0\377$*1\377$*3\377#)2\377!)1\377#(2\377\"(2\377\"(2\377$*1\377" + "#)0\377\"*2\377\"'/\377#)1\377\"'/\377\"(0\377!(1\377\"(0\377\")2\377$)1" + "\377%,3\377#)2\377#*2\377\"*2\377\"(1\377\"'/\377\")2\377\")2\377\")2\377" + "\"(2\377$)2\377%+3\377$+3\377#)3\377$*2\377$*2\377%*4\377#(/\377\"&.\377" + "Zfm\377\34!*\377',3\377&-4\377%-3\377%*1\377%,1\377%-4\377$+2\377%*1\377" + "%,3\377$*2\377$*1\377%+2\377%*2\377&*4\377%*2\377',4\377\"*2\377%-2\377%" + "*1\377#(0\377#)2\377#*1\377$)3\377%)1\377#(/\377#*2\377#*2\377#)1\377$+2" + "\377#(2\377$*1\377#*1\377$)2\377#*2\377%*1\377%*1\377$*1\377$*1\377%,2\377" + "&,5\377%+2\377%+2\377'-8\377\31!(\377?@5\377RPE\377PRH\377KLE\377:8.\377" + ":8-\377:8-\377:8-<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0nxx\246:8-\37787,\37767.\377OKB\377ROF" + "\377QPF\377HG=\377\40%&\377\"(0\377#)1\377#(2\377$*2\377\"*2\377\"(2\377" + "*/6\377&*1\377#*2\377#(2\377$)0\377\"(2\377\")2\377\"(0\377$*1\377\"'2\377" + "\"'0\377#*1\377\"(1\377\"'0\377\"'/\377\"'/\377\"'/\377\"&0\377\"'1\377\"" + ")1\377$*2\377$*1\377\"(0\377\")2\377$)2\377$(0\377\"'/\377#*2\377#(2\377" + "#*2\377$*1\377#*2\377#*2\377#*2\377$+3\377%*4\377#*2\377$)0\377\"&.\377Z" + "gp\377\35\"-\377&,3\377%,1\377%+1\377&+3\377%,1\377#*2\377$+2\377&*1\377" + "&+3\377$*2\377#)1\377&+4\377&+2\377%+2\377$*1\377&+4\377#*2\377%-2\377$*" + "1\377%*1\377#(2\377$)1\377$)1\377#(1\377\"'0\377#*2\377#*1\377\"(1\377$*" + "1\377#*2\377%+3\377%)2\377&*4\377%+1\377$+3\377$*2\377$*1\377%*1\377%+3\377" + "'-5\377&*5\377#*2\377\"(0\377\36\"#\377OPA\377OOF\377NOG\377>=5\377:8-\377" + ":8-\377:8-\271:8-\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:8-\17:8-\27197,\37766,\377IH=\377VU" + "K\377QOE\377OMC\377$&\"\377\40&/\377$+2\377%+4\377%*1\377#)2\377#)2\377\"" + "(1\377\"*1\377#)1\377#'0\377$+2\377#(1\377\"&0\377#'0\377\"(1\377#(2\377" + "#(1\377\"'1\377\"&/\377\"&/\377\"'0\377!(0\377#(0\377\"&0\377\"'0\377\"(" + "1\377$)1\377\"(1\377\"'0\377\"(2\377#(2\377$)1\377#(1\377#)3\377\")1\377" + "$*1\377$*1\377%*1\377#*3\377#*2\377#*2\377%*3\377&,4\377%)2\377\"&.\377Z" + "el\377\34!)\377&-3\377&-2\377',3\377%*2\377#*2\377%+3\377%+1\377%*1\377$" + ",3\377%*3\377%+1\377%*2\377&*4\377%*2\377&+4\377%+2\377$*1\377%+1\377$+2" + "\377%*2\377$)3\377$)1\377$+3\377\")1\377$+4\377\"*1\377\"*2\377#*3\377#*" + "1\377$)1\377\")2\377#)2\377$*2\377%*3\377$*1\377#(2\377%*1\377$*1\377#*2" + "\377$)0\377$*0\377$*1\377\")0\377021\377RPC\377OOF\377KNE\377;:0\377:8-\377" + ":8-\366:8-^\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0~\214\220^CC:\36665)\377<=7\377" + "WYR\377ONF\377QOE\3770/)\377\37%+\377\"(1\377\")1\377\40&.\377#(1\377#)1" + "\377#(0\377#)1\377#(0\377\"'0\377#'0\377\"'0\377\"&1\377\"'/\377\"&1\377" + "\"'1\377\"&/\377\"'0\377$)1\377\"'1\377#)1\377\"'1\377\"'/\377\"&1\377\"" + "&0\377\"'/\377\"'2\377\"(2\377$*2\377#)1\377!(1\377!'1\377\")2\377\"*2\377" + "\")1\377\")2\377#*2\377$*1\377%*2\377$*1\377%*1\377%+1\377%*4\377!%.\377" + "\"&.\377Ydi\377\34!&\377%,3\377',3\377%+1\377%*1\377#)2\377&+2\377&+2\377" + "#)2\377%+1\377$*1\377$-0\377#*2\377#)2\377#(2\377'-5\377&,4\377%*1\377%*" + "1\377$*1\377%*1\377$*2\377$(1\377#)1\377#)1\377$*3\377\40'0\377!(/\377$)" + "1\377$)1\377#(1\377$+2\377%*1\377$)0\377$*1\377%*1\377%*1\377%*1\377$*1\377" + "\")2\377$+3\377$+2\377$*3\377\40$,\37712.\377QPE\377OOF\377AA9\37798.\377" + ":8-\377:8-\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0^eb\326:8-" + "\37777.\377UUQ\377NNF\377QNE\377;;.\377\34\")\377\"'0\377\")2\377!(0\377" + "\"'0\377\")1\377\"*2\377#(0\377#(0\377#*1\377#(/\377\")2\377\"'1\377#)1\377" + "\"'0\377\"'1\377!&.\377!%.\377#)2\377\"(1\377\"(1\377\")2\377#(2\377\"&/" + "\377\"&2\377\"(0\377\")1\377\"'/\377\")1\377\"'0\377!&/\377#)2\377\"(2\377" + "$*2\377\"(1\377#(2\377%*2\377$*2\377%*1\377$*2\377$*1\377%+1\377#*2\377\40" + "&-\377\"&.\377Zek\377\34\40'\377&-3\377&+2\377%*2\377%+1\377$*1\377$*2\377" + "%*2\377#*2\377%*1\377%+2\377$*1\377%+1\377%*1\377$*1\377$)1\377%+4\377&," + "5\377&-3\377#(0\377%*1\377%*1\377$*1\377%*1\377\")2\377#)2\377$'0\377$)1" + "\377%+1\377$)1\377#*2\377%*1\377#(2\377#(1\377#)1\377%*1\377$*1\377%,1\377" + "%*1\377#*2\377&,3\377%*3\377%*3\377\"&/\377<<3\377RQE\377NMD\377DE<\377>" + "=3\377:8-\377:8-=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\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}\177\246" + ":8-\37798-\377EEA\377OOF\377PNE\377A@3\377\35\"(\377!&0\377#)1\377#)1\377" + "\"&/\377\40&/\377\"(0\377\")2\377\"(0\377#'/\377\"&/\377$)1\377\40(/\377" + "\"&/\377\"(0\377!'0\377\")1\377\"(2\377\"'/\377#(0\377#'/\377!'/\377\"(2" + "\377\"&/\377\"'0\377\"(2\377#)1\377\37&.\377!%/\377\"(0\377\"(0\377#(0\377" + "%*1\377$*1\377#)2\377\"(2\377\")2\377#)1\377$+2\377%+2\377$*3\377$*4\377" + "#)2\377#'/\377\"&.\377Zdj\377\35!(\377%+1\377%+2\377%*2\377%-3\377#*2\377" + "%*2\377%*2\377#*2\377$*1\377$)1\377\"*2\377#+2\377%*2\377%*2\377%*1\377$" + "*1\377%)1\377&+2\377$)0\377$(0\377$*1\377$)1\377$)1\377$*1\377$*1\377#)2" + "\377#*2\377#*2\377\"(1\377$)0\377%*1\377$*1\377$)1\377\"(1\377$)1\377#(0" + "\377#)2\377$)1\377#)2\377&,2\377&,4\377$*1\377\"(/\377A?6\377RRF\377LL@\377" + "==4\377:9.\377:8-\377:8-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" + "nyy3QTO\37797-\377@A<\377PQF\377ONF\377GE;\377\30\40'\377\40&.\377\"(2\377" + "$)1\377\"(1\377\"(1\377\"(1\377#(1\377#(0\377#)0\377\"&.\377\")1\377!'/\377" + "\"'0\377\"'0\377\"&.\377#'/\377\"'/\377\"&.\377#'0\377\"&/\377\"&/\377\"" + "'1\377\"'/\377\"(0\377#(1\377!(0\377!)1\377\"'0\377#'/\377$*1\377\"'/\377" + "$)1\377\"'2\377!'1\377!'1\377\")2\377\"(2\377#(3\377$*2\377\"*2\377#*2\377" + "%+2\377!'/\377\"&.\377Ydi\377\34\37'\377%*1\377%+1\377%*1\377&,2\377$*3\377" + "%-2\377#(3\377$*1\377$+3\377$)0\377$*1\377%)2\377%*3\377#*2\377$(1\377%+" + "4\377$*1\377%*2\377%+3\377%*1\377$+2\377$+2\377%*1\377\"(1\377#'1\377$*1" + "\377#(0\377\")1\377$*1\377%,2\377$)2\377$)0\377$)1\377$*1\377$)0\377\"'1" + "\377#)2\377#(0\377%*1\377\"(0\377$)1\377#(3\377\37&1\377CC;\377RRF\377JJ" + "?\377891\37787-\377:8-\377:8-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\213\234\2433^da\377:8-\377BB7\377NPF\377PNE\377KJ@\377\37$*\377#)" + "0\377#(1\377\40&.\377\")1\377#(0\377\"&/\377\"(0\377\")0\377\"&/\377\"&/" + "\377\")1\377\"'1\377#)1\377#(0\377#'/\377\"(0\377\"'/\377\"&/\377\"(0\377" + "\"&.\377\"&1\377#'/\377#(0\377!&0\377#(0\377\"&.\377$)0\377\")1\377\"(0\377" + "!'/\377!&/\377\"&0\377\"&/\377\"*1\377\"*2\377#(2\377$+2\377\"(2\377\"(2" + "\377#*2\377$*1\377#*2\377#)1\377\"&.\377Ydi\377\36\40(\377&+5\377&-4\377" + "%*1\377%*1\377%*1\377$+2\377#*3\377%*2\377&+3\377$+2\377$*3\377#)1\377%*" + "1\377$*1\377%+1\377$*1\377$*1\377%*1\377$,2\377$*1\377$+2\377%*1\377$*2\377" + "\"(0\377#)1\377%*1\377%*1\377$)1\377#*1\377%*1\377#)2\377$)0\377#'1\377#" + "*2\377$*1\377$)1\377$)1\377$+1\377$)0\377$(0\377%*1\377$+2\377\34\".\377" + "=>7\377RRE\377JJ?\37799/\37787+\377:8-\377:8-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\213\234\2433^da\377:8-\377BB:\377PPF\377NNF\377HH" + "<\377\32\"+\377\37&-\377\"&/\377!&0\377\"'/\377$)0\377\")2\377#)0\377!'/" + "\377\"'0\377#'/\377\"'/\377\"'1\377#'0\377\"'/\377\"(0\377\"'1\377\"'2\377" + "\"&/\377\"&.\377\"&0\377\"&/\377#)1\377\"'/\377!'/\377\"&/\377\"'1\377\"" + "'1\377\"'/\377$(0\377\"'/\377!'0\377\"'/\377\"(0\377\"(2\377\"'0\377\"(0" + "\377\"'1\377\"(2\377\"'2\377\"'/\377$*1\377$*1\377\40$.\377\"&.\377Zdj\377" + "\35!(\377&+4\377$+2\377'+5\377&+3\377%*1\377%+3\377$+2\377$*2\377$+2\377" + "%+1\377%*2\377%+4\377%-3\377#*3\377$)1\377%*1\377%*1\377%*1\377%*1\377%*" + "2\377&+3\377$)0\377$+2\377$(0\377#)1\377'-3\377%+2\377%*1\377$*1\377#)2\377" + "%)3\377$)0\377#)2\377#)1\377$)1\377%*2\377\"'1\377#'0\377%+1\377%*2\377%" + "*1\377#)2\377!(2\377=>9\377RPE\377LK?\377=<3\377:8-\377:8-\377:8-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\213\234\2433^da\377:8-\377DE>" + "\377PQH\377PNF\377FF9\377\27\37&\377\35#*\377\")1\377\40&0\377\32\35(\377" + "\36%.\377#*2\377#(0\377#'0\377&)1\377$)0\377\40&0\377#(2\377\"&.\377\37&" + "-\377\"'0\377#+3\377\"&/\377!&0\377\"(0\377!&.\377\"&1\377\"&/\377\"(0\377" + "#'/\377#'0\377!'.\377#'/\377\"&/\377\"'/\377!&/\377\"(0\377#)1\377\"(0\377" + "\")2\377#(1\377#+2\377#*2\377\"&0\377\"&1\377\"'1\377\")2\377#)1\377$)0\377" + "\"&.\377Ydi\377\35!'\377%+1\377%*2\377%+4\377&+2\377%*1\377#*3\377$,2\377" + "%*3\377$+2\377%,2\377%*1\377$+2\377$+2\377#*2\377#)1\377%*1\377$)1\377%*" + "1\377$*2\377\"'0\377$)2\377$)1\377%*1\377#*2\377#*2\377$+2\377%*1\377$(0" + "\377$)0\377#(0\377\"(0\377\40(/\377!'/\377\"'1\377#(0\377#(1\377#(1\377#" + "'0\377$(1\377%+2\377%*1\377$)2\377#*2\377EC>\377RRC\377LL@\377::1\37797," + "\377:8-\377:8-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\213\234\243" + "3^da\377:8-\377BB<\377OOF\377ROE\377EC8\377\32!)\377!'-\377\26\33!\377\23" + "\24\25\377\30\27\27\377\22\24\24\377\27\32\"\377#(0\377!&/\377&,2\377#*0" + "\377!(0\377!&/\377\"&.\377!&0\377\37&.\377\"'/\377\"'/\377!'/\377%*2\377" + "\"&1\377\"&2\377\"&/\377\40&.\377\"&.\377$(0\377!'.\377\"'/\377\40&/\377" + "\"'/\377\37'.\377\"'/\377\"'.\377#'/\377\"'/\377\"&.\377\36%-\377\"'1\377" + "#)1\377\"'0\377!&/\377\")1\377\"&0\377!&.\377\"&.\377Ydi\377\32\35%\377#" + "*2\377%*1\377%,3\377%*1\377$*1\377#)1\377%)1\377$*0\377%*1\377%*2\377$)1" + "\377$)0\377#*1\377$*1\377#)0\377$+2\377$*2\377%*1\377'-3\377$*2\377#)2\377" + "%)2\377#)1\377#*2\377$*3\377#)2\377$*1\377$)0\377$)0\377#(1\377$*1\377#)" + "0\377$*1\377\"'/\377$)0\377#(0\377#(1\377#(0\377$+2\377#(0\377#)1\377#*2" + "\377\37(0\377)-.\377RRC\377NNC\377<<3\37722%\377:8-\377:8-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\213\234\243\200^da\37798-\377DD<\377N" + "NF\377QPE\377142\377\35$,\377\31\40(\377-.&\377KL?\266MB)\206KG8\330-+&\377" + "\37%+\377$*3\377\"&/\377!&/\377\40'.\377!'0\377!(0\377!'0\377\"&.\377\"(" + "0\377\"(0\377#)1\377\"'/\377\"&/\377\"&0\377!&.\377\37&-\377!&/\377!&.\377" + "\37&-\377!&.\377\37&.\377\"%-\377!&.\377\40&/\377!&.\377\40&.\377\37%,\377" + "\40&-\377!&.\377!&.\377!'/\377\"'/\377\"'/\377\"(2\377\40'/\377\34!)\377" + "\"&.\377Ydi\377\33\36&\377$*1\377%+2\377$*1\377$*1\377%*1\377%+2\377%+2\377" + "$)1\377$)1\377%+1\377#*2\377%*3\377%*1\377%,1\377$*1\377&*4\377%,2\377%+" + "1\377%*1\377%+2\377%+1\377%,4\377%,2\377$)2\377#)2\377%*1\377$*1\377#(2\377" + "$*1\377#*2\377#)1\377#)1\377$*1\377\")1\377#*1\377$*1\377$)1\377$*1\377$" + "*2\377\"(0\377$*1\377$*1\377#)1\377'*0\377RQC\377POF\377@@8\37787+\377:8" + "-\377:8-\272\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\210\214\326" + "@@6\377<:/\377LLH\377NNF\377SOB\377\"'/\377\40(2\377*-/\377LLA\314RNE\22" + "\0\0\0\0RNE&FC8\377\36\37\37\377\37&/\377\"'1\377\"&0\377\")1\377\"'1\377" + "!&.\377!&.\377\"&1\377\"&0\377\"&.\377#(0\377\"&/\377\"&/\377\"(0\377\"&" + "/\377!&0\377!&.\377!(0\377\40'0\377!&0\377\37&-\377\40&.\377\"(0\377\40&" + "/\377\"&.\377\40&-\377!&-\377!&.\377\37&.\377!&.\377\40&-\377!&.\377\"'/" + "\377!'/\377\"&1\377\37%-\377\"&.\377Ydi\377\35\40%\377%+1\377%,3\377%+1\377" + "$+2\377%+2\377%*1\377$+3\377$*3\377$*2\377%+3\377#*2\377&,3\377%*1\377%*" + "1\377#(0\377#)3\377%*2\377$*1\377$+2\377%+3\377%+1\377#)1\377#+1\377%+2\377" + "%+2\377$*1\377$*1\377\"(1\377$*1\377#(2\377\"'1\377\"&1\377#(0\377#)2\377" + "#)1\377\"(1\377$)0\377$*1\377#*2\377#)2\377'+4\377(-5\377#(0\377\24\34&\377" + "NL?\377TSH\377GG>\377>=3\377:8-\377:8-\354:8-B\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\213\234\243By\206\212\35497-\377<;0\377MNK\377PPE\377FD>\377\33$4" + "\377'-7\377687\377MMD\302\0\0\0\0\0\0\0\0RNE\12MJ@\377&'(\377\40&1\377\"" + "&/\377\"(0\377\"(0\377\"&.\377#(0\377#(0\377\"&/\377\"&.\377\"&.\377!'/\377" + "#'/\377\"'1\377\"'1\377\"'0\377\"&0\377\"'/\377\"&0\377!'/\377!&/\377!&." + "\377\40'/\377\"&.\377\"'/\377\40&-\377\40&.\377\40&-\377\37&-\377!&.\377" + "\37&.\377\40&.\377!&/\377\40&-\377\37%,\377\"&.\377\37#*\377\"&.\377Ydi\377" + "\34\40'\377%+1\377%,1\377%*2\377#(2\377$*1\377%*2\377',4\377%*1\377%+1\377" + "%,2\377%,2\377$*2\377%*1\377%*1\377#*1\377#*2\377$*3\377%*2\377%*2\377%+" + "2\377%+1\377#)0\377(-5\377%*1\377%*1\377$*1\377$)0\377$)0\377$)0\377#'0\377" + "$*1\377\"(0\377#)1\377$)1\377$)0\377%)1\377#(0\377#)0\377$*1\377%*1\377\"" + "'/\377\"'/\377$*1\377\37&0\377556\377VSF\377NKA\377>?5\377:8-\377:8-\377" + ":8-\233:8-\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\213\234\243\7\213\234\243\233MOH\37797-\377" + "CC<\377MMF\377SPD\37736;\377#*6\377).9\3779BE\377NMC\370MMD\200OP?>OMB\257" + "NLF\377*3:\377#)2\377$)0\377\"'1\377\"'/\377\"&,\377\40&/\377\"&/\377\"&" + "0\377\"&0\377!&.\377!%0\377\"&/\377\40&/\377$(0\377\"'0\377\"(2\377\"&/\377" + "\"&.\377\"&/\377!%.\377!%-\377!&/\377!&.\377\"&/\377\40&-\377\40%.\377\37" + "&-\377!&.\377!&,\377\36&-\377\37&-\377\37%-\377\40%-\377\40&.\377\"'.\377" + "\"$*\377\"&.\377Ydi\377\33\40'\377#(1\377%*3\377%*3\377$*2\377$*1\377%*3" + "\377%*2\377%+1\377&-2\377%*3\377$*2\377$*1\377$*1\377$*1\377#(1\377$)1\377" + "#*2\377%*1\377$*2\377#+3\377#*2\377%*1\377%*2\377\"*2\377%*1\377$*1\377$" + ")0\377$)1\377\"&.\377\"&/\377#)2\377$)1\377#(2\377#*2\377$*1\377#)1\377\"" + "(0\377\"(0\377$*1\377%*2\377#(2\377#(/\377#*1\377&,3\377\"*1\377QMB\377N" + "MC\377BB9\377:9/\377:8-\377:8-\377:8-\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\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\213\234\243\200" + "t\177\201\377?>5\37787-\377HH?\377NNE\377PMC\377\37)5\377%,4\377%*3\377\35" + "#4\377jnk\377_]O\377TQ@\377om^\377R_g\377\27\37)\377\")2\377#'0\377#'/\377" + "#(0\377$(0\377\"&.\377\"(0\377!&/\377\"'0\377#(1\377!%/\377\"&/\377\"(1\377" + "#'/\377\"'/\377\40&/\377!&/\377\"&.\377!&.\377!&.\377\37&-\377\"&/\377!&" + ".\377\40%,\377\40&-\377\40%-\377\36&-\377\36&-\377\40&-\377\40$-\377\40&" + "-\377\40%-\377\36%,\377\40&-\377\37&,\377\"&.\377\"&.\377Ydi\377\35\40'\377" + "&+5\377%,3\377%+2\377$*1\377%+1\377%+1\377$*2\377$*1\377$*2\377%+1\377%+" + "1\377%+1\377%*1\377#*2\377$*1\377$*1\377$*1\377#(0\377#)0\377#)1\377$*1\377" + "#)0\377#*0\377#(0\377%*1\377$)1\377$)0\377$(0\377#)1\377#(0\377\"*2\377$" + ")1\377#(0\377#*3\377#*2\377#*2\377$)1\377#*2\377#(0\377$*1\377%*1\377$)1" + "\377$)0\377#*2\377\37'1\3775:B\377UQC\377LJ@\377==3\377:8-\377:8-\377:8-" + "\314:8-\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\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\213\234\243\37\200\216\223\324<;0\37798.\377BB;\377MME\377WTG" + "\377>DI\377\40(3\377&*5\377%+3\377\40&/\377!,:\377V[d\377gns\377HUc\377\31" + "\"*\377\"'-\377\"'1\377\"(1\377\"'0\377!(0\377\"&.\377\"&.\377\"'/\377#'" + "0\377\"(1\377\37&.\377\37$,\377\"'0\377\"&/\377\"'0\377\"&.\377!&.\377\37" + "'/\377\40'.\377\"&.\377\40&-\377\40'.\377\40%,\377\35%,\377\37&-\377\40&" + "-\377\40&-\377\"&/\377\40&-\377\36&-\377\37&-\377\40&-\377\36&-\377\37%-" + "\377!&/\377!&-\377\37#+\377\"&.\377Ydi\377\33\37%\377%*2\377$*2\377&+4\377" + "$*4\377$+1\377&-4\377&-3\377%,1\377$*1\377%*1\377#+2\377#*2\377%*1\377#*" + "2\377$*1\377$,2\377%*1\377$*1\377$*1\377$)1\377#*2\377#*2\377%+1\377#)1\377" + "#*1\377#)1\377$)0\377$*1\377$)0\377$*1\377\"*2\377\"'0\377$)1\377#*3\377" + "$+2\377$)1\377#(2\377#'2\377$)1\377$*1\377#(2\377$)1\377\")/\377$*1\377\"" + ")1\377!,?\377KLO\377SNC\377EF<\377;:/\377:8-\377:8-\377:8-\312:8-\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\213\234\243\10\213\233" + "\242\312_fc\37787-\377<<4\377IKC\377POE\377URJ\377\35(7\377#)1\377%*2\377" + "#*2\377\"(0\377\40&.\377\26\36'\377\25\35)\377\33\40(\377\"(1\377$)2\377" + "$*1\377$)1\377#(1\377#(/\377\"&.\377\"'/\377#(1\377\")1\377#(0\377\40&0\377" + "\37&.\377\"'0\377\37&.\377\37'.\377!&.\377!&.\377!&.\377#'/\377\"&.\377!" + "&.\377\40'.\377\40%-\377\35$,\377\37&-\377\40&.\377!&.\377#(0\377\40$,\377" + "!&/\377\"&.\377\36$-\377\40&-\377!%-\377!&.\377\40&.\377\40$+\377\"&.\377" + "Ydi\377\34\40'\377&,4\377%+1\377&,3\377'-3\377&*4\377',3\377%*3\377&,2\377" + "%,2\377%*1\377$*2\377%*2\377$*1\377$*1\377%*3\377$*1\377%*1\377%*3\377%+" + "1\377$*1\377%+2\377#(2\377%)0\377#(0\377#*2\377$*1\377\"(1\377#(1\377$*1" + "\377\"(2\377#(0\377#(2\377$)1\377\"(2\377#)1\377$*2\377#)2\377$(1\377$(0" + "\377%+1\377%*1\377\"(1\377!&.\377\")0\377$)2\377$'.\377$;P\377URJ\377PME" + "\377FE<\377:90\377:8-\377:8-\377:8-\313:8-\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\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\213\234\243Y\212\232\241\313Y^Z\37797-\377:91\377HHB\377PND" + "\377UTJ\377+5A\377#'0\377$(2\377\")2\377#*1\377$)1\377\"(0\377#(1\377#)1" + "\377\40'/\377\40$+\377\"'0\377\"'2\377%*1\377#)1\377\"*2\377\"'2\377#(0\377" + "#(/\377\"&/\377\"&1\377!'/\377!'.\377#'0\377\"&.\377\"&.\377\"&1\377\"&2" + "\377#'1\377!&.\377\"'/\377\40'.\377\37&-\377#%.\377\"'/\377!&.\377\"'/\377" + "#'/\377!&/\377\40&.\377\37&-\377\36&-\377\40&-\377!&.\377!&.\377\40&.\377" + "!'/\377\"&-\377\"&.\377Ydi\377\35!'\377%+2\377%,2\377&,2\377&+2\377$*2\377" + "$+2\377#+2\377%*2\377&*4\377$)2\377%)1\377$*1\377%*2\377$*3\377%,3\377$*" + "1\377%*1\377%*1\377$*1\377\"(2\377$+2\377$)3\377%*0\377%)1\377%*1\377$*1" + "\377#)1\377%*1\377$*1\377$*1\377$*2\377#*2\377#*2\377\")2\377#)1\377#)2\377" + "$*2\377$*1\377%*1\377$*1\377$*1\377#)2\377%+2\377%*1\377#*1\377!)0\377\30" + "\40*\3779EZ\377[RF\377ONC\377@A8\377:8.\377:8-\377:8-\377=;1\316\177\215" + "\221uu\201\203\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\213\234\243\20\213\234\243ut\200\202\374PSM\377" + ":8-\377:8.\377CB<\377MLD\377]WK\3777@N\377\35%0\377\40$+\377#*2\377#)1\377" + "#*2\377#)1\377#(0\377#(1\377$)1\377#)1\377\"(0\377#)1\377\"(1\377#(0\377" + "#)1\377\"'1\377$(0\377#'0\377#'/\377!&.\377\"&/\377\"'/\377\37&.\377\37&" + "-\377\40&.\377\"&0\377!&/\377\40&.\377\"&/\377!&.\377\"&.\377\37%.\377!&" + ".\377\40&.\377\"&.\377!&.\377\40'.\377!&.\377!$-\377\37&-\377\40&.\377!&" + ".\377\40&.\377\40&.\377\40&.\377\"&/\377!&/\377\40&.\377\"&.\377Ydi\377\33" + "\40%\377$*1\377%*3\377&,3\377%*1\377&,3\377'-3\377$*1\377&,2\377%+1\377%" + "+2\377%*1\377&-2\377$)3\377$*1\377$)1\377$*1\377%+1\377$)1\377$*1\377%*1" + "\377%*3\377\")1\377$+2\377#)2\377#)1\377#)2\377$+2\377&,2\377#*1\377$(1\377" + "%)3\377%*1\377$)0\377\"(1\377$*1\377#*2\377#)2\377#)2\377%*1\377$)1\377$" + "*1\377#*2\377#)2\377#)1\377!(0\377#+2\377\"(0\377\35(2\377DLZ\377SNE\377" + "QQC\377FC9\377:9/\377:8-\377:8-\377:8-\377Z`\\\355ahfl\213\234\243W\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\213\234\243W\213\234\243l\202" + "\221\226\355irq\377;:/\37797-\377::1\377AA7\377LKB\377XUJ\3779G]\377\33'" + "2\377\"(/\377\"'1\377#(1\377!%0\377#'0\377$(1\377\")2\377#*2\377#)2\377\"" + "'/\377$)0\377#*1\377#)1\377\"(1\377#'/\377\"(0\377#(0\377\"'0\377#(1\377" + "#'/\377!&.\377\"(0\377\"'1\377#(0\377!'/\377!'0\377\"&.\377!'/\377\"&/\377" + "#'/\377\"'/\377!&.\377!&.\377\40&-\377\"&/\377!&.\377\"&/\377\40%-\377\37" + "%.\377\40%.\377!'0\377!'.\377$(0\377$(0\377!&.\377!&.\377!&/\377#'0\377\"" + "&.\377Ydi\377\34!'\377%*1\377%*1\377&*4\377&,3\377&,3\377&-3\377%*2\377%" + ",1\377$+2\377&+2\377%,3\377%*1\377%*2\377%*1\377#'/\377#)1\377$)2\377$*2" + "\377#)0\377%*2\377%+3\377%)3\377%*1\377$)0\377$)0\377#*2\377#)2\377#*2\377" + "#*1\377#'1\377#'0\377$)1\377$*1\377$)1\377#)0\377$+2\377%)1\377$*1\377%*" + "1\377\"(1\377$)0\377%*1\377#(0\377$*0\377$*0\377#)1\377#*2\377$)0\377\34" + "%5\3778EX\377[XK\377PNE\377GF>\377<:/\377:8.\377:8-\377:8-\377CC:\377IKC" + "\364`gd\306}\213\217\306}\213\217\306}\213\217\306}\213\217\306}\213\217" + "\306w\203\206\364LNG\377HIA\377:8-\37798-\377;;1\377FD;\377NLB\377]ZU\377" + ":G\\\377\35(8\377#)/\377#(0\377#*2\377$*2\377\")1\377#)1\377#(1\377#)2\377" + "#(0\377\"(0\377#)1\377\"'1\377$)1\377\"'1\377!)1\377\")1\377\"'1\377\"'/" + "\377\"'0\377\"&/\377\"'/\377!&.\377\"(0\377\"'/\377\"'/\377\"(0\377\"'/\377" + "\"&0\377$(0\377\"&0\377\"&0\377\"&0\377\"&0\377\40&.\377\"&.\377\"&.\377" + "\"&.\377\"(0\377!&.\377\"'1\377\40'0\377\"'/\377!'.\377\37&.\377\37$.\377" + "\40&.\377!(0\377\"'/\377\"&/\377\"&.\377Ydi\377\33\40%\377$*2\377%,1\377" + "&+3\377%+2\377#*2\377$+2\377%+1\377%,2\377&+4\377%,2\377%+1\377$+1\377$+" + "1\377%+1\377#)1\377$)1\377#)2\377%+3\377$*1\377#*2\377$+2\377%*2\377&+4\377" + "$*1\377$*1\377#(0\377$*2\377$)2\377%+1\377$*1\377%*1\377$*1\377#)2\377$)" + "1\377\"'1\377#)1\377$)1\377$)0\377$*1\377%*1\377$(0\377#(1\377\")2\377#(" + "1\377$)1\377#'0\377$*3\377$*1\377\"'1\377\36&2\377>L[\377TYY\377POD\377J" + "J?\377BB8\377:90\37776,\377:8-\377:8-\377:8-\377:8-\377:8-\377:8-\377:8-" + "\377:8-\377:8-\37787-\377:9.\377;;1\377??5\377II>\377SPD\377^b_\377;GY\377" + "\33#-\377\40'.\377#)2\377\"'1\377$+2\377$*1\377\"'0\377\")0\377\"(0\377\"" + "(1\377#)1\377!)1\377#)2\377\")1\377\"(0\377!'0\377#(0\377\"(1\377\"'1\377" + "!'1\377\"'1\377!(0\377#)2\377\"&0\377\"&.\377#(0\377\"(1\377!)1\377\"'0\377" + "\"'0\377\"'/\377\40'/\377\"'0\377\"(0\377\"'.\377#'/\377!(/\377\"'0\377!" + "&.\377\40'/\377!&.\377\"&0\377\"&1\377!%/\377\"'/\377\"&1\377!&0\377#(0\377" + "!'/\377#(1\377!&.\377\"&.\377Ydi\377\34\37&\377%+3\377&-3\377&,2\377&,3\377" + "%*3\377$*2\377%,3\377$*1\377%*4\377%,2\377%+1\377$+2\377$*1\377$)0\377$*" + "1\377%+1\377%+1\377%*1\377%*1\377$*1\377$+2\377#(0\377%*2\377#*2\377#*2\377" + "%)2\377$)2\377$*4\377%,2\377%*3\377%*1\377$*1\377$*2\377#*2\377\")2\377#" + "(1\377$*3\377$*1\377$)1\377#(0\377#*2\377%*1\377%*1\377#*2\377#*2\377#)1" + "\377#'/\377#)1\377%*2\377#)0\377\36#+\377*7G\377W^d\377[XO\377USI\377LK?" + "\377EE:\377=>4\377:90\377<:/\377;9/\377::0\377::1\37798/\377:8/\377;9/\377" + "=<2\377CC9\377IH=\377TRG\377_`U\377]ci\377/:G\377\34#+\377$)1\377\"*2\377" + "\")2\377\")2\377\40'/\377!(1\377\"&2\377#(1\377#(1\377#)2\377#(0\377\")0" + "\377\"&/\377\"'/\377#)1\377#)1\377\")1\377\"&1\377\"&1\377!&/\377\"(0\377" + "\"'/\377#'0\377$(0\377\"&.\377\"&.\377\"&/\377!'0\377\"(1\377!&.\377!&.\377" + "!&.\377\"&/\377\"&.\377\"'0\377\"&.\377\")0\377#'/\377\"&/\377\"'/\377#'" + "/\377\"&/\377#(0\377#'/\377\"&/\377\"(1\377#(0\377#'0\377\"'0\377#'0\377" + "\"&0\377\"&.\377Ydi\377\34\40%\377%+1\377&,3\377&-2\377&,4\377&+3\377%*2" + "\377%*3\377%,2\377%*1\377%+1\377%+1\377%*2\377%)1\377$(1\377#*2\377%+1\377" + "%+1\377$)1\377%*1\377#)2\377%+2\377%*1\377&+3\377$*2\377$)1\377$)1\377&+" + "3\377$*2\377\"*2\377#*2\377%+1\377%*1\377#(1\377#*2\377$*3\377#(2\377#)2" + "\377$*1\377#)2\377#)1\377%*1\377#*2\377#(0\377#)2\377$*2\377$)1\377$)0\377" + "$(0\377\"'0\377#*1\377!'/\377\40%,\377\37(/\377>HT\377ell\377da\\\377YVK" + "\377PPD\377KI?\377IF=\377GG>\377HF:\377IH=\377KH?\377JF;\377II=\377NK?\377" + "YWL\377mok\377dpq\377@PY\377\35%/\377\35$,\377\"'.\377%*1\377%+2\377#)0\377" + "#)1\377%*1\377\"*2\377\"'2\377#'1\377#'0\377#'2\377#(2\377#'/\377\"&.\377" + "$(2\377$)1\377$(0\377#)1\377\"'2\377!(2\377!'2\377!'0\377#'1\377\"(0\377" + "\"(0\377#(0\377!(0\377!'/\377!'2\377\"(1\377\"&0\377\"&/\377\"&1\377\"&/" + "\377$(0\377!'0\377\"&1\377\"'/\377!(/\377\40'1\377\")1\377\"&.\377#(0\377" + "#)1\377#'0\377$(1\377\")1\377\")1\377$)0\377\"&0\377#'1\377$)2\377\"&.\377" + "Ydi\377\33!%\377%+2\377&.5\377&.4\377&-4\377&*3\377$(3\377%*2\377&*4\377" + "&,3\377&+3\377#*2\377$)0\377%+1\377$(2\377\"*2\377$*1\377$*3\377%,4\377#" + "*2\377#(2\377#)2\377#)2\377%*1\377&+2\377$)0\377$*1\377&(1\377%+3\377$*2" + "\377$*1\377$*1\377$*1\377%*2\377$*1\377!*1\377#*1\377$)1\377$*1\377\")1\377" + "#)1\377#(1\377\")2\377\")1\377\")2\377#*2\377#(/\377$*1\377#'/\377!(/\377" + "$*1\377#*1\377$*1\377#)1\377\36#)\377\33\40*\377*5F\377DPa\377bcd\377YZX" + "\377Z[T\377WXO\377ZWL\377\\WL\377Z[R\377\\\\Y\377_^W\377U_d\377CP`\377(2" + "B\377\31\37)\377\35\"(\377#(1\377%*1\377#)1\377#(0\377\40&.\377$(0\377\"" + ")1\377$(1\377$*1\377\")2\377\"(0\377$)0\377$*1\377#(2\377\")2\377\"'0\377" + "\")2\377\"*1\377$)1\377$*1\377#)1\377\"'/\377#&/\377\"&0\377\"&1\377$)0\377" + "#'1\377#(1\377$(1\377\"(0\377\"&0\377!'/\377#'2\377\"'0\377\"(1\377\"&/\377" + "\"'2\377\"'0\377\")2\377%*1\377\"(0\377\"(2\377\"(0\377\"(0\377#(3\377#(" + "2\377$*1\377%*2\377%*2\377%*4\377$*2\377#'0\377$)1\377$)0\377\"&.\377Ydi" + "\377\35!'\377&,4\377&,6\377&-6\377&-3\377%*2\377%+3\377&+4\377%*3\377%*3" + "\377$*1\377%,2\377%*1\377%+2\377$+2\377#*2\377%*3\377#(/\377#(0\377#*2\377" + "%*1\377#)2\377$)1\377%*3\377$*1\377%,3\377$*1\377&,3\377%*1\377%*2\377%*" + "3\377%,2\377$*2\377%+2\377$*1\377\"*2\377#*1\377#(1\377\"*2\377\")1\377%" + "*1\377#(2\377#*2\377#)1\377\"(0\377#)1\377\"(0\377#*2\377$)0\377#*2\377$" + "*1\377#(/\377$(0\377%+2\377\"'0\377\")1\377#(0\377\34#,\377\36$-\377$/>\377" + ".9I\3773\377!&,\377\"'1\377\40" + "(0\377\40'/\377#*2\377#)2\377\")1\377!&/\377\"&0\377\"'1\377#)1\377\40'/" + "\377\"'.\377#)1\377\")1\377#)1\377\40)1\377\"'1\377\")1\377\")1\377#)2\377" + "#)2\377$)0\377\"'/\377#&1\377\"'0\377\"(1\377\"&1\377#'2\377\40&/\377#)1" + "\377$+1\377#'0\377\"(2\377\")2\377\"'/\377\"(2\377\")0\377!)1\377!(0\377" + "\"(1\377\"'1\377#*2\377#*2\377\"(2\377\"*2\377\")1\377\")1\377#+2\377%*1" + "\377#*2\377#+2\377#)2\377#*2\377#*2\377#(.\377\40$,\377\"&.\377Ydi\377\35" + "!&\377&+1\377#*2\377%*1\377$)1\377#'/\377\"&.\377\"&.\377$)0\377%*1\377\"" + "&/\377#)1\377#)1\377\")2\377\"(1\377#)1\377$*1\377$*1\377#'1\377#)2\377%" + "*1\377%*3\377#(1\377#)0\377\"*2\377\"*2\377#)1\377#)1\377$*1\377$*1\377\"" + "(0\377#*2\377%*1\377#*2\377#*2\377#*2\377#*2\377$*1\377$*1\377$*1\377#)2" + "\377#)1\377#*2\377$*1\377$*1\377$,2\377\"(0\377$)1\377\"(0\377#'1\377#)1" + "\377#(/\377#(1\377$)1\377#*2\377$*1\377$+1\377GF>\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377IJ<\377\"'-\377#*1\377#" + ")1\377#'0\377$)1\377!(1\377!'0\377#(1\377\"'0\377\"(0\377$*1\377\"'1\377" + "\"'/\377$*1\377\"'/\377$(1\377#(1\377$*1\377#*1\377!)1\377\"'/\377#)2\377" + "\"(2\377\"'0\377\"'0\377!'1\377\")0\377#'/\377\"&1\377\"'0\377!'/\377\"(" + "0\377!'1\377!&0\377\"(2\377\")1\377\"'0\377\"&0\377\"&0\377\"'1\377$)0\377" + "\"'/\377#'1\377!&0\377#'0\377#'1\377#'0\377\"&0\377!'1\377\"(2\377\"'2\377" + "$(1\377%*1\377#)1\377#'0\377#'.\377\")1\377\"&.\377Ydi\377\33\37$\377&+1" + "\377#(2\377%*1\377$)1\377#(/\377#(/\377\"&.\377#(/\377#'/\377#'/\377$)1\377" + "\"'0\377#(0\377\40&.\377\"'/\377\"'/\377\"'0\377#(1\377#(2\377$+2\377&-3" + "\377%*1\377#)1\377\"*2\377\"(2\377#'0\377#)2\377$)1\377%*1\377$*1\377\"*" + "2\377$*1\377%*1\377#(0\377$)2\377#*1\377#)1\377$)1\377$)3\377#)1\377$)1\377" + "#*2\377$)1\377$)0\377\")1\377#)1\377\"(0\377\"(1\377#)1\377!(/\377$)0\377" + "#(0\377#(2\377\")2\377$)1\377\34#,\377BB<\377KLB\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377IJ?\377&+0\377#*1\377\")1\377#" + "'1\377#(1\377!&0\377!&.\377#(/\377\40)0\377!)0\377\40)1\377\"(1\377#)0\377" + "#*1\377#(/\377\"&1\377\"&2\377\")2\377\"'1\377\40%0\377\"'1\377#)2\377\"" + ")2\377#(0\377!'1\377\37'/\377\"&/\377#'/\377#)1\377\")1\377\40&.\377\37&" + ".\377!(0\377#(/\377#(0\377!(0\377#)1\377#'0\377\"'0\377\"*2\377$)0\377#(" + "0\377$(0\377!&.\377\"(0\377#'/\377\")1\377#(1\377!'2\377#*2\377$)1\377\"" + ")2\377#'0\377\")1\377#(2\377!&/\377!&/\377\"&.\377Ydi\377\35\37&\377%+1\377" + "%*1\377#'/\377\"'/\377#(/\377#'0\377\"&/\377\"&.\377\"&.\377#'/\377#'/\377" + "#(/\377!&.\377!&.\377#(0\377#(0\377%*1\377'+3\377&,2\377&,4\377%+2\377$)" + "1\377#*2\377#)2\377\"*2\377#(0\377$)0\377$)0\377%+1\377#*2\377$*1\377$*1" + "\377$*0\377$*1\377#)1\377$(0\377$(0\377#)1\377#(1\377#)0\377%*1\377$(0\377" + "#(/\377#(0\377$(1\377$*1\377#(/\377\")1\377\"'1\377$)0\377$(0\377%*2\377" + "&+2\377#(/\377\")0\377\"+1\377DD>\377KLB\377KLB\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377LLC\377GH=\377#(,\377#*1\377!'/\377\40&-\377" + "!(0\377\"(0\377\")1\377\"&.\377!&/\377\"&.\377!)0\377\"'2\377\"&/\377\"'" + "/\377\"*1\377\")2\377#(1\377#(2\377$(0\377#(1\377!(0\377#(1\377#*2\377#)" + "2\377\"&1\377\"&2\377#'0\377%'/\377$)0\377#(0\377#)0\377\"(1\377!(1\377\"" + "&/\377\"&1\377\"'0\377$)1\377#)1\377\"(0\377\")1\377#'0\377\"&0\377#'0\377" + "\"&/\377#(0\377#'0\377#'/\377\"'0\377\"'2\377#(2\377#'1\377#'/\377\"&1\377" + "#*2\377#*2\377\"'/\377\37&/\377\"&.\377Ydi\377\32\37%\377$+2\377%*1\377#" + "*1\377#(1\377#'/\377#'/\377#'/\377$)0\377\"'/\377!&/\377\"(0\377$)0\377%" + "(0\377#&.\377#(/\377$)0\377%*1\377%*2\377%*1\377$)0\377$)0\377\"(1\377$)" + "0\377#*2\377$*1\377%)2\377$)1\377#(0\377%*1\377$*1\377#*2\377$*1\377$*1\377" + "#*2\377$*1\377$)0\377#)1\377#*2\377#(0\377#*2\377#(0\377#)1\377#(0\377$*" + "1\377%*1\377$*1\377#)1\377#)1\377%+2\377#(0\377$(1\377#(0\377$*1\377$)1\377" + "$)2\377#(1\377@A:\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KL" + "B\377KLB\377KLB\377KK>\377$*.\377\"(1\377\")0\377\"(1\377\"'2\377\"(1\377" + "#)0\377\"&0\377\"'0\377\")1\377\"(1\377\"&1\377#)1\377$)1\377#'2\377#)2\377" + "$*1\377$)1\377#(1\377\"(0\377\"&/\377\"(0\377$)1\377#(1\377$(1\377\"'0\377" + "$)1\377#)1\377#(0\377\"'/\377#'0\377\"&.\377\"'.\377!(/\377#'0\377\"(1\377" + "#'/\377\"(1\377\"'/\377\"'/\377\"'/\377#(0\377\"(0\377\"&0\377\"'/\377\"" + "'/\377\"&/\377\")1\377\")1\377%)1\377#'1\377#)1\377#)1\377#)0\377\"*2\377" + "\"'.\377\36#+\377\"&.\377Ydi\377\33\40%\377&.3\377$*2\377#*2\377#*1\377#" + "'/\377\"&.\377\"&.\377#'/\377\"(/\377#'/\377!&.\377!&0\377%*1\377$)0\377" + "$+1\377$*1\377#(0\377$(1\377$)0\377%*1\377#*2\377$)0\377$*1\377#(2\377\"" + "(1\377$)1\377$)1\377#)2\377$*1\377#)0\377$*1\377%*1\377$)1\377$)1\377#(1" + "\377$(0\377#)0\377\")1\377#)1\377#)2\377\")1\377$*1\377#*2\377\")2\377#*" + "2\377#'1\377$*1\377#*2\377$*1\377#'0\377%*1\377#*1\377$)1\377#)1\377$*2\377" + "\31\40)\377?@7\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377GH<\377!&*\377\36#-\377&-3\377$+4\377$)1\377\"(0\377#(0\377" + "$(1\377\"'.\377\"(/\377\"&/\377\"'0\377#(1\377%*1\377#*2\377$)0\377#)0\377" + "\"'1\377#)0\377#(0\377#'1\377$)0\377$)0\377\"'/\377#(1\377#(0\377#(0\377" + "\"'/\377\"'/\377$)1\377#(2\377#'/\377#(1\377#(0\377&,3\377\"'0\377$)1\377" + "#(1\377#(1\377#(0\377\"'/\377\"'/\377#'0\377\"&/\377$*1\377#(0\377!&0\377" + "\"(0\377\"(0\377\"'/\377%)2\377\"'1\377#)2\377#*2\377#)2\377!%,\377!'.\377" + "\"&.\377Ydi\377\32\37%\377&+3\377#(1\377\")0\377\"'.\377\"&.\377#(0\377\40" + "&/\377\"&.\377\"'/\377#'/\377#(/\377$)1\377$)0\377#)1\377\"'/\377#(/\377" + "%)0\377%)1\377%*1\377%+1\377%+1\377#(2\377$*1\377\"&1\377#(1\377$)1\377$" + ")0\377\")0\377$)1\377$*1\377$*1\377%*1\377#*2\377#*1\377$)1\377#(/\377#(" + "0\377#)1\377#*2\377!*1\377$)0\377$*1\377$*1\377#)2\377#)1\377#*2\377$)0\377" + "#)1\377#'1\377#)1\377#)2\377$)1\377$)1\377!'0\377$)0\377\37$,\377B@9\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377GH" + "=\377&-/\377#(/\377$*1\377#)1\377$)0\377#'1\377$)1\377#(0\377#'0\377#*1\377" + "\")1\377\")1\377\"'/\377$)0\377\40'.\377\"(1\377\"(0\377\"'1\377!&0\377\"" + "'1\377\"'2\377#(/\377#'/\377%*1\377\"&0\377\"(1\377$)1\377#'1\377\"'0\377" + "\40'/\377!'/\377!'/\377!'/\377#(0\377\"'/\377#(/\377#(/\377\"'/\377#)0\377" + "\"&/\377#'/\377#)0\377!)0\377$)1\377'-3\377#'/\377\"&0\377\"(0\377!'/\377" + "#(0\377%)1\377#(0\377#(0\377\"(2\377#(2\377\40&-\377\")0\377\"&.\377Ydi\377" + "\35\40'\377'-4\377%*1\377$*1\377\"&.\377!&.\377\"'1\377!'0\377\"&.\377$(" + "1\377$*2\377#(1\377$)0\377\"'.\377\"(/\377\"'1\377\"(2\377#*2\377#)2\377" + "#*2\377#)2\377$)1\377&+3\377#(0\377\"(0\377#(1\377\"(0\377$)0\377$)0\377" + "$)1\377$*1\377$*1\377#*2\377\")1\377$*1\377$*1\377%*1\377$(1\377\"(1\377" + "$)0\377#)1\377#'/\377$)1\377$*1\377#(0\377#)0\377\")2\377#(0\377\"'0\377" + "$(1\377$)1\377#*2\377#)1\377#)1\377!'.\377#(.\377\35%+\377>?7\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377II?\377(." + "2\377$)0\377!(/\377\"'0\377$(0\377#(2\377\"(0\377#'1\377!&/\377\"(/\377\"" + "*2\377#)1\377$)1\377#(0\377#)0\377#*1\377$)0\377#)1\377!(0\377#)1\377\"(" + "0\377\"&/\377\"&/\377#(/\377\40&/\377!&0\377\"(/\377!'0\377\"(1\377\"*2\377" + "#)1\377\"'1\377\"'/\377\"&1\377!&0\377#)1\377#(1\377\"(0\377\"'/\377\"&1" + "\377#'/\377!&/\377!'.\377\"(0\377#'0\377!&/\377#'0\377\"'/\377\40(/\377\"" + "&1\377#'/\377#'0\377#)2\377#(2\377%+1\377\"(.\377#(0\377\"&.\377Zek\377\30" + "\36&\377)39\377&,3\377%*1\377#*1\377#)1\377#*2\377!(/\377#)1\377%(0\377%" + ")1\377#'/\377\"(0\377#)1\377#'/\377$(1\377#)2\377#)1\377#)1\377$*1\377#(" + "1\377$(0\377#)1\377\"'0\377$*1\377\")1\377\"(0\377#*2\377$*1\377#*2\377$" + "*1\377%*1\377%+1\377%*2\377$*1\377$*1\377$*1\377#)2\377$)1\377$*1\377#*2" + "\377\")1\377#)0\377$)1\377!'.\377!(/\377\"(2\377$)0\377#)1\377$)0\377#(0" + "\377#(/\377\"'0\377$)1\377$+1\377\")1\377\35$-\377>?8\377MOD\377KLB\377K" + "LB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377FG<\377\36%'\377\"" + "*2\377$*1\377#'2\377#)1\377\"&/\377&-5\377$+3\377\"(1\377#(0\377#)1\377\"" + "&1\377!'0\377#)0\377$(0\377#)1\377#'2\377#'1\377\"(2\377\"&.\377#'/\377\"" + "'0\377\"&/\377\")2\377\")1\377!&0\377\"'/\377#)1\377$)1\377#(0\377\"(0\377" + "\"'/\377#)2\377\"'1\377\"'/\377#'/\377#'/\377\"'/\377#)0\377!&.\377\"&.\377" + "\"&/\377#)0\377#(0\377!&/\377\"'/\377#(0\377#'0\377\"'0\377\40&0\377!'0\377" + "!(0\377#(2\377#)1\377#)1\377!%-\377\"(0\377\"&.\377Zfk\377\31\35%\377%-4" + "\377%*1\377$)0\377%*1\377#(/\377#)1\377$)0\377#(0\377#(0\377#'/\377#(1\377" + "$)1\377#'2\377#)1\377#'/\377$(0\377$)2\377#)2\377%*1\377#(2\377$)1\377$'" + "/\377#(1\377#'/\377\"(0\377\"(2\377$*1\377\"*2\377$*1\377%*1\377$*0\377$" + "+2\377$*2\377#*2\377#*2\377%*1\377%)1\377\")1\377$*1\377$*1\377#'2\377$*" + "1\377$*1\377#)1\377#(0\377\"(0\377\"&.\377#'/\377#)0\377\"(0\377$)2\377$" + ")2\377#(0\377#(1\377#(/\377\35%*\377>?7\377NPE\377MPE\377LNC\377KLB\377K" + "LB\377KLB\377KLB\377KLB\377KLB\377KLB\377GH=\377\40',\377\36%.\377$)1\377" + "#(2\377#)2\377#'2\377\"*2\377#+2\377!&1\377!'/\377\")0\377\"(0\377\"'0\377" + "$)1\377#(1\377#'0\377#'2\377#)1\377#)0\377\"(0\377#'/\377\"'/\377\"(0\377" + "\")1\377#)0\377\")1\377\")1\377\"(0\377\"'0\377#(2\377!)2\377\"'1\377#'0" + "\377#(/\377\"&0\377#'0\377\"'/\377\"'1\377\"'/\377\"&.\377\"&.\377\"'/\377" + "\"&0\377\"'/\377\"'1\377\"(/\377!'0\377#(0\377#(/\377#'0\377#*1\377\"(0\377" + "\"(0\377#)1\377\"*2\377!(/\377#)0\377\"&.\377Ydi\377\33\36&\377%+1\377%-" + "1\377$)0\377%*1\377#(0\377$)1\377\"'2\377$)0\377$)0\377#'/\377#(0\377#(0" + "\377#(0\377$(1\377\"&1\377#'0\377#'/\377#(0\377$)2\377%*1\377#*2\377$)0\377" + "$*1\377$*1\377#*2\377$*1\377%*1\377$)1\377%*1\377%*1\377#*2\377#(0\377$)" + "1\377#*2\377#*2\377$*1\377$*1\377#*2\377\"*2\377%*1\377$*1\377%*1\377$*1" + "\377#)2\377#)1\377$)1\377\"'0\377\")2\377#*2\377#*1\377#'/\377\"(1\377#*" + "2\377\37%-\377\"*0\377\40$+\377HE;\377KLB\377KLB\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377FG<\377#(-\377#'/\377\"(/\377\37'0\377" + "\"'2\377!&/\377#(/\377#)2\377\")2\377\"*2\377\"(1\377\"'1\377$*1\377\"'/" + "\377!&.\377\"'/\377\"'0\377\"&/\377\"&/\377\"(0\377\"&.\377!(0\377\"'/\377" + "\"'1\377!&.\377\"'/\377\"'2\377\"'0\377!&/\377$)0\377\"'/\377#(/\377\"'/" + "\377\"&.\377#)1\377\")1\377#(/\377\"'/\377!(/\377#)3\377\"(0\377#'/\377\"" + "'/\377#(1\377\"&/\377\"&0\377#(1\377\"(1\377\"(2\377#*3\377#*3\377\"&/\377" + "\40'/\377#)2\377\"*2\377\"(0\377\40'.\377\"&.\377Ydi\377\32\37$\377%*1\377" + "%+1\377%*1\377#*2\377%*1\377%)1\377#)2\377%*1\377%*1\377$)0\377#'/\377%)" + "1\377$*1\377$(0\377\")2\377$*1\377%)1\377$(0\377#'/\377$)0\377\"'/\377%+" + "1\377$*1\377$*1\377#*2\377$)0\377#(/\377$(0\377#'/\377#)1\377#'2\377#)2\377" + "#)2\377#*2\377$)1\377%*1\377\"*2\377\"*2\377\"(2\377%*1\377#*2\377$*1\377" + "#*2\377#)2\377%*1\377%*1\377%+2\377#)2\377#)0\377$)0\377#'/\377\")1\377$" + ")0\377$)2\377#)2\377\32\40%\3779:3\377KLB\377KLB\377LKB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377EF:\377!)*\377%)1\377\40&.\377\"'/\377" + "\")1\377#'/\377#(1\377\"'1\377\"(1\377#)1\377\")0\377#(/\377\"'/\377\"'/" + "\377\"'0\377#(0\377$)0\377\"'2\377\"'1\377\"&.\377#(0\377\"(0\377\"&/\377" + "\"&0\377!&0\377#)1\377!'/\377\"'/\377\"&0\377#'0\377!)1\377\"&.\377\"(0\377" + "#(0\377#)1\377\"(0\377#'1\377\"'/\377#'/\377\"'0\377\"'2\377#'0\377#'/\377" + "#)1\377#(/\377\"&.\377!'.\377\"'/\377\"(0\377#'/\377#)1\377\"(1\377\"'1\377" + "#)0\377$*1\377#)1\377$*1\377\"&.\377Ydi\377\33\40%\377&.3\377$+2\377$*1\377" + "$*1\377%+3\377%+3\377$)0\377#+2\377%+1\377%+2\377$*1\377$*1\377%+1\377#)" + "2\377\")1\377$*1\377$+2\377$)1\377$)1\377$*1\377\")1\377\"'/\377#)0\377!" + "'0\377\")1\377#*2\377$)0\377\"&/\377%*1\377#)2\377$(1\377$)1\377#*2\377$" + ")0\377$*1\377$)0\377#*2\377$)1\377\")2\377%)1\377#(0\377$(1\377$)0\377$)" + "0\377#*2\377$*1\377#(1\377$(0\377#(/\377\"'.\377%*1\377$*1\377#)0\377#'0" + "\377%)0\377\40%,\377>?7\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB" + "\377KLB\377KLB\377KLB\377HI;\377\37%*\377\37$,\377%*1\377#'1\377#(0\377!" + "&1\377#(0\377#(0\377$(1\377#*1\377\"(0\377#(1\377\"'1\377\")1\377\"&.\377" + "\"(0\377\"&/\377#)1\377$(1\377\"'2\377\"'1\377#)2\377',3\377!(/\377\"'0\377" + "\"(1\377!'.\377!&.\377\"&0\377\")1\377$*1\377\"(2\377\"'/\377$)0\377\"'1" + "\377\"&/\377\"(0\377\"'0\377\"(0\377#)1\377\"&1\377#)0\377!&1\377\"'1\377" + "#(0\377\"(0\377\"&0\377\"(1\377#'0\377%)2\377\"(/\377#)1\377#*2\377#(0\377" + "#*2\377\")0\377!&.\377\"&.\377Ydi\377\32\36%\377&.2\377$+2\377%*1\377%*1" + "\377%*1\377#*3\377$+3\377$)3\377%*2\377$+2\377%*1\377$*2\377%+1\377%+2\377" + "$)1\377#*2\377%*1\377$)1\377$)1\377%*1\377$*1\377\"(1\377#*1\377\40)1\377" + "\"(1\377\"(1\377&,3\377#*1\377%*1\377#)2\377#(0\377\")1\377$*/\377\")0\377" + "#*2\377$)1\377%*1\377#*2\377\"(0\377%*1\377$)0\377\"&0\377#'/\377$*1\377" + "\"*2\377\")1\377#)1\377%+1\377#*1\377\")1\377$*3\377$*2\377$(1\377\"&-\377" + "$(0\377\35\"*\377=>6\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377GF;\377\40(+\377\"(/\377$)0\377#)2\377#(1\377\"'/\377" + "$(2\377#(0\377\"(1\377\"(0\377!&.\377\"(1\377\")1\377\"*2\377\")1\377\"(" + "1\377\"&1\377\"(1\377#)1\377\")2\377\"'/\377\"(0\377,/6\377\"(0\377\"&0\377" + "\"(0\377\"'/\377\"'0\377#(0\377\")1\377\"'/\377\"(0\377\"'/\377\"'1\377\"" + "&/\377\")1\377#(0\377\"&.\377\"&0\377\"(0\377\"&/\377\"'0\377\"'/\377!)1" + "\377\"'/\377\"'/\377\"(1\377!)1\377#)1\377#*1\377\"(2\377\"'/\377\")1\377" + "#'2\377#)2\377!'/\377\37$-\377\"&.\377Zdj\377\36!(\377%+1\377%*1\377%+1\377" + "&,3\377&-2\377%,2\377%+2\377%+3\377',3\377%+2\377%*2\377&,3\377%,1\377#*" + "2\377$(1\377$)1\377$)2\377%)1\377$)1\377$*1\377#*2\377#'0\377$)1\377\"'0" + "\377#)1\377\"(1\377#(0\377#(1\377#)1\377#)1\377\"(2\377\")2\377$*1\377$*" + "1\377#*2\377%*1\377$*1\377#*2\377$*1\377#)2\377#)2\377#)2\377$*1\377#(1\377" + "#(2\377\")2\377%*1\377$*1\377#(0\377\"(2\377\"'/\377#(0\377$)0\377$)0\377" + "$)1\377\36\"*\377;;5\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377HI;\377#(+\377$)0\377#)0\377$(1\377\"'0\377\"&.\377" + "\"(1\377\"(0\377\"'/\377$)1\377$)0\377$)0\377$(1\377\"(0\377\"(/\377\"'1" + "\377\"&0\377\"(0\377\40'.\377!(/\377#)0\377#(0\377#'/\377\"'/\377$)1\377" + "\"'/\377\"'0\377#'0\377#(2\377\"&1\377\"'1\377\"(2\377!'/\377!&0\377\"&/" + "\377\"'/\377\"&.\377#(/\377$)1\377!)0\377\"'/\377!'/\377\"&/\377!'/\377#" + "(/\377#)1\377$(0\377$(0\377#)1\377\"'/\377#(0\377#'1\377#(/\377#(1\377#*" + "2\377!(0\377\37$+\377\"&.\377Ydi\377\36!'\377%*3\377%+1\377%,3\377&-4\377" + "%+1\377&-5\377&+5\377&-3\377'.5\377',3\377%+2\377&,3\377$*2\377%*2\377$*" + "1\377$+2\377#*2\377%*1\377%+2\377$)1\377$)1\377$)1\377#*2\377$*1\377&+4\377" + "%*3\377$)1\377$)0\377$+2\377$*1\377$*1\377#)1\377%*1\377$*1\377$)1\377$*" + "1\377$*1\377#)1\377#)1\377$*1\377$*1\377%*1\377$)1\377$)1\377$*1\377#*2\377" + "$)1\377\")1\377#(0\377#*1\377\"(0\377$*1\377#*1\377$*0\377%+1\377\35!*\377" + "994\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KL" + "B\377GF<\377\"',\377\"'1\377$)1\377$(0\377\"(1\377\"&.\377\"'1\377\"'/\377" + "\"'/\377#)1\377#(0\377#(2\377\"'2\377\"'/\377#'1\377!'/\377\"'0\377\"&0\377" + "\"&.\377\")1\377#)1\377#)1\377$)1\377!(0\377#(2\377\")1\377\"&.\377$(0\377" + "\"(2\377\")1\377\"(2\377\"'/\377!'.\377#(1\377\"&0\377\"(1\377\40&.\377\"" + "&.\377\"&1\377\"'2\377\"'0\377\"'0\377#(0\377\"(1\377!'.\377#(1\377#)1\377" + "#(0\377\"(2\377\"(1\377$(1\377\"(2\377#(1\377\"(2\377\"(2\377\"(0\377!&." + "\377\"&.\377Zej\377\34!(\377%*2\377%+2\377&,5\377&-4\377%*2\377%+3\377&+" + "5\377&-5\377(.4\377&-3\377&-4\377%+2\377%*3\377%*3\377%*2\377%+4\377$*1\377" + "$*1\377$*1\377$)0\377%*3\377$)0\377$+2\377%+1\377#*2\377$*1\377#*2\377#)" + "2\377#)2\377#*2\377$*1\377%+2\377$*1\377$)0\377#)0\377#(0\377#)1\377#'0\377" + "%*1\377%+1\377$*1\377%*1\377$(0\377$(1\377$*2\377#)2\377#)2\377$*1\377$)" + "1\377%+1\377#)1\377#*1\377$+2\377\36$+\377\")1\377\37$+\377>?7\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377FE;\377\"" + "&*\377\40'/\377#)0\377#(/\377#(/\377#'/\377#(1\377\")1\377\"(0\377\"(/\377" + "#(2\377\")2\377#(0\377#(0\377#*2\377#*1\377#(/\377\")1\377\"'1\377#(1\377" + "#(1\377\"'0\377#'/\377$(1\377%)1\377$(0\377#'/\377#(0\377\"'1\377#(0\377" + "#)2\377#(0\377\")0\377\"(1\377#(1\377\"&.\377\"'0\377\"&0\377#(0\377!'/\377" + "\"(1\377#'1\377$*3\377$(1\377\"(0\377$*1\377\"'/\377\"(0\377\"'0\377#)1\377" + "\")1\377!)1\377&,4\377\"'0\377\"(1\377#(0\377!%-\377\"&.\377Ydi\377\36!'" + "\377&,4\377&,4\377',3\377(.6\377'-6\377(-5\377&-5\377'-6\377&-5\377&.3\377" + "&.5\377&,3\377&-5\377%+3\377$+3\377(.5\377&,2\377%,2\377$(3\377%*1\377$)" + "0\377#(2\377%,3\377#*2\377#*2\377#*2\377#*2\377$*1\377%*1\377%+3\377%*1\377" + "#)0\377%+1\377%*1\377#(1\377$)1\377#*2\377$(0\377$)0\377#)0\377#*2\377%*" + "1\377$*1\377$*1\377#)1\377\")1\377$+2\377#*2\377#(2\377%*1\377%*1\377#(/" + "\377$)0\377$)0\377$*1\377\37$*\377::4\377KLB\377KLB\377KLB\377KLB\377KLB" + "\377KLB\377KLB\377LKB\377KLB\377KLB\377EE;\377\"'*\377$+2\377$)1\377\"(0" + "\377\"'/\377#(0\377$)1\377\"(0\377\"(1\377#(1\377$)1\377#*2\377\"(0\377\"" + "'/\377#*1\377\")1\377\"'0\377\")1\377\40)0\377\"'/\377#(0\377%*3\377\"'/" + "\377\"&/\377\"'/\377#'/\377\"'/\377\")1\377\"&0\377#(0\377\"'1\377\")2\377" + "\"'0\377\"'0\377\"'1\377\"&/\377!'0\377\"'0\377\"(0\377\"'1\377#'1\377$)" + "1\377\"(0\377\"'1\377\"&/\377$)1\377#)0\377\")1\377\"&/\377\"'1\377#*2\377" + "\"(2\377#(2\377#)1\377#)1\377#(0\377#'/\377\"&.\377Ydi\377\36!'\377&-3\377" + "%*2\377%+1\377'-5\377'-5\377(.6\377'.6\377&.5\377(.5\377'-5\377%,3\377%-" + "4\377&+5\377&+5\377%+2\377%,4\377%+2\377&+2\377&+3\377&+2\377%+1\377$+1\377" + "#)1\377$)1\377%*3\377$*1\377#*1\377#)1\377$)1\377$+2\377%*2\377%*4\377%*" + "3\377%*1\377#*2\377#(2\377$)1\377#)1\377#*2\377#)2\377#*2\377$*1\377\"*2" + "\377#)1\377#*1\377#*2\377#)2\377$(0\377#)2\377$*1\377%*1\377%+1\377%+1\377" + "$+3\377$)1\377\35\"+\377<<6\377LLB\377KLB\377KLB\377KLB\377KLB\377LLB\377" + "KLB\377KLB\377KLB\377KLB\377GF=\377\37'*\377\36&.\377#)2\377\")1\377#)0\377" + "#)2\377\")0\377$)0\377\"(0\377!(0\377#(1\377\"(2\377#*2\377#*1\377\"'/\377" + "\")1\377\"(0\377#(0\377#(0\377\")1\377\"(1\377#(2\377$)1\377#'1\377\"'/\377" + "#)2\377#'0\377\"(0\377$)1\377\"'0\377#)1\377#*2\377\"(1\377#'/\377#'/\377" + "#'/\377#(0\377#'/\377\")1\377\"&/\377\"&0\377\"&1\377\")1\377#(0\377#'/\377" + "\"(1\377\"(1\377#(1\377\"(1\377#'/\377#(0\377#)2\377\"(0\377#'1\377#)2\377" + "#)0\377#(/\377\"&.\377Ydi\377\35!&\377&.4\377&.2\377&-3\377%,3\377&-3\377" + "&.4\377&.3\377&.4\377&+6\377&-6\377&-6\377'-4\377&-3\377&-3\377&,4\377%," + "4\377$)0\377%*2\377%,3\377%*1\377%,3\377%*1\377%*1\377\"*2\377$*1\377%*1" + "\377$)1\377#)2\377%,4\377#*2\377$*1\377$)1\377%)1\377%+1\377\")1\377$*1\377" + "%+1\377%-3\377%,3\377%*1\377$*1\377$+2\377%+2\377#*2\377#*2\377#*2\377%+" + "1\377#+2\377%*1\377#)1\377$)2\377$)1\377$)0\377#*3\377%*2\377$(.\377@@8\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377HG" + ":\377\"')\377\40'/\377%*2\377\"(1\377#(1\377\")1\377#)0\377\"*2\377\"'1\377" + "\"&0\377$)1\377#'2\377\40'0\377!&.\377\"'/\377!(/\377!'/\377\"*2\377\"(0" + "\377\"'0\377\"'1\377\"&.\377#(1\377#)1\377\"'/\377\40*1\377#)1\377#(0\377" + "\"'0\377\40'0\377\"(2\377\"'0\377\")2\377#(0\377\"'0\377\"&.\377#'/\377\"" + "'1\377\"&/\377\"&0\377!&0\377\")1\377\"'1\377\"(0\377$)1\377#)0\377\"(0\377" + "\"(1\377\40(/\377\"'0\377\"(0\377\"&/\377\"'/\377#*1\377!*1\377\"(/\377\40" + "&.\377\"&.\377Ydi\377\35!&\377%+2\377&,4\377&.5\377'+6\377%*2\377(/4\377" + "&,4\377'-6\377'-6\377&.5\377&.4\377'.6\377'.4\377'.3\377&-4\377%+2\377&+" + "4\377&-3\377%+1\377$*1\377$*1\377#*2\377$*1\377#)1\377$*2\377%*3\377$(1\377" + "%*1\377$*2\377$+2\377#(0\377#)0\377$)1\377#)2\377$)1\377#(/\377$*0\377%*" + "1\377%+2\377%*1\377%*1\377%+2\377%+4\377\"*2\377#(0\377$*1\377$*1\377#(2" + "\377#)2\377#(0\377$*1\377&,5\377%+1\377#*2\377%,3\377!$.\377==7\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377FF=\377#(" + ",\377$*3\377$*3\377\"(1\377\"&0\377#)1\377\"'/\377!'/\377#(1\377$)2\377#" + "'/\377#(2\377!&1\377\40'.\377#)0\377\"'1\377\"(1\377\")1\377\"'0\377\"'2" + "\377\"(0\377\"&.\377\")0\377%*2\377!(0\377!'/\377%*1\377#'1\377#'1\377\"" + "'1\377#(1\377#(0\377!'/\377$)1\377\"'2\377\"(0\377#'/\377\"'/\377#'0\377" + "\"'.\377!)1\377#*2\377\"'/\377\"&.\377#(0\377\"(0\377#'/\377\"'/\377!'.\377" + "\"(0\377\40'/\377!&.\377\40'/\377#)0\377$*2\377%)2\377\"&0\377\"&.\377Ze" + "m\377\34!)\377&-3\377%+2\377',4\377(-5\377&+3\377&-2\377&.3\377',6\377'." + "6\377&.5\377',5\377%-5\377&,5\377&-6\377&-2\377&,3\377%+3\377%*1\377$*1\377" + "%+2\377$*2\377$)2\377%*1\377%,1\377%*1\377$)1\377%+1\377%)1\377%+1\377#*" + "2\377%,1\377%+1\377#)1\377#)1\377#'0\377$*1\377$)0\377$*1\377%*1\377%*1\377" + "#*2\377#)2\377#(2\377%*1\377$*1\377$*1\377%*1\377%*1\377%*4\377$*2\377$*" + "2\377#)2\377$*2\377$*1\377%+2\377#&/\377??8\377NLC\377KLB\377KLB\377KLB\377" + "LKB\377KLB\377KLB\377KLB\377KLB\377KLB\377EF;\377\36%(\377$)3\377%*1\377" + "#)1\377#'/\377\"'/\377#)1\377#)1\377#)2\377#)2\377\")1\377#*2\377\"'1\377" + "\"&0\377#(0\377\40(0\377$)1\377\"(0\377\"&.\377\"'/\377\"'0\377!'0\377\"" + "&/\377\"&0\377$)0\377\40&.\377\"(1\377\"&0\377\")2\377#)1\377#'0\377!'0\377" + "\"'/\377#&0\377\")1\377$)0\377\"(1\377!'/\377\"&.\377\"'0\377\"&.\377#'0" + "\377$+1\377\"'/\377#(0\377\"'/\377\"'0\377\"(2\377\"'0\377!%.\377\"&0\377" + "\40&/\377#'1\377#)1\377\"(1\377\"'1\377#%.\377\"&.\377Yej\377\35!(\377%*" + "3\377&*4\377&+6\377'.6\377(,6\377&+5\377&.6\377&.6\377&,6\377'.5\377'.6\377" + "'-5\377&+3\377(-6\377&,4\377&-3\377%*1\377%*1\377%-2\377$+3\377$*2\377%+" + "1\377#*2\377$+2\377%+1\377$*1\377%*1\377$(0\377%*1\377%*1\377$*1\377$)1\377" + "$)1\377%*1\377%*1\377$*1\377$)1\377#*1\377$*1\377%*1\377$*1\377$)1\377#*" + "2\377%*1\377#+3\377#+3\377$+2\377$+1\377$)1\377$*2\377$*2\377%*1\377$+2\377" + "#*2\377$+1\377\33\40%\377<=4\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377" + "KLB\377KLB\377KLB\377KLB\377JG=\377\"&(\377\34\"+\377#)2\377#'1\377$)0\377" + "\"(1\377$)1\377\"&0\377!&/\377\"'1\377#)1\377#*2\377$)1\377\"'/\377!(/\377" + "\"(1\377$)1\377#'/\377$)0\377$)1\377$*1\377$)1\377\"'0\377\"&1\377#'0\377" + "\"&0\377#(0\377\"&1\377\"'0\377#'1\377$)3\377\"'/\377#(/\377#'/\377\"'1\377" + "#'/\377\"&1\377\40&.\377\"(0\377\"'/\377!'.\377%)1\377\"(/\377\")1\377!(" + "1\377!(/\377\"&0\377\"&0\377\"'/\377!'/\377\"&1\377\"&0\377#'/\377#(1\377" + "\"'/\377#*1\377\40$-\377\"&.\377Ydi\377\35!&\377&,3\377&,4\377'-6\377'.4" + "\377'-5\377(.6\377(.6\377&,5\377&+4\377&-5\377&,6\377&.5\377&*5\377%+2\377" + "%*3\377%,2\377%*2\377%*1\377$+3\377%,2\377%+2\377#)2\377#)2\377%*2\377#*" + "1\377$)0\377#(0\377$*1\377#(0\377#(2\377%*1\377$)0\377$*3\377#*2\377#)3\377" + "%*3\377$*1\377$*1\377#*2\377$*1\377$*1\377%+1\377%*1\377$*1\377#*2\377$*" + "1\377%)1\377$*1\377%+1\377$,3\377$*1\377$*1\377%*1\377#*1\377$*1\377!(/\377" + "AC:\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377LKB\377KLB\377KLB\377LJ" + "B\377ROB\377(.1\377\")1\377$(2\377\"'/\377\")1\377\")1\377#(2\377$*2\377" + "\"(1\377$,4\377#'0\377#(1\377\"&0\377\"&2\377\"(1\377#(0\377\"&/\377\"(0" + "\377\"'/\377\"(0\377\"(2\377\"(1\377\"(0\377#(1\377\"&/\377\"&0\377\"'0\377" + "\"'0\377\"'1\377!&.\377\"'/\377$)1\377\"'0\377#*2\377#'1\377\"'/\377\"&/" + "\377!&.\377#(1\377\")1\377\"&/\377#'/\377\"'0\377$)1\377!'0\377\40&/\377" + "!'/\377\"&1\377!&.\377\"'0\377$)0\377\"'1\377\"&0\377!'/\377\"(/\377#(/\377" + "#(0\377\"&.\377Ydi\377\35!'\377&-4\377&+5\377',4\377'.4\377'-5\377'.5\377" + ").5\377',7\377(-5\377&-5\377&+5\377&.6\377&-6\377&,4\377%+4\377%+2\377%*" + "2\377$*2\377%*2\377%*1\377$,3\377$+2\377$*1\377%*1\377$,1\377%-2\377%*1\377" + "$*1\377$*1\377$*1\377#(0\377$*1\377$*3\377$*2\377$)2\377%*2\377%*1\377#*" + "2\377#*2\377$*1\377%*1\377%*1\377#*2\377$*3\377%,2\377%+1\377#)0\377$)0\377" + "$+2\377%*1\377%+1\377$*1\377%,2\377\"'.\377$)0\377!(1\377BA:\377LLB\377K" + "LB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KKB\377GD;\377#(." + "\377$*3\377\")1\377\40&/\377#)1\377\"'0\377#)1\377$(0\377\")1\377#*1\377" + "#)0\377#)1\377$)0\377\"(1\377\"*2\377\"(0\377\"(/\377\"'/\377\"'/\377\"*" + "1\377\"(0\377\"(1\377\"(0\377\"(0\377\"(1\377#(/\377\"&/\377\"(1\377#)1\377" + "!'/\377\"&/\377!(/\377\"'/\377\"'/\377$(0\377\"'/\377\"&0\377!&/\377\40'" + "/\377\"(2\377\"&0\377$)0\377#(1\377\"'/\377\"&/\377\"&/\377#(0\377#)2\377" + "#)0\377\"&1\377\40&.\377\40&/\377\"&.\377\"'/\377\40&.\377\"'/\377\"&0\377" + "\"&.\377Ydi\377\35!'\377&,3\377&+4\377&,6\377&-6\377&+4\377&-6\377&-6\377" + "',4\377'.6\377%-4\377%+2\377&-4\377&*3\377&+3\377%,3\377$+2\377%*3\377%+" + "1\377%+1\377%+2\377$+2\377%*1\377%*1\377#(/\377$)1\377$*3\377%*2\377%*4\377" + "$*1\377#)1\377#)1\377$*1\377#*2\377$*1\377%*1\377#(1\377#)1\377$+2\377$)" + "2\377\")1\377#*1\377$+1\377#)0\377#)2\377#*2\377#)2\377$)1\377\")1\377#*" + "2\377$*1\377#*2\377#*2\377&+2\377$)0\377#*2\377\37'1\377.6;\377SOB\377KL" + "B\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377KLB\377NLA\377=?>\377\36'" + "0\377$)0\377\"&.\377\")1\377#(0\377#(0\377\40&.\377!&.\377\"&/\377\"&.\377" + "\"&.\377\"&.\377#(1\377#(1\377#(0\377\"(0\377!&.\377#(0\377\"(0\377#'0\377" + "!(0\377\"'/\377!)0\377!&0\377\"'0\377\"&0\377\"'2\377\"'/\377\"&/\377!&." + "\377\"(0\377!(0\377\40&-\377\")1\377#'0\377#(2\377\")0\377\40'.\377!&.\377" + "#(1\377\"&.\377\"'1\377\"(2\377\"'2\377\"'/\377\40&.\377\"'0\377\"(0\377" + "!'0\377\"&1\377\"'2\377\"&/\377\"&/\377#'/\377#'/\377!&.\377\"%-\377\"&." + "\377Ydi\377\36!&\377%*2\377&+5\377'-4\377&.5\377&-5\377%+3\377&+5\377&-6" + "\377&+5\377&,2\377%+3\377&,5\377$*2\377$*2\377%*2\377%*1\377$*2\377%*3\377" + "#*2\377$*2\377#*2\377%*3\377#*2\377$*1\377#*2\377#)2\377#*2\377$)2\377$*" + "2\377#*1\377#)1\377$)1\377#*2\377\"*2\377#*2\377#)2\377#*1\377#)0\377%,3" + "\377\")1\377$)1\377%*1\377#)1\377#(2\377#'1\377%)1\377$)0\377$)1\377%+1\377" + "#)2\377\"'1\377#*1\377#*1\377\")1\377$)4\377$*1\377\40+9\377GKP\377NMC\377" + "KLB\377KLB\377KLB\377KLB\377KLB\377JKC\377HID\377OQQ\377#-:\377\"'0\377\"" + "&0\377$(0\377!&1\377\"'1\377!&.\377\37&-\377!&.\377\"&/\377\"&0\377\"&.\377" + "\"(0\377\"(0\377#(0\377!&.\377\"'1\377\"'1\377\"'1\377\40(0\377\"'0\377\"" + "'/\377\"'0\377!&/\377#(0\377\")1\377\"&0\377\40(0\377\"&.\377\"&/\377\"&" + "0\377\"&.\377!&0\377\"&/\377$)0\377#'/\377\"&/\377\"&0\377\"(0\377\40'.\377" + "#)0\377\"'/\377#)1\377\"'0\377\"&/\377\"&.\377!&0\377\"(/\377\"&/\377\40" + "&/\377!&.\377!'/\377\40&.\377\40&.\377\40'.\377!%-\377\40#+\377\36#+\377" + "\"&.\377Ydi\377\34\40&\377%*1\377%*1\377%*2\377%,2\377&+5\377%+3\377%*3\377" + "&-4\377&+2\377'+4\377&,5\377%+2\377%)1\377$)1\377#*2\377%*1\377$*1\377%*" + "1\377$*1\377$*1\377%+2\377$*1\377#)0\377%*1\377%*1\377$)1\377%*1\377$*1\377" + "%*1\377#)2\377#)2\377#(2\377$*3\377\")2\377$*1\377%)2\377#(0\377%*1\377%" + "*1\377\"(0\377\"(1\377$)0\377#)1\377$'0\377#'0\377#'0\377\"&.\377\"&.\377" + "#'/\377#(1\377#(1\377!(0\377$(0\377!)0\377\"*2\377\")1\377#'/\377-7C\377" + "[aa\377SQD\377JJ@\377KLB\377KLB\377LKA\377QPC\377ggc\3774?O\377\36$,\377" + "\"'0\377!&.\377!'.\377\40&.\377\40&-\377\40&-\377!&.\377\40&-\377\40'/\377" + "!&.\377#'/\377#(/\377\"&/\377\"&.\377!&/\377\"'1\377\"'/\377!(0\377\"(1\377" + "!'0\377!(0\377#'0\377#(1\377\"'/\377!(1\377!'.\377!'/\377#'0\377#'/\377\"" + "&/\377!&.\377!&.\377!&.\377\"&.\377\"&1\377\"&.\377\"&.\377\"&.\377\"&.\377" + "!'0\377!&.\377\")0\377\"&.\377#'/\377!'.\377\40&-\377\"%-\377\"&.\377!&." + "\377!&.\377\"'/\377\"&.\377\"&.\377\37%-\377\40$,\377\37#*\377\36\")\377" + "\"&.\377Ydi\377\32\36$\377%*1\377%*1\377%+1\377%+1\377%*2\377%+2\377%+2\377" + "$*2\377%*1\377%,2\377#*2\377%*1\377#)1\377#(1\377#)1\377\"'/\377%*1\377$" + ")1\377#(1\377$)1\377$*1\377$(0\377#(0\377$)1\377$)1\377#*1\377!'.\377#(/" + "\377$(0\377\"(0\377\"(0\377\")1\377\"&.\377#(0\377#(0\377$)0\377\"'/\377" + "\"&.\377#(/\377!&.\377!&0\377!&.\377\"&0\377\"&/\377\"(/\377!&.\377!(0\377" + "!&.\377\40&.\377!&.\377#'/\377\"&.\377#(/\377!'.\377!'.\377!(0\377\"&.\377" + "\34!(\377%0=\377Qan\377jkk\377fbV\377db\\\377hf^\377UZ_\377.5?\377\32\36" + "(\377\40'/\377\40&.\377\37&-\377!&.\377!&/\377!%.\377\40&-\377\36$,\377\36" + "%-\377\36&-\377!'.\377\"'.\377\"'.\377\40&/\377\37&.\377\40&-\377\37%-\377" + "\40%-\377!&.\377!&.\377\"(/\377\"&.\377\")0\377!'.\377\37&.\377\40%.\377" + "!&.\377\"&0\377\"&.\377\"&.\377!&.\377\37&-\377\37&-\377\36&-\377\"&/\377" + "!&.\377\40&.\377!&.\377!&.\377\"'/\377#)0\377\"'.\377\40&.\377\40&.\377\"" + "&.\377!'.\377!$-\377\"%-\377\40&.\377\40&-\377!&-\377\37&-\377!$,\377\40" + "$,\377\40'.\377\"&0\377\40$-\377!%-\377\"&.\377Ydi\377\32\35&\377$*1\377" + "%-2\377%+2\377%+1\377$+1\377%+1\377%+1\377$)0\377$(0\377\"(0\377!(/\377#" + "(/\377\"'/\377\40&-\377!&.\377!&.\377!(/\377\"&.\377\"&-\377!&.\377!'.\377" + "\"&/\377!&.\377\"&.\377!&/\377!&.\377!&,\377\40&.\377\40&-\377\"'/\377\"" + "'/\377!'/\377\40&-\377\37'/\377!&0\377\"&.\377\"&.\377\40%-\377\37%-\377" + "\36&-\377\37%-\377\37&,\377\40%,\377\37%,\377!&+\377\40&.\377\37&-\377\36" + "$,\377\35#+\377\34$,\377!(/\377\40&.\377\40(-\377\40&.\377!&.\377\37%,\377" + "\40%-\377\36%,\377\35$+\377\26\33#\377\35&5\377*08\377',5\377\36%/\377\21" + "\32&\377\31\40(\377\35$+\377\36$,\377\37%,\377\40$,\377\40&-\377\37$,\377" + "\36$-\377\37#*\377\34#+\377\22\33#\377\33\",\377!&.\377\36$+\377\37%-\377" + "\37%,\377\36#+\377\36#+\377\37$,\377\37$,\377\37&-\377\37&-\377\37&-\377" + "!&.\377\37&-\377\37&-\377!%.\377!$-\377\40%-\377!%-\377!%-\377!&.\377\37" + "&-\377!&.\377\37&-\377\37&-\377!&/\377\40&.\377\40&-\377\40&.\377\40&-\377" + "\40&.\377\"&.\377\"'/\377!&.\377!&.\377\"&.\377#'-\377\37&-\377\37$,\377" + "\36&-\377\36&-\377!%,\377\36&-\377\40$+\377\36#+\377%,1\377!'.\377\37#,\377" + "\40$.\377\"&.\377NW[\317\21\27\37\377#)1\377&+3\377%+3\377%*2\377%+2\377" + "#(0\377\"'/\377\"'/\377!&.\377!&.\377!%-\377!%-\377\36&-\377\40%.\377\40" + "&-\377\36%,\377\37%-\377\37%,\377\37%,\377\40%-\377!%-\377\40%+\377\40%-" + "\377\37%,\377\37%-\377!%.\377\40$*\377\35#+\377\36$,\377\36\"*\377\35#*\377" + "\36#+\377\37\"+\377!$-\377\37%-\377\35$+\377\36$+\377\34$,\377\33!)\377\34" + "!)\377\35!)\377\35!(\377\35\")\377\36#*\377\36\")\377\34\40(\377\24\33\"" + "\377\14\23\33\377'()\377\36\37#\377\21\26\37\377\31\36'\377\34\"(\377\32" + "\40)\377\36$,\377\34!)\377\35#*\377\33\40(\377\35\"+\377\35#+\377\31\40)" + "\377\33\"+\377\30\37)\377\32\37'\377\31\37(\377\33\40(\377\30\36'\377\32" + "\37(\377\31\37'\377\33\40)\377\33\"*\377\32\40*\377\30\35&\377\21\27\37\377" + "\23\24\26\377)*-\325\20\21\25\371\23\30\36\377\24\36$\377\30\37&\377\30\37" + "&\377\30\34%\377\27\34\"\377\30\34$\377\30\34#\377\32\35!\377\32\34!\377" + "\27\33\40\377\26\33\40\377\27\35\40\377\30\33!\377\27\33\40\377\30\35#\377" + "\30\35$\377\32\36#\377\30\33\"\377\27\36#\377\30\34#\377\27\33\"\377\30\34" + "\"\377\30\34#\377\27\35#\377\31\34\"\377\30\35#\377\30\35#\377\27\33\"\377" + "\31\34!\377\30\34#\377\30\33!\377\30\33\"\377\30\35\"\377\27\32!\377\30\33" + "\"\377\26\33\40\377\26\33\40\377\26\35!\377\26\32\37\377\26\33\40\377\26" + "\33\40\377\26\33\40\377\27\33\40\377\26\32\40\377\25\32\37\377\15\21\26\377" + "\4\10\15\377\24\27\33\317\1\1\1\40\2\5\7\321\23\26\34\377\"&/\377!&/\377" + "!%-\377\40$-\377\37$,\377\36#+\377\37$,\377\36#+\377\36#+\377\36\"*\377\36" + "#+\377\36#+\377\36#+\377\36#+\377\36\"*\377\36#*\377\36\"*\377\36\"*\377" + "\36\"+\377\36\"*\377\36\"*\377\36\"*\377\35\"*\377\36\"*\377\36\"*\377\36" + "\"*\377\35!)\377\36\"*\377\36\"*\377\35!)\377\36\"*\377\36\"*\377\36\"*\377" + "\35\"*\377\35\"*\377\22\25\31\377\11\14\17\377\12\13\16\377\11\13\16\377" + "\12\14\16\377\12\14\17\377\13\14\16\377\13\14\17\377\13\14\16\377\11\12\15" + "\377\3\7\12\377>>?\362{}{ZPNNu\21\21\26\377\5\7\12\377\10\11\13\377\10\12" + "\15\377\11\14\17\377\11\13\17\377\12\13\16\377\10\12\15\377\10\12\16\377" + "\12\14\17\377\11\14\20\377\11\14\21\377\11\14\20\377\11\13\16\377\10\12\15" + "\377\10\12\15\377\6\11\14\377\7\12\15\377\6\11\14\377\10\12\15\377\10\12" + "\15\377\6\11\14\377\4\6\12\377\1\3\4\377(((u\376\376\372(\27\30\32\201\1" + "\1\1\377\2\5\6\377\4\5\10\377\5\6\10\377\4\3\7\377\3\5\6\377\4\3\6\377\4" + "\2\4\377\3\3\1\377\3\2\1\377\3\1\1\377\2\1\1\377\3\3\1\377\1\1\1\377\1\1" + "\1\377\1\1\1\377\1\2\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1" + "\377\1\1\1\377\1\1\1\377\1\1\1\377\2\2\1\377\1\1\1\377\1\1\1\377\1\1\1\377" + "\2\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1" + "\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1\1\377\1\1" + "\1\377\1\1\1\377\1\1\1\377\1\1\1\377\2\2\4\321\1\1\1\40" +}; diff --git a/apple2/src/firmware.h b/apple2/src/firmware.h new file mode 100755 index 0000000..db3e196 --- /dev/null +++ b/apple2/src/firmware.h @@ -0,0 +1,218 @@ +// +// This file was automagically generated by bin2c (by James L. Hammons) +// + +char diskROM[0x100] = { // Loads at $C600 (slot 6) + 0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C, + 0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10, + 0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD, + 0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0, + 0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8, 0xFC, 0x88, + 0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C, + 0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3, + 0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0, + 0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD, + 0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40, + 0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59, + 0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, + 0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, + 0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00, + 0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5, + 0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +char hdROM[0x100] = { // Loads at $C700 (slot 7) + 0xA9, 0x20, 0xA9, 0x00, 0xA9, 0x03, 0xA9, 0x3C, 0xA9, 0x00, 0x8D, 0xF2, 0xC0, 0xA9, 0x70, 0x8D, + 0xF3, 0xC0, 0xAD, 0xF0, 0xC0, 0x48, 0xAD, 0xF1, 0xC0, 0x18, 0xC9, 0x01, 0xD0, 0x01, 0x38, 0x68, + 0x90, 0x03, 0x4C, 0x00, 0xC6, 0xA9, 0x70, 0x85, 0x43, 0xA9, 0x00, 0x85, 0x44, 0x85, 0x46, 0x85, + 0x47, 0xA9, 0x08, 0x85, 0x45, 0xA9, 0x01, 0x85, 0x42, 0x20, 0x46, 0xC7, 0x90, 0x03, 0x4C, 0x00, + 0xC6, 0xA2, 0x70, 0x4C, 0x01, 0x08, 0x18, 0xA5, 0x42, 0x8D, 0xF2, 0xC0, 0xA5, 0x43, 0x8D, 0xF3, + 0xC0, 0xA5, 0x44, 0x8D, 0xF4, 0xC0, 0xA5, 0x45, 0x8D, 0xF5, 0xC0, 0xA5, 0x46, 0x8D, 0xF6, 0xC0, + 0xA5, 0x47, 0x8D, 0xF7, 0xC0, 0xAd, 0xF0, 0xC0, 0x48, 0xA5, 0x42, 0xC9, 0x01, 0xD0, 0x03, 0x20, + 0x7D, 0xC7, 0xAD, 0xF1, 0xC0, 0x18, 0xC9, 0x01, 0xD0, 0x01, 0x38, 0x68, 0x60, 0x98, 0x48, 0xA0, + 0x00, 0xAD, 0xF8, 0xC0, 0x91, 0x44, 0xC8, 0xD0, 0xF8, 0xE6, 0x45, 0xA0, 0x00, 0xAD, 0xF8, 0xC0, + 0x91, 0x44, 0xC8, 0xD0, 0xF8, 0x68, 0xA8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 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, 0x7F, 0xD7, 0x46 +}; + +// Various firmware from the IIe ROM file... + +//Not sure what the heck this is... +char slot2e[0x100] = { + 0x2C, 0x58, 0xFF, 0x70, 0x0C, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x06, 0x01, 0x31, 0x8E, 0x94, 0x97, + 0x9A, 0x85, 0x27, 0x86, 0x35, 0x8A, 0x48, 0x98, 0x48, 0x08, 0x78, 0x8D, 0xFF, 0xCF, 0x20, 0x58, + 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x8D, 0xF8, 0x07, 0xAA, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x26, 0xA8, + 0x28, 0x50, 0x29, 0x1E, 0x38, 0x05, 0x5E, 0x38, 0x05, 0xB9, 0x8A, 0xC0, 0x29, 0x1F, 0xD0, 0x05, + 0xA9, 0xEF, 0x20, 0x05, 0xC8, 0xE4, 0x37, 0xD0, 0x0B, 0xA9, 0x07, 0xC5, 0x36, 0xF0, 0x05, 0x85, + 0x36, 0x18, 0x90, 0x08, 0xE4, 0x39, 0xD0, 0xF9, 0xA9, 0x05, 0x85, 0x38, 0xBD, 0x38, 0x07, 0x29, + 0x02, 0x08, 0x90, 0x03, 0x4C, 0xBF, 0xC8, 0xBD, 0xB8, 0x04, 0x48, 0x0A, 0x10, 0x0E, 0xA6, 0x35, + 0xA5, 0x27, 0x09, 0x20, 0x9D, 0x00, 0x02, 0x85, 0x27, 0xAE, 0xF8, 0x07, 0x68, 0x29, 0xBF, 0x9D, + 0xB8, 0x04, 0x28, 0xF0, 0x06, 0x20, 0x63, 0xCB, 0x4C, 0xB5, 0xC8, 0x4C, 0xFC, 0xC8, 0x20, 0x00, + 0xC8, 0xA2, 0x00, 0x60, 0x4C, 0x9B, 0xC8, 0x4C, 0xAA, 0xC9, 0x4A, 0x20, 0x9B, 0xC9, 0xB0, 0x08, + 0x20, 0xF5, 0xCA, 0xF0, 0x06, 0x18, 0x90, 0x03, 0x20, 0xD2, 0xCA, 0xBD, 0xB8, 0x05, 0xAA, 0x60, + 0xA2, 0x03, 0xB5, 0x36, 0x48, 0xCA, 0x10, 0xFA, 0xAE, 0xF8, 0x07, 0xBD, 0x38, 0x06, 0x85, 0x36, + 0xBD, 0xB8, 0x04, 0x29, 0x38, 0x4A, 0x4A, 0x4A, 0x09, 0xC0, 0x85, 0x37, 0x8A, 0x48, 0xA5, 0x27, + 0x48, 0x09, 0x80, 0x20, 0xED, 0xFD, 0x68, 0x85, 0x27, 0x68, 0x8D, 0xF8, 0x07, 0xAA, 0x0A, 0x0A, + 0x0A, 0x0A, 0x85, 0x26, 0x8D, 0xFF, 0xCF, 0xA5, 0x36, 0x9D, 0x38, 0x06, 0xA2, 0x00, 0x68, 0x95, + 0x36, 0xE8, 0xE0, 0x04, 0x90, 0xF8, 0xAE, 0xF8, 0x07, 0x60, 0xC1, 0xD0, 0xD0, 0xCC, 0xC5, 0x08 +}; + +//This looks identical to diskROM +char slot6e[0x100] = { + 0xA2, 0x20, 0xA0, 0x00, 0xA2, 0x03, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C, + 0x49, 0xFF, 0x29, 0x7E, 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10, + 0xE5, 0x20, 0x58, 0xFF, 0xBA, 0xBD, 0x00, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x85, 0x2B, 0xAA, 0xBD, + 0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0xBD, 0x8A, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, 0x80, 0xC0, + 0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8, 0xFC, 0x88, + 0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0xA9, 0x08, 0x85, 0x27, 0x18, 0x08, 0xBD, 0x8C, + 0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF7, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3, + 0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xDF, 0x49, 0xAD, 0xF0, + 0x25, 0xD0, 0xD9, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD, + 0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xBE, 0xA5, 0x40, + 0xC5, 0x41, 0xD0, 0xB8, 0xB0, 0xB7, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59, + 0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, + 0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, + 0x59, 0xD6, 0x02, 0xD0, 0x87, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00, + 0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5, + 0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x2B, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// Various firmware from the IIc + +char slot1[0x100] = { + 0x2C, 0x89, 0xC1, 0x70, 0x0C, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x06, 0x01, 0x31, 0x9E, 0xA8, 0xB4, + 0xBB, 0xDA, 0xA2, 0xC1, 0x4C, 0x1C, 0xC2, 0x90, 0x03, 0x4C, 0xE5, 0xC7, 0x0A, 0x7A, 0x5A, 0xBD, + 0xB8, 0x04, 0xF0, 0x42, 0xA5, 0x24, 0xB0, 0x1C, 0xDD, 0xB8, 0x04, 0x90, 0x03, 0xBD, 0x38, 0x07, + 0xDD, 0x38, 0x07, 0xB0, 0x0B, 0xC9, 0x11, 0xB0, 0x11, 0x09, 0xF0, 0x3D, 0x38, 0x07, 0x65, 0x24, + 0x85, 0x24, 0x80, 0x06, 0xC5, 0x21, 0x90, 0x02, 0x64, 0x24, 0x7A, 0x5A, 0xBD, 0x38, 0x07, 0xDD, + 0xB8, 0x04, 0xB0, 0x08, 0xC5, 0x24, 0xB0, 0x0E, 0xA9, 0x40, 0x80, 0x02, 0xA9, 0x1A, 0xC0, 0x80, + 0x6A, 0x20, 0x9B, 0xC1, 0x80, 0xE4, 0x98, 0x20, 0x8A, 0xC1, 0xBD, 0xB8, 0x04, 0xF0, 0x17, 0x3C, + 0xB8, 0x06, 0x30, 0x12, 0xBD, 0x38, 0x07, 0xFD, 0xB8, 0x04, 0xC9, 0xF8, 0x90, 0x04, 0x18, 0x65, + 0x21, 0xAC, 0xA9, 0x00, 0x85, 0x24, 0x68, 0x7A, 0xFA, 0x60, 0x20, 0xA9, 0xC7, 0x90, 0xFA, 0x3C, + 0xB8, 0x06, 0x10, 0x07, 0xC9, 0x91, 0xF0, 0x03, 0x20, 0xF0, 0xFD, 0x4C, 0xCD, 0xC7, 0x5A, 0x48, + 0x20, 0xB6, 0xC2, 0x9E, 0xB8, 0x06, 0x80, 0x07, 0x5A, 0x20, 0xD9, 0xC7, 0x90, 0xFA, 0x90, 0x68, + 0x7A, 0xA2, 0x00, 0x60, 0x5A, 0x48, 0x20, 0x8A, 0xC1, 0x80, 0xF4, 0x5A, 0x48, 0x4A, 0xD0, 0x15, + 0x08, 0x20, 0xD3, 0xC7, 0x28, 0x90, 0x05, 0x29, 0x28, 0x0A, 0x80, 0x02, 0x29, 0x30, 0xC9, 0x10, + 0xF0, 0xDD, 0x18, 0x80, 0xDA, 0xA2, 0x40, 0x68, 0x7A, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +char slot2[0x100] = { + 0x2C, 0x89, 0xC1, 0x70, 0x14, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x0E, 0x01, 0x31, 0x11, 0x13, 0x15, + 0x17, 0x80, 0x8B, 0x80, 0x93, 0x80, 0x9D, 0x80, 0xA2, 0xDA, 0xA2, 0xC2, 0x5A, 0x48, 0x8E, 0xF8, + 0x07, 0x50, 0x22, 0xA5, 0x36, 0x45, 0x38, 0xF0, 0x06, 0xA5, 0x37, 0xC5, 0x39, 0xF0, 0x03, 0x20, + 0xB6, 0xC2, 0x8A, 0x45, 0x39, 0x05, 0x38, 0xD0, 0x07, 0xA9, 0x05, 0x85, 0x38, 0x38, 0x80, 0x05, + 0xA9, 0x07, 0x85, 0x36, 0x18, 0xBD, 0xB8, 0x06, 0x89, 0x01, 0xD0, 0x03, 0x4C, 0x17, 0xC1, 0x90, + 0xFB, 0x68, 0x80, 0x28, 0x3C, 0xB8, 0x03, 0x50, 0x1C, 0x20, 0x8F, 0xC1, 0x80, 0x1E, 0x68, 0x20, + 0x70, 0xCC, 0x10, 0x1B, 0x20, 0xA9, 0xC7, 0xB0, 0xEB, 0x29, 0x5F, 0xC9, 0x51, 0xF0, 0x04, 0xC9, + 0x52, 0xD0, 0x09, 0xA9, 0x98, 0x7A, 0xFA, 0x60, 0x18, 0x20, 0xA3, 0xC7, 0x20, 0x4C, 0xCC, 0x48, + 0x20, 0xD9, 0xC7, 0xB0, 0x09, 0xBD, 0xB8, 0x06, 0x29, 0x10, 0xF0, 0xD2, 0x80, 0xF2, 0xA8, 0x68, + 0x5A, 0x20, 0xB8, 0xC3, 0x68, 0xBC, 0x38, 0x06, 0xF0, 0x12, 0x09, 0x80, 0xC9, 0x91, 0xF0, 0xDC, + 0xC9, 0xFF, 0xF0, 0xD8, 0xC9, 0x92, 0xF0, 0xD0, 0xC9, 0x94, 0xF0, 0xCD, 0x3C, 0xB8, 0x03, 0x50, + 0xC4, 0x20, 0xED, 0xFD, 0x80, 0xC6, 0x20, 0x9A, 0xCF, 0xBC, 0x29, 0xC2, 0x20, 0x7C, 0xC3, 0x48, + 0x88, 0x30, 0x04, 0xC0, 0x03, 0xD0, 0xF5, 0x20, 0x9A, 0xCF, 0x68, 0xBC, 0x2B, 0xC2, 0x99, 0xFB, + 0xBF, 0x68, 0x99, 0xFA, 0xBF, 0x68, 0x9D, 0xB8, 0x06, 0x29, 0x01, 0xD0, 0x02, 0xA9, 0x09, 0x9D, + 0x38, 0x06, 0x68, 0x9D, 0xB8, 0x04, 0x9E, 0xB8, 0x03, 0x60, 0x03, 0x07, 0xA0, 0xB0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +char slot3[0x100] = { + 0x48, 0xDA, 0x5A, 0x80, 0x12, 0x38, 0x90, 0x18, 0x80, 0x1A, 0xEA, 0x01, 0x88, 0x2C, 0x2F, 0x32, + 0x35, 0x4C, 0xAF, 0xC7, 0x4C, 0xB5, 0xC7, 0x20, 0x20, 0xCE, 0x20, 0xBE, 0xCD, 0x20, 0x58, 0xFC, + 0x7A, 0xFA, 0x68, 0x18, 0xB0, 0x03, 0x4C, 0xF6, 0xFD, 0x4C, 0x1B, 0xFD, 0x4C, 0x41, 0xCF, 0x4C, + 0x35, 0xCF, 0x4C, 0xC2, 0xCE, 0x4C, 0xB1, 0xCE, 0xA9, 0x06, 0xCD, 0xB3, 0xFB, 0xF0, 0x3C, 0x20, + 0x60, 0xC3, 0xA9, 0xF8, 0x85, 0x37, 0x64, 0x36, 0xB2, 0x36, 0x92, 0x36, 0xE6, 0x36, 0xD0, 0xF8, + 0xE6, 0x37, 0xD0, 0xF4, 0xDA, 0xAE, 0x78, 0x04, 0x3C, 0x81, 0xC0, 0x3C, 0x81, 0xC0, 0xFA, 0x60, + 0xDA, 0xA2, 0x00, 0x2C, 0x11, 0xC0, 0x30, 0x02, 0xA2, 0x08, 0x2C, 0x12, 0xC0, 0x10, 0x02, 0xE8, + 0xE8, 0x2C, 0x81, 0xC0, 0x2C, 0x81, 0xC0, 0x8E, 0x78, 0x04, 0xFA, 0x60, 0xAD, 0x13, 0xC0, 0x0A, + 0xAD, 0x18, 0xC0, 0x08, 0x8D, 0x00, 0xC0, 0x8D, 0x03, 0xC0, 0xB9, 0x78, 0x04, 0x28, 0xB0, 0x03, + 0x8D, 0x02, 0xC0, 0x10, 0x03, 0x8D, 0x01, 0xC0, 0x60, 0x09, 0x80, 0xC9, 0xFB, 0xB0, 0x06, 0xC9, + 0xE1, 0x90, 0x02, 0x29, 0xDF, 0x60, 0x48, 0xA9, 0x08, 0x1C, 0xFB, 0x04, 0x68, 0x20, 0xED, 0xFD, + 0x4C, 0x44, 0xFD, 0x20, 0x9D, 0xCC, 0x80, 0x09, 0x20, 0x9D, 0xCC, 0x24, 0x32, 0x30, 0x02, 0x29, + 0x7F, 0x5A, 0x09, 0x00, 0x30, 0x15, 0x48, 0xAD, 0xFB, 0x04, 0x6A, 0x68, 0x90, 0x0D, 0x2C, 0x1E, + 0xC0, 0x10, 0x08, 0x49, 0x40, 0x89, 0x60, 0xF0, 0x02, 0x49, 0x40, 0x2C, 0x1F, 0xC0, 0x10, 0x19, + 0x48, 0x8D, 0x01, 0xC0, 0x98, 0x45, 0x20, 0x4A, 0xB0, 0x04, 0xAD, 0x55, 0xC0, 0xC8, 0x98, 0x4A, + 0xA8, 0x68, 0x91, 0x28, 0x2C, 0x54, 0xC0, 0x7A, 0x60, 0x91, 0x28, 0x7A, 0x60, 0x00, 0x00, 0x00 +}; + +char slot4[0x100] = { + 0x80, 0x05, 0xA2, 0x03, 0x60, 0x38, 0x90, 0x18, 0x4C, 0xCF, 0xC5, 0x01, 0x20, 0x02, 0x02, 0x02, + 0x02, 0x00, 0x3B, 0xDC, 0x93, 0x82, 0x69, 0xBD, 0x6B, 0x1A, 0x9C, 0x7C, 0x07, 0xA2, 0x80, 0xA0, + 0x01, 0x9E, 0x7D, 0x04, 0x9E, 0x7D, 0x05, 0xA9, 0xFF, 0x9D, 0x7D, 0x06, 0xA9, 0x03, 0x9D, 0x7D, + 0x07, 0xA2, 0x00, 0x88, 0x10, 0xEB, 0x20, 0x6B, 0xC4, 0xA9, 0x00, 0xAA, 0x20, 0x9A, 0xCF, 0x8A, + 0x8D, 0x78, 0x04, 0x4A, 0x0D, 0x78, 0x04, 0xC9, 0x10, 0xB0, 0x1F, 0x29, 0x05, 0xF0, 0x01, 0x58, + 0x69, 0x55, 0x08, 0x78, 0x8E, 0xFC, 0x07, 0x8D, 0x79, 0xC0, 0xA2, 0x08, 0xCA, 0x0A, 0x90, 0x03, + 0x9D, 0x58, 0xC0, 0xD0, 0xF7, 0x8D, 0x78, 0xC0, 0x28, 0x18, 0x60, 0xA2, 0x80, 0x80, 0x02, 0xA2, + 0x00, 0xBD, 0x7D, 0x04, 0x9D, 0x7C, 0x04, 0xBD, 0x7D, 0x05, 0x9D, 0x7C, 0x05, 0xCA, 0x10, 0xEF, + 0x80, 0x0C, 0x9C, 0x7C, 0x04, 0x9C, 0x7C, 0x05, 0x9C, 0xFC, 0x04, 0x9C, 0xFC, 0x05, 0x9C, 0x7C, + 0x06, 0x18, 0x60, 0xA9, 0x20, 0x1C, 0x7C, 0x07, 0x2D, 0x7C, 0x06, 0x1C, 0x7C, 0x06, 0x2C, 0xFC, + 0x07, 0x30, 0x13, 0x2C, 0x63, 0xC0, 0x30, 0x02, 0x09, 0x80, 0x2C, 0x7C, 0x07, 0x10, 0x02, 0x09, + 0x40, 0x8D, 0x7C, 0x07, 0x18, 0x60, 0x0D, 0x7C, 0x07, 0x29, 0xE0, 0x80, 0xF4, 0x6A, 0x6A, 0x29, + 0x80, 0xAA, 0xAD, 0x78, 0x04, 0x9D, 0x7D, 0x04, 0xAD, 0x78, 0x05, 0x9D, 0x7D, 0x05, 0xAD, 0xF8, + 0x04, 0x9D, 0x7D, 0x06, 0xAD, 0xF8, 0x05, 0x9D, 0x7D, 0x07, 0x18, 0x60, 0x48, 0x18, 0xA9, 0x0E, + 0x2D, 0x7C, 0x07, 0xD0, 0x01, 0x38, 0x68, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00, 0x00 +}; + +char slot5[0x100] = { + 0xA2, 0x20, 0xA2, 0x00, 0xA2, 0x03, 0xC9, 0x00, 0xB0, 0x17, 0x38, 0xB0, 0x01, 0x18, 0xA2, 0x05, + 0x7E, 0x73, 0x04, 0x18, 0xA2, 0xC5, 0x8E, 0xF8, 0x07, 0xA2, 0x05, 0xAD, 0xFF, 0xCF, 0x4C, 0x97, + 0xC7, 0xA2, 0x05, 0x86, 0x58, 0xA9, 0xC5, 0x8D, 0xF8, 0x07, 0x20, 0x76, 0xC5, 0xA0, 0x05, 0xB9, + 0x70, 0xC5, 0x99, 0x42, 0x00, 0x88, 0x10, 0xF7, 0x20, 0x0A, 0xC5, 0xB0, 0x15, 0xAE, 0x00, 0x08, + 0xCA, 0xD0, 0x0F, 0xAE, 0x01, 0x08, 0xF0, 0x0A, 0xA5, 0x58, 0x0A, 0x0A, 0x0A, 0x0A, 0xAA, 0x4C, + 0x01, 0x08, 0xA2, 0x10, 0xBD, 0x5F, 0xC5, 0x9D, 0xDB, 0x07, 0xCA, 0x10, 0xF7, 0x80, 0xFE, 0xC3, + 0xE8, 0xE5, 0xE3, 0xEB, 0xA0, 0xC4, 0xE9, 0xF3, 0xEB, 0xA0, 0xC4, 0xF2, 0xE9, 0xF6, 0xE5, 0xAE, + 0x01, 0x50, 0x00, 0x08, 0x00, 0x00, 0xA2, 0x08, 0xBD, 0x83, 0xC5, 0x95, 0x00, 0xCA, 0x10, 0xF8, + 0x4C, 0x00, 0x00, 0x20, 0x0D, 0xC5, 0x05, 0x07, 0x00, 0x60, 0x01, 0x00, 0x00, 0x00, 0xA2, 0x03, + 0xA0, 0x00, 0x86, 0x3C, 0x8A, 0x0A, 0x24, 0x3C, 0xF0, 0x10, 0x05, 0x3C, 0x49, 0xFF, 0x29, 0x7E, + 0xB0, 0x08, 0x4A, 0xD0, 0xFB, 0x98, 0x9D, 0x56, 0x03, 0xC8, 0xE8, 0x10, 0xE5, 0xA9, 0x08, 0x85, + 0x27, 0xA0, 0x7F, 0x60, 0xB9, 0x00, 0x02, 0xC8, 0x4C, 0x99, 0xC3, 0xC1, 0xF0, 0xF0, 0xEC, 0xE5, + 0xA0, 0xAF, 0xAF, 0xE3, 0x20, 0xD0, 0xF8, 0x20, 0x53, 0xF9, 0x85, 0x3A, 0x84, 0x3B, 0x60, 0x5A, + 0xB0, 0x1C, 0xA0, 0xC4, 0xC4, 0x39, 0xD0, 0x04, 0xA4, 0x38, 0xF0, 0x12, 0xDA, 0x48, 0x29, 0x7F, + 0xC9, 0x02, 0xB0, 0x06, 0x20, 0x3B, 0xC4, 0x20, 0x6B, 0xC4, 0x68, 0xFA, 0x7A, 0x60, 0x4C, 0x9D, + 0xC7, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x52, 0xC5, 0x4C, 0x76, 0xC5, 0x00, 0x00, 0x00, 0xBF, 0x0A +}; + +char slot6[0x100] = { + 0xA2, 0x20, 0xA0, 0x00, 0x64, 0x03, 0x64, 0x3C, 0xA9, 0x60, 0xAA, 0x86, 0x2B, 0x85, 0x4F, 0x5A, + 0xBD, 0x8E, 0xC0, 0xBD, 0x8C, 0xC0, 0x7A, 0xB9, 0xEA, 0xC0, 0xBD, 0x89, 0xC0, 0xA0, 0x50, 0xBD, + 0x80, 0xC0, 0x98, 0x29, 0x03, 0x0A, 0x05, 0x2B, 0xAA, 0xBD, 0x81, 0xC0, 0xA9, 0x56, 0x20, 0xA8, + 0xFC, 0x88, 0x10, 0xEB, 0x85, 0x26, 0x85, 0x3D, 0x85, 0x41, 0x20, 0x8E, 0xC5, 0x64, 0x03, 0x18, + 0x08, 0x28, 0xA6, 0x2B, 0xC6, 0x03, 0xD0, 0x0E, 0xBD, 0x88, 0xC0, 0xA5, 0x01, 0xC9, 0xC6, 0xD0, + 0xA4, 0x4C, 0x00, 0xC5, 0x00, 0x00, 0x08, 0x88, 0xD0, 0x04, 0xF0, 0xE5, 0x80, 0xDF, 0xBD, 0x8C, + 0xC0, 0x10, 0xFB, 0x49, 0xD5, 0xD0, 0xF0, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0xAA, 0xD0, 0xF3, + 0xEA, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0xC9, 0x96, 0xF0, 0x09, 0x28, 0x90, 0xC2, 0x49, 0xAD, 0xF0, + 0x25, 0xD0, 0xBC, 0xA0, 0x03, 0x85, 0x40, 0xBD, 0x8C, 0xC0, 0x10, 0xFB, 0x2A, 0x85, 0x3C, 0xBD, + 0x8C, 0xC0, 0x10, 0xFB, 0x25, 0x3C, 0x88, 0xD0, 0xEC, 0x28, 0xC5, 0x3D, 0xD0, 0xA1, 0xA5, 0x40, + 0xC5, 0x41, 0xD0, 0x9B, 0xB0, 0x9C, 0xA0, 0x56, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, 0x59, + 0xD6, 0x02, 0xA4, 0x3C, 0x88, 0x99, 0x00, 0x03, 0xD0, 0xEE, 0x84, 0x3C, 0xBC, 0x8C, 0xC0, 0x10, + 0xFB, 0x59, 0xD6, 0x02, 0xA4, 0x3C, 0x91, 0x26, 0xC8, 0xD0, 0xEF, 0xBC, 0x8C, 0xC0, 0x10, 0xFB, + 0x59, 0xD6, 0x02, 0xD0, 0xCD, 0xA0, 0x00, 0xA2, 0x56, 0xCA, 0x30, 0xFB, 0xB1, 0x26, 0x5E, 0x00, + 0x03, 0x2A, 0x5E, 0x00, 0x03, 0x2A, 0x91, 0x26, 0xC8, 0xD0, 0xEE, 0xE6, 0x27, 0xE6, 0x3D, 0xA5, + 0x3D, 0xCD, 0x00, 0x08, 0xA6, 0x4F, 0x90, 0xDB, 0x4C, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +char slot7[0x100] = { + 0x2C, 0x03, 0xC7, 0x70, 0x1B, 0x38, 0x90, 0x18, 0xB8, 0x50, 0x15, 0x01, 0x9B, 0x1C, 0x1C, 0x1C, + 0x1C, 0x88, 0x18, 0x80, 0x2A, 0x38, 0x78, 0xA2, 0xFF, 0x9A, 0x80, 0x26, 0x38, 0xA2, 0x03, 0x60, + 0x8D, 0x78, 0x04, 0xA9, 0xC7, 0x8D, 0xF8, 0x07, 0x08, 0xC5, 0x39, 0xF0, 0xE8, 0x28, 0x4D, 0x7F, + 0x04, 0xD0, 0x1A, 0xAD, 0xFF, 0x07, 0x48, 0xAD, 0x7F, 0x07, 0x48, 0xAD, 0x78, 0x04, 0x60, 0x8D, + 0xF8, 0x07, 0x20, 0xD3, 0xC7, 0x70, 0x01, 0x60, 0xB0, 0x03, 0x6C, 0xCB, 0x00, 0xAD, 0x81, 0xC0, + 0xAD, 0x81, 0xC0, 0x20, 0x84, 0xFE, 0x20, 0x2F, 0xFB, 0x20, 0x58, 0xFC, 0x20, 0x93, 0xFE, 0x20, + 0x89, 0xFE, 0xA0, 0x10, 0xB9, 0x6F, 0xC7, 0x99, 0xDB, 0x07, 0x88, 0x10, 0xF7, 0x80, 0xFE, 0xC1, + 0xF0, 0xF0, 0xEC, 0xE5, 0xD4, 0xE1, 0xEC, 0xEB, 0xA0, 0xCF, 0xE6, 0xE6, 0xEC, 0xE9, 0xEE, 0xE5, + 0x8D, 0x28, 0xC0, 0x40, 0x8D, 0x28, 0xC0, 0x60, 0x8D, 0x28, 0xC0, 0x4C, 0x62, 0xFA, 0x8D, 0x28, + 0xC0, 0x2C, 0x87, 0xC7, 0x4C, 0x04, 0xC8, 0x8D, 0x28, 0xC0, 0x4C, 0xF1, 0xC7, 0x8D, 0x28, 0xC0, + 0x4C, 0xF6, 0xC7, 0x8D, 0x28, 0xC0, 0x4C, 0xF1, 0xC7, 0x8D, 0x28, 0xC0, 0x4C, 0x06, 0xC8, 0x8D, + 0x28, 0xC0, 0x4C, 0x4E, 0xC3, 0x8D, 0x28, 0xC0, 0x4C, 0x97, 0xC3, 0x8D, 0x28, 0xC0, 0x4C, 0x00, + 0xC1, 0x8D, 0x28, 0xC0, 0x4C, 0xA9, 0xD4, 0x8D, 0x28, 0xC0, 0x4C, 0x80, 0xC5, 0x8D, 0x28, 0xC0, + 0x4C, 0x4F, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xAC, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xC3, 0xC2, 0x8D, + 0x28, 0xC0, 0x4C, 0xF7, 0xC2, 0x8D, 0x28, 0xC0, 0x4C, 0xE0, 0xD4, 0x8D, 0x28, 0xC0, 0x6C, 0xED, + 0x03, 0x20, 0x23, 0xCE, 0x80, 0x8E, 0x20, 0x4D, 0xCE, 0x80, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/apple2/src/floppy.cpp b/apple2/src/floppy.cpp new file mode 100755 index 0000000..9c0165c --- /dev/null +++ b/apple2/src/floppy.cpp @@ -0,0 +1,533 @@ +// +// Apple 2 floppy disk support +// +// by James L. Hammons +// (c) 2005 Underground Software +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 12/03/2005 Created this file +// JLH 12/15/2005 Fixed nybblization functions to work properly +// JLH 12/27/2005 Added blank disk creation, fixed saving to work properly +// + +#include "floppy.h" + +#include +#include +#include "apple2.h" +#include "log.h" +#include "applevideo.h" // For message spawning... Though there's probably a better approach than this! + +using namespace std; + +// Useful enums + +enum { IO_MODE_READ, IO_MODE_WRITE }; + +// FloppyDrive class variable initialization + +uint8 FloppyDrive::header[21] = { + 0xD5, 0xAA, 0x96, 0xFF, 0xFE, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xDE, 0xAA, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xD5, 0xAA, 0xAD }; +uint8 FloppyDrive::doSector[16] = { + 0x0, 0x7, 0xE, 0x6, 0xD, 0x5, 0xC, 0x4, 0xB, 0x3, 0xA, 0x2, 0x9, 0x1, 0x8, 0xF }; +uint8 FloppyDrive::poSector[16] = { + 0x0, 0x8, 0x1, 0x9, 0x2, 0xA, 0x3, 0xB, 0x4, 0xC, 0x5, 0xD, 0x6, 0xE, 0x7, 0xF }; + +// FloppyDrive class implementation... + +FloppyDrive::FloppyDrive(): motorOn(0), activeDrive(0), ioMode(IO_MODE_READ), phase(0), track(0) +{ + disk[0] = disk[1] = NULL; + diskSize[0] = diskSize[1] = 0; + diskType[0] = diskType[1] = DT_UNKNOWN; + imageDirty[0] = imageDirty[1] = false; + imageName[0][0] = imageName[1][0] = 0; // Zero out filenames +} + +FloppyDrive::~FloppyDrive() +{ + if (disk[0]) + delete[] disk[0]; + + if (disk[1]) + delete[] disk[1]; +} + +bool FloppyDrive::LoadImage(const char * filename, uint8 driveNum/*= 0*/) +{ + if (driveNum > 1) + { + WriteLog("FLOPPY: Attempted to load image to drive #%u!\n", driveNum); + return false; + } + + imageName[driveNum][0] = 0; // Zero out filename, in case it doesn't load + + FILE * fp = fopen(filename, "rb"); + + if (fp == NULL) + { + WriteLog("FLOPPY: Failed to open image file '%s' for reading...\n", filename); + return false; + } + + if (disk[driveNum]) + delete[] disk[driveNum]; + + fseek(fp, 0, SEEK_END); + diskSize[driveNum] = ftell(fp); + fseek(fp, 0, SEEK_SET); + disk[driveNum] = new uint8[diskSize[driveNum]]; + fread(disk[driveNum], 1, diskSize[driveNum], fp); + + fclose(fp); +//printf("Read disk image: %u bytes.\n", diskSize); + DetectImageType(filename, driveNum); + strcpy(imageName[driveNum], filename); + + return true; +} + +bool FloppyDrive::SaveImage(uint8 driveNum/*= 0*/) +{ + if (driveNum > 1) + { + WriteLog("FLOPPY: Attempted to save image to drive #%u!\n", driveNum); + return false; + } + + if (!imageDirty[driveNum]) + { + WriteLog("FLOPPY: No need to save unchanged image...\n"); + return false; + } + + if (imageName[driveNum][0] == 0) + { + WriteLog("FLOPPY: Attempted to save non-existant image!\n"); + return false; + } + + if (diskType[driveNum] == DT_NYBBLE) + memcpy(disk[driveNum], nybblizedImage[driveNum], 232960); + else + DenybblizeImage(driveNum); + + FILE * fp = fopen(imageName[driveNum], "wb"); + + if (fp == NULL) + { + WriteLog("FLOPPY: Failed to open image file '%s' for writing...\n", imageName[driveNum]); + return false; + } + + fwrite(disk[driveNum], 1, diskSize[driveNum], fp); + fclose(fp); + + return true; +} + +bool FloppyDrive::SaveImageAs(const char * filename, uint8 driveNum/*= 0*/) +{ +//WARNING: Buffer overflow possibility + strcpy(imageName[driveNum], filename); + return SaveImage(driveNum); +} + +void FloppyDrive::CreateBlankImage(uint8 driveNum/*= 0*/) +{ + if (disk[driveNum] != NULL) + delete disk[driveNum]; + + disk[driveNum] = new uint8[143360]; + diskSize[driveNum] = 143360; + memset(disk[driveNum], 0x00, 143360); + memset(nybblizedImage[driveNum], 0x00, 232960); // Set it to 0 instead of $FF for proper formatting... + diskType[driveNum] = DT_DOS33; + strcpy(imageName[driveNum], "newblank.dsk"); +SpawnMessage("New blank image inserted in drive %u...", driveNum); +} + +void FloppyDrive::SwapImages(void) +{ + uint8 nybblizedImageTmp[232960]; + char imageNameTmp[MAX_PATH]; + + memcpy(nybblizedImageTmp, nybblizedImage[0], 232960); + memcpy(nybblizedImage[0], nybblizedImage[1], 232960); + memcpy(nybblizedImage[1], nybblizedImageTmp, 232960); + + memcpy(imageNameTmp, imageName[0], MAX_PATH); + memcpy(imageName[0], imageName[1], MAX_PATH); + memcpy(imageName[1], imageNameTmp, MAX_PATH); + + uint8 * diskTmp = disk[0]; + disk[0] = disk[1]; + disk[1] = diskTmp; + + uint32 diskSizeTmp = diskSize[0]; + diskSize[0] = diskSize[1]; + diskSize[1] = diskSizeTmp; + + uint8 diskTypeTmp = diskType[0]; + diskType[0] = diskType[1]; + diskType[1] = diskTypeTmp; + + uint8 imageDirtyTmp = imageDirty[0]; + imageDirty[0] = imageDirty[1]; + imageDirty[1] = imageDirtyTmp; +SpawnMessage("Drive 0: %s...", imageName[0]); +} + +void FloppyDrive::DetectImageType(const char * filename, uint8 driveNum) +{ + diskType[driveNum] = DT_UNKNOWN; + + if (diskSize[driveNum] == 232960) + { + diskType[driveNum] = DT_NYBBLE; + memcpy(nybblizedImage[driveNum], disk[driveNum], 232960); + } + else if (diskSize[driveNum] == 143360) + { + const char * ext = strrchr(filename, '.'); + + if (ext == NULL) + return; +WriteLog("FLOPPY: Found extension [%s]...\n", ext); + +//Apparently .dsk can house either DOS order OR PRODOS order... !!! FIX !!! +//[DONE, see below why we don't need it] + if (strcasecmp(ext, ".po") == 0) + diskType[driveNum] = DT_PRODOS; + else if ((strcasecmp(ext, ".do") == 0) || (strcasecmp(ext, ".dsk") == 0)) + { + diskType[driveNum] = DT_DOS33; +//WriteLog("Detected DOS 3.3 disk!\n"); +/* +This doesn't seem to be accurate... Maybe it's just a ProDOS disk in a DOS33 order... +That would seem to be the case--just because it's a ProDOS disk doesn't mean anything +WRT to the disk image itself. + // This could really be a ProDOS order disk with a .dsk extension, so let's see... + char fingerprint[3][4] = { + { 0x04, 0x00, 0x00, 0x00 }, // @ $500 + { 0x03, 0x00, 0x05, 0x00 }, // @ $700 + { 0x02, 0x00, 0x04, 0x00 } }; // @ $900 + + if ((strcmp((char *)(disk[driveNum] + 0x500), fingerprint[0]) == 0) + && (strcmp((char *)(disk[driveNum] + 0x700), fingerprint[1]) == 0) + && (strcmp((char *)(disk[driveNum] + 0x900), fingerprint[2]) == 0)) + diskType[driveNum] = DT_PRODOS; +//*/ + } + + NybblizeImage(driveNum); + } +WriteLog("FLOPPY: Detected image type %s...\n", (diskType[driveNum] == DT_NYBBLE ? + "Nybble image" : (diskType[driveNum] == DT_DOS33 ? + "DOS 3.3 image" : (diskType[driveNum] == DT_PRODOS ? "ProDOS image" : "unknown")))); +} + +void FloppyDrive::NybblizeImage(uint8 driveNum) +{ + // Format of a sector is header (23) + nybbles (343) + footer (30) = 396 + // (short by 20 bytes of 416 [413 if 48 byte header is one time only]) +// Hmph. Who'da thunk that AppleWin's nybblization routines would be wrong? +// This is now correct, BTW + // hdr (21) + nybbles (343) + footer (48) = 412 bytes per sector + // (not incl. 64 byte track marker) + + uint8 footer[48] = { + 0xDE, 0xAA, 0xEB, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + + uint8 diskbyte[0x40] = { + 0x96, 0x97, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA6, + 0xA7, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB2, 0xB3, + 0xB4, 0xB5, 0xB6, 0xB7, 0xB9, 0xBA, 0xBB, 0xBC, + 0xBD, 0xBE, 0xBF, 0xCB, 0xCD, 0xCE, 0xCF, 0xD3, + 0xD6, 0xD7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, + 0xDF, 0xE5, 0xE6, 0xE7, 0xE9, 0xEA, 0xEB, 0xEC, + 0xED, 0xEE, 0xEF, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, + 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF }; + + uint8 * img = nybblizedImage[driveNum]; + memset(img, 0xFF, 232960); // Doesn't matter if 00s or FFs... + + for(uint8 trk=0; trk<35; trk++) + { + memset(img, 0xFF, 64); // Write gap 1, 64 bytes (self-sync) + img += 64; + + for(uint8 sector=0; sector<16; sector++) + { + memcpy(img, header, 21); // Set up the sector header + + img[5] = ((trk >> 1) & 0x55) | 0xAA; + img[6] = (trk & 0x55) | 0xAA; + img[7] = ((sector >> 1) & 0x55) | 0xAA; + img[8] = (sector & 0x55) | 0xAA; + img[9] = (((trk ^ sector ^ 0xFE) >> 1) & 0x55) | 0xAA; + img[10] = ((trk ^ sector ^ 0xFE) & 0x55) | 0xAA; + + img += 21; + uint8 * bytes = disk[driveNum]; + + if (diskType[driveNum] == DT_DOS33) + bytes += (doSector[sector] * 256) + (trk * 256 * 16); + else if (diskType[driveNum] == DT_PRODOS) + bytes += (poSector[sector] * 256) + (trk * 256 * 16); + else + bytes += (sector * 256) + (trk * 256 * 16); + + // Convert the 256 8-bit bytes into 342 6-bit bytes. + + for(uint16 i=0; i<0x56; i++) + { + img[i] = ((bytes[(i + 0xAC) & 0xFF] & 0x01) << 7) + | ((bytes[(i + 0xAC) & 0xFF] & 0x02) << 5) + | ((bytes[(i + 0x56) & 0xFF] & 0x01) << 5) + | ((bytes[(i + 0x56) & 0xFF] & 0x02) << 3) + | ((bytes[(i + 0x00) & 0xFF] & 0x01) << 3) + | ((bytes[(i + 0x00) & 0xFF] & 0x02) << 1); + } + + img[0x54] &= 0x3F; + img[0x55] &= 0x3F; + memcpy(img + 0x56, bytes, 256); + + // XOR the data block with itself, offset by one byte, + // creating a 343rd byte which is used as a cheksum. + + img[342] = 0x00; + + for(uint16 i=342; i>0; i--) + img[i] = img[i] ^ img[i - 1]; + + // Using a lookup table, convert the 6-bit bytes into disk bytes. + + for(uint16 i=0; i<343; i++) + img[i] = diskbyte[img[i] >> 2]; + + img += 343; + + // Done with the nybblization, now for the epilogue... + + memcpy(img, footer, 48); + img += 48; + } + } +} + +void FloppyDrive::DenybblizeImage(uint8 driveNum) +{ + uint8 decodeNybble[0x80] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x0C, 0x00, 0x10, 0x14, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, + 0x00, 0x00, 0x00, 0x24, 0x28, 0x2C, 0x30, 0x34, + 0x00, 0x00, 0x38, 0x3C, 0x40, 0x44, 0x48, 0x4C, + 0x00, 0x50, 0x54, 0x58, 0x5C, 0x60, 0x64, 0x68, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6C, 0x00, 0x70, 0x74, 0x78, + 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x80, 0x84, + 0x00, 0x88, 0x8C, 0x90, 0x94, 0x98, 0x9C, 0xA0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA8, 0xAC, + 0x00, 0xB0, 0xB4, 0xB8, 0xBC, 0xC0, 0xC4, 0xC8, + 0x00, 0x00, 0xCC, 0xD0, 0xD4, 0xD8, 0xDC, 0xE0, + 0x00, 0xE4, 0xE8, 0xEC, 0xF0, 0xF4, 0xF8, 0xFC }; + + // Sanity checks... + if (disk[driveNum] == NULL || diskSize[driveNum] < 143360) + { + WriteLog("FLOPPY: Source disk image invalid! [drive=%u, disk=%08X, diskSize=%u]\n", + driveNum, disk[driveNum], diskSize[driveNum]); + return; + } + + uint8 * srcImg = nybblizedImage[driveNum]; + uint8 * dstImg = disk[driveNum]; + uint8 buffer[345]; // 2 extra bytes for the unpack routine below... + + for(uint8 trk=0; trk<35; trk++) + { + uint8 * trackBase = srcImg + (trk * 6656); + + for(uint8 sector=0; sector<16; sector++) + { + uint16 sectorStart = (uint16)-1; + + for(uint16 i=0; i<6656; i++) + { + if (trackBase[i] == header[0] + && trackBase[(i + 1) % 6656] == header[1] + && trackBase[(i + 2) % 6656] == header[2] + && trackBase[(i + 3) % 6656] == header[3] + && trackBase[(i + 4) % 6656] == header[4]) + { +//Could also check the track # at +5,6... + uint8 foundSector = ((trackBase[(i + 7) % 6656] & 0x55) << 1) + | (trackBase[(i + 8) % 6656] & 0x55); + + if (foundSector == sector) + { + sectorStart = (i + 21) % 6656; + break; + } + } + } + + // Sanity check... + if (sectorStart == (uint16)-1) + { + WriteLog("FLOPPY: Failed to find sector %u (track %u) in nybble image!\n", + sector, trk); + return; + } + + // Using a lookup table, convert the disk bytes into 6-bit bytes. + + for(uint16 i=0; i<343; i++) + buffer[i] = decodeNybble[trackBase[(sectorStart + i) % 6656] & 0x7F]; + + // XOR the data block with itself, offset by one byte. + + for(uint16 i=1; i<342; i++) + buffer[i] = buffer[i] ^ buffer[i - 1]; + + // Convert the 342 6-bit bytes into 256 8-bit bytes (at buffer + $56). + + for(uint16 i=0; i<0x56; i++) + { + buffer[0x056 + i] |= ((buffer[i] >> 3) & 0x01) | ((buffer[i] >> 1) & 0x02); + buffer[0x0AC + i] |= ((buffer[i] >> 5) & 0x01) | ((buffer[i] >> 3) & 0x02); + buffer[0x102 + i] |= ((buffer[i] >> 7) & 0x01) | ((buffer[i] >> 5) & 0x02); + } + + uint8 * bytes = dstImg; + + if (diskType[driveNum] == DT_DOS33) + bytes += (doSector[sector] * 256) + (trk * 256 * 16); + else if (diskType[driveNum] == DT_PRODOS) + bytes += (poSector[sector] * 256) + (trk * 256 * 16); + else + bytes += (sector * 256) + (trk * 256 * 16);//*/ + + memcpy(bytes, buffer + 0x56, 256); + } + } +} + +// Memory mapped I/O functions + +/* +The DSK format is a byte-for-byte image of a 16-sector Apple II floppy disk: 35 tracks of 16 +sectors of 256 bytes each, making 143,360 bytes in total. The PO format is exactly the same +size as DSK and is also organized as 35 sequential tracks, but the sectors within each track +are in a different sequence. The NIB format is a nybblized format: a more direct representation +of the disk's data as encoded by the Apple II floppy drive hardware. NIB contains 35 tracks of +6656 bytes each, for a total size of 232,960 bytes. Although this format is much larger, it is +also more versatile and can represent the older 13-sector disks, many copy-protected disks, and +other unusual encodings. +*/ + +void FloppyDrive::ControlStepper(uint8 addr) +{ + // $C0E0 - 7 +/* +What I can gather here: +bits 1-2 are the "phase" of the track (which is 1/4 of a full track (?)) +bit 0 is the "do something" bit. +*/ + if (addr & 0x01) + { + uint8 newPhase = (addr >> 1) & 0x03; +//WriteLog("*** Stepper change [%u]: track = %u, phase = %u, newPhase = %u\n", addr, track, phase, newPhase); + + if (((phase + 1) & 0x03) == newPhase) + phase += (phase < 79 ? 1 : 0); + + if (((phase - 1) & 0x03) == newPhase) + phase -= (phase > 0 ? 1 : 0); + + if (!(phase & 0x01)) + { + track = ((phase >> 1) < 35 ? phase >> 1 : 34); + currentPos = 0; + } +//WriteLog(" track = %u, phase = %u, newPhase = %u\n", track, phase, newPhase); +SpawnMessage("Stepping to track %u...", track); + } + +// return something if read mode... +} + +void FloppyDrive::ControlMotor(uint8 addr) +{ + // $C0E8 - 9 + motorOn = addr; +} + +void FloppyDrive::DriveEnable(uint8 addr) +{ + // $C0EA - B + activeDrive = addr; +} + +uint8 FloppyDrive::ReadWrite(void) +{ +SpawnMessage("%sing %s track %u, sector %u...", (ioMode == IO_MODE_READ ? "Read" : "Write"), + (ioMode == IO_MODE_READ ? "from" : "to"), track, currentPos / 396); + // $C0EC +/* +I think what happens here is that once a track is read its nybblized form +is fed through here, one byte at a time--which means for DO disks, we have +to convert the actual 256 byte sector to a 416 byte nybblized data "sector". +Which we now do. :-) +*/ + if (ioMode == IO_MODE_WRITE && (latchValue & 0x80)) + { + nybblizedImage[activeDrive][(track * 6656) + currentPos] = latchValue; + imageDirty[activeDrive] = true; + } + + uint8 diskByte = nybblizedImage[activeDrive][(track * 6656) + currentPos]; + currentPos = (currentPos + 1) % 6656; + + return diskByte; +} + +uint8 FloppyDrive::GetLatchValue(void) +{ + // $C0ED + return latchValue; +} + +void FloppyDrive::SetLatchValue(uint8 value) +{ + // $C0ED + latchValue = value; +} + +void FloppyDrive::SetReadMode(void) +{ + // $C0EE + ioMode = IO_MODE_READ; +} + +void FloppyDrive::SetWriteMode(void) +{ + // $C0EF + ioMode = IO_MODE_WRITE; +} diff --git a/apple2/src/floppy.h b/apple2/src/floppy.h new file mode 100755 index 0000000..45e8ce4 --- /dev/null +++ b/apple2/src/floppy.h @@ -0,0 +1,69 @@ +// +// Apple 2 floppy disk support +// + +#ifndef __FLOPPY_H__ +#define __FLOPPY_H__ + +// MAX_PATH isn't defined in stdlib.h on *nix, so we do it here... +#ifdef __GCCUNIX__ +#include +#define MAX_PATH _POSIX_PATH_MAX +#else +#include // for MAX_PATH on MinGW/Darwin +#endif +#include "types.h" + +enum { DT_UNKNOWN, DT_DOS33, DT_PRODOS, DT_NYBBLE }; + +class FloppyDrive +{ + public: + FloppyDrive(); + ~FloppyDrive(); + + bool LoadImage(const char * filename, uint8 driveNum = 0); + bool SaveImage(uint8 driveNum = 0); + bool SaveImageAs(const char * filename, uint8 driveNum = 0); + void CreateBlankImage(uint8 driveNum = 0); + void SwapImages(void); + + // I/O functions ($C0Ex accesses) + + void ControlStepper(uint8 addr); + void ControlMotor(uint8 addr); + void DriveEnable(uint8 addr); + uint8 ReadWrite(void); + uint8 GetLatchValue(void); + void SetLatchValue(uint8 value); + void SetReadMode(void); + void SetWriteMode(void); + + protected: + void DetectImageType(const char * filename, uint8 driveNum); + void NybblizeImage(uint8 driveNum); + void DenybblizeImage(uint8 driveNum); + + private: + char imageName[2][MAX_PATH]; + uint8 * disk[2]; + uint32 diskSize[2]; + uint8 diskType[2]; + bool imageDirty[2]; + uint8 motorOn; + uint8 activeDrive; + uint8 ioMode; + uint8 latchValue; + uint8 phase; + uint8 track; + + uint8 nybblizedImage[2][232960]; + uint32 currentPos; + + // And here are some private class variables (to reduce function redundancy): + static uint8 header[21]; + static uint8 doSector[16]; + static uint8 poSector[16]; +}; + +#endif // __FLOPPY_H__ diff --git a/apple2/src/font14pt.h b/apple2/src/font14pt.h new file mode 100755 index 0000000..ab72f3f --- /dev/null +++ b/apple2/src/font14pt.h @@ -0,0 +1,1640 @@ +#define FONT_WIDTH 8 +#define FONT_HEIGHT 16 + +// +// This file was automagically generated by rawfont2c (by James L. Hammons) +// + +char font1[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 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/apple2/src/gui/button.cpp b/apple2/src/gui/button.cpp new file mode 100755 index 0000000..4c4119f --- /dev/null +++ b/apple2/src/gui/button.cpp @@ -0,0 +1,211 @@ +// +// BUTTON.CPP +// +// Graphical User Interface button class +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 02/02/2006 Created this file +// + +#include "button.h" +#include "guimisc.h" // Various support functions + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +using namespace std; // For STL stuff + +// +// Button class implementation +// + +/* +Some notes about this class: + +- Button colors are hardwired +*/ + +Button::Button(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/, + Element * parent/*= NULL*/): + Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), + activated(false), clicked(false), inside(false), + buttonUp(NULL), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(false), + activatedSave(false), clickedSave(false), insideSave(false) +{ + // Should we make a local button bitmap here? +} + +Button::Button(uint32 x, uint32 y, uint32 w, uint32 h, SDL_Surface * upImg, Element * parent/*= NULL*/): + Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), + activated(false), clicked(false), inside(false), + buttonUp(upImg), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(false), + activatedSave(false), clickedSave(false), insideSave(false) +{ +// if (upImg == NULL) +// return; +// +// uint32 width = ((Bitmap *)upImg)->width, height = ((Bitmap *)upImg)->height; +// +// buttonUp = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, +// 32, MASK_R, MASK_G, MASK_B, MASK_A); +// memcpy(buttonUp->pixels, ((Bitmap *)upImg)->pixelData, width * height * 4); + + // Should we make a local button bitmap here? NO--it's passed in! +} + +Button::Button(uint32 x, uint32 y, SDL_Surface * bU, SDL_Surface * bH/*= NULL*/, + SDL_Surface * bD/*= NULL*/, Element * parent/*= NULL*/): + Element(x, y, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), + activated(false), clicked(false), inside(false), + buttonUp(bU), buttonDown(bD), buttonHover(bH), surfacesAreLocal(false), + activatedSave(false), clickedSave(false), insideSave(false) +{ + if (buttonUp) + extents.w = buttonUp->w, + extents.h = buttonUp->h; +} + +Button::Button(uint32 x, uint32 y, uint32 w, uint32 h, string s, Element * parent/*= NULL*/): + Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), + activated(false), clicked(false), inside(false), + buttonUp(NULL), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(true), + activatedSave(false), clickedSave(false), insideSave(false) +{ + // Create the button surfaces here... +} + +Button::Button(uint32 x, uint32 y, string s, Element * parent/*= NULL*/): + Element(x, y, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, parent), + activated(false), clicked(false), inside(false), + buttonUp(NULL), buttonDown(NULL), buttonHover(NULL), surfacesAreLocal(true), + activatedSave(false), clickedSave(false), insideSave(false) +{ + extents.w = (s.length() + 2) * GetFontWidth(); + extents.h = GetFontHeight(); + + // Create the button surfaces here... + + buttonUp = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, + MASK_R, MASK_G, MASK_B, MASK_A); + buttonDown = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, + MASK_R, MASK_G, MASK_B, MASK_A); + buttonHover = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, + MASK_R, MASK_G, MASK_B, MASK_A); + + // Need to create backgrounds before we do this stuff... + SDL_FillRect(buttonUp, NULL, bgColor); + SDL_FillRect(buttonDown, NULL, fgColor); + SDL_FillRect(buttonHover, NULL, bgColor); + + DrawStringTrans(buttonUp, GetFontWidth(), 0, fgColor, s.c_str()); + DrawStringTrans(buttonDown, GetFontWidth(), 0, fgColor, s.c_str()); + DrawStringTrans(buttonHover, GetFontWidth(), 0, fgColor, s.c_str()); +} + +Button::~Button() +{ + if (surfacesAreLocal) + { + if (buttonUp) + SDL_FreeSurface(buttonUp); + + if (buttonDown) + SDL_FreeSurface(buttonDown); + + if (buttonHover) + SDL_FreeSurface(buttonHover); + } +} + +void Button::HandleKey(SDLKey key) +{ +} + +void Button::HandleMouseMove(uint32 x, uint32 y) +{ + SaveStateVariables(); + inside = Inside(x, y); + CheckStateAndRedrawIfNeeded(); +} + +void Button::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) +{ + SaveStateVariables(); + + if (inside) + { + if (mouseDown) + clicked = true; + + if (clicked && !mouseDown) + { + clicked = false, activated = true; + + // Send a message to our parent widget (if any) that we're activated + if (parent) + parent->Notify(this); + } + } + else + clicked = activated = false; + + CheckStateAndRedrawIfNeeded(); +} + +void Button::Draw(void) +{ + if (buttonUp == NULL) + return; // Bail out if no surface was created... + + SDL_Rect rect = GetScreenCoords(); + + // Now, draw the appropriate button state! + + SDL_Surface * picToShow = buttonUp; + + if (buttonHover != NULL && inside && !clicked) + picToShow = buttonHover; + + if (buttonDown != NULL && inside && clicked) + picToShow = buttonDown; + + SDL_BlitSurface(picToShow, NULL, screen, &rect); // This handles alpha blending too! :-D + + needToRefreshScreen = true; +} + +void Button::Notify(Element *) +{ +} + +bool Button::ButtonClicked(void) +{ + return activated; +} + +void Button::SaveStateVariables(void) +{ + activatedSave = activated; + clickedSave = clicked; + insideSave = inside; +} + +void Button::CheckStateAndRedrawIfNeeded(void) +{ + // Check to see if any of our state variables changed since we last saved them... + if (activated != activatedSave || clicked != clickedSave || inside != insideSave) + Draw(); +} diff --git a/apple2/src/gui/button.h b/apple2/src/gui/button.h new file mode 100755 index 0000000..fcf366b --- /dev/null +++ b/apple2/src/gui/button.h @@ -0,0 +1,43 @@ +// +// BUTTON.H +// +// Graphical User Interface button class +// + +#ifndef __BUTTON_H__ +#define __BUTTON_H__ + +#include +#include "element.h" + +//Apparently this approach doesn't work for inheritance... D'oh! +//class Element; // Forward declaration + +class Button: public Element +{ + public: + Button(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0, Element * parent = NULL); + Button(uint32 x, uint32 y, uint32 w, uint32 h, SDL_Surface * upImg, Element * parent = NULL); + Button(uint32 x, uint32 y, SDL_Surface * bU, SDL_Surface * bH = NULL, SDL_Surface * bD = NULL, Element * parent = NULL); + Button(uint32 x, uint32 y, uint32 w, uint32 h, std::string s, Element * parent = NULL); + Button(uint32 x, uint32 y, std::string s, Element * parent = NULL); + ~Button(); + virtual void HandleKey(SDLKey key); + virtual void HandleMouseMove(uint32 x, uint32 y); + virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); + virtual void Draw(void); + virtual void Notify(Element *); + bool ButtonClicked(void); + void SaveStateVariables(void); + void CheckStateAndRedrawIfNeeded(void); + + protected: + bool activated, clicked, inside; + SDL_Surface * buttonUp, * buttonDown, * buttonHover; + + private: + bool surfacesAreLocal; + bool activatedSave, clickedSave, insideSave; +}; + +#endif // __BUTTON_H__ diff --git a/apple2/src/gui/draggablewindow.cpp b/apple2/src/gui/draggablewindow.cpp new file mode 100755 index 0000000..860e35d --- /dev/null +++ b/apple2/src/gui/draggablewindow.cpp @@ -0,0 +1,188 @@ +// +// DRAGGABLEWINDOW.CPP +// +// Graphical User Interface draggable window class +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 03/01/2006 Created this file +// +// STILL TO DO: +// +// - Check for parent's extents and clip movement against those extents +// + +#include "draggablewindow.h" +#include "button.h" +#include "guimisc.h" // Various support functions +#include + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +using namespace std; // For STL stuff + +#define BACKGROUND_IMG_TEST + +// +// DraggableWindow class implementation +// +// NOTE: FG/BG colors are hard-wired +// + +DraggableWindow::DraggableWindow(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/, + void (* f)(Element *)/*= NULL*/): + Element(x, y, w, h, 0x4D, 0xFF, 0x84, 0xFF, 0x1F, 0x84, 0x84, 0xFF), handler(f), + clicked(false), + cbWidth((closeBox[0] << 8) | closeBox[1]), cbHeight((closeBox[2] << 8) | closeBox[3]), + cbUp(SDL_CreateRGBSurfaceFrom(&closeBox[4], cbWidth, cbHeight, 32, cbWidth * 4, + MASK_R, MASK_G, MASK_B, MASK_A)), + cbDown(SDL_CreateRGBSurfaceFrom(&closeBoxDown[4], cbWidth, cbHeight, 32, cbWidth * 4, + MASK_R, MASK_G, MASK_B, MASK_A)), + cbHover(SDL_CreateRGBSurfaceFrom(&closeBoxHover[4], cbWidth, cbHeight, 32, cbWidth * 4, + MASK_R, MASK_G, MASK_B, MASK_A)) +{ +//Could probably move this into the initializer list as well... + closeButton = new Button(w - (cbWidth + 1), 1, cbUp, cbHover, cbDown, this); + list.push_back(closeButton); + +#ifdef BACKGROUND_IMG_TEST +uint16 imgWidth = (floppyDiskImg[0] << 8) | floppyDiskImg[1]; +uint16 imgHeight = (floppyDiskImg[2] << 8) | floppyDiskImg[3]; +img = SDL_CreateRGBSurfaceFrom(&floppyDiskImg[4], imgWidth, imgHeight, 32, imgWidth * 4, + MASK_R, MASK_G, MASK_B, MASK_A); +#endif + + CreateBackstore(); + Draw(); // Can we do this in the constructor??? Mebbe. +} + +DraggableWindow::~DraggableWindow() +{ + for(uint32 i=0; iHandleKey(key); +} + +void DraggableWindow::HandleMouseMove(uint32 x, uint32 y) +{ + if (clicked) + { +//Need to check whether or not we've run into the extents of the screen... !!! FIX !!! + RestoreScreenFromBackstore(); + extents.x = x - offset.x; + extents.y = y - offset.y; + SDL_BlitSurface(screen, &extents, backstore, NULL); + Draw(); + + return; + } + + // Handle the items this window contains... + for(uint32 i=0; iHandleMouseMove(x - extents.x, y - extents.y); +} + +void DraggableWindow::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) +{ + clicked = false; + + if (mouseDown && Inside(x, y)) + { + clicked = true; + offset.x = x - extents.x; + offset.y = y - extents.y; + } + + // Handle the items this window contains... + for(uint32 i=0; iHandleMouseButton(x - extents.x, y - extents.y, mouseDown); + + if (list[i]->Inside(x - extents.x, y - extents.y)) + clicked = false; + } +} + +void DraggableWindow::Draw(void) +{ + // These are *always* top level and parentless, so no need to traverse up through + // the parent chain... +//Perhaps we can make these parentable, put the parent traversal in the base class? +//Prolly. +#ifdef BACKGROUND_IMG_TEST + SDL_Rect src, dst; + src.x = 0, src.y = 0, src.w = extents.w, src.h = extents.h; + dst.x = extents.x, dst.y = extents.y; + SDL_BlitSurface(img, &src, screen, &dst); + + extern char textChar2e[]; + uint8 * fontAddr = (uint8 *)textChar2e + ((128 + 32) * 7 * 8); + SetNewFont(Font(fontAddr, 7, 8)); + DrawStringOpaque(screen, extents.x + 8, extents.y + 6, 0xFF000000, 0xFFFFFFFF, "Ultima III - Boo"); + DrawStringOpaque(screen, extents.x + 8, extents.y + 14, 0xFF000000, 0xFFFFFFFF, "0123456789012345"); + DrawStringOpaque(screen, extents.x + 8, extents.y + 22, 0xFF000000, 0xFFFFFFFF, "1234567890123456"); + DrawStringOpaque(screen, extents.x + 8, extents.y + 30, 0xFF000000, 0xFFFFFFFF, "2345678901234567"); + RestoreOldFont(); +#else + SDL_FillRect(screen, &extents, bgColor); +#endif + + // Handle the items this window contains... + for(uint32 i=0; iDraw(); + +//Prolly don't need this since the close button will do this for us... + needToRefreshScreen = true; +} + +void DraggableWindow::Notify(Element * e) +{ + if (e == closeButton) + { + SDL_Event event; + event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; + SDL_PushEvent(&event); + } +} + +void DraggableWindow::AddElement(Element * e) +{ + list.push_back(e); +} diff --git a/apple2/src/gui/draggablewindow.h b/apple2/src/gui/draggablewindow.h new file mode 100755 index 0000000..41e8966 --- /dev/null +++ b/apple2/src/gui/draggablewindow.h @@ -0,0 +1,41 @@ +// +// DRAGGABLEWINDOW.H +// +// Graphical User Interface window class +// + +#ifndef __DRAGGABLEWINDOW_H__ +#define __DRAGGABLEWINDOW_H__ + +#include "element.h" +#include + +class Button; // Forward declaration + +class DraggableWindow: public Element +{ + public: + DraggableWindow(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0, + void (* f)(Element *) = NULL); + ~DraggableWindow(); //Does this destructor need to be virtual? Not sure... Check! + virtual void HandleKey(SDLKey key); + virtual void HandleMouseMove(uint32 x, uint32 y); + virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); + virtual void Draw(void); + virtual void Notify(Element *); + void AddElement(Element * e); + + protected: + void (* handler)(Element *); + Button * closeButton; + std::vector list; + bool clicked; + SDL_Rect offset; + + private: + uint16 cbWidth, cbHeight; + SDL_Surface * cbUp, * cbDown, * cbHover; + SDL_Surface * img; +}; + +#endif // __DRAGGABLEWINDOW_H__ diff --git a/apple2/src/gui/element.cpp b/apple2/src/gui/element.cpp new file mode 100755 index 0000000..dc73bb9 --- /dev/null +++ b/apple2/src/gui/element.cpp @@ -0,0 +1,160 @@ +// +// ELEMENT.CPP +// +// Graphical User Interface base class +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 02/02/2006 Created this file +// JLH 02/13/2006 Added backbuffer and rendering functions +// JLH 03/02/2006 Moved backbuffer destruction to destructor, added parent +// corner discovery +// + +#include "element.h" + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +//#define DEBUG_ELEMENT + +#ifdef DEBUG_ELEMENT +#include "log.h" +#endif + +// Initialize class variables + +SDL_Surface * Element::screen = NULL; +bool Element::needToRefreshScreen = false; + +Element::Element(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/, + Element * parentElement/*= NULL*/): parent(parentElement), backstore(NULL) +{ + extents.x = x, + extents.y = y, + extents.w = w, + extents.h = h; +} + +Element::Element(uint32 x, uint32 y, uint32 w, uint32 h, + uint8 fgR/*= 0xFF*/, uint8 fgG/*= 0xFF*/, uint8 fgB/*= 0xFF*/, uint8 fgA/*= 0xFF*/, + uint8 bgR/*= 0x00*/, uint8 bgG/*= 0x00*/, uint8 bgB/*= 0x00*/, uint8 bgA/*= 0xFF*/, + Element * parentElement/*= NULL*/): parent(parentElement), backstore(NULL) +{ + extents.x = x, + extents.y = y, + extents.w = w, + extents.h = h; + + // This *should* allow us to store our colors in an endian safe way... :-/ + uint8 * c = (uint8 *)&fgColor; + c[0] = fgR, c[1] = fgG, c[2] = fgB, c[3] = fgA; + c = (uint8 *)&bgColor; + c[0] = bgR, c[1] = bgG, c[2] = bgB, c[3] = bgA; +} + +Element::~Element() +{ + if (backstore) + { + RestoreScreenFromBackstore(); + SDL_FreeSurface(backstore); + needToRefreshScreen = true; + } +} + +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); +} + +//Badly named--!!! FIX !!! +//SDL_Rect Element::GetParentCorner(void) +SDL_Rect Element::GetScreenCoords(void) +{ + SDL_Rect rect; + rect.x = extents.x, rect.y = extents.y; + + // First, traverse the parent tree to get the absolute screen address... + + Element * currentParent = parent; + + while (currentParent) + { + rect.x += currentParent->extents.x; + rect.y += currentParent->extents.y; + currentParent = currentParent->parent; + } + + return rect; +} + +#if 0 +//May use this in the future... +SDL_Rect Element::GetParentRect(void) +{ + // If there is no parent, then return the entire screen as the parent's + // rectangle. + + SDL_Rect rect; + rect.x = 0, rect.y = 0, rect.w = screen->w, rect.h = screen->h; + + if (parent) + { + rect.x = parent->extents.x; + rect.y = parent->extents.y; + rect.w = parent->extents.w; + rect.h = parent->extents.h; + } + + return rect; +} +#endif + +void Element::CreateBackstore(void) +{ + backstore = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, + MASK_R, MASK_G, MASK_B, 0x00); + SDL_BlitSurface(screen, &extents, backstore, NULL); +} + +void Element::RestoreScreenFromBackstore(void) +{ + SDL_Rect r; + + r.x = extents.x; + r.y = extents.y; + SDL_BlitSurface(backstore, NULL, screen, &r); +} + +// +// Class methods +// + +void Element::SetScreen(SDL_Surface * s) +{ + screen = s; +} + +bool Element::ScreenNeedsRefreshing(void) +{ + return needToRefreshScreen; +} + +void Element::ScreenWasRefreshed(void) +{ + needToRefreshScreen = false; +} diff --git a/apple2/src/gui/element.h b/apple2/src/gui/element.h new file mode 100755 index 0000000..a53d001 --- /dev/null +++ b/apple2/src/gui/element.h @@ -0,0 +1,61 @@ +// +// ELEMENT.H +// +// Graphical User Interface base class +// All GUI elements are derived from this base class. +// + +#ifndef __ELEMENT_H__ +#define __ELEMENT_H__ + +// These are various GUI messages that can be sent to the SDL event handler + +enum { WINDOW_CLOSE, MENU_ITEM_CHOSEN, SCREEN_REFRESH_NEEDED }; + +#include +#include "types.h" + +class Element +{ + public: + Element(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0, + Element * parentElement = NULL); + Element(uint32 x, uint32 y, uint32 w, uint32 h, + uint8 fgR = 0xFF, uint8 fgG = 0xFF, uint8 fgB = 0xFF, uint8 fgA = 0xFF, + uint8 bgR = 0x00, uint8 bgG = 0x00, uint8 bgB = 0x00, uint8 bgA = 0xFF, + Element * parentElement = NULL); + virtual ~Element(); // Destructor cannot be pure virtual... + virtual void HandleKey(SDLKey key) = 0; // These are "pure" virtual functions... + virtual void HandleMouseMove(uint32 x, uint32 y) = 0; + virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown) = 0; + virtual void Draw(void) = 0; + virtual void Notify(Element *) = 0; + bool Inside(uint32 x, uint32 y); +//Badly named, though we may code something that does this... +// SDL_Rect GetParentCorner(void); + SDL_Rect GetScreenCoords(void); +#if 0 +//May use this in the future... + SDL_Rect GetParentRect(void); +#endif + void CreateBackstore(void); + void RestoreScreenFromBackstore(void); + // Class methods... + static void SetScreen(SDL_Surface *); + static bool ScreenNeedsRefreshing(void); + static void ScreenWasRefreshed(void); + + protected: + SDL_Rect extents; + uint32 state; + Element * parent; + uint32 fgColor; + uint32 bgColor; + SDL_Surface * backstore; + + // Class variables... + static SDL_Surface * screen; + static bool needToRefreshScreen; +}; + +#endif // __ELEMENT_H__ diff --git a/apple2/src/gui/font1.h b/apple2/src/gui/font1.h new file mode 100755 index 0000000..3f4f75d --- /dev/null +++ b/apple2/src/gui/font1.h @@ -0,0 +1,262 @@ +// +// 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/apple2/src/gui/font14pt.h b/apple2/src/gui/font14pt.h new file mode 100755 index 0000000..4a5b56e --- /dev/null +++ b/apple2/src/gui/font14pt.h @@ -0,0 +1,1640 @@ +#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/apple2/src/gui/gui.cpp b/apple2/src/gui/gui.cpp new file mode 100755 index 0000000..ef5ef97 --- /dev/null +++ b/apple2/src/gui/gui.cpp @@ -0,0 +1,211 @@ +// +// GUI.CPP +// +// Graphical User Interface support +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 02/03/2006 Created this file +// JLH 03/13/2006 Added functions to allow shutting down GUI externally +// + +// STILL TO FIX: +// +// - Memory leak on quitting with a window active +// - Multiple window handling +// + +#include "gui.h" +#include "menu.h" // Element class methods are pulled in here... +#include "window.h" +#include "video.h" + +// Debug support + +//#define DEBUG_MAIN_LOOP + +#ifdef DEBUG_MAIN_LOOP +#include "log.h" +#endif + + +GUI::GUI(SDL_Surface * mainSurface): mainMenu(new Menu()), menuItem(new MenuItems()) +{ + Element::SetScreen(mainSurface); +} + +GUI::~GUI() +{ + if (mainMenu) + delete mainMenu; + + if (menuItem) + delete menuItem; +} + +void GUI::AddMenuTitle(const char * title) +{ + menuItem->title = title; + menuItem->item.clear(); +} + +void GUI::AddMenuItem(const char * item, Element * (* a)(void)/*= NULL*/, SDLKey k/*= SDLK_UNKNOWN*/) +{ + menuItem->item.push_back(NameAction(item, a, k)); +} + +void GUI::CommitItemsToMenu(void) +{ + mainMenu->Add(*menuItem); +} + + +void GUI::Run(void) +{ + exitGUI = false; + + bool showMouse = true; + int mouseX = 0, mouseY = 0; + int oldMouseX = 0, oldMouseY = 0; + Element * mainWindow = NULL; + SDL_Event event; + + SDL_EnableKeyRepeat(150, 75); + // Initial update... +//Shouldn't we save the state of the GUI instead of doing things this way? +//We have a memory leak whenever a mainWindow is active and we quit... !!! FIX !!! + mainMenu->Draw(); + RenderScreenBuffer(); + + // Main loop + while (!exitGUI) + { + if (SDL_PollEvent(&event)) + { +#ifdef DEBUG_MAIN_LOOP +WriteLog("An event was found!"); +#endif + if (event.type == SDL_USEREVENT) + { +#ifdef DEBUG_MAIN_LOOP +WriteLog(" -- SDL_USEREVENT\n"); +#endif +//Mebbe add another user event for screen refresh? Why not! + 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 = (*(Element *(*)(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"... + } +//There's a *small* problem with this approach--if a window and a bunch of child +//widgets send this message, we'll get a bunch of unnecessary refresh events... +//This could be controlled by having the main window refresh itself intelligently... + +//What we could do instead is set a variable in Element and check it after the fact +//to see whether or not a refresh is needed. + +//Dirty rectangle is also possible... + else if (event.user.code == SCREEN_REFRESH_NEEDED) + RenderScreenBuffer(); + } + else if (event.type == SDL_ACTIVEEVENT) + { + if (event.active.state == SDL_APPMOUSEFOCUS) + showMouse = (event.active.gain ? true : false); + } + else if (event.type == SDL_KEYDOWN) + { +#ifdef DEBUG_MAIN_LOOP +WriteLog(" -- SDL_KEYDOWN\n"); +#endif + if (event.key.keysym.sym == SDLK_F5) + exitGUI = true; + + if (mainWindow) + mainWindow->HandleKey(event.key.keysym.sym); + else + mainMenu->HandleKey(event.key.keysym.sym); + } + else if (event.type == SDL_MOUSEMOTION) + { +#ifdef DEBUG_MAIN_LOOP +WriteLog(" -- SDL_MOUSEMOTION\n"); +#endif + 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) + { +#ifdef DEBUG_MAIN_LOOP +WriteLog(" -- SDL_MOSEBUTTONDOWN\n"); +#endif + 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) + { +#ifdef DEBUG_MAIN_LOOP +WriteLog(" -- SDL_MOUSEBUTTONUP\n"); +#endif + uint32 mx = event.button.x, my = event.button.y; + + if (mainWindow) + mainWindow->HandleMouseButton(mx, my, false); + else + mainMenu->HandleMouseButton(mx, my, false); + } +#ifdef DEBUG_MAIN_LOOP +else + WriteLog(" -- Unknown event\n"); +#endif + + if (Element::ScreenNeedsRefreshing()) + { +#ifdef DEBUG_MAIN_LOOP +WriteLog("Screen refresh called!\n"); +#endif + RenderScreenBuffer(); + Element::ScreenWasRefreshed(); + } + } + } + + SDL_EnableKeyRepeat(0, 0); +// return false; +} + +void GUI::Stop(void) +{ + exitGUI = true; +} diff --git a/apple2/src/gui/gui.h b/apple2/src/gui/gui.h new file mode 100755 index 0000000..b67783a --- /dev/null +++ b/apple2/src/gui/gui.h @@ -0,0 +1,35 @@ +// +// GUI.H +// +// Graphical User Interface support +// + +#ifndef __GUI_H__ +#define __GUI_H__ + +#include +#include + +class Menu; // Now *this* should work, since we've got pointers... +class MenuItems; +class Element; + +class GUI +{ + public: + GUI(SDL_Surface *); + ~GUI(); + void AddMenuTitle(const char *); + void AddMenuItem(const char *, Element * (* a)(void) = NULL, SDLKey k = SDLK_UNKNOWN); + void CommitItemsToMenu(void); + void Run(void); + void Stop(void); + + private: + Menu * mainMenu; + MenuItems * menuItem; + std::vector windowList; + bool exitGUI; +}; + +#endif // __GUI_H__ diff --git a/apple2/src/gui/guimisc.cpp b/apple2/src/gui/guimisc.cpp new file mode 100755 index 0000000..99a8e35 --- /dev/null +++ b/apple2/src/gui/guimisc.cpp @@ -0,0 +1,2767 @@ +// +// GUIMISC.CPP +// +// Graphical User Interface support functions +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 02/02/2006 Created this file +// JLH 03/13/2006 Abstracted out font to allow external fonts +// + +#include "guimisc.h" +#include "font14pt.h" +//Can't do this...! +//#include "charset.h" // For Apple II font (small) +#include +#include + + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +// Local variables +// This will enable us to set up any font without having it embedded here... + +static Font font((uint8 *)font2, FONT_WIDTH, FONT_HEIGHT); +static std::vector oldFontList; + + +void SetNewFont(Font newFont) +{ + oldFontList.push_back(font); + font.data = newFont.data, font.width = newFont.width, font.height = newFont.height; +} + +void RestoreOldFont(void) +{ + if (oldFontList.size() == 0) + return; + + font = oldFontList.back(); + oldFontList.pop_back(); +} + +uint32 GetFontWidth(void) +{ + return font.width; +} + +uint32 GetFontHeight(void) +{ + return font.height; +} + +// +// Draw text at the given x/y coordinates with transparency (255 is fully opaque, 0 is fully transparent). +// +void DrawStringTrans(SDL_Surface * screen, uint32 x, uint32 y, uint32 color, const char * text, ...) +{ + char string[4096]; + va_list arg; + + va_start(arg, text); + vsprintf(string, text, arg); + va_end(arg); + + uint8 * esColor = (uint8 *)&color; // Do things endian safe...! + uint8 trans = esColor[3]; + uint32 length = strlen(string); + + // Make a "stamp" surface (with built in alpha!) for constructing our font chars... + SDL_Surface * chr = SDL_CreateRGBSurface(SDL_SWSURFACE, font.width, font.height, 32, + MASK_R, MASK_G, MASK_B, MASK_A); + SDL_Rect rect; + rect.x = x, rect.y = y; + + for(uint32 i=0; ipixels)[xx + (yy * (chr->pitch / 4))] = color; + } + } + + SDL_BlitSurface(chr, NULL, screen, &rect); + rect.x += font.width; + } + + SDL_FreeSurface(chr); +} + +// +// Draw text at given x/y coords using foreground/background color combination +// +void DrawStringOpaque(SDL_Surface * screen, uint32 x, uint32 y, uint32 fg, uint32 bg, const char * text, ...) +{ + char string[4096]; + va_list arg; + + va_start(arg, text); + vsprintf(string, text, arg); + va_end(arg); + + uint8 * esColor = (uint8 *)&fg; // Do things endian safe...! + uint32 length = strlen(string); + + SDL_Rect destRect; + + destRect.x = x, destRect.y = y; + destRect.w = length * font.width, destRect.h = font.height; + + SDL_FillRect(screen, &destRect, bg); + + // Make a "stamp" surface (with built in alpha!) for constructing our font chars... + SDL_Surface * chr = SDL_CreateRGBSurface(SDL_SWSURFACE, font.width, font.height, 32, + MASK_R, MASK_G, MASK_B, MASK_A); + SDL_Rect rect; + rect.x = x, rect.y = y; + + for(uint32 i=0; ipixels)[xx + (yy * (chr->pitch / 4))] = fg; + } + } + + SDL_BlitSurface(chr, NULL, screen, &rect); + rect.x += font.width; + } + + SDL_FreeSurface(chr); +} + + +// +// Various GUI bitmaps +// + +// These representations *should* be endian safe. + +uint8 closeBox[] = { + 15 / 256, 15 % 256, // width (HI byte, LO byte) + 15 / 256, 15 % 256, // height (HI byte, LO byte) + + 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00 +}; + +uint8 closeBoxHover[] = { + 15 / 256, 15 % 256, // width (HI byte, LO byte) + 15 / 256, 15 % 256, // height (HI byte, LO byte) + + 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xBE, 0x63, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xFF, 0xB7, 0x52, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xFF, 0xAF, 0x40, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFF, 0xA2, 0x20, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xFB, 0x6B, 0x6B, 0xFF, 0xE7, 0x58, 0x58, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00 +}; + +uint8 closeBoxDown[] = { + 15 / 256, 15 % 256, // width (HI byte, LO byte) + 15 / 256, 15 % 256, // height (HI byte, LO byte) + + 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xBD, 0x6E, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xCC, 0x77, 0x00, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xE2, 0x86, 0x07, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xF7, 0x9D, 0x1F, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0xED, 0x38, 0x38, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xC0, 0x2B, 0x2B, 0xFF, 0xE2, 0x1D, 0x1D, 0xFF, 0xED, 0x38, 0x38, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0xED, 0x38, 0x38, 0xFF, 0x00, 0x00, 0x00, 0x00 +}; + +#include "fd-img-128x128.c" + + +#if 0 +#include +#include // For MacOS dependency +#include +#include +#include +#include +#include +#include // For toupper() +#include "settings.h" +#include "tom.h" +#include "video.h" +#include "clock.h" +#include "font1.h" +#include "font14pt.h" // Also 15, 16, 17, 18 +#include "guielements.h" +#include "crc32.h" +#include "zlib.h" +#include "unzip.h" +#include "sdlemu_opengl.h" +#include "gui.h" + +using namespace std; // For STL stuff + +// Private function prototypes + +class Window; // Forward declaration... + +//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, ...); +Window * LoadROM(void); +Window * ResetJaguar(void); +Window * ResetJaguarCD(void); +Window * RunEmu(void); +Window * Quit(void); +Window * About(void); +Window * MiscOptions(void); + +int gzfilelength(gzFile gd); + +// External variables + +extern uint8 * jaguar_mainRam; +extern uint8 * jaguar_mainRom; +extern uint8 * jaguar_bootRom; +extern uint8 * jaguar_CDBootROM; +extern bool BIOSLoaded; +extern bool CDBIOSLoaded; + +// Local global variables + +bool exitGUI = false; // GUI (emulator) done variable +int mouseX = 0, mouseY = 0; +uint32 background[1280 * 256]; // GUI background buffer + +char separator[] = "--------------------------------------------------------"; + +// +// Case insensitive string compare function +// Taken straight out of Thinking In C++ by Bruce Eckel. Thanks Bruce! +// + +int stringCmpi(const string &s1, const string &s2) +{ + // Select the first element of each string: + 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(); +} + +// +// Local GUI classes +// + +enum { WINDOW_CLOSE, MENU_ITEM_CHOSEN }; + +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; } + virtual void HandleKey(SDLKey key) = 0; // These are "pure" virtual functions... + 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(int16 * s, uint32 p) { screenBuffer = s, pitch = p; } + static void SetScreenAndPitch(uint32 * s, uint32 p) { screenBuffer = s, pitch = p; } + + protected: + SDL_Rect extents; + uint32 state; + // Class variables... +// static int16 * screenBuffer; + static uint32 * screenBuffer; + static uint32 pitch; +}; + +// Initialize class variables (Element) +//int16 * Element::screenBuffer = NULL; +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); +} + + +// +// Button class +// + +class Button: public Element +{ + public: + 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(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(uint32 x, uint32 y, uint32 * p): Element(x, y, 0, 0), + 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(uint32 x, uint32 y, uint32 w, uint32 h, string s): Element(x, y, w, h), + activated(false), clicked(false), inside(false), fgColor(0xFFFFFFFF), + bgColor(0xFF00FF00), pic(NULL), text(s), elementToTell(NULL) {} + Button(uint32 x, uint32 y, 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; } + 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) { return activated; } + void SetNotificationElement(Element * e) { elementToTell = e; } + + protected: + bool activated, clicked, inside; + uint32 fgColor, bgColor; + uint32 * pic, * picHover, * picDown; + string text; + Element * elementToTell; +}; + +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); + } +} + + +// +// PushButton class +// + +class PushButton: public Element +{ +// 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 !!! + + public: +// PushButton(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0): Element(x, y, w, h), +// activated(false), clicked(false), inside(false), fgColor(0xFFFF), +// bgColor(0x03E0), pic(NULL), elementToTell(NULL) {} +// PushButton(uint32 x, uint32 y, bool * st, string s): Element(x, y, 8, 8), state(st), +// inside(false), text(s) { if (st == NULL) state = &internalState; } + PushButton(uint32 x, uint32 y, bool * st, string s): Element(x, y, 16, 16), state(st), + inside(false), text(s) { if (st == NULL) state = &internalState; } +/* Button(uint32 x, uint32 y, uint32 w, uint32 h, uint32 * p): Element(x, y, w, h), + activated(false), clicked(false), inside(false), fgColor(0xFFFF), + bgColor(0x03E0), pic(p), elementToTell(NULL) {} + Button(uint32 x, uint32 y, uint32 * p): Element(x, y, 0, 0), + activated(false), clicked(false), inside(false), fgColor(0xFFFF), + bgColor(0x03E0), pic(p), elementToTell(NULL) + { if (pic) extents.w = pic[0], extents.h = pic[1]; } + Button(uint32 x, uint32 y, uint32 w, uint32 h, string s): Element(x, y, w, h), + activated(false), clicked(false), inside(false), fgColor(0xFFFF), + bgColor(0x03E0), pic(NULL), text(s), elementToTell(NULL) {} + PushButton(uint32 x, uint32 y, string s): Element(x, y, 0, 8), + activated(false), clicked(false), inside(false), fgColor(0xFFFF), + bgColor(0x03E0), pic(NULL), text(s), elementToTell(NULL) + { extents.w = s.length() * 8; }*/ + 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) { return activated; } +// void SetNotificationElement(Element * e) { elementToTell = e; } + + protected: + bool * state; + bool inside; +// bool activated, clicked, inside; +// uint16 fgColor, bgColor; +// uint32 * pic; + string text; +// Element * elementToTell; + bool internalState; +}; + +void PushButton::HandleMouseMove(uint32 x, uint32 y) +{ + inside = Inside(x, y); +} + +void PushButton::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) +{ + if (inside && mouseDown) + { +/* 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); + }*/ + *state = !(*state); + } +// else +// clicked = activated = false; +} + +void PushButton::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) +{ +/* uint32 addr = (extents.x + offsetX) + ((extents.y + offsetY) * pitch); + + for(uint32 y=0; y 0) + DrawString(screenBuffer, extents.x + offsetX + 24, extents.y + offsetY, false, "%s", text.c_str()); +} + + +// +// SlideSwitch class +// + +class SlideSwitch: public Element +{ +// How to handle? +// Save state externally? +//Seems to be handled the same as PushButton, but without sanity checks. !!! FIX !!! + + public: + SlideSwitch(uint32 x, uint32 y, bool * st, string s1, string s2): Element(x, y, 16, 32), state(st), + inside(false), text1(s1), text2(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 *) {} +// bool ButtonClicked(void) { return activated; } +// void SetNotificationElement(Element * e) { elementToTell = e; } + + protected: + bool * state; + bool inside; +// bool activated, clicked, inside; +// uint16 fgColor, bgColor; +// uint32 * pic; + string text1, text2; +// Element * elementToTell; +}; + +void SlideSwitch::HandleMouseMove(uint32 x, uint32 y) +{ + inside = Inside(x, y); +} + +void SlideSwitch::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) +{ + if (inside && mouseDown) + { +/* 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); + }*/ + *state = !(*state); + } +// else +// clicked = activated = false; +} + +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()); +} + + +// +// Window class +// + +class Window: public Element +{ + public: +/* Window(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0): Element(x, y, w, h), + fgColor(0x4FF0), bgColor(0xFE10) + { close = new Button(w - 8, 1, closeBox); list.push_back(close); }*/ + 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); } + 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); +// bool WindowActive(void) { return true; }//return !close->ButtonClicked(); } + + protected: +// bool clicked, inside; + 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... + vector list; +}; + +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); + } +} + + +// +// Static text class +// + +class Text: public Element +{ + public: +// Text(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0): Element(x, y, w, h), +// fgColor(0x4FF0), bgColor(0xFE10) {} +// Text(uint32 x, uint32 y, string s, uint16 fg = 0x4FF0, uint16 bg = 0xFE10): Element(x, y, 0, 0), +// fgColor(fg), bgColor(bg), text(s) {} +//4FF0 -> 010011 11111 10000 -> 0100 1101 1111 1111 1000 0100 -> 4D FF 84 +//FE10 -> 111111 10000 10000 -> 1111 1111 1000 0100 1000 0100 -> FF 84 84 + Text(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0): Element(x, y, w, h), + fgColor(0xFF8484FF), bgColor(0xFF84FF4D) {} + Text(uint32 x, uint32 y, string s, uint32 fg = 0xFF8484FF, uint32 bg = 0xFF84FF4D): + Element(x, y, 0, 0), fgColor(fg), bgColor(bg), text(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: + uint32 fgColor, bgColor; + string text; +}; + +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()); +} + + +// +// Static image class +// + +class Image: public Element +{ + public: + Image(uint32 x, uint32 y, const void * img): Element(x, y, 0, 0), image(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; +}; + +void Image::Draw(uint32 offsetX/*= 0*/, uint32 offsetY/*= 0*/) +{ + if (image != NULL) + DrawTransparentBitmap(screenBuffer, extents.x + offsetX, extents.y + offsetY, image); +} + + +// +// TextEdit class +// + +class TextEdit: public Element +{ + public: + 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(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) {} + 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; + string text; + uint32 caretPos; + uint32 maxScreenSize; +}; + +//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?) +} + + +// +// ListBox class +// + +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) { elementToTell = e; } + void AddItem(string s); + string GetSelectedItem(void); + + protected: + bool thumbClicked; + uint32 windowPtr, cursor, limit; + uint32 charWidth, charHeight; // Box width/height in characters + Element * elementToTell; + Button upArrow, downArrow, upArrow2; + vector item; + + private: + uint32 yRelativePoint; +}; + +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::AddItem(string s) +{ + // Do a simple insertion sort + bool inserted = false; + + for(vector::iterator i=item.begin(); i charHeight ? charHeight : item.size()); +} + +string ListBox::GetSelectedItem(void) +{ + return item[windowPtr + cursor]; +} + + +// +// FileList class +// + +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) { Window::HandleMouseMove(x, y); } + virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown) { Window::HandleMouseButton(x, y, mouseDown); } + virtual void Draw(uint32 offsetX = 0, uint32 offsetY = 0) { Window::Draw(offsetX, offsetY); } + virtual void Notify(Element * e); + + protected: + ListBox * files; + Button * load; +}; + +//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); + +//!!! 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(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::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); +} + + +// +// Menu class & supporting structs/classes +// + +struct NameAction +{ + string name; + Window * (* action)(void); + SDLKey hotKey; + + NameAction(string n, Window * (* a)(void) = NULL, SDLKey k = SDLK_UNKNOWN): name(n), + action(a), hotKey(k) {} +}; + +class MenuItems +{ + public: + MenuItems(): charLength(0) {} + 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); } + + string title; + 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, +/* uint16 fgc = 0x1CFF, uint16 bgc = 0x000F, uint16 fgch = 0x421F, + uint16 bgch = 0x1CFF): Element(x, y, w, h), activated(false), clicked(false),*/ +/* uint32 fgc = 0xFF3F3F00, uint32 bgc = 0x7F000000, uint32 fgch = 0xFF878700, + uint32 bgch = 0xFF3F3F00): Element(x, y, w, h), activated(false), clicked(false),*/ +/* uint32 fgc = 0xFFFF3F3F, uint32 bgc = 0xFF7F0000, uint32 fgch = 0xFFFF8787, + uint32 bgch = 0xFFFF3F3F): Element(x, y, w, h), activated(false), clicked(false),*/ + 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) {} + 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; +// uint16 fgColor, bgColor, fgColorHL, bgColorHL; + uint32 fgColor, bgColor, fgColorHL, bgColorHL; + int menuChosen, menuItemChosen; + + private: + vector itemList; +}; + +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; +} + + +//Do we even *need* this? +//Doesn't seem like it... +/*class RootWindow: public Window +{ + public: + RootWindow(Menu * m, Window * w = NULL): menu(m), window(w) {} +//Do we even need to care about this crap? +// { extents.x = extents.y = 0, extents.w = 320, extents.h = 240; } + 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 *) {} + + private: + Menu * menu; + Window * window; + int16 * rootImage[1280 * 240 * 2]; +};//*/ + + +// +// 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 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) + { + 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 (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 (!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) + + // 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", jaguar_mainRom_crc32); + + 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, "Virtual Jaguar CVS %s", __DATE__); + sprintf(buf, "CVS %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)); + + 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; +} + + +// +// Generic ROM loading +// +uint32 JaguarLoadROM(uint8 * rom, char * path) +{ +// We really should have some kind of sanity checking for the ROM size here to prevent +// a buffer overflow... !!! FIX !!! + uint32 romSize = 0; + +WriteLog("JaguarLoadROM: Attempting to load file '%s'...", path); + char * ext = strrchr(path, '.'); +if (ext == NULL) + WriteLog("FAILED!\n"); +else + WriteLog("Succeeded in finding extension (%s)!\n", ext); + + if (ext != NULL) + { + WriteLog("VJ: Loading \"%s\"...", path); + + if (strcasecmp(ext, ".zip") == 0) + { + // Handle ZIP file loading here... + WriteLog("(ZIPped)..."); + + if (load_zipped_file(0, 0, path, NULL, &rom, &romSize) == -1) + { + WriteLog("Failed!\n"); + return 0; + } + } + else + { +/* FILE * fp = fopen(path, "rb"); + + if (fp == NULL) + { + WriteLog("Failed!\n"); + return 0; + } + + fseek(fp, 0, SEEK_END); + romSize = ftell(fp); + fseek(fp, 0, SEEK_SET); + fread(rom, 1, romSize, fp); + fclose(fp);*/ + + // Handle gzipped files transparently [Adam Green]... + + gzFile fp = gzopen(path, "rb"); + + if (fp == NULL) + { + WriteLog("Failed!\n"); + return 0; + } + + romSize = gzfilelength(fp); + gzseek(fp, 0, SEEK_SET); + gzread(fp, rom, romSize); + gzclose(fp); + } + + WriteLog("OK (%i bytes)\n", romSize); + } + + return romSize; +} + +// +// Jaguar file loading +// +bool JaguarLoadFile(char * path) +{ +// jaguarRomSize = JaguarLoadROM(mem, path); + jaguarRomSize = JaguarLoadROM(jaguar_mainRom, path); + +/*//This is not *nix friendly for some reason... +// if (!UserSelectFile(path, newPath)) + if (!UserSelectFile((strlen(path) == 0 ? (char *)"." : path), newPath)) + { + WriteLog("VJ: Could not find valid ROM in directory \"%s\"...\nAborting!\n", path); + log_done(); + exit(0); + }*/ + + if (jaguarRomSize == 0) + { +// WriteLog("VJ: Could not load ROM from file \"%s\"...\nAborting!\n", newPath); + WriteLog("GUI: Could not load ROM from file \"%s\"...\nAborting load!\n", path); +// Need to do something else here, like throw up an error dialog instead of aborting. !!! FIX !!! +// log_done(); +// exit(0); + return false; // This is a start... + } + + jaguar_mainRom_crc32 = crc32_calcCheckSum(jaguar_mainRom, jaguarRomSize); + WriteLog("CRC: %08X\n", (unsigned int)jaguar_mainRom_crc32); + eeprom_init(); + + jaguarRunAddress = 0x802000; + + char * ext = strrchr(path, '.'); // Get the file's extension for non-cartridge checking + +//NOTE: Should fix JaguarLoadROM() to replace .zip with what's *in* the zip (.abs, .j64, etc.) + if (strcasecmp(ext, ".rom") == 0) + { + // File extension ".ROM": Alpine image that loads/runs at $802000 + WriteLog("GUI: Setting up homebrew (ROM)... Run address: 00802000, length: %08X\n", jaguarRomSize); + + for(int i=jaguarRomSize-1; i>=0; i--) + jaguar_mainRom[0x2000 + i] = jaguar_mainRom[i]; + + memset(jaguar_mainRom, 0xFF, 0x2000); +/* memcpy(jaguar_mainRam, jaguar_mainRom, jaguarRomSize); + memset(jaguar_mainRom, 0xFF, 0x600000); + memcpy(jaguar_mainRom + 0x2000, jaguar_mainRam, jaguarRomSize); + memset(jaguar_mainRam, 0x00, 0x400000);*/ + +/* +Stubulator ROM vectors... +handler 001 at $00E00008 +handler 002 at $00E008DE +handler 003 at $00E008E2 +handler 004 at $00E008E6 +handler 005 at $00E008EA +handler 006 at $00E008EE +handler 007 at $00E008F2 +handler 008 at $00E0054A +handler 009 at $00E008FA +handler 010 at $00000000 +handler 011 at $00000000 +handler 012 at $00E008FE +handler 013 at $00E00902 +handler 014 at $00E00906 +handler 015 at $00E0090A +handler 016 at $00E0090E +handler 017 at $00E00912 +handler 018 at $00E00916 +handler 019 at $00E0091A +handler 020 at $00E0091E +handler 021 at $00E00922 +handler 022 at $00E00926 +handler 023 at $00E0092A +handler 024 at $00E0092E +handler 025 at $00E0107A +handler 026 at $00E0107A +handler 027 at $00E0107A +handler 028 at $00E008DA +handler 029 at $00E0107A +handler 030 at $00E0107A +handler 031 at $00E0107A +handler 032 at $00000000 + +Let's try setting up the illegal instruction vector for a stubulated jaguar... +*/ +/* SET32(jaguar_mainRam, 0x08, 0x00E008DE); + SET32(jaguar_mainRam, 0x0C, 0x00E008E2); + SET32(jaguar_mainRam, 0x10, 0x00E008E6); // <-- Should be here (it is)... + SET32(jaguar_mainRam, 0x14, 0x00E008EA);//*/ + + // Try setting the vector to say, $1000 and putting an instruction there that loops forever: + // This kludge works! Yeah! + SET32(jaguar_mainRam, 0x10, 0x00001000); + SET16(jaguar_mainRam, 0x1000, 0x60FE); // Here: bra Here + } + else if (strcasecmp(ext, ".abs") == 0) + { + // File extension ".ABS": Atari linker output file with header (w/o is useless to us here) + +/* +ABS Format sleuthing (LBUGDEMO.ABS): + +000000 60 1B 00 00 05 0C 00 04 62 C0 00 00 04 28 00 00 +000010 12 A6 00 00 00 00 00 80 20 00 FF FF 00 80 25 0C +000020 00 00 40 00 + +DRI-format file detected... +Text segment size = 0x0000050c bytes +Data segment size = 0x000462c0 bytes +BSS Segment size = 0x00000428 bytes +Symbol Table size = 0x000012a6 bytes +Absolute Address for text segment = 0x00802000 +Absolute Address for data segment = 0x0080250c +Absolute Address for BSS segment = 0x00004000 + +(CRZDEMO.ABS): +000000 01 50 00 03 00 00 00 00 00 03 83 10 00 00 05 3b +000010 00 1c 00 03 00 00 01 07 00 00 1d d0 00 03 64 98 +000020 00 06 8b 80 00 80 20 00 00 80 20 00 00 80 3d d0 + +000030 2e 74 78 74 00 00 00 00 00 80 20 00 00 80 20 00 .txt (+36 bytes) +000040 00 00 1d d0 00 00 00 a8 00 00 00 00 00 00 00 00 +000050 00 00 00 00 00 00 00 20 +000058 2e 64 74 61 00 00 00 00 00 80 3d d0 00 80 3d d0 .dta (+36 bytes) +000068 00 03 64 98 00 00 1e 78 00 00 00 00 00 00 00 00 +000078 00 00 00 00 00 00 00 40 +000080 2e 62 73 73 00 00 00 00 00 00 50 00 00 00 50 00 .bss (+36 bytes) +000090 00 06 8b 80 00 03 83 10 00 00 00 00 00 00 00 00 +0000a0 00 00 00 00 00 00 00 80 + +Header size is $A8 bytes... + +BSD/COFF format file detected... +3 sections specified +Symbol Table offset = 230160 ($00038310) +Symbol Table contains 1339 symbol entries ($0000053B) +The additional header size is 28 bytes ($001C) +Magic Number for RUN_HDR = 0x00000107 +Text Segment Size = 7632 ($00001DD0) +Data Segment Size = 222360 ($00036498) +BSS Segment Size = 428928 ($00068B80) +Starting Address for executable = 0x00802000 +Start of Text Segment = 0x00802000 +Start of Data Segment = 0x00803dd0 +*/ + if (jaguar_mainRom[0] == 0x60 && jaguar_mainRom[1] == 0x1B) + { + uint32 loadAddress = GET32(jaguar_mainRom, 0x16), //runAddress = GET32(jaguar_mainRom, 0x2A), + codeSize = GET32(jaguar_mainRom, 0x02) + GET32(jaguar_mainRom, 0x06); + WriteLog("GUI: Setting up homebrew (ABS-1)... Run address: %08X, length: %08X\n", loadAddress, codeSize); + + if (loadAddress < 0x800000) + memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x24, codeSize); + else + { + for(int i=codeSize-1; i>=0; i--) + jaguar_mainRom[(loadAddress - 0x800000) + i] = jaguar_mainRom[i + 0x24]; +/* memcpy(jaguar_mainRam, jaguar_mainRom + 0x24, codeSize); + memset(jaguar_mainRom, 0xFF, 0x600000); + memcpy(jaguar_mainRom + (loadAddress - 0x800000), jaguar_mainRam, codeSize); + memset(jaguar_mainRam, 0x00, 0x400000);*/ + } + + jaguarRunAddress = loadAddress; + } + else if (jaguar_mainRom[0] == 0x01 && jaguar_mainRom[1] == 0x50) + { + uint32 loadAddress = GET32(jaguar_mainRom, 0x28), runAddress = GET32(jaguar_mainRom, 0x24), + codeSize = GET32(jaguar_mainRom, 0x18) + GET32(jaguar_mainRom, 0x1C); + WriteLog("GUI: Setting up homebrew (ABS-2)... Run address: %08X, length: %08X\n", runAddress, codeSize); + + if (loadAddress < 0x800000) + memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0xA8, codeSize); + else + { + for(int i=codeSize-1; i>=0; i--) + jaguar_mainRom[(loadAddress - 0x800000) + i] = jaguar_mainRom[i + 0xA8]; +/* memcpy(jaguar_mainRam, jaguar_mainRom + 0xA8, codeSize); + memset(jaguar_mainRom, 0xFF, 0x600000); + memcpy(jaguar_mainRom + (loadAddress - 0x800000), jaguar_mainRam, codeSize); + memset(jaguar_mainRam, 0x00, 0x400000);*/ + } + + jaguarRunAddress = runAddress; + } + else + { + WriteLog("GUI: Couldn't find correct ABS format: %02X %02X\n", jaguar_mainRom[0], jaguar_mainRom[1]); + return false; + } + } + else if (strcasecmp(ext, ".jag") == 0) + { + // File extension ".JAG": Atari server file with header +//NOTE: The bytes 'JAGR' should also be at position $1C... +// Also, there's *always* a $601A header at position $00... + if (jaguar_mainRom[0] == 0x60 && jaguar_mainRom[1] == 0x1A) + { + uint32 loadAddress = GET32(jaguar_mainRom, 0x22), runAddress = GET32(jaguar_mainRom, 0x2A); +//This is not always right! Especially when converted via bin2jag1!!! +//We should have access to the length of the furshlumiger file that was loaded anyway! +//Now, we do! ;-) +// uint32 progLength = GET32(jaguar_mainRom, 0x02); +//jaguarRomSize +//jaguarRunAddress +// WriteLog("Jaguar: Setting up PD ROM... Run address: %08X, length: %08X\n", runAddress, progLength); +// memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x2E, progLength); + WriteLog("GUI: Setting up homebrew (JAG)... Run address: %08X, length: %08X\n", runAddress, jaguarRomSize - 0x2E); + memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x2E, jaguarRomSize - 0x2E); +// SET32(jaguar_mainRam, 4, runAddress); + jaguarRunAddress = runAddress; + } + else + return false; + } + // .J64 (Jaguar cartridge ROM image) is implied by the FileList object... + + return true; +} + +// +// Get the length of a (possibly) gzipped file +// +int gzfilelength(gzFile gd) +{ + int size = 0, length = 0; + unsigned char buffer[0x10000]; + + gzrewind(gd); + + do + { + // Read in chunks until EOF + size = gzread(gd, buffer, 0x10000); + + if (size <= 0) + break; + + length += size; + } + while (!gzeof(gd)); + + gzrewind(gd); + return length; +} +#endif diff --git a/apple2/src/gui/guimisc.h b/apple2/src/gui/guimisc.h new file mode 100755 index 0000000..6382cc9 --- /dev/null +++ b/apple2/src/gui/guimisc.h @@ -0,0 +1,60 @@ +// +// GUIMISC.H +// +// Graphical User Interface support functions +// + +#ifndef __GUIMISC_H__ +#define __GUIMISC_H__ + +#include +#include +#include "types.h" + +// Useful structs + +struct Font +{ + Font(uint8 * d = NULL, uint32 w = 0, uint32 h = 0): data(d), width(w), height(h) {} + + uint8 * data; + uint32 width, height; +}; + +// 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[]; +};*/ + +// A better way is just to use the following format: +// bytes 0-1: width (HI/LO) +// bytes 2-3: height (HI/LO) +// bytes 4-n: pixel data in RGBA format + +// Global functions + +//void SetFont(uint8 *, uint32, uint32); +void SetNewFont(Font); +void RestoreOldFont(void); +uint32 GetFontWidth(void); +uint32 GetFontHeight(void); +void DrawStringTrans(SDL_Surface * screen, uint32 x, uint32 y, uint32 color, const char * text, ...); +void DrawStringOpaque(SDL_Surface * screen, uint32 x, uint32 y, uint32 fg, uint32 bg, const char * text, ...); + +void DrawStringOpaqueSmall(SDL_Surface * screen, uint32 x, uint32 y, uint32 fg, uint32 bg, const char * text, ...); + +// GUI bitmaps (exported) + +extern uint8 closeBox[]; +extern uint8 closeBoxDown[]; +extern uint8 closeBoxHover[]; +extern uint8 floppyDiskImg[]; + +#endif // __GUIMISC_H__ diff --git a/apple2/src/gui/menu.cpp b/apple2/src/gui/menu.cpp new file mode 100755 index 0000000..06d696b --- /dev/null +++ b/apple2/src/gui/menu.cpp @@ -0,0 +1,316 @@ +// +// MENU.CPP +// +// Graphical User Interface menu support +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 02/09/2006 Created this file +// JLH 02/13/2006 Added rendering support +// + +#include "menu.h" +#include "guimisc.h" + +//#define DEBUG_MENU + +#ifdef DEBUG_MENU +#include "log.h" +#endif + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +// +// MenuItems class implementation +// + +MenuItems::MenuItems(): charLength(0), popupBackstore(NULL) +{ +} + +bool MenuItems::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); +} + +// +// Menu class implementation +// + +Menu::Menu(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/, + uint8 fgcR/*= 0x00*/, uint8 fgcG/*= 0x00*/, uint8 fgcB/*= 0x7F*/, uint8 fgcA/*= 0xFF*/, + uint8 bgcR/*= 0x3F*/, uint8 bgcG/*= 0x3F*/, uint8 bgcB/*= 0xFF*/, uint8 bgcA/*= 0xFF*/, + uint8 fgchR/*= 0x3F*/, uint8 fgchG/*= 0x3F*/, uint8 fgchB/*= 0xFF*/, uint8 fgchA/*= 0xFF*/, + uint8 bgchR/*= 0x87*/, uint8 bgchG/*= 0x87*/, uint8 bgchB/*= 0xFF*/, uint8 bgchA/*= 0xFF*/): + Element(x, y, w, GetFontHeight(), fgcR, fgcG, fgcB, fgcA, bgcR, bgcG, bgcB, bgcA), + activated(false), clicked(false), + inside(0), insidePopup(0), menuChosen(-1), menuItemChosen(-1), + activatedSave(false), clickedSave(false), + insideSave(0), insidePopupSave(0), menuChosenSave(-1), menuItemChosenSave(-1) +{ + // This *should* allow us to store our colors in an endian safe way... :-/ + uint8 * c = (uint8 *)&fgColorHL; + c[0] = fgchR, c[1] = fgchG, c[2] = fgchB, c[3] = fgchA; + c = (uint8 *)&bgColorHL; + c[0] = bgchR, c[1] = bgchG, c[2] = bgchB, c[3] = bgchA; +} + +Menu::~Menu() +{ + for(uint32 i=0; i Inside Menu::HandleMouseMove()...\n"); +#endif + SaveStateVariables(); + + inside = insidePopup = 0; + + if (Inside(x, y)) + { + // Find out *where* we are inside the menu bar + uint32 xpos = extents.x; + + 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) / GetFontHeight()) + 1; + menuItemChosen = insidePopup - 1; + } + + CheckStateAndRedrawIfNeeded(); +} + +void Menu::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) +{ +#ifdef DEBUG_MENU +WriteLog("--> Inside Menu::HandleMouseButton()...\n"); +#endif + SaveStateVariables(); + + 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) + { + 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; + } + + if (!inside && !insidePopup && mouseDown) + clicked = false, menuChosen = menuItemChosen = -1; + } + + CheckStateAndRedrawIfNeeded(); +} + +void Menu::Draw(void) +{ +#ifdef DEBUG_MENU +WriteLog("--> Inside Menu::Draw()...\n"); +#endif + char separator[] = "--------------------------------------------------------"; + + uint32 xpos = extents.x; + + for(uint32 i=0; i Attempting to prime pubs...\n pubs x/y/w/h = %u/%u/%u/%u\n surface = %08X\n", + itemList[menuChosen].extents.x, + itemList[menuChosen].extents.y, + itemList[menuChosen].extents.w, + itemList[menuChosen].extents.h, + itemList[menuChosen].popupBackstore); +#endif + SDL_BlitSurface(screen, &itemList[menuChosen].extents, itemList[menuChosen].popupBackstore, NULL); +#ifdef DEBUG_MENU + } +#endif + + // Draw sub menu (but only if active) + if (clicked) + { + uint32 ypos = extents.y + GetFontHeight() + 1; + + for(uint32 i=0; i 0) + DrawStringOpaque(screen, itemList[menuChosen].extents.x, ypos, + color1, color2, " %-*.*s ", itemList[menuChosen].charLength, + itemList[menuChosen].charLength, itemList[menuChosen].item[i].name.c_str()); + else + DrawStringOpaque(screen, itemList[menuChosen].extents.x, ypos, + fgColor, bgColor, "%.*s", itemList[menuChosen].charLength + 2, separator); + + ypos += GetFontHeight(); + } + } + + // Do cleanup if we're done with the popup menu + if (clickedSave && !clicked) // If we transitioned from popup to no popup + { + SDL_Rect r; + + r.x = itemList[menuChosenSave].extents.x; + r.y = itemList[menuChosenSave].extents.y; + SDL_BlitSurface(itemList[menuChosenSave].popupBackstore, NULL, screen, &r); + } + + needToRefreshScreen = true; +} + +void Menu::Notify(Element *) +{ +} + +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 + GetFontHeight() + 1; + mi.extents.w = (mi.charLength + 2) * GetFontWidth(); + mi.extents.h = mi.item.size() * GetFontHeight(); + + mi.popupBackstore = SDL_CreateRGBSurface(SDL_SWSURFACE, mi.extents.w, mi.extents.h, 32, + MASK_R, MASK_G, MASK_B, 0x00); + + itemList.push_back(mi); + extents.w += (mi.title.length() + 2) * GetFontWidth(); + +//This is incorrect--this should be sampled just *before* we draw the popup! !!! FIX !!! [DONE] +// SDL_BlitSurface(screen, &mi.extents, mi.popupBackstore, NULL); +#ifdef DEBUG_MENU +WriteLog("--> Added menu item...\n pubs x/y/w/h = %u/%u/%u/%u\n surface = %08X\n", + mi.extents.x, + mi.extents.y, + mi.popupBackstore->w, + mi.popupBackstore->h, + mi.popupBackstore); +#endif +} + +void Menu::SaveStateVariables(void) +{ + activatedSave = activated; + clickedSave = clicked; + insideSave = inside; + insidePopupSave = insidePopup; + menuChosenSave = menuChosen; + menuItemChosenSave = menuItemChosen; +} + +void Menu::CheckStateAndRedrawIfNeeded(void) +{ + // Check to see if any of our state variables changed since we last saved them... + if (activated != activatedSave || clicked != clickedSave + || inside != insideSave || insidePopup != insidePopupSave + || menuChosen != menuChosenSave || menuItemChosen != menuItemChosenSave) + Draw(); +} diff --git a/apple2/src/gui/menu.h b/apple2/src/gui/menu.h new file mode 100755 index 0000000..c4c47a0 --- /dev/null +++ b/apple2/src/gui/menu.h @@ -0,0 +1,68 @@ +// +// MENU.H +// +// Graphical User Interface menu support +// + +#ifndef __MENU_H__ +#define __MENU_H__ + +#include +#include +#include "window.h" + +struct NameAction +{ + std::string name; + Element * (* action)(void); + SDLKey hotKey; + + NameAction(std::string n, Element * (* a)(void) = NULL, SDLKey k = SDLK_UNKNOWN): name(n), + action(a), hotKey(k) {} +}; + +class MenuItems +{ + public: + MenuItems(); + bool Inside(uint32 x, uint32 y); + + std::string title; + std::vector item; + uint32 charLength; + SDL_Rect extents; + SDL_Surface * popupBackstore; +}; + +class Menu: public Element +{ + public: + Menu(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0, + uint8 fgcR = 0x00, uint8 fgcG = 0x00, uint8 fgcB = 0x7F, uint8 fgcA = 0xFF, + uint8 bgcR = 0x3F, uint8 bgcG = 0x3F, uint8 bgcB = 0xFF, uint8 bgcA = 0xFF, + uint8 fgchR = 0x3F, uint8 fgchG = 0x3F, uint8 fgchB = 0xFF, uint8 fgchA = 0xFF, + uint8 bgchR = 0x87, uint8 bgchG = 0x87, uint8 bgchB = 0xFF, uint8 bgchA = 0xFF); + ~Menu(); + virtual void HandleKey(SDLKey key); + virtual void HandleMouseMove(uint32 x, uint32 y); + virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); + virtual void Draw(void); + virtual void Notify(Element *); + void Add(MenuItems mi); + void SaveStateVariables(void); + void CheckStateAndRedrawIfNeeded(void); + + protected: + bool activated, clicked; + uint32 inside, insidePopup; + int menuChosen, menuItemChosen; + uint32 fgColorHL, bgColorHL; + + private: + std::vector itemList; + bool activatedSave, clickedSave; + uint32 insideSave, insidePopupSave; + int menuChosenSave, menuItemChosenSave; +}; + +#endif // __MENU_H__ diff --git a/apple2/src/gui/textedit.cpp b/apple2/src/gui/textedit.cpp new file mode 100755 index 0000000..96be146 --- /dev/null +++ b/apple2/src/gui/textedit.cpp @@ -0,0 +1,252 @@ +// +// TEXTEDIT.CPP +// +// Graphical User Interface button class +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 02/17/2006 Created this file +// JLH 03/01/2006 Added basic editing functionality +// + +#include "textedit.h" +#include "guimisc.h" // Various support functions + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +using namespace std; // For STL stuff + +// +// Text edit class implementation +// + +TextEdit::TextEdit(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/, + string s/*= ""*/, Element * parent/*= NULL*/): + Element(x, y, w, h, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x40, 0x40, 0xFF, parent), + activated(false), clicked(false), inside(false), + img(NULL), text(s), caretPos(0), scrollPos(0), + activatedSave(false), clickedSave(false), insideSave(false), + caretPosSave(0), scrollPosSave(0) +{ + if (extents.h == 0) + extents.h = GetFontHeight(); + + // Setup hardwired colors... + + uint8 * c = (uint8 *)&hiliteColor; + c[0] = 0xFF, c[1] = 0x80, c[2] = 0x00, c[3] = 0xFF; + c = (uint8 *)&cursorColor; + c[0] = 0x40, c[1] = 0xFF, c[2] = 0x60, c[3] = 0xFF; + + // Create the text edit surface here... + + img = SDL_CreateRGBSurface(SDL_SWSURFACE, extents.w, extents.h, 32, + MASK_R, MASK_G, MASK_B, MASK_A); + + Draw(); // Can we do this in the constructor??? Mebbe. +} + +TextEdit::~TextEdit() +{ + if (img) + SDL_FreeSurface(img); +} + +//Set different filters depending on type passed in on construction, e.g., filename, amount, etc...? +void TextEdit::HandleKey(SDLKey key) +{ + if (!activated) + return; + + SaveStateVariables(); + SDLMod keyMod = SDL_GetModState(); + + if ((key >= SDLK_a && key <= SDLK_z) || (key >= SDLK_0 && key <= SDLK_9) + || key == SDLK_PERIOD || key == SDLK_SLASH || key == SDLK_SPACE) + { + uint8 chr = (uint8)key; + + // Handle shift key as well... + if (keyMod & KMOD_SHIFT) + { + if (key >= SDLK_a && key <= SDLK_z) + chr &= 0xDF; // Set to upper case + } + + text.insert(scrollPos + caretPos, 1, chr); + + // If we hit the edge, then scroll; else advance the caret + if ((GetFontWidth() * caretPos) > (extents.w - GetFontWidth())) + scrollPos++; + else + caretPos++; + } + else if (key == SDLK_BACKSPACE) + { + // If there's something to delete, go ahead and delete it + if ((scrollPos + caretPos) > 0) + { + text.erase(scrollPos + caretPos - 1, 1); + + // Scroll the cursor to the left if possible, otherwise move the scroll position + if (caretPos > 0) + caretPos--; + else + scrollPos--; + } + } + else if (key == SDLK_DELETE) + { + if ((scrollPos + caretPos) < text.length()) + text.erase(scrollPos + caretPos, 1); + } + else if (key == SDLK_LEFT) + { + if (caretPos > 0) + caretPos--; + else if (scrollPos > 0) + scrollPos--; + } + else if (key == SDLK_RIGHT) + { + if ((scrollPos + caretPos) < text.length()) + { + if ((GetFontWidth() * caretPos) > (extents.w - GetFontWidth())) + scrollPos++; + else + caretPos++; + } + } + else if (key == SDLK_RETURN) + { + clicked = activated = false; + } + + CheckStateAndRedrawIfNeeded(); +} + +void TextEdit::HandleMouseMove(uint32 x, uint32 y) +{ + SaveStateVariables(); + inside = Inside(x, y); + CheckStateAndRedrawIfNeeded(); +} + +void TextEdit::HandleMouseButton(uint32 x, uint32 y, bool mouseDown) +{ + SaveStateVariables(); + +//Not sure that this is right way to handle this... +//Should set the cursor position based on where in the text box it was clicked... + if (inside) + { + if (mouseDown) + clicked = true; + + if (clicked && !mouseDown) + { + clicked = false, activated = true; + + // Send a message to our parent widget (if any) that we're activated + if (parent) + parent->Notify(this); + } + } + else + clicked = activated = false; + + CheckStateAndRedrawIfNeeded(); +} + +void TextEdit::Draw(void) +{ + if (img == NULL) + return; // Bail out if no surface was created... + + SDL_Rect rect = GetScreenCoords(); + + // Now, draw the appropriate text state! + + if (!activated) + { + if (inside) + { + SDL_Rect rect2; + rect2.x = 1; + rect2.y = 1; + rect2.w = extents.w - 2; + rect2.h = extents.h - 2; + + SDL_FillRect(img, NULL, hiliteColor); + SDL_FillRect(img, &rect2, bgColor); + } + else + SDL_FillRect(img, NULL, bgColor); + } + else + SDL_FillRect(img, NULL, bgColor);//Make a different color here, so we're clear we're editing... + +//Should also draw different text color depending on whether or not we're activated... + if (activated) + DrawStringTrans(img, 0, 0, fgColor, text.c_str() + scrollPos); + else + DrawStringTrans(img, 0, 0, fgColor, text.c_str()); + + // Draw the cursor, if any + + if (activated) + { + SDL_Rect rectCursor; + rectCursor.x = caretPos * GetFontWidth(); + rectCursor.y = 0; + rectCursor.w = 2; + rectCursor.h = GetFontHeight(); + + SDL_FillRect(img, &rectCursor, cursorColor); + } + + SDL_BlitSurface(img, NULL, screen, &rect); // This handles alpha blending too! :-D + + needToRefreshScreen = true; +} + +void TextEdit::Notify(Element *) +{ +} + +string TextEdit::GetText(void) +{ + return text; +} + +void TextEdit::SaveStateVariables(void) +{ + activatedSave = activated; + clickedSave = clicked; + insideSave = inside; + caretPosSave = caretPos; + scrollPosSave = scrollPos; + lengthSave = text.length(); +} + +void TextEdit::CheckStateAndRedrawIfNeeded(void) +{ + // Check to see if any of our state variables changed since we last saved them... + if (activated != activatedSave || clicked != clickedSave || inside != insideSave + || caretPos != caretPosSave || scrollPos != scrollPosSave + || text.length() != lengthSave) + Draw(); +} diff --git a/apple2/src/gui/textedit.h b/apple2/src/gui/textedit.h new file mode 100755 index 0000000..e7b1cf0 --- /dev/null +++ b/apple2/src/gui/textedit.h @@ -0,0 +1,39 @@ +// +// TEXTEDIT.H +// +// Graphical User Interface text edit class +// + +#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, std::string s = "", Element * parent = NULL); + ~TextEdit(); + virtual void HandleKey(SDLKey key); + virtual void HandleMouseMove(uint32 x, uint32 y); + virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); + virtual void Draw(void); + virtual void Notify(Element *); + std::string GetText(void); + void SaveStateVariables(void); + void CheckStateAndRedrawIfNeeded(void); + + protected: + bool activated, clicked, inside; + SDL_Surface * img; + std::string text; + uint32 caretPos, scrollPos; + + private: + bool activatedSave, clickedSave, insideSave; + uint32 caretPosSave, scrollPosSave, lengthSave; + uint32 hiliteColor, cursorColor; +}; + +#endif // __TEXTEDIT_H__ diff --git a/apple2/src/gui/window.cpp b/apple2/src/gui/window.cpp new file mode 100755 index 0000000..75b6cc1 --- /dev/null +++ b/apple2/src/gui/window.cpp @@ -0,0 +1,128 @@ +// +// WINDOW.CPP +// +// Graphical User Interface window class +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 02/03/2006 Created this file +// JLH 02/09/2006 Fixed various problems with the class implementation +// JLH 02/14/2006 Added window rendering +// + +#include "window.h" +#include "button.h" +#include "guimisc.h" // Various support functions +#include + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +using namespace std; // For STL stuff + +// +// Window class implementation +// +// NOTE: FG/BG colors are hard-wired +// + +Window::Window(uint32 x/*= 0*/, uint32 y/*= 0*/, uint32 w/*= 0*/, uint32 h/*= 0*/, + void (* f)(Element *)/*= NULL*/): + Element(x, y, w, h, 0x4D, 0xFF, 0x84, 0xFF, 0x1F, 0x84, 0x84, 0xFF), handler(f), + cbWidth((closeBox[0] << 8) | closeBox[1]), cbHeight((closeBox[2] << 8) | closeBox[3]), + cbUp(SDL_CreateRGBSurfaceFrom(&closeBox[4], cbWidth, cbHeight, 32, cbWidth * 4, + MASK_R, MASK_G, MASK_B, MASK_A)), + cbDown(SDL_CreateRGBSurfaceFrom(&closeBoxDown[4], cbWidth, cbHeight, 32, cbWidth * 4, + MASK_R, MASK_G, MASK_B, MASK_A)), + cbHover(SDL_CreateRGBSurfaceFrom(&closeBoxHover[4], cbWidth, cbHeight, 32, cbWidth * 4, + MASK_R, MASK_G, MASK_B, MASK_A)) +{ +//Could probably move this into the initializer list as well... + closeButton = new Button(w - (cbWidth + 1), 1, cbUp, cbHover, cbDown, this); + list.push_back(closeButton); + + CreateBackstore(); + Draw(); // Can we do this in the constructor??? Mebbe. +} + +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(void) +{ + // These are *always* top level and parentless, so no need to traverse up through + // the parent chain... + SDL_FillRect(screen, &extents, bgColor); + + // Handle the items this window contains... + for(uint32 i=0; iDraw(); + +//Prolly don't need this since the close button will do this for us... + needToRefreshScreen = true; +} + +void Window::Notify(Element * e) +{ + if (e == closeButton) + { + SDL_Event event; + event.type = SDL_USEREVENT, event.user.code = WINDOW_CLOSE; + SDL_PushEvent(&event); + } +} + +void Window::AddElement(Element * e) +{ + list.push_back(e); +} diff --git a/apple2/src/gui/window.h b/apple2/src/gui/window.h new file mode 100755 index 0000000..7ff2150 --- /dev/null +++ b/apple2/src/gui/window.h @@ -0,0 +1,38 @@ +// +// WINDOW.H +// +// Graphical User Interface window class +// + +#ifndef __WINDOW_H__ +#define __WINDOW_H__ + +#include "element.h" +#include + +class Button; // Forward declaration + +class Window: public Element +{ + public: + Window(uint32 x = 0, uint32 y = 0, uint32 w = 0, uint32 h = 0, + void (* f)(Element *) = NULL); + ~Window(); //Does this destructor need to be virtual? Not sure... Check! + virtual void HandleKey(SDLKey key); + virtual void HandleMouseMove(uint32 x, uint32 y); + virtual void HandleMouseButton(uint32 x, uint32 y, bool mouseDown); + virtual void Draw(void); + virtual void Notify(Element *); + void AddElement(Element * e); + + protected: + void (* handler)(Element *); + Button * closeButton; + std::vector list; + + private: + uint16 cbWidth, cbHeight; + SDL_Surface * cbUp, * cbDown, * cbHover; +}; + +#endif // __WINDOW_H__ diff --git a/apple2/src/icon.h b/apple2/src/icon.h new file mode 100755 index 0000000..e2c6693 --- /dev/null +++ b/apple2/src/icon.h @@ -0,0 +1,38 @@ +// +// This file was automagically generated by raw2c (by James L. Hammons) +// + +char icon[0x1000] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0xFF, 0x99, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 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, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x86, 0x86, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 0xFF, 0x86, 0x86, 0x86, 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, +}; diff --git a/apple2/src/log.cpp b/apple2/src/log.cpp new file mode 100755 index 0000000..98c6658 --- /dev/null +++ b/apple2/src/log.cpp @@ -0,0 +1,65 @@ +// +// Log handler +// +// by James L. Hammons +// (C) 2006 Underground Software +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 01/03/2006 Moved includes out of header file for faster compilation +// + +#include "log.h" + +#include +#include +#include +#include "types.h" + +#define MAX_LOG_SIZE 10000000 // Maximum size of log file (10 MB) + +static FILE * log_stream = NULL; +static uint32 logSize = 0; + +bool InitLog(char * path) +{ + log_stream = fopen(path, "wrt"); + + if (log_stream == NULL) + return false; + + return true; +} + +void LogDone(void) +{ + if (log_stream) + fclose(log_stream); +} + +// +// This logger is used mainly to ensure that text gets written to the log file +// even if the program crashes. The performance hit is acceptable in this case! +// +void WriteLog(const char * text, ...) +{ + if (!log_stream) + return; + + va_list arg; + + va_start(arg, text); + logSize += vfprintf(log_stream, text, arg); + + if (logSize > MAX_LOG_SIZE) + { + fflush(log_stream); + fclose(log_stream); + exit(1); + }//*/ + + va_end(arg); + fflush(log_stream); // Make sure that text is written! +} diff --git a/apple2/src/log.h b/apple2/src/log.h new file mode 100755 index 0000000..8c12fcb --- /dev/null +++ b/apple2/src/log.h @@ -0,0 +1,22 @@ +// +// LOG.H +// + +#ifndef __LOG_H__ +#define __LOG_H__ + +// Make this header work with either C or C++ + +#ifdef __cplusplus +extern "C" { +#endif + +bool InitLog(char *); +void LogDone(void); +void WriteLog(const char * text, ...); + +#ifdef __cplusplus +} +#endif + +#endif // __LOG_H__ diff --git a/apple2/src/sdlemu_config.cpp b/apple2/src/sdlemu_config.cpp new file mode 100755 index 0000000..75d7644 --- /dev/null +++ b/apple2/src/sdlemu_config.cpp @@ -0,0 +1,149 @@ +/* + * SDLEMU library - Free sdl related functions library + * Copyrigh(c) 1999-2002 sdlemu development crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include "sdlemu_config.h" + +using namespace std; + +class token_list +{ +public: + token_list(const string &name) : m_name(name), m_value(""), m_token("") {} + void add_token_variable(const string &var) { m_token = var; } + void add_token_value(const string &value) { m_value = value; } + const string &LineName() const { return m_name; } + const string &Token() const { return m_token; } + const string &Value() const { return m_value; } +private: + std::string m_name; + std::string m_value; + std::string m_token; +}; + +std::list vec; + +void string_tokenize_variable() +{ + list::iterator p; + const string delim = " "; + for(p = vec.begin(); p != vec.end(); p++) { + string::size_type lastPos = (*p).LineName().find_first_not_of(delim, 0); + string::size_type pos = (*p).LineName().find_first_of(delim, lastPos); + + if(string::npos != pos && string::npos != lastPos) { + string s = (*p).LineName().substr(lastPos, pos - lastPos); + (*p).add_token_variable(s); + } + } +} + +void string_tokenize_value() +{ + list::iterator p; + const string delim = " =\n\t\r"; // "\r" needed for Win32 compatibility... + + for(p = vec.begin(); p != vec.end(); p++) { + string::size_type lastPos = (*p).LineName().find_first_of(delim, 0); + string::size_type pos = (*p).LineName().find_first_not_of(delim, lastPos); + + if(string::npos != pos && string::npos != lastPos) { + string s = (*p).LineName().substr(pos); + (*p).add_token_value(s); + } + } +} + +int sdlemu_init_config(const char *filename) +{ + FILE *f = fopen(filename, "r"); + if(!f) return 0; + + fseek(f, 0, SEEK_END); + int len = ftell(f); + fseek(f, 0, SEEK_SET); + + char *s = new char[len]; + fread(s, 1, len, f); + string str(s); + + const string delim = "\n\r"; // "\r" needed for Win32 compatibility... + string::size_type lastPos = str.find_first_not_of(delim, 0); + string::size_type pos = str.find_first_of(delim, lastPos); + + while (string::npos != pos || string::npos != lastPos) { + string string = str.substr(lastPos, pos - lastPos); + if(string[0] == '#') + { + } + else if(string[0] == '[') + { + } + else + { + vec.push_back(string); + } + lastPos = str.find_first_not_of(delim, pos); + pos = str.find_first_of(delim, lastPos); + } + string_tokenize_variable(); + string_tokenize_value(); + delete [] s; + fclose(f); + return 1; +} + +const char *sdlemu_getval_string(const char *key_string, const char *default_string) +{ + list::iterator p; + for(p = vec.begin(); p != vec.end(); p++) { + + if(strcmp((*p).Token().c_str(), key_string) == 0) + return (*p).Value().c_str(); + } + return default_string; +} + +int sdlemu_getval_int(const char *key_string, int default_int) +{ + list::iterator p; + for(p = vec.begin(); p != vec.end(); p++) { + + if(strcmp((*p).Token().c_str(), key_string) == 0) { + const char *ret = (*p).Value().c_str(); + if(ret) return atoi(ret); + } + } + return default_int; +} + +int sdlemu_getval_bool(const char *key_string, int default_int) +{ + list::iterator p; + for(p = vec.begin(); p != vec.end(); p++) { + + if(strcmp((*p).Token().c_str(), key_string) == 0) { + const char *ret = (*p).Value().c_str(); + if(ret) return atoi(ret)>0; + } + } + return default_int; +} diff --git a/apple2/src/sdlemu_config.h b/apple2/src/sdlemu_config.h new file mode 100755 index 0000000..2c2e6d5 --- /dev/null +++ b/apple2/src/sdlemu_config.h @@ -0,0 +1,17 @@ +#ifndef __SDL_CONFIG_H__ +#define __SDL_CONFIG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +int sdlemu_init_config(const char * filename); +const char * sdlemu_getval_string(const char * key_string, const char * default_string); +int sdlemu_getval_int(const char * key_string, int default_int); +int sdlemu_getval_bool(const char * key_string, int default_int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/apple2/src/sdlemu_opengl.c b/apple2/src/sdlemu_opengl.c new file mode 100755 index 0000000..7ea9faf --- /dev/null +++ b/apple2/src/sdlemu_opengl.c @@ -0,0 +1,535 @@ +/* + * SDLEMU library - Free sdl related functions library + * Copyrigh(c) 1999-2004 sdlemu development crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* SDLEMU_OPENGL.C + SDLEMU related sources for using OpenGL with SDL. + By Niels Wagenaar | http://sdlemu.ngemu.com | shalafi@xs4all.nl + + Version 1.0.001 - 4-10-2004 + + - Added support for 16, 24 and 32 bit textures; + - Added support for 16, 24 and 32 bit texture rendering; + + Version 1.0.002 - 6-10-2004 + + - Cleaned up a lot of code and removed non functional and obsolete code; + - Removed sdlemu_resize_texture function because of double code; + - Removed the texture creation from the sdlemu_init_opengl; + - Added sdlemu_create_texture function to replace the sdlemu_resize_texture function + and the texture creation in sdlemu_init_opengl; + - Added the usage of OPENGL_16BPP_CORRECT_RGBA for activating the correct 16bpp RGBA masks; + - Added the usage of WANT_OPENGL_ALPHA for using ALPHA blending with 32bpp textures; + - Added automatic and override texture bpp depth setting (based upon the src surface); + +*/ + +#include "sdlemu_opengl.h" + +static SDL_Surface *texture = 0; +static GLuint texid = 0; +static GLfloat texcoord[4]; +static unsigned int glFilter; +static unsigned int texturebpp = 0; // 16, 24 or 32 bpp + +static SDL_Surface * overlay = 0; +static GLuint overlayID = 0; +static GLfloat overlayCoord[4]; +void sdlemu_create_overlay(SDL_Surface * dst, int src_bpp); + +static int showOverlay = 0; + +static inline int power_of_two(int input) +{ + int value = 1; + + while (value < input) + value <<= 1; + + return value; +} + +void sdlemu_init_opengl(SDL_Surface * src, SDL_Surface * dst, int texturetype, int filter, int src_bpp) +{ + printf("\nOpenGL driver information :\n"); + printf("\n"); + printf("Vendor: %s\n", glGetString(GL_VENDOR)); + printf("Renderer: %s\n", glGetString(GL_RENDERER)); + printf("Version: %s\n", glGetString(GL_VERSION)); + printf("OpenGL drawmethod: "); + + switch (texturetype) + { + case 1: + printf("GL_QUAD rendering\n\n"); + break; + default: + printf("GL_TRIANGLE rendering\n\n"); + break; + } + + glFilter = filter; + + // Let us create the texture information : + sdlemu_create_texture(src, dst, filter, src_bpp); + sdlemu_create_overlay(dst, src_bpp); +} + +void sdlemu_draw_texture(SDL_Surface * dst, SDL_Surface * src, int texturetype) +{ +/* + This is needed when we want to render OpenGL textures with the Alpha mask set. + Be warned! This only works with the bpp of texture en *src set to 32. +*/ +#ifdef WANT_OPENGL_ALPHA + Uint32 saved_flags; + Uint8 saved_alpha; + + /* Save the alpha blending attributes */ + saved_flags = src->flags&(SDL_SRCALPHA|SDL_RLEACCELOK); + saved_alpha = src->format->alpha; + if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA ) { + SDL_SetAlpha(src, 0, 0); + } + + // Blit the src display to the texture. + SDL_BlitSurface(src, NULL, texture, NULL); + + /* Restore the alpha blending attributes */ + if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA ) { + SDL_SetAlpha(src, saved_flags, saved_alpha); + } +#else + SDL_BlitSurface(src, NULL, texture, NULL); +#endif +// SDL_BlitSurface(src, NULL, overlay, NULL); +/*Uint32 * pix = (Uint32 *)overlay->pixels; +Uint32 y,x; +for(y=10; y<200; y++) +for(x=30; x<250; x++) +pix[x+(y*1024)] = 0x800000FF;//*/ + +glBlendFunc(GL_ONE, GL_ZERO); +glBindTexture(GL_TEXTURE_2D, texid); + // Texturemap complete texture to surface so we have free scaling + // and antialiasing + switch (texturebpp) + { + case 16: + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture->w, texture->h, + GL_RGB, GL_UNSIGNED_SHORT_5_6_5, texture->pixels); + break; + case 24: + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture->w, texture->h, + GL_RGB, GL_UNSIGNED_BYTE, texture->pixels); + break; + case 32: + default: + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture->w, texture->h, + GL_RGBA, GL_UNSIGNED_BYTE, texture->pixels); + break; + } + + // Render the texture to the screen using OpenGL! + switch (texturetype) + { + case 1: + glBegin(GL_QUADS); + glTexCoord2f(texcoord[0], texcoord[1]); + glVertex2f(0, 0); + glTexCoord2f(texcoord[2], texcoord[1]); + glVertex2f(dst->w, 0); + glTexCoord2f(texcoord[2], texcoord[3]); + glVertex2f(dst->w, dst->h); + glTexCoord2f(texcoord[0], texcoord[3]); + glVertex2f(0, dst->h); + glEnd(); + + default: + glBegin(GL_TRIANGLE_STRIP); + glTexCoord2f(texcoord[0], texcoord[1]); glVertex3i(0, 0, 0); + glTexCoord2f(texcoord[2], texcoord[1]); glVertex3i(dst->w, 0, 0); + glTexCoord2f(texcoord[0], texcoord[3]); glVertex3i(0, dst->h, 0); + glTexCoord2f(texcoord[2], texcoord[3]); glVertex3i(dst->w, dst->h, 0); + glEnd(); + }//*/ + + if (showOverlay) + { + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBindTexture(GL_TEXTURE_2D, overlayID); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, overlay->w, overlay->h, GL_RGBA, GL_UNSIGNED_BYTE, overlay->pixels); + glBegin(GL_QUADS); + glTexCoord2f(overlayCoord[0], overlayCoord[1]); + glVertex2f(0, 0); + glTexCoord2f(overlayCoord[2], overlayCoord[1]); + glVertex2f(dst->w, 0); + glTexCoord2f(overlayCoord[2], overlayCoord[3]); + glVertex2f(dst->w, dst->h); + glTexCoord2f(overlayCoord[0], overlayCoord[3]); + glVertex2f(0, dst->h); + glEnd(); + } + +//Do some OpenGL stuff here... +//Doesn't work... +/*unsigned long int map[25] = { + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF +}; +glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +glRasterPos2i(10, 10); +glDrawPixels(5, 5, GL_RGBA, GL_UNSIGNED_INT, map);//*/ + +// glFlush(); + SDL_GL_SwapBuffers(); +// glFinish(); + +} + +void sdlemu_close_opengl(void) +{ + if (texture) + SDL_FreeSurface(texture); + + if (overlay) + SDL_FreeSurface(overlay); +} + +void sdlemu_create_overlay(SDL_Surface * dst, int src_bpp) +{ + // Local variables. + Uint32 rmask, gmask, bmask, amask; // Needed for creating RGBA masks. + + // Delete old texture (if allocated). Useful when there is a screen resize. + if (overlay) + SDL_FreeSurface(overlay); + + // Texture width/height should be power of 2 of the SDL_Surface *src when using OpenGL. + // So, find the largest power of two that will contain both the width and height + int w = power_of_two(dst->w); + int h = power_of_two(dst->h); + + printf("OpenGL - Overlay size : %d x %d\n", w, h); + + // Setting bpp based upon src_bpp. + int bpp = src_bpp; + + // We allow the developer to set its own texture bpp. But if the value is NULL or + // not equal to 16, 24 or 32, we make the texturebpp the same as the BPP from src. + if (bpp == 16 || bpp == 24 || bpp == 32) + texturebpp = bpp; + else + texturebpp = dst->format->BitsPerPixel; + + printf("OpenGL - Overlay depth : %d bpp\n", texturebpp); + + // Now were are going to create a SDL_Surface named texture. This will be our surface + // which will function as a buffer between the SDL_Surface *src and SDL_Surface *dst. + // This buffer is needed because we need to convert the SDL_Surface *src to an OpenGL + // texture with a depth of 16, 24 or 32 bpp, before we can blit the pixels to *dst + // using OpenGL. + // + // NOTE: Seems the byte order here *is* important! + switch (texturebpp) + { + case 16: // *src has depth of 16 bpp +/* + According to information on the SDL mailinglist and on internet, the following + rgba masks should be the ones to use. But somehow the screen gets f*cked up and + the RGB colours are incorrect (at least in Virtual Jaguar/SDL). + + Compile with -DOPENGL_16BPP_CORRECT_RGBA to use this RGBA values. +*/ +#ifdef OPENGL_16BPP_CORRECT_RGBA + rmask = 0x7C00; + gmask = 0x03E0; + bmask = 0x001F; + amask = 0x0000; +#else + rmask = 0x0000; + gmask = 0x0000; + bmask = 0x0000; + amask = 0x0000; +#endif + break; + case 24: // *src has depth of 24 bpp + #if SDL_BYTEORDER == SDL_BIG_ENDIAN + rmask = 0x00FF0000; + gmask = 0x0000FF00; + bmask = 0x000000FF; + amask = 0x00000000; // IMPORTANT! 24 bpp doesn't use Alpha (at least in our case). + #else + rmask = 0x000000FF; + gmask = 0x0000FF00; + bmask = 0x00FF0000; + amask = 0x00000000; // IMPORTANT! 24 bpp doesn't use Alpha (at least in our case). + #endif + break; + case 32: //*src has depth of 32 bpp + default: //which is also the default. + #if SDL_BYTEORDER == SDL_BIG_ENDIAN + rmask = 0xFF000000; + gmask = 0x00FF0000; + bmask = 0x0000FF00; + amask = 0x000000FF; + #else + rmask = 0x000000FF; + gmask = 0x0000FF00; + bmask = 0x00FF0000; + amask = 0xFF000000; + #endif + break; + } + + // Creating SDL_Surface texture based upon the above settings. + overlay = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, texturebpp, rmask, gmask, bmask, amask); + + // Setting up the texture coordinates. + overlayCoord[0] = 0.0f; + overlayCoord[1] = 0.0f; + overlayCoord[2] = (GLfloat)(dst->w) / overlay->w; + overlayCoord[3] = (GLfloat)(dst->h) / overlay->h; + + // create a RGB(A) texture for the texture surface + glGenTextures(1, &overlayID); + glBindTexture(GL_TEXTURE_2D, overlayID); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + // Setting texture mode. + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + // Generate the texture using the above information. + switch (texturebpp) + { + case 16: + // Normal 16bpp depth based textures consist out of GL_RGB5 and doesn't have support for Alpha channels. + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5, overlay->w, overlay->h, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); + break; + case 24: + // The 24bpp depth based textures consist out of GL_RGB8 and doesn't have support for Alpha channels. + // + // IMPORTANT : If you don't use Alpha. Use textures with a depth of 16bpp. + // If you use Alpha. Use textures with a depth of 32bpp. + // 24bpp textures are SLOW and avoid them at all costs! + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, overlay->w, overlay->h, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); + break; + case 32: + default: + // The 32bpp depth based textures consist out of GL_RGBA8 and has support for Alpha channels. + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, overlay->w, overlay->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + break; + } +} + +void * sdlemuGetOverlayPixels(void) +{ + return overlay->pixels; +} + +Uint32 sdlemuGetOverlayWidthInPixels(void) +{ + return overlay->pitch / 4; +} + +void sdlemuEnableOverlay(void) +{ + showOverlay = 1; +} + +void sdlemuDisableOverlay(void) +{ + showOverlay = 0; +} + +void sdlemu_create_texture(SDL_Surface * src, SDL_Surface * dst, int filter, int src_bpp) +{ + // Local variables. + int w , h; // w and h contain the width and height of the OpenGL texture. + Uint32 rmask, gmask, bmask, amask; // Needed for creating RGBA masks. + int bpp; + + // Delete old texture (if allocated). Useful when there is a screen resize. + if (texture) + SDL_FreeSurface(texture); + + // Texture width/height should be power of 2 of the SDL_Surface *src when using OpenGL. + // So, find the largest power of two that will contain both the width and height + w = power_of_two(src->w); + h = power_of_two(src->h); + + printf("OpenGL - Texture size : %d x %d\n", w, h); + + // Setting bpp based upon src_bpp. + bpp = src_bpp; + + // We allow the developer to set its own texture bpp. But if the value is NULL or + // not equal to 16, 24 or 32, we make the texturebpp the same as the BPP from src. + if (bpp == 16 || bpp == 24 || bpp == 32) + texturebpp = bpp; + else + texturebpp = src->format->BitsPerPixel; + + printf("OpenGL - Texture depth : %d bpp\n", texturebpp); + + // Now were are going to create a SDL_Surface named texture. This will be our surface + // which will function as a buffer between the SDL_Surface *src and SDL_Surface *dst. + // This buffer is needed because we need to convert the SDL_Surface *src to an OpenGL + // texture with a depth of 16, 24 or 32 bpp, before we can blit the pixels to *dst + // using OpenGL. + // + // NOTE: Seems the byte order here *is* important! + switch (texturebpp) + { + case 16: // *src has depth of 16 bpp +/* + According to information on the SDL mailinglist and on internet, the following + rgba masks should be the ones to use. But somehow the screen gets f*cked up and + the RGB colours are incorrect (at least in Virtual Jaguar/SDL). + + Compile with -DOPENGL_16BPP_CORRECT_RGBA to use this RGBA values. +*/ +#ifdef OPENGL_16BPP_CORRECT_RGBA + rmask = 0x7C00; + gmask = 0x03E0; + bmask = 0x001F; + amask = 0x0000; +#else + rmask = 0x0000; + gmask = 0x0000; + bmask = 0x0000; + amask = 0x0000; +#endif + break; + case 24: // *src has depth of 24 bpp + #if SDL_BYTEORDER == SDL_BIG_ENDIAN + rmask = 0x00FF0000; + gmask = 0x0000FF00; + bmask = 0x000000FF; + amask = 0x00000000; // IMPORTANT! 24 bpp doesn't use Alpha (at least in our case). + #else + rmask = 0x000000FF; + gmask = 0x0000FF00; + bmask = 0x00FF0000; + amask = 0x00000000; // IMPORTANT! 24 bpp doesn't use Alpha (at least in our case). + #endif + break; + case 32: //*src has depth of 32 bpp + default: //which is also the default. + #if SDL_BYTEORDER == SDL_BIG_ENDIAN + rmask = 0xFF000000; + gmask = 0x00FF0000; + bmask = 0x0000FF00; + amask = 0x000000FF; + #else + rmask = 0x000000FF; + gmask = 0x0000FF00; + bmask = 0x00FF0000; + amask = 0xFF000000; + #endif + break; + } + + // Creating SDL_Surface texture based upon the above settings. + texture = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, texturebpp, rmask, gmask, bmask, amask); + + // Setting up OpenGL + glDisable(GL_FOG); + glDisable(GL_LIGHTING); + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); +// glDisable(GL_BLEND); + glEnable(GL_BLEND); + glDisable(GL_NORMALIZE); + glDisable(GL_ALPHA_TEST); + glEnable(GL_TEXTURE_2D); +// glBlendFunc(GL_SRC_ALPHA, GL_ONE); +// glBlendFunc(GL_ONE, GL_SRC_ALPHA); +//This works, but in a wrong way... +// glBlendFunc(GL_ONE, GL_ONE); + + // Definitely needed for screen resolution larger then the *src. + // This way we can have automatic scaling functionality. + glViewport(0, 0, dst->w, dst->h); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(0.0, (GLdouble)dst->w, (GLdouble)dst->h, 0.0, 0.0, 1.0); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + + // Setting up the texture coordinates. + texcoord[0] = 0.0f; + texcoord[1] = 0.0f; + texcoord[2] = (GLfloat)(src->w) / texture->w; + texcoord[3] = (GLfloat)(src->h) / texture->h; + + // create a RGB(A) texture for the texture surface + glGenTextures(1, &texid); + glBindTexture(GL_TEXTURE_2D, texid); + + // Setting up the OpenGL Filters. These filters are important when we/you + // want to scale the texture. + if (filter) + { + // Textures are rendered in best quality. + printf("OpenGL filters: enabled\n"); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } + else + { + // Textures are rendered in normal quality. + printf("OpenGL filters: disabled\n"); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } + + // Setting texture mode. + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + + // Generate the texture using the above information. + switch (texturebpp) + { + case 16: + // Normal 16bpp depth based textures consist out of GL_RGB5 and doesn't have support for Alpha channels. + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5, texture->w, texture->h, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); + break; + case 24: + // The 24bpp depth based textures consist out of GL_RGB8 and doesn't have support for Alpha channels. + // + // IMPORTANT : If you don't use Alpha. Use textures with a depth of 16bpp. + // If you use Alpha. Use textures with a depth of 32bpp. + // 24bpp textures are SLOW and avoid them at all costs! + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, texture->w, texture->h, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); + break; + case 32: + default: + // The 32bpp depth based textures consist out of GL_RGBA8 and has support for Alpha channels. + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + break; + } +} diff --git a/apple2/src/sdlemu_opengl.h b/apple2/src/sdlemu_opengl.h new file mode 100755 index 0000000..22e0f9a --- /dev/null +++ b/apple2/src/sdlemu_opengl.h @@ -0,0 +1,43 @@ +/* + * SDLEMU library - Free sdl related functions library + * Copyrigh(c) 1999-2002 sdlemu development crew + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __SDLEMU_OPENGL_H__ +#define __SDLEMU_OPENGL_H__ + +#include "SDL.h" +#include "SDL_opengl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void sdlemu_init_opengl(SDL_Surface * src, SDL_Surface * dst, int texturetype, int filter, int src_bpp); +void sdlemu_draw_texture(SDL_Surface * dst, SDL_Surface * src, int texturetype); +void sdlemu_close_opengl(void); +void sdlemu_create_texture(SDL_Surface * src, SDL_Surface * dst, int filter, int src_bpp); +void * sdlemuGetOverlayPixels(void); +Uint32 sdlemuGetOverlayWidthInPixels(void); +void sdlemuEnableOverlay(void); +void sdlemuDisableOverlay(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/apple2/src/settings.cpp b/apple2/src/settings.cpp new file mode 100755 index 0000000..841b961 --- /dev/null +++ b/apple2/src/settings.cpp @@ -0,0 +1,121 @@ +// +// SETTINGS.CPP: Game configuration loading/saving support +// +// by James L. Hammons +// (C) 2005 Underground Software +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 01/04/2006 Added changelog ;-) +// + +#include "settings.h" + +#include +#include +#include "SDL.h" +#include "sdlemu_config.h" +#include "log.h" + +using namespace std; + +// Global variables + +Settings settings; + +// Private function prototypes + +static void CheckForTrailingSlash(char * path); + +// +// Load Apple2's settings +// +void LoadSettings(void) +{ + if (sdlemu_init_config("./apple2.cfg") == 0 // CWD + && sdlemu_init_config("~/apple2.cfg") == 0 // Home + && sdlemu_init_config("~/.apple2/apple2.cfg") == 0 // Home under .apple2 directory + && sdlemu_init_config("apple2.cfg") == 0) // Somewhere in the path + WriteLog("Settings: Couldn't find configuration file. Using defaults...\n"); + + settings.useJoystick = sdlemu_getval_bool("useJoystick", false); + settings.joyport = sdlemu_getval_int("joyport", 0); + settings.hardwareTypeNTSC = sdlemu_getval_bool("hardwareTypeNTSC", true); + settings.frameSkip = sdlemu_getval_int("frameSkip", 0); + settings.fullscreen = sdlemu_getval_bool("fullscreen", false); + settings.useOpenGL = sdlemu_getval_bool("useOpenGL", true); + settings.glFilter = sdlemu_getval_int("glFilterType", 0); + settings.renderType = sdlemu_getval_int("renderType", 0); + settings.autoStateSaving = sdlemu_getval_bool("autoSaveState", true); + + // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * + settings.p1KeyBindings[0] = sdlemu_getval_int("p1k_up", SDLK_UP); + settings.p1KeyBindings[1] = sdlemu_getval_int("p1k_down", SDLK_DOWN); + settings.p1KeyBindings[2] = sdlemu_getval_int("p1k_left", SDLK_LEFT); + settings.p1KeyBindings[3] = sdlemu_getval_int("p1k_right", SDLK_RIGHT); + settings.p1KeyBindings[4] = sdlemu_getval_int("p1k_c", SDLK_z); + settings.p1KeyBindings[5] = sdlemu_getval_int("p1k_b", SDLK_x); + settings.p1KeyBindings[6] = sdlemu_getval_int("p1k_a", SDLK_c); + settings.p1KeyBindings[7] = sdlemu_getval_int("p1k_option", SDLK_QUOTE); + settings.p1KeyBindings[8] = sdlemu_getval_int("p1k_pause", SDLK_RETURN); + settings.p1KeyBindings[9] = sdlemu_getval_int("p1k_0", SDLK_KP0); + settings.p1KeyBindings[10] = sdlemu_getval_int("p1k_1", SDLK_KP1); + settings.p1KeyBindings[11] = sdlemu_getval_int("p1k_2", SDLK_KP2); + settings.p1KeyBindings[12] = sdlemu_getval_int("p1k_3", SDLK_KP3); + settings.p1KeyBindings[13] = sdlemu_getval_int("p1k_4", SDLK_KP4); + settings.p1KeyBindings[14] = sdlemu_getval_int("p1k_5", SDLK_KP5); + settings.p1KeyBindings[15] = sdlemu_getval_int("p1k_6", SDLK_KP6); + settings.p1KeyBindings[16] = sdlemu_getval_int("p1k_7", SDLK_KP7); + settings.p1KeyBindings[17] = sdlemu_getval_int("p1k_8", SDLK_KP8); + settings.p1KeyBindings[18] = sdlemu_getval_int("p1k_9", SDLK_KP9); + settings.p1KeyBindings[19] = sdlemu_getval_int("p1k_pound", SDLK_KP_DIVIDE); + settings.p1KeyBindings[20] = sdlemu_getval_int("p1k_star", SDLK_KP_MULTIPLY); + + settings.p2KeyBindings[0] = sdlemu_getval_int("p2k_up", SDLK_UP); + settings.p2KeyBindings[1] = sdlemu_getval_int("p2k_down", SDLK_DOWN); + settings.p2KeyBindings[2] = sdlemu_getval_int("p2k_left", SDLK_LEFT); + settings.p2KeyBindings[3] = sdlemu_getval_int("p2k_right", SDLK_RIGHT); + settings.p2KeyBindings[4] = sdlemu_getval_int("p2k_c", SDLK_z); + settings.p2KeyBindings[5] = sdlemu_getval_int("p2k_b", SDLK_x); + settings.p2KeyBindings[6] = sdlemu_getval_int("p2k_a", SDLK_c); + settings.p2KeyBindings[7] = sdlemu_getval_int("p2k_option", SDLK_QUOTE); + settings.p2KeyBindings[8] = sdlemu_getval_int("p2k_pause", SDLK_RETURN); + settings.p2KeyBindings[9] = sdlemu_getval_int("p2k_0", SDLK_KP0); + settings.p2KeyBindings[10] = sdlemu_getval_int("p2k_1", SDLK_KP1); + settings.p2KeyBindings[11] = sdlemu_getval_int("p2k_2", SDLK_KP2); + settings.p2KeyBindings[12] = sdlemu_getval_int("p2k_3", SDLK_KP3); + settings.p2KeyBindings[13] = sdlemu_getval_int("p2k_4", SDLK_KP4); + settings.p2KeyBindings[14] = sdlemu_getval_int("p2k_5", SDLK_KP5); + settings.p2KeyBindings[15] = sdlemu_getval_int("p2k_6", SDLK_KP6); + settings.p2KeyBindings[16] = sdlemu_getval_int("p2k_7", SDLK_KP7); + settings.p2KeyBindings[17] = sdlemu_getval_int("p2k_8", SDLK_KP8); + settings.p2KeyBindings[18] = sdlemu_getval_int("p2k_9", SDLK_KP9); + settings.p2KeyBindings[19] = sdlemu_getval_int("p2k_pound", SDLK_KP_DIVIDE); + settings.p2KeyBindings[20] = sdlemu_getval_int("p2k_star", SDLK_KP_MULTIPLY); + + strcpy(settings.BIOSPath, sdlemu_getval_string("BIOSROM", "./ROMs/apple2.rom")); + strcpy(settings.disksPath, sdlemu_getval_string("disks", "./disks")); + strcpy(settings.diskImagePath1, sdlemu_getval_string("floppyImage1", "./disks/bt1_boot.dsk")); + strcpy(settings.diskImagePath2, sdlemu_getval_string("floppyImage2", "./disks/bt1_char.dsk")); + strcpy(settings.autoStatePath, sdlemu_getval_string("autoStateFilename", "./apple2auto.state")); + CheckForTrailingSlash(settings.disksPath); +} + +// +// Save Apple2's settings +// +void SaveSettings(void) +{ +} + +// +// Check path for a trailing slash, and append if not present +// +static void CheckForTrailingSlash(char * path) +{ + if (strlen(path) > 0) + if (path[strlen(path) - 1] != '/') + strcat(path, "/"); // NOTE: Possible buffer overflow +} diff --git a/apple2/src/settings.h b/apple2/src/settings.h new file mode 100755 index 0000000..1fcca61 --- /dev/null +++ b/apple2/src/settings.h @@ -0,0 +1,60 @@ +// +// SETTINGS.H: Header file +// + +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +// MAX_PATH isn't defined in stdlib.h on *nix, so we do it here... +#ifdef __GCCUNIX__ +#include +#define MAX_PATH _POSIX_PATH_MAX +#else +#include // for MAX_PATH on MinGW/Darwin +#endif +#include "types.h" + +// Settings struct + +struct Settings +{ + bool useJoystick; + int32 joyport; // Joystick port + bool hardwareTypeNTSC; // Set to false for PAL + bool fullscreen; + bool useOpenGL; + uint32 glFilter; + uint32 frameSkip; + uint32 renderType; + bool autoStateSaving; // Auto-state loading/saving on entry/exit + + // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * + + uint16 p1KeyBindings[21]; + uint16 p2KeyBindings[21]; + + // Paths + + char BIOSPath[MAX_PATH]; + char disksPath[MAX_PATH]; + char diskImagePath1[MAX_PATH]; + char diskImagePath2[MAX_PATH]; + char autoStatePath[MAX_PATH]; +// char CDBootPath[MAX_PATH]; +// char EEPROMPath[MAX_PATH]; +}; + +// Render types + +//enum { RT_NORMAL = 0, RT_TV = 1 }; + +// Exported functions + +void LoadSettings(void); +void SaveSettings(void); + +// Exported variables + +extern Settings settings; + +#endif // __SETTINGS_H__ diff --git a/apple2/src/sound.cpp b/apple2/src/sound.cpp new file mode 100755 index 0000000..8dfbcb3 --- /dev/null +++ b/apple2/src/sound.cpp @@ -0,0 +1,233 @@ +// +// Sound Interface +// +// by James L. Hammons +// (C) 2005 Underground Software +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 12/02/2005 Fixed a problem with sound callback thread signaling the +// main thread +// JLH 12/03/2005 Fixed sound callback dropping samples when the sample buffer +// is shorter than the callback sample buffer +// + +// STILL TO DO: +// +// - Figure out why it's losing samples (Bard's Tale) [DONE] +// + +#include "sound.h" + +#include // For memset, memcpy +#include +#include "log.h" + +using namespace std; + +// Global variables + + +// Local variables + +static SDL_AudioSpec desired; +static bool soundInitialized = false; +static uint8 amplitude = 0x88; // $78 - $88 seems to be plenty loud! +//static uint8 lastValue; + +static bool speakerState; +static uint8 soundBuffer[4096]; +static uint32 soundBufferPos; +static uint32 sampleBase; +static SDL_cond * conditional = NULL; +static SDL_mutex * mutex = NULL; + +// Private function prototypes + +static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length); + +// +// Initialize the SDL sound system +// +void SoundInit(void) +{ +// To weed out problems for now... +#if 0 +return; +#endif + + desired.freq = 44100; // SDL will do conversion on the fly, if it can't get the exact rate. Nice! + desired.format = AUDIO_U8; // This uses the native endian (for portability)... + desired.channels = 1; +// desired.samples = 4096; // Let's try a 4K buffer (can always go lower) + desired.samples = 2048; // Let's try a 2K buffer (can always go lower) + desired.callback = SDLSoundCallback; + + if (SDL_OpenAudio(&desired, NULL) < 0) // NULL means SDL guarantees what we want + { + WriteLog("Sound: Failed to initialize SDL sound.\n"); +// exit(1); + return; + } + + conditional = SDL_CreateCond(); + mutex = SDL_CreateMutex(); + SDL_mutexP(mutex); // Must lock the mutex for the cond to work properly... +// lastValue = (speakerState ? amplitude : 0xFF - amplitude); + soundBufferPos = 0; + sampleBase = 0; + + SDL_PauseAudio(false); // Start playback! + soundInitialized = true; + WriteLog("Sound: Successfully initialized.\n"); +} + +// +// Close down the SDL sound subsystem +// +void SoundDone(void) +{ + if (soundInitialized) + { + SDL_PauseAudio(true); + SDL_CloseAudio(); + SDL_DestroyCond(conditional); + SDL_DestroyMutex(mutex); + WriteLog("Sound: Done.\n"); + } +} + +// +// Sound card callback handler +// +static void SDLSoundCallback(void * userdata, Uint8 * buffer, int length) +{ + // The sound buffer should only starve when starting which will cause it to + // lag behind the emulation at most by around 1 frame... + + if (soundBufferPos < (uint32)length) // The sound buffer is starved... + { +//printf("Sound buffer starved!\n"); +//fflush(stdout); + for(uint32 i=0; i 0) +// memcpy(soundBuffer, soundBuffer + length, soundBufferPos); // Move current buffer down to start +// memcpy(soundBuffer, soundBuffer + length, length); + // Move current buffer down to start + for(uint32 i=0; i 95085)//(time & 0x80000000) +{ + WriteLog("ToggleSpeaker() given bad time value: %08X (%u)!\n", time, time); +// fflush(stdout); +} +#endif + +// 1.024 MHz / 60 = 17066.6... cycles (23.2199 cycles per sample) +// Need the last frame position in order to calculate correctly... + + SDL_LockAudio(); + uint8 sample = (speakerState ? amplitude : 0xFF - amplitude); +// uint8 sample = (speakerState ? amplitude : amplitude ^ 0xFF); + uint32 currentPos = sampleBase + (uint32)((double)time / 23.2199); + + if (currentPos > 4095) + { +#if 0 +WriteLog("ToggleSpeaker() about to go into spinlock at time: %08X (%u) (sampleBase=%u)!\n", time, time, sampleBase); +#endif +// Still hanging on this spinlock... +// That could be because the "time" value is too high and so the buffer will NEVER be +// empty enough... +// Now that we're using a conditional, it seems to be working OK--though not perfectly... +/* +ToggleSpeaker() about to go into spinlock at time: 00004011 (16401) (sampleBase=3504)! +16401 -> 706 samples, 3504 + 706 = 4210 + +And it still thrashed the sound even though it didn't run into a spinlock... + +Seems like it's OK now that I've fixed the buffer-less-than-length bug... +*/ + SDL_UnlockAudio(); + SDL_CondWait(conditional, mutex); + +// while (currentPos > 4095) // Spin until buffer empties a bit... + currentPos = sampleBase + (uint32)((double)time / 23.2199); + SDL_LockAudio(); +#if 0 +WriteLog("--> after spinlock (sampleBase=%u)...\n", sampleBase); +#endif + } + + while (soundBufferPos < currentPos) + soundBuffer[soundBufferPos++] = sample; + + speakerState = !speakerState; + SDL_UnlockAudio(); +} + +void HandleSoundAtFrameEdge(void) +{ + if (!soundInitialized) + return; + + SDL_LockAudio(); + sampleBase += 735; + SDL_UnlockAudio(); +/* uint8 sample = (speakerState ? amplitude : 0xFF - amplitude); + +//This shouldn't happen (buffer overflow), but it seems like it *is* happening... + if (sampleBase >= 4096) +// sampleBase = 4095; +//Kludge, for now... Until I can figure out why it's still stomping on the buffer... + sampleBase = 0; + + while (soundBufferPos < sampleBase) + soundBuffer[soundBufferPos++] = sample;//*/ +} diff --git a/apple2/src/sound.h b/apple2/src/sound.h new file mode 100755 index 0000000..85dcf4d --- /dev/null +++ b/apple2/src/sound.h @@ -0,0 +1,23 @@ +// +// SOUND.H +// +// by James L. Hammons +// (C) 2004 Underground Software +// + +#ifndef __SOUND_H__ +#define __SOUND_H__ + +#include "types.h" + +// Global variables (exported) + + +// Functions + +void SoundInit(void); +void SoundDone(void); +void ToggleSpeaker(uint32 time); +void HandleSoundAtFrameEdge(void); + +#endif // __SOUND_H__ diff --git a/apple2/src/timing.cpp b/apple2/src/timing.cpp new file mode 100755 index 0000000..2bf0709 --- /dev/null +++ b/apple2/src/timing.cpp @@ -0,0 +1,129 @@ +// +// System time handlers +// +// by James L. Hammons +// (C) 2005 Underground Software +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 01/04/2006 Cosmetic changes (like this one ;-) +// + +// STILL TO DO: +// +// - Handling for an event that occurs NOW +// + +#include "timing.h" + +#include "log.h" + +#define EVENT_LIST_SIZE 512 + +// NOTE ABOUT TIMING SYSTEM DATA STRUCTURES: + +// A queue won't work for this system because we can't guarantee that an event will go +// in with a time that is later than the ones already queued up. So we just use a simple +// list. + +// Although if we used an insertion sort we could, but it wouldn't work for adjusting +// times... + +struct Event +{ + bool valid; + double eventTime; + void (* timerCallback)(void); +}; + +static Event eventList[EVENT_LIST_SIZE]; +static uint32 nextEvent; + +void InitializeEventList(void) +{ + for(uint32 i=0; i +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 01/04/2006 Added changelog ;-) +// + +//OK, the wraparound bug exists in both the Apple and Atari versions of Ultima II. +//However, the Atari version *does* occassionally pick strength while the Apple +//versions do not--which would seem to indicate a bug either in the RNG algorithm, +//the 65C02 core, or the Apple hardware. Need to investigate all three! + +#define __DEBUG__ +//#define __DEBUGMON__ + +#include "v65c02.h" + +#ifdef __DEBUG__ +#include "dis65c02.h" +#include "log.h" +#endif + +// Various macros + +#define CLR_Z (regs.cc &= ~FLAG_Z) +#define CLR_ZN (regs.cc &= ~(FLAG_Z | FLAG_N)) +#define CLR_ZNC (regs.cc &= ~(FLAG_Z | FLAG_N | FLAG_C)) +#define CLR_V (regs.cc &= ~FLAG_V) +#define CLR_N (regs.cc &= ~FLAG_N) +#define SET_Z(r) (regs.cc = ((r) == 0 ? regs.cc | FLAG_Z : regs.cc & ~FLAG_Z)) +#define SET_N(r) (regs.cc = ((r) & 0x80 ? regs.cc | FLAG_N : regs.cc & ~FLAG_N)) + +//Not sure that this code is computing the carry correctly... Investigate! [Seems to be] +#define SET_C_ADD(a,b) (regs.cc = ((uint8)(b) > (uint8)(~(a)) ? regs.cc | FLAG_C : regs.cc & ~FLAG_C)) +//#define SET_C_SUB(a,b) (regs.cc = ((uint8)(b) >= (uint8)(a) ? regs.cc | FLAG_C : regs.cc & ~FLAG_C)) +#define SET_C_CMP(a,b) (regs.cc = ((uint8)(b) >= (uint8)(a) ? regs.cc | FLAG_C : regs.cc & ~FLAG_C)) +#define SET_ZN(r) SET_N(r); SET_Z(r) +#define SET_ZNC_ADD(a,b,r) SET_N(r); SET_Z(r); SET_C_ADD(a,b) +//#define SET_ZNC_SUB(a,b,r) SET_N(r); SET_Z(r); SET_C_SUB(a,b) +#define SET_ZNC_CMP(a,b,r) SET_N(r); SET_Z(r); SET_C_CMP(a,b) + +//Small problem with the EA_ macros: ABS macros don't increment the PC!!! !!! FIX !!! +#define EA_IMM regs.pc++ +#define EA_ZP regs.RdMem(regs.pc++) +#define EA_ZP_X (regs.RdMem(regs.pc++) + regs.x) & 0xFF +#define EA_ZP_Y (regs.RdMem(regs.pc++) + regs.y) & 0xFF +#define EA_ABS RdMemW(regs.pc) +#define EA_ABS_X RdMemW(regs.pc) + regs.x +#define EA_ABS_Y RdMemW(regs.pc) + regs.y +#define EA_IND_ZP_X RdMemW((regs.RdMem(regs.pc++) + regs.x) & 0xFF) +#define EA_IND_ZP_Y RdMemW(regs.RdMem(regs.pc++)) + regs.y +#define EA_IND_ZP RdMemW(regs.RdMem(regs.pc++)) + +#define READ_IMM regs.RdMem(EA_IMM) +#define READ_ZP regs.RdMem(EA_ZP) +#define READ_ZP_X regs.RdMem(EA_ZP_X) +#define READ_ZP_Y regs.RdMem(EA_ZP_Y) +#define READ_ABS regs.RdMem(EA_ABS); regs.pc += 2 +#define READ_ABS_X regs.RdMem(EA_ABS_X); regs.pc += 2 +#define READ_ABS_Y regs.RdMem(EA_ABS_Y); regs.pc += 2 +#define READ_IND_ZP_X regs.RdMem(EA_IND_ZP_X) +#define READ_IND_ZP_Y regs.RdMem(EA_IND_ZP_Y) +#define READ_IND_ZP regs.RdMem(EA_IND_ZP) + +#define READ_IMM_WB(v) uint16 addr = EA_IMM; v = regs.RdMem(addr) +#define READ_ZP_WB(v) uint16 addr = EA_ZP; v = regs.RdMem(addr) +#define READ_ZP_X_WB(v) uint16 addr = EA_ZP_X; v = regs.RdMem(addr) +#define READ_ABS_WB(v) uint16 addr = EA_ABS; v = regs.RdMem(addr); regs.pc += 2 +#define READ_ABS_X_WB(v) uint16 addr = EA_ABS_X; v = regs.RdMem(addr); regs.pc += 2 +#define READ_ABS_Y_WB(v) uint16 addr = EA_ABS_Y; v = regs.RdMem(addr); regs.pc += 2 +#define READ_IND_ZP_X_WB(v) uint16 addr = EA_IND_ZP_X; v = regs.RdMem(addr) +#define READ_IND_ZP_Y_WB(v) uint16 addr = EA_IND_ZP_Y; v = regs.RdMem(addr) +#define READ_IND_ZP_WB(v) uint16 addr = EA_IND_ZP; v = regs.RdMem(addr) + +#define WRITE_BACK(d) regs.WrMem(addr, (d)) + +// Private global variables + +static V65C02REGS regs; + +//This is probably incorrect, at least WRT to the $x7 and $xF opcodes... !!! FIX !!! +//Also this doesn't take into account the extra cycle it takes when an indirect fetch +//(ABS, ABS X/Y, ZP) crosses a page boundary, or extra cycle for BCD add/subtract... +#warning Cycle counts are not accurate--!!! FIX !!! +static uint8 CPUCycles[256] = { + 7, 6, 1, 1, 5, 3, 5, 1, 3, 2, 2, 1, 6, 4, 6, 1, + 2, 5, 5, 1, 5, 4, 6, 1, 2, 4, 2, 1, 6, 4, 6, 1, + 6, 6, 1, 1, 3, 3, 5, 1, 4, 2, 2, 1, 4, 4, 6, 1, + 2, 5, 5, 1, 4, 4, 6, 1, 2, 4, 2, 1, 4, 4, 6, 1, + 6, 6, 1, 1, 1, 3, 5, 1, 3, 2, 2, 1, 3, 4, 6, 1, + 2, 5, 5, 1, 1, 4, 6, 1, 2, 4, 3, 1, 1, 4, 6, 1, + 6, 6, 1, 1, 3, 3, 5, 1, 4, 2, 2, 1, 6, 4, 6, 1, + 2, 5, 5, 1, 4, 4, 6, 1, 2, 4, 4, 1, 6, 4, 6, 1, + 2, 6, 1, 1, 3, 3, 3, 1, 2, 2, 2, 1, 4, 4, 4, 1, + 2, 6, 5, 1, 4, 4, 4, 1, 2, 5, 2, 1, 4, 5, 5, 1, + 2, 6, 2, 1, 3, 3, 3, 1, 2, 2, 2, 1, 4, 4, 4, 1, + 2, 5, 5, 1, 4, 4, 4, 1, 2, 4, 2, 1, 4, 4, 4, 1, + 2, 6, 1, 1, 3, 3, 5, 1, 2, 2, 2, 1, 4, 4, 6, 1, + 2, 5, 5, 1, 1, 4, 6, 1, 2, 4, 3, 1, 1, 4, 6, 1, + 2, 6, 1, 1, 3, 3, 5, 1, 2, 2, 2, 1, 4, 4, 6, 1, + 2, 5, 5, 1, 1, 4, 6, 1, 2, 4, 4, 1, 1, 4, 6, 1 }; + +// Private function prototypes + +static uint16 RdMemW(uint16); + +// +// Read a uint16 out of 65C02 memory (big endian format) +// +static uint16 RdMemW(uint16 address) +{ + return (uint16)(regs.RdMem(address + 1) << 8) | regs.RdMem(address + 0); +} + + +// +// 65C02 OPCODE IMPLEMENTATION +// +// NOTE: Lots of macros are used here to save a LOT of typing. Also +// helps speed the debugging process. :-) Because of this, combining +// certain lines may look like a good idea but would end in disaster. +// You have been warned! ;-) +// + +/* +Mnemonic Addressing mode Form Opcode Size Timing + +ADC Immediate ADC #Oper 69 2 2 + Zero Page ADC Zpg 65 2 3 + Zero Page,X ADC Zpg,X 75 2 4 + Absolute ADC Abs 6D 3 4 + Absolute,X ADC Abs,X 7D 3 4 + Absolute,Y ADC Abs,Y 79 3 4 + (Zero Page,X) ADC (Zpg,X) 61 2 6 + (Zero Page),Y ADC (Zpg),Y 71 2 5 + (Zero Page) ADC (Zpg) 72 2 5 +*/ + +// ADC opcodes + +//This is non-optimal, but it works--optimize later. :-) +#define OP_ADC_HANDLER(m) \ + uint16 sum = (uint16)regs.a + (m) + (uint16)(regs.cc & FLAG_C); \ +\ + if (regs.cc & FLAG_D) \ + { \ + if ((sum & 0x0F) > 0x09) \ + sum += 0x06; \ +\ + if ((sum & 0xF0) > 0x90) \ + sum += 0x60; \ + } \ +\ + regs.cc = (regs.cc & ~FLAG_C) | (sum >> 8); \ + regs.cc = (~(regs.a ^ (m)) & (regs.a ^ sum) & 0x80 ? regs.cc | FLAG_V : regs.cc & ~FLAG_V); \ + regs.a = sum & 0xFF; \ + SET_ZN(regs.a) + +//OLD V detection: regs.cc = ((regs.a ^ (m) ^ sum ^ (regs.cc << 7)) & 0x80 ? regs.cc | FLAG_V : regs.cc & ~FLAG_V); + +static void Op69(void) // ADC # +{ + uint16 m = READ_IMM; + OP_ADC_HANDLER(m); +} + +static void Op65(void) // ADC ZP +{ + uint16 m = READ_ZP; + OP_ADC_HANDLER(m); +} + +static void Op75(void) // ADC ZP, X +{ + uint16 m = READ_ZP_X; + OP_ADC_HANDLER(m); +} + +static void Op6D(void) // ADC ABS +{ + uint16 m = READ_ABS; + OP_ADC_HANDLER(m); +} + +static void Op7D(void) // ADC ABS, X +{ + uint16 m = READ_ABS_X; + OP_ADC_HANDLER(m); +} + +static void Op79(void) // ADC ABS, Y +{ + uint16 m = READ_ABS_Y; + OP_ADC_HANDLER(m); +} + +static void Op61(void) // ADC (ZP, X) +{ + uint16 m = READ_IND_ZP_X; + OP_ADC_HANDLER(m); +} + +static void Op71(void) // ADC (ZP), Y +{ + uint16 m = READ_IND_ZP_Y; + OP_ADC_HANDLER(m); +} + +static void Op72(void) // ADC (ZP) +{ + uint16 m = READ_IND_ZP; + OP_ADC_HANDLER(m); +} + +/* +AND Immediate AND #Oper 29 2 2 +Zero Page AND Zpg 25 2 3 +Zero Page,X AND Zpg,X 35 2 4 +Absolute AND Abs 2D 3 4 +Absolute,X AND Abs,X 3D 3 4 +Absolute,Y AND Abs,Y 39 3 4 +(Zero Page,X) AND (Zpg,X) 21 2 6 +(Zero Page),Y AND (Zpg),Y 31 2 5 +(Zero Page) AND (Zpg) 32 2 5 +*/ + +// AND opcodes + +#define OP_AND_HANDLER(m) \ + regs.a &= m; \ + SET_ZN(regs.a) + +static void Op29(void) // AND # +{ + uint8 m = READ_IMM; + OP_AND_HANDLER(m); +} + +static void Op25(void) // AND ZP +{ + uint8 m = READ_ZP; + OP_AND_HANDLER(m); +} + +static void Op35(void) // AND ZP, X +{ + uint8 m = READ_ZP_X; + OP_AND_HANDLER(m); +} + +static void Op2D(void) // AND ABS +{ + uint8 m = READ_ABS; + OP_AND_HANDLER(m); +} + +static void Op3D(void) // AND ABS, X +{ + uint8 m = READ_ABS_X; + OP_AND_HANDLER(m); +} + +static void Op39(void) // AND ABS, Y +{ + uint8 m = READ_ABS_Y; + OP_AND_HANDLER(m); +} + +static void Op21(void) // AND (ZP, X) +{ + uint8 m = READ_IND_ZP_X; + OP_AND_HANDLER(m); +} + +static void Op31(void) // AND (ZP), Y +{ + uint8 m = READ_IND_ZP_Y; + OP_AND_HANDLER(m); +} + +static void Op32(void) // AND (ZP) +{ + uint8 m = READ_IND_ZP; + OP_AND_HANDLER(m); +} + +/* +ASL Accumulator ASL A 0A 1 2 +Zero Page ASL Zpg 06 2 5 +Zero Page,X ASL Zpg,X 16 2 6 +Absolute ASL Abs 0E 3 6 +Absolute,X ASL Abs,X 1E 3 7 +*/ + +/*static void Op78(void) // LSL ABS +{ + uint8 tmp; uint16 addr; + addr = FetchW(); + tmp = regs.RdMem(addr); + (tmp&0x80 ? regs.cc |= 0x01 : regs.cc &= 0xFE); // Shift hi bit into Carry + tmp <<= 1; + regs.WrMem(addr, tmp); + (tmp == 0 ? regs.cc |= 0x04 : regs.cc &= 0xFB); // Adjust Zero flag + (tmp&0x80 ? regs.cc |= 0x08 : regs.cc &= 0xF7); // Adjust Negative flag +}*/ + +// ASL opcodes + +#define OP_ASL_HANDLER(m) \ + regs.cc = ((m) & 0x80 ? regs.cc | FLAG_C : regs.cc & ~FLAG_C); \ + (m) <<= 1; \ + SET_ZN((m)) + +static void Op0A(void) // ASL A +{ + OP_ASL_HANDLER(regs.a); +} + +static void Op06(void) // ASL ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_ASL_HANDLER(m); + WRITE_BACK(m); +} + +static void Op16(void) // ASL ZP, X +{ + uint8 m; + READ_ZP_X_WB(m); + OP_ASL_HANDLER(m); + WRITE_BACK(m); +} + +static void Op0E(void) // ASL ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_ASL_HANDLER(m); + WRITE_BACK(m); +} + +static void Op1E(void) // ASL ABS, X +{ + uint8 m; + READ_ABS_X_WB(m); + OP_ASL_HANDLER(m); + WRITE_BACK(m); +} + +/* +BBR0 Relative BBR0 Oper 0F 2 2 +BBR1 Relative BBR1 Oper 1F 2 2 +BBR2 Relative BBR2 Oper 2F 2 2 +BBR3 Relative BBR3 Oper 3F 2 2 +BBR4 Relative BBR4 Oper 4F 2 2 +BBR5 Relative BBR5 Oper 5F 2 2 +BBR6 Relative BBR6 Oper 6F 2 2 +BBR7 Relative BBR7 Oper 7F 2 2 +BBS0 Relative BBS0 Oper 8F 2 2 +BBS1 Relative BBS1 Oper 9F 2 2 +BBS2 Relative BBS2 Oper AF 2 2 +BBS3 Relative BBS3 Oper BF 2 2 +BBS4 Relative BBS4 Oper CF 2 2 +BBS5 Relative BBS5 Oper DF 2 2 +BBS6 Relative BBS6 Oper EF 2 2 +BBS7 Relative BBS7 Oper FF 2 2 +*/ + +// BBR/Sn opcodes + +static void Op0F(void) // BBR0 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x01)) + regs.pc += m; +} + +static void Op1F(void) // BBR1 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x02)) + regs.pc += m; +} + +static void Op2F(void) // BBR2 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x04)) + regs.pc += m; +} + +static void Op3F(void) // BBR3 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x08)) + regs.pc += m; +} + +static void Op4F(void) // BBR4 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x10)) + regs.pc += m; +} + +static void Op5F(void) // BBR5 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x20)) + regs.pc += m; +} + +static void Op6F(void) // BBR6 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x40)) + regs.pc += m; +} + +static void Op7F(void) // BBR7 +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.a & 0x80)) + regs.pc += m; +} + +static void Op8F(void) // BBS0 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x01) + regs.pc += m; +} + +static void Op9F(void) // BBS1 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x02) + regs.pc += m; +} + +static void OpAF(void) // BBS2 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x04) + regs.pc += m; +} + +static void OpBF(void) // BBS3 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x08) + regs.pc += m; +} + +static void OpCF(void) // BBS4 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x10) + regs.pc += m; +} + +static void OpDF(void) // BBS5 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x20) + regs.pc += m; +} + +static void OpEF(void) // BBS6 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x40) + regs.pc += m; +} + +static void OpFF(void) // BBS7 +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.a & 0x80) + regs.pc += m; +} + +/* +BCC Relative BCC Oper 90 2 2 +BCS Relative BCS Oper B0 2 2 +BEQ Relative BEQ Oper F0 2 2 +*/ + +// Branch opcodes + +static void Op90(void) // BCC +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.cc & FLAG_C)) + regs.pc += m; +} + +static void OpB0(void) // BCS +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.cc & FLAG_C) + regs.pc += m; +} + +static void OpF0(void) // BEQ +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.cc & FLAG_Z) + regs.pc += m; +} + +/* +BIT Immediate BIT #Oper 89 2 2 +Zero Page BIT Zpg 24 2 3 +Zero Page,X BIT Zpg,X 34 2 4 +Absolute BIT Abs 2C 3 4 +Absolute,X BIT Abs,X 3C 3 4 +*/ + +// BIT opcodes + +/* 1. The BIT instruction copies bit 6 to the V flag, and bit 7 to the N flag (except in immediate + addressing mode where V & N are untouched.) The accumulator and the operand are ANDed and the + Z flag is set appropriately. */ + +#define OP_BIT_HANDLER(m) \ + int8 result = regs.a & (m); \ + regs.cc &= ~(FLAG_N | FLAG_V); \ + regs.cc |= ((m) & 0xC0); \ + SET_Z(result) + +static void Op89(void) // BIT # +{ + int8 m = READ_IMM; + int8 result = regs.a & m; + SET_Z(result); +} + +static void Op24(void) // BIT ZP +{ + int8 m = READ_ZP; + OP_BIT_HANDLER(m); +} + +static void Op34(void) // BIT ZP, X +{ + uint8 m = READ_ZP_X; + OP_BIT_HANDLER(m); +} + +static void Op2C(void) // BIT ABS +{ + uint8 m = READ_ABS; + OP_BIT_HANDLER(m); +} + +static void Op3C(void) // BIT ABS, X +{ + uint8 m = READ_ABS_X; + OP_BIT_HANDLER(m); +} + +/* +BMI Relative BMI Oper 30 2 2 +BNE Relative BNE Oper D0 2 2 +BPL Relative BPL Oper 10 2 2 +BRA Relative BRA Oper 80 2 3 +*/ + +// More branch opcodes + +static void Op30(void) // BMI +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.cc & FLAG_N) + regs.pc += m; +} + +static void OpD0(void) // BNE +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.cc & FLAG_Z)) + regs.pc += m; +} + +static void Op10(void) // BPL +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.cc & FLAG_N)) + regs.pc += m; +} + +static void Op80(void) // BRA +{ + int16 m = (int16)(int8)READ_IMM; + regs.pc += m; +} + +/* +BRK Implied BRK 00 1 7 +*/ + +static void Op00(void) // BRK +{ + regs.cc |= FLAG_B; // Set B + regs.pc++; // RTI comes back to the instruction one byte after the BRK + regs.WrMem(0x0100 + regs.sp--, regs.pc >> 8); // Save PC and CC + regs.WrMem(0x0100 + regs.sp--, regs.pc & 0xFF); + regs.WrMem(0x0100 + regs.sp--, regs.cc); + regs.cc |= FLAG_I; // Set I + regs.cc &= ~FLAG_D; // & clear D + regs.pc = RdMemW(0xFFFE); // Grab the IRQ vector & go... +} + +/* +BVC Relative BVC Oper 50 2 2 +BVS Relative BVS Oper 70 2 2 +*/ + +// Even more branch opcodes + +static void Op50(void) // BVC +{ + int16 m = (int16)(int8)READ_IMM; + + if (!(regs.cc & FLAG_V)) + regs.pc += m; +} + +static void Op70(void) // BVS +{ + int16 m = (int16)(int8)READ_IMM; + + if (regs.cc & FLAG_V) + regs.pc += m; +} + +/* +CLC Implied CLC 18 1 2 +*/ + +static void Op18(void) // CLC +{ + regs.cc &= ~FLAG_C; +} + +/* +CLD Implied CLD D8 1 2 +*/ + +static void OpD8(void) // CLD +{ + regs.cc &= ~FLAG_D; +} + +/* +CLI Implied CLI 58 1 2 +*/ + +static void Op58(void) // CLI +{ + regs.cc &= ~FLAG_I; +} + +/* +CLV Implied CLV B8 1 2 +*/ + +static void OpB8(void) // CLV +{ + regs.cc &= ~FLAG_V; +} + +/* +CMP Immediate CMP #Oper C9 2 2 +Zero Page CMP Zpg C5 2 3 +Zero Page,X CMP Zpg D5 2 4 +Absolute CMP Abs CD 3 4 +Absolute,X CMP Abs,X DD 3 4 +Absolute,Y CMP Abs,Y D9 3 4 +(Zero Page,X) CMP (Zpg,X) C1 2 6 +(Zero Page),Y CMP (Zpg),Y D1 2 5 +(Zero Page) CMP (Zpg) D2 2 5 +*/ + +// CMP opcodes + +/* +Here's the latest: The CMP is NOT generating the Z flag when A=$C0! + +FABA: A0 07 LDY #$07 [PC=FABC, SP=01FF, CC=---B-IZ-, A=00, X=00, Y=07] +FABC: C6 01 DEC $01 [PC=FABE, SP=01FF, CC=N--B-I--, A=00, X=00, Y=07] +FABE: A5 01 LDA $01 [PC=FAC0, SP=01FF, CC=N--B-I--, A=C0, X=00, Y=07] +FAC0: C9 C0 CMP #$C0 [PC=FAC2, SP=01FF, CC=N--B-I--, A=C0, X=00, Y=07] +FAC2: F0 D7 BEQ $FA9B [PC=FAC4, SP=01FF, CC=N--B-I--, A=C0, X=00, Y=07] +FAC4: 8D F8 07 STA $07F8 [PC=FAC7, SP=01FF, CC=N--B-I--, A=C0, X=00, Y=07] +FAC7: B1 00 LDA ($00),Y +*** Read at I/O address C007 + [PC=FAC9, SP=01FF, CC=---B-IZ-, A=00, X=00, Y=07] +FAC9: D9 01 FB CMP $FB01,Y [PC=FACC, SP=01FF, CC=---B-I--, A=00, X=00, Y=07] +FACC: D0 EC BNE $FABA [PC=FABA, SP=01FF, CC=---B-I--, A=00, X=00, Y=07] + +Should be fixed now... (was adding instead of subtracting!) + +Small problem here... First two should set the carry while the last one should clear it. !!! FIX !!! [DONE] + +FDF0: C9 A0 CMP #$A0 [PC=FDF2, SP=01F1, CC=---B-IZ-, A=A0, X=02, Y=03] +FD7E: C9 E0 CMP #$E0 [PC=FD80, SP=01F4, CC=N--B-I--, A=A0, X=02, Y=03] +FD38: C9 9B CMP #$9B [PC=FD3A, SP=01F2, CC=---B-I-C, A=A0, X=02, Y=03] + +Compare sets flags as if a subtraction had been carried out. If the value in the accumulator is equal or greater than the compared value, the Carry will be set. The equal (Z) and sign (S) flags will be set based on equality or lack thereof and the sign (i.e. A>=$80) of the accumulator. +*/ + +#define OP_CMP_HANDLER(m) \ + uint8 result = regs.a - (m); \ + SET_ZNC_CMP(m, regs.a, result) + +static void OpC9(void) // CMP # +{ + uint8 m = READ_IMM; + OP_CMP_HANDLER(m); +} + +static void OpC5(void) // CMP ZP +{ + uint8 m = READ_ZP; + OP_CMP_HANDLER(m); +} + +static void OpD5(void) // CMP ZP, X +{ + uint8 m = READ_ZP_X; + OP_CMP_HANDLER(m); +} + +static void OpCD(void) // CMP ABS +{ + uint8 m = READ_ABS; + OP_CMP_HANDLER(m); +} + +static void OpDD(void) // CMP ABS, X +{ + uint8 m = READ_ABS_X; + OP_CMP_HANDLER(m); +} + +static void OpD9(void) // CMP ABS, Y +{ + uint8 m = READ_ABS_Y; + OP_CMP_HANDLER(m); +} + +static void OpC1(void) // CMP (ZP, X) +{ + uint8 m = READ_IND_ZP_X; + OP_CMP_HANDLER(m); +} + +static void OpD1(void) // CMP (ZP), Y +{ + uint8 m = READ_IND_ZP_Y; + OP_CMP_HANDLER(m); +} + +static void OpD2(void) // CMP (ZP) +{ + uint8 m = READ_IND_ZP; + OP_CMP_HANDLER(m); +} + +/* +CPX Immediate CPX #Oper E0 2 2 +Zero Page CPX Zpg E4 2 3 +Absolute CPX Abs EC 3 4 +*/ + +// CPX opcodes + +#define OP_CPX_HANDLER(m) \ + uint8 result = regs.x - (m); \ + SET_ZNC_CMP(m, regs.x, result) + +static void OpE0(void) // CPX # +{ + uint8 m = READ_IMM; + OP_CPX_HANDLER(m); +} + +static void OpE4(void) // CPX ZP +{ + uint8 m = READ_ZP; + OP_CPX_HANDLER(m); +} + +static void OpEC(void) // CPX ABS +{ + uint8 m = READ_ABS; + OP_CPX_HANDLER(m); +} + +/* +CPY Immediate CPY #Oper C0 2 2 +Zero Page CPY Zpg C4 2 3 +Absolute CPY Abs CC 3 4 +*/ + +// CPY opcodes + +#define OP_CPY_HANDLER(m) \ + uint8 result = regs.y - (m); \ + SET_ZNC_CMP(m, regs.y, result) + +static void OpC0(void) // CPY # +{ + uint8 m = READ_IMM; + OP_CPY_HANDLER(m); +} + +static void OpC4(void) // CPY ZP +{ + uint8 m = READ_ZP; + OP_CPY_HANDLER(m); +} + +static void OpCC(void) // CPY ABS +{ + uint8 m = READ_ABS; + OP_CPY_HANDLER(m); +} + +/* +DEA Accumulator DEA 3A 1 2 +*/ + +static void Op3A(void) // DEA +{ + regs.a--; + SET_ZN(regs.a); +} + +/* +DEC Zero Page DEC Zpg C6 2 5 +Zero Page,X DEC Zpg,X D6 2 6 +Absolute DEC Abs CE 3 6 +Absolute,X DEC Abs,X DE 3 7 +*/ + +// DEC opcodes + +#define OP_DEC_HANDLER(m) \ + m--; \ + SET_ZN(m) + +static void OpC6(void) // DEC ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_DEC_HANDLER(m); + WRITE_BACK(m); +} + +static void OpD6(void) // DEC ZP, X +{ + uint8 m; + READ_ZP_X_WB(m); + OP_DEC_HANDLER(m); + WRITE_BACK(m); +} + +static void OpCE(void) // DEC ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_DEC_HANDLER(m); + WRITE_BACK(m); +} + +static void OpDE(void) // DEC ABS, X +{ + uint8 m; + READ_ABS_X_WB(m); + OP_DEC_HANDLER(m); + WRITE_BACK(m); +} + +/* +Here's one problem: DEX is setting the N flag! + +D3EE: A2 09 LDX #$09 [PC=D3F0, SP=01F7, CC=---B-I-C, A=01, X=09, Y=08] +D3F0: 98 TYA [PC=D3F1, SP=01F7, CC=N--B-I-C, A=08, X=09, Y=08] +D3F1: 48 PHA [PC=D3F2, SP=01F6, CC=N--B-I-C, A=08, X=09, Y=08] +D3F2: B5 93 LDA $93,X [PC=D3F4, SP=01F6, CC=---B-IZC, A=00, X=09, Y=08] +D3F4: CA DEX [PC=D3F5, SP=01F6, CC=N--B-I-C, A=00, X=08, Y=08] +D3F5: 10 FA BPL $D3F1 [PC=D3F7, SP=01F6, CC=N--B-I-C, A=00, X=08, Y=08] +D3F7: 20 84 E4 JSR $E484 [PC=E484, SP=01F4, CC=N--B-I-C, A=00, X=08, Y=08] + +should be fixed now... +*/ + +/* +DEX Implied DEX CA 1 2 +*/ + +static void OpCA(void) // DEX +{ + regs.x--; + SET_ZN(regs.x); +} + +/* +DEY Implied DEY 88 1 2 +*/ + +static void Op88(void) // DEY +{ + regs.y--; + SET_ZN(regs.y); +} + +/* +EOR Immediate EOR #Oper 49 2 2 +Zero Page EOR Zpg 45 2 3 +Zero Page,X EOR Zpg,X 55 2 4 +Absolute EOR Abs 4D 3 4 +Absolute,X EOR Abs,X 5D 3 4 +Absolute,Y EOR Abs,Y 59 3 4 +(Zero Page,X) EOR (Zpg,X) 41 2 6 +(Zero Page),Y EOR (Zpg),Y 51 2 5 +(Zero Page) EOR (Zpg) 52 2 5 +*/ + +// EOR opcodes + +#define OP_EOR_HANDLER(m) \ + regs.a ^= m; \ + SET_ZN(regs.a) + +static void Op49(void) // EOR # +{ + uint8 m = READ_IMM; + OP_EOR_HANDLER(m); +} + +static void Op45(void) // EOR ZP +{ + uint8 m = READ_ZP; + OP_EOR_HANDLER(m); +} + +static void Op55(void) // EOR ZP, X +{ + uint8 m = READ_ZP_X; + OP_EOR_HANDLER(m); +} + +static void Op4D(void) // EOR ABS +{ + uint8 m = READ_ABS; + OP_EOR_HANDLER(m); +} + +static void Op5D(void) // EOR ABS, X +{ + uint8 m = READ_ABS_X; + OP_EOR_HANDLER(m); +} + +static void Op59(void) // EOR ABS, Y +{ + uint8 m = READ_ABS_Y; + OP_EOR_HANDLER(m); +} + +static void Op41(void) // EOR (ZP, X) +{ + uint8 m = READ_IND_ZP_X; + OP_EOR_HANDLER(m); +} + +static void Op51(void) // EOR (ZP), Y +{ + uint8 m = READ_IND_ZP_Y; + OP_EOR_HANDLER(m); +} + +static void Op52(void) // EOR (ZP) +{ + uint8 m = READ_IND_ZP; + OP_EOR_HANDLER(m); +} + +/* +INA Accumulator INA 1A 1 2 +*/ + +static void Op1A(void) // INA +{ + regs.a++; + SET_ZN(regs.a); +} + +/* +INC Zero Page INC Zpg E6 2 5 +Zero Page,X INC Zpg,X F6 2 6 +Absolute INC Abs EE 3 6 +Absolute,X INC Abs,X FE 3 7 +*/ + +// INC opcodes + +#define OP_INC_HANDLER(m) \ + m++; \ + SET_ZN(m) + +static void OpE6(void) // INC ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_INC_HANDLER(m); + WRITE_BACK(m); +} + +static void OpF6(void) // INC ZP, X +{ + uint8 m; + READ_ZP_X_WB(m); + OP_INC_HANDLER(m); + WRITE_BACK(m); +} + +static void OpEE(void) // INC ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_INC_HANDLER(m); + WRITE_BACK(m); +} + +static void OpFE(void) // INC ABS, X +{ + uint8 m; + READ_ABS_X_WB(m); + OP_INC_HANDLER(m); + WRITE_BACK(m); +} + +/* +INX Implied INX E8 1 2 +*/ + +static void OpE8(void) // INX +{ + regs.x++; + SET_ZN(regs.x); +} + +/* +INY Implied INY C8 1 2 +*/ + +static void OpC8(void) // INY +{ + regs.y++; + SET_ZN(regs.y); +} + +/* +JMP Absolute JMP Abs 4C 3 3 +(Absolute) JMP (Abs) 6C 3 5 +(Absolute,X) JMP (Abs,X) 7C 3 6 +*/ + +// JMP opcodes + +static void Op4C(void) // JMP ABS +{ + regs.pc = RdMemW(regs.pc); +} + +static void Op6C(void) // JMP (ABS) +{ +// uint16 addr = RdMemW(regs.pc); +//#ifdef __DEBUG__ +//WriteLog("\n[JMP ABS]: addr fetched = %04X, bytes at %04X = %02X %02X (RdMemw=%04X)\n", +// addr, addr, regs.RdMem(addr), regs.RdMem(addr+1), RdMemW(addr)); +//#endif +// addr = RdMemW(addr); + regs.pc = RdMemW(RdMemW(regs.pc)); +} + +static void Op7C(void) // JMP (ABS, X) +{ + regs.pc = RdMemW(RdMemW(regs.pc) + regs.x); +} + +/* +JSR Absolute JSR Abs 20 3 6 +*/ + +//This is not jumping to the correct address... !!! FIX !!! [DONE] +static void Op20(void) // JSR +{ + uint16 addr = RdMemW(regs.pc); + regs.pc++; // Since it pushes return address - 1... + regs.WrMem(0x0100 + regs.sp--, regs.pc >> 8); + regs.WrMem(0x0100 + regs.sp--, regs.pc & 0xFF); + regs.pc = addr; +} + +/* +LDA Immediate LDA #Oper A9 2 2 +Zero Page LDA Zpg A5 2 3 +Zero Page,X LDA Zpg,X B5 2 4 +Absolute LDA Abs AD 3 4 +Absolute,X LDA Abs,X BD 3 4 +Absolute,Y LDA Abs,Y B9 3 4 +(Zero Page,X) LDA (Zpg,X) A1 2 6 +(Zero Page),Y LDA (Zpg),Y B1 2 5 +(Zero Page) LDA (Zpg) B2 2 5 +*/ + +// LDA opcodes + +#define OP_LDA_HANDLER(m) \ + regs.a = m; \ + SET_ZN(regs.a) + +static void OpA9(void) // LDA # +{ + uint8 m = READ_IMM; + OP_LDA_HANDLER(m); +} + +static void OpA5(void) // LDA ZP +{ + uint8 m = READ_ZP; + OP_LDA_HANDLER(m); +} + +static void OpB5(void) // LDA ZP, X +{ + uint8 m = READ_ZP_X; + OP_LDA_HANDLER(m); +} + +static void OpAD(void) // LDA ABS +{ + uint8 m = READ_ABS; + OP_LDA_HANDLER(m); +} + +static void OpBD(void) // LDA ABS, X +{ + uint8 m = READ_ABS_X; + OP_LDA_HANDLER(m); +} + +static void OpB9(void) // LDA ABS, Y +{ + uint8 m = READ_ABS_Y; + OP_LDA_HANDLER(m); +} + +static void OpA1(void) // LDA (ZP, X) +{ + uint8 m = READ_IND_ZP_X; + OP_LDA_HANDLER(m); +} + +static void OpB1(void) // LDA (ZP), Y +{ + uint8 m = READ_IND_ZP_Y; + OP_LDA_HANDLER(m); +} + +static void OpB2(void) // LDA (ZP) +{ + uint8 m = READ_IND_ZP; + OP_LDA_HANDLER(m); +} + +/* +LDX Immediate LDX #Oper A2 2 2 +Zero Page LDX Zpg A6 2 3 +Zero Page,Y LDX Zpg,Y B6 2 4 +Absolute LDX Abs AE 3 4 +Absolute,Y LDX Abs,Y BE 3 4 +*/ + +// LDX opcodes + +#define OP_LDX_HANDLER(m) \ + regs.x = m; \ + SET_ZN(regs.x) + +static void OpA2(void) // LDX # +{ + uint8 m = READ_IMM; + OP_LDX_HANDLER(m); +} + +static void OpA6(void) // LDX ZP +{ + uint8 m = READ_ZP; + OP_LDX_HANDLER(m); +} + +static void OpB6(void) // LDX ZP, Y +{ + uint8 m = READ_ZP_Y; + OP_LDX_HANDLER(m); +} + +static void OpAE(void) // LDX ABS +{ + uint8 m = READ_ABS; + OP_LDX_HANDLER(m); +} + +static void OpBE(void) // LDX ABS, Y +{ + uint8 m = READ_ABS_Y; + OP_LDX_HANDLER(m); +} + +/* +LDY Immediate LDY #Oper A0 2 2 +Zero Page LDY Zpg A4 2 3 +Zero Page,Y LDY Zpg,X B4 2 4 +Absolute LDY Abs AC 3 4 +Absolute,Y LDY Abs,X BC 3 4 +*/ + +// LDY opcodes + +#define OP_LDY_HANDLER(m) \ + regs.y = m; \ + SET_ZN(regs.y) + +static void OpA0(void) // LDY # +{ + uint8 m = READ_IMM; + OP_LDY_HANDLER(m); +} + +static void OpA4(void) // LDY ZP +{ + uint8 m = READ_ZP; + OP_LDY_HANDLER(m); +} + +static void OpB4(void) // LDY ZP, X +{ + uint8 m = READ_ZP_X; + OP_LDY_HANDLER(m); +} + +static void OpAC(void) // LDY ABS +{ + uint8 m = READ_ABS; + OP_LDY_HANDLER(m); +} + +static void OpBC(void) // LDY ABS, X +{ + uint8 m = READ_ABS_X; + OP_LDY_HANDLER(m); +} + +/* +LSR Accumulator LSR A 4A 1 2 +Zero Page LSR Zpg 46 2 5 +Zero Page,X LSR Zpg,X 56 2 6 +Absolute LSR Abs 4E 3 6 +Absolute,X LSR Abs,X 5E 3 7 +*/ + +// LSR opcodes + +#define OP_LSR_HANDLER(m) \ + regs.cc = ((m) & 0x01 ? regs.cc | FLAG_C : regs.cc & ~FLAG_C); \ + (m) >>= 1; \ + CLR_N; SET_Z((m)) + +static void Op4A(void) // LSR A +{ + OP_LSR_HANDLER(regs.a); +} + +static void Op46(void) // LSR ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_LSR_HANDLER(m); + WRITE_BACK(m); +} + +static void Op56(void) // LSR ZP, X +{ + uint8 m; + READ_ZP_X_WB(m); + OP_LSR_HANDLER(m); + WRITE_BACK(m); +} + +static void Op4E(void) // LSR ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_LSR_HANDLER(m); + WRITE_BACK(m); +} + +static void Op5E(void) // LSR ABS, X +{ + uint8 m; + READ_ABS_X_WB(m); + OP_LSR_HANDLER(m); + WRITE_BACK(m); +} + +/* +NOP Implied NOP EA 1 2 +*/ + +static void OpEA(void) // NOP +{ +} + +/* +ORA Immediate ORA #Oper 09 2 2 +Zero Page ORA Zpg 05 2 3 +Zero Page,X ORA Zpg,X 15 2 4 +Absolute ORA Abs 0D 3 4 +Absolute,X ORA Abs,X 1D 3 4 +Absolute,Y ORA Abs,Y 19 3 4 +(Zero Page,X) ORA (Zpg,X) 01 2 6 +(Zero Page),Y ORA (Zpg),Y 11 2 5 +(Zero Page) ORA (Zpg) 12 2 5 +*/ + +// ORA opcodes + +#define OP_ORA_HANDLER(m) \ + regs.a |= m; \ + SET_ZN(regs.a) + +static void Op09(void) // ORA # +{ + uint8 m = READ_IMM; + OP_ORA_HANDLER(m); +} + +static void Op05(void) // ORA ZP +{ + uint8 m = READ_ZP; + OP_ORA_HANDLER(m); +} + +static void Op15(void) // ORA ZP, X +{ + uint8 m = READ_ZP_X; + OP_ORA_HANDLER(m); +} + +static void Op0D(void) // ORA ABS +{ + uint8 m = READ_ABS; + OP_ORA_HANDLER(m); +} + +static void Op1D(void) // ORA ABS, X +{ + uint8 m = READ_ABS_X; + OP_ORA_HANDLER(m); +} + +static void Op19(void) // ORA ABS, Y +{ + uint8 m = READ_ABS_Y; + OP_ORA_HANDLER(m); +} + +static void Op01(void) // ORA (ZP, X) +{ + uint8 m = READ_IND_ZP_X; + OP_ORA_HANDLER(m); +} + +static void Op11(void) // ORA (ZP), Y +{ + uint8 m = READ_IND_ZP_Y; + OP_ORA_HANDLER(m); +} + +static void Op12(void) // ORA (ZP) +{ + uint8 m = READ_IND_ZP; + OP_ORA_HANDLER(m); +} + +/* +PHA Implied PHA 48 1 3 +*/ + +static void Op48(void) // PHA +{ + regs.WrMem(0x0100 + regs.sp--, regs.a); +} + +static void Op08(void) // PHP +{ + regs.cc |= FLAG_UNK; // Make sure that the unused bit is always set + regs.WrMem(0x0100 + regs.sp--, regs.cc); +} + +/* +PHX Implied PHX DA 1 3 +*/ + +static void OpDA(void) // PHX +{ + regs.WrMem(0x0100 + regs.sp--, regs.x); +} + +/* +PHY Implied PHY 5A 1 3 +*/ + +static void Op5A(void) // PHY +{ + regs.WrMem(0x0100 + regs.sp--, regs.y); +} + +/* +PLA Implied PLA 68 1 4 +*/ + +static void Op68(void) // PLA +{ + regs.a = regs.RdMem(0x0100 + ++regs.sp); + SET_ZN(regs.a); +} + +static void Op28(void) // PLP +{ + regs.cc = regs.RdMem(0x0100 + ++regs.sp); +} + +/* +PLX Implied PLX FA 1 4 +*/ + +static void OpFA(void) // PLX +{ + regs.x = regs.RdMem(0x0100 + ++regs.sp); + SET_ZN(regs.x); +} + +/* +PLY Implied PLY 7A 1 4 +*/ + +static void Op7A(void) // PLY +{ + regs.y = regs.RdMem(0x0100 + ++regs.sp); + SET_ZN(regs.y); +} + +/* +The bit set and clear instructions have the form xyyy0111, where x is 0 to clear a bit or 1 to set it, and yyy is which bit at the memory location to set or clear. + RMB0 RMB1 RMB2 RMB3 RMB4 RMB5 RMB6 RMB7 + zp 07 17 27 37 47 57 67 77 + SMB0 SMB1 SMB2 SMB3 SMB4 SMB5 SMB6 SMB7 + zp 87 97 A7 B7 C7 D7 E7 F7 +*/ + +// RMB opcodes + +static void Op07(void) // RMB0 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0xFE; + WRITE_BACK(m); +} + +static void Op17(void) // RMB1 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0xFD; + WRITE_BACK(m); +} + +static void Op27(void) // RMB2 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0xFB; + WRITE_BACK(m); +} + +static void Op37(void) // RMB3 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0xF7; + WRITE_BACK(m); +} + +static void Op47(void) // RMB4 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0xEF; + WRITE_BACK(m); +} + +static void Op57(void) // RMB5 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0xDF; + WRITE_BACK(m); +} + +static void Op67(void) // RMB6 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0xBF; + WRITE_BACK(m); +} + +static void Op77(void) // RMB7 ZP +{ + uint8 m; + READ_ZP_WB(m); + m &= 0x7F; + WRITE_BACK(m); +} + +/* +ROL Accumulator ROL A 2A 1 2 +Zero Page ROL Zpg 26 2 5 +Zero Page,X ROL Zpg,X 36 2 6 +Absolute ROL Abs 2E 3 6 +Absolute,X ROL Abs,X 3E 3 7 +*/ + +// ROL opcodes + +#define OP_ROL_HANDLER(m) \ + uint8 tmp = regs.cc & 0x01; \ + regs.cc = ((m) & 0x80 ? regs.cc | FLAG_C : regs.cc & ~FLAG_C); \ + (m) = ((m) << 1) | tmp; \ + SET_ZN((m)) + +static void Op2A(void) // ROL A +{ + OP_ROL_HANDLER(regs.a); +} + +static void Op26(void) // ROL ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_ROL_HANDLER(m); + WRITE_BACK(m); +} + +static void Op36(void) // ROL ZP, X +{ + uint8 m; + READ_ZP_X_WB(m); + OP_ROL_HANDLER(m); + WRITE_BACK(m); +} + +static void Op2E(void) // ROL ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_ROL_HANDLER(m); + WRITE_BACK(m); +} + +static void Op3E(void) // ROL ABS, X +{ + uint8 m; + READ_ABS_X_WB(m); + OP_ROL_HANDLER(m); + WRITE_BACK(m); +} + +/* +ROR Accumulator ROR A 6A 1 2 +Zero Page ROR Zpg 66 2 5 +Zero Page,X ROR Zpg,X 76 2 6 +Absolute ROR Abs 6E 3 6 +Absolute,X ROR Abs,X 7E 3 7 +*/ + +// ROR opcodes + +#define OP_ROR_HANDLER(m) \ + uint8 tmp = (regs.cc & 0x01) << 7; \ + regs.cc = ((m) & 0x01 ? regs.cc | FLAG_C : regs.cc & ~FLAG_C); \ + (m) = ((m) >> 1) | tmp; \ + SET_ZN((m)) + +static void Op6A(void) // ROR A +{ + OP_ROR_HANDLER(regs.a); +} + +static void Op66(void) // ROR ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_ROR_HANDLER(m); + WRITE_BACK(m); +} + +static void Op76(void) // ROR ZP, X +{ + uint8 m; + READ_ZP_X_WB(m); + OP_ROR_HANDLER(m); + WRITE_BACK(m); +} + +static void Op6E(void) // ROR ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_ROR_HANDLER(m); + WRITE_BACK(m); +} + +static void Op7E(void) // ROR ABS, X +{ + uint8 m; + READ_ABS_X_WB(m); + OP_ROR_HANDLER(m); + WRITE_BACK(m); +} + +/* +RTI Implied RTI 40 1 6 +*/ + +static void Op40(void) // RTI +{ + regs.cc = regs.RdMem(0x0100 + ++regs.sp); + regs.pc = regs.RdMem(0x0100 + ++regs.sp); + regs.pc |= (uint16)(regs.RdMem(0x0100 + ++regs.sp)) << 8; +} + +/* +RTS Implied RTS 60 1 6 +*/ + +static void Op60(void) // RTS +{ + regs.pc = regs.RdMem(0x0100 + ++regs.sp); + regs.pc |= (uint16)(regs.RdMem(0x0100 + ++regs.sp)) << 8; + regs.pc++; // Since it pushes return address - 1... +//printf("*** RTS: PC = $%04X, SP= $1%02X\n", regs.pc, regs.sp); +//fflush(stdout); +} + +/* +SBC Immediate SBC #Oper E9 2 2 +Zero Page SBC Zpg E5 2 3 +Zero Page,X SBC Zpg,X F5 2 4 +Absolute SBC Abs ED 3 4 +Absolute,X SBC Abs,X FD 3 4 +Absolute,Y SBC Abs,Y F9 3 4 +(Zero Page,X) SBC (Zpg,X) E1 2 6 +(Zero Page),Y SBC (Zpg),Y F1 2 5 +(Zero Page) SBC (Zpg) F2 2 5 +*/ + +// SBC opcodes + +//This is non-optimal, but it works--optimize later. :-) +//This is correct except for the BCD handling... !!! FIX !!! [Possibly DONE] +#define OP_SBC_HANDLER(m) \ + uint16 sum = (uint16)regs.a - (m) - (uint16)((regs.cc & FLAG_C) ^ 0x01); \ +\ + if (regs.cc & FLAG_D) \ + { \ + if ((sum & 0x0F) > 0x09) \ + sum -= 0x06; \ +\ + if ((sum & 0xF0) > 0x90) \ + sum -= 0x60; \ + } \ +\ + regs.cc = (regs.cc & ~FLAG_C) | (((sum >> 8) ^ 0x01) & FLAG_C); \ + regs.cc = ((regs.a ^ (m)) & (regs.a ^ sum) & 0x80 ? regs.cc | FLAG_V : regs.cc & ~FLAG_V); \ + regs.a = sum & 0xFF; \ + SET_ZN(regs.a) + +/* +D5AF: 38 SEC [PC=D5B0, SP=01F6, CC=---B-I-C, A=4C, X=00, Y=06] + +*** HERE'S where it sets the D flag on a subtract... Arg! + +D5B0: F1 9D SBC ($9D),Y [PC=D5B2, SP=01F6, CC=N--BDI--, A=FE, X=00, Y=06] + +Fixed. :-) +*/ + +//OLD V detection: regs.cc = ((regs.a ^ (m) ^ sum ^ (regs.cc << 7)) & 0x80 ? regs.cc | FLAG_V : regs.cc & ~FLAG_V); + +static void OpE9(void) // SBC # +{ + uint16 m = READ_IMM; + OP_SBC_HANDLER(m); +} + +static void OpE5(void) // SBC ZP +{ + uint16 m = READ_ZP; + OP_SBC_HANDLER(m); +} + +static void OpF5(void) // SBC ZP, X +{ + uint16 m = READ_ZP_X; + OP_SBC_HANDLER(m); +} + +static void OpED(void) // SBC ABS +{ + uint16 m = READ_ABS; + OP_SBC_HANDLER(m); +} + +static void OpFD(void) // SBC ABS, X +{ + uint16 m = READ_ABS_X; + OP_SBC_HANDLER(m); +} + +static void OpF9(void) // SBC ABS, Y +{ + uint16 m = READ_ABS_Y; + OP_SBC_HANDLER(m); +} + +static void OpE1(void) // SBC (ZP, X) +{ + uint16 m = READ_IND_ZP_X; + OP_SBC_HANDLER(m); +} + +static void OpF1(void) // SBC (ZP), Y +{ + uint16 m = READ_IND_ZP_Y; + OP_SBC_HANDLER(m); +} + +static void OpF2(void) // SBC (ZP) +{ + uint16 m = READ_IND_ZP; + OP_SBC_HANDLER(m); +} + +/* +SEC Implied SEC 38 1 2 +*/ + +static void Op38(void) // SEC +{ + regs.cc |= FLAG_C; +} + +/* +SED Implied SED F8 1 2 +*/ + +static void OpF8(void) // SED +{ + regs.cc |= FLAG_D; +} + +/* +SEI Implied SEI 78 1 2 +*/ + +static void Op78(void) // SEI +{ + regs.cc |= FLAG_I; +} + +/* +The bit set and clear instructions have the form xyyy0111, where x is 0 to clear a bit or 1 to set it, and yyy is which bit at the memory location to set or clear. + RMB0 RMB1 RMB2 RMB3 RMB4 RMB5 RMB6 RMB7 + zp 07 17 27 37 47 57 67 77 + SMB0 SMB1 SMB2 SMB3 SMB4 SMB5 SMB6 SMB7 + zp 87 97 A7 B7 C7 D7 E7 F7 +*/ + +// SMB opcodes + +static void Op87(void) // SMB0 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x01; + WRITE_BACK(m); +} + +static void Op97(void) // SMB1 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x02; + WRITE_BACK(m); +} + +static void OpA7(void) // SMB2 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x04; + WRITE_BACK(m); +} + +static void OpB7(void) // SMB3 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x08; + WRITE_BACK(m); +} + +static void OpC7(void) // SMB4 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x10; + WRITE_BACK(m); +} + +static void OpD7(void) // SMB5 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x20; + WRITE_BACK(m); +} + +static void OpE7(void) // SMB6 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x40; + WRITE_BACK(m); +} + +static void OpF7(void) // SMB7 ZP +{ + uint8 m; + READ_ZP_WB(m); + m |= 0x80; + WRITE_BACK(m); +} + +/* +STA Zero Page STA Zpg 85 2 3 +Zero Page,X STA Zpg,X 95 2 4 +Absolute STA Abs 8D 3 4 +Absolute,X STA Abs,X 9D 3 5 +Absolute,Y STA Abs,Y 99 3 5 +(Zero Page,X) STA (Zpg,X) 81 2 6 +(Zero Page),Y STA (Zpg),Y 91 2 6 +(Zero Page) STA (Zpg) 92 2 5 +*/ + +// STA opcodes + +static void Op85(void) +{ + regs.WrMem(EA_ZP, regs.a); +} + +static void Op95(void) +{ + regs.WrMem(EA_ZP_X, regs.a); +} + +static void Op8D(void) +{ + regs.WrMem(EA_ABS, regs.a); + regs.pc += 2; +} + +static void Op9D(void) +{ + regs.WrMem(EA_ABS_X, regs.a); + regs.pc += 2; +} + +static void Op99(void) +{ + regs.WrMem(EA_ABS_Y, regs.a); + regs.pc += 2; +} + +static void Op81(void) +{ + regs.WrMem(EA_IND_ZP_X, regs.a); +} + +static void Op91(void) +{ + regs.WrMem(EA_IND_ZP_Y, regs.a); +} + +static void Op92(void) +{ + regs.WrMem(EA_IND_ZP, regs.a); +} + +/* +STX Zero Page STX Zpg 86 2 3 +Zero Page,Y STX Zpg,Y 96 2 4 +Absolute STX Abs 8E 3 4 +*/ + +// STX opcodes + +static void Op86(void) +{ + regs.WrMem(EA_ZP, regs.x); +} + +static void Op96(void) +{ + regs.WrMem(EA_ZP_X, regs.x); +} + +static void Op8E(void) +{ + regs.WrMem(EA_ABS, regs.x); + regs.pc += 2; +} + +/* +STY Zero Page STY Zpg 84 2 3 +Zero Page,X STY Zpg,X 94 2 4 +Absolute STY Abs 8C 3 4 +*/ + +// STY opcodes + +static void Op84(void) +{ + regs.WrMem(EA_ZP, regs.y); +} + +static void Op94(void) +{ + regs.WrMem(EA_ZP_X, regs.y); +} + +static void Op8C(void) +{ + regs.WrMem(EA_ABS, regs.y); + regs.pc += 2; +} + +/* +STZ Zero Page STZ Zpg 64 2 3 +Zero Page,X STZ Zpg,X 74 2 4 +Absolute STZ Abs 9C 3 4 +Absolute,X STZ Abs,X 9E 3 5 +*/ + +// STZ opcodes + +static void Op64(void) +{ + regs.WrMem(EA_ZP, 0x00); +} + +static void Op74(void) +{ + regs.WrMem(EA_ZP_X, 0x00); +} + +static void Op9C(void) +{ + regs.WrMem(EA_ABS, 0x00); + regs.pc += 2; +} + +static void Op9E(void) +{ + regs.WrMem(EA_ABS_X, 0x00); + regs.pc += 2; +} + +/* +TAX Implied TAX AA 1 2 +*/ + +static void OpAA(void) // TAX +{ + regs.x = regs.a; + SET_ZN(regs.x); +} + +/* +TAY Implied TAY A8 1 2 +*/ + +static void OpA8(void) // TAY +{ + regs.y = regs.a; + SET_ZN(regs.y); +} + +/* +TRB Zero Page TRB Zpg 14 2 5 +Absolute TRB Abs 1C 3 6 +*/ + +// TRB opcodes + +#define OP_TRB_HANDLER(m) \ + SET_Z(m & regs.a); \ + m &= ~regs.a + +static void Op14(void) // TRB ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_TRB_HANDLER(m); + WRITE_BACK(m); +} + +static void Op1C(void) // TRB ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_TRB_HANDLER(m); + WRITE_BACK(m); +} + +/* +TSB Zero Page TSB Zpg 04 2 5 +Absolute TSB Abs 0C 3 6 +*/ + +// TSB opcodes + +#define OP_TSB_HANDLER(m) \ + SET_Z(m & regs.a); \ + m |= regs.a + +static void Op04(void) // TSB ZP +{ + uint8 m; + READ_ZP_WB(m); + OP_TSB_HANDLER(m); + WRITE_BACK(m); +} + +static void Op0C(void) // TSB ABS +{ + uint8 m; + READ_ABS_WB(m); + OP_TSB_HANDLER(m); + WRITE_BACK(m); +} + +/* +TSX Implied TSX BA 1 2 +*/ + +static void OpBA(void) // TSX +{ + regs.x = regs.sp; + SET_ZN(regs.x); +} + +/* +TXA Implied TXA 8A 1 2 +*/ + +static void Op8A(void) // TXA +{ + regs.a = regs.x; + SET_ZN(regs.a); +} + +/* +TXS Implied TXS 9A 1 2 +*/ + +static void Op9A(void) // TXS +{ + regs.sp = regs.x; +} + +/* +TYA Implied TYA 98 1 2 +*/ +static void Op98(void) // TYA +{ + regs.a = regs.y; + SET_ZN(regs.a); +} + +static void Op__(void) +{ + regs.cpuFlags |= V65C02_STATE_ILLEGAL_INST; +} + + +// +// Ok, the exec_op[] array is globally defined here basically to save +// a LOT of unnecessary typing. Sure it's ugly, but hey, it works! +// +void (* exec_op[256])() = { + Op00, Op01, Op__, Op__, Op04, Op05, Op06, Op07, Op08, Op09, Op0A, Op__, Op0C, Op0D, Op0E, Op0F, + Op10, Op11, Op12, Op__, Op14, Op15, Op16, Op17, Op18, Op19, Op1A, Op__, Op1C, Op1D, Op1E, Op1F, + Op20, Op21, Op__, Op__, Op24, Op25, Op26, Op27, Op28, Op29, Op2A, Op__, Op2C, Op2D, Op2E, Op2F, + Op30, Op31, Op32, Op__, Op34, Op35, Op36, Op37, Op38, Op39, Op3A, Op__, Op3C, Op3D, Op3E, Op3F, + Op40, Op41, Op__, Op__, Op__, Op45, Op46, Op47, Op48, Op49, Op4A, Op__, Op4C, Op4D, Op4E, Op4F, + Op50, Op51, Op52, Op__, Op__, Op55, Op56, Op57, Op58, Op59, Op5A, Op__, Op__, Op5D, Op5E, Op5F, + Op60, Op61, Op__, Op__, Op64, Op65, Op66, Op67, Op68, Op69, Op6A, Op__, Op6C, Op6D, Op6E, Op6F, + Op70, Op71, Op72, Op__, Op74, Op75, Op76, Op77, Op78, Op79, Op7A, Op__, Op7C, Op7D, Op7E, Op7F, + Op80, Op81, Op__, Op__, Op84, Op85, Op86, Op87, Op88, Op89, Op8A, Op__, Op8C, Op8D, Op8E, Op8F, + Op90, Op91, Op92, Op__, Op94, Op95, Op96, Op97, Op98, Op99, Op9A, Op__, Op9C, Op9D, Op9E, Op9F, + OpA0, OpA1, OpA2, Op__, OpA4, OpA5, OpA6, OpA7, OpA8, OpA9, OpAA, Op__, OpAC, OpAD, OpAE, OpAF, + OpB0, OpB1, OpB2, Op__, OpB4, OpB5, OpB6, OpB7, OpB8, OpB9, OpBA, Op__, OpBC, OpBD, OpBE, OpBF, + OpC0, OpC1, Op__, Op__, OpC4, OpC5, OpC6, OpC7, OpC8, OpC9, OpCA, Op__, OpCC, OpCD, OpCE, OpCF, + OpD0, OpD1, OpD2, Op__, Op__, OpD5, OpD6, OpD7, OpD8, OpD9, OpDA, Op__, Op__, OpDD, OpDE, OpDF, + OpE0, OpE1, Op__, Op__, OpE4, OpE5, OpE6, OpE7, OpE8, OpE9, OpEA, Op__, OpEC, OpED, OpEE, OpEF, + OpF0, OpF1, OpF2, Op__, Op__, OpF5, OpF6, OpF7, OpF8, OpF9, OpFA, Op__, Op__, OpFD, OpFE, OpFF +}; + +// +// Internal "memcpy" (so we don't have to link with any external libraries!) +// +static void myMemcpy(void * dst, void * src, uint32 size) +{ + uint8 * d = (uint8 *)dst, * s = (uint8 *)src; + + for(uint32 i=0; icpuFlags &= ~V65C02_ASSERT_LINE_RESET; + regs.cpuFlags &= ~V65C02_ASSERT_LINE_RESET; + } + else if (regs.cpuFlags & V65C02_ASSERT_LINE_NMI) + { +#ifdef __DEBUG__ +WriteLog("\n*** NMI ***\n\n"); +#endif + regs.WrMem(0x0100 + regs.sp--, regs.pc >> 8); // Save PC and CC + regs.WrMem(0x0100 + regs.sp--, regs.pc & 0xFF); + regs.WrMem(0x0100 + regs.sp--, regs.cc); + regs.cc |= FLAG_I; // Set I + regs.cc &= ~FLAG_D; // & clear D + regs.pc = RdMemW(0xFFFA); // And do it! + + regs.clock += 7; + context->cpuFlags &= ~V65C02_ASSERT_LINE_NMI;// Reset the asserted line (NMI)... + regs.cpuFlags &= ~V65C02_ASSERT_LINE_NMI; // Reset the asserted line (NMI)... + } + else if (regs.cpuFlags & V65C02_ASSERT_LINE_IRQ) + { + if (!(regs.cc & FLAG_I)) // Process an interrupt (I=0)? + { +#ifdef __DEBUG__ +WriteLog("\n*** IRQ ***\n\n"); +#endif + regs.WrMem(0x0100 + regs.sp--, regs.pc >> 8); // Save PC and CC + regs.WrMem(0x0100 + regs.sp--, regs.pc & 0xFF); + regs.WrMem(0x0100 + regs.sp--, regs.cc); + regs.cc |= FLAG_I; // Set I + regs.cc &= ~FLAG_D; // & clear D + regs.pc = RdMemW(0xFFFE); // And do it! + + regs.clock += 7; + context->cpuFlags &= ~V65C02_ASSERT_LINE_IRQ; // Reset the asserted line (IRQ)... + regs.cpuFlags &= ~V65C02_ASSERT_LINE_IRQ; // Reset the asserted line (IRQ)... + } + } + } + + myMemcpy(context, ®s, sizeof(V65C02REGS)); +} + +// +// Get the clock of the currently executing CPU +// +uint32 GetCurrentV65C02Clock(void) +{ + return regs.clock; +} diff --git a/apple2/src/v65c02.h b/apple2/src/v65c02.h new file mode 100755 index 0000000..401b980 --- /dev/null +++ b/apple2/src/v65c02.h @@ -0,0 +1,55 @@ +// +// Virtual 65C02 Header file +// +// by James L. Hammons +// (c) 2005 Underground Software +// + +#ifndef __V65C02_H__ +#define __V65C02_H__ + +#include "types.h" + +// Useful defines + +#define FLAG_N 0x80 // Negative +#define FLAG_V 0x40 // oVerflow +#define FLAG_UNK 0x20 // ??? (always set when read?) +#define FLAG_B 0x10 // Break +#define FLAG_D 0x08 // Decimal +#define FLAG_I 0x04 // Interrupt +#define FLAG_Z 0x02 // Zero +#define FLAG_C 0x01 // Carry + +#define V65C02_ASSERT_LINE_RESET 0x0001 // v65C02 RESET line +#define V65C02_ASSERT_LINE_IRQ 0x0002 // v65C02 IRQ line +#define V65C02_ASSERT_LINE_NMI 0x0004 // v65C02 NMI line +#define V65C02_STATE_ILLEGAL_INST 0x0008 // Illegal instruction executed flag +//#define V65C02_START_DEBUG_LOG 0x0020 // Debug log go (temporary!) + +// Useful structs + +struct V65C02REGS +{ + uint16 pc; // 65C02 PC register + uint8 cc; // 65C02 Condition Code register + uint8 sp; // 65C02 System stack pointer (bound to $01xx) + uint8 a; // 65C02 A register + uint8 x; // 65C02 X index register + uint8 y; // 65C02 Y register + uint32 clock; // 65C02 clock + uint8 (* RdMem)(uint16); // Address of BYTE read routine + void (* WrMem)(uint16, uint8); // Address of BYTE write routine + uint16 cpuFlags; // v65C02 IRQ/RESET flags +}; + +// Global variables (exported) + +extern bool dumpDis; + +// Function prototypes + +void Execute65C02(V65C02REGS *, uint32); // Function to execute 65C02 instructions +uint32 GetCurrentV65C02Clock(void); // Get the clock of the currently executing CPU + +#endif // __V65C02_H__ diff --git a/apple2/src/video.cpp b/apple2/src/video.cpp new file mode 100755 index 0000000..082120e --- /dev/null +++ b/apple2/src/video.cpp @@ -0,0 +1,302 @@ +// +// VIDEO.CPP: SDL/local hardware specific video routines +// +// by James L. Hammons +// +// JLH = James L. Hammons +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JLH 01/04/2006 Added changelog ;-) +// JLH 01/20/2006 Cut out unnecessary buffering +// + +#include "video.h" + +//#include +#include // Why??? (for memset, etc... Lazy!) Dunno why, but this just strikes me as wrong... +#include +#include "sdlemu_opengl.h" +#include "log.h" +#include "settings.h" +#include "icon.h" + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN +#define MASK_R 0xFF000000 +#define MASK_G 0x00FF0000 +#define MASK_B 0x0000FF00 +#define MASK_A 0x000000FF +#else +#define MASK_R 0x000000FF +#define MASK_G 0x0000FF00 +#define MASK_B 0x00FF0000 +#define MASK_A 0xFF000000 +#endif + +//#define TEST_ALPHA_BLENDING + +// Exported global variables (actually, these are LOCAL global variables, EXPORTED...) + +SDL_Surface * surface, * mainSurface, * someAlphaSurface; +Uint32 mainSurfaceFlags; +//uint32 scrBuffer[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT]; +uint32 * scrBuffer = NULL; +SDL_Joystick * joystick; + +// +// Prime SDL and create surfaces +// +bool InitVideo(void) +{ + // Set up SDL library + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE) < 0) + { + WriteLog("Video: Could not initialize the SDL library: %s\n", SDL_GetError()); + return false; + } + + //Set icon (mainly for Win32 target--though seems to work under KDE as well...!) + SDL_Surface * iconSurf = SDL_CreateRGBSurfaceFrom(icon, 32, 32, 32, 128, + MASK_R, MASK_G, MASK_B, MASK_A); + SDL_WM_SetIcon(iconSurf, NULL); + SDL_FreeSurface(iconSurf); + + // Get proper info about the platform we're running on... + const SDL_VideoInfo * info = SDL_GetVideoInfo(); + + if (!info) + { + WriteLog("Video: SDL is unable to get the video info: %s\n", SDL_GetError()); + return false; + } + + if (settings.useOpenGL) + { + mainSurfaceFlags = SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF | SDL_OPENGL; + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + } + else + { + mainSurfaceFlags = SDL_DOUBLEBUF; + + if (info->hw_available) + { + mainSurfaceFlags = SDL_HWSURFACE | SDL_HWPALETTE; + WriteLog("Video: Hardware available...\n"); + } + + if (info->blit_hw) + { + mainSurfaceFlags |= SDL_HWACCEL; + WriteLog("Video: Hardware blit available...\n"); + } + } + + if (settings.fullscreen) + mainSurfaceFlags |= SDL_FULLSCREEN; + + // Create the primary SDL display (32 BPP) + if (!settings.useOpenGL) + mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags); + else +// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH * 2, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags); +// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags); + mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags); + + if (mainSurface == NULL) + { + WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError()); + return false; + } + + SDL_WM_SetCaption("Apple 2 SDL", "Apple 2 SDL"); + + // Create the secondary SDL display (32 BPP) that we use directly + surface = SDL_CreateRGBSurface(SDL_SWSURFACE, VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, + MASK_R, MASK_G, MASK_B, MASK_A); +/*WriteLog("Video: Created secondary surface with attributes:\n\n"); +WriteLog("\tWidth, height: %u x %u\n", surface->w, surface->h); +WriteLog("\t Pitch: %u\n", surface->pitch); +WriteLog("\t Palette: %08X\n", surface->format->palette); +WriteLog("\t BPP: %u\n", surface->format->BitsPerPixel); +WriteLog("\t BytesPP: %u\n", surface->format->BytesPerPixel); +WriteLog("\t RMask: %08X\n", surface->format->Rmask); +WriteLog("\t GMask: %08X\n", surface->format->Gmask); +WriteLog("\t BMask: %08X\n", surface->format->Bmask); +WriteLog("\t AMask: %08X\n", surface->format->Amask); +WriteLog("\n");//*/ + + if (surface == NULL) + { + WriteLog("Video: Could not create secondary SDL surface: %s\n", SDL_GetError()); + return false; + } + + if (settings.useOpenGL) + sdlemu_init_opengl(surface, mainSurface, 1 /*method*/, settings.glFilter /*texture type (linear, nearest)*/, + 0 /* Automatic bpp selection based upon src */); + + // Initialize Joystick support under SDL +/* if (settings.useJoystick) + { + if (SDL_NumJoysticks() <= 0) + { + settings.useJoystick = false; + WriteLog("Video: No joystick(s) or joypad(s) detected on your system. Using keyboard...\n"); + } + else + { + if ((joystick = SDL_JoystickOpen(settings.joyport)) == 0) + { + settings.useJoystick = false; + WriteLog("Video: Unable to open a Joystick on port: %d\n", (int)settings.joyport); + } + else + WriteLog("Video: Using: %s\n", SDL_JoystickName(settings.joyport)); + } + }//*/ + + // Set up the scrBuffer + scrBuffer = (uint32 *)surface->pixels; // Kludge--And shouldn't have to lock since it's a software surface... +//needed? Dunno. Mebbe an SDL function instead? +// memset(scrBuffer, 0x00, VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32)); + +#ifdef TEST_ALPHA_BLENDING +//Here's some code to test alpha blending... +//Well whaddya know, it works. :-) + someAlphaSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, 30, 30, 32, + MASK_R, MASK_G, MASK_B, MASK_A); + + for(int i=0; i<30; i++) + { + for(int j=0; j<30; j++) + { + uint32 color = (uint32)(((double)(i * j) / (29.0 * 29.0)) * 255.0); + color = (color << 24) | 0x00FF00FF; + ((uint32 *)someAlphaSurface->pixels)[(j * 30) + i] = color; + } + } +//End test code +#endif + + WriteLog("Video: Successfully initialized.\n"); + return true; +} + +// +// Free various SDL components +// +void VideoDone(void) +{ + if (settings.useOpenGL) + sdlemu_close_opengl(); + + SDL_JoystickClose(joystick); + SDL_FreeSurface(surface); + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER); + SDL_Quit(); +} + +// +// Render the screen buffer to the primary screen surface +// +//void RenderBackbuffer(void) +void RenderScreenBuffer(void) +{ +//WriteLog("Video: Blitting a %u x %u surface to the main surface...\n", surface->w, surface->h); +//Don't need this crapola--why have a separate buffer just to copy it to THIS +//buffer in order to copy it to the main screen? That's what *I* thought! +/* if (SDL_MUSTLOCK(surface)) + while (SDL_LockSurface(surface) < 0) + SDL_Delay(10); + + memcpy(surface->pixels, scrBuffer, VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32)); + + if (SDL_MUSTLOCK(surface)) + SDL_UnlockSurface(surface);//*/ +#ifdef TEST_ALPHA_BLENDING +SDL_Rect dstRect = { 100, 100, 30, 30 }; +SDL_BlitSurface(someAlphaSurface, NULL, surface, &dstRect); +#endif + + if (settings.useOpenGL) + sdlemu_draw_texture(mainSurface, surface, 1/*1=GL_QUADS*/); + else + { +// SDL_Rect rect = { 0, 0, surface->w, surface->h }; +// SDL_BlitSurface(surface, &rect, mainSurface, &rect); + SDL_BlitSurface(surface, NULL, mainSurface, NULL); + SDL_Flip(mainSurface); + } +} + +/* +// +// Resize the main SDL screen & scrBuffer +// +void ResizeScreen(uint32 width, uint32 height) +{ + char window_title[256]; + + SDL_FreeSurface(surface); + surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 16, + 0x7C00, 0x03E0, 0x001F, 0); + + if (surface == NULL) + { + WriteLog("Video: Could not create primary SDL surface: %s", SDL_GetError()); + exit(1); + } + + if (settings.useOpenGL) + // This seems to work well for resizing (i.e., changes in the pixel width)... + sdlemu_resize_texture(surface, mainSurface, settings.glFilter); + else + { + mainSurface = SDL_SetVideoMode(width, height, 16, mainSurfaceFlags); + + if (mainSurface == NULL) + { + WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError()); + exit(1); + } + } + + sWriteLog(window_title, "Virtual Jaguar (%i x %i)", (int)width, (int)height); + SDL_WM_SetCaption(window_title, window_title); + + // This seems to work well for resizing (i.e., changes in the pixel width)... +// if (settings.useOpenGL) +// sdlemu_resize_texture(surface, mainSurface); +}*/ + +/* +// +// Fullscreen <-> window switching +// +//NOTE: This does *NOT* work with OpenGL rendering! !!! FIX !!! +void ToggleFullscreen(void) +{ + settings.fullscreen = !settings.fullscreen; + mainSurfaceFlags &= ~SDL_FULLSCREEN; + + if (settings.fullscreen) + mainSurfaceFlags |= SDL_FULLSCREEN; + + if (!settings.useOpenGL) + mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags); + else +// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH * 2, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags); +// mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT * 2, 32, mainSurfaceFlags); + mainSurface = SDL_SetVideoMode(VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT, 32, mainSurfaceFlags); +// mainSurface = SDL_SetVideoMode(tom_width, tom_height, 16, mainSurfaceFlags); + + if (mainSurface == NULL) + { + WriteLog("Video: SDL is unable to set the video mode: %s\n", SDL_GetError()); + exit(1); + } + + SDL_WM_SetCaption("Apple 2 SDL", "Apple 2 SDL"); +} +//*/ diff --git a/apple2/src/video.h b/apple2/src/video.h new file mode 100755 index 0000000..ca5fb1b --- /dev/null +++ b/apple2/src/video.h @@ -0,0 +1,30 @@ +// +// VIDEO.H: Header file +// + +#ifndef __VIDEO_H__ +#define __VIDEO_H__ + +#include // For SDL_Surface +#include "types.h" // For uint32 + +//#define VIRTUAL_SCREEN_WIDTH 280 +#define VIRTUAL_SCREEN_WIDTH 560 +//#define VIRTUAL_SCREEN_HEIGHT 192 +#define VIRTUAL_SCREEN_HEIGHT 384 + +bool InitVideo(void); +void VideoDone(void); +//void RenderBackbuffer(void); +void RenderScreenBuffer(void); +//void ResizeScreen(uint32 width, uint32 height); +//uint32 GetSDLScreenPitch(void); +//void ToggleFullscreen(void); + +// Exported crap + +//extern uint32 scrBuffer[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT]; +extern uint32 * scrBuffer; +extern SDL_Surface * surface; + +#endif // __VIDEO_H__